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

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

    Скидки до 10%

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

Перенос из одной папки в другую

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

lira89

1с v77. Есть справочник с тремя уровнями. Есть элемент, который записан в папки Факультет-> Группа. Надо с помощью документа перевести запись элемента в другую папку Академический. Есть код:
Код:
Процедура ОбработкаПроведения()
СпрОбучение = СоздатьОбъект("Справочник.Обучение");
Если СпрОбучение.НайтиЭлемент(Студент)=1 Тогда
Эл= СпрОбучение.ТекущийЭлемент();
Группа = Эл.Родитель;							 //это надо чтобы потом восстановить запись
Группа1 = Эл.Родитель.Родитель;			  //там, где она и была
Если СпрОбучение.НайтиПоНаименованию("Академический")=1 Тогда
Папка = СпрОбучение.ТекущийЭлемент(); // спозиционировались на нужной папке
СпрОбучение.Родитель = Папка;			  //назначили родителем папку Академический
СпрОбучение.Записать();
Сообщить("Студент """+Эл+""" успешно переведен в академический отпуск.", "i");
Иначе
Сообщить("Папка с названием Академический не найдена! Студент не может быть отправлен в академический отпуск.","!!");
СтатусВозврата(0);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Проблема возникла в том, что запись не перемещается, а остается там где и была и почему-то ИСЧЕЗАЕТ папка Академический (может поэтому и запись не перемещается). Подскажите, что может такое быть в данном коде неправильное или что нужно исправить, чтобы не исчезала папка?
 
V

vbs

Попробуй так :

Процедура ОбработкаПроведения()
СпрОбучение = СоздатьОбъект("Справочник.Обучение");
СпрОбучение2 = СоздатьОбъект("Справочник.Обучение");
Если СпрОбучение2.НайтиПоНаименованию("Академический")=1 Тогда
Папка = СпрОбучение2.ТекущийЭлемент(); // спозиционировались на нужной папке
КонецЕсли;
Если СпрОбучение.НайтиЭлемент(Студент)=1 Тогда
Эл= СпрОбучение.ТекущийЭлемент();
Группа = Эл.Родитель; //это надо чтобы потом восстановить запись
Группа1 = Эл.Родитель.Родитель; //там, где она и была
СпрОбучение.Родитель = Папка; //назначили родителем папку Академический
СпрОбучение.Записать();
Сообщить("Студент """+Эл+""" успешно переведен в академический отпуск.", "i");
Иначе
Сообщить("Папка с названием Академический не найдена! Студент не может быть отправлен в академический отпуск.","!!");
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры
 
E

evgenyatam

или так:
Процедура ОбработкаПроведения()
СпрОбучение = СоздатьОбъект("Справочник.Обучение");
Если СпрОбучение.НайтиЭлемент(Студент)=1 Тогда
Эл= СпрОбучение.ТекущийЭлемент();
Группа = Эл.Родитель; //это надо чтобы потом восстановить запись
Группа1 = Эл.Родитель.Родитель; //там, где она и была
Если СпрОбучение.НайтиПоНаименованию("Академический")=1 Тогда
Папка = СпрОбучение.ТекущийЭлемент(); // спозиционировались на нужной папке
спрОбучение.НайтиЭлемент(Эл); // поиск портит позицию
СпрОбучение.Родитель = Папка; //назначили родителем папку Академический
СпрОбучение.Записать();
Сообщить("Студент """+Эл+""" успешно переведен в академический отпуск.", "i");
Иначе
Сообщить("Папка с названием Академический не найдена! Студент не может быть отправлен в академический отпуск.","!!");
СтатусВозврата(0);
КонецЕсли;
КонецЕсли;
КонецПроцедуры


вобщем надо или не портить позицию или ее восстанавливать. через переменную Эл в справочник писать нельзя так как результат функции ТекущийЭлемент() - ссылка, недоступная для записи.
 
K

KiR

lira89, хоть понял в чем ошибка была-то?
 
Мы в соцсетях:

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