При активной доработке типовых конфигураций 1С программисты часто сталкиваются с ситуацией, когда большое количество объектов метаданных снимается с поддержки или переводится в режим «Редактируется с сохранением поддержки». Со временем часть этих доработок становится неактуальной, либо конфигурация приводится к максимально типовому виду. В этот момент возникает необходимость вернуть объекты на строгую поддержку (на «замок»), чтобы упростить и ускорить последующие обновления базы данных. Если измененных объектов сотни, ручной возврат каждого из них через клики в дереве метаданных превращается в кошмар. В этой статье мы подробно разберем, как решить эту задачу массово, безопасно и эффективно.
Когда мы сравниваем и объединяем рабочую конфигурацию с файлом обновления или поставки (.cf), платформа 1С автоматически предлагает изменить правила поддержки для модифицированных объектов. Если разработчик соглашается с изменениями, объекту присваивается статус возможности редактирования. Даже если впоследствии код внутри объекта был полностью возвращен к типовому состоянию, платформа автоматически не вернет ему статус «Не редактируется». Нам приходится делать это принудительно.
Рассмотрим несколько рабочих сценариев автоматизации этого процесса, проанализируем потенциально опасные методы, которые могут привести к потере данных, и разберем тонкости работы платформы 1С:Предприятие различных версий.
Этот метод является стандартным, безопасным и не требует сторонних инструментов. Мы заставим платформу самостоятельно пересчитать правила поддержки для всех объектов метаданных. Разберем этот процесс по шагам:
.cf ровно той же версии, которая сейчас установлена в качестве основной конфигурации.Этот способ позволяет вернуть «замки» на все неизмененные объекты за один проход, сохранив при этом все уникальные идентификаторы (UUID) метаданных и физические данные в таблицах СУБД.
В среде разработчиков часто звучит предложение: «Создайте чистую базу, загрузите туда типовой .cf, включите возможность изменения только у нужных объектов, перенесите туда доработки, а затем загрузите получившийся файл конфигурации в рабочую базу через Загрузить конфигурацию из файла».
Проанализируем, почему этот метод крайне опасен и категорически не рекомендуется для баз с реальными данными:
<Объект не найден> или к непредсказуемому дублированию данных.Выясним причину, почему у некоторых разработчиков при выполнении первого способа возникает ошибка рекурсивной обработки дерева, в то время как у других все проходит гладко. Все дело в версии используемой платформы 1С:Предприятие 8.3:
В старых версиях платформы (до версии 8.3.13) существовал зарегистрированный баг работы конфигуратора. Если в дереве метаданных присутствовали добавленные программистом новые объекты (например, собственные справочники или документы, которых изначально не было в конфигурации поставщика), попытка применить рекурсивное правило поддержки к родительской ветке вызывала критическую ошибку. Платформа пыталась сопоставить новые объекты с конфигурацией поставщика, не находила их там и прерывала операцию.
Начиная с версий платформы 8.3.13 и выше, это поведение было исправлено. Теперь конфигуратор корректно игнорирует добавленные пользователем объекты при массовом изменении правил для родительских веток метаданных.
Если вы вынуждены работать на старой версии платформы и сталкиваетесь с подобной ошибкой, рекомендуем выполнять рекурсивную установку правил не для всего корня конфигурации сразу, а отдельно для каждой крупной ветки (например, выделить ветку Справочники, запустить установку правил, затем ветку Документы и так далее), предварительно исключив из обработки или временно перенеся добавленные вручную объекты в отдельную подсистему.
Для крупных проектов и продвинутых разработчиков, использующих системы контроля версий (Git) и автоматизированные сценарии сборки, существует еще один высокоэффективный метод. Он позволяет полностью исключить ручную работу в интерфейсе Конфигуратора.
При выгрузке конфигурации в файлы Xml с помощью стандартной команды платформы:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /F "ПутьКБазе" /N "Администратор" /P "Пароль" /DumpConfigToFiles "C:\Distr\XmlConfig"
Платформа создает каталог с текстовыми и XML-файлами, описывающими структуру конфигурации. За настройки поддержки в этой структуре отвечает бинарный файл ParentConfigurations.bin (или Configuration.ParentConfigurations.bin в зависимости от формата выгрузки). Этот файл представляет собой сериализованный текстовый массив данных в специальном формате 1С, содержащий соответствие GUID объектов конфигурации правилам их поддержки.
Разберем алгоритм автоматического изменения правил через файлы:
-getChanges) получаем точный список файлов метаданных, которые подверглись реальным изменениям со стороны разработчика.supportconf), программно открываем файл ParentConfigurations.bin.
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /F "ПутьКБазе" /N "Администратор" /P "Пароль" /LoadConfigFromFiles "C:\Distr\XmlConfig"
Этот способ позволяет мгновенно восстановить статус поддержки для тысяч объектов на серверах непрерывной интеграции (CI/CD) без участия программиста.
Среди разработчиков часто ведется дискуссия: ускоряет ли установленный «замок» на объектах процесс сравнения и объединения при обновлении на новые релизы?
Проанализируем этот вопрос глубже. Физические тесты показывают, что время самого процесса сравнения конфигураций (которое запускается при обновлении) практически не меняется в зависимости от того, стоят ли замки на неизмененных объектах или они находятся в статусе «Редактируется с сохранением поддержки». Платформа в любом случае производит побайтовое сравнение метаданных для выявления расхождений.
Однако статус «Не редактируется» дает колоссальные преимущества в других аспектах:
Мы подробно разобрали, как быстро и безопасно вернуть объекты конфигурации 1С на поддержку. Использование рекурсивной настройки правил через конфигуратор в сочетании с холостым сравнением и объединением с чистым файлом поставщика является лучшей практикой для любого разработчика. Это позволяет поддерживать порядок в конфигурации, гарантирует сохранность данных пользователей и значительно упрощает сопровождение программных продуктов 1С в долгосрочной перспективе.