Как реализовать вывод валютных показателей в УПД в 1С:Бухгалтерия 3.0 с учетом авансов?

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

При осуществлении внешнеэкономической деятельности или заключении договоров в условных единицах (у.е.) отечественные компании часто сталкиваются с необходимостью предоставления клиентам первичных документов, содержащих сведения о стоимости товаров или услуг в иностранной валюте. В типовой конфигурации 1С:Бухгалтерия предприятия 3.0 (БП 3.0) стандартная печатная форма Универсального передаточного документа (УПД) формируется исключительно в рублях. Это обусловлено строгими требованиями валютного и налогового законодательства РФ. Тем не менее, для целей управленческого учета и бесконфликтной сверки взаиморасчетов стороны регулярно договариваются о выводе дополнительных валютных колонок.

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

1. Законодательный контекст и ограничения типовой конфигурации

В соответствии с положениями Налогового кодекса РФ (п. 7 ст. 169 НК РФ) и Постановлением Правительства РФ № 1137, составление счетов-фактур и УПД в иностранной валюте допускается только тогда, когда обязательство выражено в валюте и оплата по договору также производится в этой же валюте. Если же договор заключен в валюте (или у.е.), но оплата предусмотрена в рублях, то стоимостные показатели в официальном бумажном документе обязаны отражаться исключительно в рублевом эквиваленте. По этой причине разработчики фирмы 1С заблокировали вывод валютных показателей в стандартных макетах УПД.

Чтобы обойти это ограничение и выводить валютные суммы без нарушения требований ФНС, разработчики создают внешние печатные формы. В таких формах рублевые показатели остаются в своих законодательно закрепленных колонках, а для валюты добавляются новые, обособленные графы (например, графы 4а, 5а, 8а, 9а), которые служат информационным дополнением для контрагента.

2. Проблема пересчета валюты при наличии авансов

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

Согласно требованиям ПБУ 3/2006, полученные или выданные авансы в иностранной валюте не подлежат последующей переоценке. Рублевая оценка стоимости активов фиксируется по курсу Центрального Банка (или договорному курсу) на дату совершения платежа (предоплаты). Оставшаяся часть стоимости, оплачиваемая после отгрузки, оценивается по курсу на дату самой отгрузки.

Проанализируем конкретную ситуацию:

  1. Компания заключает договор на поставку товара общей стоимостью 1 000 USD.
  2. Покупатель перечисляет предоплату в размере 30% (300 USD). Курс доллара на дату платежа составляет 80 рублей за доллар. Сумма аванса в рублях составляет 24 000 рублей.
  3. В момент отгрузки курс доллара вырос до 90 рублей за доллар. Оставшиеся 70% стоимости (700 USD) пересчитываются по текущему курсу отгрузки: 700 * 90 = 63 000 рублей.
  4. Общая сумма документа реализации в рублях складывается из суммы аванса и стоимости постоплаты: 24 000 + 63 000 = 87 000 рублей.
  5. Средневзвешенный («смешанный») курс реализации в данном случае составляет 87 рублей за доллар (87 000 рублей / 1 000 USD).

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

3. Техническое решение: корректное извлечение валютных данных

Чтобы избежать математических ошибок, вызванных зачетом авансов, мы должны использовать правильный архитектурный подход. Вместо обратных расчетов из рублевых величин необходимо извлекать исходные валютные данные, которые уже сохранены в базе данных.

В конфигурации 1С:Бухгалтерия предприятия 3.0 предусмотрено два надежных источника данных:

  1. Табличная часть документа: В документах РеализацияТоваровУслуг (для ВПФ продажи) и ПоступлениеТоваровУслуг (для ВПФ покупки) в табличных частях «Товары» и «Услуги» всегда хранятся реквизиты Цена и Сумма. Если договор ведется в валюте, эти реквизиты заполняются именно в валюте договора. Рублевый эквивалент рассчитывается программно при проведении и фиксируется в проводках, но в самой табличной части сохраняется чистая валютная стоимость.
  2. Специализированный регистр сведений СуммаДокументаВРублях: Этот системный регистр хранит точные рублевые оценки показателей для документов, выраженных в валюте. 1С обращается к нему для формирования записей книг покупок/продаж и деклараций по НДС. Сопоставление данных регистра с табличной частью позволяет получить точные пропорции расчетов.

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

Шаг 1. Регистрация внешней печатной формы в системе

Для интеграции обработки в механизм БСП (Библиотека стандартных подсистем) определим функцию регистрации внешнего отчета или обработки. Напишем следующий программный код в модуле объекта обработки:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработкеКопированием();
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.2";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "УПД (с колонкой стоимость в валюте)";
    НоваяКоманда.Идентификатор = "УПД_Валютный";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Шаг 2. Запрос данных из табличной части документа реализации

Проанализируем структуру запроса, который позволит нам извлечь исходные валютные показатели напрямую из табличной части документа отгрузки. Нам потребуются исходные значения полей Цена, Сумма и СуммаНДС в валюте договора, минуя механизмы рублевого пересчета проводок:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   РеализацияТовары.НомерСтроки КАК НомерСтроки,
    |   РеализацияТовары.Номенклатура КАК Номенклатура,
    |   РеализацияТовары.Количество КАК Количество,
    |   РеализацияТовары.Цена КАК ЦенаВВалюте,
    |   РеализацияТовары.Сумма КАК СуммаВВалюте,
    |   РеализацияТовары.СуммаНДС КАК НДСВВалюте,
    |   РеализацияТовары.Всего КАК ВсегоВВалюте
    |ИЗ
    |   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
    |ГДЕ
    |   РеализацияТовары.Ссылка = &СсылкаНаДокумент
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |   РеализацияУслуги.НомерСтроки,
    |   РеализацияУслуги.Номенклатура,
    |   РеализацияУслуги.Количество,
    |   РеализацияУслуги.Цена,
    |   РеализацияУслуги.Сумма,
    |   РеализацияУслуги.СуммаНДС,
    |   РеализацияУслуги.Всего
    |ИЗ
    |   Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияУслуги
    |ГДЕ
    |   РеализацияУслуги.Ссылка = &СсылкаНаДокумент";

Запрос.УстановитьПараметр("СсылкаНаДокумент", ОбъектВалютногоДокумента);
ВыборкаДанных = Запрос.Выполнить().Выбрать();

Шаг 3. Заполнение макета печатной формы УПД

При выводе макета УПД мы должны переопределить стандартное заполнение параметров областей. В процессе обхода строк табличной части сопоставим рублевые значения, формируемые типовым алгоритмом печати 1С, с валютными значениями, полученными из нашего точечного запроса.

Рассмотрим пример алгоритма вывода строки в макет печатной формы:


Пока ВыборкаДанных.Следующий() Цикл
    
    ОбластьСтроки = МакетУПД.ПолучитьОбласть("Строка");
    
    // Заполняем стандартные рублевые параметры из типового алгоритма
    ОбластьСтроки.Параметры.ТоварНаименование = ВыборкаДанных.Номенклатура.НаименованиеПолное;
    ОбластьСтроки.Параметры.Количество = ВыборкаДанных.Количество;
    ОбластьСтроки.Параметры.СтоимостьРуб = ВыборкаДанных.Количество * ВыборкаДанных.ЦенаВВалюте * КурсИзШапки; // Неверно при авансах!
    
    // Заполняем правильные валютные показатели напрямую
    ОбластьСтроки.Параметры.ЦенаВалюта = ВыборкаДанных.ЦенаВВалюте;
    ОбластьСтроки.Параметры.СтоимостьВалюта = ВыборкаДанных.СуммаВВалюте;
    ОбластьСтроки.Параметры.НДСВалюта = ВыборкаДанных.НДСВВалюте;
    ОбластьСтроки.Параметры.ВсегоВалюта = ВыборкаДанных.ВсегоВВалюте;
    
    ТабличныйДокумент.Вывести(ОбластьСтроки);
    
КонецЦикла;

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

4. Адаптация для документов поступления

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

5. Важное предупреждение: Новые требования к форме УПД с 2026 года

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

С 1 апреля 2026 года в силу вступает Постановление Правительства РФ от 23.01.2026 № 26. Данный нормативный акт существенно изменяет структуру счетов-фактур и УПД. В частности, в документе появляется обязательная к заполнению строка 5б, предназначенная для вывода реквизитов (номера и даты) документов об авансовых платежах, которые зачитываются под текущую поставку.

Рекомендация для программиста: При создании макета для ВПФ с колонкой валюты в качестве базового макета необходимо использовать исключительно актуальный релиз формы УПД, регламентированный Постановлением № 26. Если адаптировать устаревший макет, в нем будет отсутствовать строка 5б, что повлечет за собой высокий риск отказа налоговых органов в предоставлении вычета по НДС для ваших покупателей.

← На главную