|   |   | 
| 
 | ЗапуститьПриложение() | ☑ | ||
|---|---|---|---|---|
| 0
    
        nAPACEHAK 17.10.24✎ 15:22 | 
        Доброго
 Помогите лыжи смазать 8.3.25.1374 Обычные. УТ10 Процедура КнопкаВыполнитьНажатие(Кнопка) Результат = ОбработатьФайл(ИмяФайла); ВывестиЛог(Результат); КонецПроцедуры Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ИмяФайла = ПолучитьИмяФайла(); Если Не ЗначениеЗаполнено(ИмяФайла) Тогда Возврат; КонецЕсли; Результат = ОбработатьФайл(ИмяФайла); ВывестиЛог(Результат); КонецПроцедуры в ОбработатьФайл() есть вызов команды системы ЗапуститьПриложение(Строка, Каталог, Истина, КодВозврата); 1. Выбираем файл обработчик выбора - получаем результат 2. Жмем Выполнить - обработчик кнопки - получаем результат, теряем фокус с окна предприятия вместо ЗапуститьПриложение() делал так //WshShell = Новый COMОбъект("WScript.Shell"); //Р = WshShell.Run("" + Строка + "", 1, 10); результат такой же Чем еще намазать лыжи то? Спасибо | |||
| 1
    
        osa1C 17.10.24✎ 15:23 | 
        (0) Лыжи смажь салом     | |||
| 2
    
        Franchiser 17.10.24✎ 15:24 | 
        (0) какая модель лыж?     | |||
| 3
    
        Fedor-1971 17.10.24✎ 15:30 | 
        (0) посмотри в сторону КомандаСистемы(<СтрокаКоманды>, <ТекущийКаталог>)
 Словами напиши что хочешь сделать? так то, ты пытаешься обработать файл сразу после его выбора и ещё один раз - по кнопке (как я понимаю, файл уже модифицирован) | |||
| 4
    
        Волшебник 17.10.24✎ 15:29 | 
        третий параметр: ДождатьсяЗавершения
 ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>) чё не так? | |||
| 5
    
        nAPACEHAK 17.10.24✎ 15:30 | 
        (3) Хочу что бы не терялся фокус с предприятия после выполнения команды системы
 не пойму, почему одно и тоже а поведение разное если с обработчикавыбора то фокус с предприятия не теряется. а если выполнить с кнопки - то фокус будет на другом открытом окне (браузер, блокнот, чегоугодно) а предприятие сворачивается | |||
| 6
    
        nAPACEHAK 17.10.24✎ 15:31 | 
        (4) да, дожидаемся завершения, получаем код = 0. тут все норм. но 1С предприятие сворачивается вниз     | |||
| 7
    
        Волшебник 17.10.24✎ 15:36 | 
Оболочка = Новый COMОбъект("Wscript.Shell");
КодВозврата = Оболочка.Run(СтрокаЗапуска, 0, истина);
Оболочка.AppActivate(ПолучитьЗаголовокПриложения());
ЭтаФорма.Активизировать(); | |||
| 8
    
        Fedor-1971 17.10.24✎ 15:39 | 
        (5) Так запуск приложения и предполагает передачу фокуса оному, только 1С будет ждать пока ты его закроешь
 КомандаСистемы - чисто выполнит то, что просили (типа откроется окно cmd, стартанёт приложение) и сразу отдаст фокус в 1С | |||
| 9
    
        Fedor-1971 17.10.24✎ 15:43 | 
        (7) ПолучитьЗаголовокПриложения() - это заголовок 1С?
 что-то мне думается, что в этом коде не всегда будет получать именно заголовок 1С | |||
| 10
    
        nAPACEHAK 17.10.24✎ 15:44 | 
        (8) 
 см (0). одни и те же действия для разных обработчиков. для одного отдает фокус для другого нет (7) спс. сейчас попробую | |||
| 11
    
        Fedor-1971 17.10.24✎ 15:51 | 
        (10) Контекст старта отличается, возможно, что при нажатии кнопки теряется связь с формой     | |||
| 12
    
        nAPACEHAK 17.10.24✎ 16:14 | 
        *7) увы ((
 Ваш вариант тоже так же отработал. Этот тоже Заголовок = ПолучитьЗаголовокПриложения(); Результат = ОбработатьФайл(ИмяФайла); ВывестиЛог(Результат); Оболочка = Новый COMОбъект("Wscript.Shell"); Оболочка.AppActivate(Заголовок); ЭтаФорма.Активизировать(); | |||
| 13
    
        Волшебник 17.10.24✎ 16:16 | 
        (12) Почему запуск приложения называется "ОбработатьФайл"? Что Вы запускаете?     | |||
| 14
    
        nAPACEHAK 17.10.24✎ 16:31 | 
        (12) Результат = ОбработатьФайл(ИмяФайла);
 Внешняя обработка. Функция объекта. сам запуск в функции так: Строка = СтрШаблон("""%1"" -enc UTF-8 -raw ""%2"" result.txt", Каталог + "\" + Утилита, ИмяФайла); КодВозврата = Неопределено; ЗапуститьПриложение(Строка, Каталог, Истина, КодВозврата); пробовал: из объекта все переносил на форму - результат не изменился | |||
| 15
    
        Волшебник 17.10.24✎ 16:29 | 
        (14) Используйте КомандаСистемы     | |||
| 16
    
        nAPACEHAK 17.10.24✎ 16:48 | 
        (15) пробую в консоли кода
 Тек = "k:\Хлам\"; Строка = "k:\Хлам\pdftotext.exe"; КомандаСистемы(Строка, Тек); мелькает черное cmd окно (откр-закр) и фокус с предприятия улетает на другое приложение | |||
| 17
    
        Волшебник 17.10.24✎ 16:50 | 
        (16) Ну и хрен с ним. Ваше дело массово обработать файлы, а не ловить этот фокус.     | |||
| 18
    
        Fedor-1971 17.10.24✎ 16:52 | 
        (16) Строка = "Start wait """" k:\Хлам\pdftotext.exe"; - будет ждать пока не отработает конвертатор     | |||
| 19
    
        nAPACEHAK 17.10.24✎ 16:54 | 
        (17) ))) ну я так и подумал, про с ним то, но наше дело поймать результат этого выполнения и вывести в окно пользователю.
 вот в окно результат выводится и до кучи свертывает предприятие, что не есть слишком хорошо ((( | |||
| 20
    
        Волшебник 17.10.24✎ 16:55 | 
        Запустите конвертацию на сервере в фоновом задании     | |||
| 21
    
        Fedor-1971 17.10.24✎ 17:01 | 
        (19) тогда вернёмся к исходной точке
 Полностью словами что нужно сделать? Примерно так: помещаем файлы в каталог, запускаем конвертатор, он сохраняет лог своей работы, пользователю показываем лог Тут весь вопрос в команде, у общей команды нет окна выполнения, можно попробовать приклеить кнопку с командой формы | |||
| 22
    
        nAPACEHAK 17.10.24✎ 17:18 | 
        (19) 
 Даже еще немного упростим Есть внешняя обработка. поле ввода и кнопка содержимое обработчиков идентично (0) по обработчику выбора имени файла - конвертится пдф, парсится, выводится результат - тут все ок по обработчику кнопки - тоже все работает и выводится, НО... предприятие свернуто. точнее даже не свернуто, а становится активным то приложение, которое было активно до предприятия ну а если без упрощения - так же выбирается файл из вложений, сохраняется, парсится, возвращается результат, заполняются нужные поля на форме ну и плюсом фокус улетает с преддприятия, т.е. поведение как по кнопке из упрощения. вот в чем разница этих обработчиков? почему поведение разное? | |||
| 23
    
        Fedor-1971 17.10.24✎ 17:53 | 
        (22) Кнопка уводит НаСервер выполнение?
 Попробуй сделать так: 1. Вынеси в отдельную процедуру, например, Конвертатор() Результат = ОбработатьФайл(ИмяФайла); ВывестиЛог(Результат); 2. Замени вызов в разных местах на Конвертатор() - сразу будет понятно наличие косяка т.к. поведение фокуса будет одинаковым 3. При работе с вложениями, сначала сохрани в файл (желательно НаКлиенте) и запусти Конвертатор() Похоже, что есть обращение к серверу и потеря контекста формы | |||
| 24
    
        nAPACEHAK 17.10.24✎ 18:01 | 
        (23) спс. буду попробовать     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |