Исполнение запросов в 1С из сценария ELMA
Описанный в данной статье метод работы с запросами 1С может быть применен при интеграции для получения произвольных данных из 1С.
Запросы 1С – это способ получения данных из БД 1С. Язык запросов 1С – это отдельный язык, схожий с SQL-запросами, но имеющий некоторые отличия. Язык запросов 1С имеет синтаксис на английском и русском языках. В случае использования английского языка запросы схожи со стандартными SQL-запросами.
Работа с запросами 1С происходит в несколько этапов:
- составление запроса;
- подстановка параметров в запрос;
- исполнение запроса;
- обработка результатов запроса.
В статье будет рассмотрен пример работы с запросом 1C через COMconnector.
Описание сценария
В качестве примера будет рассмотрен случай, когда необходимо получить перечень Договоров Контрагента, зная самого Контрагента. В качестве исходных данных имеются:
- Kontragent1C – контекстная переменная, содержащая переменную типа Справочник 1С Контрагенты;
- dogovory – контекстная переменная типа Выпадающий список, в которую будет записан результат запроса для отображения пользователю;
- УПП (8.2) – наименование подключаемой конфигурации 1С.
В сценарии будет произведено подключение к 1С, создание нового объект 1С типа Запрос, исполнение запроса, создание нового объекта 1С типа Таблица значений, запись результата запроса в таблицу значений, обработка полученного результата, запись результата в выпадающий список.
Используемое пространство имен:
1 2 3 4 | using EleWise.ELMA.Services; using EleWise.ELMA.Integration1C; using EleWise.ELMA.Integration1C.Data; using EleWise.ELMA.Integration1C.V82; |
Подключаемые сборки:
EleWise.ELMA.Integration1C
Microsoft.CSharp
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 33 34 35 | public void addDDLDogovor(Context context) // заполнение выпадающего списка договоров { //Инициализация подключения к 1с. var service = Locator.GetServiceNotNull<Integration1CService>(); ComObject connector = service.GetComConnector( "УПП(8.2)" ); //Получение кода элемента справочника 1с Контрагенты. Код будет использован в качестве параметра в запросе. string kodKontragent1c = context.Kontragent1S.Kod; //Cоставление текста запроса на языка запросов 1С, в качестве параметра использован код Контрагента string ТекстЗапроса = "ВЫБРАТЬ ДоговорыКонтрагентов.Код, ДоговорыКонтрагентов.Наименование " + "ИЗ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов " + "ГДЕ ДоговорыКонтрагентов.Владелец.ГоловнойКонтрагент.Код = \"" + kodKontragent1c + "\"" ; //Создание нового объекта типа Запрос dynamic Запрос = connector.GetFunctionValue( "NewObject" , "Запрос" ); //Заносим текст запроса в соответствующий атрибут Запроса. Запрос.Текст = ТекстЗапроса; //Создание нового объекта типа Таблица значений для записи результатов запроса. dynamic Результат = connector.GetFunctionValue( "NewObject" , "ТаблицаЗначений" ); //Исполнение запроса, выгрузка результата в Таблицу значений Результат = Запрос.Выполнить().Выгрузить(); //Подсчет строк в таблице значений var n = Результат.Количество(); //Инициализация и очистка выпадающего списка. var dogovory = context.GetSettingsFor(m=> m.Dogovory).As<DropDownListSettings>(); dogovory.Items.Clear(); //Перебор всех строк в таблице значений for ( int i = 0; i < n; i++) { //создание строки выпадающего списка. запись в строку данных из Таблицы значений. var item = new DropDownItem(Результат.Получить(i).Код,Результат.Получить(i).Наименование); //Добавление в выпадающий список новой строки dogovory.Items.Add(item); } //Сохранение выпадающего списка. dogovory.Save(); } |
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 33 34 | public void addDDLDogovor(Context context) // заполнение выпадающего списка договоров { //Инициализация подключения к 1с. var connector = PublicAPI.Services.Integration1C.GetComConnector( "УПП(8.2)" ); //Получение кода элемента справочника 1с Контрагенты. Код будет использован в качестве параметра в запросе. string kodKontragent1c = context.Kontragent1S.Kod; //Cоставление текста запроса на языка запросов 1С, в качестве параметра использован код Контрагента string ТекстЗапроса = "ВЫБРАТЬ ДоговорыКонтрагентов.Код, ДоговорыКонтрагентов.Наименование " + "ИЗ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов " + "ГДЕ ДоговорыКонтрагентов.Владелец.ГоловнойКонтрагент.Код = \"" + kodKontragent1c + "\"" ; //Создание нового объекта типа Запрос dynamic Запрос = connector.GetFunctionValue( "NewObject" , "Запрос" ); //Заносим текст запроса в соответствующий атрибут Запроса. Запрос.Текст = ТекстЗапроса; //Создание нового объекта типа Таблица значений для записи результатов запроса. dynamic Результат = connector.GetFunctionValue( "NewObject" , "ТаблицаЗначений" ); //Исполнение запроса, выгрузка результата в Таблицу значений Результат = Запрос.Выполнить().Выгрузить(); //Подсчет строк в таблице значений var n = Результат.Количество(); //Инициализация и очистка выпадающего списка. var dogovory = context.GetSettingsFor(m => m.Dogovory).As<DropDownListSettings>(); dogovory.Items.Clear(); //Перебор всех строк в таблице значений for ( int i = 0; i < n; i++) { //создание строки выпадающего списка. запись в строку данных из Таблицы значений. var item = new DropDownItem(Результат.Получить(i).Код, Результат.Получить(i).Наименование); //Добавление в выпадающий список новой строки dogovory.Items.Add(item); } //Сохранение выпадающего списка. dogovory.Save(); } |
По исполнению сценария в выпадающем списке Dogovory будут содержаться названия всех договоров, закрепленных за определенным контрагентом.