Вызов процедур внутреннего языка 1С из внешней компоненты #482121


#0 by Igorexa1C
Здравствуйте! Начал разбираться с созданием внешних компонент в 1С, вопрос в том, чтобы выполнить процедуру языка 1С из внешней компоненты, так как это делается в Формексе. Мне нужно по наступлению события (нажатия клавиши, мыши) выполнить процедуру языка 1С. Спасибо
#1 by Igorexa1C
P.S. ВК пишу на Делфи, пользуюсь шаблоном, который предоставляет 1С
#2 by Rie
Экспортируемые подпрограммы Глобального модуля можно выполнять через EvalExpr и ExecuteBatch.
#3 by Igorexa1C
Но для этого надо запускать 1С как сервер автоматизации, я правильно понимаю? А мне нужно выполнить произвольную процедуру из модуля формы
#4 by orefkov
Тебе в IInitDone передают IDispatch. У него получи свойство AppDispatch. Это и есть 1С как сервер автоматизации. Тока есть беда с подсчетом ссылок, гугли "iinitdone appdispatch"
#5 by orefkov
Из модуля формы штатно через интерфейс ВК процедуру не вызовешь. Максимум, можешь через IAsyncEvent послать событие, а в форме обработать в ОбработкаВнешнегоСобытия
#6 by Igorexa1C
С оброботкой внешнего события пробовал, но оно меня не устроило ввиду небольшой скорости обработки. Во внешней компоненте я ставил хук на клавиатуру, а ловил в процедуре ОбработкаВнешнегоСобытия так вот задержка была примерно пол секунды, причем задержка именно в 1С, может быть можно увеличить скорость?
#7 by Igorexa1C
обрАботкой
#8 by Torquader
1С обрабатывает события примерно раз в секунду (если включить перехватчик событий Windows, то это даже можно увидеть). Быстрее можно сделать "хитрость", то есть на форму положить кнопочку или т.п. и потом "Нажать" её программно. Чтобы можно было что-то вызывать из модуля формы - нужно передавать тому, кто вызывает, контекст этой формы. P.S. после экспериментов с "прямыми" вызовами функций получил эффект, когда "умная" семёрка пересчитала бухгалтерские итоги в момент проведения документа - после чего понял, что нарушать стандартный хот событий в 1С - ЗЛО! ОбработкаВнешнегоСобытия - она не вызывается в момент постановки события в очередь (которая, кстати, может содержать несколько событий), а вызывается, когда 1С готова к обработке события, и уже не выполняет никакой код, что даёт гарантию правильности выполнения, но создаёт задержку.
#9 by Igorexa1C
Понял. Спасибо за ответы. Но все же интересно как сделано в Формексе, там ведь работает нормально?
#10 by Rie
В FormEx и в 1C++ народ немного поковырялся во внутренностях 1С. здесь регулярно бывает, спроси у него, как он это делал. Или скачай исходники 1С++ и погляди, что там внутри.
#11 by Igorexa1C
Хорошо, попробую посмотреть в исходниках, спасибо!
#12 by Igorexa1C
Да уж, исходники 1С++ скачал, но найти там фрагмент, который отвечает за вызов процедур внутреннего языка я так и не смог :( может быть авторы Формекс и 1с++  обратят внимание на мою ветку и подскажут решение проблемы? Заранее огромное спасибо :)
#13 by orefkov
На Дельфи огорчительно. А так смотри CBLModule7::CallAsFunc, CBLModule7::CallAsProc и где они вызываются.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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