При обновлении типовых конфигураций «1С:Предприятие» или переносе старого кода внешних печатных форм (ВПФ), обработок и отчетов разработчики часто сталкиваются с ошибкой выполнения кода: «Метод объекта не обнаружен получитьконтактнуюинформацияобъекта». Данная неполадка полностью блокирует вывод печатных форм или работу связанных интерактивных механизмов.
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем изменения в стандартах Библиотеки стандартных подсистем (БСП) и рассмотрим несколько эффективных и правильных способов решения проблемы в зависимости от контекста вашей задачи.
Для начала проанализируем ситуацию. Ошибка указывает на то, что платформа пытается вызвать функцию, которой больше нет в общем модуле УправлениеКонтактнойИнформацией. Исходный код, вызывающий сбой, обычно выглядит следующим образом:
УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(Шапка.Контрагент, Перечисления.ТипыКонтактнойИнформации.Адрес);
Почему этот код перестал работать? Всё дело в эволюции Библиотеки стандартных подсистем (БСП). Начиная с версии БСП 2.4, разработчики фирмы «1С» провели масштабный рефакторинг программного интерфейса. В рамках оптимизации кода и приведения его к новым единым стандартам разработки было принято решение отказаться от глаголов в именах функций API. Метод ПолучитьКонтактнуюИнформацияОбъекта был объявлен устаревшим, а затем и вовсе полностью удален из модулей конфигурации.
Поэтому при попытке обратиться к удаленному методу система закономерно генерирует исключение.
Первое решение, которое часто приходит на ум (и которое нередко советуют на форумах) — заменить старый метод на новый, созвучный по названию:
УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Шапка.Контрагент, Перечисления.ТипыКонтактнойИнформации.Адрес);
Однако на практике разработчики замечают, что хотя ошибка «Метод объекта не обнаружен» исчезает, нужные данные (например, адрес контрагента в печатной форме) всё равно не выводятся. Выясним, почему так происходит.
Здесь кроются сразу две важные детали:
КонтактнаяИнформацияОбъекта по умолчанию возвращает Таблицу значений со всеми записями контактной информации, принадлежащими объекту. Если вы попытаетесь присвоить таблицу значений строковому параметру области макета печатной формы, на печать выведется пустота либо система выдаст ошибку преобразования типов.Перечисления.ТипыКонтактнойИнформации.Адрес. Но тип КИ — это общая категория (Адрес, Телефон, Email). У одного контрагента может быть зарегистрировано множество адресов (юридический, фактический, почтовый). Чтобы система поняла, какой именно адрес вам нужен, новые функции требуют передачи конкретного Вида КИ из справочника Справочники.ВидыКонтактнойИнформации.Если мы хотим написать качественный, отказоустойчивый код, который будет успешно работать в любой современной конфигурации (будь то «Бухгалтерия предприятия», «Управление торговлей», «ERP» или «Комплексная автоматизация»), нам следует использовать предназначенный для этого метод получения текстового представления КИ.
Для получения готовой строки адреса или телефона по стандартам БСП применяется метод ПредставлениеКонтактнойИнформацииОбъекта общего модуля УправлениеКонтактнойИнформацией.
Рассмотрим пример правильного кода для получения юридического адреса контрагента:
// 1. Определяем нужный вид контактной информации
ВидАдреса = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
// 2. Получаем готовое строковое представление адреса
АдресСтрокой = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(Шапка.Контрагент, ВидАдреса);
Этот метод самостоятельно обратится к регистру сведений, найдет нужную запись для указанного контрагента, сформирует красивую строку адреса (например, "127000, Москва г, ул. Лесная, дом № 1") и вернет ее вам. Данный подход полностью соответствует современным стандартам разработки фирмы «1С».
Если вы работаете исключительно в конфигурации «1С:Бухгалтерия предприятия» (БП), вы можете воспользоваться альтернативным, более простым для печатных форм способом. В этой конфигурации есть специализированные функции для быстрого формирования описания организаций и контрагентов.
Посмотрим на пример использования вызова серверного модуля:
// Получаем юридический адрес через ОписаниеОрганизации
СведенияОКонтрагенте = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(Шапка.Контрагент, "ЮридическийАдрес");
АдресСтрокой = СведенияОКонтрагенте.ЮридическийАдрес;
Важное предупреждение: этот способ отлично работает внутри БП, так как берет на себя рутину по компоновке данных. Однако помните о существенном минусе: этот код не является универсальным. Если вы решите перенести вашу печатную форму в «Управление торговлей» или «ERP», система выдаст ошибку, так как модуль ОбщегоНазначенияБПВызовСервера уникален для бухгалтерской конфигурации.
Проанализируем оба решения, чтобы выбрать оптимальное для вашего проекта:
Используя предложенные инструкции, вы сможете быстро локализовать проблему, заменить устаревший код на актуальные конструкции программного интерфейса БСП и восстановить работоспособность ваших печатных форм.