При переходе на новые релизы 1С:ERP (начиная с 2.4.6.х) или 1С:ЗУП (3.1.8+) многие разработчики сталкиваются с тем, что их внешние печатные формы (ВПФ) кадровых приказов перестают работать. Типичная ошибка выглядит так: {ВнешняяОбработка.ПриказТ1.МодульОбъекта(65)}: Метод объекта не обнаружен (СформироватьЗапросДляТ1). В этой статье мы подробно разберем, почему это произошло и как вернуть работоспособность вашим инструментам печати.
Рассмотрим ситуацию глубже. В версиях 2.4.5 и ниже метод КадровыйУчет.СформироватьЗапросДляТ1 был основным инструментом для получения данных по сотруднику, его окладу, подразделению и должности для формирования приказа о приеме на работу. Однако в релизе 2.4.6 компания «1С» провела масштабную унификацию механизмов печати.
Проанализируем изменения: разработчики отказались от «жестких» запросов в общем модуле КадровыйУчет в пользу системы компоновки данных (СКД). Теперь даже стандартные печатные формы используют макеты на базе СКД, что позволяет пользователям изменять состав полей без программирования. Старая функция была попросту удалена из конфигурации за ненадобностью в рамках типовой логики.
Если вам нужно восстановить работу внешней формы в кратчайшие сроки и вы не хотите полностью переписывать её логику под новый механизм, воспользуемся методом обратной совместимости. Разберем этот процесс по шагам.
КадровыйУчет и функцию СформироватьЗапросДляТ1(МассивОбъектов).Важный нюанс: при переносе кода обязательно замените вызовы КадровыйУчет.СформироватьЗапросДляТ1 на вызов внутренней функции вашей обработки. Посмотрим на пример того, как это должно выглядеть в модуле объекта ВПФ:
// В процедуре Печать() вместо старого вызова:
// Выборка = КадровыйУчет.СформироватьЗапросДляТ1(МассивОбъектов).Выбрать;
// Используем локальную функцию:
Выборка = СформироватьЗапросДляТ1_Локально(МассивОбъектов).Выбрать;
// ... далее по тексту ...
Функция СформироватьЗапросДляТ1_Локально(МассивОбъектов)
// Здесь размещаем скопированный текст запроса из старого релиза 2.4.5
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ..."; // Полный текст запроса
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Возврат Запрос.Выполнить();
КонецФункции
Этот метод считается «грязным», так как он дублирует код и может привести к ошибкам в будущем, если изменятся структуры таблиц в БД, но он гарантированно возвращает результат здесь и сейчас.
Если вы не хотите изменять код внешней обработки, можно воспользоваться механизмом расширений. Создадим новое расширение и добавим в него модуль КадровыйУчет. В этом модуле мы можем воссоздать удаленную функцию. Это позволит всем вашим старым внешним формам работать без правок.
Однако помните: в релизе 2.4.6 изменились алгоритмы работы с интервальными регистрами. Старый запрос может работать некорректно, если он обращается к таблицам, которые стали виртуальными или сменили структуру (например, данные о стажах или плановых начислениях). Поэтому при реализации через расширение внимательно проверьте имена таблиц запроса.
Рассмотрим более современный и правильный способ. В актуальных релизах ERP логика сбора данных для формы Т-1 перемещена в общий модуль ПечатьКадровыхПриказов. Вместо прямого выполнения запроса к таблицам, система подготавливает данные через структуру параметров.
Выясним, какие методы теперь используются. Основная точка входа для получения данных — это функция ПечатьКадровыхПриказов.ДанныеДляПечатиКадровыхПриказов(). Если вы хотите, чтобы ваша форма соответствовала стандартам «1С», следует переписать процедуру формирования данных.
Пример обращения к новому механизму:
ПараметрыПечати = ПечатьКадровыхПриказов.ПараметрыПечатиКадровогоПриказаТ1();
ДанныеДляПечати = ПечатьКадровыхПриказов.ДанныеДляПечатиКадровыхПриказов(МассивОбъектов, ПараметрыПечати);
// Теперь данные находятся в структуре или таблице значений
Для Каждого СтрокаДанных Из ДанныеДляПечати.Результат Цикл
// Заполняем параметры макета данными из СтрокаДанных
КонецЦикла;
Проанализируем преимущества этого подхода:
В старых обработках часто встречался код для склонения через ФизическиеЛицаЗарплатаКадры.Просклонять. Обратим внимание, что в современных релизах ERP и ЗУП данные часто приходят уже подготовленными. Например, структура, возвращаемая модулем ПечатьКадровыхПриказов, уже содержит поля типа РаботникВДательномПадеже.
Если вы используете «путь копирования старого кода», убедитесь, что функции склонения всё еще доступны по старым адресам. Если нет — замените их на вызов универсального механизма склонения СклонениеФИО.Просклонять().
Подводя итог, можно сказать: исчезновение метода СформироватьЗапросДляТ1 — это не ошибка, а осознанный шаг разработчиков «1С» по переходу на более гибкие механизмы печати через СКД.
Мы рекомендуем следующий алгоритм действий:
ПечатьКадровыхПриказов.