• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема с циклом при смене родителя 1с77

  • Автор темы lira89
  • Дата начала
L

lira89

Здравствуйте. Есть обработка. Фрагмент кода для наглядности приведен ниже. Суть обработки - это изменение наименования папок 2 уровня и, если папка не удовлетворяет нужному условию, то мы переходим внутрь этой папки и изменяем родителя для каждого из элементов данной папки.
Код:
		СпрОбучение.ВыбратьЭлементы();
Пока СпрОбучение.ПолучитьЭлемент() = 1 Цикл
Если (СпрОбучение.ТекущийЭлемент().ЭтоГруппа()=1) Тогда
Если СпрОбучение.ТекущийЭлемент().УчГруппаГ.Выбран()=1 Тогда
СпрОбучение.ПорядокКодов();
СпрОбучение.Наименование = СокрЛП(СпрОбучение.УчГруппаГ);
СпрОбучение.Записать();
//ищем папку в данном справочнике, из которой надо элементы переместить в папку выбывшие
............
//Если нашли нужную папку, то переходим в нее 		
СпрОбучение.ИспользоватьРодителя(СпрОбучение.ТекущийЭлемент()); 
//меняем у всех элементов данной папки родителя
СпрОбучение.ВыбратьЭлементы();
Пока СпрОбучение.ПолучитьЭлемент()=1 Цикл
СпрОбучение.Родитель = ПапкаВыбывших;
СпрОбучение.УчГруппа="";
СпрОбучение.Записать();
КонецЦикла;
...............
КонецЕсли;
КонецЕсли;
КонецЦикла;
Столкнулась с такой проблемой: идет цикл по всем папкам справочника Обучение, как только надо изменить родителя, то первая папка проходит нормально и элемент перемещается в нужное место , а потом цикл заканчивается, не проходя по оставшимся папкам и ничего с ними не делая. Вопрос: почему вылетает цикл, ведь там еще куча папок? Я понимаю, что этим переносом элементов сильно изменяется структура справочника, но это же не повод, чтобы цикл вылетал, хотя....
 
K

kaa

Создайте две переменных справочника СпрОбучение и СпрОбучение1
 
H

Hryv

После того как вы сделали
СпрОбучение.ИспользоватьРодителя(СпрОбучение.ТекущийЭлемент());
СпрОбучение.ВыбратьЭлементы();

про первый цмкл можно забыть независимо от того, что делается внутри второго

но лично я не уверен, что в данном случае поможет совет kaa
Использовать СпрОбучение1 для второго цикла помогло бы, если бы там не происходила смена родителя

Можно сначала проверить и если не поможет, то я завел бы ТЗ и во втором цикле (выборке по СпрОбучение1) заполнял бы в одну колонку ТЗ элементы, а в другую их новых родителей

А после завершения перебора всех групп сделал бы цикл по строкам ТЗ и уже в нем перенес бы элементы в новые группы
 
L

lira89

Создайте две переменных справочника СпрОбучение и СпрОбучение1
Спасибо, вроде все работает как надо.
Можно сначала проверить и если не поможет, то я завел бы ТЗ и во втором цикле (выборке по СпрОбучение1) заполнял бы в одну колонку ТЗ элементы, а в другую их новых родителей
Спасибо, интересный вариант. Буду знать, если первый не будет помогать)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!