Почему расходятся суммы на копейки при вводе реализации на основании заказа покупателя в 1С:УТ 10.3?

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

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

Проанализируем механику работы типовых документов, выясним, почему простое изменение точности реквизитов в табличной части приводит к ошибкам, и рассмотрим надежные способы решения этой задачи.

В чем причина разрыва сумм: логика ввода на основании

Когда в конфигурации увеличивают точность реквизита Цена (например, задают тип Число(15, 3) вместо типового Число(15, 2)), разработчики часто меняют этот тип только в табличных частях Товары соответствующих документов. Однако при этом забывают про внутреннюю архитектуру типовой торговли.

Рассмотрим, как происходит заполнение накладной при вводе на основании:

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

Решение 1. Синхронизация разрядности метаданных по всей цепочке

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

Разберем по шагам, какие объекты метаданных необходимо проверить и скорректировать:

  1. Откроем дерево метаданных конфигурации и найдем регистр накопления ЗаказыПокупателей.
  2. В структуре измерений и ресурсов регистра найдем поле Цена и приведем его тип к точному соответствию с табличной частью документа — например, Число(15, 3).
  3. Проверим табличные части Товары обоих документов — ЗаказПокупателя и РеализацияТоваровИУслуг. Длина дробной части у реквизитов Цена, Сумма и СуммаНДС должна быть согласована.
  4. Проверим форматные свойства элементов управления на формах документов. Если в свойстве Формат элемента формы жестко задано ЧДЦ=2, форма будет визуально усекать введенное значение и может передавать в объект искаженные данные.
  5. Обязательно выполним перепроведение цепочки документов, чтобы движения по регистру ЗаказыПокупателей перезаписались с новой точностью.

Решение 2. Использование упаковок и укрупненных единиц измерения

Увеличение разрядности реквизита цены в метаданных влечет за собой риски при формировании регламентированных печатных форм (ТОРГ-12, Счет-фактура, УПД), где по законодательству предусмотрено только 2 знака после запятой. При наличии трех знаков в печатных формах неизбежно возникает арифметическая несостыковка: произведение количества на цену визуально не дает итоговую сумму строки.

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

  1. Вместо дробной цены за одну мелкую единицу товара (например, 1 штуку) перейдем к учету через коэффициенты упаковок.
  2. Создадим в справочнике номенклатуры дополнительную единицу измерения (например, «Упаковка 100 шт.» или «Блок 1000 шт.») с соответствующим коэффициентом пересчета.
  3. Зададим цену с точностью до 2 знаков не на единицу, а на сформированную упаковку. В этом случае все суммы строк и НДС рассчитываются по стандартным правилам без потери копеек.

Решение 3. Расчет цены от итоговой суммы («Сумма / Количество»)

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

  1. Фиксируем итоговую стоимость позиции в заказе с точностью до 2 знаков.
  2. Вычисляем цену за единицу расчетным путем: Цена = Сумма / Количество.
  3. При программном переносе данных из заказа в реализацию передаем неизменную сумму строки и исчисленный от нее НДС, чтобы исключить повторное построчное вычисление с накоплением математической погрешности.
← На главную