|
Соединение чз com и запуск фонового задания | ☑ | ||
---|---|---|---|---|
0
PiotrLoginov
26.03.16
✎
16:25
|
Здрасте всем.
Выполняется код (База - это COMОбъект("V83.ComConnector") уже установивший Connect с БД-приемником): МассивCOM = База.NewObject("Массив"); МассивCOM.Добавить(Строка(ЭтаФорма.УникальныйИдентификатор)); МассивCOM.Добавить(0); База.ФоновыеЗадания.Выполнить("МойОбщийМодуль.ВыполнитьТекущиеЗадачи", МассивCOM, Строка(ЭтаФорма.УникальныйИдентификатор), "Выполнение текущих задач: " + Строка(ЭтаФорма.УникальныйИдентификатор)); Код выполняется, но фоновое задание в базе-приемнике не создается. Способ запуска взял из Запуск фонового задания через com с клиентского компьютера Ранее пытался разместить код запуска ФЗ в экспортной процедуре общего модуля и вызывать эту процедуру: База.НекийОбщийМодуль.ЗапуститьФЗ() . Тоже не вышло. Код выполнялся, но ФЗ в БД-приемнике не запускалось. Никто не богат рабочим кодом запуска ФЗ через com? |
|||
1
TormozIT
гуру
26.03.16
✎
19:55
|
Создай внешнюю обработку в COM-сеансе и вызывай ее метод с передачей примитивных типов.
|
|||
2
TormozIT
гуру
26.03.16
✎
19:56
|
Тогда ты как минимум сможешь отладить код, запускающий фоновое задание.
|
|||
3
PiotrLoginov
26.03.16
✎
19:57
|
Оо Спасибо, попробую...
|
|||
4
PiotrLoginov
26.03.16
✎
19:59
|
Стоп. Так когда я выполняю код обычным способом, открыв базу в обычном режиме, код выполняется без проблем
|
|||
5
TormozIT
гуру
26.03.16
✎
20:03
|
Ну отлично. Значит все сразу заработает, как сделаешь (1)
|
|||
6
TormozIT
гуру
26.03.16
✎
20:04
|
Сопоставлять разные способы рекомендую под одинаковым пользователем.
|
|||
7
PiotrLoginov
26.03.16
✎
20:05
|
Т.е. фоновое задание не имеет ошибок в коде.
+(4) Да что там, я уже отбросил всё в сторону и создал в общем модуле простейшую конструкцию: Процедура Тест() Экспорт ЗаписьТекста = Новый ТекстовыйДокумент; ЗаписьТекста.ДобавитьСтроку("true"); ЗаписьТекста.Записать("C:\Users\admin\Bases\Basa\test"); КонецПроцедуры И теперь если я выполняю в обычном сеансе код ФоновыеЗадания.Выполнить("МойОбщийМодуль.Тест", , , "Тест"); - то получаю в каталоге файлик test , а если выполняю из удаленной базы База.ФоновыеЗадания.Выполнить("МойОбщийМодуль.Тест", , , "Тест"); - то ни фига. |
|||
8
PiotrLoginov
26.03.16
✎
20:11
|
(5) думаю, создавать программно внешнюю обработку и вызывать из нее код запуска фонового задания - то же самое, что размещать код запуска ФЗ в экспортной процедуре общего модуля БД-приемника и вызывать эту процедуру из удаленной базы: База.НекийОбщийМодуль.ЗапуститьФЗ() Я это уже проходил. ФЗ не создается, хотя функция ЗапуститьФЗ() возвращает Истина:
Функция ЗапуститьФЗ() Экспорт Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.Тест", , , "Тест"); Если ТипЗнч(Задание) = Тип("ФоновоеЗадание") Тогда Возврат XMLСтрока(Истина); Иначе Возврат XMLСтрока(Ложь); КонецЕсли; КонецФункции |
|||
9
PiotrLoginov
26.03.16
✎
20:16
|
Учитывая только что написанное, Вы все равно полагаете, что надо заморачиваться с программным созданием внешней обработки?
Или разместить уже готовую в справочник дополнительных обработок БД-приемника, а через COM создавать ее экземпляр (объект), и тогда уже вызывать метод из ее модуля? Никогда не делал так. Не представляю, как в этом случае будет работать отладка. Пока отладку не удавалось использовать, несмотря на то, что галку в настройках автоматического подключения поставил. |
|||
10
TormozIT
гуру
26.03.16
✎
20:23
|
Если не составляет проблемы часто менять конфигурацию БД базы, в которой запускается задание, то конечно лучше в конфигурации код писать и отлаживать. Пробовать внешнюю обработку смысла уже нет, я понял.
В консоли заданий видно это фоновое задание? |
|||
11
PiotrLoginov
26.03.16
✎
20:24
|
(10) При создании ФЗ обычным способом, его тут же видно среди других ФЗ
при попытках создания ФЗ из удаленной базы через COM в списке ФЗ то, что пытались запустить, так и не появляется |
|||
12
PiotrLoginov
26.03.16
✎
20:30
|
ну и оперативное появление файлика test при запуске ФЗ обычным способом и его отсутствием при попытках запуска через COM тоже говорит о том, что во втором случае оно так и не запускается. Остается непонятным, как же это во втором случае функция запуска возвращает Истину. Значит задание все таки создается в момент выполнения функции ЗапуститьФЗ() по "указаниям" из удаленной базы. Но тут же, как только заканчивается работы функции, экземпляр ФЗ аннулируется как-то, так и не попадая в список текущих и выполнившихся фоновых заданий.
Понимаю, что сильно такие мысли попахивают профанацией... |
|||
13
hhhh
26.03.16
✎
21:03
|
(12) всё-таки пиши XMLСтрока(ЭтаФорма.УникальныйИдентификатор)
от греха подальше. Лучше не связываться с функцией Строка() |
|||
14
PiotrLoginov
27.03.16
✎
11:34
|
(13) понял. полностью перехожу на XMLСтрока/XMLЗначение . Спасибо.
Тем не менее, сабж актуален. буду рад рабочему коду, ссылкам на документацию/статьи, описанию собственного опыта, предложениям и намекам. |
|||
15
TormozIT
гуру
27.03.16
✎
15:00
|
Автор так и не дал ответ про одинаковых пользователей. Ну тогда хотя бы пусть попробует через OLE (v8x.application).
|
|||
16
PiotrLoginov
27.03.16
✎
15:05
|
(15) А что пользователи? Все вышепроцитированные коды во всех случаях, в том числе само подключение к базе-приемнику, выполнялись под одним и тем же пользователем с полными правами
|
|||
17
PiotrLoginov
27.03.16
✎
15:07
|
+(16) Ок, попробую чз application, спасибо. Но как же так? В Запуск фонового задания через com с клиентского компьютера пишут, что работает, а у меня не работает.
|
|||
18
PiotrLoginov
27.03.16
✎
16:06
|
Так. Подключился через Application. При этом база-приемник прям открылась, т.е. запустился интерфейс, все дела :)
Запустил фоновое из удаленной базы. Код привычно отработал без ошибок. Подождал появления файлика test в нужном каталоге. ни фига. Полез в это открывшееся окно прямо - на текущие фоновые задания смотреть. И что я вижу? Тестовое задание в процессе выполнения! Уже несколько минут. Капец. Чему там выполняться? (См. выше процедуру Тест, всего лишь записывающую текстовый файлик) Ну и что же это? Внезапно нет прав на запись файла? |
|||
19
Cyberhawk
27.03.16
✎
16:12
|
Пиши для диагностики не в файл, а в ЖР, и доложи нам о результатах
|
|||
20
PiotrLoginov
27.03.16
✎
16:31
|
ноль реакции
сначала попробовал просто вызвать, не в фоновом задании. Успешно записалось в ЖР Затем запустить ФЗ. Привычно запустилось и висит. Запись в ЖР не добавилась. |
|||
21
PiotrLoginov
27.03.16
✎
16:32
|
чу-де-са
|
|||
22
PiotrLoginov
27.03.16
✎
16:34
|
еще и открытый application'ом сеанс не закрывается когда выполняю в удаленной базе (т.е. из которой подключаюсь к базе-приемнику) База = Null;
Так что открывшийся интерфейс базы-приемника приходится закрывать вручную. |
|||
23
TormozIT
гуру
27.03.16
✎
16:50
|
У тебя база COM-сервера файловая что ли?
|
|||
24
PiotrLoginov
27.03.16
✎
16:51
|
да
|
|||
25
PiotrLoginov
27.03.16
✎
16:52
|
сейчас все происходит локально на одном компе
|
|||
26
TormozIT
гуру
27.03.16
✎
16:53
|
(25) Почитай ИТС про ограничения механизма фоновых и регламентных заданий в файловом режиме.
|
|||
27
PiotrLoginov
27.03.16
✎
16:53
|
когда будет готово, будет работать все равно в файловом режиме, когда базы лежат на одном файловом сервере, но открываются на разных компах.
Думаю, это не влияет на механику работы COM |
|||
28
TormozIT
гуру
27.03.16
✎
16:54
|
Так работать скорее всего не будет.
|
|||
29
TormozIT
гуру
27.03.16
✎
16:55
|
Выполняй код синхронно (без фонового задания).
|
|||
30
PiotrLoginov
27.03.16
✎
17:02
|
почитал ИТС. Единственное, на чтостоит обратить внимание - "Выполняется принудительное завершение фоновых заданий, которые не завершились в течении 30 секунд после завершения работы приложения"
Я это с самого начала понимал, и планировал не закрывать COM-соединение несколько секунд, чтобы ФЗ в базе-приемнике успело завершиться. других противопоказаний не вижу. И еще раз: в Запуск фонового задания через com с клиентского компьютера пишут, что должно работать. |
|||
31
TormozIT
гуру
27.03.16
✎
17:04
|
(30) еще раз, в клиент-серверной базе работать будет, там про это и написан.
|
|||
32
PiotrLoginov
27.03.16
✎
17:10
|
не, если сто пудов дело в файловом режиме, то я реализую по-другому. Но если честно - гложет мысль, что можно как-то реализовать и в файловой. Пасовать не хотелось бы.
|
|||
33
PiotrLoginov
27.03.16
✎
17:11
|
Ладно, спасибо за участие. Будем считать вопрос закрытым. Хорошего дня :)
|
|||
34
TormozIT
гуру
27.03.16
✎
17:11
|
Учись принимать поражения от платформы. Ты уже достаточно показал свою напористость =)
Теперь прислушайся к голосу разума. |
|||
35
hhhh
27.03.16
✎
17:16
|
запусти проверку конфигурации на внешнее соединение. Может там есть код, который не работает во внешнем соединении. Если в обычном режиме всё срабатывает.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |