При разработке отчетов в 1С часто возникает задача нормализации данных, например, удаления лишних суффиксов из артикулов (преобразование 123456up в 123456) для последующего соединения со справочником Номенклатура. На современных платформах (начиная с версии 8.3.19) эта задача решается штатными строковыми функциями непосредственно в тексте запроса. Однако, если вы работаете на платформе 8.3.18 или более ранней версии, прямые манипуляции со строками в языке запросов ограничены. Рассмотрим, как справиться с этой задачей эффективно.
Если задача стоит в поиске номенклатуры, артикул которой соответствует определенному шаблону, можно воспользоваться конструкцией ПОДОБНО в соединении. Это позволяет выполнить поиск по частичному совпадению.
Рассмотрим пример реализации такого соединения в запросе:
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
ПО Таблица.Артикул ПОДОБНО СпрНоменклатура.Артикул + "%"
Важное примечание: Данный метод является быстрым и простым в реализации, однако он может негативно влиять на производительность при работе с большими объемами данных. Использование оператора ПОДОБНО с метасимволом % в конце строки может привести к выполнению полного сканирования таблицы (Full Table Scan) вместо поиска по индексу.
Если логика преобразования артикула сложная (например, нужно убрать специфические символы или применить регулярные выражения), рекомендуется использовать функционал общих модулей при компоновке данных в Системе Компоновки Данных (СКД).
Для реализации этого метода выполним следующие шаги:
ОбщемМодуле (с установленным флагом Сервер), которая будет принимать исходный артикул и возвращать «очищенное» значение.Посмотрим на пример инициализации:
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровкиКонсоли, Истина);
В самой СКД вы можете добавить Вычисляемое поле, которое будет обращаться к методу вашего модуля для преобразования артикула. Это позволит получить готовый набор данных, который будет корректно сгруппирован по очищенному артикулу.
Проанализируем ситуацию: работа с функциями строк на уровне СУБД (в новых версиях платформы) всегда предпочтительнее программной обработки в 1С. Если вы планируете масштабировать решение, рассмотрим следующие варианты:
Номенклатура реквизит АртикулДляПоиска. При записи элемента заполняйте его очищенным значением. Это позволит выполнять прямое соединение по индексированному полю, что даст максимальную скорость работы отчетов.Номенклатурой. Это значительно разгрузит память сервера по сравнению с обработкой строк после получения всех данных.Подводя итог, выбор метода зависит от версии вашей платформы и объема данных. Для старых платформ ПОДОБНО подойдет для простых отчетов, а использование вычисляемых полей с вызовом функций из общих модулей — для более сложных задач, где требуется специфическая логика преобразования данных.