Как вывести номер телефона сотрудника в печатную форму 1С:ЗУП 3.1?

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

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

Решение проблемы с доступом к параметрам структуры

Первая распространенная ошибка — несовпадение имен ключей в структуре параметров и обращение к ним в методе Execute объекта Find. Если вы вставляете данные в структуру с помощью метода СтруктураПараметров.Вставить("Телефон", ТелефонМоб), то обращаться к нему нужно строго по ключу "Телефон". Попытка вызвать СтруктураПараметров.ТелефонМоб приведет к ошибке «Поле объекта не обнаружено».

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


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

// Использование в процедуре замены
Замена = Документ.Content.Find;
Замена.Execute("[Телефон]", Ложь, Истина, Ложь, , , Истина, , Ложь, СтруктураПараметров.Телефон);

Почему выводится «левый» номер и как это исправить?

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

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

Методика отладки данных

Чтобы понять, что именно происходит при выполнении кода, воспользуемся диагностическими выводами. Разберем по шагам, как выявить «левый» номер:

Вставьте в код следующий фрагмент для трассировки данных перед формированием печатной формы:


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

Важные советы для работы:

Работая над печатными формами, всегда помните о разделении понятий Сотрудник и ФизическоеЛицо — это фундамент архитектуры ЗУП 3.1, и именно здесь чаще всего возникают ошибки при выборке персональных данных.

← На главную