При работе в конфигурации 1С:Управление торговлей 11.4 пользователи часто сталкиваются с необходимостью кастомизации ценников. Одной из самых популярных задач является вывод процента скидки, который рассчитывается на основе текущей цены и «старой» (дополнительной) цены. Несмотря на то что в конструкторе шаблонов доступны поля Цена и Цена (дополнительно), типовой функционал не позволяет прописывать математические формулы непосредственно в ячейках макета.
В этой статье мы подробно разберем, почему эта задача не решается простым редактированием шаблона в пользовательском режиме, и рассмотрим эффективные способы добавления автоматического расчета скидки.
Проанализируем ситуацию: в отличие от конфигурации «1С:Розница 2», где система компоновки данных (СКД) для ценников доступна для редактирования пользователем, в УТ 11.4 архитектура системы печати этикеток более закрытая. Список доступных полей жестко ограничен набором данных, который формирует обработка ПечатьЭтикетокИЦенников.
Попытки прописать формулу вида 100*(1-Цена/ЦенаДоп) прямо в параметрах текстовой ячейки шаблона не приведут к успеху, так как система ожидает там только идентификатор поля, а не выражение. Поэтому нам необходимо «внедрить» новое поле в сам источник данных.
Чтобы не снимать конфигурацию с поддержки и сохранить возможность беспрепятственного обновления, лучше всего воспользоваться расширением. Рассмотрим этот процесс по шагам:
ПечатьЭтикетокИЦенников.Добавим поле со следующими параметрами:
Выбор Когда ЦенаДополнительно <> 0 Тогда 100 * (1 - Цена / ЦенаДополнительно) Иначе 0 КонецПосле сохранения расширения и перезапуска программы, при редактировании шаблона ценника в списке доступных полей появится наше новое поле % Скидки. Его можно будет просто перетащить в нужную ячейку макета.
Если вы не используете расширения, можно внести изменения непосредственно в код программы. Выясним, где именно находится нужная нам логика. Основная схема компоновки данных обычно зашита внутри обработки ПечатьЭтикетокИЦенников.
Проанализируем структуру СКД в конфигураторе. Вам нужно найти набор данных (обычно это запрос), который собирает информацию о ценах. Чтобы добавить расчет скидки, можно модифицировать сам текст запроса:
// Пример добавления поля в текст запроса СКД
ВЫБРАТЬ
...,
ВЫБОР
КОГДА ЦеныДополнительные.Цена > 0
ТОГДА (1 - ЦеныОсновные.Цена / ЦеныДополнительные.Цена) * 100
ИНАЧЕ 0
КОНЕЦ КАК ПроцентСкидки
ИЗ
...
Однако работа с вычисляемыми полями (как в Решении 1) через интерфейс СКД в конфигураторе является более гибкой, так как не требует глубокого изменения текста тяжелых типовых запросов.
Рассмотрим ситуацию, когда вы не хотите менять конфигурацию вообще. В 1С предусмотрена возможность использования внешних обработок печати этикеток и ценников. Вы можете взять типовую обработку из дистрибутива конфигурации, сохранить ее как внешнюю (через Файл - Сохранить как...), внести изменения в ее СКД и подключить через раздел Администрирование — Печатные формы, отчеты и обработки.
Это позволит вам:
Когда новое поле уже добавлено в список доступных, обратите внимание на форматирование ячейки в шаблоне ценника. Чтобы процент скидки выглядел красиво (например, «-25%»), используйте свойства формата ячейки в редакторе макета:
ПроцентСкидки.Важный момент: Проверьте, чтобы в запросе или вычисляемом поле стояла проверка на деление на ноль (ЦенаДополнительно <> 0). В противном случае, если для товара не задана дополнительная цена, печать ценников может аварийно завершиться с ошибкой.
Мы выяснили причину, по которой расчет процента скидки невозможен «из коробки» в УТ 11.4 — это программное ограничение доступа к правке СКД в пользовательском режиме. Наиболее корректным и современным способом решения задачи является добавление вычисляемого поля через Расширение. Это сохраняет чистоту конфигурации и дает пользователю удобный инструмент, который работает автоматически при каждом изменении цен.