Работа с распределенными информационными базами (РИБ) сама по себе требует от администратора и разработчика повышенного внимания. Когда же в схему добавляются расширения конфигурации, процесс обновления типовых решений (таких как 1С:Розница, 1С:Управление торговлей или 1С:ERP) становится нетривиальной задачей. Часто возникают ситуации, когда основная конфигурация в периферийном узле обновилась, а расширение — нет, что приводит к полной блокировке работы базы из-за ошибок совместимости. Разберем подробно, почему это происходит и как выстроить правильный регламент обновления.
Для начала проанализируем, как платформа 1С воспринимает расширения в контексте РИБ. Важно понимать, что обмен метаданными основной конфигурации и обмен расширениями — это два параллельных процесса, хотя они и упаковываются в один файл обмена. Рассмотрим ключевой параметр: в свойствах расширения существует флаг Используется в РИБ. Если этот флаг не установлен, расширение вообще не будет участвовать в автоматическом обмене, и его придется обновлять в каждом узле вручную через конфигуратор.
Однако даже включение этого флага не гарантирует моментальную доставку изменений. Выясним причину: платформа регистрирует изменения расширения для выгрузки только в определенных случаях. Если вы просто изменили код в модуле, система может «не заметить» необходимости передачи объекта. Проанализируем ситуацию с хэш-функциями: типовой механизм РИБ сравнивает контрольные суммы метаданных. Структурно меняющиеся расширения (где добавлены новые реквизиты, справочники или изменены типы данных) критично влияют на этот процесс. Если в главном узле структура данных уже изменилась, а в периферийном — еще нет, возникнет конфликт версий.
Рассмотрим типичную ошибку: после синхронизации в периферийном узле пользователь видит сообщение о необходимости обновления. После запуска процесса база «падает» с ошибкой, указывающей на несовместимость расширения. Это происходит из-за следующей последовательности:
Разберем, как разорвать этот круг. Основная рекомендация заключается в управлении активностью расширений. Рассмотрим пошаговый алгоритм безопасного обновления.
Рассмотрим этапы подготовки и проведения обновления, которые минимизируют риск остановки работы периферийных узлов:
Регистрация изменений для обмена. Проверьте, что объекты расширений стоят в очереди на выгрузку для всех необходимых узлов.Посмотрим на ситуацию с точки зрения разработки. Чтобы обновления проходили менее болезненно, проанализируем следующие правила:
Не меняйте структуру типовых данных без крайней необходимости. Добавление новых реквизитов в типовые справочники или документы через расширение в РИБ — это «мина замедленного действия». Как только структура таблицы меняется, хэш метаданных перестает совпадать. Если обмен данными (документами) произойдет до того, как узел получит новое расширение, вы получите ошибку соответствия метаданных.
Используйте новые объекты вместо расширения существующих. Безопаснее создать новый справочник или регистр сведений внутри расширения, чем добавлять поля в существующие. Это меньше влияет на стабильность платформенного механизма сравнения конфигураций при обмене.
Программное управление обновлением. В некоторых случаях полезно использовать параметры запуска для автоматизации процесса в узлах. Рассмотрим пример использования параметра командной строки для принудительного обновления информационной базы:
// Пример строки запуска для периферийного узла после загрузки обновления
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "ПутьКБазе" /N "Админ" /P "Пароль" /C ЗапуститьОбновлениеИнформационнойБазы /UpdateDBCfg
Этот параметр инициирует механизмы БСП по обновлению внутренних справочников и регистрации расширений сразу после применения метаданных.
Многие разработчики ожидают, что флаг «Активность» в расширении также будет синхронизироваться через РИБ. Выясним правду: управление активностью зачастую является локальной настройкой конкретной информационной базы. Даже если вы отключили расширение в центре, в узле оно может остаться активным до тех пор, пока не будет принято новое состояние метаданных расширения. Поэтому в сложных случаях ручное вмешательство в конфигуратор узла остается самым надежным способом.
Подводя итог, можно сказать, что расширения в РИБ — это мощный, но требующий дисциплины инструмент. Основной секрет успешного обновления заключается в контроле версионности расширений и последовательном применении изменений: сначала метаданные конфигурации, затем запуск процедур обновления, и только в конце — активация обновленных расширений.