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