В процессе разработки и сопровождения конфигураций 1С специалисты часто применяют механизм динамического обновления (так называемое обновление «на лету»). Это позволяет вносить изменения в программный код модулей без остановки работы пользователей и завершения их сеансов. Однако периодически возникают ситуации, когда при попытке скорректировать лишь пару строк в модуле обработки или формы платформа отказывается обновлять конфигурацию базы данных динамически и требует выгнать всех активных пользователей.
Рассмотрим подробно причины возникновения этой проблемы, разберем особенности поведения платформы 1С при обновлении релизов и изучим проверенные способы восстановления корректной работы системы.
Выясним причину, почему платформа 1С может вести себя так, будто изменилась структура метаданных (хотя менялся только код модуля). Существует несколько основных факторов:
Проанализируем порядок действий, необходимых для устранения сбоя и возврата возможности обновлять базу «на лету».
Шаг 1. Проведение первого полного обновления конфигурации БД
Если проблема возникла сразу после обновления самой платформы 1С, необходимо выполнить одно полное обновление информационной базы:
Конфигурация -> Обновить конфигурацию базы данных).После проведения первого полного сохранения структуры на новом релизе платформы механизм динамического обновления снова станет доступен для правок программного кода.
Шаг 2. Очистка кэша конфигурации у пользователей
После динамических обновлений у некоторых пользователей новые алгоритмы могут не вступать в силу или вызывать ошибки в клиентских приложениях из-за устаревшего кэша. Рассмотрим быстрый и эффективный способ очистки кэша для конкретной базы данных без удаления системных папок вручную:
В случаях, когда Конфигуратор заблокирован из-за сбоя предшествующего обновления в клиент-серверном режиме (SQL), проанализируем состояние системных таблиц. Если в таблице Config зафиксированы фантомные записи незавершенных транзакций, применяют технологию очистки служебных флагов.
Для сброса зависшего состояния выполняется запрос к базе данных на стороне SQL-сервера:
DELETE FROM Config WHERE FileName IN ('commit', 'dynamicCommit', 'dbStruFinal');
DELETE FROM ConfigSave;
Важно: любые прямые манипуляции с таблицами Config, ConfigSave и Params на уровне СУБД следует выполнять только при наличии свежей резервной копии базы данных.
Разберем поведение системы при работе с распределенными информационными базами. Опыт эксплуатации показывает, что динамические обновления представляют повышенную опасность для узлов РИБ. Если выполнить два и более динамических обновления подряд без промежуточной выгрузки и применения обменов в узлах, механизм узловой синхронизации может сбойнуть, что приводит к разрыву обмена и расходованию конфигураций.
Для распределенных систем рекомендуется полностью отказаться от динамического обновления в пользу плановых технологических окон с выгоном пользователей.
Чтобы исключить риски повреждения структуры базы данных и ошибки кэширования, проанализируем более надежные архитектурные подходы к доработке системы:
.epf и .erf). Их изменение вообще не затрагивает основную конфигурацию.