• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

lira89

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

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


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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab