|
Как выполнить произвольный код 1С через COM-соединение? | ☑ | ||
---|---|---|---|---|
0
fisher
04.05.12
✎
17:49
|
Пытаюсь через Выполнить() - ругается что нет такого метода...
|
|||
1
andrewks
04.05.12
✎
17:50
|
Execute()
|
|||
2
fisher
04.05.12
✎
17:54
|
Аналогичная фигня.
|
|||
3
andrewks
04.05.12
✎
17:54
|
код давай
|
|||
4
fisher
04.05.12
✎
17:54
|
Соединение активно, к глобальному контексту доступ дает.
|
|||
5
kuromanlich
04.05.12
✎
17:54
|
COMconnect.Execute() ?
|
|||
6
fisher
04.05.12
✎
17:55
|
Блин. Какой еще код нужен?
Выполнить() :) |
|||
7
andrewks
04.05.12
✎
17:56
|
(6) переработал?
|
|||
8
fisher
04.05.12
✎
17:59
|
Возможно. Но все равно грит нету такого метода :(
|
|||
9
andrewks
04.05.12
✎
17:59
|
т.е. код не покажешь?
|
|||
10
fisher
04.05.12
✎
18:01
|
Какой конкретно код интересует? Получения подключения? Моих слов что оно активно и работает - недостаточно?
|
|||
11
fisher
04.05.12
✎
18:04
|
То, что я это делаю в серверной процедуре УФ имеет значение?
Вроде в СП написано, что оператор не поддерживается только в режиме запуска веб-клиента... |
|||
12
kuromanlich
04.05.12
✎
18:05
|
COMconnect.Execute("а=1")
не пашет? |
|||
13
fisher
04.05.12
✎
18:07
|
Нет
|
|||
14
fisher
04.05.12
✎
18:10
|
Сразу ругается что метод объекта не обнаружен. При этом остальное все что угодно через это соединение - без проблем делается.
|
|||
15
fisher
04.05.12
✎
18:19
|
Я вообще перестал что-то понимать...
Например, COMconnect.ПолучитьИмяВременногоФайла() отрабатывает нормально, а COMconnect.ТекущаяДата() - тоже метод не обнаружен... Англоязычные синонимы ничего не лечат. |
|||
16
fisher
04.05.12
✎
18:36
|
Я правильно понял, что у всех в аналогичных условиях работает и один я лысый?
|
|||
17
Ахиллес
04.05.12
✎
18:37
|
Ты случайно не на эти грабли наступил?
Примечание: В режиме запуска веб-клиент оператор не поддерживается и его вызов игнорируется. |
|||
18
fisher
04.05.12
✎
18:39
|
(17) См. (11)
Я уже эту хрень в экспортную процедуру модуля отчета засунул - те же грабли. У меня вообще режим запуска - обычное приложение, но с использованием УФ. |
|||
19
andrewks
04.05.12
✎
18:40
|
(18) "обычное приложение, но с использованием УФ"
это как? может, имел в виду толстый клиент, но УП? |
|||
20
fisher
04.05.12
✎
18:45
|
(19) Это так: основной режим запуска в конфе стоит "обычное приложение". Идет работа в толстом клиенте с использованием управляемых форм.
Но дело не в этом. Я уже в обычной форме на толстом клиенте проверил - та же фигня. Кто-то реально юзал Выполнить/Execute через COM-соединение? |
|||
21
fisher
04.05.12
✎
18:47
|
Уже и права проверил... Не знаю, куда еще глянуть можно.
Реально оно хоть работает? Или чисто теоретики тут советуют? |
|||
22
andrewks
04.05.12
✎
18:54
|
у тебя V82.Application, или прямо v8.ComConnector?
|
|||
23
andrewks
04.05.12
✎
18:56
|
видимо, придётся тебе написать процедурку в общем модуле, и обращаться к ней
|
|||
24
fisher
04.05.12
✎
19:05
|
(22) V82.COMConnector
|
|||
25
fisher
04.05.12
✎
19:17
|
(23) Да придумаю как выкрутиться. Просто хотелось прояснить на будущее - это я граблями неправильно загребаю или в 1С забыли этот момент задокументировать.
Отзовитесь, кто реально юзал. Чтобы хоть понять - стоит дальше рыть землю или плюнуть и обходить. |
|||
26
Лоботряс
04.05.12
✎
19:25
|
// Функция выполняет компоновку во внешнем соединении.
// Возвращается результат компоновки. Функция ВыполнитьКомпоновкуВоВнешнемСоединении(Соединение, МакетКомпоновки, ДанныеРасшифровки) Экспорт Если ДанныеРасшифровки = Неопределено Тогда // Данные расшифровки заполнять не нужно // Макет компоновки будем передавать в виде строки Результат = Соединение.ВыполнитьКомпоновкуСтрока(ЗначениеВСтрокуXML(МакетКомпоновки), Неопределено); Иначе // Данные расшифровки заполнять нужно // Макет компоновки и данные расшифровки будем передавать в виде строки Результат = Соединение.ВыполнитьКомпоновкуСтрока(ЗначениеВСтрокуXML(МакетКомпоновки), ЗначениеВСтрокуXML(ДанныеРасшифровки)); // Прочитаем данные расшифровки из строки ДанныеРасшифровки = ЗначениеИзСтрокиXML(Результат.ДанныеРасшифровки); КонецЕсли; // Прочитаем результат из строки Возврат МассивИзСтрокиXML(Результат.Результат); КонецФункции // Функция выполняет копмоновку и помещает элементы результата в массив. // Возвращается массив элементов результата Функция ВыполнитьКомпоновкуВМассив(МакетКомпоновки, ДанныеРасшифровки) Экспорт // Создадим массив, в который будем помещать элементы результата МассивЭлементовРезультата = Новый Массив; // Создадим и инициализируем процессор компоновки ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровки, Истина); // Основной цикл вывода отчета Пока Истина Цикл // Получим следующий элемент результата компоновки ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата = Неопределено Тогда // Следующий элемент не получен - заканчиваем цикл вывода Прервать; Иначе // Элемент получен - выведем его при помощи процессора вывода МассивЭлементовРезультата.Добавить(ЭлементРезультата); КонецЕсли; КонецЦикла; Возврат МассивЭлементовРезультата; КонецФункции // Функция выполняет компоновку. Результат возвращается в виде строки, // содержащей внутреннее представление массива элементов результата компоновки данных. Функция ВыполнитьКомпоновкуСтрока(МакетКомпоновкиСтрока, ДанныеРасшифровкиСтрока) Экспорт Перем ДанныеРасшифровки; // Загрузим макет компоновки из переданной строки МакетКомпоновки = ЗначениеИзСтрокиXML(МакетКомпоновкиСтрока); Если ДанныеРасшифровкиСтрока <> Неопределено Тогда // Если передали расшифровку - получим ее из строки ДанныеРасшифровки = ЗначениеИзСтрокиXML(ДанныеРасшифровкиСтрока); КонецЕсли; // Создадим структуру результата Результат = Новый Структура("Результат, ДанныеРасшифровки"); Если ДанныеРасшифровки = Неопределено Тогда // Данные расшифровки не передали Результат.Результат = МассивВСтрокуXML(ВыполнитьКомпоновкуВМассив(МакетКомпоновки, Неопределено)); Иначе // Данные расшифровки передали Результат.Результат = МассивВСтрокуXML(ВыполнитьКомпоновкуВМассив(МакетКомпоновки, ДанныеРасшифровки)); // Предбразуем данные расшифровки в строку Результат.ДанныеРасшифровки = ЗначениеВСтрокуXML(ДанныеРасшифровки); КонецЕсли; Возврат Результат; КонецФункции |
|||
27
Адинэснег
04.05.12
✎
19:28
|
(0) а может в куй этот com и запилить вэб-сервис?
|
|||
28
Лоботряс
04.05.12
✎
19:30
|
ай не туда кинул
(26) это к теме v8: Выполнение отчета СКД через COM. Не получается :( |
|||
29
МишКа
04.05.12
✎
19:50
|
Вместо V82.COMConnector
надо использовать V82.Application |
|||
30
Ахиллес
04.05.12
✎
19:51
|
(25) Плюнуть и обходить.
Например в модуле внешнего соединения запилить экспортную функцию СделатьНазлоОдинэсу(БудетПоМоему) Экспорт Выполнить(БудетПоМоему); И вызывать это уже по ком соединению. |
|||
31
fisher
04.05.12
✎
19:54
|
(29) Я прекрасно знаю разницу.
(30) Так скорее всего и будет. Выше Лоботряс выложил универсальное решение в этом стиле, за что ему спасибо. |
|||
32
fisher
04.05.12
✎
19:57
|
Тьфу блин, я уже сам ветки путаю :)
Лоботряс выложил универсальное решение для этой задачи v8: Выполнение отчета СКД через COM. Не получается :(, которая тоже напрямую через COM не решается |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |