При работе с конфигурацией 1С:Управление торговлей 11.4 пользователи часто сталкиваются с ситуацией, когда числовые дополнительные реквизиты (например, «Метров на поддоне» или «Вес нетто») автоматически округляются до двух знаков после запятой. Это происходит даже в тех случаях, когда бизнес-процесс требует более высокой точности, например, четырех или пяти знаков. Разберем подробно, почему так происходит и как корректно настроить систему, чтобы избежать потери точности данных.
Прежде чем приступать к настройкам, нам необходимо четко разграничить два понятия в платформе 1С: Тип значения и Формат. В этом часто кроется корень ошибки: пользователь меняет визуальное представление, но не меняет параметры хранения данных в базе.
Тип значения (Число) — это жесткая настройка в базе данных. Если для реквизита установлена точность 2, то платформа физически не сможет записать в это поле число с тремя знаками. Любое значение будет отсекаться или округляться при попытке записи объекта.
Формат вывода — это лишь «маска» отображения. Если в типе данных стоит точность 2, а в формате вы указали 4 знака, система покажет вам что-то вроде 33.3400. То есть она просто добавит нули к уже округленному значению.
Проанализируем ситуацию: если программа округляет 33.3385 до 33.34, это означает, что на уровне Типа значения в Плане видов характеристик установлена точность «2».
Рассмотрим пошагово, как изменить точность для существующего или нового реквизита. Важно помнить, что в 1С:УТ 11 дополнительные реквизиты привязаны к конкретным наборам (например, «Общие для всех видов номенклатуры» или индивидуальные наборы для каждого вида номенклатуры).
Важное замечание: Если по данному реквизиту уже были введены данные в документы или справочники, платформа может заблокировать изменение типа (поля будут «серыми»). В этом случае система защищает целостность данных.
Если система не дает изменить тип существующего реквизита из-за наличия данных, самым надежным способом будет создание нового свойства с правильными параметрами «с нуля».
Разберем, как правильно настроить параметры при создании:
Выясним причину, почему это лучше: при создании нового элемента ПВХ (Плана видов характеристик) платформа создает чистую запись в метаданных с правильной квалификацией числа. После этого останется только перенести данные из старого реквизита в новый (например, с помощью обработки «Групповое изменение реквизитов») и удалить старый.
В некоторых версиях конфигураций 1С:Управление торговлей могут существовать ограничения в самих метаданных Плана видов характеристик ДополнительныеРеквизитыИСведения. Если программный интерфейс не позволяет выбрать точность более 3 знаков, нам придется обратиться к Конфигуратору.
Рассмотрим алгоритм действий в Конфигураторе:
Обратите внимание: Дополнительные реквизиты физически хранятся в табличных частях объектов. Например, для справочника Номенклатура это табличная часть ДополнительныеРеквизиты, где значение хранится в поле Значение с типом Характеристика.ДополнительныеРеквизитыИСведения. Изменение типа в ПВХ автоматически расширяет возможности хранения в этих табличных частях.
Если нам нужно программно «заставить» систему изменить точность у уже существующего реквизита, не удаляя его, воспользуемся стандартной обработкой.
Выполним следующие шаги:
Дополнительные реквизиты и сведения (План видов характеристик).Здесь есть технический нюанс: поле типа значения является сложным объектом (ОписаниеТипов). Напрямую через стандартную форму группового изменения его редактировать сложно. В таких случаях часто используется код для изменения квалификаторов числа.
Пример программного изменения точности (для использования во внешних обработках):
// Получаем объект дополнительного реквизита
ДопРеквизитОбъект = СсылкаНаРеквизит.ПолучитьОбъект();
// Создаем новые квалификаторы числа (Длина 15, Точность 4)
КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 4);
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));
// Устанавливаем новый тип значения
ДопРеквизитОбъект.ТипЗначения = Новый ОписаниеТипов(МассивТипов, , КвалификаторыЧисла);
// Записываем объект
ДопРеквизитОбъект.Записать();
Если вы изменили настройки, но округление все равно происходит, нужно проанализировать структуру наборов свойств. В УТ 11.4 для каждого Вида номенклатуры может быть создан свой уникальный набор дополнительных реквизитов.
Рассмотрим ситуацию: у вас есть реквизит «Метров на поддоне» в наборе для вида «Строительные материалы» и точно такой же реквизит в наборе для вида «Инструменты». Если вы изменили настройки только в одном месте, а товар относится к другому виду номенклатуры, округление сохранится. Убедитесь, что вы правите реквизит именно в том наборе, который используется в карточке проблемного товара.
В редких случаях округление может быть вызвано логикой общего модуля УправлениеСвойствами. При записи объекта система вызывает процедуры проверки и приведения типов. Если в коде конфигурации есть жесткое приведение к точности метаданных, то любые попытки обойти это через интерфейс могут игнорироваться.
Разберем, как это работает:
При вызове метода ОбщегоНазначения.ЗаписатьОбъект() или стандартной процедуры ПередЗаписью, система обращается к коллекции дополнительных реквизитов. Если платформа видит, что тип значения в ПВХ не соответствует передаваемому числу, она выполняет автоматическое преобразование. Чтобы этого не происходило, всегда проверяйте актуальность кэша (команда /ClearCache в строке запуска), так как настройки Планов видов характеристик активно кэшируются платформой 1С.
Для гарантированного решения проблемы рекомендуем придерживаться следующей последовательности:
Следуя этим инструкциям, мы сможем добиться хранения данных с любой необходимой точностью, обеспечив корректность управленческого учета в 1С:Управление торговлей 11.4.