OLE и 1С Поможет кто?
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2  Next  :| |:
-> Программирование в БЭСТ-4

#1: OLE и 1С Поможет кто? Author: GVALocation: Gaponenko PostPosted: 28 Sep 2005 20:07
    —
В Фоксе импортирую документы в 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

#2:  Author: nordkLocation: Горбунов Константин PostPosted: 28 Sep 2005 20:24
    —
с 1С не экспериментировал
Нужно использовать ":" - это так
Попробуйте
V77:EvalExpr('CreateObject(Hb_OemToAnsi("Справочник.номенклатура"))')

Скажите результат плз

#3: Harbor на OEM Author: GVALocation: Gaponenko PostPosted: 28 Sep 2005 23:49
    —
Идея совершенно правильная. По крайней мере
ll:=V77:Initialize(goV77:RMTrade, '/D' +lcBaza+HB_oemtoansi(' /NЭкспортер /P'), 'NO_SPLASH_SHOW')
теперь отрабатывает корректно.
А вот вызов справочников и документов никак пока не дается. Буду экспериментировать дальше.
В описаловках к OEM обмену везде фигурирует как ключевая фраза:
"все вызовы осуществляйте в английской нотации"
Так что осталось либо нащупать где ставить конвертацию, либо переписать вызовы именно не по русски, чтобы в принципе снять проблему.

#4: Строка? Author: GVALocation: Gaponenko PostPosted: 29 Sep 2005 02:17
    —
Понятно что метод CreateObject() вызывается, но в качестве параметра у него символьная строка причем записанная в ANSI. Но я никак не могу методом "инженерного тыка" нащупать правильный вариант.

#5:  Author: Балуев МаксимLocation: Балуев PostPosted: 29 Sep 2005 17:26
    —
Писал я как-то печать ценников в 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

#6: Help, me! Author: GVALocation: Gaponenko PostPosted: 29 Sep 2005 17:28
    —
Ну "не выходит каменный цветок"
Никак не могу запустить метод CreateObject("объектметаданных")
Даже ограниченный Try оператор в лучшем случае переходит на Catch
Но зачастую просто вываливается из модуля, осавляя незакрытым 1С.

#7:  Author: GVALocation: Gaponenko PostPosted: 29 Sep 2005 17:32
    —
Балуев Максим wrote:
Писал я как-то печать ценников в 1с (до sStr := OemToAnsi("CreateObject("+Chr(34)+"Таблица"+Chr(34)+")")
oTabl := oApp:EvalExpr(sStr)
oTabl:SourceTable(OemToAnsi(aPars[1]))

oSection := oTabl:GetSection(OemToAnsi("Ценник|Верт_Секция"))
[/quote]


Спасибо! Наверно это решение - насчет строки со спецсимволами. В полной мере отпишу вечером, но если у вас сработало хоть раз, значит ситуация решаема.

#8: Бесполезно Author: GVALocation: Gaponenko PostPosted: 30 Sep 2005 12:47
    —
Руки опускаются. Придется по старинке все выписывать из фокса, а из 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") - здесь " Ýêñïîðòåð " это "Экспортер" в другой кодировк

#9:  Author: nordkLocation: Горбунов Константин PostPosted: 30 Sep 2005 17:21
    —
Ваши вопросы связаны с объектами 1С.
С майкрософт-объектами ошибок не видим, 1С счаз заниматься возможности нет - извините плз. Думаю найти можно было бы путь решения, пока некогда

#10: Все правильно. Author: GVALocation: Gaponenko PostPosted: 30 Sep 2005 17:39
    —
Да действительно с Exel, Word и т.п. проблем и не было. Сказать что все дело в 1С тоже не совсем правильно. Я же в самом начале написал, что из VFP или даже из того же EXEL все вызывается на ура. Проблема кажется с передачей параметров и форматом символьной строки.
Значит закрываем тему до лучших времен. Но если у кого еще будут наводки буду рад.

#11: Есть вариант Author: GVALocation: Gaponenko PostPosted: 01 Oct 2005 00:27
    —
Тему действительно закрываем. У меня отработал вариант:
sStr :='CreateObject('+chr(34)+Oemtoansi("Справочник.Номенклатура")+chr(34)+')'

#12: Re: Есть вариант Author: Титов АлександрLocation: Титов Александр Александрович PostPosted: 01 Oct 2005 10:11
    —
GVA wrote:
Тему действительно закрываем. У меня отработал вариант:
sStr :='CreateObject('+chr(34)+Oemtoansi("Справочник.Номенклатура")+chr(34)+')'

Работа в БЭСТе с объектами 1С - это круто!!!
Респек

#13: Какая разница, куда и откуда. Author: GVALocation: Gaponenko PostPosted: 03 Oct 2005 00:51
    —
А что прикажете делать, у меня два филиала сидят на 1С. Отгрузки ежедневно штук по 20 накладных, да в каждой до полсотни позиций.
Не перебивать же ручками. Выкручивался запуском Exe из под фокса, да вот "затянулся" попробовать без костылей напрямую. Может и доковыряю чисто из спортивного интереса.
А вот Максим - это молодец!
-Писал я как-то печать ценников в 1с (до FastReport).-
Красивый ход - использовать 1С для формирования Win бланков, зашел, напечатал, ушел

#14: Осталось совсем немного! Author: GVALocation: Gaponenko PostPosted: 05 Oct 2005 18:17
    —
Работает практически все.
Остался один но важный шаг. Не отрабатывает метод NEW().
Ни для справочников ни для документов.
Ковырял в нотациях Tovar:New() Doc:New() Doc:new(1) Doc:New(0) Doc:new(Nil) doc:EvalExpr('New()')
По готовому документу спокойно работают все методы. В том числе и создание новой строки GoDoc:NewLine(), причем если параметры не обязательны, то и не пишу ничего лишнего.

Здесь надоедаю именно потому, что все эти методы без проблем отрабатывают из VFP, Exel, Delphi. В чем затык из под HARBOUR не могу нащупать.

#15: Стандартные методы Ole класса Author: GVALocation: Gaponenko PostPosted: 06 Oct 2005 00:14
    —
Если в отладчике посмотреть на созданный объект например справочник Tovar он представляется как "V77s.Application:EvalExpr" класс. Со стандартным перечнем методов куда входят например Set, Get, Invoke, и New именно он похоже и инициализируется вместо метода V77 класса.
В 1с это можно было бы записать как Tovar.Новый(). Значит вопрос -как же все таки вызвать метод.



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2  Next  :| |:
Page 1 of 2

Powered by phpBB © 2001, 2005 phpBB Group