При работе в среде 1С:Предприятие 8 начинающие и даже опытные разработчики часто задаются вопросом: зачем в конфигураторе существуют два, на первый взгляд, похожих механизма — «Конфигурация — Поддержка — Обновить конфигурацию» и «Конфигурация — Сравнить, объединить с конфигурацией из файла»? Казалось бы, в обоих случаях мы открываем окно сравнения и выбираем нужные объекты. Однако за внешней схожестью скрываются принципиально разные алгоритмы, игнорирование которых может привести к потере данных или «поломке» поддержки поставщика.
В этой статье мы подробно разберем, почему для типовых и нетиповых решений важно использовать именно штатный механизм обновления, и в каких исключительных случаях допустимо простое объединение.
Проанализируем главный технологический секрет штатного обновления. Когда мы запускаем Обновить конфигурацию, система выполняет не простое сравнение «один на один», а так называемое трехстороннее сравнение. В этом процессе участвуют три участника:
.cf или .cfu), на который вы хотите перейти.Благодаря наличию «старого поставщика» система понимает контекст изменений. Если объект был изменен в новом релизе, но не тронут вами, 1С обновит его автоматически. Если же объект изменили и вы, и поставщик, система пометит его статусом «Дважды измененный». При обычном же Сравнении и объединении система видит только два состояния и не «знает», кто именно внес правки, что заставляет разработчика вручную анализировать тысячи строк кода, которые на самом деле могли бы обновиться автоматически.
Рассмотрим ситуацию с точки зрения обслуживания системы. Когда мы используем штатный режим обновления, платформа 1С автоматически пересчитывает статусы поддержки для каждого объекта метаданных. После завершения процедуры версия поставщика в вашей базе обновляется на актуальную.
Если же мы решим пойти по пути «Сравнения и объединения», информация о версии поставщика в метаданных останется прежней. Вы можете перенести новый код модулей и новые реквизиты, но для системы вы все еще будете находиться на старом релизе. Это создаст огромные проблемы при следующем обновлении: база «поставщика» внутри вашей конфигурации будет предлагать сравнение со старым кодом, порождая массу ложных различий. Чтобы исправить это, придется выполнять процедуру Постановка на поддержку, что требует гораздо больше времени и концентрации.
Выясним техническую разницу в форматах файлов. Фирма 1С выпускает обновления в двух форматах: полном (.cf) и промежуточном (.cfu).
Файлы .cfu (Configuration Update) содержат только «дельту» — изменения между конкретными версиями. Они значительно меньше по объему. Механизм Сравнить и объединить принципиально не умеет работать с файлами .cfu. Ему требуется только полный .cf. Если у вас в распоряжении только файл обновления, вы просто не сможете применить его через обычное объединение без предварительной сборки полного файла, что добавляет лишние шаги в работу программиста.
Это критически важный момент, который часто упускают. Разберем, что происходит, когда поставщик в новом релизе решает удалить какой-то объект (например, устаревший регистр сведений или общий модуль).
При штатном обновлении система обнаружит отсутствие объекта в новом файле и предложит вам либо удалить его из вашей конфигурации, либо снять с поддержки. В случае использования Сравнения и объединения объекты, которых нет в файле-источнике, просто игнорируются. Они остаются в вашей базе навсегда в виде «мертвого кода» или неиспользуемых таблиц. Со временем такая база превращается в «свалку», что может привести к конфликтам имен при добавлении новых объектов поставщиком в будущем.
Проанализируем процесс обновления в режиме «1С:Предприятие». После того как мы обновили конфигурацию в конфигураторе (нажали F7), при первом запуске программы стартуют процедуры обновления информационной базы. Эти процедуры (написанные на языке 1С) ориентируются на номер версии конфигурации поставщика.
Если мы обновили код через Сравнение и объединение, но не изменили версию конфигурации поставщика корректно, важные обработчики данных могут просто не запуститься. Например, если в новом релизе данные из одного реквизита должны перекочевать в другой с изменением формата, а обработчик не отработал — вы получите пустые поля или ошибки в отчетах. Штатное обновление гарантирует, что ВерсияКонфигурации будет изменена правильно, и система поймет, какие скрипты реструктуризации данных нужно запустить.
Посмотрим на интерфейс окна объединения. В режиме Обновить конфигурацию нам доступны уникальные фильтры:
В обычном сравнении таких интеллектуальных фильтров нет, и вам придется просматривать весь список объектов вручную, что в крупных конфигурациях типа ERP или Бухгалтерия предприятия превращается в непосильную задачу.
Несмотря на все вышесказанное, режим объединения — это мощный инструмент, но для других целей. Рассмотрим основные сценарии:
Всегда используйте Конфигурация — Поддержка — Обновить конфигурацию для перехода на новые релизы от поставщика. Это единственный способ сохранить целостность системы поддержки, гарантировать выполнение обработчиков обновления данных в режиме «Предприятие» и обеспечить корректную работу трехстороннего сравнения. Обычное объединение оставьте для разовых задач по переносу кода между различными информационными базами.