Имя: Пароль:
1C
1C 7.7
v7: Отлавливать изменения родителя в справочнике
0 Hans
 
11.10.13
10:57
Как?

в процедуре ПриПереносеЭлементаВДругуюГруппу у элемента еще родитель старый.

В этой процедуре перезаписать заранее родителя насколько я понял нельзя.

После смены родителя должен смениться другой реквизит.
1 viktor_vv
 
11.10.13
11:00
Там же в параметрах есть группа, куда переносится.
2 viktor_vv
 
11.10.13
11:02
(1)+ Хотя таки да, записать в этой процедуре не получится. разве что через глобальную переменную извратится.
3 Hans
 
11.10.13
11:05
Дело в том, что после смены родителя нужно выстроить всю новую иерархию до корня и решить каким будет реквилит. А так как родитель еще старый, то не видно как без извратов  выстроить всю иерархию для элемента.
4 viktor_vv
 
11.10.13
11:07
(3) Может все-таки поможет

ПриПереносеЭлементаВДругуюГруппу(<Элемент>,<Группа>)

Группа - группа в которую переносится элемент.
5 viktor_vv
 
11.10.13
11:18
(4)+ Вот только записать новое значение реквизита в этой процедуре не получится, запись заблокирована.
6 viktor_vv
 
11.10.13
11:30
А, вот такой вариант работает.

Процедура ПриПереносеЭлементаВДругуюГруппу(Эл,Группа)
    ласСпрТМЦ = СоздатьОбъект("Справочник.ТМЦ");
    ласСпрТМЦ.НайтиЭлемент(Эл);
    ласСпрТМЦ.Артикул = "111";
    ласСпрТМЦ.Родитель = Группа ;
    ласСпрТМЦ.Записать();
    СтатусВозврата(0);
    Возврат ;
КонецПроцедуры
7 Ёпрст
 
гуру
11.10.13
11:40
П...ц
8 Ёпрст
 
гуру
11.10.13
11:46
Процедура ПриПереносеЭлементаВДругуюГруппу(Эл,Группа)
   Артикул = "111";
    Наименование = "Вася";
КонецПроцедуры
9 Ёпрст
 
гуру
11.10.13
11:46
Наслаждайся
10 viktor_vv
 
11.10.13
11:53
(8) От жеж :), чувствовал где-то подвох.
Попробовал через

Эл.Арткул = "111", не ругнулось, но и не записало значение.
Надо проще быть :).
11 Hans
 
11.10.13
13:00
(8) а родителя все таки так нельзя сменить.
12 viktor_vv
 
11.10.13
13:04
(11) Зато можно в (6) :).
Но в принципе в (8) родитель и так новый запишется, или тебе надо при попытке переноса в какую-то группу, записать его при этом в третью группу, а не в ту, куда собирались перенести?
13 viktor_vv
 
11.10.13
13:05
(12)+ Хотя я не пробовал записать родителя, отличного от того, куда собирались перенести, но думаю запишется.
14 Калиостро
 
11.10.13
13:06
(8) А если на вопрос "Перенести в группу ...?" пользователь ответит "Нет"?
15 viktor_vv
 
11.10.13
13:12
(14) Новое значение реквизита не запишется. Там запись элемента производится, если ответил "Да".
16 viktor_vv
 
11.10.13
13:16
(15)+ И (6) тоже не запишет. Там вопрос задается, до начала выполнения кода из
Процедура ПриПереносеЭлементаВДругуюГруппу(Эл,Группа)

и при ответе "Нет" туда даже не заходит.
17 Hans
 
11.10.13
13:47
(12)  есть процедура которая выстраивает текущую иерархию элемента, и заменяет на основе этого реквизит. в нее передается только один параметр -  номенклатура. желательно без усложнений алгоритма делать все это и при смене родителя и при смене структуры всей иерархии.
18 1Сергей
 
11.10.13
13:51
(11) при смене родителя сменить ещё раз родителя?

знатный изврат
19 viktor_vv
 
11.10.13
13:52
(17) Ну так тогда сделай.

Процедура ПриПереносеЭлементаВДругуюГруппу(Эл,Группа)
    ласСпрТМЦ = СоздатьОбъект("Справочник.ТМЦ");
    ласСпрТМЦ.НайтиЭлемент(Эл);
    //ласСпрТМЦ.Артикул = "111";
    ласСпрТМЦ.Родитель = Группа ;
    ласСпрТМЦ.Записать();
    // Тут уже у элемента будет новый родитель
    ПроцедураСменыТекущейИерерархии(ласСпрТМЦ.ТекущийЭлемент());
    СтатусВозврата(0);
    Возврат ;
КонецПроцедуры
20 viktor_vv
 
11.10.13
13:53
(18) Я так понял, ему надо в собственную процедуру смены иерархии передать элемент уже с новым родителем.
21 Hans
 
11.10.13
13:59
(18) Ну т.е если у определенной папки меняется родитель но нужно менять реквизит у всей нижележащей ветке.
22 ADirks
 
11.10.13
14:31
я бы триггер уже зафигачил ...
23 Hans
 
11.10.13
14:48
(22) какой триггер?
24 viktor_vv
 
11.10.13
14:50
(23) Так (19) тоже не подходит, вроде так, как ты хотел.
25 Ёпрст
 
гуру
11.10.13
14:51
(21) надо что-то в консерватории поправить..
26 Hans
 
11.10.13
14:53
(24) Почему не подходит? Сделаем там разбивку на группу и элемент, если группа то выбираем все элементы ниже.
27 viktor_vv
 
11.10.13
15:03
(26) Это я знак вопроса в конце забыл поставить.
28 Hans
 
11.10.13
15:28
(27) Отлично все работает. Спасибо.