Как исправить ошибку «Макет "" не существует» при печати ЕФС-1 из документа «Увольнение» в 1С:ЗУП

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Налоговый учет
← На главную

С переходом на новые форматы отчетности ЕФС-1 в начале 2024 года многие пользователи программы 1С:Зарплата и Управление Персоналом 8 столкнулись с неприятной технической проблемой. При попытке распечатать подразделы 1.2 или 3 формы ЕФС-1 непосредственно из документа Увольнение система выдает критическую ошибку: «Макет "" не существует. Операция прервана». Эта проблема актуальна для релизов 3.1.27.151 и 3.1.28.64.

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

Почему возникает ошибка: анализ ситуации

Проанализируем ситуацию с технической точки зрения. Ошибка возникает в общем модуле УправлениеПечатью. Система пытается программно определить имя макета для формирования печатной формы, но из-за некорректной работы запроса в модуле персонифицированного учета переменная, содержащая имя макета, остается пустой. Если мы заглянем в Журнал регистрации, то увидим, что сбой происходит в момент вызова функции ИспользуетсяПользовательскийМакет, куда передается пустая строка вместо пути к макету.

Основная причина кроется в функции ЗапросПоШапкеДляПечатиОДВ_1. В новых релизах при формировании данных для подразделов ЕФС-1 (которые пришли на смену СЗВ-СТАЖ и ДСВ-3) в запрос были добавлены поля, описывающие данные «прежнего страхователя». Однако в структуре документа Увольнение эти поля отсутствуют, что приводит к некорректному выполнению запроса и «вылету» печатной формы.

Способ 1: Установка официального патча (Рекомендуемый)

Фирма «1С» оперативно выпустила исправление для этой ошибки. Если ваша конфигурация находится на поддержке и подключена к интернет-поддержке, это самый правильный путь. Разберем шаги по установке:

  1. Перейдем в раздел АдминистрированиеОбслуживание.
  2. Раскроем блок Обновление программы и выберем пункт Установка обновлений и исправлений (патчей).
  3. В списке доступных исправлений найдем патч с номером EF_60011947. Именно он исправляет ошибку вывода на печать подразделов 1.2 и 3 из документа увольнения.
  4. Установим патч и перезагрузим сеанс работы с программой.

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

Способ 2: Обходной путь без программирования

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

  1. Для получения Подраздела 1.2 (аналог СЗВ-СТАЖ):
    • Перейдем в раздел Отчетность, справкиДокументы персучета.
    • Создадим документ Сведения о страховом стаже застрахованных лиц, СЗВ-СТАЖ (в новых версиях он формирует именно подраздел 1.2 ЕФС-1).
    • С помощью кнопки Подбор выберем нужного сотрудника.
    • Распечатаем форму ЕФС-1 оттуда.
  2. Для получения Подраздела 3 (аналог ДСВ-3):
    • Перейдем в раздел Отчетность, справкиДобровольное пенсионное страхование.
    • Создадим документ Реестр ДСВ-3.
    • Добавим сотрудника и выведем печатную форму.

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

Способ 3: Исправление кода через расширение (для программистов)

Для тех, кто предпочитает автоматизировать процесс и исправить печать непосредственно в документе Увольнение, рассмотрим создание расширения. Нам необходимо переопределить функцию ЗапросПоШапкеДляПечатиОДВ_1 в общем модуле ПерсонифицированныйУчет.

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

Создадим расширение и добавим в него метод с директивой &Вместо (или &ИзменениеИКонтроль, если это позволяет версия платформы). Пример реализации кода:


&НаСервере
&Вместо("ЗапросПоШапкеДляПечатиОДВ_1")
Функция Расш_ЗапросПоШапкеДляПечатиОДВ_1(МассивСсылок, ИмяДокумента)
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
    
    // Подготовка стандартного описания источника
    ОписаниеИсточникаДанных = ОписаниеИсточникаДанныхДляСоздатьВТСведенияОбОрганизациях();
    ОписаниеИсточникаДанных.ИмяТаблицы = "Документ." + ИмяДокумента;
    ОписаниеИсточникаДанных.ИмяПоляОрганизация = "Организация";
    ОписаниеИсточникаДанных.ИмяПоляПериод = "Дата";
    ОписаниеИсточникаДанных.СписокСсылок = МассивСсылок;
    
    СоздатьВТСведенияОбОрганизацияхПоОписаниюДокументаИсточникаДанных(Запрос.МенеджерВременныхТаблиц, ОписаниеИсточникаДанных, Ложь);

    // Логика формирования ВТИтоги для разных типов документов
    Если ИмяДокумента = "ОписьОДВ_1" Тогда
        Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 0 0 КАК Количество, ЗНАЧЕНИЕ(Документ.ОписьОДВ_1.ПустаяСсылка) КАК Ссылка ПОМЕСТИТЬ ВТИтоги";
    Иначе
        // Универсальный шаблон запроса для документов со списком сотрудников
        Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(Сотрудники.НомерСтроки) КАК Количество, Сотрудники.Ссылка ПОМЕСТИТЬ ВТИтоги ИЗ Документ.СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ.Сотрудники КАК Сотрудники ГДЕ Сотрудники.Ссылка В(&МассивСсылок) СГРУППИРОВАТЬ ПО Сотрудники.Ссылка";
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "СведенияОСтраховомСтажеЗастрахованныхЛицСЗВ_СТАЖ", ИмяДокумента);
        
        Если ИмяДокумента = "Увольнение" Тогда
            Запрос.Текст = СтрЗаменить(Запрос.Текст, "Сотрудники.НомерСтроки", "1");
            Запрос.Текст = СтрЗаменить(Запрос.Текст, ".Сотрудники", "");
        КонецЕсли;
    КонецЕсли;
    
    Запрос.Выполнить();

    // Основной текст запроса с данными организации и страхователя
    ТекстЗапроса = "ВЫБРАТЬ ДанныеДокумента.Ссылка, СведенияОбОрганизациях.НаименованиеПолное... {полный текст запроса из типовой конфигурации}";
    
    // ВСТАВКА: Обработка отсутствующих полей для документа Увольнение
    Если ИмяДокумента = "Увольнение" Или ИмяДокумента = "УвольнениеСписком" Тогда
        // Заменяем несуществующие поля на пустые значения, чтобы запрос не падал
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДанныеДокумента.ПрежнийСтраховательНаименованиеПолное", """""");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДанныеДокумента.ПрежнийСтраховательРегистрационныйНомерПФР", """""");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДанныеДокумента.ПрежнийСтраховательИНН", """""");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДанныеДокумента.ПрежнийСтраховательКПП", """""");
        // ... повторить для всех полей ПрежнийСтрахователь
    КонецЕсли;

    Запрос.Текст = ТекстЗапроса;
    Возврат Запрос.Выполнить();
КонецФункции

Проанализируем этот код. Мы используем СтрЗаменить для динамической корректировки текста запроса. Это позволяет избежать ошибки «Поле объекта не обнаружено» при выполнении запроса к базе данных. Обратите внимание, что при использовании директивы &Вместо в расширении необходимо убедиться, что у расширения отключен безопасный режим, иначе вызов некоторых общих модулей (например, ЗарплатаКадры) может быть заблокирован системой безопасности платформы.

Проблема заполнения сведений о вредности

Рассмотрим еще один нюанс, упомянутый пользователями. Иногда после исправления ошибки печати в пункте 4 (условия труда) вместо «вредных» условий труда выводятся «нормальные». Выясним причину.

С 2024 года алгоритм заполнения подраздела 1.2 ЕФС-1 изменился. Теперь данные о стаже и условиях труда подаются в межотчетный период только для определенных категорий сотрудников (имеющих право на досрочную пенсию, работающих в особых климатических условиях и т.д.). Проверьте следующие настройки:

Подведем итог. Ошибка «Макет не существует» является следствием недоработки в коде типовой конфигурации при переходе на новые формы ЕФС-1. Оптимальным решением является установка патча EF_60011947. Если же вы столкнулись с более глубокими проблемами заполнения стажа, рекомендуется использовать полноценный документ СЗВ-СТАЖ вместо печати из Увольнения.

← На главную