Как исправить ошибку «Поле объекта не обнаружено (ПараметрыКонтактнойИнформации)» в 1С:Розница

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

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

В процессе выполнения операции программа аварийно завершает работу, выдавая диагностическое сообщение: «Поле объекта не обнаружено (ПараметрыКонтактнойИнформации)». При этом до настройки синхронизации этот функционал работал абсолютно корректно. В данной статье мы подробно разберем, почему возникает эта ошибка, как она связана с обменом данными и какими способами её можно устранить.

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

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


СохраненноеПоложениеЗаголовка = Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка;

Проблема заключается в том, что на форме элемента справочника ИнформационныеКарты (или ФизическиеЛица в зависимости от настроек) данный реквизит либо отсутствует в структуре управляемой формы, либо структура ПараметрыКонтактнойИнформации не была инициализирована при создании формы на сервере.

Но почему эта ошибка «вылезает» именно после настройки обмена с 1С:Управление торговлей? Ответ кроется в логике работы функциональных опций:

  1. При активации синхронизации данных в «1С:Рознице» включаются скрытые функциональные опции, сигнализирующие о том, что база работает в режиме узла распределенной информационной системы.
  2. Меняются права и доступность редактирования ключевых справочников. Некоторые поля блокируются для редактирования, так как главным источником данных (мастер-базой) становится «1С:Управление торговлей».
  3. Стандартные процедуры Библиотеки стандартных подсистем (БСП) начинают направлять выполнение кода по иным веткам алгоритма. Именно в этих специфических «обменных» ветках кода и происходит обращение к недоступному свойству ПараметрыКонтактнойИнформации, которое до активации обмена просто игнорировалось системой.

Эта ошибка носила массовый характер в релизах линейки 1С:Розница 2.2.12.x (включая популярный релиз 2.2.12.30), а также в отраслевых решениях от компании «Рарус» (например, «Магазин одежды и обуви»).

---

Решение 1: Официальное обновление конфигураций (рекомендуемый способ)

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

Рассмотрим последовательность действий для успешного обновления:

  1. Выполните резервное копирование (создайте дамп базы данных) обеих конфигураций: и «1С:Управление торговлей», и «1С:Розница».
  2. Проверьте совместимость релизов. Обмен данными требует согласованности версий. Не рекомендуется обновлять только одну базу, оставляя вторую на устаревшем релизе.
  3. Обновите «1С:Розница» до актуального релиза (ошибка была полностью исправлена в последующих сервисных обновлениях ветки 2.2.13 и переходе на 2.3).
  4. Запустите базы в режиме «1С:Предприятие» и дождитесь окончания выполнения всех отложенных обработчиков обновления данных.

---

Решение 2: Исправление через механизм расширений (без изменения конфигурации)

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

Разберем этот процесс по шагам:

  1. Откройте базу «1С:Розница» в режиме Конфигуратор.
  2. Перейдите в меню: Конфигурация — Расширения конфигурации.
  3. Добавьте новое расширение (например, с именем ИсправлениеОшибкиКонтактнойИнформации). Снимите для него флажки «Безопасный режим» и «Защита от опасных действий».
  4. В дереве объектов основной конфигурации найдите справочник ИнформационныеКарты (или ДисконтныеКарты, в зависимости от вашей версии) и найдите форму элемента.
  5. Нажмите правой кнопкой мыши по форме и выберите команду «Добавить в расширение».
  6. В расширении откройте добавленную форму, перейдите на вкладку «Реквизиты» и добавьте новый реквизит формы со следующими свойствами:
    • Имя: ПараметрыКонтактнойИнформации
    • Тип: Произвольный
  7. В модуле формы перехватите обработчик события ПриСозданииНаСервере, выбрав тип вызова &Перед или &После, и добавьте инициализацию структуры параметров:

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Инициализируем структуру, чтобы БСП не вызывала исключение при обращении к ней
    Если Не ЗначениеЗаполнено(ПараметрыКонтактнойИнформации) Тогда
        ПараметрыКонтактнойИнформации = УправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации();
    КонецЕсли;
    
КонецПроцедуры

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

---

Решение 3: Временный «костыль» в коде общего модуля

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

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

Найдите в общем модуле строку, вызывающую ошибку, и замените её на следующий безопасный блок кода:


// Безопасное получение свойства формы во избежание аварийного завершения
СохраненноеПоложениеЗаголовка = Неопределено;
Если ОбщегоНазначенияКлиентСервер.ЕстьСвойствоОбъекта(Форма, "ПараметрыКонтактнойИнформации") Тогда
    Если Форма.ПараметрыКонтактнойИнформации <> Неопределено 
        И ОбщегоНазначенияКлиентСервер.ЕстьСвойствоОбъекта(Форма.ПараметрыКонтактнойИнформации, "ПоложениеЗаголовка") Тогда
        СохраненноеПоложениеЗаголовка = Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка;
    КонецЕсли;
КонецЕсли;

В крайнем случае, если вы хотите максимально быстро восстановить работоспособность касс и дисконтных карт «здесь и сейчас», можно обернуть проблемный участок в стандартную конструкцию исключения:


Попытка
    СохраненноеПоложениеЗаголовка = Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка;
Исключение
    СохраненноеПоложениеЗаголовка = Неопределено;
КонецПопытки;

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

Резюме

Мы выяснили, что ошибка с полем ПараметрыКонтактнойИнформации является следствием конфликта настроек синхронизации данных с алгоритмами Библиотеки стандартных подсистем. Наиболее концептуально верным решением является плановое обновление конфигурации «1С:Розница». Однако в экстренных случаях использование расширения формы элемента дисконтной карты или небольшая корректировка серверного кода общего модуля помогут вам быстро восстановить стабильную работу розничного магазина.

← На главную