[ELMA3] Исполнение запросов в 1С из сценария ELMA
Описанный в данной статье метод работы с запросами 1С может быть применен при интеграции для получения произвольных данных из 1С.
Запросы 1С – это способ получения данных из БД 1С. Язык запросов 1С – это отдельный язык, схожий с SQL-запросами, но имеющий некоторые отличия. Язык запросов 1С имеет синтаксис на английском и русском языках. В случае использования английского языка запросы схожи со стандартными SQL-запросами.
Работа с запросами 1С происходит в несколько этапов:
- составление запроса;
- подстановка параметров в запрос;
- исполнение запроса;
- обработка результатов запроса.
В статье будет рассмотрен пример работы с запросом 1C через COMconnector.
Описание сценария
В качестве примера будет рассмотрен случай, когда необходимо получить перечень Договоров Контрагента, зная самого Контрагента. В качестве исходных данных имеются:
- Kontragent1C – контекстная переменная, содержащая переменную типа Справочник 1С Контрагенты;
- dogovory – контекстная переменная типа Выпадающий список, в которую будет записан результат запроса для отображения пользователю;
- УПП (8.2) – наименование подключаемой конфигурации 1С.
В сценарии будет произведено подключение к 1С, создание нового объект 1С типа Запрос, исполнение запроса, создание нового объекта 1С типа Таблица значений, запись результата запроса в таблицу значений, обработка полученного результата, запись результата в выпадающий список.
Используемое пространство имен:
using EleWise.ELMA.Services;
using EleWise.ELMA.Integration1C;
using EleWise.ELMA.Integration1C.Data;
using EleWise.ELMA.Integration1C.V82;
Подключаемые сборки:
EleWise.ELMA.Integration1C
Microsoft.CSharp
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();
}
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 будут содержаться названия всех договоров, закрепленных за определенным контрагентом.