[ELMA3] Получение остатков из регистра накопления 1С
В приведенном примере рассматривается процесс подсчета остатков материалов (элементы справочника «Номенклатура»). Пользователь в системе ELMA заполняет блок с материалами, выбирая их из справочника 1С «Номенклатура», получает остатки материалов на складах на заданную или текущую дату. Информация получается отбором по регистру накопления «Остатки материалов».
Схема процесса
Цель достигается двумя способами: с использованием методов менеджера регистра, с использованием запроса.
Контекст процесса:
- Data, дата;
- MaterialsList, блок;
- Material, номенклатура (Справочник 1С);
- Count, строка
Структура регистра накопления «Остатки материалов»:
Для работы сценариев необходимо подключить сборку Microsoft.CSharp, и пространства имен:
1 2 3 4 5 6 7 | using EleWise.ELMA.CRM.Models; using EleWise.ELMA.Integration1C; using EleWise.ELMA.Integration1C.Data; using EleWise.ELMA.Security.Models; using EleWise.ELMA.Security.Services; using EleWise.ELMA.Services; using EleWise.ELMA.Integration1C.V81; |
На старте процесса заполняется блок с материалами, выбирается дата.
Сценарий с использованием методов менеджера регистра
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public void Script1(Context context) { //Получаем доступ к 1С var service = Locator.GetServiceNotNull<Integration1CService>(); //Инициализация подключения "1Ssys" ComObject connector = service.GetComConnector( "1Ssys" ); //Получаем доступ к справочнику "Номенклатура" dynamic reference = connector.GetFunctionValue( "NewObject" , "CatalogManager.Номенклатура" ); //Получаем доступ к менеджеру регистров накопления dynamic register = connector.GetFunctionValue( "NewObject" , "AccumulationRegistersManager" ); //Перебираем заполненные в блоке значения foreach (var item in context.MaterialsList) { //Получаем объект "Структура", в дальнейшем используем ее как фильтр. dynamic structure = connector.GetFunctionValue( "NewObject" , "Структура" ); var obj = reference.НайтиПоКоду(item.Material.Kod).ПолучитьОбъект(); structure.Вставить( "Материал" , obj.ссылка); //Получаем остатки var count = register.ОстаткиМатериалов.Остатки(context.Data, structure, "Материал" ); try { //Присваиваем значение элементу блока item.Count = count.Получить(0).Количетсво.ToString(); } catch { //Присваиваем значение "Не найдено", если данных не найдено. item.Count = "Не найдено" ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public void Script1(Context context) { //Получаем доступ к 1С //Инициализация подключения "1Ssys" ComObject connector = PublicAPI.Services.Integration1C.GetComConnector( "1Ssys" ); //Получаем доступ к справочнику "Номенклатура" dynamic reference = connector.GetFunctionValue( "NewObject" , "CatalogManager.Номенклатура" ); //Получаем доступ к менеджеру регистров накопления dynamic register = connector.GetFunctionValue( "NewObject" , "AccumulationRegistersManager" ); //Перебираем заполненные в блоке значения foreach (var item in context.MaterialsList) { //Получаем объект "Структура", в дальнейшем используем ее как фильтр. dynamic structure = connector.GetFunctionValue( "NewObject" , "Структура" ); var obj = reference.НайтиПоКоду(item.Material.Kod).ПолучитьОбъект(); structure.Вставить( "Материал" , obj.ссылка); //Получаем остатки var count = register.ОстаткиМатериалов.Остатки(context.Data, structure, "Материал" ); try { //Присваиваем значение элементу блока item.Count = count.Получить(0).Количетсво.ToString(); } catch { //Присваиваем значение "Не найдено", если данных не найдено. item.Count = "Не найдено" ; } } } |
Сценарий с использованием запроса
В данном запросе будут получены остатки на текущую дату.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public void Script2(Context context) { //Получаем доступ к 1С var service = Locator.GetServiceNotNull<Integration1CService>(); //Инициализация подключения "1Ssys" ComObject connector = service.GetComConnector( "1Ssys" ); //Перебираем заполненные в блоке значения foreach (var item in context.MaterialsList) { //Формируем запрос и получаем значения string ТекстЗапроса = "ВЫБРАТЬ " + "ОстаткиМатериаловОстатки.Материал.Ссылка, " + "ОстаткиМатериаловОстатки.Склад.Ссылка, " + "ОстаткиМатериаловОстатки.КоличетсвоОстаток " + "ИЗ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки " + "ГДЕ ОстаткиМатериаловОстатки.Материал.Код = \"" + item.Material.Kod + "\"" ; dynamic Запрос = connector.GetFunctionValue( "NewObject" , "Запрос" ); Запрос.Текст = ТекстЗапроса; dynamic Результат = connector.GetFunctionValue( "NewObject" , "ТаблицаЗначений" ); Результат = Запрос.Выполнить().Выгрузить(); try { //Присваиваем значение элементу блока item.Count = Результат.Получить(0).КоличетсвоОстаток.ToString(); } catch { //Присваиваем значение "Не найдено", если данных не найдено. item.Count = "Не найдено" ; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public void Script2(Context context) { //Получаем доступ к 1С //Инициализация подключения "1Ssys" ComObject connector = PublicAPI.Services.Integration1C.GetComConnector( "1Ssys" ); //Перебираем заполненные в блоке значения foreach (var item in context.MaterialsList) { //Формируем запрос и получаем значения string ТекстЗапроса = "ВЫБРАТЬ " + "ОстаткиМатериаловОстатки.Материал.Ссылка, " + "ОстаткиМатериаловОстатки.Склад.Ссылка, " + "ОстаткиМатериаловОстатки.КоличетсвоОстаток " + "ИЗ РегистрНакопления.ОстаткиМатериалов.Остатки КАК ОстаткиМатериаловОстатки " + "ГДЕ ОстаткиМатериаловОстатки.Материал.Код = \"" + item.Material.Kod + "\"" ; dynamic Запрос = connector.GetFunctionValue( "NewObject" , "Запрос" ); Запрос.Текст = ТекстЗапроса; dynamic Результат = connector.GetFunctionValue( "NewObject" , "ТаблицаЗначений" ); Результат = Запрос.Выполнить().Выгрузить(); try { //Присваиваем значение элементу блока item.Count = Результат.Получить(0).КоличетсвоОстаток.ToString(); } catch { //Присваиваем значение "Не найдено", если данных не найдено. item.Count = "Не найдено" ; } } } |
В результате получаем сведения об остатках на складах.
Аналогичным образом можно получить, к примеру, обороты регистра.