c9+1c+OLE

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Lens
Новичок
Сообщения: 13
Зарегистрирован: 24 Ноябрь 2005, 18:50

c9+1c+OLE

Сообщение Lens »

Возникла необходимость, используя OLE, загрузить из 1с в queue некоторую информацию из поступления товаров - код в 1с примерно такой

Код: Выделить всё

   Док=Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("123",'20150114000000');
	НашлиДок=?(Док<>Документы.ПоступлениеТоваровУслуг.ПустаяСсылка(),1,0);
	Если НашлиДок Тогда
		Для Каждого ВыбрТов Из Док.Товары Цикл 
//  			Добавить в queue ВыбрТов.Номенклатура.Наименование
		КонецЦикла;
	КонецЕсли;
Как это можно сделать проще всего?
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

c9+1c+OLE

Сообщение morkovin »

Я делал так - выборка приходников из "наличных денег" (ДокументыНД) за период.Может поможет:

Код: Выделить всё

r1 routine
   ! Выборка=Журналыдокументов.ДокументыНД.Выбрать();
   ! Пока Выборка.Следующий() Цикл
   !   Сообщить(СокрЛП(Выборка.Учреждение)+" "+СокрЛП(Выборка.ОтКогоКому)+" "+СокрЛП(Выборка.Приход)+" "+СокрЛП(Выборка.Основание));

  OleFeq{PROP:Create} = 'V82.Application'
  UNHIDE(OleFeq)
  !initline = 'connect("File=""D:\MK1"";Usr=""ХXXXXX"";Pwd=""3110""")'

  initline = 'connect("File=""'&CLIP(MyPath)&'"";Usr=""'&CLIP(Loc:User)&'"";Pwd=""'&CLIP(Loc:Psw)&'""")'

  OLEFeq{Clip(InitLine)}

  str1"=YEAR(Loc:BegDate)&format(MONTH(Loc:BegDate),@n02)&format(DAY(Loc:BegDate),@n02)&'000001'

  str2"=YEAR(Loc:EndDate+1)&format(MONTH(Loc:EndDate+1),@n02)&format(DAY(Loc:EndDate+1),@n02)&'000001'
:
  Loc:DateStr=clip(str1")&','&clip(str2")


  SETCURSOR(Cursor:Wait)
    StrRef=OLEFeq{'Документы.НД_ПКО.Выбрать('&clip(Loc:DateStr)&')'}
     LOOP
        RetVal = OLEFeq{StrRef&'.Следующий()'}
        IF RetVal=0 THEN BREAK.
        !RefQueue.Kod    = OLEFeq{StrRef&'.Код'}
        RefQueue.Number = OLEFeq{StrRef&'.Номер'}
        RefQueue.Name   = OLEFeq{StrRef&'.ПринятоОт'}
        RefQueue.Osnov  = OLEFeq{StrRef&'.Основание'};
        MainStr    = OLEFeq{StrRef&'.СуммаДокумента'}
        OldStr=','
        NewStr='.'

        vuReplaceChars(MainStr , OldStr, NewStr) 
        
        RefQueue.SummaPKO  = MainStr
        RefQueue.Kogda = OLEFeq{StrRef&'.Дата'}

        m#=INSTRING(' ОТ ',UPPER(CLIP(RefQueue:Osnov)),1,1)
        m#=m#+3
        RefQueue.DR = DEFORMAT(SUB(RefQueue:Osnov,m#+1,10),@D17.)      !OLEFeq{StrRef&'.ВидОперации.ВидДокумента'}

        !parsing   
        IF INSTRING('_', SUB(RefQueue.Osnov,1,50), 1,1) > 0 AND INSTRING('/', SUB(RefQueue.Osnov,1,50), 1,1) > 0 THEN
        IF INSTRING('/ЗП', SUB(RefQueue.Osnov,1,50), 1,1)=0 THEN
         ADD(RefQueue); !add to my local queue
        END
        END
        Display;
 
     END;
WBR, morkovin
Lens
Новичок
Сообщения: 13
Зарегистрирован: 24 Ноябрь 2005, 18:50

c9+1c+OLE

Сообщение Lens »

morkovin писал(а):Я делал так - выборка приходников из "наличных денег" (ДокументыНД) за период.Может поможет:

Код: Выделить всё

r1 routine
   ! Выборка=Журналыдокументов.ДокументыНД.Выбрать();
   ! Пока Выборка.Следующий() Цикл
   !   Сообщить(СокрЛП(Выборка.Учреждение)+" "+СокрЛП(Выборка.ОтКогоКому)+" "+СокрЛП(Выборка.Приход)+" "+СокрЛП(Выборка.Основание));

  OleFeq{PROP:Create} = 'V82.Application'
  UNHIDE(OleFeq)
  !initline = 'connect("File=""D:\MK1"";Usr=""ХXXXXX"";Pwd=""3110""")'

  initline = 'connect("File=""'&CLIP(MyPath)&'"";Usr=""'&CLIP(Loc:User)&'"";Pwd=""'&CLIP(Loc:Psw)&'""")'

  OLEFeq{Clip(InitLine)}

  str1"=YEAR(Loc:BegDate)&format(MONTH(Loc:BegDate),@n02)&format(DAY(Loc:BegDate),@n02)&'000001'

  str2"=YEAR(Loc:EndDate+1)&format(MONTH(Loc:EndDate+1),@n02)&format(DAY(Loc:EndDate+1),@n02)&'000001'
:
  Loc:DateStr=clip(str1")&','&clip(str2")


  SETCURSOR(Cursor:Wait)
    StrRef=OLEFeq{'Документы.НД_ПКО.Выбрать('&clip(Loc:DateStr)&')'}
     LOOP
        RetVal = OLEFeq{StrRef&'.Следующий()'}
        IF RetVal=0 THEN BREAK.
        !RefQueue.Kod    = OLEFeq{StrRef&'.Код'}
        RefQueue.Number = OLEFeq{StrRef&'.Номер'}
        RefQueue.Name   = OLEFeq{StrRef&'.ПринятоОт'}
        RefQueue.Osnov  = OLEFeq{StrRef&'.Основание'};
        MainStr    = OLEFeq{StrRef&'.СуммаДокумента'}
        OldStr=','
        NewStr='.'

        vuReplaceChars(MainStr , OldStr, NewStr) 
        
        RefQueue.SummaPKO  = MainStr
        RefQueue.Kogda = OLEFeq{StrRef&'.Дата'}

        m#=INSTRING(' ОТ ',UPPER(CLIP(RefQueue:Osnov)),1,1)
        m#=m#+3
        RefQueue.DR = DEFORMAT(SUB(RefQueue:Osnov,m#+1,10),@D17.)      !OLEFeq{StrRef&'.ВидОперации.ВидДокумента'}

        !parsing   
        IF INSTRING('_', SUB(RefQueue.Osnov,1,50), 1,1) > 0 AND INSTRING('/', SUB(RefQueue.Osnov,1,50), 1,1) > 0 THEN
        IF INSTRING('/ЗП', SUB(RefQueue.Osnov,1,50), 1,1)=0 THEN
         ADD(RefQueue); !add to my local queue
        END
        END
        Display;
 
     END;
Спасибо. Может кому пригодится

Код: Выделить всё

    StrRef = OleFeq{'Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("123","20150114000000")'}
    loop i# = 0 to OleFeq{StrRef &'.Товары.Количество()'}-1
        RefQueue.Name = OleFeq{StrRef &'.Товары.Получить('& i# & ').Номенклатура.Наименование'}
	     add(RefQueue)
    .
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

c9+1c+OLE

Сообщение morkovin »

У меня не получалось достучаться до субконто.Там какая-то хитрая схема хранения. К счастью, это отпало само собой
WBR, morkovin
Ответить