В процессе сопровождения и разработки информационных баз 1С часто возникает необходимость внести срочные правки в программный код или формы документов без остановки работы пользователей. В таких ситуациях платформа предлагает механизм динамического обновления конфигурации базы данных. Разберем подробно, что именно происходит под капотом платформы при нажатии клавиши F7, в какой момент изменения попадают в базу данных, почему данный механизм иногда называют «демоническим» и как правильно устранять возможные последствия сбоев.
Проанализируем механику применения изменений при сохранении и обновлении конфигурации. При нажатии сочетания клавиш Ctrl+S сохраняется только основная конфигурация разработчика. Непосредственное обновление конфигурации базы данных происходит при нажатии F7 (или кнопки с изображением синего цилиндра на панели инструментов).
Если в момент применения изменений в информационной базе работают активные сеансы, платформа анализирует характер внесенных правок:
F7, сразу начинают работу с обновленной конфигурацией.Выясним причину, по которой платформа не всегда разрешает применить изменения «на лету». Главное правило динамического обновления: оно доступно только в тех случаях, когда не требуется реструктуризация таблиц базы данных.
Рассмотрим, какие элементы можно обновлять без отключения пользователей:
Если разработчик добавил новый реквизит в справочник, удалил табличную часть документа или изменил тип данных существующего поля, платформа потребует монопольной блокировки информационной базы с выводом сообщения Ошибка исключительной блокировки информационной базы. В этом случае требуется перестроение физических таблиц СУБД (реструктуризация), выполнить которое параллельно с активной записью данных невозможно.
Рассмотрим техническую сторону проблем, возникающих при частом использовании динамического обновления. В среде специалистов 1С такой способ не зря получил ироничное название «демоническое обновление».
При динамическом обновлении платформа не перезаписывает таблицу CONFIG целиком. Вместо этого в системные таблицы базы данных записываются версионные инкременты — дельты изменений. При регулярном накоплении цепочки дельт без монопольной фиксации возникают следующие риски:
snccntx в srvinfo) и кэш на клиентских рабочих станциях могут содержать разные версии скомпилированных общих модулей. Это приводит к ошибкам несоответствия типов, падению рабочих процессов rphost и сообщению Ошибка формата потока.Разберем практические шаги, которые позволяют восстановить корректную работу базы данных после некорректного динамического обновления:
F7 в обычном (монопольном) режиме. Платформа полностью пересоберет метаданные и сотрет промежуточные дельты.1C:Enterprise Server Agent. В каталоге кластера (по умолчанию srvinfo) удаляем временные папки с префиксом snccntx* и кэш рабочих процессов. Системные файлы настроек кластера с расширением .lst удалять нельзя. После этого запускаем службу заново./ClearCache или очищаем папки локального кэша пользователя в каталогах AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8.chdbfl.exe).Для гарантированной стабильности промышленной базы рекомендуется свести использование динамического обновления к минимуму. Рассмотрим правильные подходы к внесению изменений:
/UC). Это позволяет администратору выполнять обновление, пока для остальных пользователей вход заблокирован.