Как исправить ошибку «Реквизит недоступен для группы» при обмене между КА 2 и БП 3.0 в справочнике Банки?

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

При настройке синхронизации данных между 1С:Комплексная автоматизация 2 (КА 2) и 1С:Бухгалтерия предприятия 3.0 (БП 3.0), особенно если одна из баз находится в облачном сервисе 1С:Fresh, пользователи часто сталкиваются с критической ошибкой при загрузке данных. Текст ошибки обычно выглядит так: Ошибка установки значения свойства 'Телефоны' по причине: Реквизит недоступен для группы. Эта ситуация блокирует первоначальную выгрузку и не дает завершить синхронизацию.

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

Анализ технической причины ошибки

Давайте проанализируем ситуацию с точки зрения кода платформы. Ошибка возникает в общем модуле ОбменДаннымиXDTOСервер в момент выполнения процедуры ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные, ПоляКопии). Суть проблемы заключается в следующем:

  1. В процессе обмена через формат XDTO (EnterpriseData) из базы-источника (КА 2) выгружается объект справочника Банки.
  2. В файле обмена этот объект помечен как Группа (папка), но при этом для него заполнены данные в поле Телефоны (или в соответствующей табличной части контактной информации).
  3. В базе-приемнике (БП 3.0) для справочника Банки у реквизита Телефоны установлено свойство метаданных «Использование: Для элементов».
  4. Когда механизм обмена пытается программно записать значение в этот реквизит для группы, платформа 1С блокирует операцию, так как это противоречит правилам использования реквизита, заданным в конфигурации.

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

Причина 1: Некорректные («мусорные») данные в базе-источнике

Чаще всего корень проблемы кроется в данных внутри исходной базы КА 2. При ручном вводе, программном создании объектов или после миграции из старых версий у некоторых папок в справочнике Банки могут оказаться заполненными скрытые реквизиты контактной информации. Рассмотрим, как это проверить и исправить.

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

  1. Перейдем в раздел НСИ и администрированиеОбслуживаниеКорректировка данныхГрупповое изменение реквизитов.
  2. В поле «Изменять» выберем Справочник: Банки.
  3. Добавим отбор: Это группа Равно Да.
  4. Нажмем кнопку «Дополнительные параметры» и убедимся, что включена опция «Показывать служебные реквизиты».
  5. Найдем в списке реквизит Телефоны. Если мы увидим там заполненные значения, это и есть причина сбоя.

Чтобы исправить это, установите флаг напротив реквизита Телефоны, оставьте поле значения пустым и нажмите «Изменить реквизиты». Это принудительно очистит данные у групп, и ошибка при обмене исчезнет.

Причина 2: Изменение структуры контактной информации в обновлениях

Как показывает практика, проблема часто обостряется после обновлений конфигурации в 1С:Fresh. Фирма «1С» регулярно совершенствует подсистему «Контактная информация». В последних версиях логика хранения КИ (контактной информации) могла измениться, а механизмы синхронизации (ПКО и ПОД) могут некорректно интерпретировать старые записи.

Разберем ситуацию с настройками видов КИ:

  1. Зайдем в раздел АдминистрированиеОбщие настройкиВиды контактной информации.
  2. Найдем группу, относящуюся к справочнику Банки.
  3. Проверим настройки для вида Телефон.
  4. Убедимся, что в обеих базах (КА и БП) настройки идентичны. Если в одной базе разрешено хранение для групп, а в другой — нет, возникнет конфликт при десериализации XDTO.

Причина 3: Конфликт версий формата EnterpriseData

Поскольку БП 3.0 во Фреше обновляется автоматически, она может начать использовать более новую версию формата обмена (например, 1.16), в то время как локальная КА 2 всё еще работает на версии 1.15. В новых форматах требования к заполнению объектов могут быть жестче.

Посмотрим, как можно это диагностировать:

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

Программная очистка данных (для разработчиков)

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


Выборка = Справочники.Банки.Выбрать(,, Новый Структура("ЭтоГруппа", Истина));
Пока Выборка.Следующий() Цикл
    ОбъектГруппа = Выборка.ПолучитьОбъект();
    // Очищаем табличную часть контактной информации
    Если ОбъектГруппа.КонтактнаяИнформация.Количество() > 0 Тогда
        ОбъектГруппа.КонтактнаяИнформация.Очистить();
        Попытка
            ОбъектГруппа.Записать();
            Сообщить("Очищена КИ для группы: " + ОбъектГруппа.Наименование);
        Исключение
            Сообщить("Не удалось записать группу: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Этот код перебирает все папки в справочнике и принудительно удаляет из них строки табличной части КонтактнаяИнформация, которые могут содержать злополучный «Телефон», вызывающий ошибку ЗаполнитьЗначенияСвойств в приемнике.

Рекомендации по завершению настройки обмена

После того как вы очистили данные в исходной базе, выполните следующие шаги:

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

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

← На главную