В процессе сопровождения сложных систем, таких как 1С:Управление производственным предприятием (УПП), программисты часто сталкиваются с ситуацией, когда конфигурация поставщика «убегает». Это происходит, если обновления вносились нештатно (например, через простое сравнение и объединение без учета правил поддержки) или если база была некорректно снята с поддержки. В итоге мы получаем конфигурацию, которая де-факто является типовой (или почти типовой), но де-юре не имеет связи с поставщиком, что делает невозможным использование штатных механизмов обновления .cfu-файлами.
Разберем детально, почему возникает проблема, когда при попытке сравнения с эталоном платформа «упрямится» и не выводит заветное диалоговое окно «Поставить на поддержку», и как это исправить.
Проанализируем ситуацию: у нас есть база, снятая с поддержки, и есть «эталонная» база того же релиза. Мы пытаемся выполнить операцию Конфигурация — Сравнить, объединить с конфигурацией из файла, выбирая .cf-файл эталона, но система просто открывает окно сравнения, не предлагая восстановить поддержку. Выясним причину такого поведения.
Основная ошибка кроется в природе самого файла .cf. Платформа 1С различает несколько типов конфигураций внутри файлов:
Когда мы сохраняем конфигурацию через меню Конфигурация — Сохранить конфигурацию в файл, мы выгружаем основную конфигурацию. Даже если в ней есть «замочки», для системы это сторонний файл. Чтобы платформа предложила встать на поддержку, ей нужен именно файл конфигурации поставщика. Рассмотрим подробнее, как его получить.
Для того чтобы восстановить связь с поставщиком, нам нужно извлечь из «здоровой» эталонной базы чистый слепок поставщика. Посмотрим на алгоритм действий:
.cf, но его внутренняя структура будет иной).Именно этот файл является ключом к решению проблемы. Платформа идентифицирует его как объект поддержки и при сравнении с вашей базой поймет, что вы пытаетесь сопоставить рабочую конфигурацию с эталоном поставщика.
Теперь, когда у нас есть правильный файл, разберем процесс постановки на поддержку по шагам. Этот метод предпочтительнее полной загрузки конфигурации (LoadCfg), так как он позволяет сохранить ваши доработки в 1С:УПП.
Проанализируем ситуацию, если база подключена к Хранилищу конфигурации. Это накладывает серьезные ограничения на манипуляции с поддержкой. Посмотрим на важные правила:
Рекомендуем следующий алгоритм: сначала выполните восстановление поддержки на копии базы, отключенной от хранилища. Убедитесь, что все «замочки» на месте и конфигурация поставщика соответствует нужному релизу. Затем в основной базе, подключенной к хранилищу, выполните захват корня и сделайте Конфигурация — Загрузить конфигурацию из файла, выбрав исправленный .cf. Это наиболее надежный способ обновить структуру хранилища.
Существует мнение, что нельзя встать на поддержку того же самого релиза, который уже частично присутствует в базе. Проанализируем это. На самом деле, встать на поддержку той же версии можно и нужно. Платформа сравнивает не только номер версии, но и внутренние идентификаторы объектов. Если вы пытаетесь «натянуть» на УПП конфигурацию от «Комплексной автоматизации» (даже если номера релизов совпали), фокус не удастся — GUID конфигураций будут разными, и предложение о поддержке не появится.
Также важно помнить о регламентных операциях. При обновлении конфигурации поставщика платформа выполняет скрытую реструктуризацию таблиц. Если вы «перепрыгнули» через 20 релизов и просто «приклеили» новую конфигурацию поставщика, данные в базе могут не соответствовать ожиданиям программного кода. Всегда проверяйте необходимость запуска обработок обновления данных после восстановления поддержки.
Выясним причину успеха: для восстановления «замочков» и связи с вендором нам критически важен файл, полученный через «Сохранить конфигурацию поставщика в файл». Обычный .cf, сохраненный стандартным способом, не содержит необходимых метаданных для инициации процедуры постановки на поддержку.
Для закрепления материала рассмотрим структуру действий в виде таблицы объектов:
// Логическая последовательность действий в терминах функций платформы:
Если ТекущаяКонфигурация.НаПоддержке() = Ложь Тогда
ФайлПоставщика = ПолучитьИзЭталона("SupplierConfig.cf");
СравнитьИОбъединить(ФайлПоставщика, РежимПостановкиНаПоддержку);
КонецЕсли;
Не забывайте об очистке кэша. Если после всех манипуляций вы все еще не видите иконок поддержки, закройте Конфигуратор и удалите содержимое папок в %AppData%\1C\1Cv8. Это заставит платформу пересчитать состояние объектов метаданных и корректно отобразить статус поддержки вашей 1С:УПП.