При работе в современных редакциях 1С:ERP Управление предприятием 2 (начиная с версий 2.4.13 и выше) пользователи часто сталкиваются с ситуацией, когда после обновления системы блокируется возможность печати счета-фактуры в рублях, если первичный документ оформлен в иностранной валюте. При попытке вывода на печать программа выдает диагностическое сообщение: «Для Счет-фактура выданный №... указана иностранная валюта. Не требуется печатать счет-фактуру в рублях».
Для бухгалтера такая ситуация выглядит как программная ошибка, поскольку рублевые суммы необходимы для корректного формирования книги продаж и внутреннего контроля. Однако с точки зрения разработчиков «1С», это строгая реализация норм законодательства. В этой статье мы разберем, почему так происходит, где именно в коде зарыта эта проверка и как решить проблему, не нарушая логику системы.
Прежде чем переходить к коду, проанализируем законодательную базу, на которую опирается система. Основным документом здесь является Постановление Правительства РФ №1137. Согласно правилам заполнения счета-фактуры:
Проблема в 1С:ERP возникает тогда, когда в соглашении или договоре указано, что и расчеты, и оплата производятся в иностранной валюте. В этом случае система считает операцию «чисто валютной» и, следуя Постановлению №1137, запрещает формировать рублевый макет. По мнению методологов, наличие рублевого счета-фактуры при полностью валютных расчетах может стать причиной отказа в вычете НДС у покупателя, так как документ будет признан составленным с нарушением правил.
Если нам все же необходимо обойти это ограничение (например, по требованию специфических условий контракта или для управленческих нужд), нам нужно понимать, где происходит проверка. Рассмотрим программную реализацию этой логики в 1С:ERP.
Логика контроля сосредоточена в обработке ПечатьОбщихФорм. Нам необходимо зайти в Модуль менеджера этой обработки. Основной интерес представляет процедура, отвечающая за проверку возможности печати. Обычно это ПроверитьВозможностьПечатиСчетаФактурыВВалюте или аналогичные блоки внутри формирования коллекции печатных форм.
Алгоритм системы выглядит примерно так:
// Фрагмент логики проверки в модуле менеджера ПечатьОбщихФорм
Если ЗначениеЗаполнено(ВалютаДокумента) И ВалютаДокумента <> ВалютаРегламентированногоУчета Тогда
Если НЕ ЭтоРасчетыВУсловныхЕдиницах(Договор) Тогда
ТекстСообщения = НСтр("ru = 'Для %1 указана иностранная валюта. Не требуется печатать счет-фактуру в рублях.'");
// Вывод сообщения пользователю и отказ в формировании печатной формы
КонецЕсли;
КонецЕсли;
Программа проверяет реквизит Валюта в документе Счет-фактура выданный. Если она отличается от рубля и в связанных настройках расчетов (Договор/Соглашение) не стоит признак «Оплата в рублях», система блокирует вызов рублевого макета.
Рассмотрим наиболее безопасные способы обхода данного ограничения, которые позволят сохранить конфигурацию на поддержке и удовлетворить требования бухгалтерии.
Это самый правильный и рекомендуемый путь. Вы можете создать или скачать внешнюю печатную форму счета-фактуры. В чем ее преимущество? Внешняя форма может игнорировать стандартные проверки обработки ПечатьОбщихФорм.
При разработке такой формы мы берем данные из документа, получаем курс на дату реализации и программно пересчитываем все показатели (цена, сумма, сумма НДС) в рубли. При этом стандартная кнопка «Печать» останется неизменной, а у пользователя появится дополнительный пункт в меню печати, который не будет выдавать ошибок.
Иногда ошибка возникает из-за неверно выбранной схемы расчетов. Проанализируем настройки договора с контрагентом:
Если в настройках указано «Оплата в иностранной валюте», 1С:ERP жестко блокирует рубли. Переключение на «Оплата в рублях» автоматически активирует возможность печати счета-фактуры в рублях, так как это будет соответствовать требованиям законодательства для расчетов в у.е.
Если бухгалтерии принципиально нужно использовать именно типовую кнопку печати, мы можем воспользоваться механизмом расширений. Рассмотрим, как это сделать программно. Нам нужно создать расширение и перехватить процедуру проверки.
Например, мы можем использовать &Вместо для функции, выдающей предупреждение, или модифицировать процедуру заполнения коллекции печатных форм:
&Вместо("ПроверитьВозможностьПечатиСчетаФактурыВРублях")
Процедура Расш1_ПроверитьВозможностьПечатиСчетаФактурыВРублях(ПараметрыПечати, Отказ)
// Мы просто подавляем установку флага Отказ,
// чтобы система проигнорировала валютный контроль
// Но будьте осторожны: это может привести к печати некорректных данных,
// если макет не предназначен для пересчета
КонецПроцедуры
Важно: При использовании расширения необходимо убедиться, что макет СчетФактура1137 (или актуальный на дату печати) корректно получает данные. В типовом механизме, если проверка пройдена, система сама выполняет пересчет по курсу документа.
Часто бухгалтеры аргументируют необходимость печати тем, что «в Книге продаж все в рублях». Проанализируем этот момент. В 1С:ERP данные в регистры НДС (такие как НДС Продажи) записываются в двух валютах одновременно: в валюте документа и в валюте регламентированного учета (рублях).
Для того чтобы документ попал в Книгу продаж по правильному курсу, распечатывать его в рублях совершенно не обязательно. Отчет «Книга продаж» сформируется корректно на основании записей регистров, а не на основании того, какую печатную форму вы выбирали. Поэтому, если цель — только Книга продаж, можно объяснить коллегам, что программа делает все верно и без бумажной копии в рублях.
Появление сообщения «Не требуется печатать счет-фактуру в рублях» — это не баг, а фича, защищающая организацию от налоговых рисков. Если же печать необходима: