Начинаем
1. Создаем внешний отчет
1.1. В "наборы данных" добавляем "Набор данных - объединение"
1.2. В созданный набор добавляем "Набор данных - запрос" И формируем необходимый нам запрос с помощью конструктора.
1.3. В набор объединение добавляем также "Набор данных - объект" и прописываем поля которые будут загружены с таблицызначений, не забываем что поля должны совпадать с полями из набора данных запрос
2. После этого переходим в модуль объекта, и добавляем стандартную процедуру "ПриКомпоновкеРезультата". 1С автоматически генерирует процедуру со всеми входящими параметрами. И начинаем формировать заполнение процедуры
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// При формирование отключаем стандартную обработку, в противном случае постоянно будет выдавать следующую ошибку
// Ошибка исполнения отчета
//по причине:
//Ошибка инициализации
//по причине:
//Ошибка создания набора данных "НаборДанных"
//по причине:
//Не найден внешний набор данных "ТаблОст"
СтандартнаяОбработка = Ложь;
//Формируем подключение к внешней базе 1с
Подкл = Новый COMОбъект("V82.COMConnector");
COMОбъект = Подкл.Connect("Srvr=""mws-01"";Ref=""GlobalBase"";Usr=""*****"";Pwd=""******""");
//Формируем запрос во внешней базе
Запрос = COMОбъект.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК КоличествоОстаток,
| ТоварыНаСкладахОстатки.ВРезервеОстаток КАК ВРезерве
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.Склад В
| (ВЫБРАТЬ
| Склады.Ссылка
| ИЗ
| Справочник.Склады КАК Склады
| ГДЕ
| Склады.Родитель.Наименование = ""Центральные Склады"")";
Результат = Запрос.Выполнить();
//Получаем результат и создаем и заполняем таблицу значений в текущей
ТаблОст = Новый ТаблицаЗначений;
ТаблОст.Колонки.Добавить("Номенклатура",новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТаблОст.Колонки.Добавить("Организация",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(10));
ТаблОст.Колонки.Добавить("КоличествоОстаток", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,3));
ТаблОст.Колонки.Добавить("СуммаОстаток", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
Табл = Результат.Выгрузить();
Для х=0 по Табл.Количество()-1 Цикл
ЗначСтр = Табл.Получить(х);
НоваяСтрока = ТаблОст.Добавить();
//По уникальному идентификатору получаем значение и преобразуем в ссылку в текущей базе
НоваяСтрока.Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(COMОбъект.String(ЗначСтр.Номенклатура.УникальныйИдентификатор())));
НоваяСтрока.Организация = "Упр"; // формируем левое название, так как управленческой базы нет в бухгалтерии
НоваяСтрока.СуммаОстаток = 0;
НоваяСтрока.КоличествоОстаток = Число(ЗначСтр.КоличествоОстаток);
КонецЦикла;
COMОбъект = неопределено;
Подкл = неопределено;
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблОст",ТаблОст); // Формируем структуру для передечи в СКД
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
НастройкиКомпоновкиДанных = КомпоновщикНастроек.ПолучитьНастройки();
ТекСхема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
МакетКомпоновки = КомпоновщикМакета.Выполнить(
ТекСхема,
НастройкиКомпоновкиДанных,
ДанныеРасшифровки
);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(
МакетКомпоновки,
ВнешниеНаборыДанных,
ДанныеРасшифровки
);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
3. Далее, заполняем настройки, ресурсы и параметры
Как итог получаем отчет с нужными данными
Спасибо за подробную статью! Получилось передать таблицу значений в СКД (перерыв минимум пару страниц поисковиков чтобы избавиться от ошибок) только после вашей статьи.
ReplyDelete