|
Выполнение отчета СКД через COM. Не получается :( | ☑ | ||
---|---|---|---|---|
0
fisher
04.05.12
✎
14:29
|
Пытаюсь программно сформировать отчет СКД в другой базе через COM.
Застопорился в самом начале - на получение схемы из макета. ПолучитьМакет(), ежели строковое название макета сую - ругается на неверное значение параметра. Ежели ссылку метаданных на макет - долго тупит а потом вываливает исключение вида "Ошибка при выполнении запроса POST к ресурсу ..." (там в дебрях 54-я ошибка дальше, т.е. скорее всего из-за тайм-аута). Кто-нибуть пытался подобное делать? Как можно исхитриться? |
|||
1
AlexTim03
04.05.12
✎
14:36
|
А зачем СКД на той стороне? Выбери там данные запросом в плоскую таблицу, таблицу сюда получаешь, и здесь уже таблицу загоняешь в СКД как внешние источники данных, а далее используешь/рисуешь свой СКД, который выводишь. Единственное, естественно ссылки работать не будут
|
|||
2
fisher
04.05.12
✎
14:49
|
(1) В моей ситуации удобней именно через СКД (если это вообще реально).
|
|||
3
gavrikprog
04.05.12
✎
19:06
|
в конце книжки Хрусталевой есть что-то похожее.
Пользоваться не доходилось, хотя интересно |
|||
4
Asmody
04.05.12
✎
19:21
|
(0) сделать в другой базе функцию в модуле внешнего соединения, которая тебе сформирует всё и выплюнет готовый табличный документ, не?
|
|||
5
fisher
04.05.12
✎
19:25
|
(4) Постепенно к подобному и склоняюсь... Менее жесткие варианты канать не хотят.
Даже это v8: Как выполнить произвольный код 1С через COM-соединение? не взлетает. Только зачем же в модуле внешнего соединения? Можно просто в общем модуле... |
|||
6
Адинэснег
04.05.12
✎
19:25
|
(0) на стороне ком-сервера выгрузи табличный документ в html, получи текст html
|
|||
7
Адинэснег
04.05.12
✎
19:26
|
или ваще двоичные данные передай
|
|||
8
gavrikprog
04.05.12
✎
19:26
|
мой самый правильный вариант - вероятность 70 процентов.
5 минут назад уже протестировал |
|||
9
fisher
04.05.12
✎
19:27
|
(6) Да не в этом затык.
|
|||
10
Лоботряс
04.05.12
✎
19:32
|
посмотри мой пост в теме v8: Как выполнить произвольный код 1С через COM-соединение?
и еще туда же // Записать массив в строку XML Функция МассивВСтрокуXML(Массив) Экспорт // Создадим объект для записи XML ЗаписьXML = Новый ЗаписьXML; // Укажем необходимость вывода в строку ЗаписьXML.УстановитьСтроку(); // Запишем начальный элемент массива ЗаписьXML.ЗаписатьНачалоЭлемента("array"); // Переберем элементы массива Для Каждого Элемент Из Массив Цикл // Выведем элемент массива СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Элемент); КонецЦикла; // Запишем конечный элемент массива ЗаписьXML.ЗаписатьКонецЭлемента(); // Закончим вывод Возврат ЗаписьXML.Закрыть(); КонецФункции // Загрузить массив из строки XML Функция МассивИзСтрокиXML(Строка) Экспорт // Создадим объект для чтения значения ЧтениеXML = Новый ЧтениеXML; // Установим строку, из которой будем читать значние ЧтениеXML.УстановитьСтроку(Строка); // Создадим массив, в который будем считывать Массив = Новый Массив; // Считаем элемент начала массива ЧтениеXML.Прочитать(); // Считаем начало перовго элемента ЧтениеXML.Прочитать(); // Пока не прочитан конечный элемент Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл // Прочитаем значение Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); // Поместим считанное значение в массив Массив.Добавить(Значение); КонецЦикла; // Чтение закончено - вернем считанный массив Возврат Массив; КонецФункции |
|||
11
fisher
04.05.12
✎
19:38
|
(10) Посмотрел. Спасибо. Но вывод таки такой, что компоновку нужно полностью проводить от и до на стороне com-сервера (допиливая под это конфу). Прямо работать с СКД через com-соединение не получается.
|
|||
12
gavrikprog
04.05.12
✎
19:42
|
(11) я тут, я тут... =)
Макет из нашей базы 1 по Ком передаем в базу 2, после виполнения отчета в базе 1 получаем табличный документ. |
|||
13
gavrikprog
04.05.12
✎
19:43
|
итого трудозатрат - 15 минут. Копай дальше
|
|||
14
Лоботряс
04.05.12
✎
19:49
|
(11)не нифига, все можно делать без допиливания конфы. Да, макет передал, на той стороне создал ПрцессорКомпоновки, выполнил, вернул результат.
Мой пример может не совсем удачный но другого нет... |
|||
15
fisher
04.05.12
✎
19:51
|
Пока я не увидел примера без допиливания конфы. А у самого не вышло.
|
|||
16
fisher
07.05.12
✎
16:05
|
По итогу ограничился простенькой функцией в общем модуле (с указанием одних только параметров - больше пока и не нужно). Сериализацию делаю как Лоботряс подсказал. И вообще спасибо ему :)
Функция ПолучитьСериализованныйРезультатПростогоОтчетаСКД(ИмяОтчета, Параметры) Экспорт Отчет = Отчеты[ИмяОтчета].Создать(); Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ЭтоПолучениеСериализованногоРезультата"); Для Каждого Параметр Из Параметры Цикл ПараметрыДанных = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы; ПараметрДанных = ПараметрыДанных.Найти(Параметр.Ключ); ПользовательскийПараметрДанных = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки); ПользовательскийПараметрДанных.Значение = ДесериализацияXML(Параметр.Значение); КонецЦикла; ТаблицаРезультата = Новый ТабличныйДокумент; Отчет.СкомпоноватьРезультат(ТаблицаРезультата); Возврат СериализацияXML(ТаблицаРезультата); КонецФункции |
|||
17
fisher
07.05.12
✎
16:08
|
Хорошо что запостил. Увидел что лишнюю строчку надо из цикла вынести...
|
|||
18
n koretsky
07.05.12
✎
16:18
|
я делал с помощью хранилища значений.
но без функции на той стороне не обойтись. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |