|
Как скопировать элемент справочника с починеными элементами? | ☑ | ||
---|---|---|---|---|
0
maiskii__kot
29.11.05
✎
12:45
|
имеется элемент справочника. как скопировать этот элемент так, что бы скопировались и все элементы подчиненного справочника?
|
|||
1
LOD
29.11.05
✎
12:47
|
Есть два способа:
1)Руками создать элементы 2)Програмным способом |
|||
2
maiskii__kot
29.11.05
✎
12:48
|
программным спопобом, можно просто в наглую перебирать все элементы и реквизиты этих элементов. но это не очень эффективно :-(
|
|||
3
LOD
29.11.05
✎
12:49
|
В програмном способе
Необходимо задать "Владелец" подчиненного справочника |
|||
4
LOD
29.11.05
✎
12:50
|
Надо в коде чуть чуть написать ;)
|
|||
5
maiskii__kot
29.11.05
✎
12:50
|
//3 понятное дело. без этого будет уже не подчиненный справочник.
нет ли стандарной обработки по копированию целого элемента, не разбирая по реквизитам? |
|||
6
LOD
29.11.05
✎
12:51
|
Я не видел
А тебе сложно написать около 6 строчек кода ? |
|||
7
maiskii__kot
29.11.05
✎
12:53
|
хочется что-то универсальное
|
|||
8
LOD
29.11.05
✎
12:54
|
(7) Волшебную палочку ? ;)
|
|||
9
LOD
29.11.05
✎
13:01
|
Сделай обработку в 9 строк (универсальную для твоего случая)
|
|||
10
skunk
29.11.05
✎
13:02
|
(9)ты уверен что за 9 строк сделаешь... если да то сделай...
(7)мыло давай |
|||
11
Rovan
гуру
29.11.05
✎
13:04
|
(10) Ну 29, максимум 39, от силы вообще 49
|
|||
12
maiskii__kot
29.11.05
✎
13:05
|
(10) [email protected]
заранее спасибо |
|||
13
skunk
29.11.05
✎
13:05
|
(11)сделай...
|
|||
14
Каанкереде
29.11.05
✎
13:07
|
(11) У меня 80. Копирует со всеми подчинениями и историями значений.
|
|||
15
skunk
29.11.05
✎
13:07
|
// Пит где-то сказал... что данное он решил в 50 строк кода... у меня получилось
// децел больше... ((( ... хотел бы взглянуть, как творят профи... |
|||
16
skunk
29.11.05
✎
13:08
|
(12)ушло
|
|||
17
skunk
29.11.05
✎
13:08
|
(14)я туп... у меня 249 строк... правда с коментами...
|
|||
18
Каанкереде
29.11.05
✎
13:10
|
(17) ну ведь мы с тобой профессионалы...Давай достанем и померямся!
Вообще можно и одной строкой, только длинной :) |
|||
19
Rovan
гуру
29.11.05
✎
13:10
|
(14) я тоже делал на 8-ке....только там не истории значений а реггистры - их я не трогал
|
|||
20
шайтан
29.11.05
✎
13:10
|
смотри ТиС, ФормаСписка "Спр.Номенклатура", кнопка "Копировать"
|
|||
21
skunk
29.11.05
✎
13:11
|
(18)я не профессионал... ты что... я тут просто опыта набираюсь...
где мериться то будем |
|||
22
skunk
29.11.05
✎
13:11
|
(20)не то... она не все копирует
|
|||
23
LOD
29.11.05
✎
13:12
|
Процедура Сформировать()
СпрВл=СоздатьОбъект("Справочник"+СпрВладелец.Вид()); СпрПодч=СоздатьОбъект("Справочник"+СпрПодчинен.Вид()); СпрПодчНовый=СоздатьОбъект("Справочник"+СпрПодчинен.Вид()); СпрПодч.ИспользоватьВладельца(СпрВладелец.ТекущийЭлемент(),); СпрПодч.ВыбратьЭлементы(); Пока СпрПодч.ПолучитьЭлемент()=1 Цикл СпрПодчНовый.Новый(); СпрПодчНовый.Владелец=... // заполняем чтонадо и как хотим СпрПодчНовый.Записать(); КонецЦикла; КонецПроцедуры |
|||
24
Каанкереде
29.11.05
✎
13:13
|
а как тут код веделять ? что то не наду где прочитать
|
|||
25
шайтан
29.11.05
✎
13:13
|
(22) если универсальность не нужна, то для примера подойдет
|
|||
26
LOD
29.11.05
✎
13:14
|
(10) Что я делаю не так ?
У меня работает нормально ((( |
|||
27
Каанкереде
29.11.05
✎
13:15
|
Функция СформироватьТекстЗапросаДляКопирования(ВидСправочника)
тхтТекЭлемент="ТекЭлемент="; тхтВладелец="Владелец="; ЕстьПодчиненные=0; Для н=1 По Метаданные.Справочник() Цикл ТекМетСпр=Метаданные.Справочник(н); Если ТекМетСпр.Владелец.ПолныйИдентификатор()=ВидСправочника Тогда ИД="Справочник."+ТекМетСпр.Идентификатор; тхтТекЭлемент=тхтТекЭлемент+ИД+".ТекущийЭлемент,"; тхтВладелец=тхтВладелец+ИД+".Владелец,"; ЕстьПодчиненные=1; КонецЕсли; КонецЦикла; //удалим лишние запятые тхтТекЭлемент=Лев(тхтТекЭлемент,СтрДлина(тхтТекЭлемент)-1); тхтВладелец=Лев(тхтВладелец,СтрДлина(тхтВладелец)-1); Если ЕстьПодчиненные=1 Тогда Возврат (тхтТекЭлемент+";"+тхтВладелец+";"+"Условие (Владелец=Элемент);Группировка ТекЭлемент;"); Иначе Возврат "0";// подчиненных нет КонецЕсли; КонецФункции // СформироватьТекстЗапросаДляКопирования //Процедура полного копирования справочника вместе со всеми подчиненными элементами и историей всех реквизитов Процедура гл_КопированиеЭлемента(Элемент,Владелец="",ТекстЗапроса="") Экспорт Если ПустоеЗначение(Элемент)=0 Тогда Если Владелец="" Тогда Владелец=Элемент.Владелец; КонецЕсли; ВидСправочника=Элемент.Вид(); Спр=СоздатьОбъект("Справочник."+ВидСправочника); СпрМет=Метаданные.Справочник(ВидСправочника); Если СпрМет.Владелец.Выбран()=1 Тогда Спр.ИспользоватьВладельца(Владелец); КонецЕсли; Если Элемент.ЭтоГруппа()=1 Тогда Спр.НоваяГруппа(); Иначе Спр.Новый(); КонецЕсли; Спр.Родитель=Элемент.Родитель; Спр.Наименование=Элемент.Наименование; НачатьТранзакцию(); Для н=1 по СпрМет.Реквизит() Цикл Реквизит=СпрМет.Реквизит(н); РеквизитИД=СпрМет.Реквизит(н).Идентификатор; Тип=Реквизит.Тип; Если Тип = "Неопределенный" Тогда Зн=Элемент.ПолучитьАтрибут(РеквизитИД); Если (Тип = "Перечисление") или (Тип = "Справочник") или (Тип = "Документ") или (Тип = "Счет") Тогда Тип = Тип + "." + зн.Вид(); КонецЕсли; Спр.НазначитьТип(РеквизитИД,Тип); КонецЕсли; Если Реквизит.Периодический=1 Тогда ПерРек=СоздатьОбъект("Периодический"); ПерРек.ИспользоватьОбъект(РеквизитИД,Элемент); ПерРек.ВыбратьЗначения(); Пока ПерРек.ПолучитьЗначение()=1 Цикл Спр.ИспользоватьДату(ПерРек.ДатаЗнач,1); Спр.УстановитьАтрибут(РеквизитИД,ПерРек.Значение); Спр.Записать(); КонецЦикла; Иначе Спр.УстановитьАтрибут(РеквизитИД,Элемент.ПолучитьАтрибут(РеквизитИД)); КонецЕсли; КонецЦикла; Попытка Спр.Записать(); Исключение ОтменитьТранзакцию(); вк_Норма.Предупреждение("Элемент справочника "+СПр.ПредставлениеВида()+" не записан."+ОписаниеОшибки(),,3); КонецПопытки; ТекстЗапроса=СформироватьТекстЗапросаДляКопирования("Справочник."+ВидСправочника); Если ТекстЗапроса<>"0" Тогда Запрос=СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда сообщить("не удалось выполнить запрос","!!!"); Возврат; КонецЕсли; Пока Запрос.Группировка(1)=1 Цикл гл_КопированиеЭлемента(Запрос.ТекЭлемент,Спр.ТекущийЭлемент(),ТекстЗапроса); // рекурсивный вызов КонецЦикла; КонецЕсли; ЗафиксироватьТранзакцию(); КонецЕсли; КонецПроцедуры // глКопированиеЭлемента |
|||
28
Каанкереде
29.11.05
✎
13:18
|
А плин. вк_Норма.Предупреждение надо заменит на просто Предупреждение();
|
|||
29
skunk
29.11.05
✎
13:20
|
(26)честно сказать все... ты кучу всего не учел...
(27)ты думаешь мне свой тоже сюда плюхнуть |
|||
30
LOD
29.11.05
✎
13:22
|
(29) Это принцип работы обработки
А ты хотел чтоб я тут всю обработку кинул как (27) Зачем ? Не вижу смысла ! |
|||
31
skunk
29.11.05
✎
13:24
|
(30)что бы заценить ее универсальность... только вот думаю есть ли смысл тут кидать...
(28, 30)может просто по мылу обменяемся... как думаете |
|||
32
Каанкереде
29.11.05
✎
13:25
|
А мне оно н фиг? у меня своя есть :) Человек просил универсального, я дал. Может погорячился конечно, наверное в мыло надо было :)
|
|||
33
LOD
29.11.05
✎
13:26
|
(31) Спасибо большое
Но это не те вещи которыми стоит меняться (ИМХО, мож я и ошибаюсь) Мож я где и не прав, но считаю это элементарным алгоритмом, и не достойным траты времени на его обсуждения с такой детальностью |
|||
34
skunk
29.11.05
✎
13:27
|
(32)мы как вроде с тобой писькам мерились ;)
|
|||
35
skunk
29.11.05
✎
13:29
|
(33)любой алгоритм можно разбить на кучу элементарных кубиков... а вот из меньшего количества кубиков сложит полноценное здание....
|
|||
36
LOD
29.11.05
✎
13:29
|
Рупора в студию !
"Как он счтает" у вас всё равно короче, меньше и уже ;))) |
|||
37
LOD
29.11.05
✎
13:30
|
(35) Согласен - но не стоит на этот пример тратить своё время
|
|||
38
Каанкереде
29.11.05
✎
13:30
|
(37) А чем мы тут вообще занимаемся, кроме как тратим свое время?
|
|||
39
Каанкереде
29.11.05
✎
13:31
|
(34) Ну и померялись заодно :)
|
|||
40
skunk
29.11.05
✎
13:32
|
(38)а так ты победил ... по длине кода... 87 против 92 ))))
вечером погоняю его на подводных камушках... |
|||
41
Каанкереде
29.11.05
✎
13:35
|
(40) Комментарии, коментарии надо убрать. И тогда тебе меня не догнать !! :)
|
|||
42
LOD
29.11.05
✎
13:35
|
(40) Я одного малого знал (он погриб)
Так тот умудрялся типовыми процедурами (то что уже написано в типовой) пользоваться (мы в шоке были от его извращений) У него всегда его текст был короче После этого мне показалось бессмысленым мериться ... |
|||
43
Каанкереде
29.11.05
✎
13:36
|
(40) Если чего найдешь намыль [email protected] пожалуйста.
|
|||
44
skunk
29.11.05
✎
13:37
|
(41)убрал... чистый код сравнивал
(42)тут это бы явно не взлетело |
|||
45
skunk
29.11.05
✎
13:38
|
(43)о кей...
|
|||
46
skunk
29.11.05
✎
15:54
|
(43)ну вроде в стандартых все гуд... работает
у твоей плюс копирует группы... моя нет (исправить не проблема) у моей копирует на много шустрее, так обходиться без запроса... |
|||
47
skunk
29.11.05
✎
15:54
|
скорость на глаз сравнивал
|
|||
48
Каанкереде
29.11.05
✎
16:54
|
(46) А у тебя подчиненные подчиненных копирует?
У меня вот лента мебиуса будет, если подчинение кольцевое :) |
|||
49
skunk
29.11.05
✎
16:57
|
(48)да копирует... скорее всего тоже... не пробовал... как и у тебя рекрусию использую...
function CopyRefItem(refItem, refParent = "", refOwner = "") |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |