Имя: Пароль:
1C
 
ЗапуститьПриложение()
,
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) спс. буду попробовать
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.