К статье
Практический материал

Администрирование · 13 мин

Динамическое обновление базы 1С: как обновить конфигурацию без остановки работы

Как выполнить динамическое обновление конфигурации базы 1С без отключения пользователей: условия, пошаговая инструкция, риски, ошибки и второй этап обновления.

Динамическое обновление — это режим, при котором платформа 1С применяет изменения конфигурации к базе данных без обязательного завершения работы пользователей. В отличие от обычного обновления, которое требует монопольного доступа, динамический режим выполняется «на лету»: пользователи продолжают работать, а изменения подхватываются при перезапуске их сеансов или после второго этапа реструктуризации.

Такой подход востребован в крупных внедрениях, где остановить работу десятков или сотен пользователей днём невозможно: кассы, склад, производство и бухгалтерия работают непрерывно. Однако динамическое обновление — не универсальное решение. Платформа сама определяет, возможен ли динамический режим, исходя из характера изменений, и администратор обязан понимать, когда им можно пользоваться, а когда он создаёт риск повреждения данных.

Материал разбирает механику динамического обновления, условия его применения, пошаговый порядок действий, второй этап реструктуризации, типичные ошибки и способы проверить, что обновление прошло корректно.

Что такое динамическое обновление и как оно работает

При обычном обновлении конфигурации базы данных платформа сначала вносит изменения в структуру таблиц СУБД (реструктуризация), и на это время требуется монопольный доступ — все сеансы должны быть завершены. При динамическом обновлении платформа разбивает процесс на два этапа: сначала обновляется конфигурация базы данных в части, не требующей реструктуризации, а фактическое изменение структуры таблиц откладывается.

Технически это работает так: платформа сравнивает конфигурацию поставщика (или основную конфигурацию) с конфигурацией базы данных и формирует список изменений. Если изменения не затрагивают физическую структуру данных — например, добавлены новые объекты, изменены формы, макеты, модули, права — динамическое обновление проходит полностью. Если структура таблиц изменилась (добавлены или изменены реквизиты существующих объектов, изменены типы, индексы), платформа выполняет динамическое обновление частично, а реструктуризацию предлагает выполнить отдельным вторым этапом.

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

Когда динамическое обновление допустимо, а когда опасно

Главный критерий — характер изменений. Динамический режим безопасен, когда обновление добавляет новые объекты метаданных, изменяет программный код, формы, макеты, роли и интерфейс, не трогая существующие данные. Платформа в этом случае либо вообще не потребует реструктуризации, либо отложит её без риска рассогласования.

Опасная зона — изменения состава реквизитов существующих объектов, изменение типов и длин полей, удаление объектов, изменение состава планов счетов и видов расчёта, перенос реквизитов в табличные части и обратно. В таких случаях работа пользователей со «старой» конфигурацией в памяти при уже частично обновлённой базе может привести к ошибкам записи данных, обращениям к несуществующим полям и рассогласованию кэша метаданных.

Отдельно учитывайте типовые обновления от фирмы «1С». Крупные релизы почти всегда содержат изменения структуры данных и отложенные обработчики обновления, которые должны выполниться в монопольном режиме. Динамическое обновление здесь уместно только как первый шаг, после которого обязателен полноценный запуск обновления с завершением сеансов.

Обычное и динамическое обновление

Обычное обновление

Требует монопольного доступа и завершения всех сеансов. Реструктуризация выполняется сразу. Подходит для любых изменений, но требует остановки работы.

Динамическое обновление

Выполняется без отключения пользователей. Подходит для изменений кода, форм и новых объектов. При изменении структуры данных требует второго этапа с монопольным доступом.

Подготовка: что сделать до запуска

Первый обязательный шаг — резервная копия. Для файловой базы достаточно скопировать файл 1Cv8.1CD при отсутствии активных записей либо выполнить выгрузку в dt через конфигуратор. Для клиент-серверной базы корректный способ — средства СУБД (MS SQL, PostgreSQL), а не копирование файлов каталога базы на работающем сервере. Динамическое обновление не отменяет рисков: если что-то пойдёт не так, откат возможен только из копии.

Второй шаг — оценить объём изменений. Откройте конфигуратор, выполните «Конфигурация → Поддержка → Обновить конфигурацию» (для типовой) или загрузите изменённую конфигурацию, и внимательно изучите окно сравнения и список изменений структуры. Если в списке только новые объекты и изменения модулей — динамический режим уместен. Если есть изменения реквизитов существующих объектов — планируйте сразу и второй этап.

Третий шаг — предупредить пользователей. Даже при динамическом обновлении сеансы придётся перезапустить, чтобы пользователи получили новую версию конфигурации. На клиент-серверной базе удобно заранее подготовить сообщение через консоль кластера или типовую обработку завершения сеансов, в файловой — договориться о времени перезахода.

Пошаговое выполнение динамического обновления

Процедура в конфигураторе одинакова для файловых и клиент-серверных баз, различается только способ управления сеансами. Ниже — типовой порядок действий для обновления конфигурации, уже загруженной в основную конфигурацию (после «Обновить конфигурацию» из поддержки или загрузки cf).

Порядок действий
  1. 1
    Сделайте резервную копию базы средствами СУБД или выгрузкой в dt
  2. 2
    Откройте конфигуратор под пользователем с правами администратора
  3. 3
    Выполните «Конфигурация → Обновить конфигурацию базы данных»
  4. 4
    Изучите список изменений структуры данных в появившемся окне
  5. 5
    Если платформа предлагает динамическое обновление — подтвердите выбор этого режима
  6. 6
    Дождитесь завершения и прочитайте сообщения об отложенной реструктуризации
  7. 7
    Перезапустите сеансы пользователей, чтобы они получили новую конфигурацию
  8. 8
    Запланируйте и выполните второй этап реструктуризации, если он требуется

Когда вы нажимаете «Обновить конфигурацию базы данных» и в базе есть активные сеансы, платформа сообщит, что монопольный режим недоступен, и предложит вариант динамического обновления. После подтверждения начинается обновление — в окне сообщений отображается ход процесса. По завершении платформа либо сообщит об успешном обновлении, либо укажет, что требуется дополнительное обновление (второй этап) для изменения структуры данных.

Для клиент-серверных баз существует также пакетный способ через командную строку конфигуратора с ключом динамического обновления — он удобен для автоматизации в скриптах обновления нескольких баз.

bash
"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER /S"Сервер\ИмяБазы" /N"Администратор" /P"Пароль" /UpdateDBCfg -Dynamic+ /Out"C:\logs\update.log"

Ключ -Dynamic+ явно разрешает динамическое обновление, -Dynamic- — запрещает. Параметр /Out пишет журнал выполнения в файл, что обязательно при автоматизации: по журналу проверяют, не потребовалась ли реструктуризация вторым этапом.

Второй этап: реструктуризация после динамического обновления

Если изменения затронули структуру данных, после динамического обновления база остаётся в промежуточном состоянии: конфигурация базы данных обновлена логически, но физическая структура таблиц — нет. При следующей попытке обычного обновления конфигурации базы данных платформа предложит выполнить именно этот отложенный этап.

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

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

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

Проверка результата и типичные ошибки

После обновления проверьте три вещи: версию конфигурации базы данных, состояние отложенной реструктуризации и работоспособность ключевых операций. Версию видно в конфигураторе («Конфигурация → Открыть конфигурацию», сведения о конфигурации) и в режиме предприятия через «О программе». Если версии конфигурации и базы данных совпадают и платформа не требует второго этапа — обновление завершено.

Контрольные точки

Как проверить результат

Версия конфигурации базы данных
Норма

Совпадает с версией обновлённой конфигурации

Тревожный признак

Версия старая или конфигурация базы данных не открывается

Повторный запуск обновления
Норма

Платформа сообщает, что обновление не требуется

Тревожный признак

Предлагается реструктуризация — второй этап не выполнен

Работа пользователей
Норма

Новые объекты и изменения доступны после перезахода

Тревожный признак

Ошибки «Поле не найдено», сбои при записи документов

Журнал обновления (файл /Out или окно сообщений)
Норма

Нет ошибок, реструктуризация не требовалась или выполнена

Тревожный признак

Ошибки компиляции модулей, прерванная реструктуризация

Наиболее частые проблемы после динамического обновления связаны с кэшем метаданных и с незавершённой реструктуризацией. Ошибки вида «Поле объекта не обнаружено» у части пользователей почти всегда означают, что их сеансы не перезапускались и работают со старым кэшем. Ошибки при записи документов после обновления с изменением структуры — признак того, что второй этап ещё не выполнен, а пользователи уже работают.

Типичные ошибки
01
Динамическое обновление без резервной копии — при сбое откатить изменения нечем
02
Не перезапущены сеансы пользователей — часть сотрудников работает со старой конфигурацией и получает ошибки кэша
03
Второй этап реструктуризации отложен надолго — база неделями работает в промежуточном состоянии с риском повреждения данных
04
Динамическое обновление крупного типового релиза без последующего монопольного запуска — отложенные обработчики не выполняются, данные не мигрированы
05
Обновление во время обмена данными — оборванная транзакция приводит к рассинхронизации узлов

Ограничения и альтернативы

Динамическое обновление не заменяет полноценное обновление, а лишь сдвигает момент остановки. Если изменения масштабные — новые подсистемы, изменение учётных механизмов, миграция данных — правильнее сразу планировать обычное обновление в нерабочее время с полным циклом: копия, обновление, реструктуризация, обработчики, тестирование.

Альтернатива для круглосуточных систем — теневое тестирование: обновление сначала разворачивается на копии базы, проверяется, и только затем применяется к рабочей в минимальное технологическое окно. Для клиент-серверных баз это стандартная практика, снижающая риск непредвиденных проблем на продуктиве.

Ещё одно ограничение: динамическое обновление не выполняется, если конфигурация находится на полной поддержке без возможности изменения и обновление загружается не через механизм поддержки, а также в ряде случаев при обновлении через расширения — расширения применяются по-своему и имеют отдельные требования к перезапуску сеансов.

Итог

Что важно запомнить

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

Частые вопросы

Можно ли динамически обновить базу, если в ней работают пользователи?

Да, в этом и смысл режима: монопольный доступ не требуется. Однако пользователи продолжат работать со старой версией конфигурации в памяти сеанса, поэтому после обновления их сеансы нужно перезапустить — иначе возможны ошибки кэша метаданных.

Что делать, если платформа не предлагает динамическое обновление?

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

Как понять, что требуется второй этап обновления?

Платформа явно сообщает об этом в окне сообщений после динамического обновления и при повторном запуске «Обновить конфигурацию базы данных». Косвенный признак — ошибки пользователей при записи объектов, структура которых изменилась.

Безопасно ли динамическое обновление типовых конфигураций на новый релиз?

Как единственный шаг — нет. Релизы типовых конфигураций почти всегда содержат изменения структуры данных и обработчики миграции. Динамический режим допустим только как первый этап с обязательным последующим монопольным обновлением и выполнением отложенных обработчиков.

Что делать, если после динамического обновления у пользователей ошибки «Поле не найдено»?

Сначала завершите все сеансы и попросите пользователей зайти заново — чаще всего это устаревший кэш метаданных. Если ошибки сохраняются, проверьте, не требуется ли второй этап реструктуризации, и выполните его с монопольным доступом. При сохранении проблемы на клиент-серверной базе помогает перезапуск сервера 1С или очистка серверного кэша.

Можно ли автоматизировать динамическое обновление скриптом?

Да, через пакетный запуск конфигуратора с параметром /UpdateDBCfg и ключом -Dynamic+. Обязательно добавьте вывод журнала в файл (/Out) и проверяйте его после каждого запуска: скрипт должен реагировать на сообщение о необходимости второго этапа реструктуризации.