Имя: Пароль:
1C
1С v8
Com соединение в регламентном задании
0 СЕсин
 
06.12.14
21:12
Всем доброго времени суток! Помогите пожалуйста, не знаю как победить. Есть регламентное задание в самописной конфигурации, которое запускается, подсоединяется к другой базе через com, вытаскивает данные и отправляет их.
Вот проблема в том, что задание срабатывает раза 2 или 3 (всегда по-разному). А потом перестает выполняться и при попытке создания com объекта выдает такую ошибку:

Ошибка при вызове конструктора (COMObject)
по причине:

по причине:
-2147221008(0x800401F0): Не был произведен вызов CoInitialize.

Помогает перезагрузка сервера. Перезапуск 1С не помогает.
1 Casey1984
 
07.12.14
05:11
Ком-объект уничтожаешь при выходе из процедуры рег. задания?
2 СЕсин
 
08.12.14
02:26
(1) Я переменной, в которой был Com объект присваиваю Неопределено. Это считается уничтожением? Или как-то по-особенному надо уничтожать?
И ещё забавный момент. Если этот код не из регламентного задания вызывается, а из обработки внешней, например. То все ок. Т.е. видимо, в сеансе регламентного задания какие-то вещи происходят.
3 Wobland
 
08.12.14
04:59
оно, конечно, считается уничтожением, но я в своей практике встречал ситуации опровергающие. пусть меня поправят более бородатые
4 goleaff2006
 
08.12.14
05:11
ком объект создается на сервере если через регламентное задание, а там не все так просто.
5 DrZombi
 
гуру
08.12.14
07:50
(2) А БД закрываешь? "V8_ОЛЕ.Exit();"
6 DrZombi
 
гуру
08.12.14
07:51
(3) Это 1С, от создателей этой платформы, можно и нужно ожидать всего :)
7 СЕсин
 
08.12.14
15:13
(5) нет, так не закрываю командой Exit. А у меня же не ОЛЕ, а Comconnector. Когда обнуляю переменную, подключение к базе теряется, не?
8 DrZombi
 
гуру
08.12.14
15:20
(7) Сомнения меня терзают :)
9 DrZombi
 
гуру
08.12.14
15:24
(7) А ты все сторонние ветви переменных ты тоже очищаешь?
Ну там, то что ты на создавал, от Документов до Запросов.

Особенно уделить внимание какой-либо ТЗ в ТЗ :)
10 СЕсин
 
08.12.14
22:44
(9) ну идея интересная. Добавил:
        Результат = Неопределено;
        ИтогиТЗ = Неопределено;
        База = Неопределено;
        ТоргЗапрос = Неопределено;
        cntr = Неопределено;

Сейчас перезапущу, посмотрим, что получится.
Подключение у меня выглядит так:
        cntr = Новый COMObject("V83.COMConnector");
                    
        База = cntr.Connect("File="""+ПутьКБазе+"""; Usr="""+ИмяПользователя+"""; Pwd="""+Пароль+""";");


А кстати, есть метод обратный? Что-то типа Disconnect. Дело в том, что я раньше не парился. Обнуляю переменную, смотрю: соединение разорвано.
11 СЕсин
 
10.12.14
11:22
Нифига... та же самая ошибка. Уже и разные платформы пробовал, пока не ясно в чем дело.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший