Почему округляется цена в табличной части обработки в 1С и как это исправить?

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

При разработке и доработке печатных форм и обработок (например, обработки печати ценников в «1С:Управление торговлей 10.3») разработчики нередко сталкиваются с ситуацией, когда дробное значение цены (например, 0,98) при помещении в табличную часть или отображении в интерфейсе принудительно округляется платформой до целого числа (становится 1). При этом в программном коде получение цены может возвращать корректное число с копейками.

Разберем подробно причины такого поведения платформы «1С:Предприятие» и пошагово рассмотрим способы устранения этой проблемы.

Причина 1. Неправильный синтаксис строки формата

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

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

  1. Откроем свойства колонки табличного поля или свойства поля ввода.
  2. Найдем свойство Формат.
  3. Укажем параметр числа дробных цифровых знаков ЧДЦ=2 (число дробных цифр) и при необходимости разделитель дробной части ЧРД=,.

Пример корректной форматной строки для отображения двух знаков после запятой:

ЧДЦ=2; ЧГ=0

Причина 2. Параметры типа реквизита: длина и точность

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

Если в реквизитах табличной части обработки у реквизита Цена установлена длина 15, а точность оставлена равной 0, платформа на уровне типизации автоматически выполняет математическое округление любого передаваемого значения до целого числа. В результате значение 0,98 превращается в 1 еще до момента отрисовки на экране.

Для исправления в дереве метаданных обработки найдем нужный реквизит и установим свойства:

  1. Тип: Число;
  2. Длина: 15;
  3. Точность: 2 (или более, если требуются доли копеек).

Если табличная часть заполняется через промежуточную программную таблицу значений, проверим инициализацию колонок в коде. Обязательно используем объект КвалификаторыЧисла:


Квалификаторы = Новый КвалификаторыЧисла(15, 2);
ОписаниеТипаЦена = Новый ОписаниеТипов("Число", , Квалификаторы);
ТЗ.Колонки.Добавить("Цена", ОписаниеТипаЦена);

Причина 3. Округление в модулях подсистемы ценообразования

В типовых конфигурациях линейки «1С:Управление торговлей 10.3» алгоритмы расчета и подбора цен жестко завязаны на справочник Типы цен номенклатуры. Для каждого типа цены настраиваются правила:

  1. Порядок округления (например, до 0.01, до 0.05 или до 1).
  2. Метод округления (по арифметическим правилам или всегда в пользу предприятия).

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

Причина 4. Программная обработка событий табличного поля

Если в метаданных и формате все задано правильно, выясним, не переопределяется ли значение в обработчиках событий табличного поля формы. В толстом клиенте вывод данных в ячейку может контролироваться процедурами формы:

  1. Проверим событие ПриВыводеСтроки и ПриПолученииДанных. Если в модуле формы присутствует вызов вида ОформлениеСтроки.Ячейки.Цена.УстановитьТекст(...), то в колонку выводится текст, сформированный алгоритмом, игнорируя базовые свойства поля.
  2. Поставим точку останова в событии ПередОкончаниемРедактирования или в процедуре ПриИзменении соответствующего поля ввода. Это позволит убедиться, не происходит ли перезапись значения вторичными алгоритмами пересчета сумм документа.

Причина 5. Сохраненные пользовательские настройки формы

Платформа «1С:Предприятие» сохраняет персональные настройки колонок табличных полей для каждого пользователя (ширину, порядок, формат и видимость). Если колонка была отредактирована в конфигураторе, старые настройки пользователя могут перекрывать изменения.

Чтобы сбросить кэшированные параметры:

  1. Откроем форму обработки в режиме «1С:Предприятие».
  2. Нажмем правой кнопкой мыши по табличной части.
  3. В контекстном меню выберем команду Установить стандартные настройки (или Восстановить положение колонок).
← На главную