При разработке печатных форм в конфигурации 1С:Зарплата и Управление Персоналом 3.1 разработчики часто сталкиваются с двумя типами проблем при работе с контактной информацией: программные ошибки при обращении к данным и получение неожиданных (некорректных) значений. Рассмотрим подробно, как справиться с этими трудностями.
Первая распространенная ошибка — несовпадение имен ключей в структуре параметров и обращение к ним в методе Execute объекта Find. Если вы вставляете данные в структуру с помощью метода СтруктураПараметров.Вставить("Телефон", ТелефонМоб), то обращаться к нему нужно строго по ключу "Телефон". Попытка вызвать СтруктураПараметров.ТелефонМоб приведет к ошибке «Поле объекта не обнаружено».
Разберем правильный синтаксис для передачи данных в печатную форму:
// Правильное формирование структуры
ТелефонМоб = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(Сотрудник, Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица);
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Телефон", ТелефонМоб);
// Использование в процедуре замены
Замена = Документ.Content.Find;
Замена.Execute("[Телефон]", Ложь, Истина, Ложь, , , Истина, , Ложь, СтруктураПараметров.Телефон);
Даже если код написан без синтаксических ошибок, результат может быть не тем, который ожидается. Если программа выводит один и тот же номер для разных сотрудников, это сигнал о логической ошибке в выборе источника данных. Проанализируем основные причины:
Сотрудник — это физическое лицо, связанное с трудовыми отношениями. Контактная информация почти всегда привязана к справочнику ФизическиеЛица. Убедитесь, что вы передаете верную ссылку. Возможно, вместо Сотрудник следует передавать Сотрудник.ФизическоеЛицо.ПредставлениеКонтактнойИнформацииОбъекта может выбирать не ту запись, которую вы видите в карточке.Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица — это обращение к конкретному предопределенному элементу. Если в вашей базе данных используется другой вид (например, созданный пользователем), функция вернет пустое или неверное значение.Чтобы понять, что именно происходит при выполнении кода, воспользуемся диагностическими выводами. Разберем по шагам, как выявить «левый» номер:
Вставьте в код следующий фрагмент для трассировки данных перед формированием печатной формы:
// Диагностика данных
Сообщить("Сотрудник: " + Строка(Сотрудник));
Сообщить("Физлицо сотрудника: " + Строка(Сотрудник.ФизическоеЛицо));
ТелефонМоб = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(Сотрудник.ФизическоеЛицо, Справочники.ВидыКонтактнойИнформации.ТелефонМобильныйФизическиеЛица);
Сообщить("Найденный телефон: " + ТелефонМоб);
Важные советы для работы:
Сообщить. Поставьте точку останова на получении переменной ТелефонМоб и загляните в свойства переменной Сотрудник. Это позволит увидеть, является ли объект тем, который вы ожидаете.КонтактнаяИнформация. В запросе можно явно указать отбор по владельцу и параметру Актуально = Истина.Работая над печатными формами, всегда помните о разделении понятий Сотрудник и ФизическоеЛицо — это фундамент архитектуры ЗУП 3.1, и именно здесь чаще всего возникают ошибки при выборке персональных данных.