Проблема обновления конфигураций «1С:Предприятие», в которых были внесены ручные изменения в предопределенные данные (счета, виды субконто, статьи затрат), является одной из самых трудоемких и рискованных задач для технического специалиста. Некорректное обновление в таких случаях приводит к «затиранию» ссылок, потере аналитики в проводках и возникновению дублей, которые невозможно удалить стандартными средствами. В этой статье мы подробно разберем, как правильно подойти к этой задаче, сохраняя целостность базы данных.
Для начала проанализируем внутренние механизмы платформы. В современных версиях «1С:Предприятие 8.3» связь между объектом в конфигураторе и записью в таблице базы данных (в режиме «Предприятие») осуществляется не только по имени, но и по Уникальному идентификатору (GUID). Если сторонний разработчик добавил предопределенный элемент вручную, он создал объект с определенным GUID. Когда приходит официальное обновление от вендора, в нем содержится элемент с тем же именем, но с совершенно другим идентификатором.
При стандартном объединении конфигураций система видит несоответствие GUID. В результате возможны две ситуации:
Рассмотрим подробнее способы решения этой проблемы, которые позволят нам успешно обновить базу без потери данных.
Этот метод считается наиболее безопасным с точки зрения сохранения ссылочной целостности. Разберем его по шагам:
Шаг 1: Подготовка в конфигураторе. Перед началом обновления найдем в объекте ПланВидовХарактеристик.ВидыСубконто те элементы, которые были добавлены вручную. Нам необходимо убрать у них имя предопределенного элемента. После сохранения изменений эти элементы станут обычными записями справочника в базе данных, но сохранят все свои ссылки в документах.
Шаг 2: Обновление конфигурации. Теперь выполним штатное сравнение и объединение с конфигурацией поставщика. Так как в нашей базе больше нет предопределенных элементов с конфликтующими именами, система создаст новые «чистые» элементы от вендора с официальными GUID.
Шаг 3: Перенос данных. После успешного обновления запустим базу в режиме «Предприятие». Теперь у нас есть два набора данных: старые (уже не предопределенные) субконто с накопленной историей и новые (предопределенные) пустые субконто. Воспользуемся стандартной обработкой ПоискИЗаменаЗначений или ПоискИЗаменаДублей. Нам нужно заменить все ссылки со «старых» элементов на «новые» официальные.
Шаг 4: Очистка. После замены ссылок старые записи можно пометить на удаление и окончательно стереть из базы. Таким образом, мы привели базу к типовому виду, сохранив всю историю учета.
Если мы хотим, чтобы система восприняла наш ручной элемент как «родной» элемент от 1С, мы можем попробовать синхронизировать их GUID. Это более сложный технический путь, требующий внимательности.
Выясним GUID нового элемента из конфигурации поставщика (это можно сделать, выгрузив конфигурацию в файлы XML). Затем, используя программную обработку, установим этот же идентификатор для нашего существующего элемента в базе данных. Посмотрим на пример логики, которую можно использовать для программной модификации (с осторожностью):
// Пример логики для понимания процесса (не для прямого копирования без адаптации)
НовыйЭлемент = ПланыВидовХарактеристик.ВидыСубконто.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(ПланыВидовХарактеристик.ВидыСубконто.ПолучитьСсылку(НовыйGUID));
НовыйЭлемент.Наименование = "НужноеНаименование";
НовыйЭлемент.Записать();
После того как идентификаторы совпадут, платформа при обновлении поймет, что это один и тот же объект, и просто обновит его свойства, не создавая дублей.
Многие специалисты допускают ошибку, просто устанавливая галочку на всем объекте ПланСчетов. Проанализируем ситуацию глубже. В окне сравнения необходимо развернуть ветку Предопределенные данные.
Рассмотрим важные нюансы настройки:
Плана видов характеристик (ПВХ) рекомендуется выставлять приоритет конфигурации поставщика. Однако, если у вас есть уникальные субконто, которых нет в типе, их нужно переносить вручную, добавляя в список предопределенных в новой конфигурации.Плане счетов особое внимание уделите колонке «Виды субконто». Если 1С изменила состав субконто (например, на счетах 60 или 62), а вы добавили туда свое, автоматическое объединение может сбить порядок (индексы). Если ваше субконто было вторым, а стало третьим, данные в регистре бухгалтерии могут «исчезнуть» из форм, так как платформа ищет их по конкретному номеру позиции (0, 1, 2).Выясним причину, по которой настройки иногда «слетают» сразу после запуска. У корневого узла конфигурации есть свойство Обновление предопределенных данных. Оно может принимать значения:
Если после обновления вы обнаружили, что на счете в конфигураторе субконто есть, а в режиме «Предприятие» в карточке счета пусто, воспользуйтесь следующими методами:
Записать() для объекта счета в обработке, чтобы таблицы субконто синхронизировались с метаданными.В завершение подчеркнем: никогда не проводите такие обновления на рабочей базе без предварительной тренировки на копии. Сложные изменения в Плане счетов и Видах субконто требуют обязательной проверки оборотно-сальдовой ведомости до и после процедуры обновления.