Разработка прайс-листа — одна из базовых задач программиста 1С, однако она требует понимания работы с системой компоновки данных (СКД), запросами и виртуальными таблицами. В данной статье мы разберем, как реализовать отчет, который будет выводить цены номенклатуры, разделяя их по категориям (например, в зависимости от веса или типа наценки), используя внешние файлы отчетов.
Прежде всего, проанализируем техническое задание. Часто новички получают задачу "сделать внешнюю обработку", но для вывода данных в 1С правильнее использовать Внешний отчет (файл с расширением .erf). Рассмотрим причины этого выбора:
Если реализовывать это через внешнюю обработку (.epf), нам пришлось бы вручную создавать форму, добавлять табличный документ и описывать программный вызов процессора компоновки данных, что значительно усложняет задачу.
Для получения цен нам необходимо обратиться к регистру сведений. В типовых конфигурациях (например, Управление торговлей) это регистр ЦеныНоменклатуры. Рассмотрим ситуацию, когда нам нужны актуальные цены на текущий момент. Для этого в языке запросов предусмотрена виртуальная таблица СрезПоследних.
Проанализируем важный нюанс: условия по дате и типам цен необходимо передавать напрямую в параметры виртуальной таблицы. Это критически важно для производительности системы. Если мы выберем все цены, а потом будем фильтровать их через ГДЕ, отчет будет работать крайне медленно на больших базах.
Чтобы распределить цены по разным колонкам (например, для весовых категорий VIP 0, VIP 250, VIP 500), мы будем использовать конструкцию ВЫБОР КОГДА ... ТОГДА прямо в тексте запроса. Посмотрим на пример кода, который решает эту задачу:
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Цена > 0 И ЦеныНоменклатурыСрезПоследних.Цена <= 250
ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
ИНАЧЕ 0
КОНЕЦ КАК Цена_VIP_0,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Цена > 250 И ЦеныНоменклатурыСрезПоследних.Цена <= 500
ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
ИНАЧЕ 0
КОНЕЦ КАК Цена_VIP_250,
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Цена > 500
ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
ИНАЧЕ 0
КОНЕЦ КАК Цена_VIP_500
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
В этом примере мы создаем три отдельных поля. Если цена попадает в диапазон, она отображается в соответствующей колонке, иначе выводится ноль. В настройках СКД эти поля нужно добавить в ресурсы, чтобы они корректно суммировались при группировке по иерархии номенклатуры.
Если категории (0-250гр и т.д.) зависят не от самой цены, а от физических характеристик товара, нам потребуется Левое соединение. Основной таблицей выступит справочник Номенклатура, а присоединяемой — ЦеныНоменклатуры.СрезПоследних.
Разберем, почему именно левое соединение: это позволит нам увидеть в прайс-листе все товары, даже те, по которым цена еще не была установлена. В противном случае (при внутреннем соединении) пустые позиции просто исчезнут из отчета.
После написания запроса перейдем в конструктор СКД на вкладку "Настройки". Чтобы отчет выглядел как настоящий прайс-лист, выполним следующие шаги:
Номенклатура (установив тип вывода "Иерархия", чтобы сохранить структуру папок).Рассмотрим несколько практических рекомендаций, которые помогут избежать типичных ошибок при работе с внешними отчетами:
Безопасность данных: При разработке на тестовой базе всегда проверяйте, не включены ли в ней регламентные задания или обмены. Как показывает практика, случайная "продажа" или изменение цен в тестовой базе может затронуть боевые кассы или интеграции, если они настроены некорректно.
Имена полей: Старайтесь давать полям понятные заголовки. Вместо "Поле2" используйте "Цена (от 250 до 500 гр)". Это упростит жизнь и вам, и пользователям, которые будут работать с настройками отчета.
Использование БСП: Если ваша конфигурация поддерживает БСП (Библиотеку стандартных подсистем), рекомендуем регистрировать отчет через справочник Дополнительные отчеты и обработки. Это позволит пользователям открывать прайс-лист через меню программы, а не через "Файл — Открыть", и обеспечит корректное разграничение прав доступа.
Таким образом, комбинируя возможности языка запросов и гибкость системы компоновки данных, мы получаем мощный инструмент для анализа цен, который легко поддерживать и масштабировать под новые требования бизнеса.