Имя: Пароль:
1C
1С v8
запуск внутренней обработки через COMОбъект
0 Csar
 
07.08.13
14:48
Всем привет.
Подскажите, пожалуйста, как запустить обработку на другой базе через COM?
У меня сейчас на родной базе такой код (в обработку передаю две даты):
Процедура КнопкаСформироватьНажатие(Кнопка)
    ЗапуститьНаДругойБазеВнутреннююОбработку();
КонецПроцедуры

Процедура ЗапуститьНаДругойБазеВнутреннююОбработку()
    ИмяБазы = "Logistic_nosov_test";
    Сервер  = "app1cdt:1641";
    Подключиться();
    
    ОбработкаВыгрузки = COMОбъект.Обработки.ДТ_ВыгрузкаРеализацииДляБИБ82.Создать();
        ОбработкаВыгрузки.ВыполнитьВыгрузку("20130301000000", "20130331235959");
КонецПроцедуры

Процедура Подключиться()
    ФормированиеСтрокиПодключения();

    ЭлементыФормы.Статус.Заголовок = "Подключение к базе...";
    V8 = Новый COMОбъект("V82.COMConnector");
    Попытка
        COMОбъект = V8.Connect(СтрокаПодключения);
        ЭлементыФормы.Статус.Заголовок = "Подключение к базе успешно завершено";        
    Исключение
        Сообщить(ОписаниеОшибки());
        Предупреждение("Ошибка подключения к базе!");
        Возврат;
    КонецПопытки;
КонецПроцедуры

На второй базе вшита обработка "ДТ_ВыгрузкаРеализацииДляБИБ82" и в ее модуле функция:
&НаСервере
Процедура ВыполнитьВыгрузку(НачПериода, КонПериода) Экспорт
    
    Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    Обработка.ДатаНачала = НачалоДня(Дата(НачПериода));
    Обработка.ДатаНачала = КонецДня(Дата(КонПериода));
    Обработка.ИмяФайлаОбмена = "\\Tsdt3\dbases$\Obmen\Logistic\Packets\ВыгрузкаРеализации.xml";
    Обработка.ИмяФайлаПравилОбмена = "\\Tsdt3\dbases$\Obmen\Logistic\Rules\";
    Обработка.ЗагрузитьПравилаОбмена(Обработка.ИмяФайлаПравилОбмена);
    Обработка.ВыполнитьВыгрузку();
    
КонецПроцедуры


В итоге вылазит ошибка, что Метод ВыполнитьВыгрузку не найден! Где ошибка у меня?
1 Csar
 
07.08.13
15:01
у меня само соединение с базой проходит спешно, вот процедура (которую 1Ска называет методом) не находится, хоть и ЭКСПОРТ стоит
2 бомболюк
 
07.08.13
15:09
может там где нить директивы стоят типа
#Если Клиент тогда
3 Csar
 
07.08.13
15:12
(2) Родная база - Бухня 2.0. Запускаю обработку как внешнюю.
Вторая база - Бывшая УПП 1.3 но переписанная т теперь на УФ. Обработка со второй базы - там стоит #НаСервере.
4 Csar
 
07.08.13
15:12
(3) ой, не #, а &
5 Banned
 
07.08.13
15:13
А если в обработку вставить НаКлиентскую процедуру, которая будет звать серверную?
6 Csar
 
07.08.13
15:14
(5) это где? В Родной бухне 2.0?
7 Banned
 
07.08.13
15:15
в "второй базе"
8 Csar
 
07.08.13
15:20
Я просто закомментировал &НаСервере и эта ошибка ушла, но зато операция прервалась и выкинуло из режима предприятия =(
(7) т.е. я из родной базы программно вызываю КОМобъект, который подключается к Клиентской операции? Такое возможно?
9 Banned
 
07.08.13
15:24
попытка не пытка...
10 Csar
 
07.08.13
15:25
(7) в вашем случае также не находит метод. Если разделение по Сервер/Клиент вообще убрать, то выкидывает из Предприятия Бухни с дампом
11 Csar
 
07.08.13
15:33
В итоге в зависимости от наличия &НаСервере либо не находится метод .ВыполнитьВыгрузку(); либо выкидывает из Режима Предприятия с дампом.
12 Csar
 
07.08.13
15:46
Может я неправильно обращаюсь к обработке?
13 Csar
 
07.08.13
16:12
А можно ли как то отладку запустить при подключении КОМом? Точки останова как я понимаю нельзя поставить, а вот что то типа передачи текстовых сообщений на родную базу можно ли как-нибудь организовать?
14 wowik
 
07.08.13
16:27
боюсь предположить, может Новый COMОбъект("V82.Application")
15 Csar
 
07.08.13
16:29
(14) а остальное ничего не надо менять в коде (просто не сталкивался ранее в Application)?
V8 = Новый COMОбъект("V82.Application");
    Попытка
        COMОбъект = V8.Connect(СтрокаПодключения);
        ЭлементыФормы.Статус.Заголовок = "Подключение к базе успешно завершено";        
    Исключение
16 wowik
 
07.08.13
16:34
(15) ОбработкаВыгрузки = V8.Обработки...
17 Csar
 
07.08.13
16:42
(16) можно еще поподробнее? Так?:
V8 = Новый COMОбъект("V82.Application");
V8.Connect(СтрокаПодключения);
ОбработкаВыгрузки = V8.Обработки.ДТ_ВыгрузкаРеализацииДляБИБ82.Создать();
ОбработкаВыгрузки.ВыполнитьВыгрузку("20130301000000", "20130331235959");

Так примерно?
18 К_Дач
 
07.08.13
16:43
Код размести в общем модуле КОМ-базы, выставь флаги компиляции "На сервере" и "Внешнее соединение". Обращайся через точку: БазаКом.МодульТакойто(Парам1, Парма2)
19 wowik
 
07.08.13
16:46
(17) вроде так, точно не могу сказать.
20 К_Дач
 
07.08.13
16:49
(0) если ты хочешь в КОМ-базе инициализировать выгрузку данных, то выгрузить из нее можно только в файл. Иначе, как ты себе это представляешь Прямой КОМ и обратный КОМ? Так не выйдет. Если надо в КОМ-базе инициализировать обратный обмен - используй регистрацию объектов в плане обмена КОМ-базы и запуск в ней выгрузки по расписанию (регламенту). А код регистрации как раз размести в общем модуле. Была похожая задача - сделал именно так. Полет нормальный, фунциклирует
21 Csar
 
07.08.13
17:00
(19) О, супер, получилось! Огромадное спасибо!
(18) (20) Сделал в общем модуле одуль с названием ДТ_ВыгрузкаРеализацииДляБИБ82 и процедурой ВыполнитьВыгрузку(парам1, парам2), код такой не работает...
V8 = Новый COMОбъект("V82.COMConnector");
COMОбъект = V8.Connect(СтрокаПодключения);
ОбработкаВыгрузки = COMОбъект.ДТ_ВыгрузкаРеализацииДляБИБ82.ВыполнитьВыгрузку("20130301000000", "20130331235959");
22 К_Дач
 
07.08.13
17:15
(21) флаги компиляции проверь. что значит не работает? попробуй что-нибудь вернуть этим методом, текст какой-нибудь для простоты
23 Csar
 
07.08.13
17:22
(22) Не работает в смысле выкидывает из Режима Предприятия и формированием дампа
24 Csar
 
07.08.13
17:23
(22) пробовал с галкой "Вызов сервера" и без нее. Та же ситуация.