Имя: Пароль:
1C
 
как программно перенести элемент справочника в другую группу
0 econom
 
10.03.04
15:57
элемент справочника редактируется в диалоге (или новый). по реквизитам алгоритм модуля формы диалога "принимает решение" перенести его в другую группу. однако пока диалог не закрыт... ничего не получается.
Вопрос как бы какой нибудь процедурой (или кнопкой) закрыть форму и глобальной процедурой перекинуть ентот элемент в другую группу.
Пробовал вызывать глобальную процедуру, передавая в нее контекст и текущий элемент() со всеми его делами, там Форма.Закрыть(). потом пытаюсь поменять родителя, но... Понял что пока работает процедура, вызванная из кнопки формы, эта форма - не закрывается и:
ВыбрЗаказ.Родитель=НовыйРодитель;
{Глобальный модуль(24)}: Объект не может быть перепозиционирован!
как бы сначала закрыть а потом запустить глПроцедуру?
1 Рупор абсурда
 
10.03.04
16:07
1. Обработкой
2. Через глобольную ОбработкуОжидания()
3. ?
2 a_aladdin
 
10.03.04
16:21
Когда обсуждался вопрос об изменении времени проведенного док-та, всплыло решение как раз твоей проблемы (а конкретно, GrayT - мне прислал посмотреть)
Вод код в форме элемента справочника

Перем ПараметрыФормы;
Перем Вид;
//_____________________________________________________

Процедура КопироватьЭлемент(Источник,Приемник)
   Для нр=1 по Метаданные.Справочник(Вид).Реквизит() Цикл    
       ИД=Метаданные.Справочник(Вид).Реквизит(нр).Идентификатор;
       Приемник.УстановитьАтрибут(ИД,Источник.ПолучитьАтрибут(ИД));
   КонецЦикла;                                  
   Если Метаданные.Справочник(Вид).ДлинаКода>0 тогда
       Приемник.Код=Источник.Код;
   КонецЕсли;    
   Если Метаданные.Справочник(Вид).ДлинаНаименования>0 тогда
       Приемник.Наименование=Источник.Наименование;
   КонецЕсли;    
КонецПроцедуры //КопироватьЭлемент
//_____________________________________________________

Процедура ПриЗаписи()
   С=СоздатьОбъект("Справочник."+Вид);
   Если ПустоеЗначение(ПараметрыФормы)=1 Тогда
       Если Родитель<>ВыбРодитель Тогда
           С.Новый();  
           НеЗаписывать=1;
       КонецЕсли;
   Иначе
       С.НайтиЭлемент(ПараметрыФормы);
       НеЗаписывать=1;
   КонецЕсли;    
   Если 1=НеЗаписывать Тогда
       С.Родитель=ВыбРодитель;
       КопироватьЭлемент(Контекст,С);
       С.Записать();
       СтатусВозврата(0);    
       Форма.Закрыть(0);
       Возврат;
   КонецЕсли;
КонецПроцедуры //ПриЗаписи


Процедура ПриЗакрытии()                    
КонецПроцедуры //ПриЗакрытии


Процедура ПриОткрытии()    
   ПараметрыФормы=Форма.Параметр;
   Если Выбран()=1 Тогда
       Если ПустоеЗначение(ПараметрыФормы)=1 Тогда
           ОткрытьФорму("Элемент."+Вид,ТекущийЭлемент(),Родитель,,ИспользоватьВладельца());
           СтатусВозврата(0);    Возврат;
       КонецЕсли;
   ИначеЕсли ПустоеЗначение(ПараметрыФормы)=0 Тогда    
       КопироватьЭлемент(ПараметрыФормы,Контекст);
       Форма.Заголовок(Наименование,0);
   Иначе
       Форма.Заголовок("(Новый)",0);
   КонецЕсли;
   ВыбРодитель=Родитель;
КонецПроцедуры //ПриОткрытии
Вид=Вид();


Попробуй...
3 Рупор абсурда
 
10.03.04
16:27
(0) Лучше не пробуй!
(2) А если элемент не новый?
4 a_aladdin
 
10.03.04
16:28
(3) если не новый тоже сработает
5 Рупор абсурда
 
10.03.04
16:29
(4) А если на него ссылки в базе есть?
6 a_aladdin
 
10.03.04
16:31
(5) - а именно?
7 Рупор абсурда
 
10.03.04
16:34
(6) Что "а именно?"? А именно, сидит он в куче доков и других справочниках, например ...
К тому же у справочника этого могут быть подчиненные, у элемента этого могут быть периодические реквизиты и т.п. ...

(0) Не пробуй!
8 a_aladdin
 
10.03.04
16:49
значит - пускай для нового хотя бы использует.
изначально-то конечно задача стояла саму идею реализовать - изменение группы в форме, в глобальном-то смысле особо не думали...
9 Рупор абсурда
 
10.03.04
16:52
(8) Всё уже украдено до нас! (с)
10 Кое-кто@где-то.там
 
10.03.04
18:08
Хех, мой код ходит ...
(7) С подчиненными пофиг, с периодическими решаемо.
11 skunk
 
10.03.04
18:38
(11)не согласен с доводами Рупора, но вывод правильный...
там и еще кое-что есть...
12 romix
 
10.03.04
18:47
(0) Можно при закрытии запускать внешнюю компоненту или программу, которая изменит все как надо. Хотя овчинка имхо не стоит выделки - ну кому это нужно - в папку перекидывать... Сами же юзера и взвоют, что они создали, а элемент куда-то делся. Они еще раз создали - он опять уехал... Некоторые юзера отличаются завидным упорством...
13 Фокс
 
10.03.04
19:44
(10) Хитрые вы, собаки легавые, с подходцами вашими...
Ну ничего, ножички то у нас на всех найдутся ... Нахлебаетесь, как давеча на бульваре ...
14 skunk
 
10.03.04
19:49
ой... ни как у нас уголовный криминалитеты позавились... Львенок, что ли крышует...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший