![]() |
![]() |
![]() |
|
Как программно скопировать элемент справочника? | ☑ | ||
---|---|---|---|---|
0
TDI
19.07.06
✎
14:21
|
Как программно скопировать элемент справочника?
Есть ли какая-нибудь способ копирования справочника прогарммно, без использования методанных ? |
|||
1
Каанкереде
19.07.06
✎
14:23
|
нет
|
|||
2
ZolotarevAA
19.07.06
✎
14:23
|
(0) Можно и без метаданных, но это не универсально, т.к. конфа может поменяться и код придется переписывать.
|
|||
3
skunk
19.07.06
✎
14:24
|
а почему методанные использовать низя?
|
|||
4
Каанкереде
19.07.06
✎
14:25
|
(3) неумеет видимо
|
|||
5
GrayT
19.07.06
✎
14:25
|
Некошерно видимо.... т.е. религия не позволяет ;)
|
|||
6
skunk
19.07.06
✎
14:25
|
(4)думаешь?
|
|||
7
Каанкереде
19.07.06
✎
14:25
|
(6) предпологаю...
|
|||
8
skunk
19.07.06
✎
14:27
|
(7)у тебя телепат сегодня рулит...
а вот если написать ВК... то можно копить без использования методанных |
|||
9
1C_ZeroMan
19.07.06
✎
14:28
|
(0) зачем?
|
|||
10
skunk
19.07.06
✎
14:28
|
(9)про конфу спроси?
|
|||
11
Каанкереде
19.07.06
✎
14:29
|
(8) зачем ВК? у меня процедура глобальная есть...копирует справочники со всеми реквизитами и подчинениями...
p/s/ вспомнилось. мы как то ею даже мерялись с тобою... |
|||
12
skunk
19.07.06
✎
14:32
|
(11)угу мерились... я даже как-то ее искал... уже тут спрашивали...
а ВК чтобы без методанных... правда теже яйца, только жаренные |
|||
13
Токс
19.07.06
✎
14:56
|
Открываем форму списка, жмакаем "Ф9"...
|
|||
14
skunk
19.07.06
✎
14:58
|
(13)периодические... подчиненые
|
|||
15
Токс
19.07.06
✎
15:00
|
(14) Это косяк 1С... не мой...
|
|||
16
1C_ZeroMan
19.07.06
✎
18:38
|
(10) да не.. я просто люблю всякие заковырки.. ну мало ли, какая-нить интересная идея мелькнет (свои мозги уже сохнут, приходится подпитываться).. я просто тупо сидел и 10 минут думал, ну на какой фиг мне бы понадобилось программно скопировать элемент, поскольку не нашел ни одного мерцания нейронов, поэтому спросил.. ничего чтобы было оскорбительного или с подвохом.. просто интересно..
|
|||
17
skunk
20.07.06
✎
06:28
|
//*******************************************
// Создает список видов подчиненных справочников... // если оных нет... то GetListSize к нему вернет 0 // для получения передать вид справочника список // подчиненных треба получить. function GetVassal(Kind) // создаем список значений // который будем вертать Answer = createobject("valuelist"); // получаем количество справочников // в текущей конфе Count = metadata.Reference(); // циклом посмотрим всех их поближе for x = 1 to Count do // посмортим есть ли у справочника владелец... if metadata.Reference(x).Owner.Selected() = 1 then // убедимся что владелец наш... if metadata.Reference(x).Owner.Identifier = Kind then // если все гуд... хотя какой тут гуд... лишняя // работа... то справочник... точнее его вид // в наш список Answer.AddValue(metadata.Reference(x).Identifier); endif; endif; enddo; // вернем список тому... кто его попросил return Answer; endfunction |
|||
18
skunk
20.07.06
✎
06:28
|
|
|||
19
skunk
20.07.06
✎
06:28
|
//*******************************************
// а это в принципе сама функция и есть // короче ищет аналог справочника // получает что нада найти и где надо найти // в качестве где имеется списко значений // формируется для каждого подчиненого справочника // отдельно... см. ниже // возвращает искомый элемент... если такой // существует function GetAnalogue(refVassal, vlItemVassal) // получаем представление искомого // элемента Present = GetNotion(refVassal); // найдем по представление элемент Answer = vlItemVassal.Get(Present); // вернем его return Answer; endfunction |
|||
20
skunk
20.07.06
✎
06:29
|
//*******************************************
// а это в принципе и сама процедура для копирования // справочника... функция рекруссивна... то бишь // могет вызывать саму себя... для чего угадай с трех раз // получает что надо скопировать... ну и соотвественно // родителя и владельца... последнии два не обязательны... // и если не указаны... то беруться у того что копируем... // вертает скопированный элемент... function CopyRefItem(refItem, refParent = "", refOwner = "") // получим родителя копируемого элемента Kind = refItem.Kind(); // за креативим нужный нам справочник refObj = createobject("Reference." + Kind); // посмотри дали ли нам владельца if isblankstring(refOwner) = 1 then // если нет возьмем у нашего элемента refOwner = refItem.Owner; endif; // по пользуемся владельцем refObj.UseOwner(refOwner); // аналогично поведем себя с родителем... // бедные мои родители... чего только от // они не натерпелись ((( if isblankstring(refParent) = 1 then refParent = refItem.Parent; endif; refObj.UseParent(refParent); // создадим новый элемент нашего // справочника... // родителя и владельца имели в начале // на тот случай если уникальность кода // в пределах подчинения... refObj.New(); // копируем имя.. refObj.Description = refItem.Description; // и врайтим вновь созданный элемент refObj.Write(); // получим список подчиненных справочников vlVassal = GetVassal(Kind); // посмортрим сколько их... Count = vlVassal.GetListSize(); // если больше нуля, то нам не повезло... // а кому работу делать то хоца... мне нет if Count > 0 then // создадим список значений... // куда будем кидать все элементы подчиненных // справочников с их текстовым представлением // для поиска... vlItemVassal = createobject("valuelist"); // и опять цикл... а что делать for x = 1 to Count do // получим очередной вид подчиннего справочника KindVassal = vlVassal.GetValue(x); // за креатим его refVassal = createobject("Reference." + KindVassal); // за юзаем для него владельца... // это то что мы копируем... refVassal.UseOwner(refItem); // начнем выгребать элементы из него refVassal.SelectItems(); // выгребаем... пока грабиться while refVassal.GetItem() > 0 do // и копируем их уже для копируемого справочника... // в refTemp получаем скопированый элемент // подчиненного справочника... refTemp = CopyRefItem(refVassal.CurrentItem(), , refObj.CurrentItem()); // а теперь запихнем его и его представление в наш список vlItemVassal.AddValue(refTemp, GetNotion(refTemp)); enddo; enddo; endif; // ну теперь мы готовы к штурму замка... // получаем количество атрибутов у копируемого элемента Count = metadata.Reference(Kind).Attribute(); // и блядь... галопом по европе... for x = 1 to Count do // и опять метадата... получим указатель // на очередной атрибут нашего справочника... Attribut = metadata.Reference(Kind).Attribute(x); // как вас зовут сэр? // меня не зовут... я сам прихожу... когда посчитаю нужным NameAttrib = Attribut.Identifier; // переодический ли ты у нас... if Attribut.Periodic = 0 then // если ответ... пшел ты на куй дурачок... // то нам лафа // получаем значение Value = refItem.GetAttrib(NameAttrib); // проверим тип нашего атрибута... if Attribut.Type = "Справочник" then // черт возьми да он справочник... // мы попали ногами в жир... // бля... надо глянуть вдруг этот справочник // подчинен нашему... if Value.Owner = refItem then // зараза... // ищем аналог элемента у вновь созданого // спраовчника... Value = GetAnalogue(Value, vlItemVassal).CurrentItem(); endif; endif; // установим полученное значение в копируемый справочник... refObj.SetAttrib(NameAttrib, Value); else // блядь... да он в периоде // ну то бишь атрибут справочника переодический... // создаем историю для нового справочнка objPerWhere = createobject("Periodic"); objPerWhere.UseObject(NameAttrib, refObj.CurrentItem()); // а также получаем историю копируемого элемента objPerWhat = createobject("Periodic"); objPerWhat.UseObject(NameAttrib, refItem.CurrentItem()); // начинаем смотреть историю objPerWhat.SelectValues(); // смотри пока смотриться while objPerWhat.GetValue() > 0 do // скопируем очередную дату истории objPerWhere.DateVal = objPerWhat.DateVal; // что там у нас за значение на данную дату Value = objPerWhat.Value; // значение в историю... objPerWhere.Value = Value; // проверим на подчиненный справочник... // трудно понять... смотри выши... if Attribut.Type = "Справочник" then if Value.Owner = refItem then objPerWhere.Value = GetAnalogue(Value, vlItemVassal).CurrentItem(); endif; endif; // сохраним историю для нашего... ну ты понял меня ;)) objPerWhere.Write(); enddo; endif enddo; // когда все готово... все атрибуты и прочая бодяга получена // записана и сохранена... // запишем и наш справочник... refObj.Write(); // и вернем его... для рекруссии... return refObj; endfunction |
|||
21
1C_ZeroMan
20.07.06
✎
07:03
|
да уж.. :)
|
|||
22
Obed
20.07.06
✎
07:05
|
Веточку в БЗ
|
|||
23
skunk
20.07.06
✎
07:07
|
(22)один фих мало кто вкурит
|
|||
24
Obed
20.07.06
✎
07:09
|
(23) Я вкурил
|
|||
25
skunk
20.07.06
✎
07:12
|
(24)коменты читал?
|
|||
26
Obed
20.07.06
✎
07:17
|
(25) ессно, мата дофига :)
|
|||
27
skunk
20.07.06
✎
07:20
|
(26)а без мата долго бы разбирался?
|
|||
28
Obed
20.07.06
✎
07:21
|
(27) Без мата вообще не разобрался бы :))))
|
|||
29
skunk
20.07.06
✎
07:22
|
(28)вывод ... мат нужен
|
|||
30
Obed
20.07.06
✎
07:24
|
(29) Надо ВР предложить разрешить мат в тематических ветках :D
|
|||
31
skunk
20.07.06
✎
07:26
|
(30)кстати сейчас перечитал не нашел ни одного мата
|
|||
32
Obed
20.07.06
✎
07:28
|
(31) Примеры: "бл$дь", "не на$бешь, не проживешь", "бл$ буду", "на$бка с FindItem"...
|
|||
33
skunk
20.07.06
✎
07:29
|
(32)так далеко я не читал (((
|
|||
34
Obed
20.07.06
✎
07:34
|
(33) Дык это во второй процедуре :)
|
|||
35
skunk
20.07.06
✎
07:38
|
(34)я же чурка... читаю снизу вверх
|
|||
36
Obed
20.07.06
✎
07:38
|
(35) :)
|
|||
37
skunk
20.07.06
✎
07:46
|
тебе смешно
|
|||
38
Obed
20.07.06
✎
07:48
|
(37) Наверное еще справа налево?
|
|||
39
skunk
20.07.06
✎
07:50
|
(38)а еще я вверх ногами читать умею... так с Лошадкой познакомился в метро
|
|||
40
Obed
20.07.06
✎
07:52
|
(39) Чегой-то ты в метро забыл?
|
|||
41
skunk
20.07.06
✎
07:54
|
(40)жил я год в питере... полгода пользовался услугами метро
|
|||
42
Obed
20.07.06
✎
07:57
|
(41) Ужос просто....
|
|||
43
skunk
20.07.06
✎
07:58
|
(42)и не говори...
|
|||
44
Obed
20.07.06
✎
08:01
|
(43) Вот в Астану переедешь, будешь там метро строить?
|
|||
45
skunk
20.07.06
✎
08:02
|
(44)нет... скорее всего буду франч открывать
|
|||
46
skunk
20.07.06
✎
08:02
|
надо заниматься тем, что знаешь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |