Как преобразовать артикул и выполнить соединение в запросе или СКД на старых платформах 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов в 1С часто возникает задача нормализации данных, например, удаления лишних суффиксов из артикулов (преобразование 123456up в 123456) для последующего соединения со справочником Номенклатура. На современных платформах (начиная с версии 8.3.19) эта задача решается штатными строковыми функциями непосредственно в тексте запроса. Однако, если вы работаете на платформе 8.3.18 или более ранней версии, прямые манипуляции со строками в языке запросов ограничены. Рассмотрим, как справиться с этой задачей эффективно.

Решение 1: Использование оператора ПОДОБНО

Если задача стоит в поиске номенклатуры, артикул которой соответствует определенному шаблону, можно воспользоваться конструкцией ПОДОБНО в соединении. Это позволяет выполнить поиск по частичному совпадению.

Рассмотрим пример реализации такого соединения в запросе:


ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
ПО Таблица.Артикул ПОДОБНО СпрНоменклатура.Артикул + "%"

Важное примечание: Данный метод является быстрым и простым в реализации, однако он может негативно влиять на производительность при работе с большими объемами данных. Использование оператора ПОДОБНО с метасимволом % в конце строки может привести к выполнению полного сканирования таблицы (Full Table Scan) вместо поиска по индексу.

Решение 2: Программная обработка через общий модуль в СКД

Если логика преобразования артикула сложная (например, нужно убрать специфические символы или применить регулярные выражения), рекомендуется использовать функционал общих модулей при компоновке данных в Системе Компоновки Данных (СКД).

Для реализации этого метода выполним следующие шаги:

  1. Создадим функцию в ОбщемМодуле (с установленным флагом Сервер), которая будет принимать исходный артикул и возвращать «очищенное» значение.
  2. При инициализации процессора компоновки данных необходимо вызвать эту функцию для подготовки данных.

Посмотрим на пример инициализации:


ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровкиКонсоли, Истина);

В самой СКД вы можете добавить Вычисляемое поле, которое будет обращаться к методу вашего модуля для преобразования артикула. Это позволит получить готовый набор данных, который будет корректно сгруппирован по очищенному артикулу.

Рекомендации по оптимизации

Проанализируем ситуацию: работа с функциями строк на уровне СУБД (в новых версиях платформы) всегда предпочтительнее программной обработки в 1С. Если вы планируете масштабировать решение, рассмотрим следующие варианты:

Подводя итог, выбор метода зависит от версии вашей платформы и объема данных. Для старых платформ ПОДОБНО подойдет для простых отчетов, а использование вычисляемых полей с вызовом функций из общих модулей — для более сложных задач, где требуется специфическая логика преобразования данных.

← На главную