Как исправить ошибки синхронизации 1С после отката нетиповой конфигурации к типовой?

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

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

В этой статье мы подробно разберем причины возникновения таких ошибок и рассмотрим пошаговые сценарии их устранения.

Причина 1: Ошибка «Поле объекта не обнаружено (РедактированиеТолькоВДиалоге)»

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

Ошибка при отправке данных: Ошибка получения значения свойства объекта... ПКО = ВидыКонтактнойИнформации... СвойствоПриемника = РедактированиеТолькоВДиалоге... ОписаниеОшибки = Поле объекта не обнаружено (РедактированиеТолькоВДиалоге)

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

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

Для решения этой проблемы мы можем применить один из двух эффективных способов.

Способ 1.1: Быстрое исправление через расширение конфигурации

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

Выполним следующие шаги:

  1. Откроем конфигуратор базы данных, в которой возникает ошибка (база-источник).
  2. Перейдем в меню Конфигурация — Расширения конфигурации и создадим новое расширение (например, с именем ИсправлениеСинхронизации).
  3. В дереве метаданных основной конфигурации найдем справочник ВидыКонтактнойИнформации, нажмем по нему правой кнопкой мыши и выберем пункт Добавить в расширение.
  4. В созданном расширении перейдем к справочнику ВидыКонтактнойИнформации, откроем его реквизиты и добавим новый реквизит с точным именем РедактированиеТолькоВДиалоге и типом данных Булево.
  5. Применим изменения и обновим базу данных.

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

Способ 1.2: Обновление правил обмена и сброс настроек

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

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

Выполним процедуру сброса правил к типовым значениям:

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

Причина 2: «Фантомная» регистрация изменений удаленных справочников

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

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

Рассмотрим способы очистки базы от «зависшей» регистрации изменений.

Способ 2.1: Использование стандартной обработки «Регистрация изменений для обмена»

Для интерактивного удаления регистрации нам не потребуется писать сложный код. Мы можем воспользоваться встроенным инструментом БСП:

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

Способ 2.2: Программное удаление регистрации через внешний код

Если интерактивный инструмент по какой-то причине не отображает удаленные объекты или завершается ошибкой, мы можем прибегнуть к программному методу встроенного языка 1С. Для этого воспользуемся методом ПланыОбмена.УдалитьРегистрациюИзменений.

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


// Процедура полной очистки регистрации изменений по узлу обмена
Процедура ОчиститьРегистрациюНаСервере(СсылкаНаУзел)
    
    // Проверим заполненность переданного узла
    Если ЗначениеЗаполнено(СсылкаНаУзел) Тогда
        
        // Метод полностью очищает таблицы регистрации изменений для указанного узла
        ПланыОбмена.УдалитьРегистрациюИзменений(СсылкаНаУзел);
        Сообщить("Регистрация изменений для узла '" + СсылкаНаУзел + "' успешно очищена!");
        
    Иначе
        Сообщить("Не выбран узел плана обмена для очистки!");
    КонецЕсли;
    
КонецПроцедуры

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

Резюме и рекомендации

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

  1. Выполняйте откат конфигурации путем полной загрузки файла конфигурации поставщика (.cf) через меню Конфигурация — Загрузить конфигурацию из файла, а не обычным объединением, чтобы гарантировать удаление всех нетиповых метаданных.
  2. Перед первой отправкой данных обязательно очищайте старую регистрацию изменений, чтобы избежать выгрузки «битых» ссылок на несуществующие в новой структуре объекты.
  3. Сбрасывайте правила конвертации и регистрации в регистре сведений Правила для обмена данными на типовые, чтобы они соответствовали текущему релизу конфигурации.
  4. В случае возникновения конфликтов версий БСП используйте механизм расширений для временного решения проблем с отсутствующими реквизитами до момента обновления правил обмена на стороне приемника.
← На главную