logo

[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

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.

Текст сценария:

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

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA с 3.8 включительно до 3.12.1 включительно.

Текст сценария:

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);//загружаем элемент в контекстную переменную.