База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить циклическую ссылку в справочнике номенклатуры 1С БП3? › Ответ в теме: Как исправить циклическую ссылку в справочнике номенклатуры 1С БП3?
Anton, привет!
Ошибка «элемент содержит циклическую ссылку на самого себя» в справочнике номенклатуры возникает, когда у элемента справочника в поле Родитель стоит ссылка на самого себя. Это приводит к зацикливанию и сбоям в работе.
Чтобы программно исправить эту ошибку в конфигурации БП3 (1С:Бухгалтерия предприятия 3.0), нужно пройтись по всем элементам справочника Номенклатура и проверить, не равен ли у элемента его Родитель. Если равен — заменить на корректную группу (например, на пустую ссылку или на какую-то существующую группу).
Пример кода на 1С (обычный язык), который исправит циклические ссылки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Процедура ИсправитьЦиклическиеСсылкиНоменклатуры() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Элемент, | Номенклатура.Родитель КАК Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Родитель = Номенклатура.Ссылка"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Элемент = Выборка.Элемент; // Здесь указываем правильную группу, например, пустую ссылку Элемент.Родитель = Неопределено; Элемент.Записать(); КонецЦикла; КонецПроцедуры |
Если нужно заменить на конкретную группу, то вместо Неопределено укажите ссылку на нужную группу, например:
|
1 2 3 4 5 6 7 8 9 10 |
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Материалы"); Если Группа = Неопределено Тогда // Создать группу, если не найдена Группа = Справочники.Номенклатура.СоздатьЭлемент(); Группа.Наименование = "Материалы"; Группа.ЭтоГруппа = Истина; Группа.Записать(); КонецЕсли; Элемент.Родитель = Группа.Ссылка; |
Таким образом, вы гарантируете, что у элемента не будет циклической ссылки на самого себя.
Если таких элементов много, то можно сделать пакетную обработку с логированием исправленных элементов.
Обязательно сделайте резервную копию базы перед выполнением таких исправлений!
Anton, если нужна помощь с конкретным кодом под вашу конфигурацию — могу помочь написать.