Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

OLE и 1С Поможет кто?
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 28 Sep 2005 20:07    Post subject: OLE и 1С Поможет кто? Reply with quote

В Фоксе импортирую документы в 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
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 28 Sep 2005 20:24    Post subject: Reply with quote

с 1С не экспериментировал
Нужно использовать ":" - это так
Попробуйте
V77:EvalExpr('CreateObject(Hb_OemToAnsi("Справочник.номенклатура"))')

Скажите результат плз
Back to top
View user's profile Send private message Send e-mail
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 28 Sep 2005 23:49    Post subject: Harbor на OEM Reply with quote

Идея совершенно правильная. По крайней мере
ll:=V77:Initialize(goV77:RMTrade, '/D' +lcBaza+HB_oemtoansi(' /NЭкспортер /P'), 'NO_SPLASH_SHOW')
теперь отрабатывает корректно.
А вот вызов справочников и документов никак пока не дается. Буду экспериментировать дальше.
В описаловках к OEM обмену везде фигурирует как ключевая фраза:
"все вызовы осуществляйте в английской нотации"
Так что осталось либо нащупать где ставить конвертацию, либо переписать вызовы именно не по русски, чтобы в принципе снять проблему.
Back to top
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 29 Sep 2005 02:17    Post subject: Строка? Reply with quote

Понятно что метод CreateObject() вызывается, но в качестве параметра у него символьная строка причем записанная в ANSI. Но я никак не могу методом "инженерного тыка" нащупать правильный вариант.
Back to top
View user's profile Send private message
Балуев Максим



Joined: 19 Sep 2003
Posts: 21
Location: Балуев
Occupation: Мобил-Экспресс (программист)
Interests: Кемерово

PostPosted: 29 Sep 2005 17:26    Post subject: Reply with quote

Писал я как-то печать ценников в 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
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 29 Sep 2005 17:28    Post subject: Help, me! Reply with quote

Ну "не выходит каменный цветок"
Никак не могу запустить метод CreateObject("объектметаданных")
Даже ограниченный Try оператор в лучшем случае переходит на Catch
Но зачастую просто вываливается из модуля, осавляя незакрытым 1С.
Back to top
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 29 Sep 2005 17:32    Post subject: Reply with quote

Балуев Максим 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
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 30 Sep 2005 12:47    Post subject: Бесполезно Reply with quote

Руки опускаются. Придется по старинке все выписывать из фокса, а из 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
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 30 Sep 2005 17:21    Post subject: Reply with quote

Ваши вопросы связаны с объектами 1С.
С майкрософт-объектами ошибок не видим, 1С счаз заниматься возможности нет - извините плз. Думаю найти можно было бы путь решения, пока некогда
Back to top
View user's profile Send private message Send e-mail
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 30 Sep 2005 17:39    Post subject: Все правильно. Reply with quote

Да действительно с Exel, Word и т.п. проблем и не было. Сказать что все дело в 1С тоже не совсем правильно. Я же в самом начале написал, что из VFP или даже из того же EXEL все вызывается на ура. Проблема кажется с передачей параметров и форматом символьной строки.
Значит закрываем тему до лучших времен. Но если у кого еще будут наводки буду рад.
Back to top
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 01 Oct 2005 00:27    Post subject: Есть вариант Reply with quote

Тему действительно закрываем. У меня отработал вариант:
sStr :='CreateObject('+chr(34)+Oemtoansi("Справочник.Номенклатура")+chr(34)+')'
Back to top
View user's profile Send private message
Титов Александр



Joined: 26 Jul 2002
Posts: 975
Location: Титов Александр Александрович
Occupation: Компания БЭСТ
Interests: Москва

PostPosted: 01 Oct 2005 10:11    Post subject: Re: Есть вариант Reply with quote

GVA wrote:
Тему действительно закрываем. У меня отработал вариант:
sStr :='CreateObject('+chr(34)+Oemtoansi("Справочник.Номенклатура")+chr(34)+')'

Работа в БЭСТе с объектами 1С - это круто!!!
Респек
_________________
С уважением, Александр Титов, Компания БЭСТ, Москва, отдел разрабо
Back to top
View user's profile Send private message Visit poster's website
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 03 Oct 2005 00:51    Post subject: Какая разница, куда и откуда. Reply with quote

А что прикажете делать, у меня два филиала сидят на 1С. Отгрузки ежедневно штук по 20 накладных, да в каждой до полсотни позиций.
Не перебивать же ручками. Выкручивался запуском Exe из под фокса, да вот "затянулся" попробовать без костылей напрямую. Может и доковыряю чисто из спортивного интереса.
А вот Максим - это молодец!
-Писал я как-то печать ценников в 1с (до FastReport).-
Красивый ход - использовать 1С для формирования Win бланков, зашел, напечатал, ушел
Back to top
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 05 Oct 2005 18:17    Post subject: Осталось совсем немного! Reply with quote

Работает практически все.
Остался один но важный шаг. Не отрабатывает метод 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
View user's profile Send private message
GVA



Joined: 16 Oct 2003
Posts: 99
Location: Gaponenko
Occupation: HDM
Interests: Москва

PostPosted: 06 Oct 2005 00:14    Post subject: Стандартные методы Ole класса Reply with quote

Если в отладчике посмотреть на созданный объект например справочник Tovar он представляется как "V77s.Application:EvalExpr" класс. Со стандартным перечнем методов куда входят например Set, Get, Invoke, и New именно он похоже и инициализируется вместо метода V77 класса.
В 1с это можно было бы записать как Tovar.Новый(). Значит вопрос -как же все таки вызвать метод.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru