При работе в конфигурации 1С:Розница (начиная с версии 2.1 и выше) пользователи часто сталкиваются с эстетической и практической проблемой: в печатных формах ценников цена выводится как целое число (например, «150»), в то время как стандарты торговли требуют отображения копеек, даже если они нулевые (например, «150.00»). Рассмотрим подробно, почему так происходит и как заставить систему выводить нули после запятой, используя настройки макета или программный код.
Этот способ является наиболее предпочтительным, так как он не требует внесения изменений в конфигурацию через Конфигуратор и доступен администратору системы или опытному пользователю в режиме предприятия. Проанализируем правильный алгоритм действий.
Часто ошибка заключается в том, что пользователь просто прописывает строку формата, но забывает изменить тип заполнения ячейки. Выполним следующие шаги:
Цена.Параметр. Если там стоит «Текст», никакое форматирование не применится.Цена.ЧДЦ=2.Важное замечание: Если вы используете тип заполнения Шаблон (например, чтобы вывести фразу «Цена: [Цена] руб.»), стандартное свойство Формат в нижней части палитры свойств работать не будет. В этом случае форматирование нужно прописывать внутри квадратных скобок прямо в тексте шаблона. Рассмотрим этот пример ниже.
Разберем ситуацию, когда цена является частью текстовой строки в ячейке. Для того чтобы система поняла, как именно нужно преобразовать число в строку внутри шаблона, используем встроенный язык 1С.
Вместо простого упоминания параметра [Цена], пропишем следующую конструкцию:
[Формат(Цена, "ЧДЦ=2")] руб.
В данном случае функция Формат принудительно преобразует числовое значение цены в строку с двумя знаками после разделителя, а текст «руб.» добавится в конец. Это универсальный способ, который обходит ограничения графического редактора макетов.
Если вы создаете собственную печатную форму или вносите изменения в типовую обработку через расширение, имеет смысл зафиксировать формат вывода на уровне программного кода. Выясним, как это реализовать в модуле печатной формы.
Найдем участок кода, где происходит заполнение параметров области макета. Обычно это выглядит как присвоение значения переменной. Нам необходимо обернуть передаваемое число в функцию Формат. Рассмотрим пример кода:
// Пример заполнения параметра цены в коде 1С
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ВашеЧисло = Выборка.Цена; // Получаем числовое значение из базы
ОбластьМакета.Параметры.Цена = Формат(ВашеЧисло, "ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧГ=0");
// Где:
// ЧЦ=15 — общее количество знаков
// ЧДЦ=2 — количество знаков после запятой
// ЧРД=, — разделитель дробной части (запятая)
// ЧГ=0 — отключение группировки разрядов (чтобы не было пробела в числе 1 000)
Этот метод гарантирует, что на печать всегда будет уходить уже отформатированная строка, и никакие настройки макета в пользовательском режиме не смогут случайно «сломать» отображение копеек.
Иногда, даже после установки ЧДЦ=2, нули все равно не появляются. Проанализируем возможные причины такого поведения системы:
Цена установлен тип «Строка» (например, цена была преобразована в строку еще на этапе запроса), то формат числа к ней примениться не может. Убедитесь, что в наборе данных поле имеет числовой тип.ЧДЦ=2 все равно должен отрисовывать два нуля (00). Если их нет, значит, значение воспринимается как текст." ЧДЦ=2"), 1С может проигнорировать всю инструкцию целиком.Для максимально корректного отображения цен в российской розничной торговле мы рекомендуем использовать расширенную строку формата. Посмотрим на ее составляющие:
ЧЦ=15; ЧДЦ=2; ЧН=0,00; ЧГ=0
Разберем по шагам:
ЧЦ=15 — резервирует достаточно места для больших сумм.ЧДЦ=2 — жестко задает два знака копеек.ЧН=0,00 — критически важный параметр. Он определяет, что будет выведено, если цена равна нулю. Без него в ценнике может отобразиться пустое поле, а с ним — «0,00».ЧГ=0 — убирает группировку разрядов. По стандарту в ценниках не всегда уместен пробел в тысячах (например, «1 250.00»), часто требуется слитное написание («1250.00»).Таким образом, комбинируя правильную настройку заполнения ячейки (Параметр) и точную форматную строку, мы добьемся безупречного отображения ценников в соответствии со всеми требованиями законодательства и удобства покупателей.