При изменении законодательных требований к бланкам первичных документов и счетов-фактур организации часто сталкиваются с ситуацией, когда оперативно обновить типовую конфигурацию нет возможности. В таких случаях выходом становится подключение внешней печатной формы. Разберем по шагам, как правильно загрузить внешнюю печатную форму в конфигурацию «1С:Управление небольшой фирмой» (УНФ) без использования конфигуратора, а также проанализируем, почему после успешного добавления обработки программа может продолжать выводить старый бланк документа.
Для добавления внешних отчетов и печатных форм в базу данных монопольный доступ и запуск среды «Конфигуратор» не требуются. Механизм подсистемы дополнительных отчетов и обработок Библиотеки стандартных подсистем (БСП) позволяет производить интеграцию непосредственно в режиме «1С:Предприятие» пользователем с правами администратора.
Рассмотрим порядок подключения новой формы по шагам:
.epf) на локальный диск или в сетевой каталог, к которому есть доступ с рабочего места. Расположение файла значения не имеет — после загрузки программа сохранит его непосредственно в информационную базу..epf.После выполнения этих действий при открытии документов, для которых предназначена обработка (например, «Счет-фактура», «Расходная накладная»), в выпадающем меню кнопки Печать появятся новые команды для вывода обновленных бланков.
Нередко возникает ситуация: внешняя обработка успешно добавлена в справочник, новая команда появилась в меню печати, пользователь нажимает ее, но на экране по-прежнему отображается старый вид счета-фактуры или УПД. Проанализируем основные причины такого поведения программы.
1. Встроенная проверка даты документа
Это наиболее распространенная причина. Разработчики печатных форм закладывают в программный код условия переключения макетов в зависимости от даты документа. Законодательные изменения вступают в силу с конкретного числа. Соответственно, если дата формируемого документа меньше даты вступления в силу нормативного акта, алгоритм принудительно выводит прежнюю редакцию бланка во избежание нарушений при ретроспективной печати архива документов.
Посмотрим на пример логики, которая обычно закладывается в модуле объекта печатной формы:
Если ШапкаДокумента.Дата < ДатаИзмененияЗаконодательства Тогда
Макет = ПолучитьМакет("ПФ_MXL_СчетФактураСтарая");
Иначе
Макет = ПолучитьМакет("ПФ_MXL_СчетФактура2017");
КонецЕсли;
Если протестировать печать на новом документе, дата которого строго больше или равна дате начала действия поправок (например, с 1 июля 2017 года для постановления Правительства РФ № 625), программа автоматически переключится на новый макет.
2. Кэширование модулей на клиенте и сервере
Если внешняя печатная форма уже загружалась ранее, а затем в нее вносились исправления и файл перезагружался, платформа может продолжать использовать скомпилированный кэш старой версии. Чтобы исключить влияние кэша:
Для корректного подключения печатной формы конфигурация ожидает строго определенную программную структуру внутри внешней обработки. Разберем ключевые процедуры модуля объекта.
В модуле объекта внешней обработки обязательно должна присутствовать экспортная функция СведенияОВнешнейОбработке(), которая возвращает структуру с описанием параметров регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.СчетФактура");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ТаблицаКоманд = Новый ТаблицаЗначений;
ТаблицаКоманд.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
ТаблицаКоманд.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
ТаблицаКоманд.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Идентификатор = "СчетФактураНовая";
НоваяКоманда.Представление = "Счет-фактура";
НоваяКоманда.Использование = "ВызовСерверногоМетода";
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Формирование печатного листа и вывод табличного документа выполняет экспортная процедура Печать(), принимающая массив объектов назначения и параметры вывода:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыПечати = Новый Структура;
// Проверяем наличие идентификатора нашей команды
УправлениеПечатью.ЗадатьОписательПечатнойФормы(
КоллекцияПечатныхФорм,
"СчетФактураНовая",
"Счет-фактура",
"ПечатьСчетаФактуры"
);
КонецПроцедуры
В случаях, когда законодательство вводит в форму новые обязательные реквизиты (например, идентификатор государственного контракта), а структура метаданных используемой редакции конфигурации не содержит соответствующих полей, решить задачу можно двумя способами:
ДополнительныеРеквизитыИСведения. Администратор может добавить пользовательское свойство к документу или договору без изменения конфигуратора. В коде внешней печатной формы на этапе выборки данных прописывается считывание значения из таблицы дополнительных реквизитов.Согласно пункту 2 статьи 169 НК РФ, ошибки и неточности в счетах-фактурах, которые не мешают налоговым органам однозначно идентифицировать продавца, покупателя, наименование товаров, их стоимость, а также ставку и сумму предъявленного налога, не являются основанием для отказа в вычете НДС. Тем не менее предоставление контрагентам документов на бланках актуального формата позволяет избежать формальных споров и разногласий при проверках.