View previous topic :: View next topic |
Author |
Message |
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 28 Sep 2005 20:07 Post subject: OLE и 1С Поможет кто? |
|
|
В Фоксе импортирую документы в 1с примерно по такой схеме:
V77 = CREATEOBJECT('V1CEnterprise.Application')
tt = V77.Initialize(V77.RMTrade, '/D' +lcBaza+' /NЭкспортер /P', 'NO_SPLASH_SHOW')
Tovar = V77.EvalExpr('CreateObject("Справочник.номенклатура")')
или
DOC = goV77.CreateObject("Документ.ПоступлениеТМЦ")
обратите внимание на "." как разделитель свойств объекта.
Аналогичный код в Harbor вызывает ошибку компиляции "." - недопустимый символ.
По примеру из Helpa вызова EXEL заменяю "." на ":", но тогда 1с не воспринимает команд.
А на V77:CreateObject("Справочник.номенклатура") вообще вываливается из модуля SCLAD.
Как правильно записать обращение к свойствам объекта?
Last edited by GVA on 05 Oct 2005 18:08; edited 2 times in total |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 28 Sep 2005 20:24 Post subject: |
|
|
с 1С не экспериментировал
Нужно использовать ":" - это так
Попробуйте
V77:EvalExpr('CreateObject(Hb_OemToAnsi("Справочник.номенклатура"))')
Скажите результат плз |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 28 Sep 2005 23:49 Post subject: Harbor на OEM |
|
|
Идея совершенно правильная. По крайней мере
ll:=V77:Initialize(goV77:RMTrade, '/D' +lcBaza+HB_oemtoansi(' /NЭкспортер /P'), 'NO_SPLASH_SHOW')
теперь отрабатывает корректно.
А вот вызов справочников и документов никак пока не дается. Буду экспериментировать дальше.
В описаловках к OEM обмену везде фигурирует как ключевая фраза:
"все вызовы осуществляйте в английской нотации"
Так что осталось либо нащупать где ставить конвертацию, либо переписать вызовы именно не по русски, чтобы в принципе снять проблему. |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 29 Sep 2005 02:17 Post subject: Строка? |
|
|
Понятно что метод CreateObject() вызывается, но в качестве параметра у него символьная строка причем записанная в ANSI. Но я никак не могу методом "инженерного тыка" нащупать правильный вариант. |
|
Back to top |
|
|
Балуев Максим
Joined: 19 Sep 2003 Posts: 21 Location: Балуев Occupation: Мобил-Экспресс (программист) Interests: Кемерово
|
Posted: 29 Sep 2005 17:26 Post subject: |
|
|
Писал я как-то печать ценников в 1с (до FastReport). Может поможет разобраться.
Code: |
Function PrnCennik()
Private oApp, nCol, nRow, oTabl, sStr, oInputField, oSection
DbPush("aZebra",,"Ins")
aZebra->(DbGoTop())
If aZebra->(!Eof())
TRY
oApp := CreateObject("V77.Application")
CATCH
Alert("Программа 1С не доступена!")
DbPop()
Return
END
oApp:Initialize(oApp:RmTrade,"/D" + OemToAnsi(aPars[2]) + " /M","")
nCol := 3
nRow := 0
sStr := OemToAnsi("CreateObject("+Chr(34)+"Таблица"+Chr(34)+")")
oTabl := oApp:EvalExpr(sStr)
oTabl:SourceTable(OemToAnsi(aPars[1]))
Do While aZebra->(!Eof())
nCol := If(nCol > 1, 0, nCol + 1)
nRow := If(nCol = 0, nRow + 1, nRow)
If nRow > 7
oTabl:NewPage()
nRow := 1
EndIf
oSection := oTabl:GetSection(OemToAnsi("Ценник|Верт_Секция"))
oInputField := oSection:Area("R2C1:R2C4")
oInputField:Text := OemToAnsi(AllTrim(mlabel->Name))
oInputField := oSection:Area("R3C2")
oInputField:Text := OemToAnsi(AllTrim(mlabel->Marka))
oInputField := oSection:Area("R3C4")
oInputField:Text := Round(mlabel->Koef1,3)
oInputField := oSection:Area("R4C1:R4C4")
oInputField:Text := OemToAnsi("Цена "+AllTrim(Str(mPrice->SumOutr,19,2))+" руб.")
If nCol = 0
oTabl:PutSection(oSection)
Else
oTabl:AttachSection(oSection)
EndIf
aZebra->(Reclock())
aZebra->Ins := .F.
aZebra->(f_DbUnLock())
aZebra->(DbSkip())
EndDo
oTabl:Print(0)
EndIf
DbPop()
Return
|
|
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 29 Sep 2005 17:28 Post subject: Help, me! |
|
|
Ну "не выходит каменный цветок"
Никак не могу запустить метод CreateObject("объектметаданных")
Даже ограниченный Try оператор в лучшем случае переходит на Catch
Но зачастую просто вываливается из модуля, осавляя незакрытым 1С. |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 29 Sep 2005 17:32 Post subject: |
|
|
Балуев Максим wrote: | Писал я как-то печать ценников в 1с (до sStr := OemToAnsi("CreateObject("+Chr(34)+"Таблица"+Chr(34)+")")
oTabl := oApp:EvalExpr(sStr)
oTabl:SourceTable(OemToAnsi(aPars[1]))
oSection := oTabl:GetSection(OemToAnsi("Ценник|Верт_Секция"))
| [/quote]
Спасибо! Наверно это решение - насчет строки со спецсимволами. В полной мере отпишу вечером, но если у вас сработало хоть раз, значит ситуация решаема. |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 30 Sep 2005 12:47 Post subject: Бесполезно |
|
|
Руки опускаются. Придется по старинке все выписывать из фокса, а из HARBOR ? или даже Fileeval? как это и делал раньше запускать готовый exe- шник.
Затык именно на запуске Tovar:=oapp:CreateObject("Справочник.Товары").
Внимание! При записи именно в таком виде оператор обрамленный Try CATCH вываливает напрочь модуль SKLAD, как выполнивший недопустимую операцию. Запись в виде Tovar:=oapp:EvalExpr('CreateObject("Справочник.Товары")') по крайней мере хоть корректно попадает на веточку CATCH. В приведенном операторе комбинации из одиночных, двойных кавычек и Chr(34) ни коим образом не меняют ситуацию, потому как в итоге приводятся к одному виду, если следить за переменной из отладчика.
А игры с выворачиванием символьных строк через HB_OEMTOANSI() тоже ни к чему. Если например писать в FAR и менять в нужном месте кодировку по F8, то все отрабатывает корректно. Проверял например на операторе ll:=goV77:Initialize(goV77:RMTrade,"/DC:\DARAM /NÝêñïîðòåð /P", "NO_SPLASH_SHOW") - здесь " Ýêñïîðòåð " это "Экспортер" в другой кодировк |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 30 Sep 2005 17:21 Post subject: |
|
|
Ваши вопросы связаны с объектами 1С.
С майкрософт-объектами ошибок не видим, 1С счаз заниматься возможности нет - извините плз. Думаю найти можно было бы путь решения, пока некогда |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 30 Sep 2005 17:39 Post subject: Все правильно. |
|
|
Да действительно с Exel, Word и т.п. проблем и не было. Сказать что все дело в 1С тоже не совсем правильно. Я же в самом начале написал, что из VFP или даже из того же EXEL все вызывается на ура. Проблема кажется с передачей параметров и форматом символьной строки.
Значит закрываем тему до лучших времен. Но если у кого еще будут наводки буду рад. |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 01 Oct 2005 00:27 Post subject: Есть вариант |
|
|
Тему действительно закрываем. У меня отработал вариант:
sStr :='CreateObject('+chr(34)+Oemtoansi("Справочник.Номенклатура")+chr(34)+')' |
|
Back to top |
|
|
Титов Александр
Joined: 26 Jul 2002 Posts: 975 Location: Титов Александр Александрович Occupation: Компания БЭСТ Interests: Москва
|
Posted: 01 Oct 2005 10:11 Post subject: Re: Есть вариант |
|
|
GVA wrote: | Тему действительно закрываем. У меня отработал вариант:
sStr :='CreateObject('+chr(34)+Oemtoansi("Справочник.Номенклатура")+chr(34)+')' |
Работа в БЭСТе с объектами 1С - это круто!!!
Респек _________________ С уважением, Александр Титов, Компания БЭСТ, Москва, отдел разрабо |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 03 Oct 2005 00:51 Post subject: Какая разница, куда и откуда. |
|
|
А что прикажете делать, у меня два филиала сидят на 1С. Отгрузки ежедневно штук по 20 накладных, да в каждой до полсотни позиций.
Не перебивать же ручками. Выкручивался запуском Exe из под фокса, да вот "затянулся" попробовать без костылей напрямую. Может и доковыряю чисто из спортивного интереса.
А вот Максим - это молодец!
-Писал я как-то печать ценников в 1с (до FastReport).-
Красивый ход - использовать 1С для формирования Win бланков, зашел, напечатал, ушел |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 05 Oct 2005 18:17 Post subject: Осталось совсем немного! |
|
|
Работает практически все.
Остался один но важный шаг. Не отрабатывает метод NEW().
Ни для справочников ни для документов.
Ковырял в нотациях Tovar:New() Doc:New() Doc:new(1) Doc:New(0) Doc:new(Nil) doc:EvalExpr('New()')
По готовому документу спокойно работают все методы. В том числе и создание новой строки GoDoc:NewLine(), причем если параметры не обязательны, то и не пишу ничего лишнего.
Здесь надоедаю именно потому, что все эти методы без проблем отрабатывают из VFP, Exel, Delphi. В чем затык из под HARBOUR не могу нащупать. |
|
Back to top |
|
|
GVA
Joined: 16 Oct 2003 Posts: 99 Location: Gaponenko Occupation: HDM Interests: Москва
|
Posted: 06 Oct 2005 00:14 Post subject: Стандартные методы Ole класса |
|
|
Если в отладчике посмотреть на созданный объект например справочник Tovar он представляется как "V77s.Application:EvalExpr" класс. Со стандартным перечнем методов куда входят например Set, Get, Invoke, и New именно он похоже и инициализируется вместо метода V77 класса.
В 1с это можно было бы записать как Tovar.Новый(). Значит вопрос -как же все таки вызвать метод. |
|
Back to top |
|
|
|