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

lira89

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

vbs

Well-Known Member
18.02.2007
1 708
3
Санкт-Петербург
#2
Попробуй так :

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

evgenyatam

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


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

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
lira89, хоть понял в чем ошибка была-то?