[ELMA3] Запись в контекстную переменную элемента типа документ 1С
Сценарий для записи элемента документа 1С в контекстную переменную бизнес-процесса "Документ 1С" типа документ 1С «Исполнительный лист». В случае, если работа с документом из системы 1С происходит в течении всего процесса, удобно загрузить этот документ в контекстную переменную. Реализовать данный функционал возможно при помощи специального сценария, работающего при настроенной интеграции с 1С. Справочная статья по данной настройке.
Рассмотрим два варианта возможной реализации: загрузка элемента по номеру (метод LoadDocumentByNumber) и загрузка элемента с помощью COM-объекта (метод LoadDocumentByComObject). Для корректной работы сценариев необходимо подключить сборки:
EleWise.ELMA.Integration1C
Microsoft.CSharp
Сборки подключаются в модуле сценариев, в разделе Настройки - Добавить - Добавить ссылку на сборку.
Пространства имен:
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
Текст сценария:
var provider = PublicAPI.Services.Integration1C.GetProvider("IBase");// Указываем имя конфигурации, к которой подключаемся context.Dokum1s = provider.LoadDocumentByNumber<EleWise.ELMA.Integration1C.Configs.IBase.IspolniteljnyyList>(context.Nomer, context.Data);//Загружаем документ по номеру и дате
Пример сценария без использования PublicAPI
Текст сценария:
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
Текст сценария:
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
Текст сценария:
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);//загружаем элемент в контекстную переменную.