В практике работы с конфигурацией 1С:Управление торговлей 10.3 пользователи и администраторы нередко сталкиваются с парадоксальной ситуацией: в табличной части документа РеализацияТоваровУслуг колонка «Сумма без скидок» отображает значение, превышающее колонку «Всего» или «Сумма», при этом менеджеры утверждают, что никакие скидки (ни ручные, ни автоматические) не применялись. В данной статье мы подробно разберем, почему возникают такие расхождения, и как их устранить.
Одной из самых частых причин является механизм пересчета значений в строках документа. В типовой конфигурации УТ 10.3 реализована жесткая зависимость между полями Количество, Цена и Сумма. Рассмотрим ситуацию, когда менеджер вводит итоговую сумму вручную, минуя поле цены. Проанализируем следующий пример:
Допустим, продается 3 единицы товара на общую сумму 100 рублей. Система автоматически вычисляет цену: 100 / 3 = 33,33333... Поскольку точность хранения цены в 1С обычно ограничена двумя знаками после запятой, в поле Цена записывается значение 33,33.
Теперь выясним причину возникновения разницы. При расчете поля СуммаБезСкидок программа может использовать алгоритм перемножения округленной цены на количество: 33.33 * 3 = 99.99. Если же итоговая Сумма была введена как 100.00, возникает разница в 0.01 рубля. В зависимости от настроек округления и логики конкретного релиза (или внесенных доработок), эта разница может интерпретироваться системой как «отрицательная скидка» или, наоборот, привести к тому, что базовая стоимость окажется выше фактической.
Разберем влияние флага «Сумма включает НДС», который находится в диалоговом окне «Цены и валюта». Этот параметр критически важен для корректного отображения суммовых показателей. Проанализируем типичную ошибку:
СуммаБезСкидок значение, рассчитанное на базе цены с НДС, в то время как итоговая Сумма будет очищена от налога (или наоборот).В таких случаях мы видим визуальное расхождение, которое на самом деле является следствием некорректной последовательности действий пользователя или сбоя в логике обработки события ПриИзменении для флагов налогового учета.
Посмотрим на ситуацию, когда товар отгружается не в базовых единицах измерения. В 1С:УТ 10.3 каждая единица измерения имеет свой Коэффициент по отношению к базовой. Выясним, как это влияет на расчет:
Если коэффициент является дробным (например, 0.3333 для пересчета упаковок в штуки), то при вычислении Цены за единицу и последующем расчете Суммы возникают промежуточные округления. Программа хранит значения в регистрах с определенной точностью, и если при пересчете из одной единицы в другую происходит потеря знаков, итоговая сумма строки может разойтись с расчетной суммой без скидок на несколько копеек. В документах с большим количеством строк эти копейки могут накапливаться.
Как упоминалось в обсуждении, наличие нетиповых кнопок или измененных модулей часто становится первопричиной проблем. Если в конфигурацию были внесены изменения, например, кнопка «Пересчет абсолют», необходимо проверить код обработчика этой кнопки. Рассмотрим пример кода, который часто приводит к ошибкам, если не учитывать округление:
// Пример некорректного пересчета в нетиповой функции
Для Каждого СтрокаТЧ Из Товары Цикл
СтрокаТЧ.Сумма = СтрокаТЧ.Цена * СтрокаТЧ.Количество;
// Если забыть про расчет суммы без скидок, она может остаться старой
// Или рассчитаться по другому алгоритму в модуле документа
КонецЦикла;
Чтобы избежать подобных проблем, рекомендуется использовать типовые процедуры пересчета, расположенные в общем модуле ОбщегоНазначения или в модуле обработки табличных частей. Проанализируем правильный подход к вызову функций пересчета:
// Правильное использование типовых механизмов
СтруктураПараметров = Новый Структура("СпособРасчета, НалогВключенВСтоимость", ..., ...);
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТЧ, ЭтотОбъект, СтруктураПараметров);
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТЧ, ЭтотОбъект, СтруктураПараметров);
Если вы столкнулись с такой ситуацией, выполните следующие действия по шагам:
Сумма вручную. Если цена при этом стала иметь много знаков в остатке (скрытых от глаз), это явный признак проблемы округления.РеализацияТоваровУслуг в процедуре ТоварыПриИзменении или в процедуре ПередЗаписью.Подводя итог, можно сказать, что расхождение суммы без скидок и итоговой суммы в 1С:УТ 10.3 чаще всего является следствием математических погрешностей при обратных расчетах или результатом некорректной работы доработанных механизмов, которые не учитывают все взаимосвязи полей в строке документа. Для решения проблемы рекомендуется всегда использовать типовые процедуры пересчета и следить за единообразием настроек НДС и типов цен.