Clarion, Clarion 7
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Lens
Новичок
Сообщения: 13 Зарегистрирован: 24 Ноябрь 2005, 18:50
Сообщение
Lens » 05 Февраль 2015, 13:54
Возникла необходимость, используя OLE, загрузить из 1с в queue некоторую информацию из поступления товаров - код в 1с примерно такой
Код: Выделить всё
Док=Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("123",'20150114000000');
НашлиДок=?(Док<>Документы.ПоступлениеТоваровУслуг.ПустаяСсылка(),1,0);
Если НашлиДок Тогда
Для Каждого ВыбрТов Из Док.Товары Цикл
// Добавить в queue ВыбрТов.Номенклатура.Наименование
КонецЦикла;
КонецЕсли;
Как это можно сделать проще всего?
Lens
morkovin
Ветеран
Сообщения: 908 Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:
Сообщение
morkovin » 05 Февраль 2015, 18:28
Я делал так - выборка приходников из "наличных денег" (ДокументыНД) за период.Может поможет:
Код: Выделить всё
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
morkovin
Lens
Новичок
Сообщения: 13 Зарегистрирован: 24 Ноябрь 2005, 18:50
Сообщение
Lens » 06 Февраль 2015, 11:08
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)
.
Lens
morkovin
Ветеран
Сообщения: 908 Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:
Сообщение
morkovin » 06 Февраль 2015, 11:35
У меня не получалось достучаться до субконто.Там какая-то хитрая схема хранения. К счастью, это отпало само собой
WBR, morkovin
morkovin