В практике администраторов и разработчиков 1С встречается коварная ситуация: обновление конфигурации прошло штатно, сравнение и объединение не показывают никаких различий с конфигурацией поставщика, однако при работе программы возникают ошибки вида Метод объекта не обнаружен. При попытке отладки выясняется, что нужная процедура или функция просто отсутствует в тексте модуля, хотя в «чистом» дистрибутиве обновления она есть. Рассмотрим подробно, почему возникает такая рассинхронизация и как привести систему в порядок.
Типичный сценарий: при заполнении декларации по НДС или другого сложного отчета система выдает ошибку, ссылаясь на общий модуль. Вы открываете конфигуратор, находите этот модуль и видите, что в нем не хватает целых блоков кода (например, процедуры ДополнитьИнформациейОСчетахФактурах). При этом база находится на «замке» (типовая конфигурация), и никаких изменений в нее не вносилось. Самое странное происходит при попытке выполнить операцию «Конфигурация — Сравнить, объединить с конфигурацией из файла»: платформа сообщает, что конфигурации идентичны.
Выясним причину такого поведения. Платформа 1С:Предприятие хранит тексты модулей в специальных таблицах базы данных в сжатом виде. Иногда из-за сбоев кэширования или ошибок транзакций заголовки объектов обновляются, а фактическое содержимое (бинарные данные текста модуля) остается старым. Рассмотрим пошагово, как исправить эту ситуацию.
Прежде чем приступать к глубоким манипуляциям с базой данных, необходимо исключить влияние локального кэша. Часто конфигуратор «запоминает» старое состояние модулей и отображает их некорректно. Разберем алгоритм действий:
%AppData%\1C\1cv8\%LocalAppData%\1C\1cv8\/ClearCache.После очистки кэша проверьте наличие проблемной процедуры. Если она не появилась, значит, проблема зафиксирована на уровне серверных таблиц базы данных.
Одной из наиболее вероятных причин «глюков» в текстах модулей является так называемое «демоническое» (динамическое) обновление. Когда изменения принимаются в то время, как в базе работают пользователи, платформа создает новые версии записей в таблицах Config, сохраняя старые для активных сеансов. В этот момент может произойти рассинхронизация.
Проанализируем ситуацию: если в дереве конфигурации вы видите восклицательный знак рядом с корневым элементом, это означает, что основная конфигурация отличается от конфигурации базы данных. Чтобы исправить возможные ошибки динамического обновления, выполните следующие действия:
.cf еще раз, но строго в монопольном режиме, избегая динамического принятия изменений.В системных таблицах базы данных существует разделение между текущим рабочим состоянием (таблица Config) и сохраненным, но не примененным состоянием (таблица ConfigSave). При сбое обновления платформа может начать считать, что объект уже обновлен (по хэш-сумме в заголовке), хотя фактическое тело модуля в таблице Config не обновилось.
Для решения этой проблемы мы рекомендуем метод «полной перезаписи»:
.cf) той же версии, которая установлена у вас (можно скачать с сайта поддержки 1С или выгрузить из аналогичной корректной базы).Этот способ принудительно перезаписывает все записи в системных таблицах, устраняя любые «призрачные» объекты (Ghosting).
Если ваша база работает в файловом режиме (файл 1Cv8.1CD), возможно повреждение внутренней структуры файла, которое мешает корректной распаковке текстов модулей при обновлении. Проанализируем состояние файла с помощью штатной утилиты:
bin) файл chdbfl.exe.После завершения проверки повторите попытку обновления или просто откройте конфигуратор и проверьте текст проблемного модуля.
Если проблема сохраняется, воспользуемся механизмом логической проверки базы данных. В конфигураторе перейдите в меню «Администрирование — Тестирование и исправление». Нам важны следующие пункты:
Часто после выполнения ТиИ платформа «видит» несоответствие и позволяет корректно применить обновление модуля.
Как показал опыт практического решения данной проблемы, наиболее надежным способом в случае типовых конфигураций (таких как 1С:Бухгалтерия 3.0) является обновление на следующий доступный релиз. Новая итерация обновления принудительно инициирует процесс сравнения и записи объектов, что зачастую исправляет ошибки предыдущего «кривого» обновления.
Важные советы для предотвращения подобных ситуаций в будущем:
.dt) или создавайте копию файла базы данных.%TEMP%, так как именно там происходит распаковка дистрибутивов обновления.Проанализировав все способы, можно сделать вывод: если очистка кэша не помогла, самым быстрым техническим решением будет выгрузка конфигурации в .cf, полное «Тестирование и исправление» и повторная загрузка конфигурации через режим сравнения/объединения или полную загрузку файла.