Перевод доработанной конфигурации 1С обратно на типовую поддержку — частая процедура для облегчения последующих обновлений. Однако после успешного обновления и удаления доработанных объектов администраторы и программисты часто сталкиваются с критическими ошибками при попытке настроить или запустить регулярную синхронизацию данных (например, между 1С:ЗУП и 1С:Бухгалтерия предприятия). Система начинает выдавать ошибки ПКО (правил конвертации объектов), жаловаться на отсутствующие реквизиты или пытаться выгрузить объекты, которых физически больше нет в структуре метаданных.
В этой статье мы подробно разберем причины возникновения таких ошибок и рассмотрим пошаговые сценарии их устранения.
Разберем природу первой популярной ошибки, возникающей при выгрузке данных. В процессе синхронизации система может выдать диагностическое сообщение следующего вида:
Ошибка при отправке данных: Ошибка получения значения свойства объекта... ПКО = ВидыКонтактнойИнформации... СвойствоПриемника = РедактированиеТолькоВДиалоге... ОписаниеОшибки = Поле объекта не обнаружено (РедактированиеТолькоВДиалоге)
Выясним причину этой ошибки. Она кроется в обновлении Библиотеки стандартных подсистем (БСП). В современных версиях БСП разработчики фирмы «1С» признали реквизит РедактированиеТолькоВДиалоге (тип Булево) в справочнике ВидыКонтактнойИнформации устаревшим и полностью удалили его из метаданных конфигурации, заменив на новый реквизит ВидРедактирования (тип Строка).
Если одна из баз обновилась, а во второй базе (или в правилах обмена, сохраненных в информационной базе) все еще содержатся старые правила конвертации, система пытается обратиться к удаленному реквизиту РедактированиеТолькоВДиалоге источника, что и приводит к аварийному завершению обмена.
Для решения этой проблемы мы можем применить один из двух эффективных способов.
Если синхронизацию нужно восстановить немедленно, а времени на детальную отладку и переписывание правил обмена нет, мы можем применить обходное решение («костыль»). Для этого добавим удаленный реквизит обратно в метаданные через расширение конфигурации, чтобы платформа не вызывала ошибку отсутствия поля.
Выполним следующие шаги:
ИсправлениеСинхронизации).ВидыКонтактнойИнформации, нажмем по нему правой кнопкой мыши и выберем пункт Добавить в расширение.ВидыКонтактнойИнформации, откроем его реквизиты и добавим новый реквизит с точным именем РедактированиеТолькоВДиалоге и типом данных Булево.Заполнять созданный реквизит какими-либо значениями не требуется. Сам факт его наличия в метаданных позволит правилам конвертации успешно прочитать свойство (оно всегда будет возвращать значение Ложь), и выгрузка завершится без ошибок.
Более правильный и системный подход заключается в актуализации самих правил конвертации. Часто администраторы не понимают, откуда система берет правила обмена, если в макетах конфигуратора их нет. Проанализируем эту ситуацию.
Помимо макетов в самом конфигураторе, правила конвертации и регистрации могут храниться непосредственно в пользовательской базе данных (в режиме «1С:Предприятие»). Для этого используется специальный регистр сведений.
Выполним процедуру сброса правил к типовым значениям:
Правила регистрации объектов, Правила конвертации объектов).Вторая проблема, с которой столкнулся автор темы, заключается в том, что даже после успешного удаления кастомных справочников и приведения конфигурации к полностью типовому виду система продолжает выдавать ошибки поиска ПКО для старых, несуществующих объектов.
Выясним причину этого поведения. Когда мы удаляем из метаданных справочники или документы, таблицы регистрации изменений на узлах планов обмена могут хранить «остаточные» записи о том, что эти объекты были изменены и подлежат отправке. При инициализации обмена система считывает эти записи, пытается сопоставить их с существующими правилами обмена и метаданными, но не находит их и прерывает работу с ошибкой.
Рассмотрим способы очистки базы от «зависшей» регистрации изменений.
Для интерактивного удаления регистрации нам не потребуется писать сложный код. Мы можем воспользоваться встроенным инструментом БСП:
Если интерактивный инструмент по какой-то причине не отображает удаленные объекты или завершается ошибкой, мы можем прибегнуть к программному методу встроенного языка 1С. Для этого воспользуемся методом ПланыОбмена.УдалитьРегистрациюИзменений.
Рассмотрим пример программного кода, который полностью очищает очередь выгрузки для конкретного узла обмена. Создадим внешнюю обработку и напишем следующий код на сервере:
// Процедура полной очистки регистрации изменений по узлу обмена
Процедура ОчиститьРегистрациюНаСервере(СсылкаНаУзел)
// Проверим заполненность переданного узла
Если ЗначениеЗаполнено(СсылкаНаУзел) Тогда
// Метод полностью очищает таблицы регистрации изменений для указанного узла
ПланыОбмена.УдалитьРегистрациюИзменений(СсылкаНаУзел);
Сообщить("Регистрация изменений для узла '" + СсылкаНаУзел + "' успешно очищена!");
Иначе
Сообщить("Не выбран узел плана обмена для очистки!");
КонецЕсли;
КонецПроцедуры
Запуск этого кода гарантирует, что все устаревшие ссылки на удаленные справочники и документы будут стерты из таблиц регистрации изменений. После выполнения очистки мы сможем заново зарегистрировать к обмену только необходимые нам актуальные документы (например, документ ОтражениеЗарплатыВБухучете) и успешно выполнить синхронизацию.
Подводя итоги совместной работы по восстановлению синхронизации, зафиксируем правильную последовательность действий при откате на типовую конфигурацию:
.cf) через меню Конфигурация — Загрузить конфигурацию из файла, а не обычным объединением, чтобы гарантировать удаление всех нетиповых метаданных.Правила для обмена данными на типовые, чтобы они соответствовали текущему релизу конфигурации.