Парадоксы приема расширений в РИБ
Всегда интересовало, что обозначает надпись «Необходимо установить обновление приложения, после чего синхронизация данных будет продолжена.» Ранее уже сталкивался с этим, пришлось прописывать доступ к кластеру, чтобы обновить.
В этот раз решил разобраться ДО КОНЦА и вооружился отладчиком на точке.
Сперва посмотрел, откуда берется надпись в форме e1cib/app/ОбщаяФорма.НастройкиСинхронизацииДанных:

В модуле ОбменДаннымиСервер:

И затем в модуле ОбменДаннымиСлужебный:

Используется константа ЗагрузитьРасширенияИзменяющиеСтруктуруДанных:

Если ее попробовать снять, она с первым же обменом устанавливается обратно.
Назначение константы понятно — она не дает делать выгрузку, например, если не прошел прием расширений.
Тут есть один момент — изменения в конфигурации накатываются сразу и мы видим пресловутый «синий бочонок» в конфигураторе.
Изменения расширений, если там не затронуты данные, тоже накатываются сразу, но требуется перезапустить приложение. А если расширение изменяет данные, то оно не может даже загрузиться в текущую конфигурацию расширения runtime. Поэтому оно прогрузится, только если загрузка идет монопольно.
Константа устанавливается в модуле ОбменДаннымиСлужебный:

В методе КонвертацияОбъектовРаспределенныхИнформационныхБаз.ЕстьРасширениеВСообщениеОбмена:

Решил посмотреть файл обмена. Все расширения передаются в блоках v8de:ConfigurationExtension, причем в начале файла до блока v8de:Data:

То есть если в файле обмена содержатся изменения расширения (v8md:Metadata внутри описания расширения) или удаление расширения (v8de:ConfigurationExtensionDeletion), то 1С считает, что есть изменения данных, даже если там меняется одна строчка кода.
Интересно, а когда сбрасывается этот признак?
В процедуре ОбменДаннымиСлужебный.ОтключитьЗагрузкуРасширенийИзменяющихСтруктуруДанных, но когда она вызывается?
Вызывается из КонвертацияОбъектовРаспределенныхИнформационныхБаз.ПрочитатьФайлСообщенияОбмена:

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

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

Среда: УТ 11.5.25.63



Свежие комментарии