[ELMA3] Запись в контекстную переменную элемента типа документ 1С
Сценарий для записи элемента документа 1С в контекстную переменную бизнес-процесса "Документ 1С" типа документ 1С «Исполнительный лист». В случае, если работа с документом из системы 1С происходит в течении всего процесса, удобно загрузить этот документ в контекстную переменную. Реализовать данный функционал возможно при помощи специального сценария, работающего при настроенной интеграции с 1С. Справочная статья по данной настройке.
Рассмотрим два варианта возможной реализации: загрузка элемента по номеру (метод LoadDocumentByNumber) и загрузка элемента с помощью COM-объекта (метод LoadDocumentByComObject). Для корректной работы сценариев необходимо подключить сборки:
EleWise.ELMA.Integration1C
Microsoft.CSharp
Сборки подключаются в модуле сценариев, в разделе Настройки - Добавить - Добавить ссылку на сборку.
Пространства имен:
1 2 3 4 5 6 7 | using EleWise.ELMA.Integration1C; using EleWise.ELMA.Integration1C.Data; using EleWise.ELMA.Integration1C.V81; using EleWise.ELMA.Model.Entities; using EleWise.ELMA.Model.Managers; using EleWise.ELMA.Model.Services; using EleWise.ELMA.Services; |
Загрузка элемента по номеру
Для удобства в процесс добавлены две контекстные переменные – Номер и Дата – обе переменные типа Строка. Данный сценарий инициализирует службы интеграции с 1С, подключается к конкретной конфигурации в соответствии с настройками интеграции и загружает документ по его номеру и дате. В примере значения берутся из контекстных переменных.
Пример сценария с использованием PublicAPI
Текст сценария:
1 2 | var provider = PublicAPI.Services.Integration1C.GetProvider( "IBase" ); // Указываем имя конфигурации, к которой подключаемся context.Dokum1s = provider.LoadDocumentByNumber<EleWise.ELMA.Integration1C.Configs.IBase.IspolniteljnyyList>(context.Nomer, context.Data); //Загружаем документ по номеру и дате |
Пример сценария без использования PublicAPI
Текст сценария:
1 2 3 | var service = Locator.GetServiceNotNull<Integration1CService>(); //инициализируем службу интеграции с конфигурацией 1с var provider = service.GetProvider( "IBase" ); // Указываем имя конфигурации, к которой подключаемся context.Dokum1s = provider.LoadDocumentByNumber<EleWise.ELMA.Integration1C.Configs.IBase.IspolniteljnyyList>(context.Nomer, context.Data); //Загружаем документ по номеру и дате |
Загрузка с помощью COM-объекта
В примере метод реализует поиск документа по его реквизиту, также можно использовать и другие способы поиска (например, НайтиПоНомеру и др.). Данный сценарий также инициалирует службу подключения к 1С и подключается к конкретной конфигурации. Далее в сценарии обращаемся к менеджеру документов DocumentManager и его методу НайтиПоРеквизиту, в свойствах которого указываем имя атрибута и искомое значение. В результате итог записываем при помощи специально созданного элемента ComObject в контекстную переменную.
Пример сценария с использованием PublicAPI
Текст сценария:
1 2 3 4 5 6 7 | var service = PublicAPI.Services.Integration1C; //инициализируем службу интеграции с конфигурацией 1с ComObject ComOb = service.GetComConnector( "IBase" ); //инициализируем COM объект var provider = service.GetProvider( "IBase" ); dynamic DokRef = ComOb.GetFunctionValue( "NewObject" , "DocumentManager.ИсполнительныйЛист" ); // Указываем для работы конкретный тип документа 1с из менеджера документов var dok1 = DokRef.НайтиПоРеквизиту( "Размер" , context.Chislo).ПолучитьОбъект(); //Осуществялем поиск по реквизиту «Размер», передаем в него данные для поиска из переменной «Число» var CO = new ComObject(dok1); //Добавляем COM объект на основе найденной ссылки context.Dokum1s = provider.LoadDocumentByComObject<EleWise.ELMA.Integration1C.Configs.IBase.IspolniteljnyyList>(CO); //загружаем элемент в контекстную переменную. |
Пример сценария без использования PublicAPI
Текст сценария:
1 2 3 4 5 6 7 | var service = Locator.GetServiceNotNull<Integration1CService>(); //инициализируем службу интеграции с конфигурацией 1с ComObject ComOb = service.GetComConnector( "IBase" ); //инициализируем COM объект var provider = service.GetProvider( "IBase" ); dynamic DokRef = ComOb.GetFunctionValue( "NewObject" , "DocumentManager.ИсполнительныйЛист" ); // Указываем для работы конкретный тип документа 1с из менеджера документов var dok1 = DokRef.НайтиПоРеквизиту( "Размер" ,context.Chislo).ПолучитьОбъект(); //Осуществялем поиск по реквизиту «Размер», передаем в него данные для поиска из переменной «Число» var CO = new ComObject(dok1); //Добавляем COM объект на основе найденной ссылки context.Dokum1s = provider.LoadDocumentByComObject<EleWise.ELMA.Integration1C.Configs.IBase.IspolniteljnyyList>(CO); //загружаем элемент в контекстную переменную. |