Как исправить печать УПД в валюте вместо рублей после обновления 1С:Комплексная автоматизация 2.4?

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

Представим типичную ситуацию: после успешного обновления конфигурации «1С:Комплексная автоматизация» (или «1С:ERP Управление предприятием») с релиза 2.4.5 на ветку 2.4.6 (или более свежую) пользователи внезапно обнаруживают, что универсальные передаточные документы (УПД) в документах реализации стали распечатываться в иностранной валюте (например, в EUR или USD). До обновления те же самые документы без проблем выводились на печать в российских рублях.

При этом в самой печатной форме УПД в поле «Валюта: наименование, код» выводится «Российский рубль, 643», но все итоговые суммы по позициям отображаются в валюте, хотя бухгалтер утверждает, что всегда происходила конвертация по курсу на дату документа.

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

Выясняем причину: почему изменилось поведение программы?

Для начала проанализируем ситуацию с точки зрения методологии учета и законодательства РФ. В старых релизах конфигураций (до ветки 2.4.6) алгоритмы проверки валюты печати в системе 1С были более мягкими и допускали определенные отклонения от жестких правил учета.

В обновленных версиях разработчики 1С привели логику формирования печатных форм в строгое соответствие с требованиями Налогового кодекса РФ (ст. 169) и Постановления Правительства РФ № 1137. Согласно действующему законодательству:

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

Система 1С определяет, какую форму печатать, анализируя параметры взаиморасчетов в документе или связанном с ним договоре (валюту расчетов и валюту платежа). Если программа видит, что и расчеты, и оплата по договору ведутся в EUR, она автоматически классифицирует сделку как полностью валютную и выводит печатную форму УПД в EUR. Именно это изменение в логике системы и привело к тому, что старые документы начали печататься по-новому.

Решение 1. Методологическая настройка договора (без программирования)

Чаще всего корень проблемы кроется в некорректно заполненных реквизитах договоров с контрагентами. Бухгалтеры часто совершают ошибку: для договоров в условных единицах (у.е.), где цена установлена в валюте, а оплата принимается исключительно в рублях, они устанавливают валюту договора и валюту расчетов как «EUR» или «USD», забывая указать валюту платежа.

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

  1. Перейдем в карточку проблемного Договора с клиентом.
  2. Откроем вкладку или раздел Расчеты.
  3. Обратим внимание на переключатели валют и установим их в следующее положение:
    • В поле «Цена в» укажем иностранную валюту обязательства (например, EUR).
    • В поле «Оплата в» обязательно выберем руб. (это ключевой параметр!).
  4. Сохраним изменения в договоре.

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

Решение 2. Программное исправление проблемы

Бывают ситуации, когда по внутренним причинам компании изменить параметры договора невозможно (например, если период закрыт, или бухгалтер категорически отказывается менять схему ведения взаиморасчетов по историческим данным). В этом случае можно прибегнуть к техническому решению.

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

Мы можем принудительно отключить печать в валюте, изменив значение флага ПечатьВВалюте на Ложь. Рассмотрим, как это сделать правильно.

Важно: Непосредственное изменение типового кода конфигурации крайне нежелательно, так как это снимет базу с поддержки и усложнит последующие обновления. При первом же обновлении системы ваши правки будут затерты. Вместо этого мы применим технологию расширений.

Реализация через расширение конфигурации

Создадим новое расширение в конфигураторе и перенесем в него функцию формирования параметров печати. Нам потребуется использовать директиву &Вместо или перехватить параметры через &После.

Рассмотрим пример кода для расширения, переопределяющего функцию в модуле менеджера документа СчетФактураВыданный:


&Вместо("ПолучитьДанныеДляПечатнойФормыУПД")
Функция Расш_ПолучитьДанныеДляПечатнойФормыУПД(Знач ПараметрыПечати, МассивОбъектов) Экспорт

    // Устанавливаем принудительное заполнение данных УПД
    ПараметрыПечати.Вставить("ДополнитьДаннымиУПД", Истина);
    
    // Принудительно отключаем вывод сумм в иностранной валюте
    ПараметрыПечати.Вставить("ПечатьВВалюте", Ложь); 

    // Вызываем оригинальный метод конфигурации для получения данных
    Возврат ПродолжитьВызов(ПараметрыПечати, МассивОбъектов);

КонецФункции

Этот код безопасно встраивается в систему. Он перехватывает вызов формирования печатной формы, жестко указывает параметру ПечатьВВалюте значение Ложь, после чего возвращает управление стандартному алгоритму формирования макета. База при этом остается на полной поддержке.

Реализация через Внешнюю печатную форму (ВПФ)

Если вы не хотите использовать расширения, наиболее безопасным и стабильным вариантом будет регистрация внешней печатной формы. Для этого:

  1. Скопируйте стандартный макет УПД и процедуру печати во внешнюю обработку.
  2. В модуле объекта внешней печатной формы найдите блок заполнения структуры ПараметрыПечати.
  3. Добавьте строку кода: ПараметрыПечати.Вставить("ПечатьВВалюте", Ложь);
  4. Зарегистрируйте обработку в базе через меню «НСИ и администрирование» — «Печатные формы, отчеты и обработки».

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

← На главную