При сопровождении и обновлении нетиповых или доработанных баз 1С программисты нередко сталкиваются с ситуацией, когда весь программный код модулей оказывается переполнен служебными блоками комментариев вида //{{MRG[ <-> ]. Подобные артефакты могут занимать десятки тысяч строк, дублируя типовой код и скрывая реальные доработки конфигурации. Разберем по шагам, откуда берутся эти метки, как они влияют на процесс поддержки и какими способами можно быстро очистить конфигурацию.
Выясним причину возникновения подобных комментариев. Блоки //{{MRG формируются встроенным механизмом платформы 1С при выполнении процедуры объединения конфигураций, если для модулей был выбран режим Объединять с приоритетом основной конфигурации или Объединять с приоритетом конфигурации поставщика.
Посмотрим на пример такого блока:
//{{MRG[ <-> ]
// Если (ПустоеЗначение(ОсновнаяЕдиница) = 1) ИЛИ (ОсновнаяЕдиница = БазоваяЕдиница) Тогда
// // обновим основную единицу
//}}MRG[ <-> ]
Стрелки внутри меток указывают на источник различий в объединяемых версиях:
//{{MRG[ <- ] — фрагмент из основной (текущей) конфигурации базы данных;//{{MRG[ -> ] — фрагмент из объединяемой конфигурации (файла обновления поставщика);//{{MRG[ <-> ] — фрагмент, содержащий конфликты или изменения в обоих сравниваемых источниках.Платформа формирует эти блоки как временную разметку, чтобы программист мог вручную сопоставить строки кода после автоматического объединения. Однако если разработчики регулярно накатывают обновления через объединение и не вычищают отработавшие блоки, конфигурация обрастает слоями дублирующего закомментированного кода.
Проанализируем ситуацию, возникающую при следующем обновлении такой базы. Платформа 1С сравнивает модули посимвольно. Наличие даже одной закомментированной служебной строки приводит к тому, что модуль считается измененным относительно конфигурации поставщика. В результате:
Рассмотрим подробнее способ быстрой автоматической очистки кода для платформы 1С 8.3 через работу с исходными текстами конфигурации. Разберем порядок действий:
.bsl и удаляет многострочные блоки от открывающего тега //{{MRG до закрывающего //}}MRG вместе с их содержимым.Если реальных доработок в конфигурации немного, наиболее надежным способом является восстановление типового кода из эталонного файла .cf того же релиза, который сейчас установлен в базе. Разберем по шагам этот алгоритм:
.cf) в точности того же релиза, что и текущая рабочая база..cf через меню Конфигурация → Сравнить, объединить с конфигурацией из файла.//{{MRG и дублирующих строк, устанавливаем режим объединения Взять из файла (замещение). Это мгновенно возвращает модуль к исходному чистому состоянию поставщика.Когда конфигурация содержит большой объем сложных доработок, рекомендуется использовать внешние инструменты слияния (например, KDiff3, Beyond Compare или WinMerge):
//{{MRG.Чтобы избежать повторного появления мусорных комментариев при последующих обновлениях, придерживаемся следующих правил разработки:
//{{MRG, оставляя только итоговый рабочий вариант алгоритма.Cfe), подписки на события или отдельные нетиповые общие модули, оставляя типовой код поставщика нетронутым.