Работа с таблицей значений во внешней компоненте #214632


#0 by Rufige
Привет всем. Снова я. Есть проблема. Передаю в качестве параметра метода внешней компоненты Таблицу значений:        vk.ВыгрузитьвДБФ(ТЗ); Внутри хочеццо подобавлять строки колонки и вернуть обратно. ну для начала неплохо бы просто ВыбратьСтроку Пишу при вызове ВыбратьСтроку ругается "Несовпадение типов" А при закрытии 1С остается процессом висеть в бэкграунде. Пишу на делфи 6 Заранее всем большое спасибо респект и уважуха... Если есть у кого то может кусочек кода - я сам ковырнусь ;-)
#1 by Каанкереде
есть, но на Си..
#2 by Rufige
на си немного не то Си то я прочту А вот в ком технологии еще очень плохо шарю Тем более различия в реализациях си с дельфи наверно не потяну с наскока Но спасиба за отклик ))
#3 by Каанкереде
жди, тут есть спецы по ВК на дельфи, и их больше чем Сишников :)
#4 by Rufige
Слушай, а ты если не сильно занят может пока в двух словах объяснишь... Вот смотри Есть желание работать с тз в таком ключе: )))) То есть создавать внутри ВК тз и кидать в 1С я умею. )) А вот с передачей готовой 1С в параметрах - проблема... А хотя на сях наверно все через инвоки только.... (((
#5 by romix
А вот я буду рад примеру на C (вообще не знаю тему)...
#6 by Rufige
*с передачей готовой ТЗ ))
#7 by Rufige
да это полюбому я всегда рад когда умные люди помогают ))) Че как почитать - полезна полюбому
#8 by MMF
дык не надо увеличивать счетчик интерфейса и не будет висеть
#9 by MMF
function TAddInObject.CallAsProc(lMethodNum: Integer; var paParams: PSafeArray{(OleVariant)}): HResult; stdcall; begin  case TMethods(lMethodNum) of  VT.НоваяСтрока; или, если критична скорость - использовать статическое определение диспинтерфейса ТЗ + для колонок определять диспид динамически
#10 by Rufige
а не увеличиваешь всеравно висит Причем тут я его увеличиваю в двух местах пробовал в каком либо одном методе - висит Пробовал ваще не увеличивать - висит но проблема основная в вызове ВыбратьСтроку :)) Висяк то ладно Оппа... спасибо буду пробовать не... динамически не хочу :0)
#11 by MMF
ну в принципе, это дает примерно 15% ускорения на массовых вызовах методов ТЗ.    else      if TVarData(VarResult).VType = varByRef or varVariant then end; а диспид свойств: function GetNameDisp(Obj: OleVariant; name: String): integer; Var end; статические идентификаторы ТЗ:     Function ColumnCount:Double;  dispid 1;     Function NewColumn(Ident:WideString;Tip:WideString;Len,Per:Double):Double;  dispid 2;     Function InsertColumn(Ident:WideString;NomKol:Double;Tip:WideString;Len,Per:Double):Double;  dispid 3;     Procedure DeleteColumn(Ident:OleVariant);  dispid 4;     Procedure DeleteLine(Ident:Double);  dispid 7;     Procedure DeleteLines;  dispid 8;     Procedure SelectLines;  dispid 9;     Function GetLine:Double;  dispid 10;     Function GetValue(Row,Col:Double):Olevariant;  dispid 13;     Procedure SetValue(Row,Col:Double;Value:Olevariant);  dispid 12;     Function GetColumnParameters(Col:OLEVariant):OLEVariant;  dispid 29;     Procedure Unload(TZtoUnload: OLEvariant; FromLine,ToLine: Double; Fields: WideString);  dispid 25;     Procedure Sort(Fields: WideString; DocMode: Double);  dispid 15;     Function FindValue(Value: OLEVariant; Ident:WideString; Column: WideString): double;  dispid 14;  end;
#12 by Rufige
Вот это да ))) Здорово, дружище. Вот ты Человек. Слушай смотри предыдущая реализация твоя... щаз попробовал вот так function T_vk_object.meth5(mode: TMode; var pvarRetValue: OleVariant): String; begin  case mode of .... где Ведь отличий от твоего примера нет на первый взгляд а не работает - зависает + при вызове ВыбратьСтроку - ерр:"Несовпадение типов" Может дело в реализации GetNParam?
#13 by MMF
ВыбратьСтроку(<Строка>,<Заголовок>,<Таймаут>). Все параметры укажи. И выкинь свой код, глобальные переменные это нехорошо.
#14 by Rufige
а у мя собственно все переменные - это поля класса ) T_vk_object он криэйтится в TAddInObject Тебе спасибо ваще... С меня пиво при случае В Самаре будешь если - 100% Я пиво люблю :0)
#15 by Rufige
Емма здоровска вызвал НоваяКолонка - все окей Еще раз мерси
#16 by Rufige
Вообще такую тему надо в базу знаний. Вроде все просто а вот начнешь незнамши делать - проблема целая. Я 2 дня потратил на то чтобы из формы которую ВК создает вызвать внешнее событие в 1С потом еще 2 дня на то чтобы создать тз в ВК и вернуть в 1С и еще 2 дня на данную тему. Хороший у вас форум ребят )) Молодцы
#17 by MMF
учти особенности ВК, при загрузке ВК экземпляр TAddInObject создается как минимум два раза, поэтому с глобальными переменными и членами класса не все просто (в странице свойств компоненты они имеют одно значение, в методах ILanguageExtender другое, поскольку экземпляры объекта разные).
#18 by Rufige
да да да я это заметил И соарон еще написал что как минимум 2. И вот у меня вопрос возник тогда зачем 2 раза? - видимо на каждой стороне и еще один вопрос как тогда с этим бороться )) Просто у меня создается форма - при создании выдает мессагу И вот когда я вызываю из 1С метод создающий форму - мессага показывается 2 раза ))))) Может просто напросто кидать мессагу при показе формы - показывается то она одна )))
#19 by MMF
"как с этим бороться?" - не понял с чем бороться. Если нужно в init создавать единственный экземпляр чего-нить - взводи флаг и проверяй перед созданием (в инициализации модуля флаг сбрось). Про форму какие-то страсти :-) код показывай
#20 by Rufige
Да не не страсти )) смотри все я с твоей помощью догнал: function AddInObject.CallAsFunc(lMethodNum: Integer; var pvarRetValue: OleVariant; var paParams: PSafeArray): HResult; stdcall; begin
#21 by Rufige
а по хорошему надо как ты сказал :-) if not flag then begin end;
#22 by MMF
сишную любовь к m_ надо искоренять. В дельфи приватные члены класса пишутся с FName :-)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С