Как исправить ошибку «Метод объекта не обнаружен» и корректно настроить ВПФ «Справка с места работы» в 1С:ЗУП 3.1?

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

Разработка внешних печатных форм (ВПФ) для конфигурации «Зарплата и управление персоналом 3.1» требует не только знания механизмов БСП (Библиотеки стандартных подсистем), но и понимания специфики кадрового учета. Часто при копировании кода из одной формы в другую возникают ошибки, связанные с обновлением программного интерфейса общих модулей. Рассмотрим подробно, как правильно сконструировать ВПФ для документа «Увольнение» и избежать типичных ошибок при получении контактной информации.

Шаг 1. Правильная регистрация ВПФ в системе

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


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.Увольнение");
    
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Справка с места работы (уволенные)");
    ПараметрыРегистрации.Вставить("Версия", "1.1");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); // Рекомендуется Ложь для доступа к некоторым общим модулям
    
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, 
                    "Справка с места работы", 
                    "ПФ_MXL_СправкаСМестаРаботы", 
                    "ВызовСерверногоМетода", 
                    Истина, 
                    "ПечатьMXL");
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

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

Шаг 2. Разбор ошибки получения контактной информации

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

ОписаниеЮридическогоАдреса = УправлениеКонтактнойИнформацией.АдресОрганизации(...)

Проанализируем ситуацию: в актуальных версиях ЗУП 3.1 методы получения адресов были унифицированы. Ошибка «Метод объекта не обнаружен» возникает потому, что в общем модуле УправлениеКонтактнойИнформацией может не быть функции АдресОрганизации с таким набором параметров, либо она является внутренней.

Решение: Для получения полных сведений об организации (включая адреса, ИНН, телефоны) в современных конфигурациях на базе БСП лучше использовать единую структуру. Вместо разрозненных вызовов к разным модулям, рассмотрим использование функции СведенияОЮридическомФизическомЛице или корректное обращение к модулю УправлениеКонтактнойИнформациейЗарплатаКадры.

Исправим блок получения данных организации, чтобы он работал стабильно:


// Вместо нескольких вызовов используем получение структуры сведений
ОргСведения = ФормированиеПечатныхФорм.СведенияОбОрганизации(Выборка.Организация, Выборка.Период);
НоваяСтрокаСведенияОбОрганизациях.НаименованиеПолное = ОргСведения.НаименованиеПолное;
НоваяСтрокаСведенияОбОрганизациях.ИНН = ОргСведения.ИНН;

// Для адресов используем специализированный метод ЗУП
НоваяСтрокаСведенияОбОрганизациях.АдресЮридический = УправлениеКонтактнойИнформациейЗарплатаКадры.АдресОрганизации(
    Выборка.Организация, Ложь, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации, Выборка.Период);

Шаг 3. Работа с кадровыми данными через временные таблицы

В ЗУП 3.1 получение данных сотрудника (ФИО, должность, дата приема) реализовано через механизм КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников. Это очень мощный инструмент, который позволяет получить данные на конкретный срез времени с учетом всех перестановок.

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

Рассмотрим правильный алгоритм подготовки временной таблицы:


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

// Теперь вызываем программный интерфейс ЗУП для наполнения кадровыми данными
КадровыеДанные = "ФизическоеЛицо,ФИОПолные,Пол,ДатаПриема,ДатаУвольнения,Должность,ГоловнаяОрганизация";
ОписательВТ = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
    Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВТ, Истина, КадровыеДанные);

Шаг 4. Склонение ФИО в печатной форме

Справка с места работы обычно требует указания ФИО в дательном падеже («выдана Иванову Ивану Ивановичу»). В 1С:Предприятие 8 для этого используется компонент склонения. В коде ВПФ это реализуется через вызов функции ФизическиеЛицаЗарплатаКадры.Просклонять.

Посмотрим на пример реализации внутри цикла вывода макета:


РезультатСклонения = "";
// Число 3 соответствует Дательному падежу
Если ФизическиеЛицаЗарплатаКадры.Просклонять(ПараметрыМакета.ФИОПолные, 3, РезультатСклонения, ПараметрыМакета.Пол) Тогда
    Макет.Параметры.ФИОСотрудникаВПадеже = РезультатСклонения;
Иначе
    Макет.Параметры.ФИОСотрудникаВПадеже = ПараметрыМакета.ФИОПолные;
КонецЕсли;

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

Шаг 5. Особенности вывода табличного документа

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

Проанализируем финальную структуру процедуры Печать:

  1. Проверка необходимости печати: Используем УправлениеПечатью.НужноПечататьМакет.
  2. Получение данных: Формируем запрос ко всем необходимым таблицам (организации, кадровые данные, ответственные лица).
  3. Цикл по объектам: Заполняем параметры макета, выполняем склонение.
  4. Вывод: Добавляем готовую область в КоллекцияПечатныхФорм.

Использование таких методов как РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации, как делал автор темы, технически допустимо, но считается «тяжелым» способом. Для легких печатных форм лучше обращаться к модулям ФормированиеПечатныхФорм или напрямую к данным временных таблиц, подготовленных через КадровыйУчет. Это значительно ускорит формирование справок при массовой печати.

Соблюдение этих структурных правил позволит вам создать надежную внешнюю печатную форму, которая не «сломается» при очередном обновлении релиза ЗУП.

← На главную