Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Взаимодействие с другими приложениями (число прочтений - 3696 )
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Взаимодействие с другими приложениями
18. Апреля 2011 :: 17:59
Печать  
Есть база 8.2, есть стороннее приложение, с которым восьмерка должна быть тесно интегрирована. Под интеграцией подразумевается, что при выполнении некоторых действий (ну например, после нажатия спецательной кнопки) запускается стороннее приложение (или получает фокус, если оно уже было запущено) и выполняет некие действия, зависящие от того, что за кнопку нажали в 1С. Так же должна быть реализована обратная связь: кнопку нажали в стороннем приложении, а 1С отреагировала.

Стороннее приложение - это Делфи, и разработчики утверждают, что им все равно, каким способом будет реализовано взаимодействие - привяжутся к чему угодно.

А что в этом плане можно использовать в 1С? Как можно (и можно-ли) запускать и взаимодействовать с другими приложениями?
  
Наверх
 
IP записан
 
SiriuS
Junior Member
**
Отсутствует



Сообщений: 87
Зарегистрирован: 16. Февраля 2007
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #1 - 18. Апреля 2011 :: 21:25
Печать  
Используй OLE или ComConnector
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #2 - 19. Апреля 2011 :: 01:50
Печать  
Со стороны 1С - в дополнение к кнопкам есть Подписки на события.
У меня для обмена в БД 1С добавлены доп.таблицы, о которых 1С не знает, но обработчики подписок знают ... о периодическая обработка проверяет, не пришли ли данные извне.
Просто OLE на несколько порядков медленнее...
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #3 - 19. Апреля 2011 :: 04:27
Печать  
Обмен будет не ахти какой активный, передавать между приложениями информацию не часто и не много.
Типовой сценарий такой:
1С генерирует команду: показать данные по объекту №ХХХ, тип YYY. Сторонняя программа показывает объект, и пользователь какое-то время работает с ним. Потом обратное переключение - из программы просьба к 1С показать, например, историю. Объем передаваемых между программами данных - минимальный.

Обмениваться через доп таблицы можно, но не хочется - с базой данных работать будет немало пользователей, а эту таблицу придется опрашивать хотя бы раз в секунду с обеих сторон (и 1С и "Стороннее приложение" (далее - СП). Неаккуратненько.
При работе через ОЛЕ - СП не сможет передавать команды обратно к 1С. Или сможет, а я чего-то не знаю?

Подписки на события - это хорошо, а каким образом СП будет эти события генерировать?

Что еще человечество придумало для решения подобных задач?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #4 - 19. Апреля 2011 :: 04:51
Печать  
Разве в этом нет противоречия в classic писал(а) 19. Апреля 2011 :: 04:27:
Обмен будет не ахти какой активный, передавать между приложениями информацию не часто и не много.
с этим: classic писал(а) 19. Апреля 2011 :: 04:27:
таблицу придется опрашивать хотя бы раз в секунду с обеих сторон

Далее: classic писал(а) 19. Апреля 2011 :: 04:27:
Типовой сценарий такой:
1С генерирует команду: показать данные по объекту №ХХХ, тип YYY. Сторонняя программа показывает объект, и пользователь какое-то время работает с ним. Потом обратное переключение - из программы просьба к 1С показать, например, историю. Объем передаваемых между программами данных - минимальный.

Это выглядит как работа с ActiveX-объектом, хранящимся в 1С, т.е. никакой обмен тут вообще не требуется ... пример: рисунок в ворде.
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #5 - 19. Апреля 2011 :: 05:24
Печать  
Цитата:
Разве в этом нет противоречия

Противоречия нет, взаимодействие должно быть досточно быстрым. Нажал кнопку в 1С - и тут же система запустила/пелеключила тебя на СП, нажал кнопку в СП - через секунду ты в 1С.
А данных при этом передается всего ничего - команда + немного детализации. В пересчете на мегабайты в секунду получится исчезающе малая величина.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #6 - 19. Апреля 2011 :: 05:53
Печать  
classic писал(а) 19. Апреля 2011 :: 05:24:
Цитата:
Разве в этом нет противоречия

Противоречия нет, взаимодействие должно быть досточно быстрым. Нажал кнопку в 1С - и тут же система запустила/пелеключила тебя на СП, нажал кнопку в СП - через секунду ты в 1С.
А данных при этом передается всего ничего - команда + немного детализации. В пересчете на мегабайты в секунду получится исчезающе малая величина.

Потому и говорю, что OLE - это медленнно, т.к. оно неявно загружает еще одну 1С в память.
  
Наверх
 
IP записан
 
fishca
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Местоположение: Воронеж
Зарегистрирован: 03. Сентября 2010
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #7 - 19. Апреля 2011 :: 12:29
Печать  
Можно извернуться либо посылкой сообщения через Win32 API


Функция PostMessage

     Описание:
function PostMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Bool;

     Напpавляет сообщение окну пpикладной задачи.

     Паpаметpы:
     Wnd: Окно, котоpое будет пpинимать сообщение, или $FFFF для всех пеpекpываемых или всплывающих окон.
     Msg: Тип сообщения.
     wParam: Дополнительная инфоpмация о сообщении.
     lParam: Дополнительная инфоpмация о сообщении.

     Возвpащаемое значение:
     Не нуль в случае успешного завеpшения; 0 - если нет.

функция находится в файле user32.dll


Либо организовать мониторинг файлов в определенном каталоге
  
Наверх
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #8 - 19. Апреля 2011 :: 12:44
Печать  
fishca писал(а) 19. Апреля 2011 :: 12:29:
Можно извернуться либо посылкой сообщения через Win32 API

Либо организовать мониторинг файлов в определенном каталоге


Мониторинг файлов - это тоже самое, что создание общей таблицы в SQL базе, и опрос ее раз в секунду, например.

Про Win32 API: это, по моему, будет идеальный вариант. Хорошо разработчикам СП, у них никаких проблем с этим не будет, на делфи-то.
А как отправлять/принимать эти сообщения в 1С? Готовой внешней компоненты нет?
  
Наверх
 
IP записан
 
fishca
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Местоположение: Воронеж
Зарегистрирован: 03. Сентября 2010
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #9 - 19. Апреля 2011 :: 13:36
Печать  
classic писал(а) 19. Апреля 2011 :: 12:44:
fishca писал(а) 19. Апреля 2011 :: 12:29:
Можно извернуться либо посылкой сообщения через Win32 API

Либо организовать мониторинг файлов в определенном каталоге


Мониторинг файлов - это тоже самое, что создание общей таблицы в SQL базе, и опрос ее раз в секунду, например.

Про Win32 API: это, по моему, будет идеальный вариант. Хорошо разработчикам СП, у них никаких проблем с этим не будет, на делфи-то.
А как отправлять/принимать эти сообщения в 1С? Готовой внешней компоненты нет?


С мониторингом я имел ввиду следующее: если мы положили определенный файл в определенное место, то через внешнее соединение прога на делфях выдает нужную нам инфу, если делфи положила в определенное место нужный файл, то мы кидаем нужные данные в нужное место для делфей.

Для использования Win32 API можно использовать dynwrap.dll - внешняя обертка над апишными функциями, находится тута: http://www.script-coding.com/dynwrap.html
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #10 - 20. Апреля 2011 :: 02:05
Печать  
classic писал(а) 19. Апреля 2011 :: 12:44:
fishca писал(а) 19. Апреля 2011 :: 12:29:
Можно извернуться либо посылкой сообщения через Win32 API

Либо организовать мониторинг файлов в определенном каталоге


Мониторинг файлов - это тоже самое, что создание общей таблицы в SQL базе, и опрос ее раз в секунду, например.

Про Win32 API: это, по моему, будет идеальный вариант. Хорошо разработчикам СП, у них никаких проблем с этим не будет, на делфи-то.
А как отправлять/принимать эти сообщения в 1С? Готовой внешней компоненты нет?

Т.е. у тебя однозначно 1С и СП работают в одном сеансе винды?
Мое решение потому и реализовано так, что 1Ски находятся не только в разных сеансах, но и на разных серверах...
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Взаимодействие с другими приложениями
Ответ #11 - 20. Апреля 2011 :: 06:06
Печать  
Dmitry The Wing писал(а) 20. Апреля 2011 :: 02:05:
Т.е. у тебя однозначно 1С и СП работают в одном сеансе винды?
Мое решение потому и реализовано так, что 1Ски находятся не только в разных сеансах, но и на разных серверах...

Да, однозначно - в одном сеансе, и с ними работает один пользователь. Нужно обеспечить быстрое и прозначное переключение между этими приложениями. Программы дополняют друг-друга. 1С показывает данные в табличной форме, а СП - их же - в графической, и пользователю нужно видеть данные то так, то эдак.

Покурил немного Win32 api, попытался вспомнить, лет 10 назад сам на делфи писать пытался. Как-то все сложно получаетсяПечаль, неужели нельзя попроще двум программам пообщаться?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать