Как настроить печать ценников без копеек в 1С и избежать ошибок округления?

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

При работе с торговым оборудованием и печатными формами в 1С (ERP, КА, УТ) часто возникает задача адаптации внешнего вида ценников под требования маркетинга или дизайна магазина. Одна из распространенных ситуаций — желание выводить цену как целое число, отбрасывая копейки, даже если в учетной системе цена зафиксирована с дробной частью. В этой статье мы подробно разберем техническую реализацию этой задачи, проанализируем стандартное поведение платформы 1С при форматировании чисел и обязательно обсудим важные юридические риски, связанные с таким решением.

Постановка задачи: почему 75.99 превращается в 76?

Разберем ситуацию, с которой столкнулся пользователь. В базе данных 1С (например, в регистре сведений «Цены номенклатуры») хранится цена товара, равная 75.99 или 125.99. Задача состоит в том, чтобы на печатной форме ценника отображалось целое число: 75 или 125 соответственно.

При попытке решить эту задачу "в лоб" через стандартные свойства ячейки макета, мы сталкиваемся с встроенной арифметикой платформы. Если в редакторе макета в свойстве «Формат» указать параметр ЧДЦ=0 (Число десятичных знаков = 0), платформа 1С воспринимает это как инструкцию округлить число до целого по математическим правилам.

В результате:

Это стандартное поведение функции Формат() и механизма вывода данных в табличный документ. Давайте рассмотрим, как мы можем изменить это поведение и получить желаемый результат (отбрасывание дробной части), а затем выясним, почему так делать не стоит с точки зрения закона.

Техническое решение: использование выражений в макете

Чтобы вывести на печать именно целую часть числа без округления в большую сторону, нам необходимо отказаться от стандартного форматирования и использовать встроенные функции языка 1С непосредственно в макете печатной формы.

В платформе 1С:Предприятие существует функция глобального контекста Цел(). Она возвращает целую часть числа, просто отсекая все знаки после запятой.


// Пример работы функции Цел()
Результат = Цел(75.99); // Вернет 75
Результат = Цел(125.01); // Вернет 125

Теперь применим это к редактированию макета ценника. Рассмотрим последовательность действий:

  1. Откроем макет ценника в режиме Конфигуратора или в пользовательском режиме, если используется, например, специализированная обработка для индивидуальной печати ценников для УТ 11 или штатные шаблоны.
  2. Найдем ячейку, в которую выводится цена. Обычно в свойстве «Заполнение» у такой ячейки стоит значение Параметр, а в тексте ячейки указано имя параметра, например Цена.
  3. Чтобы применить функцию, нам нужно изменить свойство «Заполнение» с Параметр на Шаблон (или использовать заполнение через выражение, если редактируется схема компоновки данных).
  4. В тексте ячейки вместо простого параметра [Цена] напишем выражение на встроенном языке.

Более надежный способ для редактирования макетов — использование свойства «Параметр» с предварительной обработкой данных или использование механизма СКД (Системы Компоновки Данных), на которой строятся современные ценники.

Вариант 1: Если ценник на СКД (большинство современных конфигураций)

В редакторе шаблона ценника часто есть поле для формулы или "Выражения". Вместо выбора поля Цена, мы должны прописать формулу:


Цел(Цена)

Таким образом, система компоновки данных сначала вычислит целую часть от числа, а затем передаст её на печать.

Вариант 2: Дизайн "Рубли крупно, копейки мелко"

В обсуждении была затронута интересная тема дизайна, когда рубли и копейки выводятся разными шрифтами. Для реализации можно использовать внешние инструменты, например печать этикеток из документа Заказ покупателя для УНФ, где макеты легко поддаются правке.

Для поля с рублями используем формулу:


Цел(Цена)

Для поля с копейками формула будет выглядеть так:


(Цена - Цел(Цена)) * 100

Важно: Для копеек необходимо задать формат отображения ЧЦ=2; ЧВН=. Иначе покупатель увидит "5 руб 5", что некорректно.

Методологическое и юридическое решение: почему нельзя просто отрезать копейки

Технически мы научились выводить "75" вместо "75.99". Но согласно законодательству, ценник является публичной офертой. Если вы используете инструмент печать ценников из документа Реализация товаров и услуг, то цена в печатной форме должна строго соответствовать цене в документе и базе.

Представим ситуацию:

  1. В базе 1С цена товара установлена как 75.99 руб.
  2. На витрине висит ценник 75 руб.
  3. На кассе программа считывает 75.99 руб.

Это прямое нарушение законодательства. Покупатель имеет право потребовать продать товар за 75 рублей.

Как сделать правильно?

Единственно верным решением проблемы "некрасивых" цен является настройка округления не в момент печати, а в момент установки цен. Особенно это важно при поступлении новых товаров, когда можно сразу запустить печать этикеток из документа Заказ поставщику уже с правильными, округленными ценами.

В конфигурациях «1С:Управление торговлей», «1С:Розница», «1С:УНФ» в настройках «Видов цен» есть мощный механизм правил округления:

  1. Перейдем в раздел Маркетинг -> Настройки и справочники -> Виды цен.
  2. Откроем используемый вид цены.
  3. Установим «Точность округления» до 1 (до целого рубля).
  4. Выберем метод округления (например, всегда в меньшую сторону, если это допустимо вашей маркетинговой политикой).

Пример формулы для вида цен, которая будет всегда округлять цену поступления вниз до целого рубля:


Цел([ЦенаПоступления] * [Наценка])

Таким образом, в базе данных запишется цена ровно 75.00. Тогда и на ценнике будет напечатано 75, и на кассе пробьется 75.00.

Выводы

Давайте подведем итог нашему анализу:

  1. Если вам нужно просто изменить визуальное отображение (например, для внутренних отчетов), используйте функцию Цел() в выражениях макета.
  2. Для ценников в торговом зале изменять только внешний вид категорически не рекомендуется.
  3. Правильный путь — настроить правила округления в самом "Виде цен", чтобы сама учетная цена стала целым числом. Это гарантирует совпадение данных на всех этапах продажи.
← На главную