|
Результат отчета на СКД не выводить на форму, а программно в таблицу значений | ☑ | ||
---|---|---|---|---|
0
vikadruzhok
12.11.15
✎
19:10
|
Задача. Есть две базы данных "База1" и "База2". Формируем отчет в "Базе1", но в этот отчет нужно подтянуть данные отчета с базы 2. Вопрос: как сформировать этот отчет в базе2 (подключение через веб-сервис), и не выводя его никуда запихнуть в таблицу значений. Извините, если вопрос банальный, но я еще не все понимаю.
|
|||
1
Горогуля
12.11.15
✎
19:11
|
а я себе тянул ТЗ оттуда, конвертил строковые УИДы в ссылки и скармливал результат СКД на этой стороне
|
|||
2
Живой Ископаемый
12.11.15
✎
19:14
|
СКД может выполюнуть в таблицу значений. ищется поиском.
но наверное стоит рассмотреть и другие архитектурные решения |
|||
3
vikadruzhok
12.11.15
✎
19:14
|
у меня вопрос как на стороне "Базы2" вызвать отчет, сформировать его и результат засунуть в таблицу значений. Точнее вопрос в последнем
|
|||
4
Горогуля
12.11.15
✎
19:15
|
(3) шаг первый: загуглить
|
|||
5
vikadruzhok
12.11.15
✎
19:15
|
и это все никуда не должно выводиться в "Базе2"
|
|||
6
Горогуля
12.11.15
✎
19:16
|
(5) только засовываться. про ссылки подумала уже?
|
|||
7
vikadruzhok
12.11.15
✎
19:19
|
Функция ЗагрузитьXMLТаблицаЗначений(ФайлXML, ФормаИндикатор = Неопределено)
Попытка Чтение = Новый ЧтениеXML(); Чтение.ОткрытьФайл(ФайлXML); Исключение Сообщить("Ощибка при чтение данных из XML!" + Символы.ПС + ОписаниеОшибки()); КонецПопытки; ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); КвалификаторыЧисла = Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный); ТЗ.Колонки.Добавить("КоличествоОстаток",Новый ОписаниеТипов("Число", КвалификаторыЧисла)); Атрибут = Новый Соответствие; МассивКолонок = Новый Массив; ТаблицаПостроена = Ложь; // Строим таблицу значений Пока Чтение.Прочитать() Цикл // Данные по колонке пошли Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "colum" тогда Атрибут.Очистить(); Пока Чтение.ПрочитатьАтрибут() цикл Атрибут[Чтение.Имя] = Чтение.Значение; КонецЦикла; МассивКолонок.Добавить(Атрибут["Name"]); КонецЕсли; // Данные по колонке закончились Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "columns" тогда ТаблицаПостроена = Истина; КонецЕсли; Если Не ТаблицаПостроена тогда Продолжить; КонецЕсли; // Началась запись в таблице значений Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и Чтение.Имя = "record" тогда ЗаписьТЗ = ТЗ.Добавить(); Пока Чтение.Прочитать() цикл // Конец данных по записи Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "record" тогда Прервать; КонецЕсли; // Есть такая колонка в нашей ТаблицеЗначений Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента и МассивКолонок.Найти(Чтение.Имя) <> Неопределено тогда ИмяКолонки = Чтение.Имя; Чтение.Прочитать(); Если Чтение.ТипУзла = ТипУзлаXML.Текст тогда Если ТипЗнч(ЗаписьТЗ[ИмяКолонки]) = Тип("СправочникСсылка.Номенклатура") тогда ЗаписьТЗ[ИмяКолонки] = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(Чтение.Значение))); ИначеЕсли ТипЗнч(ЗаписьТЗ[ИмяКолонки]) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда ЗаписьТЗ[ИмяКолонки] = Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор(СокрЛП(Чтение.Значение))); Иначе ЗаписьТЗ[ИмяКолонки]= СокрЛП(Чтение.Значение); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; // Данные в таблице КонецЦикла; КЧ = Новый КвалификаторыЧисла(12,2); КС = Новый КвалификаторыСтроки(100); Массив = Новый Массив; Массив.Добавить(Тип("Строка")); ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС); Массив.Очистить(); Массив.Добавить(Тип("Число")); ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ); Массив.Очистить(); Для каждого колонка Из ТЗ.Колонки Цикл Если ТипЗнч(колонка.ТипЗначения) = Тип("Число") Тогда Колонка.ТипЗначения = ОписаниеТиповЧ; ИначеЕсли ТипЗнч(колонка.ТипЗначения) = Тип("Строка") Тогда Колонка.ТипЗначения = ОписаниеТиповС; КонецЕсли; КонецЦикла; Возврат ТЗ; КонецФункции |
|||
8
vikadruzhok
12.11.15
✎
19:19
|
Функция СохранитьТаблицуЗначенийXML(Таблица,Имя)
Попытка Запись = Новый ЗаписьXML(); //Запись.Записать Запись.ОткрытьФайл(Имя); Исключение Сообщить("Ошибка при создание XML файла! " + Символы.ПС + ОписаниеОшибки()); Возврат истина; КонецПопытки; Запись.ЗаписатьОбъявлениеXML(); Запись.ЗаписатьНачалоЭлемента("root"); Соответствия = Новый Соответствие; Соответствия.Вставить("Номенклатура","СправочникСсылка.Номенклатура"); Соответствия.Вставить("Число","Число"); Соответствия.Вставить("Пользователь","СправочникСсылка.Пользователи"); Соответствия.Вставить("Строка","Строка"); Соответствия.Вставить("Значения свойств объектов (Классификатор)","ПланВидовХарактеристикСсылка.СвойстваОбъектов"); Соответствия.Вставить("Характеристика номенклатуры","СправочникСсылка.ХарактеристикиНоменклатуры"); МасКолонки = Новый Массив(); Запись.ЗаписатьНачалоЭлемента("columns"); Для Ном = 0 по Таблица.Колонки.Количество()-1 цикл Колонка = Таблица.Колонки[Ном]; МасКолонки.Добавить(Колонка.Имя); Запись.ЗаписатьНачалоЭлемента("colum"); Запись.ЗаписатьАтрибут("Name",Колонка.Имя); мСтрока = СтрЗаменить(Строка(Колонка.ТипЗначения),"Null, ",""); мСтрока = СтрЗаменить(мСтрока,"Null,",""); мСтрока = СтрЗаменить(мСтрока,",Null",""); мСтрока = СтрЗаменить(мСтрока,", Null",""); Попытка Запись.ЗаписатьАтрибут("Type",?(Соответствия[мСтрока]=Неопределено,мСтрока,Соответствия[мСтрока])); Исключение мОшибка = ""+СокрЛП(ОписаниеОшибки())+Символы.ПС+СокрЛП(мСтрока)+Символы.ПС+СокрЛП(Соответствия[мСтрока])+"Конец"; Возврат мОшибка; КонецПопытки; Запись.ЗаписатьКонецЭлемента(); // colum КонецЦикла; Запись.ЗаписатьКонецЭлемента(); // columns Запись.ЗаписатьНачалоЭлемента("records"); Для Каждого СтрТаблицы из Таблица цикл Запись.ЗаписатьНачалоЭлемента("record"); Для каждого ИмяКолонки из МасКолонки цикл Запись.ЗаписатьНачалоЭлемента(ИмяКолонки); Если ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("СправочникСсылка.Номенклатура") //или ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("") или ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("ПланВидовХарактеристикСсылка.СвойстваОбъектов") или ТипЗнч(СтрТаблицы[ИмяКолонки]) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") тогда Значение = СокрЛП(СтрТаблицы[ИмяКолонки].УникальныйИдентификатор()); Иначе Значение = Строка(СтрТаблицы[ИмяКолонки]); КонецЕсли; Запись.ЗаписатьСекциюCDATA(Значение); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; Запись.ЗаписатьКонецЭлемента(); КонецЦикла; Запись.ЗаписатьКонецЭлемента(); // records Запись.ЗаписатьКонецЭлемента(); // root Запись.Закрыть(); Возврат Запись; КонецФункции |
|||
9
vikadruzhok
12.11.15
✎
19:19
|
первый получение в таблицу значений
второе загрузка в таблицу значений |
|||
10
vikadruzhok
12.11.15
✎
19:20
|
это уже проверено. работает на другой обработке
|
|||
11
vikadruzhok
12.11.15
✎
19:20
|
точнее второе из таблицы значений
|
|||
12
Горогуля
12.11.15
✎
19:22
|
что это за х..мл? в любом случае чужие ссылки база не пережуёт
|
|||
13
vikadruzhok
12.11.15
✎
19:25
|
у них одинаковые ссылки
|
|||
14
vikadruzhok
12.11.15
✎
19:26
|
номенклатура создается в одной, а во вторую грузиться обменом
|
|||
15
Горогуля
12.11.15
✎
19:26
|
(13) хмл тебе, они даже не однофамильцы
|
|||
16
vikadruzhok
12.11.15
✎
19:26
|
вопрос не в этом(
|
|||
17
Горогуля
12.11.15
✎
19:27
|
(16) тебе нагуглить компоновку в ТЗ?
|
|||
18
Горогуля
12.11.15
✎
19:29
|
||||
19
vikadruzhok
12.11.15
✎
19:34
|
думаю разберусь с картинками.
|
|||
20
Горогуля
12.11.15
✎
19:34
|
не за что
|
|||
21
vikadruzhok
12.11.15
✎
19:35
|
спасибо) извините, но к концу дня начинаю сильно тупить(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |