Внешняя компонента - почему зависает 1С и как это устранить #115486


#0 by Beginner85
Народ подскажите, пожалуйста, начинающему: В процедуре ОбработкаПроведения документа есть вызов метода ПровестиДокумент самописной на Delphi внешней компоненты     глВнешняяКомпонента.ПровестиДокумент(Контекст); Внешняя компонента на Delphi: function TExtendClass.CallAsProc(lMethodNum: Integer; var paParams: PSafeArray{(OleVariant)}): HResult; stdcall; var     methMakeActionsDoc:     end; ... Вопрос: Как правильно обратиться к контексту документа, чтобы сформировать движения по регистру резервы?
#1 by зевака
может быть несколько причин: - как создаётся соединение - как оно используется В простых случаях можно копировать код 1С в Delphi, и всё работает. Однако, когда от примеров переходим к работе возникают нюансы: 1) объект внешнего соединения потоконебезопасен. 2) не рекомендовал бы его передавать из потока в поток вообще.
#2 by Beginner85
> В простых случаях можно копировать код 1С в Delphi, и всё работает Поподробнее, пожалуйста, как можно копировать код 1С в Delphi. При проведении нужно проанализировать итоги по регистру резервы, на их основании заполнить несколько периодических реквизитов(привязанных к документу) справочников и сделать движения по этому регистру. И все это сказано мне сделать во внешней компоненте 8-( А соединение создаю вот так: ....
#3 by Иде я
А зачем для этого внешняя компонента своя ? SQL запросы через ADO или еще какую нибудь компоненту
#4 by зевака
поподрорбнее... в 1С мы пишем:    Справочники.Контрагенты.Найти... берём и копируем это в Delphi:    v8.Справочники.Контрагенты.Найти... В 1С всё выполняется в контексте приложения, а в дельфях этот контекст требуется присобачить. И вся разница. Вот "живой" фрагмент кода:
#5 by Beginner85
> v8 := factory.createV8(infoBase); Это, наверное, специфично для восьмерки, а я пока еще на 7.7 ваяю Используя objGB := OleVariant(pConn).AppDispatch я получаю контекст приложения, но мне то нужно получить контекст проводимого документа и для этого я его передаю параметром в ПровестиДокумент(Контекст), в Delphi я этот параметр принимаю по ТСВК как IDispatch - таким образом, я понимаю, я могу обращаться к контексту модуля в Delphi так же как, например, идет обращение к контексту модуля документа в процедуре глСписаниеПартийТМЦ(Конт,ТаблНоменклатуры,...) Торговли и Склада 9.2 через переменную Конт
#6 by Beginner85
+ А оно виснет... 8`-(
#7 by зевака
factory - это мой объект (connection factory), управляющий соединением и предоставляющий дополнительные удобства. Но работает это всё действительно с 8-кой. Соответственно, все мои реплики теряют актуальность.
#8 by Beginner85
Все равно спасибо - может скоро пригодится to all: Может подскажет кто - что делать то - башку уже сломал []8-^[ ]
#9 by Beginner85
Up! Не бросайте утопающего начинающего!
#10 by MMF
regRezervy := doc.Регистр.Резервы;// <- вот тут 1С вылетает что такое Регистр?
#11 by Beginner85
Если без ВК, то это выглядело бы так а с ВК:
#12 by Beginner85
Если без ВК, то это выглядело бы так а с ВК:
#13 by romix
А че в дельфях уже можно по-русски писать? А попробуй через EvalExpr
#14 by Beginner85
Да - можно. Для типа OleVariant to all: Всем спасибо Оказыватся, 1С  не любит чтобы в ВК было обращение через 2 и более точек, вот так все получилось:
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям