Какие новые возможности появились в 1SQlite версии 3.36 и как решить проблемы с типизацией метаданных

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Разработка на платформе 1С 7.7 в современных условиях часто требует использования внешних компонентов для ускорения работы с данными. Одной из самых мощных и популярных библиотек является 1SQlite. С выходом версии 3.36 (и промежуточных сборок от Djelf) пользователи получили доступ к ряду важных обновлений, которые значительно расширяют возможности штатного SQL-движка внутри «семерки».

В этой статье мы подробно разберем, какие математические функции стали доступны «из коробки», выясним, почему возникла путаница с названиями сборок, и проанализируем технические нюансы типизации объектов 1С в SQL-запросах.

Появление встроенных математических функций (библиотека math)

Одной из главных новостей стало включение в состав компоненты полноценной математической библиотеки. Ранее в 1SQlite для выполнения сложных вычислений (например, тригонометрии или извлечения корня) приходилось либо подключать дополнительные расширения, либо выгружать данные в 1С и обрабатывать их перебором, что негативно сказывалось на производительности.

В версиях с суффиксом math (в обсуждениях часто ошибочно упоминается как match) стали доступны следующие стандартные функции SQLite:

Рассмотрим пример использования этих функций непосредственно в тексте запроса. Предположим, нам нужно вычислить квадратный корень из остатка товара для неких статистических расчетов:


ТекстЗапроса = "
|SELECT 
|    Товар as [Товар :Справочник.Номенклатура],
|    Остаток,
|    sqrt(Остаток) as КореньОстатка,
|    power(Остаток, 2) as КвадратОстатка
|FROM ВнешняяТаблицаОстатков
|";

Проанализируем ситуацию: использование таких функций внутри SQLite позволяет перенести тяжелые расчеты на уровень движка базы данных, возвращая в 1С уже готовый результат.

Нововведения ядра SQLite 3.35 и 3.36

Обновление компоненты до версии 3.36 принесло с собой возможности самого движка SQLite, которые крайне полезны при работе с временными таблицами и индексами в 1С 7.7.

1. Конструкция RETURNING. Это одно из самых ожидаемых нововведений. Теперь при выполнении операций INSERT, UPDATE или DELETE мы можем сразу получить измененные данные без выполнения повторного SELECT. Разберем на примере обновления цен:


UPDATE ЦеныСправочника 
SET Цена = Цена * 1.1 
WHERE Категория = 'Опт'
RETURNING ID, Цена;

Этот запрос не просто обновит данные, но и вернет таблицу с идентификаторами строк и их новыми значениями. Это значительно упрощает логику синхронизации данных.

2. Удаление колонок (DROP COLUMN). В предыдущих версиях SQLite удаление колонки из таблицы требовало ее полного пересоздания. Начиная с версии 3.35, стала доступна стандартная команда:

ALTER TABLE ВременнаяТаблица DROP COLUMN ЛишнееПоле;

3. Оптимизация обобщенных табличных выражений (CTE). Работа со сложными иерархическими запросами стала быстрее благодаря улучшенному планировщику, который лучше обрабатывает рекурсивные вызовы и материализацию запросов.

Проблема типизации ВидСправочника в SQL-запросах

Часто программисты сталкиваются с ошибкой: Неправильная типизация в колонке: ВидСпр:ВидСправочника. Это происходит при попытке типизировать пустую строку или результат функции как метаданные 1С. Выясним причину этой ошибки на примере кода, вызвавшего затруднение:


-- Код, вызывающий ошибку
SELECT '' as [ВидСпр :ВидСправочника]
-- Код, который работает корректно
SELECT '' as [ВидДок :ВидДокумента]

Разберем, почему так происходит. Компонента 1SQlite использует «мягкую» типизацию, сопоставляя алиас в квадратных скобках с метаданными загруженной конфигурации. Ошибка типизации ВидСправочника часто связана с несколькими факторами:

  1. Отсутствие конкретного вида: В отличие от ВидДокумента, который в определенных контекстах может определяться более однозначно, ВидСправочника требует четкого понимания, к какому именно справочнику относится поле, если мы пытаемся получить объект.
  2. Лишние пробелы: Проанализируем синтаксис — [ВидСпр :ВидСправочника]. Наличие пробела перед двоеточием или после него может сбить парсер 1SQlite в некоторых версиях. Попробуйте использовать формат [ВидСпр:ВидСправочника].
  3. Наличие метаданных в базе: Если в конфигурации нет справочника с идентификатором, который пытается вычислить система, возникнет ошибка. При типизации пустой строки '' компонента не может сопоставить «ничего» с конкретным типом справочника.

Для корректной передачи пустого значения справочника или документа рекомендуется использовать либо штатные средства получения пустого ID (EmptyID), либо типизировать колонку более явно, указывая конкретный вид справочника, если это возможно:


-- Более надежный вариант типизации
SELECT Спр.ID as [Элемент :Справочник.Номенклатура]
FROM ...

Практические советы по использованию 1SQlite 3.36

Посмотрим на общие рекомендации по работе с обновленной компонентой:

Подводя итог, можно сказать, что версия 3.36 является мощным инструментом в руках разработчика 1С 7.7. Она не только ускоряет вычисления за счет встроенной математики, но и приближает синтаксис работы с данными к современным стандартам SQL, делая код более читаемым и эффективным.

← На главную