Как исправить ошибку «Поле объекта не обнаружено (ЗаголовокКонтактнаяИнформацияПоле1)» при открытии и редактировании контрагентов?

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

После обновления конфигурации «1С:Бухгалтерия предприятия 3.0» или выполнения синхронизации данных пользователи нередко сталкиваются с аварийным завершением работы программы при попытке открыть карточку контрагента либо создать нового партнера. В окне ошибки выводится сообщение вида: {ОбщийМодуль.УправлениеКонтактнойИнформацией.Модуль(1945)}: Поле объекта не обнаружено (ЗаголовокКонтактнаяИнформацияПоле1) СледующийЗаголовок = Форма.Элементы["Заголовок" + ИмяСледующегоРеквизита];. Разберем механику возникновения этой ошибки и подробно рассмотрим все проверенные варианты её устранения.

Выясним причину возникновения ошибки

В подсистеме работы с контактной информацией Библиотеки стандартных подсистем (БСП) элементы пользовательского интерфейса (поля ввода, надписи, командные панели) создаются динамически при компоновке управляемой формы на сервере. Логика модуля последовательно обходит коллекцию доступных видов контактной информации и связывает их с визуальными элементами.

Сбой происходит по следующим ключевым причинам:

  1. Нарушение порядка и реквизита упорядочивания: В справочнике ВидыКонтактнойИнформации предусмотрен специальный служебный реквизит РеквизитДопУпорядочивания. При выполнении синхронизации или переноса данных из другой информационной базы свойство ОбменДанными.Загрузка устанавливается в значение Истина. В этом режиме платформенные подписки на события ПередЗаписью и ПриЗаписи отключаются. В результате реквизит упорядочивания остается незаполненным, и алгоритм динамического построения интерфейса путает порядок следования полей.
  2. Прямое индексное обращение к элементам формы: В общем модуле УправлениеКонтактнойИнформацией используется жесткое обращение к коллекции формы по сформированному имени: Форма.Элементы["Заголовок" + ИмяСледующегоРеквизита]. Если элемент не был сгенерирован или порядок нарушен, обращение по индексу вызывает исключение, тогда как безопасный метод Найти() вернул бы Неопределено.
  3. Появление дублирующихся строк: При некорректно настроенных правилах обмена или сбоях в табличной части КонтактнаяИнформация контрагента могут возникнуть дублирующие строки (например, несколько фактических или юридических адресов с одинаковым видом).
  4. Неправильное положение пользовательских видов контактной информации: Если в справочник вручную или обменом были добавлены новые виды контактной информации, они должны следовать строго после предопределенных элементов, принадлежащих группе «Контрагенты».

Способ 1. Перезапись элементов справочника «Виды контактной информации»

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

Рассмотрим порядок действий для перезаписи элементов:

  1. Откроем раздел Администрирование, перейдем в Общие настройки и развернем блок Виды контактной информации.
  2. Раскроем группу Контактная информация справочника "Контрагенты".
  3. Откроем каждый элемент группы и нажмем Записать и закрыть.
  4. Если элементов много, воспользуемся стандартной обработкой Групповое изменение реквизитов (раздел Администрирование -> Обслуживание -> Корректировка данных). Выберем справочник Виды контактной информации, настроим отбор по родителю «Справочник "Контрагенты"» и выполним запись без изменения реквизитов.

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


Выборка = Справочники.ВидыКонтактнойИнформации.Выбрать();
Пока Выборка.Следующий() Цикл
    ОбъектКИ = Выборка.ПолучитьОбъект();
    Попытка
        ОбъектКИ.Записать();
    Исключение
        Сообщить("Не удалось записать: " + Строка(ОбъектКИ));
    КонецПопытки;
КонецЦикла;

При стандартной записи платформенный обработчик автоматически вызовет функцию НастройкаПорядкаЭлементов.ЗаполнитьЗначениеРеквизитаУпорядочивания(), и правильные индексы будут восстановлены.

Способ 2. Ручное изменение порядка следования элементов

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

  1. Перейдем в справочник Виды контактной информации.
  2. Зайдем внутрь группы Контактная информация справочника "Контрагенты".
  3. Используя синие стрелки перемещения на панели («Переместить элемент вверх» / «Переместить элемент вниз»), опустим все пользовательские реквизиты в самый низ списка.
  4. Если присутствуют только предопределенные элементы, попробуем изменить их взаимное расположение (например, переместить элемент «Почтовый адрес» выше или ниже элемента «Фактический адрес»), после чего вернем их в исходное состояние. Это принудительно обновит таблицу упорядочивания.

Способ 3. Удаление дубликатов видов контактной информации

Нередко обмен данными создает дубли предопределенных элементов. Проверим базу на наличие лишних записей:

  1. Перейдем в меню Администрирование -> Обслуживание -> Корректировка данных -> Поиск и удаление дублей.
  2. В поле поиска выберем справочник Виды контактной информации.
  3. Настроим правила отбора: совпадение по наименованию и группе.
  4. При обнаружении дублей объединим элементы, назначив оригиналом предопределенный элемент, после чего удалим помеченные копии.

Способ 4. Очистка дублирующихся строк в табличной части контрагентов

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

Напишем небольшую процедуру для обхода табличной части проблемного контрагента и устранения дублей:


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

КонтрагентОбъект.КонтактнаяИнформация.Загрузить(ТаблицаКИ);
КонтрагентОбъект.Записать();

После удаления дубликатов строк динамический генератор формы снова сможет корректно сопоставить визуальные элементы с данными табличной части.

Способ 5. Исправление в коде через расширение конфигурации

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

  1. Создадим новое расширение с назначением Исправление.
  2. Добавим общий модуль УправлениеКонтактнойИнформацией.
  3. Переопределим проблемный участок кода с помощью директивы &Вместо или &ИзменениеИКонтроль. Заменим жесткое обращение по индексу на безопасный поиск:

СледующийЗаголовок = Форма.Элементы.Найти("Заголовок" + ИмяСледующегоРеквизита);
Если СледующийЗаголовок <> Неопределено Тогда
    // Штатная логика размещения элементов
КонецЕсли;

Такой подход защитит базу от критических ошибок даже в том случае, если в информационной базе продолжат циркулировать некорректные данные из внешних источников.

← На главную