При разработке и сопровождении конфигураций на платформе 1С:Предприятие 8.3 разработчики нередко сталкиваются с неприятной ситуацией: в пользовательском режиме возникает ошибка времени выполнения (например, обращение к несуществующему реквизиту или несовпадение типов), но при попытке найти строку с ошибкой в конфигураторе оказывается, что текст модуля в конфигураторе не соответствует фактически исполняемому коду. При этом сравнение и объединение основной конфигурации с конфигурацией базы данных может показывать полное отсутствие различий.
Разберем подробнее, почему возникает этот рассинхрон и какими практическими методами можно полностью восстановить корректное состояние информационной базы.
Проанализируем ключевые причины возникновения проблемы:
Config, ConfigSave, Params, ConfigCAS) накапливаются промежуточные версии структур и модулей. В результате конфигуратор и исполняющая среда читают разные срезы метаданных.rphost) кэшируют скомпилированный байт-код модулей. Если рабочий процесс не успел перечитать метаданные, для части сеансов продолжает выполняться устаревший код.В первую очередь необходимо исключить влияние кэширования на всех уровнях. Разберем по шагам, как правильно выполнить полную очистку:
Завершим все сеансы работы с 1С на рабочей станции. Перейдем в каталоги временных файлов операционной системы и удалим все подпапки с буквенно-цифровыми идентификаторами:
%localappdata%\1C\1cv8
%appdata%\1C\1cv8
Также полезно удалить базу из списка в окне запуска и добавить ее заново — это заставит платформу создать для базы новую чистую локальную папку кэша.
Для гарантированной очистки управляемых форм запустим клиент или конфигуратор с параметром командной строки /ClearCache.
Остановим службу сервера 1С (ragent). В рабочем каталоге кластера (по умолчанию srvinfo\reg_1541) удалим кэш-папки процессов snccntx* и временные файлы сеансов, после чего снова запустим службу.
Если простая очистка кэшей не помогла и в базе по-прежнему наблюдается несоответствие модулей, применим надежный метод принудительной синхронизации трех сущностей метаданных (основной конфигурации, конфигурации БД и конфигурации поставщика):
Config_Main.cf).Config_DB.cf).Config_DB.cf. Согласимся с предупреждением о полной замене конфигурации.Config_Main.cf. Отметим необходимые изменения и выполним объединение.Выгрузка информационной базы в файл .dt с последующей загрузкой в чистую базу является одним из самых эффективных способов избавления от структурного «мусора», оставленного динамическими обновлениями. Выясним, как правильно это сделать:
*.dt (или выполним выгрузку в командной строке через параметр /DumpIB)./RestoreIB).В процессе загрузки платформы служебные таблицы метаданных формируются заново, а все поврежденные версионные записи динамических обновлений отсекаются.
Для устранения возможных логических и структурных нарушений в таблицах базы данных воспользуемся встроенными средствами платформы:
chdbfl.exe (расположенной в папке bin установленной платформы) с включенной опцией «Исправлять обнаруженные ошибки».В критических случаях в клиент-серверных базах версионный след динамического обновления можно удалить напрямую через SQL-запросы к таблицам СУБД (обязательно предварительно сделав резервную копию базы):
DELETE FROM ConfigSave;
DELETE FROM Params WHERE FileName LIKE '%dynamic%';
Чтобы навсегда исключить подобные проблемы в рабочей среде, рекомендуется придерживаться следующих правил:
*.cfe) — это абсолютно безопасно для основных таблиц метаданных базы./UpdateDBCfg -Dynamic-.