Почему при объединении с конфигурацией поставщика в 1С слетают замки и как это исправить

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

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

Выясним причину: почему слетает замок?

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

Если мы используем стандартный механизм «Конфигурация — Сравнить, объединить с конфигурацией из файла», платформа воспринимает это как намерение внести изменения вручную. В этом режиме 1С часто не может гарантировать сохранение статуса «не редактируется», так как само действие объединения подразумевает модификацию объекта. Если в правилах объединения не указано иное, объект автоматически переводится в режим редактирования, чтобы система могла записать в него данные из объединяемого файла.

Рассмотрим основные факторы, приводящие к «слету» замков:

  1. Неверный режим объединения: В окне сравнения в колонке «Режим объединения» для корня или конкретных объектов может быть установлено правило, разрешающее редактирование.
  2. Несущественные различия: Лишние пробелы, переносы строк или изменения в порядке следования свойств объектов (даже если они визуально не видны) заставляют платформу считать, что объект изменен.
  3. Объединение вместо обновления: Использование простого сравнения через файл .cf вместо штатного механизма «Обновить конфигурацию».

Способ 1: Возврат на поддержку через правила по умолчанию

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

Перейдем в меню «Конфигурация — Поддержка — Настройка поддержки». В открывшемся окне мы увидим дерево объектов и их текущие статусы. Чтобы восстановить замки, проанализируем кнопку «Установить правила по умолчанию». При ее нажатии откроется диалог, где нам следует выбрать следующие параметры:

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

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

Если нам все же необходимо выполнить объединение (например, мы хотим перенести только часть изменений из новой версии), нужно очень внимательно следить за настройками в окне сравнения. Посмотрим на колонку «Правило поддержки» (она находится рядом с колонкой «Результат»).

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

Проанализируем ситуацию с «лишними пробелами». Иногда 1С показывает различия в модулях, хотя код кажется одинаковым. Чтобы это не приводило к снятию замков, выполним следующие действия в окне сравнения:

  1. Нажмем кнопку «Параметры».
  2. Установим флажок «Игнорировать несущественные изменения в текстах модулей».
  3. Установим флажок «Игнорировать различия в порядке объектов».

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

Способ 3: Использование механизма «Обновить конфигурацию»

Профессиональное правило гласит: для обновления типовых решений всегда используйте путь «Конфигурация — Поддержка — Обновить конфигурацию». Почему это важно? В отличие от простого сравнения/объединения файлов, этот механизм работает с файлами поставщика (.cfu или .cf, зарегистрированные в поставке).

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

Рассмотрим пример того, как ведут себя объекты при обновлении через поддержку:


// Объект: Обработка.ПечатьЭтикеток
// Состояние до: На замке (Не редактируется)
// Действие: Обновление через "Поддержка - Обновить конфигурацию"
// Результат: Объект обновлен до версии поставщика, статус "На замке" сохранен.

// Объект: Справочник.Номенклатура
// Состояние до: Редактируется с сохранением поддержки (Замок снят разработчиком)
// Действие: Обновление через "Поддержка - Обновить конфигурацию"
// Результат: Платформа предложит окно сравнения для ручного слияния изменений.

Почему возникают «глюки» с тегами и формами?

Как отмечалось в обсуждении, иногда объекты перестают обновляться корректно, если замок снят, даже если мы не вносили в них правки. Проанализируем причину: в современных версиях платформы 8.3 формы и другие объекты хранятся в сложном XML-формате. При снятии объекта с поддержки 1С может изменить внутреннюю структуру этого XML (например, изменить порядок атрибутов). При последующем сравнении с «чистым» объектом поставщика платформа видит эти структурные различия.

Если вы столкнулись с тем, что объект «глючит» или не хочет обновляться, лучшим решением будет:

  1. В окне сравнения/объединения выбрать для этого объекта действие «Взять из конфигурации поставщика» (полное замещение вашего объекта объектом из обновления).
  2. После завершения объединения выполнить процедуру из «Способа 1», чтобы вернуть замок.

Рекомендованный алгоритм действий (Best Practice)

Чтобы избежать хаоса в замках и правилах поддержки, придерживайтесь следующего алгоритма при работе с изменениями:

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

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

← На главную