|
Отчет с помощью Com - соединения (в базе УПП, и УТ) | ☑ | ||
---|---|---|---|---|
0
Артем12345
26.08.16
✎
04:32
|
Здравствуйте! Выручайте, не могу понять, что не так (с Com соединениями столкнулся впервые). Задача состоит в том, что нужно из базы УТ выдернуть реквизит "Направление" из справочника Партнеры, в базу УПП, с помощью Com соединения и вывести в отчет.
Партнеры в базах в основном совпадают, но не все. Отчет делаю через СКД. Создал два набора данных: 1)Запрос (где данные из УПП, выводятся все норм. Поля: Партнер; ТорговыйАгент; Документ; СуммаДокумента.) 2) Объект (Имя объекта, содержащего данные назвал "ВнешниеДанные", и добавил поля: Партнер и Направление. СвязиНаборовДанных сделал по Партнеру. Если в цикле Запроса делаю (//Сообщить(База.String(Выборка.Партнер));//Сообщить(База.String(Выборка.Направление));), данные сообщаются все верно. НО в отчет почему то выводятся пустые колонки (Если убираю Набор данных - Запрос, то выводится во всех строках "COM Объект". Помогите разобраться, буду рад любой информации. Заранее благодарю за помощь!!! Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; V82=Новый COMОбъект("V82.COMConnector"); Попытка База=V82.Connect("Srvr=***;Ref=***;Usr=***;Pwd=***"); Исключение Инфо = ИнформацияОбОшибке(); Сообщить("Описание='" + Инфо.Описание + "'"+Символы.ПС+"Не могу открыть базу УТ"); Возврат; КонецПопытки; ВнешниеДанные = Новый ТаблицаЗначений; ВнешниеДанные.Колонки.Очистить(); ВнешниеДанные.Очистить(); ВнешниеДанные.Колонки.Добавить("Партнер"); ВнешниеДанные.Колонки.Добавить("Направление"); Состояние("Получение и обработка данных внешней базы..."); Попытка ТекстЗапроса = "ВЫБРАТЬ | Партнеры.Ссылка КАК Партнер, | Партнеры.Направление КАК Направление |ИЗ | Справочник.Партнеры КАК Партнеры"; Запрос = База.NewObject("Запрос"); Запрос.Текст = ТекстЗапроса; Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НовСтр = ВнешниеДанные.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр,Выборка); КонецЦикла; Исключение Сообщить(ОписаниеОшибки(),СтатусСообщения.Внимание); КонецПопытки; База = Неопределено; Если ВнешниеДанные.Количество()=0 Тогда Предупреждение("Внешние данные не загружены или отсутствуют..."); Возврат; КонецЕсли; ВнешниеНаборыДанных=Новый Структура; ВнешниеНаборыДанных.Вставить("ВнешниеДанные",ВнешниеДанные); КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных; Настройки=КомпоновщикНастроек.ПолучитьНастройки(); МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки); ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки); ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультата=ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата=Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); ДокументРезультат.ОтображатьСетку=Ложь; ДокументРезультат.ОтображатьЗаголовки=Ложь; ДокументРезультат.Показать(); КонецПроцедуры |
|||
1
DiMel_77
26.08.16
✎
05:41
|
У тебя таблица значений заполнена COM объектами. Ты либо делай сопоставление к объектам в текущей базе, либо заполняй таблицу примитивными типами (например Партнер.Наименование).
|
|||
2
craxx
26.08.16
✎
06:08
|
(0) Крайне не рекомендую. На больших объемах данных будет ад. Это не считая того, что тебе все надо приводить к примитивным типам, либо создавать свои элементы справочников в той базе где отчет запускаешь.
|
|||
3
impulse9
26.08.16
✎
06:10
|
(0) получай в запросе в COM-соединении только примитивные типы (строки, числа)
Сопоставление можно делать по кодам элементов |
|||
4
Рэйв
26.08.16
✎
06:11
|
Сделай реквизит Направление в УПП и заполни его один раз для партнеров из УТ, хотябы через тот же COM. Тогда не придется городить огород с пдключением - будешь все на месте брать
|
|||
5
Артем12345
26.08.16
✎
07:45
|
(1), (3) - Большое спасибо, привел поля Партнер и Направление к примитивным данным, всё отобразилось прекрасно. Единственное, в таком случае нельзя расшифровать Партнера(
(2),(4) - Это всё понятно, только я рядовой программист в крупной организации. Мне сказали, что нужно сделать именно через COM-соединение. |
|||
6
Рэйв
26.08.16
✎
07:50
|
(5)Меньше слушай что "тебе сказали" и больше думай своей головой. А то так и останешься "рядовым".
|
|||
7
DiMel_77
26.08.16
✎
07:52
|
(5) Правильнее необходимо конечно заполнять в таблицу ссылки из текущей базы. В простейшем случае это поиск по коду, но правильнее делать закладку с синхронизируемыми значениями и использовать регистр сведений "СоответствияОбъектовИнформационныхБаз".
|
|||
8
2083
26.08.16
✎
07:55
|
com-соединение - это зло и долго... лучше использовать ws
|
|||
9
gigi789
26.08.16
✎
08:29
|
(8) лучше быть молодым и богатым, чем старым и больным. Хорошие советы не зная не структуру сети не уровень задачи не частоту выполнения.
Например если отчет выполняется раз в месяц, то всем в принципе плевать будет он делаться 15 сек или о ужас 1.5 минуты. Если нет поднятого веб сервера то подымать ради 1 отчета тоже вопрос. И много еще всяких если... |
|||
10
2083
26.08.16
✎
08:39
|
(9) все так говорят: 1 отчет всего 1
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |