Почему в валютных реализациях меняется сумма ТОРГ-12 на одну копейку и как это исправить?

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

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

Основные причины возникновения расхождений

Выясним, почему рублевые суммы в валютном документе могут вести себя нестабильно при выводе на печать:

  1. Различия в алгоритмах округления между конфигурациями и формами. По умолчанию функция платформы Окр(Число, 2) выполняет банковское округление (к ближайшему четному числу). Если при расчете строк печатной формы не задан режим арифметического округления Окр(Число, 2, 1), пограничные копейки (значения с 5 в третьем знаке после запятой) округляются по-разному в зависимости от четности предыдущей цифры.
  2. Динамический пересчет курса валют при печати. Если алгоритм формирования печатной формы обращается к регистру сведений КурсыВалют на текущий момент времени или срез на начало/конец дня вместо фиксации курса из реквизитов документа, повторная загрузка или корректировка курсов валют задним числом изменит итоговую печатную форму.
  3. Разница между суммированием строк и округлением общего итога. Если сложить рублевые суммы всех строк, уже предварительно округленные до двух знаков, и сравнить результат с пересчетом общей валютной суммы документа по курсу с последующим однократным округлением, возникнет разница в 1 копейку.
  4. Влияние зачета авансов. Если печатная форма пытается рассчитать рублевый эквивалент с учетом курса ранее полученного аванса, то любое перепроведение или ввод платежных документов задним числом изменяет распределение авансов и меняет суммы в печатной форме.

Шаг 1. Унификация формул округления в коде печатной формы

Рассмотрим, как правильно скорректировать математику пересчета валютных строк во внешней печатной форме (ВПФ). Главное правило — исключить независимое округление всех трех колонок (Сумма без НДС, НДС, Всего). Значение суммы без НДС должно вычисляться как строгая разница между общей суммой с НДС и выделенным НДС.

Посмотрим на пример корректного построчного расчета в модуле формирования табличного документа:


КурсДокумента = Шапка.КурсВзаиморасчетов;
КратностьДокумента = Шапка.КратностьВзаиморасчетов;

Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
    // Пересчитываем валютную сумму строки в рубли по зафиксированному в документе курсу
    СуммаВВалюте = СтрокаТЧ.Сумма;
    РублеваяСуммаСНДС = Окр((СуммаВВалюте * КурсДокумента) / КратностьДокумента, 2, 1);
    
    // Рассчитываем НДС строки с явным арифметическим округлением
    Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
        РублевыйНДС = Окр((РублеваяСуммаСНДС * 20) / 120, 2, 1);
    ИначеЕсли СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
        РублевыйНДС = Окр((РублеваяСуммаСНДС * 10) / 110, 2, 1);
    Иначе
        РублевыйНДС = 0;
    КонецЕсли;
    
    // Сумму без НДС получаем расчетным путем, избегая накопления погрешности
    РублеваяСуммаБезНДС = РублеваяСуммаСНДС - РублевыйНДС;
    
    // Заполняем параметры области строки
    ОбластьСтрока.Параметры.Сумма = РублеваяСуммаСНДС;
    ОбластьСтрока.Параметры.СуммаНДС = РублевыйНДС;
    ОбластьСтрока.Параметры.СуммаБезНДС = РублеваяСуммаБезНДС;
КонецЦикла;

Шаг 2. Расчет итогов подвала суммированием строк

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


ИтогРубВсего = 0;
ИтогРубНДС = 0;
ИтогРубБезНДС = 0;

Для Каждого СтрокаПечати Из ТаблицаПодготовленныхДанных Цикл
    ИтогРубВсего = ИтогРубВсего + СтрокаПечати.РублеваяСуммаСНДС;
    ИтогРубНДС = ИтогРубНДС + СтрокаПечати.РублевыйНДС;
    ИтогРубБезНДС = ИтогРубБезНДС + СтрокаПечати.РублеваяСуммаБезНДС;
КонецЦикла;

ОбластьПодвал.Параметры.Всего = ИтогРубВсего;
ОбластьПодвал.Параметры.ВсегоНДС = ИтогРубНДС;
ОбластьПодвал.Параметры.ВсегоБезНДС = ИтогРубБезНДС;

Шаг 3. Использование данных из регистров документа вместо динамического расчета

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

Рекомендации по регламенту работы

Для предотвращения расхождений с контрагентами при документообороте рекомендуем следующие меры:

  1. Создание единой внешней печатной формы (ВПФ). Если на предприятии используется связка нескольких конфигураций (например, 1С:Управление торговлей и 1С:Бухгалтерия предприятия), логику печати ТОРГ-12 следует вынести во внешнюю печатную форму с одинаковым программным кодом для обеих баз.
  2. Сохранение архивных копий документов. Настройте автоматическое прикрепление печатной формы в формате PDF к объекту при первичной отправке документа клиенту. Это позволит в любой момент сверить текущее состояние базы с фактически переданным первичным документом.
← На главную