Имя: Пароль:
1C
1С v8
Соединение чз 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
запусти проверку конфигурации на внешнее соединение. Может там есть код, который не работает во внешнем соединении. Если в обычном режиме всё срабатывает.