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

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

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

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

  1. Несоответствие идентификаторов: В правилах синхронизации (EnterpriseData или правила конвертации) сопоставление объектов может происходить по внутреннему идентификатору (GUID). Если в исходной и целевой базах идентификаторы предопределенных элементов различаются, создается новый элемент с признаком предопределенности.
  2. Отсутствие фильтрации служебных данных: В правилах регистрации объектов не установлены ограничения на выгрузку видов контактной информации по ссылкам из справочника партнеров.

Способ 1. Программное снятие признака предопределенности через ИмяПредопределенныхДанных

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

Рассмотрим, как снять признак предопределенности программно с помощью внешней обработки:


// Получаем объект справочника по ссылке на лишний элемент
ОбъектСправочника = СсылкаНаЭлемент.ПолучитьОбъект();

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

// Записываем изменения
ОбъектСправочника.Записать();

Разберем по шагам порядок действий после выполнения программного кода:

  1. Открываем форму элемента в режиме «1С:Предприятие» и убеждаемся, что у элемента исчез значок предопределенности (специальная точка в иконке).
  2. Помечаем элемент на удаление стандартным способом.
  3. Запускаем типовую процедуру Удаление помеченных объектов через раздел Администрирование — Обслуживание и завершаем удаление.

Для массовой обработки таких элементов можно также использовать типовую обработку Групповое изменение реквизитов. Для этого в дополнительных настройках обработки необходимо включить режим разработчика (редактирование служебных реквизитов), выбрать реквизит ИмяПредопределенныхДанных и установить для него пустое значение.

Способ 2. Безопасное объединение дублей через типовые механизмы БСП

Проанализируем альтернативный и наиболее безопасный вариант. Если перенесенные элементы уже успели записаться в документы или другие справочники, простое удаление может привести к появлению «битых» ссылок (объектов Объект не найден). В этом случае рекомендуется выполнить замену ссылок с помощью механизмов Библиотеки стандартных подсистем (БСП).

Выполним следующие действия:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных и откроем обработку Поиск и удаление дублей (либо внешнюю обработку Поиск и замена значений).
  2. Выберем справочник Виды контактной информации.
  3. В качестве оригинала (основного элемента) укажем системный предопределенный элемент текущей информационной базы.
  4. В качестве дубля укажем ошибочно перенесенный элемент.
  5. Нажмем кнопку Удалить дубли. Обработка автоматически заменит ссылки во всех связанных объектах на правильный элемент и очистит дубль.

Рекомендации по предотвращению ошибок синхронизации

Чтобы избежать повторного появления дублей при последующих сеансах обмена между «1С:Управление торговлей» и «1С:Бухгалтерия предприятия», настроим правила обмена:

  1. В правилах конвертации данных (КД) настроим сопоставление справочника Виды контактной информации не по уникальному идентификатору, а по свойству ИмяПредопределенныхДанных.
  2. В правилах выгрузки данных исключим регистрацию служебных справочников по ссылкам, если они уже предопределены в конфигурации-приемнике.
← На главную