Как настроить три знака после запятой в ценах 1С:Управление торговлей 11.3?

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

В практике торговых организаций часто возникает потребность в использовании более высокой точности цен, чем стандартные два знака после запятой. Это особенно актуально при работе с мелкооптовыми товарами, в химической промышленности или при интеграции с торговыми сетями через системы EDI (например, Exite), где цена за единицу товара может составлять доли копеек. Однако в типовой конфигурации «1С:Управление торговлей 11.3» (УТ 11.3) точность цен жестко ограничена двумя знаками.

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

Почему не помогает настройка формата ячеек

Многие пользователи и начинающие специалисты пытаются решить задачу «малой кровью», изменяя свойство Формат в свойствах колонки «Цена» на форме документа. Рассмотрим подробнее, почему это не работает. Формат отображения лишь визуализирует данные, которые хранятся в базе. Если в типе данных самого поля (в метаданных) прописана точность «2», то при попытке записать число 10.123 система автоматически округлит его до 10.12 еще до момента сохранения в таблицу базы данных. Таким образом, для хранения третьего знака необходимо менять структуру самих данных.

Решение 1: Программное изменение конфигурации

Если бизнес-процессы компании категорически требуют наличия трех знаков именно в цене за единицу, придется прибегнуть к внесению изменений в конфигуратор. Выясним причину сложности этого процесса в версии 11.3. В отличие от более современных редакций (например, 11.4 или 11.5), в версии 11.3 механизмы определяемых типов еще не полностью охватывали все необходимые объекты.

Шаг 1: Изменение определяемых типов

Проанализируем структуру метаданных. В первую очередь необходимо найти ОпределяемыеТипы. Нас интересуют типы, отвечающие за денежные показатели. В частности, это может быть ОпределяемыйТип.ДенежнаяСуммаНеотрицательная или специализированный тип для цен, если он выделен в вашей версии подсистемы.

Необходимо изменить свойство КвалификаторыЧисла, установив точность равную 3. Однако будьте осторожны: изменение этого типа повлияет на все объекты, которые его используют. Проверьте, не «поплывут» ли суммы документов, которые должны оставаться двухзначными (копейки).

Шаг 2: Модификация регистров

Данные о ценах хранятся в регистрах сведений. Основным является регистр ЦеныНоменклатуры. Разберем по шагам:

  1. Найдем ресурс Цена в регистре сведений ЦеныНоменклатуры.
  2. Изменим его точность с 2 до 3.
  3. Аналогичную операцию необходимо провести для регистра накопления ВыручкаИСебестоимостьПродаж, если требуется хранить точную цену в разрезе партий и продаж.

Шаг 3: Табличные части документов

После изменения типов в регистрах, необходимо пройтись по всем документам, где фигурирует цена: ЗаказКлиента, РеализацияТоваровУслуг, ПоступлениеТоваровУслуг, УстановкаЦенНоменклатуры. В каждой табличной части «Товары» у реквизита Цена нужно проверить соответствие типа данных новому значению точности.

Рассмотрим пример кода для программного пересчета цен при изменении количества, если вы решите автоматизировать этот процесс в расширении:


// Пример в модуле формы документа
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
    СтрокаТаблицы = Элементы.Товары.ТекущиеДанные;
    // Используем стандартный обработчик, но следим за точностью
    РассчитатьСуммуСтроки(СтрокаТаблицы); 
КонецПроцедуры

Решение 2: Методический подход (без программирования)

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

Использование упаковок товаров

Предположим, товар стоит 0,123 рубля за 1 грамм. Мы не можем ввести такую цену в базу. Решение: создадим упаковку «Мешок 10 кг» (10 000 грамм). В этом случае цена за упаковку составит 1230,00 рублей. Система прекрасно справится с этой суммой, так как в ней всего два знака после запятой. При продаже вы будете оперировать не граммами, а упаковками или их долями, что в сумме даст корректный результат.

Цена за N единиц

В 1С:УТ 11.3 существует штатный механизм назначения цены не за 1 единицу товара, а за определенное количество (например, за 10, 100 или 1000 единиц). Посмотрим, как это настроить:

  1. Перейдем в справочник «Виды цен».
  2. Для нужного вида цены найдем настройки точности или кратности.
  3. Укажем, что цена задается, например, «за 100 единиц».

В этом случае, если реальная цена товара 0,123 руб., вы укажете цену 12,30 руб. за 100 штук. При подборе товара в документ 1С сама разделит 12,30 на 100 и умножит на количество. Это наиболее «чистый» способ решения задачи, не требующий вмешательства в код 1С:Предприятия.

Важные риски и последствия

Проанализируем критические моменты, с которыми вы столкнетесь при выборе технического пути (изменения точности до 3 знаков):

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

← На главную