Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Внешнее ПО на упр. формах

Внешнее ПО на упр. формах
Я
   breezee
 
21.09.16 - 19:44
Добрый вечер! Есть внешнее ПО по печати конвертов. На обычных формах отрабатывало нормально, обработку с вызовом ПО перенесли на управляемые в другую базу- когда второй раз идет обращение к ПО - база виснет и ПО тоже. В чем может быть проблема? Какая принципиальная разница к обращению к внешнему ПО на управляемых и обычных формах?
 
 
   mehfk
 
1 - 21.09.16 - 19:46
Что подразумевается под "обращением к внешнему ПО"?
   Джинн
 
2 - 21.09.16 - 19:46
(0) Разница в том, кто к нему обращается - сервер или клиент.
   Asmody
 
3 - 21.09.16 - 19:46
(0) И как вы к нему обращайтесь?
   breezee
 
4 - 21.09.16 - 19:49
(1)
Я открываю программно обращаюсь к com объекту и открываю программу. Все на клиенет
 pepro= ПолучитьCOMОбъект("","PEPro.Application");


&НаКлиенте
Функция ПередПечатьюКонверта()
    Перем current_foreground_win;
    current_foreground_win= "";
    Если api_version>0 Тогда
        pepro.SetFlagShowFormsAsModal(0);
        pepro.SetFlagParseZipIndexFromAddress(1);
        Если счётчик_печати<>0 тогда
            current_foreground_win= pepro.OpenDummyFormToSetAsForeground();
            
            Если Актив = Ложь Тогда
            АктивизироватьПрограмму("Печать конвертов!");
            Актив = Истина;
            КонецЕсли;
        
        КонецЕсли;
        счётчик_печати= счётчик_печати+1;
    КонецЕсли;
    Возврат current_foreground_win;
КонецФункции


Получаю Процедура АктивизироватьПрограмму(title)
    Перем сч;
    сч= 0;
    пока ((shell.AppActivate(title)=0) and (сч<999)) цикл
        сч= сч+1;
    конеццикла;
    
    если сч=999 тогда
        сообщить("не могу активизировать " + title);
    иначе
        shell.AppActivate(title);
    конецесли;
КонецПроцедуры
   H A D G E H O G s
 
5 - 21.09.16 - 19:56
Формочка открывается модально, но не может прорисоваться, так как форма 1С ждет ее закрытия, не?

Попробовать выполнять этот кот по нажатию кнопки
   Torquader
 
6 - 21.09.16 - 19:56
Вопрос первый - если два раза создать объект этой программы - что происходит ?
Потому как, управляемые формы могут открываться в разных вкладках (окнах), и, возможно, вы запускаете второй экземпляр того, что должно быть в одном.
   Torquader
 
7 - 21.09.16 - 19:58
(5) Просто, на Windows 7 решили, что посторонняя программа может стать активной, только если она в текущем активном потоке ввода - то есть перед установкой активного окна нужно подключаться к текущему активному потоку.
   breezee
 
8 - 21.09.16 - 20:05
(5) У меня же прям отдельное приложение, а не форма открывается в 1С. Хотя за идею спасибо. Надо сделать наерное, чтобы 2 раза не открывалось
(6) Должны передаться новые документы на печать каждый раз, при открытии
Вообше каждый раз после вызова ПО и после того как ОП отработало вызвается вот этот код. Я так понял он и закрывает формы
Процедура ПослеПечатиКонверта(current_foreground_win)
    Если api_version>0 и счётчик_печати<>1 Тогда
        pepro.CloseDummyFormAndSetAsForeground(current_foreground_win);
    КонецЕсли;
КонецПроцедуры

(7) У пользователя XP (сам удивился)
   breezee
 
9 - 21.09.16 - 20:08
(8) "current_foreground_win" это "специальное фиктивное маленькое "подготовительное" немодальное окошко, чтобы иметь возможность перенести его на передний план" 

а "CloseDummyFormAndSetAsForeground" - "метод позволяет закрыть специальное фиктивное маленькое "подготовительное" немодальное окошко, и заставить его перенести на передний план перед своим закрытием другое."

Т.е. окно нормально закрывается
   breezee
 
10 - 21.09.16 - 20:26
Посмотрел описание функций, подумал что могуть быть проблемы с "SafeLoadDatabase"- "Для загрузки базы данных и проверки того, что она загружена"
На самом деле тычу пальцем в небо. Как этом можно отладить вообще?
 
 Рекламное место пустует
   H A D G E H O G s
 
11 - 21.09.16 - 20:34
(10) ты код в кнопку перенести попробовал?
   breezee
 
12 - 21.09.16 - 20:36
(11) Так и так по кнопке печать вызывается. Когда второй раз пользователь нажимает - все виснит
   breezee
 
13 - 21.09.16 - 20:40
Лално, всем спасибо, завтра еще раз попробую пройтись отладкой
   Torquader
 
14 - 21.09.16 - 21:04
Зачем тебе переносить какие-то другие окна - достаточно активизировать ту программу, которую ты запустил, а перед её закрытием - активизировать 1С.
Ещё не забывай, что OLE меж процессами работает через очередь сообщений, то есть или нужно закрывать окно (и разрушать очередь) после того, как от тебя отсоединились, или на соединении объекта вызывать DisconnectObject для того, чтобы Proxy в другом процессе завершилась и не ждала у моря погоды.
Объект-то может остаться в "подвешенном состоянии" с первого закрытия, и, когда ты его второй раз цепляешь, то получаешь из таблицы объектов "уже труп".
   Garykom
 
15 - 21.09.16 - 21:05
Лучшее решение выкинуть эту http://russianit.ru/software/printenvelopepro/ и печатать сразу из 1С.
   Torquader
 
16 - 21.09.16 - 21:13
(15) Я, помнится, когда диссертация защищал - писал такую сам для матричного принтера, чтобы на конвертах печатать - она просто из файла брала данные и печатала - там основной вопрос - управление взятием и выпуском бумаги - на современных лазерных принтерах - очень неактуальный вопрос.
   Garykom
 
17 - 21.09.16 - 21:24
Угу у нас "печать на конвертах" очень смешная, в .doc делается шаблон с полями/переменными типа [ОтправительНаименование], [ПолучательАдрес] и т.д. и из 1С этот шаблон заполняется и на принтер.
   Garykom
 
18 - 21.09.16 - 21:25
(17)+ Шаблоны в word/writer чтобы пользователи сами могли подправить/добавить не дергая программеров.
Список полей в обработке печати в мануале.
   Torquader
 
19 - 21.09.16 - 21:46
(18) У меня также и было, только шаблон рисовался редакторе, где писалось в какой строке (координаты сверху и снизу) и что напечатать - и что делать, если не влазит.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует