Как исправить ошибку «Метод объекта не обнаружен (СформироватьЗапросДляТ8)» после обновления 1С:ЗУП до версии 3.1.8?

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

При обновлении конфигурации 1С:Зарплата и Управление Персоналом (ЗУП) до версии 3.1.8 и выше многие пользователи и разработчики сталкиваются с неприятной проблемой. При попытке распечатать кадровые документы (например, соглашение при увольнении, расписку или любые другие внешние печатные формы, привязанные к документу «Увольнение») система выдает критическую ошибку: «Метод объекта не обнаружен (СформироватьЗапросДляТ8)». При этом типовые кадровые приказы могут продолжать печататься в штатном режиме.

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

Выясняем причину: что изменилось в 1С:ЗУП 3.1.8?

Для начала проанализируем техническую суть обновлений, внесенных разработчиками фирмы «1С» в релизе 3.1.8. В этой версии подсистема кадрового учета и печати приказов (таких как Т-1, Т-5, Т-6, Т-8 и других) претерпела глобальный рефакторинг. Программная логика формирования печатных форм была полностью переработана.

Основные изменения включают в себя следующие аспекты:

  1. Перевод печати на систему компоновки данных (СКД): Ранее данные для формирования печатных форм собирались с помощью процедур общих модулей, формирующих жесткие запросы. Теперь формирование печатных форм унифицированных приказов перенесено в отдельные отчеты (например, за печать приказов об увольнении отвечает объект Отчет.ПечатьТ8, за прием — Отчет.ПечатьТ1 и так далее).
  2. Внедрение настраиваемых печатных форм: Этот переход был выполнен ради предоставления пользователям нового удобного инструмента. В разделе Настройка — Сервис — Настраиваемые печатные формы пользователи теперь могут самостоятельно изменять макеты приказов, добавлять новые реквизиты и менять форматирование без привлечения программистов.
  3. Удаление устаревшего программного интерфейса: Так как старый механизм формирования запросов для печатных форм больше не используется типовой конфигурацией, разработчики полностью удалили старые экспортные функции из общего модуля КадровыйУчет. В число удаленных методов попали СформироватьЗапросДляТ8, ЗаполнитьПараметрыКадровогоПриказа и аналогичные им функции для других приказов.

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

Рассмотрим подробнее три основных варианта решения этой проблемы, начиная от быстрого временного исправления до полноценной переработки кода.

Вариант А. Быстрое исправление (копирование старого кода в обработку)

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

Разберем этот процесс по шагам:

  1. Откройте резервную копию вашей информационной базы до обновления (с релизом ЗУП 3.1.7 или более ранним) с помощью конфигуратора.
  2. Найдите общий модуль КадровыйУчет и найдите в нем текст функции СформироватьЗапросДляТ8, а также все сопутствующие функции, к которым она обращается.
  3. Откройте вашу внешнюю печатную форму (файл обработки .epf) в конфигураторе актуальной базы.
  4. Перейдите в Модуль объекта внешней печатной формы и вставьте скопированный код функций в самый конец модуля.
  5. В коде печатной формы найдите строку вызова удаленного метода, которая выглядела примерно так:
    
    // Было в коде внешней печатной формы:
    ТаблицаДанных = КадровыйУчет.СформироватьЗапросДляТ8(МассивОбъектов);
    
    И замените ее на вызов локальной функции, удалив префикс общего модуля:
    
    // Стало после изменения:
    ТаблицаДанных = СформироватьЗапросДляТ8(МассивОбъектов);
    
  6. Сохраните внешнюю печатную форму и заново загрузите ее в справочник «Дополнительные отчеты и обработки».

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

Вариант Б. Перевод внешней печатной формы на собственные запросы (надежный программный путь)

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

Проанализируем пример построения простого и надежного запроса для получения данных документа «Увольнение» (для формы Т-8):


Функция ПолучитьДанныеДляУвольнения(МассивОбъектов) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Увольнение.Ссылка КАК Ссылка,
        |	Увольнение.Организация КАК Организация,
        |	Увольнение.Организация.НаименованиеПолное КАК ОрганизацияНаименованиеПолное,
        |	Увольнение.Сотрудник КАК Сотрудник,
        |	Увольнение.Сотрудник.Код КАК ТабельныйНомер,
        |	Увольнение.ФизическоеЛицо.ФИО КАК ФИОСотрудника,
        |	Увольнение.ДатаУвольнения КАК ДатаУвольнения,
        |	Увольнение.СтатьяПФР.ТекстДляПечати КАК ОснованиеУвольнения,
        |	Увольнение.ДокументОснованиеВыпуска КАК ДокументОснование
        |ИЗ
        |	Документ.Увольнение КАК Увольнение
        |ГДЕ
        |	Увольнение.Ссылка В(&МассивОбъектов)";
        
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
    
    Возврат Запрос.Выполнить().Выгрузить();
    
КонецФункции

Используя этот подход, мы выбираем данные напрямую из полей документа Документ.Увольнение и связанных с ним справочников (физические лица, сотрудники, статьи увольнения). На этот запрос не повлияют никакие изменения в общих модулях «1С», так как структура метаданных основных документов практически никогда не меняется настолько кардинально, чтобы удалить базовые реквизиты вроде организации или сотрудника.

Вариант В. Использование настраиваемых печатных форм (без программирования)

Прежде чем приступать к изменению программного кода, имеет смысл проверить, нельзя ли решить задачу стандартными средствами новой подсистемы. Если ваши внешние печатные формы «Соглашение» или «Расписка» представляют собой слегка измененные варианты стандартного приказа Т-8 (например, добавлен дополнительный текст в подвал документа или изменены формулировки шапки), то вы можете полностью отказаться от внешних обработок.

Выполним следующие действия для проверки этой возможности:

  1. Перейдите в раздел Настройка, затем в группе Сервис выберите пункт Настраиваемые печатные формы.
  2. Найдите в списке макет приказа об увольнении (Т-8).
  3. Нажмите кнопку Создать или скопируйте существующий макет для редактирования.
  4. В открывшемся визуальном редакторе макета добавьте необходимые текстовые поля, измените шрифты или добавьте новые реквизиты, перетаскивая их из списка доступных полей в правой части экрана.
  5. Сохраните изменения. Теперь при нажатии кнопки «Печать» в документе «Увольнение» пользователям будет доступен ваш кастомизированный вариант приказа.

Переход на этот механизм существенно упростит дальнейшую поддержку и обновление вашей базы данных, так как у вас не будет «висеть» устаревший кастомный код внешних обработок.

Важное замечание по поводу платформы 8.3.13.1513

В ходе обсуждения данной проблемы на техническом форуме специалисты также затронули вопрос используемой платформы 1С. Версия платформы 8.3.13.1513, которая упоминается в обращении автора, исторически зарекомендовала себя как крайне нестабильная.

При работе на этой версии платформы пользователи часто сталкивались со следующими критическими проблемами:

Для обеспечения стабильной и производительной работы современных релизов 1С:ЗУП 3.1 мы настоятельно рекомендуем выполнить обновление платформы до актуальных сертифицированных версий поддержки LTS (например, последних релизов веток 8.3.21, 8.3.22 или выше, в зависимости от минимальных системных требований вашего текущего релиза конфигурации).

Резюме

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

← На главную