При доработке нетиповых или самописных конфигураций 1С на платформе «1С:Предприятие 8.3» программисты и администраторы регулярно сталкиваются с ситуацией, когда после внесения изменений у части пользователей программа начинает работать со сбоями, выдает ошибки кэширования метаданных или не принимает обновленный код. Чаще всего причина кроется в применении динамического обновления (в профессиональной среде часто называемого «демоническим»). Разберем подробно, почему возникает эта проблема, какие технические процессы происходят в базе данных и как правильно организовать процесс обновления конфигурации без риска повреждения базы.
Проанализируем техническую сторону процесса. При динамическом обновлении платформа 1С пытается применить изменения в конфигурации «на лету», не требуя выгона пользователей из программы и завершения их сеансов. Однако этот механизм содержит существенные технические риски:
Config базы данных записываются служебные порции данных (записи commit и dynamicCommit). При этом активные сеансы пользователей продолжают считывать данные из своего локального кэша и оперативной памяти процессов rphost. В клиент-серверном режиме разные рабочие процессы сервера могут хранить неидентичные версии кэша, что приводит к непредсказуемым ошибкам в работе общих модулей и форм.Config возрастает. В будущем при попытке выполнить обычное обновление с реструктуризацией база может выдать критический сбой («Ошибка потока формата»).Рассмотрим наилучшие практики обновления базы 1С, позволяющие полностью исключить проблемы с кэшем на рабочих местах пользователей.
Разберем, как автоматизировать процесс обновления информационной базы без постоянного ручного контроля администратора. Для этого можно использовать запуск Конфигуратора в командном режиме с ключом, запрещающим динамическое обновление.
Рассмотрим пример команды для запуска пакета обновления:
DESIGNER /S "ServerName\BaseName" /N "Admin" /P "Password" /UpdateDBCfg -Dynamic-
Флаг -Dynamic- гарантирует, что платформа попытается выполнить обновление базы данных исключительно в обычном (не динамическом) режиме. Если в системе останется хотя бы один активный пользователь, операция будет отменена, что предохранит базу от случайного динамического накатывания изменений.
Посмотрим на штатный механизм блокировки информационной базы. Перед началом проведения работ на базу данных накладывается блокировка установки новых сеансов и блокировка выполнения регламентных заданий. При этом задается код разрешения (например, SecretCode).
Для подключения к заблокированной базе администратору или скрипту автоматизации необходимо использовать параметр запуска /UCSecretCode:
DESIGNER /S "ServerName\BaseName" /N "Admin" /P "Password" /UCSecretCode /UpdateDBCfg -Dynamic-
Рассмотрим дополнительные техники, помогающие минимизировать проблемы при работе с обновляемыми системами:
/ClearCache: В свойствах ярлыка подключения к информационной базе у пользователей можно прописать параметр /ClearCache. При каждом старте системы платформа будет очищать динамический кэш клиентского приложения, предохраняя от накопления устаревших метаданных..cfe): Для конфигураций, где это возможно, доработку логики и форм целесообразно выносить в расширения. Обновление расширений не затрагивает основную структуру конфигурации 1С и существенно снижает риск повреждения таблицы метаданных.Проанализируем ситуацию, когда база перестала открываться после неудачного динамического обновления (например, возникает ошибка формата потока). В таком случае восстановление структуры метаданных на стороне СУБД (например, Microsoft SQL Server) выполняется по следующим шагам:
Config удаляем служебные записи временных коммитов:
DELETE FROM Config WHERE FileName IN ('commit', 'dynamicCommit', 'dbStruFinal');
DELETE FROM ConfigSave;
Подводя итоги: золотое правило работы с платформами 1С — полный отказ от динамического обновления рабочей базы. Завершение сеансов, работа в регламентные окна и использование скриптов автоматизации гарантируют стабильную и предсказуемую работу системы.