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