Имя: Пароль:
1C
 
Проблема с формой, открываемой в com-соединении
0 chihpyh
 
17.12.10
17:19
Вопрос в следующем: база 1С 8.1 подключена к другой базе, тоже 8.1 но другая конфигурация по COM-соединению. В процессе работы в соединении вызывается некая форма принадлежащая ко второй базе. Вот код:

ФормаВыбора = V8.Обработки.ВыборНоменклатуры.ПолучитьФорму("Осно внаяФорма", ЭтаФорма, ЭтаФорма);
ФормаВыбора.СтруктураИсходныхПараметров = СтруктураПараметровПодбора;
СтрПарам=ФормаВыбора.ОткрытьМодально();

Все работает хорошо, все действия в обработке производятся, все данные обратно передаются. Проблема в том, что при первом вызове эта форма не становится активной, т.е. она открывается, на панели задач ее видно, но на передний план не выскакивает. Приходится переключаться, что не очень удобно. Но при последующих открытиях она открывается нормально.
А вторая проблема в том, что при закрытии делается активным не то приложение, из которого вызывалась форма, а то, которое было активно перед ним. Т.е. фокус, что ли, пропадает у этого приложения?
Есть какие-нибудь решения у такой проблемы?
1 IronDemon
 
17.12.10
17:21
Эээ, формы в COM-соединении не существует.
2 Mitriy
 
17.12.10
17:22
(1) там апликейшн, по всей видимости...
3 chihpyh
 
17.12.10
17:30
Боюсь показаться невеждой, но я описал ситуацию как она есть. Может где-то с терминами накосячил...
Давайте попробую пояснить суть: мне из одной конфигурации нужно забраться в обработку другой конфигурации, ибо в ней прописана куча алгоритмов, которые мне очень лениво переносить в другую базу. Разные конфигурации, абсолютно разные. Так вот - подцепляюсь я к этой обработке, произвожу все необходимые действия и получаю их результат в исходное приложение. Здесь все отлично работает.
Но то, что происходит с активностью вызываемой формы мне решительно не нравится. При первом вызове она не вылетает на передний фон, а после закрытия она деактивирует окно исходного приложения и в него опять приходится переключаться. А это совершенно не приемлемо в рамках поставленной задачи.
4 Mitriy
 
17.12.10
17:37
(3) ну попытай Активизировать()... но тут все происходит на уровне ОС, поэтому фиг его знает... можно бубен купить...
5 Индиго
 
17.12.10
17:40
Зазубри как а б в...
Форма не юзается через ком.
Это визуальное представление данных, к которым у тебя только програмный доступ.
6 luns
 
17.12.10
17:43
(0) открывай модально.
7 Индиго
 
17.12.10
17:44
(6)Модально.Через СОМ.
Я б запасся попкорном и посмотрел на это :-)
8 luns
 
17.12.10
17:46
(7) запарили, не цепляйтесь к словам - смотрите в суть. человек неверно выразился. он юзает application.
там действительно есть такие проблемы с окнами.
9 Индиго
 
17.12.10
17:48
(8)>>Проблема с формой, открываемой в com-соединении

Это я один там вижу слово СОМ?
10 luns
 
17.12.10
17:50
(9) это и есть пример того, что "человек неверно выразился" потому ка дальше там еще есть слова.
например такие:
"т.е. она открывается, на панели задач ее видно"
11 Индиго
 
17.12.10
17:51
(10)Ну хорошо, попкрн уже принес:-). Молчу и жду зрелищ:)
12 Mitriy
 
17.12.10
17:52
V81.Application
чего привязались?
13 Mitriy
 
17.12.10
17:52
если в первый раз слышите, не делайте умный вид...
14 Индиго
 
17.12.10
17:53
(12)Да хоть как назови формы там не будет.
15 Mitriy
 
17.12.10
17:53
Для запуска системы 1С:Предприятие в качестве Automation-сервера из внешнего приложения, выполняется следующая последовательность действий:
создается COMОбъект с идентификатором V81.Application
выполняется инициализация системы 1С:Предприятие методом Connect
вызываются свойства и методы системы 1С:Предприятие как Automation-сервера
16 Mitriy
 
17.12.10
17:53
(14) да неужели?
17 chihpyh
 
17.12.10
17:53
V8 = Новый COMObject("V81.Application");

Аппликейшн? Я ж говорю - в терминах мог и наврать:

Так решаема эта проблема, в принципе? Бубен-то штука хорошая и надежная, да вот только куда им стучать? Щас Активизировать() попробую, но когда и оно не поможет, то прям не знаю, куда дальше рыть.
18 abitfrosty
 
17.12.10
17:53
Он подключается через OLE приложение, и там доступны формы. А вот с активностью у меня точно такие же проблемы, Активизировать() не помогает.
Возможно из-за того, что форма не принадлежит этому окну 1с предприятия, снизу в списке открытых окон этого окна тоже нет.
19 Индиго
 
17.12.10
17:54
(16)Ну как то так.
20 Mitriy
 
17.12.10
17:55
(19) если чего-то не знаешь, то это не обязано не существовать...
21 luns
 
17.12.10
17:55
можно попробовать положить на форму поле html документа и его обновить. при этом фокус перескочит на окно.
22 Индиго
 
17.12.10
17:56
(20)Код в студию, получения и вывода на экран формы хоть по оле хоть по ком?
23 Mitriy
 
17.12.10
17:58
(22) иди книжки читай...
24 chihpyh
 
17.12.10
17:58
Действительно. Активизировать() не помогает. Поле html положить на ту форму, из которой идет вызов? Т.е. на ту, которую требуется активизировать после закрытия вызываемой обработки?
25 Индиго
 
17.12.10
17:59
(23)Я так и думал, что ты это скажешь:).. Нет кода- иди тогда сам читай.
26 luns
 
17.12.10
18:00
(24) ну да. я когда чат писал столкнулся с тем, что при вызове УстановитьТекст (по таймеру было) 1с на себя фокус перехватывала.
это конечно танцы с бубном, но как вариант...
27 luns
 
17.12.10
18:01
(25) толсто, а пример кода еще в (0) был
28 Индиго
 
17.12.10
18:02
(27)Аха.То то он пришел, что оно не работает...
29 Mitriy
 
17.12.10
18:02
(24) я бы с обеими формами попытал... вообще, когда я это делал, то меня такие вещи вроде бы не напрягали... правда, по XP это было...
30 Mitriy
 
17.12.10
18:02
(28) убейся об стенку, а?
31 Индиго
 
17.12.10
18:04
(30)Злишься что ли?:)  Перестань.Ничего личного.
32 Mitriy
 
17.12.10
18:05
(31) да нет... за тебя стыдно...
33 Индиго
 
17.12.10
18:06
(32)Ну я переживу:-).
34 chihpyh
 
17.12.10
18:29
(28) Как раз форма-то работает. Все изумительно открывается и обрабатывается. Только вот активность скачет.
35 Индиго
 
17.12.10
18:34
(34)Именно через СОМ или мы о чем то разном говорим?
36 chihpyh
 
17.12.10
18:47
(35)
В терминах я уже запутался, показываю каким образом происходит соединение:

V8 = Новый COMObject("V81.Application");
Соединение=Неопределено;
Соединение=V8.Connect("File="+Путь+";Usr=Админ;Pwd=тех");

ФормаВыбора = V8.Обработки.ВыборНоменклатуры.ПолучитьФорму("ОсновнаяФорма", , );
ФормаВыбора.СтруктураИсходныхПараметров = СтруктураПараметровПодбора;
СтрПарам=ФормаВыбора.ОткрытьМодально();

С таким кодом открывается форма, в ней производятся некие интерактивные действия, результат которых возвращается в СтрПарам.
37 Индиго
 
17.12.10
19:12
(36)Открывается  или ты думаешь что ОТКРЫВАЕТСЯ?:-)
38 Индиго
 
17.12.10
19:13
Чет мне сдается что не открывается нифига.
39 chihpyh
 
20.12.10
13:54
(38)Ну и нудный ты товарищ, Индиго.
Сказано же русским по белому. Все открывается, все работает, все формы показывает, все данные обрабатывает и в нужном виде возвращает. Проблема ТОЛЬКО И ИСКЛЮЧИТЕЛЬНО с активностью этого нового окна.
40 chihpyh
 
21.12.10
13:54
Все, разобрался.
Для тех, у кого возникнет такой же вопрос: надо на форму кинуть элемент ПолеHTMLДокумента, сделать его невидимым, чтобы не мешался, и после вызова обработки из другой конфигурации выполнить команду:
ЭлементыФормы.ПолеHTMLДокумента1.Документ.parentWindow.focus();
Тогда изначальное приложение махом активизируется.
41 luns
 
21.12.10
14:15
(40) ну гуд. хотя и изврат. ))
42 Mitriy
 
21.12.10
14:23
(40) пасиб... может, и пригодится когда...
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший