Для работы нам понадобятся внешние компоненты 1С++, 1sqlite и класс "Прямой запрос". Класс удобен тем, что позволяет не задумываться о формате базы данных. В нем реализованы виртуальные таблицы, типизация объектов и прочие вкусности.
- Компоненту 1С++ можно скачать на официальном ресурсе.
- Компоненту 1sqlite - на инфостарте, например.
- Класс "Прямой запрос" и документацию к нему - здесь.
Для работы необходимо положить в каталог базы данных файл Defcls.prm с таким, например, содержимым в первой строке:
//#include ExtForms\Classes\ПрямыеЗапросы\Defcls.prm
Далее создать папку ExtForms\Classes\ПрямыеЗапросы и в нее положить файл Defcls.prm с таким содержимым:
класс ПрямойЗапрос = ПрямойЗапрос.ert{};
Там же разместить скачанный файл ПрямойЗапрос.ert.
Далее нам нужно скопировать файлы 1cpp.dll и 1sqlite.dll в каталог базы данных и загрузить внешние компоненты.
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "1cpp.dll") = 0 Тогда Сообщить("ВК 1С++ не загружена!"); КонецЕсли; Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "1sqlite.dll") = 0 Тогда Сообщить("ВК 1sqlite не загружена!"); КонецЕсли; RecordSet = СоздатьОбъект("ПрямойЗапрос");
Теперь напишем несложный запрос, который подсчитает нормативную себестоимость материалов для каждого элемента справочника "Номенклатура".
ТекстЗапроса = " |SELECT НормыРасхода.PARENTEXT [Номенклатура $Справочник.Номенклатура] |, SUM($НормыРасхода.Количество*$ПоследнееЗначение.Материалы.Цена(Материалы.ID, :ДатаКонца)) Сумма |FROM Справочник.НормыРасхода AS НормыРасхода |INNER JOIN Справочник.Материалы AS Материалы ON $НормыРасхода.Материал = Материалы.ID |GROUP BY НормыРасхода.PARENTEXT |"; RecordSet.УстановитьТекстовыйПараметр("ДатаКонца", ДатаКонца); ТЗ = RecordSet.Выполнить("ТаблицаЗначений", ТекстЗапроса);
Другие статьи по прямым запросам:
Ускоряем регистрацию объектов в МОД (для SQL)
Проверка дублей строк с помощью 1С++
Аналог ON DUPLICATE KEY UPDATE в MS SQL
Как использовать УРБД в отличающихся конфигурациях
Примеры решения нестандартных задач на T-SQL в 1С
Запросы в 1С к двум базам одновременно (DBF, OLE DB)
Как написать прямой запрос в 1С (SQL) с помощью 1С++
Онлайн резервирование товаров на складе (online reservation)