Парадоксы приема расширений в РИБ

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

В этот раз решил разобраться ДО КОНЦА и вооружился отладчиком на точке.

Сперва посмотрел, откуда берется надпись в форме e1cib/app/ОбщаяФорма.НастройкиСинхронизацииДанных:

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

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

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

Если ее попробовать снять, она с первым же обменом устанавливается обратно.

Назначение константы понятно — она не дает делать выгрузку, например, если не прошел прием расширений.

Тут есть один момент — изменения в конфигурации накатываются сразу и мы видим пресловутый «синий бочонок» в конфигураторе.

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

Константа устанавливается в модуле ОбменДаннымиСлужебный:

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

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

То есть если в файле обмена содержатся изменения расширения (v8md:Metadata внутри описания расширения) или удаление расширения (v8de:ConfigurationExtensionDeletion), то 1С считает, что есть изменения данных, даже если там меняется одна строчка кода.

Интересно, а когда сбрасывается этот признак?

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

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

Выводы и практическая польза

Получается в итоге очень криво, как всегда у 1С.

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

Но если с процессе загрузки будет ошибка загрузки данных, 1С все равно будет считать, что проблема в расширении, а не в данных.

Поэтому всегда нужно проверять журнал регистрации, искать более чем 200 событий по ключевому слову «Обмен данными.Полный.Получение данных»:

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

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

Среда: УТ 11.5.25.63

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *