При обновлении нетиповых или некорректно снятых с поддержки конфигураций «1С:Бухгалтерия 3.0» (например, при переходе с релиза 3.0.59.56 на версию 3.0.61.37 и выше) технические специалисты часто сталкиваются со следующей ошибкой конфигуратора:
«На удаляемый объект Константа.УдалитьКонтекстАвторизации (или УдалитьКонтекстКриптографии) есть ссылки в объектах основной конфигурации: Обработка.ПанельАдминистрированияБП.Форма...»
В этой статье мы подробно разберем, почему возникает данная коллизия метаданных, проанализируем внутренние механизмы платформы «1С:Предприятие 8.3» и рассмотрим несколько эффективных способов решения проблемы.
Для начала проанализируем природу этих объектов. Константы УдалитьКонтекстАвторизации и УдалитьКонтекстКриптографии принадлежат встроенной подсистеме БЭД (Библиотека электронных документов). В определенный момент разработчики фирмы «1С» изменили архитектуру хранения параметров обмена и перевели механизмы авторизации и криптографии на новые структуры.
Чтобы обновление прошло безболезненно для пользователей, старым константам временно присваивается префикс Удалить. В течение переходного периода (несколько релизов) специальные обработчики обновления переносят данные из старых констант в новые регистры или реквизиты. После этого в очередном релизе разработчики полностью удаляют устаревшие метаданные из конфигурации поставщика.
Если ваша база находится на стандартной поддержке («на замке»), конфигуратор автоматически обновляет зависимые формы обработки Обработка.ПанельАдминистрированияБП, удаляя из них ссылки на несуществующие константы. Однако если конфигурация была полностью или частично снята с поддержки (например, для доработок сторонним программистом), правила сравнения и объединения меняются:
ПанельАдминистрированияБП распознаются системой как измененные или требующие сохранения из основной конфигурации.Рассмотрим по шагам профессиональные методы решения этой проблемы.
Если в вашей базе конфигурация была снята с поддержки (напротив объектов базы в дереве метаданных отсутствуют значки «замочков»), но при этом реальных доработок кода и структуры данных не выполнялось, самым надежным решением будет полная загрузка конфигурации поставщика. Это позволит не только решить проблему с константами, но и вернуть базу на полноценную поддержку.
Выполним процедуру по шагам:
Администрирование — Выгрузить информационную базу и сохраните файл .dt.1cv8.cf) целевого релиза, на который вы обновляетесь (в нашем примере это 3.0.61.37). Его можно взять из шаблона установки обновления или выгрузить из чистой демо-базы того же релиза.Конфигурация — Поддержка — Настройка поддержки. Если кнопка активна, это подтверждает, что правила поддержки были изменены.Конфигурация — Загрузить конфигурацию из файла....1cv8.cf целевого релиза.F7 (или синюю бочку на панели инструментов).Этот способ полностью сотрет некорректные связи, удалит старые константы, применит новые формы обработок администрирования и вернет конфигурацию на «замок».
Если конфигурация вашей «1С:Бухгалтерии» содержит важные уникальные доработки, и полностью заменять ее файлом поставщика нельзя, нам потребуется тонко настроить правила объединения объектов метаданных.
Рассмотрим, как правильно настроить фильтры сравнения:
Конфигурация — Поддержка — Обновить конфигурацию (или выберите сравнение с файлом .cf нового релиза).Обработки.ПанельАдминистрированияБП.УдалитьКонтекстАвторизации и УдалитьКонтекстКриптографии в дереве сравнения. Если вы хотите, чтобы они удалились безболезненно, галочки напротив них должны быть сняты (что означает согласие с их удалением), при условии, что формы обработки мы заменяем на новые.Выполнить. Система обновит формы, очистит ссылки и успешно завершит процедуру сравнения без ошибок.Если вы ограничены во времени и вам необходимо срочно обновить базу, а детально разбираться в измененных формах некогда, можно применить «быстрый» обходной путь. Мы временно запретим системе удалять эти константы из нашей основной базы, несмотря на то, что в поставке обновления их уже нет.
Разберем данный алгоритм:
Константа.УдалитьКонтекстАвторизации и Константа.УдалитьКонтекстКриптографии.F7). Обновление пройдет успешно, так как физически константы останутся в структуре БД, и старые формы обработки не потеряют свои источники данных.ПанельАдминистрированияБП все-таки будут обновлены стандартным путем, вы сможете безболезненно удалить эти константы, так как ссылок на них в коде уже гарантированно не останется.Этот способ подходит для опытных разработчиков, когда формы обработки ПанельАдминистрированияБП сильно кастомизированы под нужды учета конкретного предприятия, и их автоматическая замена на типовые формы поставщика сотрет уникальный функционал.
Проанализируем шаги ручной очистки:
ПанельАдминистрированияБП, откройте ее формы, на которые ругался конфигуратор (например, форму Интерфейс, НастройкиРегистровУчета, ПечатьАртикулов).ПутьКДанным на другие корректные реквизиты.Константы.УдалитьКонтекстАвторизации и Константы.УдалитьКонтекстКриптографии.
// Очистка устаревшего обращения к константе авторизации БЭД
// ЗначениеКонтекста = Константы.УдалитьКонтекстАвторизации.Получить();
ЗначениеКонтекста = Неопределено; // Новый алгоритм не использует данную константу
После ручной зачистки всех упоминаний в формах и модулях вы можете повторно запустить процедуру обновления. Конфигуратор без препятствий удалит устаревшие константы, так как ни один объект в основной конфигурации больше не будет на них ссылаться.
Подводя итоги, дадим несколько практических советов по администрированию нетиповых конфигураций «1С»:
/ClearCache или вручную очищайте папку %userprofile%\AppData\Local\1C\1cv8.