#0
by Rufige
Привет всем. Снова я. Есть проблема. Передаю в качестве параметра метода внешней компоненты Таблицу значений: vk.ВыгрузитьвДБФ(ТЗ); Внутри хочеццо подобавлять строки колонки и вернуть обратно. ну для начала неплохо бы просто ВыбратьСтроку Пишу при вызове ВыбратьСтроку ругается "Несовпадение типов" А при закрытии 1С остается процессом висеть в бэкграунде. Пишу на делфи 6 Заранее всем большое спасибо респект и уважуха... Если есть у кого то может кусочек кода - я сам ковырнусь ;-)
#2
by Rufige
на си немного не то Си то я прочту А вот в ком технологии еще очень плохо шарю Тем более различия в реализациях си с дельфи наверно не потяну с наскока Но спасиба за отклик ))
#4
by Rufige
Слушай, а ты если не сильно занят может пока в двух словах объяснишь... Вот смотри Есть желание работать с тз в таком ключе: )))) То есть создавать внутри ВК тз и кидать в 1С я умею. )) А вот с передачей готовой 1С в параметрах - проблема... А хотя на сях наверно все через инвоки только.... (((
#7
by Rufige
да это полюбому я всегда рад когда умные люди помогают ))) Че как почитать - полезна полюбому
#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)
#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
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Выбор группы в поле диалога
- Переход между платформами
- Бухгалтер жалуется что начал тормозить 1С....
- Печать штрих-кодов из 1С в формате code 39, codabar и code 128
- Ошибка: Неудачная попытка создания объекта (Excel.Application)
- За что отвечает библиотека frame.dll?
- количество транзакций за день
- Хелп! 1с работает в терминале только под администратором.
- Продолжение печати таблицы на одном листе
- Программно проверить принадлежность группе
- Перевод сертификата "1С:Специалист" на другую фирму
- v8: Расчет и перерасчет командировочных
- Таблицу Значений вывести на форму
- v7: Закрытие 10 счета
- Провести документы по одному контрагенту за период?
- Подчиненная таблица значений в форме справочника
- Как программно сохранить сохраняемые значения формы?
- Как ручками добавить строчку в книгу учета доходов и расходов?
- v7: Поле агрегатного объекта не обнаружено (ДатаНомерСчетаФактуры)
- Как потключить сом порт к 1С