Обновление нетиповых (доработанных) конфигураций «1С:Предприятие» — это регулярная и зачастую весьма трудоемкая задача для разработчика. В процессе сопоставления объектов новой конфигурации поставщика и нашей рабочей базы мы регулярно сталкиваемся со странным поведением платформы: функции, которые вендор полностью удалил в новом релизе, упорно остаются в нашей конфигурации. Кроме того, процесс сравнения тяжелых конфигураций (таких как УправлениеТорговлей, ERP или КомплекснаяАвтоматизация) во встроенном инструменте может занимать долгие часы.
В этой статье мы подробно разберем, почему платформа «1С» оставляет старый код, как настроить внешнюю утилиту трехстороннего слияния KDiff3 для ускорения процесса в разы, и откуда берутся раздражающие «фантомные» изменения в управляемых формах.
Для начала проанализируем, почему при обновлении нетиповой конфигурации функции, удаленные вендором, не удаляются автоматически из нашего кода, а флажки объединения для них по умолчанию снимаются. Это поведение не является ошибкой платформы. Напротив, это фундаментальный механизм защиты авторского кода разработчика.
Когда мы запускаем процедуру обновления конфигурации, находящейся на поддержке с возможностью изменения, платформа выполняет так называемое трехстороннее сравнение (3-way merge). В этом процессе участвуют три конфигурации:
Рассмотрим ситуацию на уровне кода общего модуля. Предположим, в СКП была функция РассчитатьСкидку(). В нашей рабочей конфигурации (ОК) этот общий модуль был изменен (например, мы добавили туда совершенно другую функцию или переписали соседнюю процедуру). При подготовке очередного релиза вендор решил полностью удалить функцию РассчитатьСкидку() из НКП за ненадобностью или в рамках рефакторинга.
Платформа сопоставляет изменения и видит следующую картину:
Поскольку модуль изменен разработчиком, система не может гарантировать, что удаление функции РассчитатьСкидку() не нарушит работоспособность ваших кастомных алгоритмов. Возможно, вы используете эту функцию в своих доработках, или внутри нее написан ваш собственный уникальный код. Чтобы исключить риск безвозвратной потери ваших данных, платформа по умолчанию снимает флаг удаления для этой функции и оставляет ее в результирующем коде.
Если вы уверены, что удаленная функция больше не используется ни в типовом, ни в вашем доработанном коде, вам необходимо вручную установить режим объединения «Взять из новой конфигурации поставщика» (заместить объект) или удалить неактуальный код из модуля после завершения процесса объединения.
Встроенный в Конфигуратор инструмент сравнения и объединения текстовых модулей часто работает медленно на крупных конфигурациях. При сопоставлении модулей объемом в десятки тысяч строк стандартный механизм может зависать, потреблять избыточное количество оперативной памяти и вызывать аварийное завершение работы Конфигуратора. Решением этой проблемы является использование внешних специализированных утилит сравнения, среди которых наибольшую популярность завоевала программа KDiff3.
Рассмотрим подробнее преимущества использования KDiff3:
Для того чтобы интегрировать внешнюю утилиту в ваш рабочий процесс, выполним настройку по шагам:
KDiff3 на ваш рабочий компьютер.C:\Program Files\KDiff3\kdiff3.exe).После выполнения этих настроек при двойном клике по измененному текстовому модулю в окне сравнения и объединения конфигураций платформа будет автоматически запускать KDiff3, передавая туда исходные тексты для комфортного слияния.
Еще один частый повод для головной боли разработчиков при обновлении — это ситуации, когда управляемые формы отображаются в окне сравнения как «измененные», хотя никаких видимых доработок в них не производилось. Флажки объединения для таких форм автоматически сбрасываются платформой. При детальном анализе изменений через отчет сравнения выясняется, что все различия сводятся к изменению длинных строк с HTML/XML-тегами в заголовках, декорациях или подсказках реквизитов.
Выясним причину этого явления. Многие элементы интерфейса управляемых форм (особенно декорации с форматированным текстом и сложные подсказки) хранятся внутри файлов метаданных конфигурации в виде сериализованного XML/HTML-кода. В зависимости от версии платформы «1С» и операционной системы, генератор этого кода может вести себя по-разному:
color, style, face, а на другом — в порядке face, color, style. С точки зрения работы интерфейса разницы нет, но посимвольное сравнение файлов метаданных определяет это как критическое различие.Поскольку при обновлении платформа пытается сопоставить эти скрытые теги, она видит различие и предлагает разработчику принять решение, снимая флажок автоматического объединения. Принудительное объединение решает проблему лишь до первой перезаписи формы на другой версии платформы или другом компьютере разработчика, после чего скрытые теги снова перестраиваются, и при следующем обновлении форма вновь помечается как измененная.
Проанализируем методы борьбы с этой проблемой:
Подводя итог, выделим ключевые правила, которые помогут сделать процесс обновления нетиповых конфигураций быстрым и предсказуемым:
KDiff3. Это позволит вам сократить время рутинного сопоставления текстовых модулей в разы и убережет Конфигуратор от зависаний.