При разработке и доработке печатных форм и обработок (например, обработки печати ценников в «1С:Управление торговлей 10.3») разработчики нередко сталкиваются с ситуацией, когда дробное значение цены (например, 0,98) при помещении в табличную часть или отображении в интерфейсе принудительно округляется платформой до целого числа (становится 1). При этом в программном коде получение цены может возвращать корректное число с копейками.
Разберем подробно причины такого поведения платформы «1С:Предприятие» и пошагово рассмотрим способы устранения этой проблемы.
Проанализируем распространенную ошибку: попытку задать формат числа в свойствах колонки или элемента управления в нотации SQL или других языков программирования, например 15,2. Платформа 1С не распознает такой синтаксис. При передаче некорректной строки свойство Формат игнорируется, и число выводится по умолчанию, что часто приводит к отсечению или округлению дробной части.
Для корректного отображения копеек в обычной форме необходимо использовать встроенный конструктор строки формата или задать параметры явно:
ЧДЦ=2 (число дробных цифр) и при необходимости разделитель дробной части ЧРД=,.Пример корректной форматной строки для отображения двух знаков после запятой:
ЧДЦ=2; ЧГ=0
Если формат отображения настроен корректно, но число все равно округляется сразу после записи в строку, проверим тип данных самого реквизита. В платформе 1С числовой тип данных определяется двумя ключевыми параметрами: длина и точность.
Если в реквизитах табличной части обработки у реквизита Цена установлена длина 15, а точность оставлена равной 0, платформа на уровне типизации автоматически выполняет математическое округление любого передаваемого значения до целого числа. В результате значение 0,98 превращается в 1 еще до момента отрисовки на экране.
Для исправления в дереве метаданных обработки найдем нужный реквизит и установим свойства:
Число;15;2 (или более, если требуются доли копеек).Если табличная часть заполняется через промежуточную программную таблицу значений, проверим инициализацию колонок в коде. Обязательно используем объект КвалификаторыЧисла:
Квалификаторы = Новый КвалификаторыЧисла(15, 2);
ОписаниеТипаЦена = Новый ОписаниеТипов("Число", , Квалификаторы);
ТЗ.Колонки.Добавить("Цена", ОписаниеТипаЦена);
В типовых конфигурациях линейки «1С:Управление торговлей 10.3» алгоритмы расчета и подбора цен жестко завязаны на справочник Типы цен номенклатуры. Для каждого типа цены настраиваются правила:
до 0.01, до 0.05 или до 1).Если в коде обработки вызывается стандартная процедура ценообразования, например Ценообразование.ОкруглитьЦену(), цена может округляться согласно настройкам выбранного типа цен еще до попадания в форму. Проверим карточку используемого типа цены в режиме «1С:Предприятие» и убедимся, что порядок округления настроен до копеек (0.01).
Если в метаданных и формате все задано правильно, выясним, не переопределяется ли значение в обработчиках событий табличного поля формы. В толстом клиенте вывод данных в ячейку может контролироваться процедурами формы:
ПриВыводеСтроки и ПриПолученииДанных. Если в модуле формы присутствует вызов вида ОформлениеСтроки.Ячейки.Цена.УстановитьТекст(...), то в колонку выводится текст, сформированный алгоритмом, игнорируя базовые свойства поля.ПередОкончаниемРедактирования или в процедуре ПриИзменении соответствующего поля ввода. Это позволит убедиться, не происходит ли перезапись значения вторичными алгоритмами пересчета сумм документа.Платформа «1С:Предприятие» сохраняет персональные настройки колонок табличных полей для каждого пользователя (ширину, порядок, формат и видимость). Если колонка была отредактирована в конфигураторе, старые настройки пользователя могут перекрывать изменения.
Чтобы сбросить кэшированные параметры: