Как обновить 1С:Бухгалтерию, если изменен состав предопределенных счетов и субконто?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Проблема обновления конфигураций «1С:Предприятие», в которых были внесены ручные изменения в предопределенные данные (счета, виды субконто, статьи затрат), является одной из самых трудоемких и рискованных задач для технического специалиста. Некорректное обновление в таких случаях приводит к «затиранию» ссылок, потере аналитики в проводках и возникновению дублей, которые невозможно удалить стандартными средствами. В этой статье мы подробно разберем, как правильно подойти к этой задаче, сохраняя целостность базы данных.

Почему происходит потеря данных при обновлении?

Для начала проанализируем внутренние механизмы платформы. В современных версиях «1С:Предприятие 8.3» связь между объектом в конфигураторе и записью в таблице базы данных (в режиме «Предприятие») осуществляется не только по имени, но и по Уникальному идентификатору (GUID). Если сторонний разработчик добавил предопределенный элемент вручную, он создал объект с определенным GUID. Когда приходит официальное обновление от вендора, в нем содержится элемент с тем же именем, но с совершенно другим идентификатором.

При стандартном объединении конфигураций система видит несоответствие GUID. В результате возможны две ситуации:

  1. Замещение: Старый (пользовательский) элемент помечается как удаленный, а новый (от вендора) создается «с нуля». Все документы и проводки, ссылавшиеся на старый GUID, теряют связь и показывают «Объект не найден».
  2. Дублирование: В базе появляются два предопределенных элемента с одинаковым именем. Это вносит хаос в работу бухгалтерии и мешает формированию отчетности.

Рассмотрим подробнее способы решения этой проблемы, которые позволят нам успешно обновить базу без потери данных.

Способ 1: Снятие признака предопределенности (Метод «Слияния»)

Этот метод считается наиболее безопасным с точки зрения сохранения ссылочной целостности. Разберем его по шагам:

Шаг 1: Подготовка в конфигураторе. Перед началом обновления найдем в объекте ПланВидовХарактеристик.ВидыСубконто те элементы, которые были добавлены вручную. Нам необходимо убрать у них имя предопределенного элемента. После сохранения изменений эти элементы станут обычными записями справочника в базе данных, но сохранят все свои ссылки в документах.

Шаг 2: Обновление конфигурации. Теперь выполним штатное сравнение и объединение с конфигурацией поставщика. Так как в нашей базе больше нет предопределенных элементов с конфликтующими именами, система создаст новые «чистые» элементы от вендора с официальными GUID.

Шаг 3: Перенос данных. После успешного обновления запустим базу в режиме «Предприятие». Теперь у нас есть два набора данных: старые (уже не предопределенные) субконто с накопленной историей и новые (предопределенные) пустые субконто. Воспользуемся стандартной обработкой ПоискИЗаменаЗначений или ПоискИЗаменаДублей. Нам нужно заменить все ссылки со «старых» элементов на «новые» официальные.

Шаг 4: Очистка. После замены ссылок старые записи можно пометить на удаление и окончательно стереть из базы. Таким образом, мы привели базу к типовому виду, сохранив всю историю учета.

Способ 2: Сопоставление через уникальные идентификаторы (GUID)

Если мы хотим, чтобы система восприняла наш ручной элемент как «родной» элемент от 1С, мы можем попробовать синхронизировать их GUID. Это более сложный технический путь, требующий внимательности.

Выясним GUID нового элемента из конфигурации поставщика (это можно сделать, выгрузив конфигурацию в файлы XML). Затем, используя программную обработку, установим этот же идентификатор для нашего существующего элемента в базе данных. Посмотрим на пример логики, которую можно использовать для программной модификации (с осторожностью):


// Пример логики для понимания процесса (не для прямого копирования без адаптации)
НовыйЭлемент = ПланыВидовХарактеристик.ВидыСубконто.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(ПланыВидовХарактеристик.ВидыСубконто.ПолучитьСсылку(НовыйGUID));
НовыйЭлемент.Наименование = "НужноеНаименование";
НовыйЭлемент.Записать();

После того как идентификаторы совпадут, платформа при обновлении поймет, что это один и тот же объект, и просто обновит его свойства, не создавая дублей.

Способ 3: Правильная настройка окна «Сравнение и объединение»

Многие специалисты допускают ошибку, просто устанавливая галочку на всем объекте ПланСчетов. Проанализируем ситуацию глубже. В окне сравнения необходимо развернуть ветку Предопределенные данные.

Рассмотрим важные нюансы настройки:

Работа со свойством «Обновление предопределенных данных»

Выясним причину, по которой настройки иногда «слетают» сразу после запуска. У корневого узла конфигурации есть свойство Обновление предопределенных данных. Оно может принимать значения:

  1. Авто: Платформа сама решает, как объединять. Это часто приводит к конфликтам.
  2. Обновлять автоматически: Система принудительно заменяет данные в базе данными из конфигуратора. Именно этот режим «затирает» ручные правки.
  3. Не обновлять автоматически: Этот режим позволяет разработчику программно управлять процессом. Перед сложным обновлением рекомендуется перевести это свойство в данный режим, чтобы предотвратить бесконтрольное изменение таблиц до завершения ручных манипуляций.

Рекомендации по восстановлению состава субконто

Если после обновления вы обнаружили, что на счете в конфигураторе субконто есть, а в режиме «Предприятие» в карточке счета пусто, воспользуйтесь следующими методами:

В завершение подчеркнем: никогда не проводите такие обновления на рабочей базе без предварительной тренировки на копии. Сложные изменения в Плане счетов и Видах субконто требуют обязательной проверки оборотно-сальдовой ведомости до и после процедуры обновления.

← На главную