При оформлении валютных отгрузок типовые механизмы печати накладных ТОРГ-12 в рублевом эквиваленте могут приводить к плавающим расхождениям. Типичная ситуация: документ сформирован, менеджер распечатал или сохранил файл накладной для покупателя, а спустя некоторое время при повторном открытии печатной формы итоговая сумма документа меняется на одну копейку (при этом сумма НДС остается прежней, а меняется графа «Сумма без НДС»). Проанализируем природу этой ошибки и разберем практические шаги для ее устранения.
Выясним, почему рублевые суммы в валютном документе могут вести себя нестабильно при выводе на печать:
Окр(Число, 2) выполняет банковское округление (к ближайшему четному числу). Если при расчете строк печатной формы не задан режим арифметического округления Окр(Число, 2, 1), пограничные копейки (значения с 5 в третьем знаке после запятой) округляются по-разному в зависимости от четности предыдущей цифры.КурсыВалют на текущий момент времени или срез на начало/конец дня вместо фиксации курса из реквизитов документа, повторная загрузка или корректировка курсов валют задним числом изменит итоговую печатную форму.Рассмотрим, как правильно скорректировать математику пересчета валютных строк во внешней печатной форме (ВПФ). Главное правило — исключить независимое округление всех трех колонок (Сумма без НДС, НДС, Всего). Значение суммы без НДС должно вычисляться как строгая разница между общей суммой с НДС и выделенным НДС.
Посмотрим на пример корректного построчного расчета в модуле формирования табличного документа:
КурсДокумента = Шапка.КурсВзаиморасчетов;
КратностьДокумента = Шапка.КратностьВзаиморасчетов;
Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
// Пересчитываем валютную сумму строки в рубли по зафиксированному в документе курсу
СуммаВВалюте = СтрокаТЧ.Сумма;
РублеваяСуммаСНДС = Окр((СуммаВВалюте * КурсДокумента) / КратностьДокумента, 2, 1);
// Рассчитываем НДС строки с явным арифметическим округлением
Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
РублевыйНДС = Окр((РублеваяСуммаСНДС * 20) / 120, 2, 1);
ИначеЕсли СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
РублевыйНДС = Окр((РублеваяСуммаСНДС * 10) / 110, 2, 1);
Иначе
РублевыйНДС = 0;
КонецЕсли;
// Сумму без НДС получаем расчетным путем, избегая накопления погрешности
РублеваяСуммаБезНДС = РублеваяСуммаСНДС - РублевыйНДС;
// Заполняем параметры области строки
ОбластьСтрока.Параметры.Сумма = РублеваяСуммаСНДС;
ОбластьСтрока.Параметры.СуммаНДС = РублевыйНДС;
ОбластьСтрока.Параметры.СуммаБезНДС = РублеваяСуммаБезНДС;
КонецЦикла;
Разберем типичную ошибку при выводе подвала ТОРГ-12: когда итоговая сумма документа берется не как сумма выведенных в таблицу строк, а рассчитывается заново из реквизита СуммаДокумента. Чтобы в документе всегда сходилась математика по вертикали и горизонтали, итоги должны формироваться простым накоплением построчных рублевых значений:
ИтогРубВсего = 0;
ИтогРубНДС = 0;
ИтогРубБезНДС = 0;
Для Каждого СтрокаПечати Из ТаблицаПодготовленныхДанных Цикл
ИтогРубВсего = ИтогРубВсего + СтрокаПечати.РублеваяСуммаСНДС;
ИтогРубНДС = ИтогРубНДС + СтрокаПечати.РублевыйНДС;
ИтогРубБезНДС = ИтогРубБезНДС + СтрокаПечати.РублеваяСуммаБезНДС;
КонецЦикла;
ОбластьПодвал.Параметры.Всего = ИтогРубВсего;
ОбластьПодвал.Параметры.ВсегоНДС = ИтогРубНДС;
ОбластьПодвал.Параметры.ВсегоБезНДС = ИтогРубБезНДС;
Если документ Реализация товаров и услуг уже проведен и сформировал движения по учету НДС или расчетам с контрагентами в регламентированной валюте, наиболее надежный подход — считывать рублевые суммы напрямую из таблиц движений документа. Это гарантирует, что печатная форма всегда будет показывать именно те суммы, которые зафиксированы в проводках и бухгалтерских регистрах, независимо от дальнейших изменений нормативно-справочной информации.
Для предотвращения расхождений с контрагентами при документообороте рекомендуем следующие меры:
1С:Управление торговлей и 1С:Бухгалтерия предприятия), логику печати ТОРГ-12 следует вынести во внешнюю печатную форму с одинаковым программным кодом для обеих баз.