Как удалить задвоенные предопределенные счета из плана счетов в 1С

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

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

Причины возникновения дублей предопределенных элементов

Выясним причину рассинхронизации данных между конфигуратором и информационной базой. Чаще всего появление двойников связано со следующими факторами:

  1. Некорректное обновление или некорректная динамическая загрузка: При сбоях во время обновления или при повторном пересоздании счета в конфигураторе платформой генерируется новый внутренний идентификатор (GUID). Старый счет в базе данных теряет актуальную связь с метаданными, но остается помеченным как предопределенный.
  2. Загрузка данных через обмены или РИБ: Если счета выгружались и загружались в режиме ОбменДанными.Загрузка = Истина, платформа не выполняет жесткую проверку уникальности предопределенных элементов. В результате счет записывается с другим GUID как второй элемент.
  3. Изменение структуры плана счетов разработчиком поставщика: При реструктуризации счетов в новых релизах (например, при превращении обычного счета в группу счетов) может произойти расхождение привязок в существующей базе данных.

Определение реального счета и принципы привязки

В платформе 1С:Предприятие 8.3 связь элементов плана счетов в информационной базе с элементами конфигуратора осуществляется через специальный реквизит ИмяПредопределенныхДанных. Проанализируем, как определить, какой именно счет является настоящим:

  1. Настоящий счет содержит в реквизите ИмяПредопределенныхДанных точное имя элемента, заданное в конфигураторе.
  2. Дополнительно можно сопоставить уникальный идентификатор (GUID) элемента из типовой конфигурации с элементами в информационной базе. Элемент, GUID которого совпадает с базовым реквизитом конфигурации, является оригинальным.
  3. Если очистить реквизит ИмяПредопределенныхДанных у дубликата, он станет обычным (непредопределенным) элементом информационной базы, что позволит свободно выполнить замену ссылок и пометить его на удаление.

Способ 1. Запуск тестирования и исправления информационной базы

Рассмотреть решение проблемы стоит с наиболее безопасного и штатного механизма платформы — процедуры тестирования и исправления ИБ.

  1. Создадим резервную копию информационной базы.
  2. Откроем режим Администрирование > Тестирование и исправление... в Конфигураторе.
  3. Установим флаг Проверка логической целостности информационной базы.
  4. Запустим процедуру. В процессе проверки платформа 1С находит неконсистентные предопределенные данные (дубликаты PredefinedID), автоматически снимает признак предопределенности у некорректного элемента и восстанавливает правильную привязку.

Способ 2. Программное снятие привязки и перенос ссылок

Если штатное тестирование не дало результата, выполним отвязку дубликата от конфигуратора вручную с помощью встроенного языка 1С.

Рассмотрим порядок действий по шагам:

  1. Определим ложный элемент и снимем с него признак предопределенности путем очистки строкового свойства ИмяПредопределенныхДанных.
  2. У счета в плане счетов также необходимо отключить признак предопределенности для всех строк табличной части ВидыСубконто, иначе платформа заблокирует запись элемента.

Пример кода для программного снятия предопределенности у дубликата счета:


СчетОбъект = ДубликатСчета.ПолучитьОбъект();

// Очищаем привязку к имени предопределенного элемента конфигурации
СчетОбъект.ИмяПредопределенныхДанных = "";

// Отключаем признак предопределенности у видов субконто
Для Каждого ТекСтрока Из СчетОбъект.ВидыСубконто Цикл
    ТекСтрока.Предопределенное = Ложь;
КонецЦикла;

СчетОбъект.Записать();

После выполнения данного кода счет-дубликат превращается в рядовой элемент плана счетов. Разберем дальнейшие шаги по очистке базы:

  1. Воспользуемся стандартной обработкой Поиск и удаление дублей (или универсальной обработкой Поиск и замена значений).
  2. Выберем в качестве дубля отвязанный счет, а в качестве эталонного элемента — верный предопределенный счет.
  3. Выполним замену ссылок во всех проводках, регистрах и документах.
  4. Удалим оставшийся ложный счет через стандартное удаление помеченных объектов.

Способ 3. Принудительное обновление предопределенных данных

Для принудительной синхронизации объектов информационной базы с метаданными конфигуратора в платформе предусмотрен вызов метода глобального контекста. Разберем пример его вызова через внешнюю обработку или консоль кода:

ПланыСчетов.Хозрасчетный.ОбновитьПредопределенныеДанные();

Данный метод сопоставляет имена элементов конфигурации с реквизитами информационной базы и восстанавливает структуру предопределенных элементов в плане счетов Хозрасчетный (или любом другом целевом плане счетов).

Важное примечание: Если конфигурация работает в режиме совместимости с версией платформы 8.2, прямое изменение реквизита ИмяПредопределенныхДанных через встроенный язык может быть недоступно. В таком случае рекомендуется сбросить режим совместимости на время выполнения процедуры или воспользоваться процедурой «Тестирование и исправление ИБ».

← На главную