Powershell выполнение команд 1с через com
Вот так, легко и просто можно вытащить все данные отчетов о продажах
Посмотрим, что же у нас теперь в переменной $vigruzka
Ясно, понятно. Каждая ячейка результата запроса, это com-объект.
Преобразуем в нормальный вид.
Теперь все нужные данные находятся в структурированном виде, осталось только получить данные из ЛК ОФД, для того чтобы сверить.
Никогда ранее не имел опыта в парсинге сайтов, поэтому результат выглядел довольно туманно.
Инструментом для парсинга, был выбран командлет Invoke-WebRequest
Изначально пошел сложным путем, пытался парсить сайт, получая HTML и делая Request-ы по полученным линкам,
но процесс остановился, когда на одной из страниц, данные формировались динамически, и в полученном HTML их естественно не было.
После обращения в тех. поддержку ОФД, выяснилось, что ОФД предоставляет публичный API, и от них была получена документация методов.
Я предполагаю, что все ОФД должны предоставлять сей функционал.
Почитав документацию, я обрадовался и понял, что дело в шляпе.
Собственно потребуется использование всего 2-ух методов
Первый для логина в личном кабинете, результатом которого будет Токен доступа.
Ну и собственно второй, получение данных выручки
И первому и второму нужно передавать структуру типа JSON, и первый и второй в JSON-e возвращает результат
Powershell c этим работает на ура
Здесь единственным, неудобством были параметры для запроса, запрос выполняется по 2-ум параметрам:
Номер смены (его легко получить из 1С)
Номер фискального накопителя - вот тут возникла проблема, в отчете о розничных продажах его нет, дополнительных регистров под это тоже не создавалось.
Я не стал изобретать велосипед и просто захардкодил словарем типа
Имя кассы=Номер фискльного накопителя
Примерно так
При корректном запросе мы получим СтатусКод = 200
Если мы его получили, то можно выполнять основной запрос.
Таким образом в переменной $list у нас теперь находятся необходимые данные
Windows PowerShell — расширяемое средство автоматизации от Microsoft , состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев .
На текущий момент я знаю пару способов работы в 1С с PowerShell:
1) Самый простой, это просто запустить написанный скрипт:
2) Установить бесплатный activex от sapien . И работать по COM.
3а) Самому сделать web сервер и написать код в 1C для взаимодействия.
Рассматривать первый вариант мы не будем. Здесь нет программирования в принципе, но для начинающих программистов это единственный выход.
Использовать платную разработку я бы не стал, а самому делать web сервер нужно еще научиться.
Поэтому вариант с работой по COM идеальное решение!
Итак, с чего же начать!
Вам понадобится пакет установки ActiveXPoshV3:
Для работы на стороне клиента, т.е. в пользовательском режиме установите 32-битную версию. А для работы и на сервере, например в регламентном задании 64-битную версию.
Так же возможно вам придется зарегистрировать компоненты через regasm 32-битный в папке Framework , 64-битный в Framework64.
Далее для надежности перезагружаем сервер. Все, можно создавать COM-объект.
Важно! Не забывайте для корректной работы у вас должны быть соответсвующие права в системе!
Работа в 1С
Пример работы с компонентой описан в файле ActiveXposhV3.vbs. Этот файл будет находиться в папке, где вы установили ActiveXposh.
Прочитав код, можно написать в 1С примерно такое:
Данная компонента поддерживает выполнение следующих команд:
ClearOutput() - Этот метод очищает внутренний буфер вывода.
Execute(strcommand) - Выполняет команду PowerShell или сценария.
Eval(strExpression) - Вычисляет выражение PowerShell.
Init(execProfile) - Первоначальный вызов экземпляра движка PowerShell.
IsPowerShellInstalled - Возвращает Истина / Ложь.
Output - Коллекция строк заполнены с выходом из PowerShell команды.
OutputString - Содержание буфера вывода в виде одной строки.
OutputMode - Устанавливает или получает режим вывода результата.
OutputWidth - Задает или получает желаемую ширину выходного результата.
Оригинал:
ClearOutput() - This method clears the internal output buffer.
Execute(strcommand) - Executes a PowerShell command or script.
Eval(strExpression) - Evaluates a PowerShell expression.
Init(execProfile) - Initial call to instantiate a PowerShell engine.
IsPowerShellInstalled - Returns True/False.
Output - A collection of strings filled with output from PowerShell commands.
OutputString - The content of the output buffer as a single string.
OutputMode - Sets or gets the current output mode.
OutputWidth - Sets or gets the desired output width.
Обработка изнутри
Разработка представляет собой набор кода для работы PowerShell в 1С, используя компоненту "SAPIEN.ActiveXPoSHV3" через COM.
Особенностью разработки является возможность работы с удаленной командной консолью MS Exchange. Это позволяет с сервера 1С подключиться к почтовому серверу MS Exchange и продолжить работу PowerShell на нем.
Так же в разработку встроен код универсального парсера CSV-файлов. Это помогает решить специфическую задачу, получения всех данных после выполнения сценария PowerShell в читаемой таблице 1С.
Т.е. что происходит. Вы написали сценарий PowerShell, результат выгрузили в файл CSV. И затем загрузили эти данные на экран в удобном виде.
Благодарности
Особая благодарность пользователю cool.vlad4. Очень помог с первоначальной настройкой и примером кода.
Также выражаю благодарность всем толковым админам. Без вашей помощи запускать компоненты на сервере очень сложно!
Обновление от 09.11.2015
Добавлены реквизиты периода.
Для ознакомления добавлены кнопки для записи регистра сведений (заполнение измерений) и полной очистки самого регистра сведений.
Полезного тут наверно только метод скрытия окошка скрипта, это весь текст до "$connector = new-object -comobject "V81.COMConnector"", а все что после - это работа с 1С через COM - думаю уже не раз обсуждалось.
Может кому, что и пригодится, скрипт можно вставлять в планировщик например, или кинуть ярлык пользователю, чтоб одним щелчком запускалась заложенная процедура. Удачи всем!
P.S. Текст скрипта для гостей:
Специальные предложения
Отдельное спасибо за избавление от "чёрного окошка".
Просмотры 20433
Загрузки 36
Рейтинг 12
Создание 23.09.11 21:00
Обновление 26.09.11 11:27
№ Публикации 91715
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
54-ФЗ: Онлайн-кассы для 1С 7.7 (с поддержкой маркировки ЕГАИС, ТАБАКА, ОБУВИ, ЛЕКАРСТВ и пр.)См. также
Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо
Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.
1 стартмани
22.10.2014 225304 4384 ekaruk 186
У вас "Ошибка преобразования данных XML" или "Error transforming XML data"? Решение
Рассмотрим варианты возникновения данной ошибки и рассмотрим способ решения, одной из причин.
2 стартмани
01.11.2021 1049 0 markers 0
Восстановление РИБа, ошибки РИБ на управляемых формах, создание начального образа с файлами
Ошибка при вызове метода контекста (ПрочитатьИзменения): Данные принимаются от узла с другим набором расширений, меняющих структуру данных. Необходимо произвести перенос расширений конфигурации в узел. При выгрузки первоначального образа вылетает по не понятным причинам.
1 стартмани
22.10.2021 740 0 user1479207 0
Восстановление 1С РИБ (распределенная база) при проблемах обмена конфигураций и расширений
Работая с 1С РИБами в разных конфигурациях: типовых, переписанных, отраслевых, доработанных, с расширениями и пр. Неоднократно сталкивался с различными проблемами, связанными с обменом в распределенных узлах. Например, некорректно проходит обмен, не принимается обновления конфигурации, после обновления крашится база на расширении или на объекте конфигурации, либо просто перестает запускать в режим предприятия по какой то причине. На самом деле проблемы с распределенной базой возникают довольно часто, в данной статье рассмотрим самые основные, с которыми приходилось сталкиваться. Описанные методы никогда не подводили и всегда работали, что бы с базой ни случилось. Делюсь опытом, кому-то будет спасательным кругом.
1 стартмани
23.09.2021 1054 12 ClickUp 4
Соответствия объектов обмена Промо
Обработка позволяет проверять, исправлять ошибки, добавлять и удалять соответствия объектов в обменах данными между конфигурациями на основе «Комплексной автоматизации 1.1» или похожими конфигурациям. Подходит для обменов с использованием регистра сведений «СоответствиеОбъектовДляОбмена».
Прошу сильно не пинать. С 1Ской на уровне кода никогда не работал. По профессии сисадмин. На просторах интернета нарыл несколько статей как общаться с 1Ской без ком-соединение. Пока разродился вот на такой код:
На данный момент хочу просто разобраться как это всё работает. Как получить значение переменных $cats, $nod, $fnd, $ref, $pod? Get-Member выдает только стандартные методы для этих переменных:
Если подскажите как вызвать процедуру в 1Ске и получить результат ее выполнения - было бы просто супер.
Буду признателен за любую помощь. __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Глючит соединение с интернетом. Не открываются сайты, не удается установить DNS соединение
Добрый день! Помогите разобраться с проблемой. Есть сеть из 30 ПК, последнее 7 дней стал глючить.
Соединение с БД (соединение через сеть)
Доброго времени суток. Помогите пожалуйста новичку. Создал в Visual Studio Net 2010 C++ проект с.
Базовое соединение закрыто: Соединение было неожиданно закрыто
Здравствуйте. У меня возникла такая проблема, что при вызове метода soap веб-сервиса соединение.
Базовое соединение закрыто: Соединение было неожиданно закрыто
Доброго времени суток, пытаюсь подключиться к сайту таким образом. Uri uri = new.
ronaldo-nn, Судя по всему у Вас в последней строке не хватает какого-то параметра при вызове метода
"ВыполнитьОбменДаннымиПоПроизвольнойНастройке"
По поводу получения значения переменных: Все ваши переменные это ком-объекты. В свое время тоже решал эту проблему. Решил, но не помню как. Щас пороюсь в закромах сценариев, возможно отыщу.
Добавлено через 15 минут
ronaldo-nn, По поводу справочника, если это у Вас типовой справочник, то
Результат поиска можно получить так
Читайте также: