Как корректно вносить изменения в конфигурацию 1С и избежать проблем с динамическим обновлением?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

В чем заключается опасность динамического обновления

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

  1. Рассинхронизация кэширования метаданных: В момент применения изменений в системную таблицу Config базы данных записываются служебные порции данных (записи commit и dynamicCommit). При этом активные сеансы пользователей продолжают считывать данные из своего локального кэша и оперативной памяти процессов rphost. В клиент-серверном режиме разные рабочие процессы сервера могут хранить неидентичные версии кэша, что приводит к непредсказуемым ошибкам в работе общих модулей и форм.
  2. Накопительный эффект повреждений: Если выполнять динамическое обновление несколько раз подряд без монопольного обновления базы, риск повреждения структуры таблицы Config возрастает. В будущем при попытке выполнить обычное обновление с реструктуризацией база может выдать критический сбой («Ошибка потока формата»).
  3. Проблемы с модулями с повторным использованием: Кэш функций общих модулей, у которых установлено повторное использование возвращаемых значений на время вызова или сеанса, не сбрасывается при динамическом обновлении. Пользователи продолжают работать с устаревшими данными до перезапуска своего сеанса.
  4. Фоновые и регламентные задания: Динамическое обновление не меняет исполняемый код в уже запущенных или «спящих» фоновых процессах. Для их обновления всё равно требуется перезапуск службы сервера или пересоздание процесса.

Правильный регламент обновления конфигурации

Рассмотрим наилучшие практики обновления базы 1С, позволяющие полностью исключить проблемы с кэшем на рабочих местах пользователей.

  1. Полный отказ от динамического обновления для критичных доработок: Динамически допускается обновлять исключительно внешние отчеты или обработки, которые в данный момент гарантированно никто не использует, с последующим перезапуском сеанса у конкретного пользователя. Изменения структур данных, документов, справочников и общих модулей всегда должны выполняться только в монопольном режиме.
  2. Согласование регламентного окна обновлений: На предприятии необходимо утвердить регламент (например, приказ по компании), определяющий временное окно для проведения технических работ (в конце рабочего дня или в ночное время).
  3. Завершение всех пользовательских сеансов: Перед применением изменений необходимо принудительно завершать все активные сеансы пользователей и отключать регламентные задания через Консоль кластера серверов 1С:Предприятия.
  4. Применение изменений через Конфигуратор: После отключения пользователей выполним сравнение и объединение конфигураций (или просто сохранение изменений) и нажмем кнопку «Обновить конфигурацию базы данных» (F7).

Автоматизация безопасного обновления по расписанию

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

Рассмотрим пример команды для запуска пакета обновления:


DESIGNER /S "ServerName\BaseName" /N "Admin" /P "Password" /UpdateDBCfg -Dynamic-

Флаг -Dynamic- гарантирует, что платформа попытается выполнить обновление базы данных исключительно в обычном (не динамическом) режиме. Если в системе останется хотя бы один активный пользователь, операция будет отменена, что предохранит базу от случайного динамического накатывания изменений.

Использование блокировки сеансов и кода разрешения

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

Для подключения к заблокированной базе администратору или скрипту автоматизации необходимо использовать параметр запуска /UCSecretCode:


DESIGNER /S "ServerName\BaseName" /N "Admin" /P "Password" /UCSecretCode /UpdateDBCfg -Dynamic-

Дополнительные методы борьбы с проблемами кэша

Рассмотрим дополнительные техники, помогающие минимизировать проблемы при работе с обновляемыми системами:

  1. Параметр запуска /ClearCache: В свойствах ярлыка подключения к информационной базе у пользователей можно прописать параметр /ClearCache. При каждом старте системы платформа будет очищать динамический кэш клиентского приложения, предохраняя от накопления устаревших метаданных.
  2. Перенос доработок в Расширения конфигурации (.cfe): Для конфигураций, где это возможно, доработку логики и форм целесообразно выносить в расширения. Обновление расширений не затрагивает основную структуру конфигурации 1С и существенно снижает риск повреждения таблицы метаданных.

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

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

  1. Останавливаем службу сервера «1С:Предприятия».
  2. В базе данных SQL из таблицы Config удаляем служебные записи временных коммитов:
    
    DELETE FROM Config WHERE FileName IN ('commit', 'dynamicCommit', 'dbStruFinal');
    DELETE FROM ConfigSave;
    
  3. Запускаем службу сервера «1С:Предприятия».
  4. Открываем Конфигуратор и выполняем обычное обновление конфигурации базы данных.

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

← На главную