![]() |
![]() |
|
Перенос справочников по оле! Обработка значений неопределенного типа | ☑ | ||
---|---|---|---|---|
0
Кро
24.12.05
✎
15:19
|
Как узнать тип полученного значения?
Ф-я ТипЗначенияСтр возвращает "Ole" Внешняя V7.ТипЗначенияСтр не работает т.е. такой функции объекта V7 не существует как прочитать тип значения по оле? |
|||
1
skunk
24.12.05
✎
15:25
|
message(V7.EvalExpr(valuetypestr(MyValue)))
что возвращает |
|||
2
Кро
24.12.05
✎
15:54
|
не работает
|
|||
3
ТестПопытка
24.12.05
✎
15:55
|
а что пишет?
|
|||
4
Кро
24.12.05
✎
15:55
|
Надо туда отправить переменную а в ОЛЕ такой переменной нет Если отправить полученное значение то получаем "ОЛЕ : переменная не найдена"
|
|||
5
Кро
24.12.05
✎
15:56
|
переменная неопределена
|
|||
6
Кро
24.12.05
✎
15:57
|
1С:Предприятие: 1 ValueTypeStr(OLE<<?>>)
Переменная не определена (OLE) |
|||
7
Кро
24.12.05
✎
15:57
|
Message(ext.EvalExpr("ValueTypeStr("+extattr+")"));
{F:\USERS\ПРОГРАММИСТЫ\ОБЩАЯ\КЛИЕНТЫ\МЕТПРОМ\1\003.ERT(246)}: 1С:Предприятие: 1 ValueTypeStr(OLE<<?>>) Переменная не определена (OLE) |
|||
8
ТестПопытка
24.12.05
✎
15:58
|
а ты создал объект ОЛЕ?
|
|||
9
аля Скунк
24.12.05
✎
16:00
|
тест
|
|||
10
ТестПопытка
24.12.05
✎
16:01
|
(9)чудище.. куда дел скунка..
|
|||
11
Кро
24.12.05
✎
16:01
|
ну а как ж\е??? базу переносим
|
|||
12
аля Скунк
24.12.05
✎
16:01
|
правильно тебе говорит... епоросете...
создай в голобальнике переменную типа mainMyValue ее позиционируй... и пробивай за тип |
|||
13
аля Скунк
24.12.05
✎
16:02
|
(10)в бани он... париться
|
|||
14
Кро
24.12.05
✎
16:02
|
ещё варианты есть???
|
|||
15
Кро
24.12.05
✎
16:04
|
А не подскажите как в эту переменную запихнуть наше значение только не говорите что ещё оле создавать туда
|
|||
16
Кро
24.12.05
✎
16:05
|
Или так же EvalExpr("пер="+пер)
Сканает??? |
|||
17
Кро
24.12.05
✎
16:05
|
Не не то Batch...("пер="+пер)
|
|||
18
а ля Скунк
24.12.05
✎
16:06
|
// добавим фирму для остатков...
// для этого создадим в удаленой базе объект справочник.Фирмы... OLEServer.глУсловие2 = OLEServer.createobject("reference.Фирмы"); // получим полный код выбранной фирмы... Code = vlFirm.GetValue(vlFirm.CurSel()); // найдем у даленной базе элемент по полному коду... OLEServer.глУсловие2.FindByCode(Code, 2); // добавим найденый элемент в параметры... |
|||
19
а ля Скунк
24.12.05
✎
16:07
|
а потом так глядишь
message(V7.EvalExpr(valuetypestr(глУсловие2))) |
|||
20
Кро
24.12.05
✎
16:07
|
чё то я не понял надо тип узнать reference то бишь
|
|||
21
а ля Скунк
24.12.05
✎
16:09
|
тогда вам в баню...
|
|||
22
ТестПопытка
24.12.05
✎
16:10
|
(21)пошляк? :) хам?
|
|||
23
а ля Скунк
24.12.05
✎
16:11
|
(22)и то и другое вместе взятое... балин ну все разжевал... нет... не вкуривает...
|
|||
24
Кро
24.12.05
✎
16:13
|
что такое глУсловие2
|
|||
25
а ля Скунк
24.12.05
✎
16:13
|
(24)Вас зовут Лева Баранов?
|
|||
26
ТестПопытка
24.12.05
✎
16:15
|
(25)а я вот честно говоря мало что понимаю вот так на форуме..
мне видеть у себя на компе проблему надо.. что он там делает? поэтому стараюсь не давать советов.. |
|||
27
Кро
24.12.05
✎
16:18
|
Сам ты Баранов, а я Оксана
ну если не понятно, пиши по русски, как для чайников. |
|||
28
ТестПопытка
24.12.05
✎
16:19
|
пардон мадам..
|
|||
29
Кро
24.12.05
✎
16:20
|
ну раз так
OLEServer.глУсловие2 = OLEServer.createobject("Строка,Дата,Число,Неоределённый"); |
|||
30
Кро
24.12.05
✎
16:21
|
....
|
|||
31
ТестПопытка
24.12.05
✎
16:22
|
"Неоределённый" -копировала?
|
|||
32
Кро
24.12.05
✎
16:22
|
Не не поняли если бы я знала что он справочник проблем бы не было
|
|||
33
Alexaha
24.12.05
✎
16:22
|
29. через метаданные не пробовала?
|
|||
34
а ля Скунк
24.12.05
✎
16:23
|
хамите... не буду вам помагать... а еще пожалуюс модераторам, что бы они вас забанили
|
|||
35
Кро
24.12.05
✎
16:24
|
ext.Metadata.Reference(refname).Attribute(n).Type="Неопределённый"
ext.Metadata.Reference(refname).Attribute(n).Kind="" |
|||
36
insider
24.12.05
✎
16:24
|
(29) что это было?
|
|||
37
ТестПопытка
24.12.05
✎
16:24
|
break
|
|||
38
Понтий Пилат
24.12.05
✎
16:26
|
отдыхает
|
|||
39
тень от Скунка
24.12.05
✎
16:28
|
Оксана а вы откуда?
|
|||
40
Кро
24.12.05
✎
16:29
|
без комментариев, у него человек помощи попросил, а он издевается
|
|||
41
тень от Сунка
24.12.05
✎
16:31
|
Оксана, а вы разве не знали, что он такой. У него помощи безполезно просить. Хотите я вам помогу?
|
|||
42
ТестПопытка
24.12.05
✎
16:31
|
скунк не может издеваться.. он в бане..
весь код приводи.. фотку выкладывай.. скажи скунку что-нибудь приятное.. (39)скунк до понедельника, пошел я бухать.. |
|||
43
а ля Скунк
24.12.05
✎
16:31
|
пернатый?
|
|||
44
Кро
24.12.05
✎
16:31
|
extmattr=extmref.Attribute(n);
Что дальше не знаю????? |
|||
45
а ля Скунк
24.12.05
✎
16:32
|
(42)аха удачи... только я еще в бане буду... аж до 27 отправили...
|
|||
46
Кро
24.12.05
✎
16:33
|
Var ext;
Procedure WriteRef(ref,Val refname,k)//maiby optimize??? Try ref.Write();//It's Slow because Try Except k=k-1; If Del=1 Then delref=CreateObject("Reference."+refname); If delref.FindByCode(ref.Code)=1 Then delref.Delete(); ref.Write(); k=k+1; Else Message("Can't overwrite "+refname+" "+ref.Description+" not found !!!","!!!"); EndIf; Else Message("Can't write "+refname+" "+ref.Description+" "+ref.Code+" unknown error or bad element !!!","!!!"); //Message(ref.Owner.Description+" "+ref.Owner.Code,"!!!"); Message(GetErrorDescription(),"!!!"); EndIf; EndTry; k=k+1; EndProcedure Function GRC(Val extref,Val extmref,Val mref) If mref.ТипКода="Числовой" Then n=0; If extmref.ТипКода="Числовой" Then n=extref.Code Else n=Number(extref.Code) EndIf; Return n; Else s=""; If extmref.ТипКода="Текстовый" Then s=extref.Code; Else s=String(extref.Code) EndIf; Return s; EndIf; EndFunction Procedure SetRP(Val extmref,Val extref,Val mref,ref,Val nof,Val intownref,Val refname,k) extrefpar=extref.Parent; If ext.EmptyValue(extrefpar)=0 Then sref=CreateObject("Reference."+refname); srefcode=GRC(extrefpar,extmref,mref); If nof=1 Then sref.UseOwner(intownref); EndIf; If sref.FindByCode(srefcode)=0 Then If mref.КоличествоУровней<=extrefpar.Level() Then If ext.EmptyValue(extrefpar.Parent)=1 Then Return EndIf; If sref.FindByCode(GRC(extrefpar.Parent,extmref,mref))=1 Then ref.Parent=sref; //Message("Element "+extref.Description+" from "+refname+" in uplevel group "+sref.Description,"!"); Else Message("Element "+extref.Description+" uplevel search failed "+sref.Description,"!!!"); EndIf; Else sref.NewGroup(); sref.Code=srefcode; sref.Description=Left(extrefpar.Description,mref.ДлинаНаименования); If nof=1 Then sref=intownref; EndIf;//nof SetRP(extmref,extrefpar,mref,sref,nof,intownref,refname,k); WriteRef(sref,refname,k); ref.Parent=sref; EndIf; Else ref.Parent=sref EndIf; EndIf; EndProcedure Процедура Сформировать() ta=CreateObject("ValueTable"); For i = 1 To sp.GetListSize() Do refname=sp.GetValue(i);k=0;n=0;d=0; Message("Processing "+refname); mref=Metadata.Reference(refname); // If mref.ДлинаКода=0 Then Message(refname) EndIf; // Continue; ref=CreateObject("Reference."+refname); //ext.BeginTransaction(); extmref=ext.Metadata.Reference(refname); extref=ext.CreateObject("Reference."+refname); nof=0; ownmref=extmref.Owner; BeginTransaction(); If DelAll=1 Then If ownmref.Selected()=1 Then ownid=ownmref.Identifier; intownref=CreateObject("Reference."+ownid); intownref.SelectItems(); While intownref.GetItem()=1 Do ref.UseOwner(intownref); ref.SelectItems(); While ref.GetItem()=1 Do ref.Delete() EndDo; EndDo; Else ref.SelectItems(); While ref.GetItem()=1 Do ref.Delete() EndDo; EndIf; EndIf; CommitTransaction(); If DelAll=1 Then ref.SelectItems(0); If ref.GetItem()=1 Then Message("Not elements deleted!!!!"); Return; EndIf; EndIf; BeginTransaction(); If ownmref.Selected()=1 Then nof=1; ownid=ownmref.Identifier; ownref=ext.CreateObject("Reference."+ownid); ownref.SelectItems(); GoTo ~nextown; EndIf; GoTo ~skipown; ~nextown: If ownref.GetItem()=0 Then GoTo ~nextref; //nof=0; EndIf; If ownref.IsGroup()=1 Then Goto ~nextown EndIf; intownref=CreateObject("Reference."+ownid); If intownref.FindByCode(GRC(ownref,ext.Metadata.Reference(ownid),Metadata.Reference(ownid)))=0 Then Message("Owner not found "+ownid+" element "+ownref.Description,"!!!"); Goto ~nextown; EndIf; extref.UseOwner(ownref); ~skipown: extref.SelectItems(); ta.Clear(); ta.ColumnCount(6); For j = 1 To extmref.Attribute() Do extmattr=extmref.Attribute(j); l=ta.NewLine(); extpr=extmattr.Identifier; ta.SetValue(l,1,extpr); ta.SetValue(l,2,extmattr.Type); ta.SetValue(l,3,extmattr.Kind); If mref.Attribute(extpr).Selected()=1 Then pr=extpr Else If refname="Материалы" Then //maiby optimize??? If extpr="СубСчет10" Then pr="Субсчет" ElsIf extpr="Цена" Then pr="Стоимость" EndIf; ElsIf refname="Номенклатура" Then If extpr="ПорядокХраненияОтпускнойЦены" Then pr="" ElsIf extpr="ПлановаяСебестоимость" Then pr="" ElsIf extpr="Себестоимость" Then pr="Стоимость" ElsIf extpr="СтранаПроисхожд" Then pr="СтранаПроисхождения" EndIf; ElsIf refname="НазначенияИспользования" Then If extpr="ДатаВводаВЭксплуатацию" Then pr="" ElsIf extpr="ФактическийОбъемПродукцииРаботЗаМесяц" Then pr="" ElsIf extpr="ДокументПередачаВПроизводство" Then pr="" EndIf; ElsIf refname="Договоры" Then If extpr="ВалютаДоговора" Then pr="Валюта" EndIf; Else pr=""; Message("Reference "+extpr+" Element "+extref.Description+" attribute not found, rule not exist !!! Skipped","!!!"); //Break; //Continue; EndIf EndIf; ta.SetValue(l,4,pr); If pr<>"" Then ta.SetValue(l,5,mref.Attribute(pr).Periodic) EndIf; ta.SetValue(l,6,extmattr.Periodic); EndDo; While extref.GetItem()=1 Do Status(refname+" "+String(k+d)+" element in process"); n=n+1; If extref.DeleteMark()=1 Then d=d+1; Continue EndIf; If extref.IsGroup()=1 Then If mref.КоличествоУровней<=extref.Level() Then Message("Group "+extref.Description+" not created: rich max level","!!"); Continue; EndIf; ref.NewGroup(); ref.Code=GRC(extref,extmref,mref); ref.Description=Left(extref.Description,mref.ДлинаНаименования); SetRP(extmref,extref,mref,ref,nof,intownref,refname,k); If nof=1 Then ref.Owner=intownref; EndIf; WriteRef(ref,refname,k); Continue; Else ref.New(); wf=0; ref.Code=GRC(extref,extmref,mref); ref.Description=Left(extref.Description,mref.ДлинаНаименования); SetRP(extmref,extref,mref,ref,nof,intownref,refname,k); If nof=1 Then ref.Owner=intownref; EndIf; EndIf; //if ta.LinesCnt()<>extmref.Attribute() Then Message("LinesCnt") EndIf;//test clear For j = 1 To ta.LinesCnt() Do extmattr=extmref.Attribute(j); //extpr=extmattr.Identifier; extpr=ta.GetValue(j,1); extattr=extref.GetAttrib(extpr); //exttype=extmattr.Type; exttype=ta.GetValue(j,2); //extkind=extmattr.Kind; extkind=ta.GetValue(j,3); pr=ta.GetValue(j,4); If pr="" Then Continue EndIf; //mattr=mref.Attribute(pr); intattrper=ta.GetValue(j,5); extattrper=ta.GetValue(j,6); If ext.EmptyValue(extattr)=0 Then //xxx If extattrper=1 Then If intattrper=1 Then If wf=0 Then WriteRef(Ref,refname,k); wf=1 EndIf;//xxx bad duplicate writing per=CreateObject("Periodic"); per.UseObject(pr,ref); per.DateVal=CurDate(); EndIf; extattr=extattr.GetValue(CurDate()); If ext.EmptyValue(extattr)=1 Then Continue EndIf; //xxx EndIf; If exttype="Неопределенный" Then//very very very baaaaaaad!!!!!!!! //not universal=zavisit ot drugogo koda //If ext.SubcontoKinds.ValueByIdentifier(extattr.) vts=""; vts=ValueTypeStr(extattr); Message(ext.EvalExpr("ValueTypeStr("+extattr+")")); If (vts="Число") or (vts="Строка") or (vts="Дата") Then //po moemu vsegda OLE exttype=vts ElsIf vts="OLE" Then Try extkind=extattr.Kind() Except Message("Can't recognize: "+exttype+" "+extkind+" "+extpr+" Element "+extref.Description,"!!!"); Continue; EndTry; If Metadata.Reference(extkind).Selected()=1 Then exttype="Справочник"; ref.SetType(pr,exttype+"."+extkind); ElsIf Metadata.Enum(extkind).Selected()=1 Then exttype="Перечисление"; ref.SetType(pr,exttype+"."+extkind); Elsif ChartsOfAccounts.ValueByIdentifier(extkind).Selected()=1 Then exttype="Счет"; ref.SetType(pr,exttype+"."+extkind); Else Message("Can't find recognized: "+exttype+" "+extkind+" "+extpr+" Element "+extref.Description,"!!!"); Continue; EndIf; EndIf; EndIf; If (exttype="Число") or (exttype="Строка") Then If intattrper=1 Then per.Value=extattr; per.Write(); Else ref.SetAttrib(pr,extattr); EndIf; ElsIf exttype="Дата" Then If intattrper=1 Then If extattr=Date(99,12,30) Then per.Value=GetEmptyValue("Дата") Else per.Value=extattr; EndIf; per.Write(); Else If extattr=Date(99,12,30) Then ref.SetAttrib(pr,GetEmptyValue("Дата")) Else ref.SetAttrib(pr,extattr); EndIf; EndIf; ElsIf (exttype="Справочник") or (exttype="Счет") Then If extkind="" Then extkind=extattr.Kind() EndIf; sobj=CreateObject(exttype+"."+extkind);//nadejda nu emptyval() If exttype="Справочник" Then If (extkind="ГТД") or (extkind="Цены") or (extkind="ДокументыУдостоверяющиеЛичность") Then sobj.FindByDescr(Left(extattr.Description,Metadata.Reference(extkind).ДлинаНаименования)); Else sobj.FindByCode(GRC(extattr,ext.Metadata.Reference(extkind),Metadata.Reference(extkind))); EndIf; If sobj.Selected()=1 Then If intattrper=1 Then per.Value=sobj.CurrentItem(); per.Write(); Else ref.SetAttrib(pr,sobj.CurrentItem()); EndIf; Else Message("Can't find: "+exttype+" "+extkind+" Element "+extref.Description,"!!!"); EndIf; ElsIf exttype="Счет" Then //If sobj.FindByCode(GRC(extattr,ChartsOfAccounts.ValueByIdentifier(extkind),mref))=1 Then If sobj.FindByCode(extattr.Code)=1 Then If intattrper=1 Then per.Value=sobj.CurAccount(); per.Write(); Else ref.SetAttrib(pr,sobj.CurAccount()); EndIf; Else Message("Can't find: "+exttype+" "+extkind+" Element "+extref.Description,"!!!"); EndIf; EndIf; ElsIf exttype="Перечисление" Then If extkind="" Then extkind=extattr.Kind() EndIf; If extkind="ТипыТоваров" Then ref.SetAttrib(pr,Enum.GetAttrib(extkind).ValueByIndex(1)); Continue EndIf; senum=Enum.GetAttrib(extkind); If EmptyValue(senum)=0 Then senumval=senum.ValueByIdentifier(extattr.Identifier()); If EmptyValue(senumval)=0 Then If intattrper=1 Then per.Value=senumval; per.Write(); Else ref.SetAttrib(pr,senumval); EndIf; Else Message("Can't find: Enum "+extkind+" Element "+extref.Description,"!!!"); EndIf; Else Message("Can't find: Enum "+extkind,"!!!"); EndIf; Else Message("Reference "+extkind+" Element "+extref.Description+" skipped","!!!"); EndIf; EndIf; EndDo; If wf=1 Then k=k-1 EndIf; WriteRef(ref,refname,k); If k/100-Int(k/100)=0 Then Try CommitTransaction(); BeginTransaction(); Except EndTry; EndIf EndDo; //Try ext.CommitTransaction() Except EndTry; If nof=1 Then GoTo ~nextown; EndIf; ~nextref: Try CommitTransaction() Except EndTry; Message(refname+" : "+String(k)+" elements of "+String(n)+" created "+String(d)+" set on remove"); EndDo; Message("Process completed"); Beep(); EndProcedure |
|||
47
тень от Скунка
24.12.05
✎
16:33
|
Оксана скажи откуда ты?
|
|||
48
Кро
24.12.05
✎
16:33
|
DelAll=1;
Message("Initialize..."); extpath=UserDir()+"\..\OAO_MK_UMP"; ext=CreateObject("V77.Application"); If ext.Initialize(ext.RMTrade,"/D"+extpath+" /M","NO_SPLASH_SHOW")=-1 Then Message("Initialize successful") Else Message("Initialize failed"); Form.Close(); EndIf; |
|||
49
тень от Скунка
24.12.05
✎
16:34
|
Да. Оксана пошутила.
|
|||
50
Кро
24.12.05
✎
16:35
|
я оттуда откуда ты и предполагаешь
ну вы же просили код, вот читайте, может все таки чем поможете |
|||
51
insider
24.12.05
✎
16:37
|
(50) где не получается? не читать же его целиком...
а вообще goto улыбнули... |
|||
52
Кро
24.12.05
✎
16:38
|
If exttype="Неопределенный" Then//very very very baaaaaaad!!!!!!!! //not universal=zavisit ot drugogo koda
//If ext.SubcontoKinds.ValueByIdentifier(extattr.) vts=""; vts=ValueTypeStr(extattr); Message(ext.EvalExpr("ValueTypeStr("+extattr+")")); If (vts="Число") or (vts="Строка") or (vts="Дата") Then //po moemu vsegda OLE exttype=vts ElsIf vts="OLE" Then Try extkind=extattr.Kind() Except Message("Can't recognize: "+exttype+" "+extkind+" "+extpr+" Element "+extref.Description,"!!!"); Continue; EndTry; If Metadata.Reference(extkind).Selected()=1 Then exttype="Справочник"; ref.SetType(pr,exttype+"."+extkind); ElsIf Metadata.Enum(extkind).Selected()=1 Then exttype="Перечисление"; ref.SetType(pr,exttype+"."+extkind); Elsif ChartsOfAccounts.ValueByIdentifier(extkind).Selected()=1 Then exttype="Счет"; ref.SetType(pr,exttype+"."+extkind); Else Message("Can't find recognized: "+exttype+" "+extkind+" "+extpr+" Element "+extref.Description,"!!!"); Continue; EndIf; EndIf; EndIf; |
|||
53
Кро
24.12.05
✎
16:39
|
If (vts="Число") or (vts="Строка") or (vts="Дата") Then сюда непопадём т.к. vts="OLE"
|
|||
54
insider
24.12.05
✎
16:40
|
(52) там, где проверяешь тип значения через EvalExpr делай, причем вычисляй в OLE-объекте, а не в текущей базе, т.к. в текущей оно всегда "OLE" будет
|
|||
55
Кро
24.12.05
✎
16:40
|
extkind=extattr.Kind() Нет у простых типов можно для справочников счетов и т.д.
|
|||
56
insider
24.12.05
✎
16:41
|
(55) не пойму, тебе трудно чтоли? сделай и скажи че вышло
|
|||
57
insider
24.12.05
✎
16:42
|
+56 неривычно в аанглийской нотации код выглядит, трудно разбираю :(
|
|||
58
Кро
24.12.05
✎
16:43
|
Не получится не могу как передать extattr?
Message(ext.EvalExpr("ValueTypeStr("+extattr+")")); Message(ext.EvalExpr("ValueTypeStr("+extattr+")")); {F:\USERS\ПРОГРАММИСТЫ\ОБЩАЯ\КЛИЕНТЫ\МЕТПРОМ\1\003.ERT(246)}: 1С:Предприятие: 1 ValueTypeStr(OLE<<?>>) Переменная не определена (OLE) |
|||
59
insider
24.12.05
✎
16:44
|
(58) не то, щас поэкспериментирую, напишу
|
|||
60
Кро
24.12.05
✎
16:52
|
Ну люди добрые где вы ????
|
|||
61
а ля Скунк
24.12.05
✎
16:55
|
балин... точно Баранова
в глобальном модуле находишь любую переменую ... описанную на экспорт Перем глУсловие1 Экспорт; далее OLEServer.глУсловие1 = ТоЧтоТебеНадоПроверить; ttt = OLEServer.EvalExpr("valuetypestr(глУсловие2)"); |
|||
62
fа ля Скунк
24.12.05
✎
16:56
|
если глобальной переменной нет... то придеться создать
|
|||
63
insider
24.12.05
✎
16:59
|
(60) да, тебе все верно пишут:
1. В базе-источнике создаешь глобальную переменную 2. Во второй базе условие присваиваешь этой переменной и вычисляешь выражение, т.к. через OLE ты агркгатный объект обратно не передашь |
|||
64
Кро
24.12.05
✎
17:03
|
уговорили, чичас буду пробовать
только вот не надо про баранову |
|||
65
а ля Скунк
24.12.05
✎
17:03
|
превый раз вижу чайника с английским синтаксисом
|
|||
66
а ля Скунк
24.12.05
✎
17:04
|
Кро ты из Тольятти?
|
|||
67
insider
24.12.05
✎
17:10
|
(65) ну это не показатель... хотя интересно
Кро, за то что помогли, сделай одолжение, убери goto и забудь про существование этого оператора |
|||
68
Кро
24.12.05
✎
17:11
|
Из Екатеринбурга
|
|||
69
а ля Скунк
24.12.05
✎
17:15
|
(67)нет просто код да боли знаком... у меня пол конфигурации в таком стиле... я тогда на 1С начинал только писать... стиля не было...
(68)какой район? |
|||
70
insider
24.12.05
✎
17:16
|
(69) хочешь сказать, что это твоя конфа?! интересно...
|
|||
71
а ля Скунк
24.12.05
✎
17:18
|
нет не моя... откуда ей взяться в Свердловске... но палить как похоже
|
|||
72
а ля Скунк
24.12.05
✎
17:18
|
по стилю... код не смотрел... толком
|
|||
73
а ля Скунк
24.12.05
✎
17:19
|
да и за goto убил бы...
|
|||
74
insider
24.12.05
✎
17:35
|
(73) солидарен :) не выношу этого... наверное нервы слабые стали :)))
|
|||
75
а ля Скунк
24.12.05
✎
17:42
|
а так в принципе можно даже похвалить... не каждый возметься универсалку для справочников делать...
|
|||
76
insider
24.12.05
✎
17:47
|
(75) да, эт точно, если оно конечно надо... да тогда через метаданные делать нужно, как в "универсале" - была такая обработка по проклубе или еще где, не помню.
|
|||
77
insider
24.12.05
✎
17:48
|
+76 а еще очень нехорошо отношусь к оле, когда оно не свосем к месту: тормозит эска с ней, имхо юзать файловый обмен тоже совсем не плохо
|
|||
78
а ля Скунк
24.12.05
✎
17:51
|
нет все правильно она делает... в этом плане... а все эти обработки как раз на этом неопределеном значении атрибута и затыкались...
ни одной 100% не видал... |
|||
79
а ля Скунк
24.12.05
✎
17:52
|
а ОЛЯ... это вопрос религии... если все делать правильно... то намного круче чем через файло...
файло удобно для трансфера... а если базы локально... то тут ОЛЯ рулит |
|||
80
insider
24.12.05
✎
18:00
|
(79) точно, вопрос религиозный :)
только что на "универсал" еще раз глянул, там проблему решили несколько по-другому: в базе-источнике грузится ert, а база-приемник инициализируется по OLE, интересно, что тип значения ("неопределенный") они определили, так что одна такая обработка все же есть :) |
|||
81
а ля Скунк
24.12.05
✎
18:05
|
не знаю не видал... а вот копировать лучше наоборот... тянуть информацию по ОЛИ оттуда...
|
|||
82
insider
24.12.05
✎
18:10
|
(81) я так же думаю, а вот как сделали могу привести фрагмент (надеюсь авторы не обидятся):
врРекв=спПриемник.ПолучитьЗначение(спПриемник.ТекущаяСтрока()); Если врРекв="Код" Тогда прДлина=гБазаОлеПриемник.Метаданные.Справочник(гПриемник).ДлинаКода; прТип=гБазаОлеПриемник.Метаданные.Справочник(гПриемник).ТипКода; ИначеЕсли врРекв="Наименование" Тогда прТип="Строка"; прДлина=гБазаОлеПриемник.Метаданные.Справочник(гПриемник).ДлинаНаименования; Иначе СпрРевМДОле = гБазаОлеПриемник.Метаданные.Справочник(гПриемник).Реквизит(врРекв); Если СокрЛП(СпрРевМДОле .Вид)<>"" Тогда разд="."; КонецЕсли; прТип=СпрРевМДОле.Тип+разд+СпрРевМДОле.Вид; Здесь: врРекв - имя текущего реквизита "того" справочника прТип - искомый тип значения, о чем мы так долго говорили с Кро Остальные переменные думаю понятны. |
|||
83
а ля Скунк
24.12.05
✎
18:17
|
нет Кро хотела другое ...
есть справочник "МойСправочник" ... у него есть реквизит "МойРеквизит" ... его тип не определен... при внесении этому реквизиту могут быть присвоен любой тип... "документ" ... "справочник" ... "строка" ... и т.д. и т.п. .... вот какой тип значения у этого "МойРеквизит" ей и надо определить... причем у конкретного элемента справочника... метадата здесь не взлетит |
|||
84
Додельный
24.12.05
✎
18:18
|
Чет не пойму, где проблема то ?
При импорте в 8.0 из 7.7 работает такой код : СтрТипЗн = Соединение.ЗначениеВСтрокуВнутр(Объект); где Соединение - ОЛЕ соединение Объект - ОЛЕ объект к переносу --- Пилять, ну и код, смесь английского с нижегородским. Ну не знаешь языка, так какого из себя строить. И для кого ?! |
|||
85
а ля Скунк
24.12.05
✎
18:25
|
прежде чем пятки выворачивать... сперва за пробуй...
|
|||
86
Додельный
24.12.05
✎
18:26
|
(85) Это кусок из работающей обработки
|
|||
87
а ля Скунк
24.12.05
✎
18:42
|
я фих знает за 8 ... но в 77 ты получишь лыжи...
|
|||
88
insider
24.12.05
✎
18:47
|
(83) упс... я неправ, действительно не о том написал
(84) действительно работает, спасибо за интересную мысль, но как увидеть тип объекта, т.е. определить справочник это или документ возможно, но остальное - это нужно dd или dds ковырять или я неправ? |
|||
89
Додельный
24.12.05
✎
18:48
|
(88) ЗначениеВСтроку
|
|||
90
insider
24.12.05
✎
18:50
|
(89) если базы разные?
|
|||
91
Додельный
24.12.05
✎
18:51
|
Вообще для скорости я пользую ЗначениеВСтрокуВнутр, поскольку через него можно получить сразу тип, вид, и ид объекта.
А для того, чтобы получить идешники метаданных совершенно не обязательно парсить файлы и использовать внешние компоненты. Достаточно той же самой ЗначениеВстрокуВнутр |
|||
92
Додельный
24.12.05
✎
18:51
|
(90) В смысле ?!
|
|||
93
insider
24.12.05
✎
18:53
|
(91) что-то я не догнал. сформулирую по-другому:
в базе-источнике есть спр. "фирмы", номер таблицы например 127 в базе-приемнике такого справочника нет, есть другой (например "ЮрЛица", неважно) и номер таблицы 355, как я смогу использую ЗначениеИзСтрокиВнутр расшифровать то, что пришло из базы-источника, если у меня такого объекта в базе-приемнике отродясь не было? |
|||
94
а ля Скунк
24.12.05
✎
18:55
|
(93) ;)))
|
|||
95
insider
24.12.05
✎
18:56
|
(94) я че, глупость сморозил?
|
|||
96
а ля Скунк
24.12.05
✎
18:58
|
пока я мыслил как сказать... ты уже написал...
|
|||
97
insider
24.12.05
✎
19:01
|
(96) а... так вот я ж задаюсь вопросом, вероятно тогда парсить словарь данных - тогда метод годится как универсальный, а так... хорошо только для однохренственных баз
|
|||
98
а ля Скунк
24.12.05
✎
19:04
|
не знаю не заворачивался...
а куда пропала аффтор... |
|||
99
Додельный
24.12.05
✎
19:07
|
(93 и 97) "У меня такое чувство, что когда вы говорите, вы бредите" (с) не помню чей.
----- СтрТипЗн = Соединение.ЗначениеВСтроку(Объект); вернет примерно такое "Справочник","Номенклатура"," 092" СтрТипЗн = Соединение.ЗначениеВСтрокуВнутр(Объект); вернет что то типа "N"," 3453","0","0","0"," 89808 " так вот в обеих случаях, независимо от того разные это базы или нет, можно получить тип, вид, длинну, точность, внутренний идентификатор объекта и внутренний идентификатор вида метаданных объекта |
|||
100
Додельный
24.12.05
✎
19:09
|
Для того, чтобы получить идентификаторы видов метаданных совершенно не обязательно парсить DD или применять внешние компоненты.
Достаточно одной функции - ЗначениеВСтрокуВнутр |
|||
101
а ля Скунк
24.12.05
✎
19:13
|
еще раз напоминаю что речь идет о 7.7 ... там работа с ОЛЕй не много не так...
|
|||
102
Додельный
24.12.05
✎
19:13
|
У меня полностью универсальный экспорт построен только на ЗначениеВСтрокуВнутр
|
|||
103
Додельный
24.12.05
✎
19:14
|
(101) Так я ж семеркой по оле и работаю. Только не из семерки, а из 8.0
Не думаю, что методы ОЛЕ различаются в зависимости от программы, которая обращается по ОЛЕ |
|||
104
а ля Скунк
24.12.05
✎
19:16
|
я не знаю как 8 работает с 7.7 по ОЛИ... но если это делать в 7.7 вы получите клизму...
|
|||
105
Додельный
24.12.05
✎
19:24
|
(104) Это точно ? Тогда я просто в шоке.
|
|||
106
а ля Скунк
24.12.05
✎
19:25
|
7.7 не видит по ОЛИ кое что...
|
|||
107
а ля Скунк
24.12.05
✎
19:26
|
variant
|
|||
108
insider
24.12.05
✎
19:26
|
(105) точно, а насчет 8 - не знаю
|
|||
109
Додельный
24.12.05
✎
19:29
|
(108) В восмере точно работает.
|
|||
110
а ля Скунк
24.12.05
✎
19:31
|
а где же аффтор... хочу Оксану... поглядеть
|
|||
111
insider
24.12.05
✎
19:38
|
(109) значит доделали... а в семерке придется бодаться с глобальными переменными
|
|||
112
Додельный
24.12.05
✎
19:41
|
А если так :
Попытка Объект.Вид(); исключение сообщить("Это блин, не агрегатный тип данных"); конецесли; А строку, число и дату система сама преобразует друг в друга |
|||
113
а ля Скунк
24.12.05
✎
19:46
|
(112)Виды Расчетов... План Счетов... что бы еще такого вспомнить
|
|||
114
Додельный
24.12.05
✎
20:07
|
(113) Все тебе разжевать нужно
Попытка Объект.ТекущийЭлемент(); сообщить("Ура, справочник"); исключение сообщить("Не, это не справочник"); конецпопытки; Попытка Объект.ТекущийСчет(); сообщить("Ура, счет!"); исключение сообщить("Не, это не счет"); конецпопытки; Попытка а = Объект.ПриоритетВытеснения; сообщить("Ура, вид расчета"); исключение сообщить("Не, это не вид расчета"); конецпопытки; |
|||
115
а ля Скунк
24.12.05
✎
20:11
|
(114)скажи чем этот код лучше... чем я предложил... из двух строк...
|
|||
116
а ля Скунк
24.12.05
✎
20:11
|
или так абы побздеть
|
|||
117
Додельный
24.12.05
✎
20:13
|
(114) где ?
|
|||
118
Додельный
24.12.05
✎
20:14
|
А, увидел. Прикольно :-) Фантазия работает.
|
|||
119
а ля Скунк
24.12.05
✎
20:15
|
Перем глУсловие1 Экспорт;
далее OLEServer.глУсловие1 = ТоЧтоТебеНадоПроверить; ttt = OLEServer.EvalExpr("valuetypestr(глУсловие2)"); |
|||
120
а ля Скунк
24.12.05
✎
20:16
|
учусь...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |