Как исправить ошибку с удаляемыми константами при обновлении 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При обновлении нетиповых или некорректно снятых с поддержки конфигураций «1С:Бухгалтерия 3.0» (например, при переходе с релиза 3.0.59.56 на версию 3.0.61.37 и выше) технические специалисты часто сталкиваются со следующей ошибкой конфигуратора:

«На удаляемый объект Константа.УдалитьКонтекстАвторизации (или УдалитьКонтекстКриптографии) есть ссылки в объектах основной конфигурации: Обработка.ПанельАдминистрированияБП.Форма...»

В этой статье мы подробно разберем, почему возникает данная коллизия метаданных, проанализируем внутренние механизмы платформы «1С:Предприятие 8.3» и рассмотрим несколько эффективных способов решения проблемы.

Выясним причину возникновения ошибки

Для начала проанализируем природу этих объектов. Константы УдалитьКонтекстАвторизации и УдалитьКонтекстКриптографии принадлежат встроенной подсистеме БЭД (Библиотека электронных документов). В определенный момент разработчики фирмы «1С» изменили архитектуру хранения параметров обмена и перевели механизмы авторизации и криптографии на новые структуры.

Чтобы обновление прошло безболезненно для пользователей, старым константам временно присваивается префикс Удалить. В течение переходного периода (несколько релизов) специальные обработчики обновления переносят данные из старых констант в новые регистры или реквизиты. После этого в очередном релизе разработчики полностью удаляют устаревшие метаданные из конфигурации поставщика.

Если ваша база находится на стандартной поддержке («на замке»), конфигуратор автоматически обновляет зависимые формы обработки Обработка.ПанельАдминистрированияБП, удаляя из них ссылки на несуществующие константы. Однако если конфигурация была полностью или частично снята с поддержки (например, для доработок сторонним программистом), правила сравнения и объединения меняются:

  1. Конфигуратор видит, что константы удалены в новой версии поставщика, и пытается удалить их из основной конфигурации.
  2. При этом формы обработки ПанельАдминистрированияБП распознаются системой как измененные или требующие сохранения из основной конфигурации.
  3. В результате новые формы обработки (где ссылок на константы уже нет) не загружаются, а в старых формах остаются «мертвые» ссылки на удаляемые объекты. Конфигуратор блокирует обновление из-за нарушения целостности структуры метаданных.

Рассмотрим по шагам профессиональные методы решения этой проблемы.

Способ 1. Полное замещение конфигурации (Рекомендуемый метод для типовых баз)

Если в вашей базе конфигурация была снята с поддержки (напротив объектов базы в дереве метаданных отсутствуют значки «замочков»), но при этом реальных доработок кода и структуры данных не выполнялось, самым надежным решением будет полная загрузка конфигурации поставщика. Это позволит не только решить проблему с константами, но и вернуть базу на полноценную поддержку.

Выполним процедуру по шагам:

  1. Обязательно создайте резервную копию базы данных! Для этого перейдите в меню Администрирование — Выгрузить информационную базу и сохраните файл .dt.
  2. Получите файл полной конфигурации (1cv8.cf) целевого релиза, на который вы обновляетесь (в нашем примере это 3.0.61.37). Его можно взять из шаблона установки обновления или выгрузить из чистой демо-базы того же релиза.
  3. В режиме «Конфигуратор» откройте меню Конфигурация — Поддержка — Настройка поддержки. Если кнопка активна, это подтверждает, что правила поддержки были изменены.
  4. Перейдите в меню Конфигурация — Загрузить конфигурацию из файла....
  5. Выберите подготовленный ранее файл 1cv8.cf целевого релиза.
  6. Согласитесь на предупреждение системы о полной замене конфигурации.
  7. После успешной загрузки выполните обновление базы данных, нажав клавишу F7 (или синюю бочку на панели инструментов).

Этот способ полностью сотрет некорректные связи, удалит старые константы, применит новые формы обработок администрирования и вернет конфигурацию на «замок».

Способ 2. Правильная настройка правил в окне сравнения и объединения

Если конфигурация вашей «1С:Бухгалтерии» содержит важные уникальные доработки, и полностью заменять ее файлом поставщика нельзя, нам потребуется тонко настроить правила объединения объектов метаданных.

Рассмотрим, как правильно настроить фильтры сравнения:

  1. Запустите процесс обновления через меню Конфигурация — Поддержка — Обновить конфигурацию (или выберите сравнение с файлом .cf нового релиза).
  2. После открытия окна сравнения и объединения найдите в дереве метаданных ветку Обработки.
  3. Разверните обработку ПанельАдминистрированияБП.
  4. Убедитесь, что для самой обработки и всех ее подчиненных форм установлена галочка объединения, а в колонке «Режим объединения» выбрано значение «Взять из конфигурации поставщика». Это заставит конфигуратор полностью перезаписать формы этой обработки новыми версиями, в которых физически отсутствуют обращения к старым константам.
  5. Найдите удаляемые константы УдалитьКонтекстАвторизации и УдалитьКонтекстКриптографии в дереве сравнения. Если вы хотите, чтобы они удалились безболезненно, галочки напротив них должны быть сняты (что означает согласие с их удалением), при условии, что формы обработки мы заменяем на новые.
  6. Нажмите кнопку Выполнить. Система обновит формы, очистит ссылки и успешно завершит процедуру сравнения без ошибок.

Способ 3. Временный отказ от удаления объектов (Снятие галок)

Если вы ограничены во времени и вам необходимо срочно обновить базу, а детально разбираться в измененных формах некогда, можно применить «быстрый» обходной путь. Мы временно запретим системе удалять эти константы из нашей основной базы, несмотря на то, что в поставке обновления их уже нет.

Разберем данный алгоритм:

  1. В окне сравнения и объединения найдите строки с константами, на которые ругается конфигуратор: Константа.УдалитьКонтекстАвторизации и Константа.УдалитьКонтекстКриптографии.
  2. Установите галочки напротив этих констант в колонке основной конфигурации, но при этом в правилах укажите, что мы сохраняем их (не удаляем). То есть мы отказываемся от действия удаления, предложенного поставщиком.
  3. Запустите объединение и примените изменения базы данных (F7). Обновление пройдет успешно, так как физически константы останутся в структуре БД, и старые формы обработки не потеряют свои источники данных.
  4. При следующем обновлении на более поздние релизы, когда формы обработки ПанельАдминистрированияБП все-таки будут обновлены стандартным путем, вы сможете безболезненно удалить эти константы, так как ссылок на них в коде уже гарантированно не останется.

Способ 4. Ручная очистка неразрешимых ссылок в конфигураторе

Этот способ подходит для опытных разработчиков, когда формы обработки ПанельАдминистрированияБП сильно кастомизированы под нужды учета конкретного предприятия, и их автоматическая замена на типовые формы поставщика сотрет уникальный функционал.

Проанализируем шаги ручной очистки:

  1. До начала процесса объединения (или восстановив конфигурацию из бэкапа) откройте дерево метаданных основной конфигурации.
  2. Перейдите к обработке ПанельАдминистрированияБП, откройте ее формы, на которые ругался конфигуратор (например, форму Интерфейс, НастройкиРегистровУчета, ПечатьАртикулов).
  3. Перейдите на вкладку «Реквизиты» формы. Найдите реквизиты, связанные с константами криптографии и авторизации, или элементы формы (флажки, поля ввода), которые ссылаются на эти константы в путях к данным.
  4. Удалите данные элементы управления или перенаправьте их ПутьКДанным на другие корректные реквизиты.
  5. Перейдите в модуль формы (вкладка «Модуль») и воспользуйтесь глобальным поиском по текстам модулей данной обработки. Ищите упоминания Константы.УдалитьКонтекстАвторизации и Константы.УдалитьКонтекстКриптографии.
  6. Закомментируйте или удалите строки кода, обращающиеся к этим объектам. Пример корректного комментирования устаревшего кода:

// Очистка устаревшего обращения к константе авторизации БЭД
// ЗначениеКонтекста = Константы.УдалитьКонтекстАвторизации.Получить();
ЗначениеКонтекста = Неопределено; // Новый алгоритм не использует данную константу

После ручной зачистки всех упоминаний в формах и модулях вы можете повторно запустить процедуру обновления. Конфигуратор без препятствий удалит устаревшие константы, так как ни один объект в основной конфигурации больше не будет на них ссылаться.

Важные выводы и рекомендации

Подводя итоги, дадим несколько практических советов по администрированию нетиповых конфигураций «1С»:

← На главную