Имя: Пароль:
1C
 
Мастер класс - копирование элементов вместе с подчиненными. Слабо?
Ø (Asmody 13.10.2008 16:24)
0 Гений 1С
 
гуру
10.10.08
15:49
Короче, господа, в восьмере (8.1) нужно чтобы когда пользователь создавал элемент справочника А копированием (F9), при этом копировались все подчиненные элементы.
Я тут нашел красивый способ, догадайтесь, какой. Ваще, ваши идеи, а потом я выложу свой. ;-)
Хотя может быть вы и знаете, как это сделать.
1 Живой Ископаемый
 
10.10.08
15:50
Опять выгружать в ХМЛ? :)
2 Гений 1С
 
гуру
10.10.08
15:51
(1) нет
3 TM
 
10.10.08
15:54
К нам недавно приходил
......................
Неожиданно для нас
Он устроил мастер класс.

Звдание: Впишите недостающую строку.
4 KAO111
 
10.10.08
15:56
Если ничего не хочется делать - можно взять эту функцию из конвертации данных
5 ДенисЧ
 
10.10.08
15:56
(3) "мастер-гений-один-асс" ?
6 Господин ПЖ
 
10.10.08
15:57
(3) это явно интереснее очередного задротства фиксина...

...
гениальный бабофил
...
7 mikecool
 
10.10.08
15:58
зачем? (с)
тут юзеры по одному элементу копируют и такого воротят, что же начнется когда папками копировать будут?
8 Гений 1С
 
гуру
10.10.08
15:59
(4) Смысл этой функции рассскажи?
вот первый идиотский вариант:
записать элемент в процедуре ПриКопировании и скопировать подчиненные элементы. Работает криво.
вот второй идиотский вариант:
создать подчиненные элементы, используя сцылку нового. Не работает вообще.
9 Salvador Limones
 
10.10.08
15:59
(3)
...
некропедозоофил
...
10 Mikeware
 
10.10.08
15:59
(6) может, "...гениТальный..."?
11 Господин ПЖ
 
10.10.08
16:05
походу Гений открыл для себя подписку...
12 Гений 1С
 
гуру
10.10.08
16:06
(11) расскажи, как ты сделаешь подпиской, умник
13 KAO111
 
10.10.08
16:09
(8) Конфигурация КД сделана на подчиненных справочниках, есть возможность копировать правила с подчиненными и заменять влядельца (есть правила для одной конвертации - такие же будут для другой)

// Копирует элемент справочника вместе с подчиненными элементами.
//
// Параметры:
//  Ссылка                  - Ссылка на копируемый элемент справочника.
//  УстанавливаемыйРодитель - Ссылка на устанавливаемого родителя скопированного элемента.
//  УстанавливаемыйВладелец - Ссылка на устанавливаемого владельца скопированного элемента.
//
// Возвращаемое значение:
//  Новый скопированный элемент.
//
Функция СкопироватьСПодчиненными(Ссылка, УстанавливаемыйРодитель = "", УстанавливаемыйВладелец = "", Уровень = 0, СписокОбъектов = Неопределено, НоваяКонвертация = Неопределено) Экспорт
14 Александр_
Тверь
 
10.10.08
16:09
что вы на человека наезжаете? Гений хочет с общественностью поделиться опытом и знаниями, а вы все опохабите.
15 bahmet
 
10.10.08
16:10
е=а ?
16 Господин ПЖ
 
10.10.08
16:10
ну тогда пускай делится... или статью пишет
17 Александр_
Тверь
 
10.10.08
16:13
(16) А как же самолюбие? Авторитет в глазах других? %)
18 Гений 1С
 
гуру
10.10.08
16:13
(13) по кнопочке Ф9! При чем здесь конвертация?
(16) я хочу проверить, есть ли тут не дятлы?
19 Господин ПЖ
 
10.10.08
16:14
(17) жалко на мисте плюсиков нет... на инфостарте он их любит клянчить...
20 Гений 1С
 
гуру
10.10.08
16:14
(13) как скопировать с подчиненными я знаю, там нюанс в другом - когда вызывается ПриКопировании, ссылки еще нет.
21 mikecool
 
10.10.08
16:15
(18) как сказал в (11) - подписка на событие ПриКопировании
22 Живой Ископаемый
 
10.10.08
16:16
что-то у меня никаких идей...
скажем чтобы просто в справочнике можно было интерактивно скопировать несколько элементов а не один, то можно для списка поставить множественное выделение, ну и само собой обработку...
А чтобы скопировать с подчиненными справочниками? Ну просто аккуратно перебрать каждый и создать новые подчинив их скопированному
23 Kraft
 
10.10.08
16:17
(0) Легко, но в лом писать, ибо пятницо и пиво
24 KAO111
 
10.10.08
16:18
(18) подменить F9 несложно, главное, чтобы была функция, умеющая правильно копировать. В КД она есть. Я для себя ее брал. Возможно можно написать и более оптимально. Поскольку код функции от 1С известен - можно сравнить, что лучше. У меня обычно не хватает времени. Она точно работает.
25 Salvador Limones
 
10.10.08
16:18
(11) Врядли, скорее всего через УстановитьСсылкуНового и в транзакции.
26 Гений 1С
 
гуру
10.10.08
16:19
(21) а далее, далее, ПриКопировании у объекта нет ссылки. Допустим юзверь нажал Ф9, потом отказался, а элементы уже созданы... Мозгами шевели, умник, при чем здесь приКопировании
27 Гений 1С
 
гуру
10.10.08
16:19
(23) Писать не просят, просят идею. А я скажу, да блин, у меня так и сделано. Или - не чувак, у меня круче. Ибо круче чем у меня быть не может однозначно. У меня идеально сделано.
28 Гений 1С
 
гуру
10.10.08
16:20
(25)
Не по ссылке нового.
Вот в 1це пишу, кстати.
В справочнике пимВалюты поставил обработчики:


<pre>

Процедура ПриКопировании(ОбъектКопирования)
НоваяСсылка = Справочники.пимВалюты.ПолучитьСсылку(Новый УникальныйИдентификатор());
ЭтотОбъект.УстановитьСсылкуНового(НоваяСсылка);
Сообщить("Копирование:" + НоваяСсылка.УникальныйИдентификатор());
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
Сообщить("Запись:" + ЭтотОбъект.Ссылка.УникальныйИдентификатор());
КонецПроцедуры
</pre>

На выходе имею:

<pre>

Копирование:102636f8-e741-4f53-99e3-c9cee9499c4d
Запись:0ae3bd71-96bd-11dd-be7f-001e370e417d
</pre>

Что за бред, почему ссылка нового не поддерживается?
29 PCcomCat
 
10.10.08
16:23
(27) Да! Сам себя не похвалишь - никто не похвалит!:)
30 devlabnn
 
10.10.08
16:24
А если при копировании сохранять объект копирования и признак копирования, а подчиненные уже ПослеЗаписи() фигачить?
31 Живой Ископаемый
 
10.10.08
16:24
2(26) Можно все в транзакцию завернуть.. ну так, в порядке бреда...
32 Господин ПЖ
 
10.10.08
16:25
В подписке ссылка уже есть, т.к. ПриЗаписи в объекте уже отработано
33 Живой Ископаемый
 
10.10.08
16:29
что-то я наверное как-то не проникся проблематикой....
34 KAO111
 
10.10.08
16:30
Процедура СправочникСписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
   Если Копирование=истина тогда
       Отказ=Истина;
       // Заполняем новый элемент в транзакции с помощью свой функции
   КонецЕсли ;    
КонецПроцедуры
35 mikecool
 
10.10.08
16:30
чё то я не догоняю, как соотносится тема и "Писать не просят, просят идею. ". Кто кого просит?
36 Господин ПЖ
 
10.10.08
16:32
(35) пятница, забей
37 Гений 1С
 
гуру
10.10.08
16:32
(32) Не гони, в ПриКопировании элемента еще нет.
(34) Не, там тоже объекта еще нет. К тому же это на уровне формы, а я на уровне объекта сделал.
(31) В порядке бреда если только.

У меня красивое решение. ДУМАЙТЕ, ДЯТЛЫ!
38 Александр_
Тверь
 
10.10.08
16:36
(37) вот загнул? А оно нам надо, в пятницу... под вечер - ДУМАТЬ!

Сказал бы в среду, до обеда, можно было бы и подумать, а так - есть что сказать - ГОВОРИ. нет, дык нефиг народ баломутить.
39 Dimarik2309
 
10.10.08
16:40
>>> У меня красивое решение. ДУМАЙТЕ, ДЯТЛЫ!
епт, это уже комплексы видать...)))
40 Гений 1С
 
гуру
10.10.08
16:43
(39) Ну комплексы не комплексы, а до 38 го поста дошли, решения еще не придумали. Кто вы после этого? ;-)
41 Господин ПЖ
 
10.10.08
16:44
может я чего не понимаю...

вот из БП кусок... форма элемента спр. Валюты

// Обработчик события ПриЗаписи формы.
//
Процедура ПриЗаписи()

   // если курс на 1 января 1980 не задан, установим его
   ОбщегоНазначения.ПроверитьКорректностьКурсаНа01_01_1980(Ссылка);

КонецПроцедуры
42 Черт
 
модератор
10.10.08
16:46
Фиксин, опять изобрел велосипед с квадратными колесами, после употребления очередной дозы мухоморов
предупреждаю, по аккуратней в выражениях, а то тебя и опустить могут
43 kiruha
 
10.10.08
16:53
Модуль спр

Перем мОбъектЮрФизЛицо Экспорт;
Процедура ПриЗаписи(Отказ)
   Если мОбъектЮрФизЛицо.Модифицированность() Тогда
       ЗаписатьОбъектЮрФизЛицо(Отказ);
   КонецЕсли;

   Если  Модифицированность() Тогда
   
           Записать();
   КонецЕсли;

КонецПроцедуры

Срабатывает всегда (и при программном копировании тоже)
44 Immortal
 
10.10.08
16:53
щас посмотрим кто из нас дятел-))
выкладывай давай-)
45 devlabnn
 
10.10.08
16:56
(40) Пьяный?
46 de_k
 
10.10.08
16:57
Не ругать надо его, а сочувствовать. Болеет...
47 Господин ПЖ
 
10.10.08
17:13
а где наш просветитель?
48 Гений 1С
 
гуру
10.10.08
17:14
(41) (43) ну наконец-то. ;-) Горячо!
49 Гений 1С
 
гуру
10.10.08
17:15
осталось только применить это к нашему случаю - и вуаля...
Но копировать нужно только при копировании, а не вдругих случаях! ;-)
50 nop
 
10.10.08
17:15
(0) Конгениально!
51 kiruha
 
10.10.08
17:16
(48) Какой нафиг горячо.
Выдрал код из рабочей базы 3 летней давности
52 Господин ПЖ
 
10.10.08
17:16
бугага...
53 kiruha
 
10.10.08
17:43
(49) В коде (43) есть изюминка - Записать(); в процедуре ПриЗаписи()

Зачем можешь объяснить?
54 Господин ПЖ
 
10.10.08
17:46
смотрб в отладчике в модуле объекта ПередЗаписью - пустота.
смотрю в ПриЗаписи - есть ссылка.

У меня какой-то другой отладчик?
55 nop
 
10.10.08
17:50
(54) может в программу Мастер-Класс входит перекомпиляция ядра, но Гений считает что люди к этому не готовы?
56 Гений 1С
 
гуру
10.10.08
18:10
Я обошелся без Записать() в ПриЗаписи. ;-)
57 Mitriy
 
10.10.08
18:19
(56) ты при создании элемента копированием сразу его записываешь?
58 Гений 1С
 
гуру
10.10.08
18:25
59 Mitriy
 
10.10.08
18:36
(58) из (0) следовало несколько другое, имхо:
<нужно чтобы когда пользователь создавал элемент справочника А копированием (F9), при этом копировались все подчиненные элементы>
60 Mitriy
 
10.10.08
18:41
(59)+ но все равно прикольно, пасиб за идею :)
61 Aprobator
 
10.10.08
18:45
При копировании юзверем соответственно откроется форма элемента справочника в которой будет доступно ПараметрОбъектКопирования. Остальное можно запхнуть в процедуру ПослеЗаписи(). Какие еще извращения требуются?
62 Aprobator
 
10.10.08
19:01
+61 при редактировании в диалоге соответственно. Извращаться придется только при редактивовании в списке.
Хотя в списке есть процедура ПередНачаломДобавления(Отказ>, <Копирование>, <Родитель>, <Группа>) - в которой можно отследить факт копирования. Остается только выяснить - можно ли здесь отловить объект копирования и ссылку на добавляемый элемент справочника. Но с этим нет времени возиться.
63 Aprobator
 
10.10.08
19:07
Короче при копировании элемента всяко будет работа с формами - как- то здесь все это упущено вместе с событиями форм.
64 Rebelx
 
10.10.08
19:17
особенно в гениТальном решении мне понравился блок:

ДобОбъект =  Справочники.Подчиненные.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(ДобОбъект, Выборка, ,"Владелец, Код, Родитель");
ДобОбъект.Владелец = ЭтотОбъект.Ссылка;
ДобОбъект.Записать();

а почему бы сразу не копировать?

ДобОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДобОбъект.Владелец = ЭтотОбъект.Ссылка;
ДобОбъект.Записать();

это за исключением того, что можно обойтись двумя обработчиками
65 Rebelx
 
10.10.08
19:19
хотя ситуацию с родителем надо конечно обрабатывать отдельно
66 Медвед1Сник
 
10.10.08
19:21
(0) Да это фигня. Я вот очень удивился когда выяснил что в снеговике так же как и в клюшках нельзя делать групповые операции с элементами справочников, списков и т.д. Например мы выбираем мышью при нажатом Ctrl ряд объектов и они все охренительно выделены (вот прогресс!), потом я могу одним движением (!!!) руки всех их пометить на удаление, перести в другую группу и т.д. Этого до сих пор почему то нет. Подумай над тем как это сделать, а потом устрой тут мастер-класс. :)
67 Rebelx
 
10.10.08
19:26
(66)наверно я что-то не понял, при множественном выделении работает множественная пометка на удаление и перенос в другую группу штатными методами
68 KAO111
 
10.10.08
19:26
(66) э-э-э, как только ставим режим выделения "Множественный" - так сразу это работает
69 el-gamberro
 
10.10.08
19:27
А причем тут вообще родители?
70 EvgeniuXP
 
10.10.08
19:29
я лично записывал элемент, а потом если пользователь отказ делал при выборе - удалял его.
71 Rebelx
 
10.10.08
19:29
(69)при копировании подчиненного иерархического справочника необходимо менять ссылки на родителя в подчиненных эмлементах чтобы не получилось, что у родителя и дочернего элемента владельцы разные
72 Медвед1Сник
 
10.10.08
19:41
(67)(68) У меня не работает. Что я делаю не так?
(Запуская конфу...)
73 Bober
 
10.10.08
20:03
Иногда создается впечатление, что под ником Гений 1С пишут все кому не лень.
74 Гений 1С
 
гуру
10.10.08
20:54
(61) отрабатывать события на уровне формы - это не наш метод. К тому же если пользователь щелкнет записать дважды в одной форме, нужно чтобы во второй раз подчиненные элементы не скопировались.
75 Гений 1С
 
гуру
10.10.08
20:56
(64) ДЯТЕЛ, твой код не копирует, а перемещает!
76 Гений 1С
 
гуру
10.10.08
20:56
(72) перетаскивать в группу можно если разрешить драг и дроп, тогда писать ничего не надо. НАсчет групповой пометки на удаление не знаю - а что, сложно кнопку с обработчиком повесить? Для каждого Эл из ВыделенныеЭлементы и т.п.
77 Rebelx
 
10.10.08
21:13
(75)да, опечатка, но это не дает тебе право меня оскорблять

надо так:

ДобОбъект = Выборка.Ссылка.ПолучитьОбъект().Скопировать();
ДобОбъект.Владелец = ЭтотОбъект.Ссылка;
ДобОбъект.Записать();
78 PR
 
10.10.08
21:38
По ходу Фиксин наконец-то открыл для себя методы ПолучитьСсылку() и УстановитьСсылкуНового() :))
79 Гений 1С
 
гуру
10.10.08
21:53
(77) Ну почему же. Повод дает. Про метод Скопировать() я забыл, чесгря.
80 Bober
 
10.10.08
22:25
(77) наверное ты хотел сказать

ДобОбъект = Выборка.Ссылка.Скопировать();
81 vde69
 
10.10.08
22:33
открыл карточку фиксина на инфостаре и офигел рейтинг за 800... и 4 страници ссылок на его опусы (большенство по 5-10 плюсов) то есть ни кому нафиг не нужны... Наверно если писать статьи копированием из синтаксиса помошника можно больше заработать!

Сергей, тебе самому не стыдно такие вещи публиковать? Ведь я уверен, что среди твоего мусора наверно есть и стоящие вещи, только своими гЕниальными мелочами ты только хуже себе делаешь.
82 Медвед1Сник
 
10.10.08
22:55
нет, я не понял каким образом делать множественный выбор. У меня в списках справочника ничего множественно не выделяется вообще!... Сообщите хоть какие кнопки тыкать надо.
Выделение списков с помощью шифта и контрола + мышь есть стандартная фича виндозы. В снеговике не работает...
83 Bober
 
10.10.08
23:11
(82) включи множественный выбор ЭУ табличное поле
84 Медвед1Сник
 
10.10.08
23:34
(83) Обана, есть! В типовой бухии в списке контрагентов поставил эту галку и сразу пошло выделение по нескольким элементам! Правда нельзя до сих пор выделять целым списком (шифт + мышь), но пусть это будет очередной задачей для Гения. :)
85 Злобный Йожег
 
10.10.08
23:59
(0) Как вариант: в модуле справочника создать экспортную переменную, которой в процедуре ПриКопировании() присваивать значение параметра ОбъектКопирования. А потом при записи скопированного элемента находить все подчиненные элементы объекта копирования путем обращения к этой переменной, и на основании их создавать новые для скопированного. Вот :)
86 Злопчинский
 
11.10.08
04:08
Че вы гоните! Пишет Г1С - ну и пусть пишет!
маленькая польза лучше чем никакая польза!
88 Гений 1С
 
гуру
11.10.08
10:12
(85) Нахрена, если есть Дополнительные свойства объекта, заводить левые переменные?
А если мы объект программно копируем? Надо отходить от форм, надо!!
89 Злобный Йожег
 
11.10.08
13:52
(88) А что, ПриКопировании() работает только при интерактивном копировании элемента? Всегда ведь вызывается, когда элемент копируется.
90 Злобный Фей
 
11.10.08
14:10
Сабж тупой. Как и автор. Непонятно как стока постов собрались. Реализуется очень легко.
ЗЫ: помимо подчиненных элементов еще есть связанные со справочником регистры сведений, кои тоже иногда полезно копировать
91 Rebelx
 
11.10.08
14:37
(80)возможны оба варианта, и по смыслу и быстродействию в данном контексте они идентичны
92 Гений 1С
 
гуру
11.10.08
21:50
(89) ПриКопировании - это событие формы, а не объекта
(90) Што ж ты промолчал, когда я на слабо брал?
93 Rebelx
 
12.10.08
14:34
(92)
СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ПриКопировании (OnCopy)
Синтаксис:
ПриКопировании(<Объект копирования>)
Параметры:
<Объект копирования>
Тип: СправочникОбъект. Исходный элемент, который является источником копирования.
Описание:
Возникает при создании элемента справочника копированием.
94 Гений 1С
 
гуру
12.10.08
16:31
(93) Ну так я именно его и использую, в чем проблема?
95 Rebelx
 
12.10.08
16:40
(94) это тобытие объекта а не формы. так говорит СП
96 Господин ПЖ
 
12.10.08
16:54
дотянем до сотни?
97 Гений 1С
 
гуру
12.10.08
18:29
(95) и что, что формы?
98 Гений 1С
 
гуру
12.10.08
18:29
т.е. объекта?
99 Злобный Йожег
 
12.10.08
19:44
(98) А то, что (89) к (88), а потом (92). Типа, за базар ответьте :)
100 у лю 427
 
12.10.08
20:25
99 М.дак-в с Нижнего Тагила. Самовывоз....
101 Defender aka LINN
 
12.10.08
20:30
(100) Нинада. В Нижнем Тагиле, я уверен, живут культурные люди.
102 у лю 427
 
12.10.08
20:44
шпингалеты...
103 Гений 1С
 
гуру
12.10.08
22:24
(99) ок. я тебя не так понял. Но в связи с тем, что в 8.1 появлись ДополнительныеСвойстваОбъектов, использование переменных модуля выглядит моветоном.
104 Злобный Йожег
 
12.10.08
22:28
105 Злобный Фей
 
12.10.08
22:42
(100) Пит - поклонник петросяна )))
106 Злобный Йожег
 
12.10.08
22:54
(105) По-моему, он и есть Петросян...
107 АТЕИСТ
 
13.10.08
07:26
я лишь сторонний наблюдатель . взял сейчас за основу стандартную конф. УТ 10.3.3 и вот что .
СКАЖУ : УЧИТЬ и учиться , но не хамить друг другу . это залог того что что - то поймешь . сам очень много не знаю и не понимаю . относитесь с уважением к труду коллег .
108 Гений 1С
 
гуру
13.10.08
08:50
(107) Вот именно. ;-)
109 Гений 1С
 
гуру
13.10.08
08:50
Но когда чайники вякают на учителя!
110 Злобный Йожег
 
13.10.08
12:55
(109) А кто тут чайник и кто учитель?
111 Гений 1С
 
гуру
13.10.08
12:56
(110) Учитель - Гений, а чайники - те, кто с ним пытаются спорить.
112 Rebelx
 
13.10.08
13:06
(111)гений, просвети нас всех недоумков, ты наверное уже придумал неописуемую формулу К.Рупасова?
113 Господин ПЖ
 
13.10.08
13:06
ппц... сам себя в Учителя определил

Кто тут к примеру в цари крайний? (с) мультик
114 Гений 1С
 
гуру
13.10.08
13:09
(112) нет, я над ней не думал
115 Shadd
 
13.10.08
13:17
Вечелая куча-мала получилась. Поражает что нашлись те кто еще спорит с уродцем.

"Гений" 1С- ушлепок с воспаленной самооценкой. Похож на человека с запором... тужится тужится... потом ррраз и вуаля, свежая идея! а вы так можите? Если нет, то вы -дятлы! Долдон, это твое единственное решение за всю жизнь? почему ты думаешь что люди тупее тебя? :)
116 AChiller
 
13.10.08
13:17
Гений, на мистосходку тебе похоже уже не светит попасть - отметелят тебя всем сообществом за публичные оскорбления :)
117 Господин ПЖ
 
13.10.08
13:19
(115) я попросил бы птичку нашу не обижать
118 nop
 
модератор
13.10.08
13:32
(115) Shadd
(90) Злобный Фей

предупреждение
119 Rebelx
 
13.10.08
13:34
(118) где ж ты был (75)?
предлагаю закрыть эту тему на...
120 vde69
 
модератор
13.10.08
13:36
(118) тогда и еще одно предупреждение:

(111)Гений 1С (негоже всех оппонентов чайниками называть)
121 Shadd
 
13.10.08
13:39
Ух ты, я смотрю и голоса прорезались.... что ж когда вас дятлами да чайниками называли все рот боялись открыть то? Смешные.
122 Злобный Йожег
 
13.10.08
13:51
Истина рождается в споре. И нет ее в последней инстанции, от кого бы она ни исходила.
123 Злобный Йожег
 
13.10.08
13:57
(121) Как знать... "Не плюй в колодец..." (цы) Не помню кто
124 Aprobator
 
13.10.08
15:53
(74) - событие происходит в форме, обрабатывать его можно и в модуле объекте, но факт отлова события правильнее делать в форме.
А групповое программное размножение элементов справочника со всем содержимым - это для каких загадочных целей может потребоваться? А вообще - баловство это.
125 Гений 1С
 
гуру
13.10.08
16:13
(124) Мне запретили называть людей дятлочайниками, поэтому ГлубокоНеуважаемый Апробатор, пора научиться пользоваться событиями объектов, а не форм, не в 77 поди.
126 Asmody
 
модератор
13.10.08
16:24
ветка скатилась в срач. закрываю
Программист всегда исправляет последнюю ошибку.