Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) OLE (число прочтений - 10160 )
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
OLE
18. Августа 2012 :: 19:32
Печать  
Возможно ли расширение функционала [url=http://dorex.pro/?projects&formex]FormEx[/url] управлением окном и формами 1С 7.7 доступными через OLE? Быть может многое упустил, тогда прошу: не судить строго, но указать материал(ы) к изучению.

Проэкспериментировав отмечаю:
- объект [highlight]Окна[/highlight]: метод ЗакрытьОкно вызвал ошибку = Нужно передавать групповой контекст; в параметрах: лево, верх, ширина, высота - методов ПоложениеОкна и РазмерОкна возвратились непонятные результаты; параметры: стиль и параметр -вышеуказанных методов, а так же метода СтильОкна ничего не возвратили (анализировал с помощью Сообщить и ТипЗначенияСтр); ЦентрироватьОкно, Минимизировать, Максимизировать, МенюОкна - невзирая на передаваемый параметр влиял на окно-клиент; НаПереднийПлан, Восстановить не дали заметных результатов.
- [highlight]АтрибутФормы[/highlight].УстановитьАтрибут = Первым параметром должна быть расширяемая форма;
- [highlight]РасширениеФормы[/highlight].УстановитьФорму = Неверный параметр;
- методы объекта [highlight]Сервис[/highlight]: ВыполнитьПроцедуру, ВыполнитьФункцию = 0; ОткрытьПлавающуюФорму = Значение не представляет агрегатный объект (ОткрытьПлавающуюФорму); ПолучитьПеременнуюКонтекста = Значение не представляет агрегатный объект (ПолучитьПеременнуюКонтекста); УстановитьПеременнуюКонтекста - отчаявшись, не тестировал.

В первую очередь хотелось бы метод Видимость( v77, флаг ), где:
- флаг = 1 - делает окно видимым, 0 - скрывает;
- v77 = объект, получаемый:
[code]v77 = СоздатьОбъект( "V..." );
v77.Initialize( v77.RMTrade, "... );[/code]
И лишь затем методы/свойства форм, обращение к которым возможно через:
[code]v77.EvalExpr( "ОткрытьФорму( ""Справочник..."", Норм_Параметр )" );
к = v77.Норм_Параметр; // Контекст
ф = v77.Норм_Параметр.Форма; // Форма
э = v77.Норм_Параметр.ТекущийЭлемент(); // в данном случае элемент справочника[/code]

где, Норм_Параметр = Перем Норм_Параметр Экспорт; - в глобальном модуле OLE-сервера.

P.S: Прилагаемый файл (вн.отчёт) использовал в экспериментах.
« Последняя редакция: 18. Августа 2012 :: 20:58 - xxc »  

__005.rar ( 2 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: OLE
Ответ #1 - 18. Августа 2012 :: 19:34
Печать  
А зачем это ?
Нафига в оле еще и формекс использовать.. да и оле- в топку.
  
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #2 - 18. Августа 2012 :: 19:50
Печать  
Вы не вняли затеи. Полагаю, что FormEx без того успешно функционирует в OLE-сервере. OLE-сервер - не более чем hiddent-окно. В основе моей затеи: интерактивное взаимодействие с OLE-сервером. К примеру, ручной выбор элемента справочника.. для дальнейшей обработки в OLE-клиенте.

Кроме того, полагаю что задавать вопросы о расширении возможностей манипуляции окнами 1С:7.7 имеет смысл задавать тем, кто в этом лучшие из лучших. Однако сомневаюсь, что вы способны в этом отношении предложить кого-нибудь круче, чем [url=http://www.1cpp.ru/forum/YaBB.pl?action=viewprofile;username=alf]АЛьФ[/url] и прочих участников проекта [url=http://dorex.pro/?projects&formex]FormEx[/url].
« Последняя редакция: 18. Августа 2012 :: 21:02 - xxc »  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: OLE
Ответ #3 - 18. Августа 2012 :: 19:56
Печать  
это всё не нужно.
Можно, первое - выкинуть олю в топку,
второе - открыть процесс оле как обычное окно и выбирать там всё что угодно штатно, формекс там не нужен вовсе.
ЗЫ: show1c.exe в помощь
  
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #4 - 18. Августа 2012 :: 20:01
Печать  
show1c.exe - поделитесь? Кроме того, известны иные (более удобные) способы взаимодействия с базами под 1С:7.7 кроме через OLE? Обмен файлами не предлагать.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: OLE
Ответ #5 - 18. Августа 2012 :: 20:04
Печать  
да на проклубе валяется
ЗЫ: в понедельник скину, если не найдешь
  
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #6 - 18. Августа 2012 :: 20:18
Печать  
[url=http://clck.ru/1OsBl]show1c.exe[/url] ( [url=http://clck.ru/1OsC7]softsearch . ru[/url] ) + подозрение: 1c . proclub . ru почил.. Так что буду признателен, за поглядеть на чудо сие. Однако, судя по комментариям, show1c.exe - не самое удачное решение чтобы лицезреть окно OLE-сервера; при этом, единственное на что оно способно, сделать это окно visible, в придачу не самым удачным образом. Ручками (др. soft-ом) уже удалось решить аналогичную задачу, а вот (!) как воспользоваться ОткрытьПодбор()/ОбработкаПодбора() - мне покуда неведомо. К тому же show1c.exe - единственное и неполноценно решение из обнаруженного в ходе 3-ёх дневных поисков по теме: как осуществить интерактивный подбор в 1С:7.7.

[quote author=Eprst link=1345318328/0#3 date=1345319807]это всё не нужно.
Можно, первое - выкинуть олю в топку,
[/quote]

[quote author=xxc link=1345318328/0#4 date=1345320111]известны иные (более удобные) способы взаимодействия с базами под 1С:7.7 кроме через OLE?[/quote]

[quote author=Eprst link=1345318328/0#3 date=1345319807]второе - открыть процесс оле как обычное окно и выбирать там всё что угодно штатно, формекс там не нужен вовсе.
ЗЫ: show1c.exe в помощь[/quote]
Покуда видится следующее (не тестировал): из клиента на сервере открыть форму-обёртку с переменной содержащей обработку подбора, с помощью show1c.exe сделать сервер visible, с помощью WSH активизировать окно сервера, произвести выбор, убить соединение (уложившись в 2-ве минуты). В противном случае масса неудобств.

По моему это: криво.

P.S: Да и по правде говоря, дополнительных "велосипедов", познав супербайк [url=http://dorex.pro/?projects&formex]FormEx[/url], для работы с окнами 1С:7.7 уже и не хочется.
  
Наверх
ICQ  
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: OLE
Ответ #7 - 19. Августа 2012 :: 03:31
Печать  
Может не совсем понял затею, но что-то мне кажется открытие форм и выбор чего то там по ОЛЕ крайне неразумный подход. Уж лучше получить данные из сторонней базы хотяб средствами 1СРР и выбор делать на своей стороне. Тобишь к той базе сделать запрос сформировать в удобочитаемый вид данные и окна открывать уже все в рабочей базе
  
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #8 - 19. Августа 2012 :: 07:29
Печать  
Прежние обсуждения преймуществ/недостатков OLE и Show1c.exe [[url=http://www.kzn-chat.ru/forum9_files_313914.html]1[/url]], [[url=http://www.forum.mista.ru/topic.php?id=129589]2[/url]], [[url=http://www.forum.mista.ru/topic.php?id=92498]3[/url]].
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: OLE
Ответ #9 - 20. Августа 2012 :: 05:07
Печать  
Олю в топку, всё что надо - поиметь с помощью прямого запроса к сторонней базе, для показа/выбора- табличное поле на стороне клиента с показом в удобном виде (наименование, например).
  

show1c.rar ( 24 KB | Загрузки )
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #10 - 20. Августа 2012 :: 18:02
Печать  
[url=http://www.1cpp.ru/forum/YaBB.pl?num=1345318328/9#9]Eprst[/url], спасибо! Собрал [url=http://www.1cpp.ru/forum/YaBB.pl?num=1345318328/6#6]обёртку[/url] и упёрся в то, что не могу сообщить в клиент о том, что выбор произошёл. Печаль... Ничего иного, кроме как выгружать в файл, который читать в клиенте по таймеру, в голову не приходит.

По FormEx заметил: Окна.ПоложениеОкна( <Форма>, <Лево>, <Верх> ) - отрабатывает непонятно, а именно <Лево>, <Верх>. Использую 2.0.5.109 beta.
« Последняя редакция: 20. Августа 2012 :: 19:21 - xxc »  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: OLE
Ответ #11 - 21. Августа 2012 :: 06:00
Печать  
Делаешь прямой запрос к сторонней базе (формат её не важен, хоть к скулю запрос, хоть к дбф базе).
Выгребаешь оттуда например табличку вида ИД справочник, Наименование справочника.. эту табличку показываешь для подбора на клиенте.
Всё собственно, имеешь элементы справочника для фильтра.
  
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #12 - 21. Августа 2012 :: 19:52
Печать  
Разве «Делаешь прямой… имеешь элементы справочника для фильтра» [11] и «Уж лучше получить… сформировать в удобочитаемый вид данные и окна открывать уже все в рабочей базе» [7] по сути не одно и тоже? А так же упоминается по ссылкам [8]… Кроме того, так же как OLE, имеет ряд преймуществ и недостатков.

Проэкспериментировав и добившись положительных результатов, о которых позже, а так же более глубокого понимания возможностей хочу переформулировать первый вопрос темы, а именно: Возможно ли в FormEx добавить управление видимостью окон? А именно, показывать/скрывать основное окно процесса (главное окно программы)
  
Наверх
ICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: OLE
Ответ #13 - 22. Августа 2012 :: 01:36
Печать  
Единственная оправданная причина для использования OLE - это необходимость СОЗДАНИЯ объектов в другой базе.
Если же требуется только читать, то этот метод себя ни в коем случае не оправдывает:
1. Он жутко медленный.
2. Нередко при старте удаленная 1С задает глупые вопросы, но окно с вопросом не появляется, ни в панели задач, ни просто видимым не становится (его нетрудно достать через диспетчер задач, но это ж надо сперва догадаться, что надо заглянуть в диспетчер).
3. Необходимо создавать параллельных пользователей и хранить пароли от удаленной 1С, что есть и муторно и небезопасно.

Прямые же запросы могут не работать только, если удаленная 1С открыта монопольно, но и OLE в этом случае тоже не работает.

Если же очень хочется поиграться с видимостью окон, то здесь все просто: в winapi есть функция ShowWindow, которой надо передать только handle окна. Возможно, еще потребуяются некоторые функции типа EnumWindows и FindWindow(Ex). На форуме есть куча примеров, как получить доступ к функциям winapi.
  
Наверх
 
IP записан
 
xxc
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Краснодар
Зарегистрирован: 18. Августа 2012
Пол: Мужской
Re: OLE
Ответ #14 - 22. Августа 2012 :: 17:21
Печать  
«Единственная оправданная причина…» [13] — не единственная + изменение, удаление. Демка: 1208201331.7z (703 486 Байт). Как объектом Таймер вызывать процедуру/функцию внутри класса?

P.S: WinAPI - тема достойная отдельного разговора.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать