Как в 1С:Розница 2.3 напечатать ценники с двумя ценами (старой и новой)

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

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

Анализ проблемы и постановка задачи

Типовая обработка печати использует сложный многостраничный запрос в СКД, который собирает данные из различных регистров: штрихкоды, остатки, цены, настройки ассортимента и правила ценообразования. Чтобы добавить вторую цену, нам необходимо вмешаться в этот запрос и «подцепить» данные из регистра сведений ЦеныНоменклатуры еще раз, но уже по другому виду цен.

Важно: Мы будем использовать механизм добавления произвольного параметра в СКД, чтобы пользователь мог интерактивно выбирать, какой именно вид цен считать «вторым» или «старым».

Шаг 1. Модификация основного запроса СКД

Разберем процесс внесения изменений в запрос. Основная работа будет происходить в пакетах запросов, формирующих итоговую таблицу. Нам нужно модифицировать временную таблицу ЦеныНоменклатурыСУчетомМинимальных и финальный выбор данных.

Проанализируем фрагмент кода, который необходимо внедрить. Мы добавим левое соединение с виртуальной таблицей СрезПоследних регистра ЦеныНоменклатуры, используя новый параметр &ВторойВидЦены.


////////////////////////////////////////////////////////////////////////////////
// Вносим изменения в формирование таблицы ЦеныНоменклатурыСУчетомМинимальных
ВЫБРАТЬ
    ТаблицаИтоговая.Номенклатура КАК Номенклатура,
    ТаблицаИтоговая.Характеристика КАК Характеристика,
    ТаблицаИтоговая.Упаковка КАК Упаковка,
    ТаблицаИтоговая.КоэффициентУпаковки КАК КоэффициентУпаковки,
    ТаблицаИтоговая.ВидЦен КАК ВидЦен,
    ВЫБОР
        КОГДА ТаблицаИтоговая.Цена < ТаблицаИтоговая.МинимальнаяЦена ТОГДА ТаблицаИтоговая.МинимальнаяЦена
        ИНАЧЕ ТаблицаИтоговая.Цена
    КОНЕЦ КАК Цена,
    // ... (остальные поля без изменений)
    ЕСТЬNULL(ЦеныНоменклатурыПоВторомуВидуЦены.Цена, 0) КАК ЦенаПоВторомуВидуЦены
ПОМЕСТИТЬ ЦеныНоменклатурыСУчетомМинимальных
ИЗ
    ТаблицаИтоговая КАК ТаблицаИтоговая
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ЦеныНаДату, ВидЦены = &ВторойВидЦены) КАК ЦеныНоменклатурыПоВторомуВидуЦены
    ПО ТаблицаИтоговая.Номенклатура = ЦеныНоменклатурыПоВторомуВидуЦены.Номенклатура
    И ТаблицаИтоговая.Характеристика = ЦеныНоменклатурыПоВторомуВидуЦены.Характеристика
;

В этом блоке мы используем ЛЕВОЕ СОЕДИНЕНИЕ, чтобы, если у товара нет второй цены, он все равно попадал на печать (в этом случае значение будет 0). Связь устанавливается по полям Номенклатура и Характеристика.

Шаг 2. Обновление итогового запроса

После того как мы получили данные во временную таблицу, их нужно вытянуть в финальную выборку, которая передается в макет. Выясним, какие поля нужно добавить в секцию ВЫБРАТЬ и СГРУППИРОВАТЬ ПО.


// В финальном запросе добавляем поле в список выбора
МАКСИМУМ(ЦеныНоменклатуры.ЦенаПоВторомуВидуЦены) КАК ЦенаПоВторомуВидуЦены

// И обязательно добавляем его в фигурные скобки для доступности в настройках СКД
{ВЫБРАТЬ
    // ... другие поля
    ЦенаПоВторомуВидуЦены}

Использование агрегатной функции МАКСИМУМ необходимо, так как в финальном запросе используется группировка по товарам и характеристикам. Это гарантирует получение корректного числового значения.

Шаг 3. Настройка параметров и доступности полей

Проанализируем, как сделать наше новое поле видимым для редактора шаблонов. Мало просто изменить запрос, нужно настроить саму схему компоновки:

  1. Откройте вкладку «Параметры» в редакторе СКД.
  2. Найдите или создайте параметр ВторойВидЦены.
  3. Снимите флаг «Ограничение доступности». Это позволит выбирать вид цены прямо в окне печати ценников.
  4. На вкладке «Настройки» в списке «Выбранные поля» убедитесь, что поле ЦенаПоВторомуВидуЦены доступно для выбора.

Теперь, при открытии обработки «Печать этикеток и ценников», на вкладке «Параметры» (в тонком клиенте) появится возможность указать, например, «Розничную цену» как основную и «Старую розничную» как дополнительную.

Шаг 4. Редактирование шаблона ценника

Рассмотрим, как вывести полученные данные на бумагу. После того как поле ЦенаПоВторомуВидуЦены появилось в схеме, оно станет доступно в справочнике «Шаблоны этикеток и ценников».

Разберем алгоритм действий в редакторе макета:

  1. Перейдите в администрирование — Печатные формы, отчеты и обработки — Шаблоны этикеток и ценников.
  2. Создайте новый шаблон или отредактируйте существующий.
  3. В списке доступных полей найдите ЦенаПоВторомуВидуЦены.
  4. Перетащите его в нужное место макета.
  5. Для реализации эффекта «зачеркивания» старой цены в стандартном редакторе 1С можно использовать наложение текстового поля с символами «—» или «/», либо воспользоваться специализированным шрифтом, если он установлен в системе.

Рекомендации по обновлению конфигурации

Выясним важный момент: типовой запрос в 1С:Розница занимает около 5 страниц текста. Прямое редактирование стандартной СКД в конфигураторе приведет к сложностям при обновлении программы — 1С может просто перезаписать ваш запрос.

Рассмотрим лучший способ сохранения изменений:

Вместо правки типового макета «в лоб», рекомендуется создать пользовательскую схему компоновки. Вы можете выгрузить типовую СКД в файл .xml, отредактировать её локально и загрузить обратно в созданный вами новый шаблон в справочнике. Таким образом, изменения сохранятся внутри базы данных (в справочнике), а не в программном коде конфигурации, что обеспечит «выживаемость» доработок при обновлениях релизов.

Дополнительный вариант: Использование дополнительных реквизитов

Если правка сложного запроса кажется слишком трудоемкой, проанализируем альтернативу. Вы можете создать Дополнительный реквизит для объекта Номенклатура (например, «Цена до акции»).

Преимущества этого метода:

Недостатки:

Подводя итог, можно сказать, что модификация запроса через ЛЕВОЕ СОЕДИНЕНИЕ и параметр &ВторойВидЦены является наиболее гибким и профессиональным решением, позволяющим автоматизировать вывод любых типов цен на одном ценнике.

← На главную