При работе с торговым оборудованием и печатными формами в 1С (ERP, КА, УТ) часто возникает задача адаптации внешнего вида ценников под требования маркетинга или дизайна магазина. Одна из распространенных ситуаций — желание выводить цену как целое число, отбрасывая копейки, даже если в учетной системе цена зафиксирована с дробной частью. В этой статье мы подробно разберем техническую реализацию этой задачи, проанализируем стандартное поведение платформы 1С при форматировании чисел и обязательно обсудим важные юридические риски, связанные с таким решением.
Разберем ситуацию, с которой столкнулся пользователь. В базе данных 1С (например, в регистре сведений «Цены номенклатуры») хранится цена товара, равная 75.99 или 125.99. Задача состоит в том, чтобы на печатной форме ценника отображалось целое число: 75 или 125 соответственно.
При попытке решить эту задачу "в лоб" через стандартные свойства ячейки макета, мы сталкиваемся с встроенной арифметикой платформы. Если в редакторе макета в свойстве «Формат» указать параметр ЧДЦ=0 (Число десятичных знаков = 0), платформа 1С воспринимает это как инструкцию округлить число до целого по математическим правилам.
В результате:
ЧДЦ=0 превратится в 125.ЧДЦ=0 округлится до 76.Это стандартное поведение функции Формат() и механизма вывода данных в табличный документ. Давайте рассмотрим, как мы можем изменить это поведение и получить желаемый результат (отбрасывание дробной части), а затем выясним, почему так делать не стоит с точки зрения закона.
Чтобы вывести на печать именно целую часть числа без округления в большую сторону, нам необходимо отказаться от стандартного форматирования и использовать встроенные функции языка 1С непосредственно в макете печатной формы.
В платформе 1С:Предприятие существует функция глобального контекста Цел(). Она возвращает целую часть числа, просто отсекая все знаки после запятой.
// Пример работы функции Цел()
Результат = Цел(75.99); // Вернет 75
Результат = Цел(125.01); // Вернет 125
Теперь применим это к редактированию макета ценника. Рассмотрим последовательность действий:
Цена.[Цена] напишем выражение на встроенном языке.Более надежный способ для редактирования макетов — использование свойства «Параметр» с предварительной обработкой данных или использование механизма СКД (Системы Компоновки Данных), на которой строятся современные ценники.
В редакторе шаблона ценника часто есть поле для формулы или "Выражения". Вместо выбора поля Цена, мы должны прописать формулу:
Цел(Цена)
Таким образом, система компоновки данных сначала вычислит целую часть от числа, а затем передаст её на печать.
В обсуждении была затронута интересная тема дизайна, когда рубли и копейки выводятся разными шрифтами. Для реализации можно использовать внешние инструменты, например печать этикеток из документа Заказ покупателя для УНФ, где макеты легко поддаются правке.
Для поля с рублями используем формулу:
Цел(Цена)
Для поля с копейками формула будет выглядеть так:
(Цена - Цел(Цена)) * 100
Важно: Для копеек необходимо задать формат отображения ЧЦ=2; ЧВН=. Иначе покупатель увидит "5 руб 5", что некорректно.
Технически мы научились выводить "75" вместо "75.99". Но согласно законодательству, ценник является публичной офертой. Если вы используете инструмент печать ценников из документа Реализация товаров и услуг, то цена в печатной форме должна строго соответствовать цене в документе и базе.
Представим ситуацию:
Это прямое нарушение законодательства. Покупатель имеет право потребовать продать товар за 75 рублей.
Единственно верным решением проблемы "некрасивых" цен является настройка округления не в момент печати, а в момент установки цен. Особенно это важно при поступлении новых товаров, когда можно сразу запустить печать этикеток из документа Заказ поставщику уже с правильными, округленными ценами.
В конфигурациях «1С:Управление торговлей», «1С:Розница», «1С:УНФ» в настройках «Видов цен» есть мощный механизм правил округления:
Пример формулы для вида цен, которая будет всегда округлять цену поступления вниз до целого рубля:
Цел([ЦенаПоступления] * [Наценка])
Таким образом, в базе данных запишется цена ровно 75.00. Тогда и на ценнике будет напечатано 75, и на кассе пробьется 75.00.
Давайте подведем итог нашему анализу:
Цел() в выражениях макета.