Имя: Пароль:
1C
1С v8
как вызвать экспортную процедуру по com соединению?
0 Холодильник
 
28.05.14
18:00
Объект = Новый COMОбъект(V83.ComConnector);
ОбрабатываемаяБазаДанных = Объект.Connect(СтрокаПодключения);

выборкаОрг = ОбрабатываемаяБазаДанных.Справочники.Организации.Выбрать();
Пока ВыборкаОрг.Следующий() цикл
    Если ВыборкаОрг.ПометкаУдаления тогда
        продолжить;
    КонецЕсли;
    
    Организация = ВыборкаОрг.Ссылка;
    Отчет = ОбрабатываемаяБазаДанных.Отчеты.ОборотноСальдоваяВедомость.Создать();
    
    Если Не ОбрабатываемаяБазаДанных.СохранениеНастроек.ЗаполнитьНастройкиПриОткрытииОтчета(Отчет) Тогда
        Отчет.ИнициализацияОтчета();
    КонецЕсли;
..

ругаетсо на:  Метод объекта не обнаружен (ИнициализацияОтчета)


почему так? как вызвать экспортную процедуру отчета в подключаемой базе?
права полные, подключение выполнено, процедура экспортная в подкл базе есть..
1 Segate
 
28.05.14
18:01
Дык ОбрабатываемаяБазаДанных.ИмяМодуля.Имяпроцедуры() не?
2 Segate
 
28.05.14
18:02
(1) чукча не читатель, чукча писатель. не читай мой комент
3 Холодильник
 
28.05.14
18:03
много лишнего написал. хватит и :

Объект = Новый COMОбъект(V83.ComConnector);
ОбрабатываемаяБазаДанных = Объект.Connect(СтрокаПодключения);
    Отчет = ОбрабатываемаяБазаДанных.Отчеты.ОборотноСальдоваяВедомость.Создать();
        Отчет.ИнициализацияОтчета();

Ошибка:  Метод объекта не обнаружен (ИнициализацияОтчета)
4 Segate
 
28.05.14
18:07
(3) а там же создается отчет объект.

Он вроде дает доступ к формам и тд и тп, а к модулям вроде нет... попробуй через отчеты менеджер, хотя я бы на твоем месте не парился бы и вынес бы процедуру в общий модуль )
5 Jaap Vduul
 
28.05.14
18:09
(3)
Может метод находится внутри инструкций препроцессора, исключающих его компиляцию в com-исоеднении?
6 Segate
 
28.05.14
18:09
(3)во: помню, что где то читал.

Внешнее соединение с информационной базой 1С:Предприятие 8 предоставляет полный доступ к глобальному контексту и в качестве своих свойств может иметь:

    системные константы;
    значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры);
    переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

В качестве своих методов внешнее соединение может иметь:

    системные процедуры и функции;
    процедуры и функции модуля внешнего соединения и общих модулей, объявленные с ключевым словом Экспорт;
    дополнительный метод NewObject.
7 х86
 
28.05.14
18:13
(0)Типовая?
предположу что инициализировать нужно наверное в ОбщемОтчете, хотя хз, отладчиком глянь )
8 Холодильник
 
29.05.14
08:53
(5) и как быть тогда?
9 Рэйв
 
29.05.14
09:02
(0)А в чем смысл запуска отчета левой базы в текущей?
10 Холодильник
 
29.05.14
09:11
(9) мне нужно сохранить оборотку в файл com-соединением
11 nufnufcheg
 
29.05.14
09:13
(8) переписывать
12 Рэйв
 
29.05.14
09:14
(10)Выполняй запуск отчета и его выполнение на той стороне.
Имхается мне, на принимаемой текущей стороне оно у тебя летать не будет.
13 Рэйв
 
29.05.14
09:15
А еще проще напиши обработку, которая запустит отчет по оборотке и сохранит его в файл. И запускай ее по СОМ, а не отчет.
14 Infsams654
 
29.05.14
09:23
(12)+ так отчет то нужен по данным той базы или своей?
15 Холодильник
 
29.05.14
09:25
(13) не проще, когда у меня овер 100500 баз, из которых нужно выгрузить оборотку. Иначе зачем бы мне нужно было ком-соединение. в 1-2 баз я могу выгрузить и вручную
16 Холодильник
 
29.05.14
09:26
(14) было бы странно, если б отчет запускался в "той" базе по сом-соединению, а нужен был по данным "этой" базы
17 hhhh
 
29.05.14
09:30
что за конфа? БП?
18 Рэйв
 
29.05.14
09:30
(15) Ты не понял что я тебе предлагаю:-) Напиши обработку по выгрузки оборотки в файл , помести ее в свои 100500 баз и запускай по СОМ.

А отчет так скорее всего работать не будет.
19 Рэйв
 
29.05.14
09:31
+ или его специально нужно будет переписать под СОМ
20 Рэйв
 
29.05.14
09:31
в СОМ много ограничений.
21 Рэйв
 
29.05.14
09:32
и многие вещи из под негог просто не видны, некоторые команды и общие модули
22 Холодильник
 
29.05.14
09:32
(18) я прекрасно понял, что ты мне предлагаешь. поэтому и пишу, что поместить обработку в 100500 баз - слишком трудоемко  и глупо для одноразовой операции
23 Холодильник
 
29.05.14
09:32
(17) БП 2.0
24 hhhh
 
29.05.14
09:35
(23) попробуй ход конем

МойОфигенныйОтчет = ОбрабатываемаяБазаДанных.Отчеты.ОборотноСальдоваяВедомость.Создать();
        МойОфигенныйОтчет.ИнициализацияОтчета();
25 Холодильник
 
29.05.14
09:36
(24) чем этот ход конем отличается от (3) ?
26 Холодильник
 
29.05.14
09:37
+ в инициализации запускается процедура общего модуля, который не поддерживает внешнее соединение.
но я ведь не запускаю его напрямую, я вызываю его из сом-объекта - отчета.. странно..
27 hhhh
 
29.05.14
09:38
(25) тем, что глупо газывать переменную "Отчет".
28 Холодильник
 
29.05.14
09:42
(27) ок, переименовал. результат тот же
29 hhhh
 
29.05.14
09:44
ну тогда нужно хрустальный шар включать, ничего не видно.

сделай тогда проще, как советюют. Заведи процедуру в общем модуде, а в ней эти две строчки.
30 Холодильник
 
29.05.14
09:51
(29) так тоже нельзя делать. обновлять все 100500 баз ради общего модуля с процедурой - меня же пользователи съедят
31 hhhh
 
29.05.14
09:52
(30) если будет отдельный общий модуль, ему на обновления начхать, то пользователи ничего не заметят.
32 fisher
 
29.05.14
10:04
(20) +1
Компоновку через COM мне в свое время выполнить не удалось.
Поэтому спецом для подобной задачи реализовывал функции общего модуля. Т.е. табличный документ полностью формировался в источнике, а через COM он только забирался готовый (сериализованный).
33 Infsams654
 
29.05.14
10:53
(32) интересно, как забирался-то? Вроде через СформироватьОтчет его не достать
34 fisher
 
29.05.14
11:05
(33) Я ж написал в скобках. Сериализованный. Через XDTO в ЗаписьXML, а в приемнике - обратно.
35 Infsams654
 
29.05.14
11:56
(34) так этож надо и источник переделать
36 fisher
 
29.05.14
13:05
(35) Да.
37 acsent
 
29.05.14
13:17
может там #если Клиент стоит
38 Холодильник
 
29.05.14
14:54
Добавил в модуль внешнего соединения процеду:

Процедура COMExecute(ТекстМодуля) Экспорт
    
    Выполнить(ТекстМодуля);
    
КонецПроцедуры


вызываю:

Объект = Новый COMОбъект(V83.ComConnector);
ОбрабатываемаяБазаДанных = Объект.Connect(СтрокаПодключения);
ОбрабатываемаяБазаДанных.COMExecute("
|Отчет = Отчеты.ОборотноСальдоваяВедомость.Создать();
|Отчет.ИнициализацияОтчета();");


тоже самое - пишет метод не обнаружен
39 Jaap Vduul
 
29.05.14
15:10
(38)
Это называется "те же яйца. только в профиль"
40 Холодильник
 
29.05.14
15:17
(39) ага, я уже понял.. ладно, сделаю по-другому..
Программист всегда исправляет последнюю ошибку.