Обновление типовых конфигураций, в которых были изменены или дополнены ПланВидовХарактеристик (ПВХ), ПланСчетов (ПС) или справочники, является одной из самых частых «головных болей» разработчика. В процессе обновления платформа сталкивается с конфликтом: ваши изменения сталкиваются с изменениями поставщика, что приводит к появлению «пустышек» в оборотах, дублированию элементов с добавлением суффиксов (например, «1») и потере ссылочной целостности. Давайте разберем, как минимизировать риски и выполнить обновление изящно.
Предопределенный элемент — это объект, жестко завязанный на конфигурацию. Если разработчик в процессе обновления меняет метаданные (тип значения, имя или состав предопределенных данных), а у вас в базе уже есть записи, ссылающиеся на этот элемент, платформа часто не может сопоставить «старый» предопределенный элемент с «новым». В результате элемент превращается в обычный (не предопределенный), а при создании нового предопределенного элемента из релиза поставщика создается дубль.
Если вы не уверены в результате автоматического сравнения и объединения, рекомендуем воспользоваться методом «чистой площадки». Этот подход позволяет изолировать изменения и проконтролировать сопоставление элементов до того, как они попадут в структуру вашей рабочей базы.
При работе в окне «Сравнение и объединение» выбор приоритета определяет судьбу ваших данных. Рассмотрим два основных сценария:
Если вы работаете с типовыми объектами, в которые были добавлены элементы, рекомендуется выбирать приоритет конфигурации поставщика. Это гарантирует, что все изменения структуры (изменение типов субконто, новые предопределенные счета) будут приняты корректно. Однако помните, что после этого ваши изменения могут затереться. Чтобы этого избежать, сначала выгрузите свои элементы в XML или отдельный CF, а после обновления восстановите их.
Особое внимание уделите ПВХ, у которых меняется тип значения. Если поставщик изменил тип (например, с СправочникСсылка.Контрагенты на Характеристика.ВидыСубконто), а у вас в базе уже есть документы с данными старого типа, при обновлении вы рискуете получить ошибку записи или «пустые» обороты. В таких случаях:
Разберем алгоритм программной конвертации:
// Пример логики обработки перед обновлением
Для Каждого Элемент Из СписокСтарыхЭлементов Цикл
// Переносим ссылки на новые предопределенные элементы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ОперацияБух ИДЕ... "; // упрощенно
// Заменяем ссылки программно
КонецЦикла;
Чтобы обновление проходило максимально гладко в будущем, старайтесь придерживаться следующих правил:
Помните, что ключ к успеху — это всегда резервная копия базы данных и наличие CF-файла поставщика. Проанализировав ситуацию, вы всегда сможете принять решение: либо позволить системе пересоздать элементы, либо вручную сопоставить идентификаторы для сохранения целостности данных.