Имя: Пароль:
1C
 
Перенос справочников по оле! Обработка значений неопределенного типа
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
учусь...