Вывод на экран результатов запроса:ОтчетыМакет,ОтчетыСКД,ТабличныйДок

1. Щука Исключительная (jan-pechka) 129 08.01.18 12:11 Сейчас в теме
Недавно решала небольшую задачку - нужно было оптимизировать запрос (https://forum.infostart.ru/forum34/topic184214/). Запрос нарисовала в своей супер консоли,все норм. Но хороший,даже начинающий как я)),программист на пол пути дело не бросает - я решила вывести этот запрос в отчет, чтобы результаты работы были красиво оформлены.

Я придумала только как самый простой вариант вывода отчета - это МакетныйОтчет:
В модуле формы документа под кнопочкой на клиенте написала код модального открытия формы Отчета:

&НаКлиенте
Процедура КонтактыКлиента(Команда)
Структура=Новый Структура("Партнеры,Контрагенты",Объект.Партнер,Объект.Контрагент);
	 УсловияОтбора=Новый Структура("Партнеры,Контрагенты,Договор,ДатаДоговора,СсылкаДоговора",
	 								Объект.Партнер,Объект.Контрагент,Объект.Номер,Объект.Дата,Объект.Ссылка);
	 ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
	 ОткрытьФорму("Отчет.КонтактыКлиентов.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
Показать


А уже в самом отчете,в его модуле формы - вставила и нужный запрос и нарисовала простенький Макет в том же Отчете:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если ЗначениеЗаполнено(Параметры.Отбор) Тогда
		СформироватьТаблицуСДанными();
	КонецЕсли;
КонецПроцедуры

Процедура СформироватьТаблицуСДанными()
	Перем ТаблицаЗапр;
	ТабДок.Очистить();

	 Источник=Параметры.Отбор;
	 
	Макет=Отчеты.КонтактыКлиентов.ПолучитьМакет("МакетКонтактыКлиентов");
	ОблШапка=Макет.ПолучитьОбласть("Шапка");
	ОблЭлемент=Макет.ПолучитьОбласть("Элемент");
	ОблШапка.Параметры.Партнер=Источник.Партнеры;
	ОблШапка.Параметры.Контрагент=Источник.Контрагенты;
	ОблШапка.Параметры.Договор=Источник.Договор;
	ОблШапка.Параметры.ДатаДоговора=Формат(Источник.ДатаДоговора,"ДЛФ=DD");
	ТабДок.Вывести(ОблШапка);
	
	Структура=Новый Структура("Партнеры,Контрагенты", Источник.Партнеры,Источник.Контрагенты);
	
	//Документы.ДоговорСтроительноМонтажныхРабот.КонтактыКлиентаНаСервереМодуль(Структура,ТаблицаЗапр);
	//не работает вызов рассчетной проц.ни с мод.дока ни с общего модуля.
	
	Партнеры=Источник.Партнеры;
	Контрагенты=Источник.Контрагенты;
	
	ВнешниеДанные=Новый ТаблицаЗначений;
	ВнешниеДанные.Колонки.Добавить("Партнеры",Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
	ВнешниеДанные.Колонки.Добавить("Контрагенты",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
	стр=ВнешниеДанные.Добавить();
	стр.Контрагенты=Контрагенты;
	стр.Партнеры=Партнеры;	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВнешниеДанные.Контрагенты,
		|	ВнешниеДанные.Партнеры
		|ПОМЕСТИТЬ ВнешниеДанные
		|ИЗ
		|	&ВнешниеДанные КАК ВнешниеДанные
		|;
		
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	КонтрагентыКонтактнаяИнформация.Представление КАК ВидКонтактов,
		|	КонтрагентыКонтактнаяИнформация.Вид.Наименование КАК Контакты
		|ИЗ
		|	ВнешниеДанные КАК ВнешниеДанные
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
		|		ПО ВнешниеДанные.Контрагенты = КонтрагентыКонтактнаяИнформация.Ссылка
		
		|ОБЪЕДИНИТЬ
		
		|ВЫБРАТЬ
		|	ПартнерыКонтактнаяИнформация.Представление,
		|	ПартнерыКонтактнаяИнформация.Вид.Наименование
		|ИЗ
		|	ВнешниеДанные КАК ВнешниеДанные
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
		|		ПО ВнешниеДанные.Партнеры = ПартнерыКонтактнаяИнформация.Ссылка";
		
		Запрос.УстановитьПараметр("ВнешниеДанные",ВнешниеДанные);
		
		РезультатЗапроса = Запрос.Выполнить();
				
		ТаблицаЗапр=РезультатЗапроса.Выгрузить();
		
		Для каждого Строка  Из ТаблицаЗапр Цикл
			    ОблЭлемент.Параметры.ВидКонтактов =Строка.ВидКонтактов;
				 ОблЭлемент.Параметры.Контакты=Строка.Контакты;
		       ТабДок.Вывести(ОблЭлемент);
		КонецЦикла; 
КонецПроцедуры
Показать


Вид макетного отчета на картинке.

Вопрос: как вывести еще можно на экран данные запроса???

Могу подумать и попробывать вывести в виде просто табличного документа...(здесь даже не нужно будет с серверной рассчетной процедуры выходить)) - таблицыЗначений между клиент-сервером из этого же примера мы уже разобрали вот здесь https://forum.infostart.ru/forum9/topic184275/#message1908431)

Но очень бы хотелось попробывать вывести данные Отчетом-СКД...я скд чего-то побаиваюсь...особенно если задаться целью и программно вывести через СКД...очень жду помощи,а то так и буду боятся СКД дальше!))
Прикрепленные файлы:
Ответы
2. Щука Исключительная (jan-pechka) 129 08.01.18 12:27 Сейчас в теме
Вот в этой публикации есть вариант программного вывода СКД https://infostart.ru/public/654836/

КомпМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпМакета.Выполнить(Схема, Схема.НастройкиПоУмолчанию);

ПроцКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцКомпоновки.Инициализировать(МакетКомпоновки);

ПроцВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ТабДок = Новый ТабличныйДокумент;
ПроцВывода.УстановитьДокумент(ТабДок);

ПроцВывода.Вывести(ПроцКомпоновки);
Показать


Но как с этим разобраться??? Куда вставить этот код,чтобы получить отчет-скд?
СКД-вообще китайская грамота какая-то...
3. DenisCh Гейтс (DenisCh) 08.01.18 12:39 Сейчас в теме
ЧТо значит куда?
В серверную функцию, которая вернёт табДок.
А на клиенте уже табДок.Показать()
4. Щука Исключительная (jan-pechka) 129 08.01.18 12:58 Сейчас в теме
(3)
В серверную функцию, которая вернёт табДок


можно на примере? исходный код,который я поместила в обычный Отчет-Макет в первом посту...Мне бы на "пальцах" показать как это работает,как говорил Задорнов))...

С обычным отчет-макетом все понятно:создается объект Отчет,рисуется под ним Макет,а на форме отчета создается табличный документ,через который в цикле и выводится результат запроса. А как здесь быть,с чего начать - не пойму...
5. DenisCh Гейтс (DenisCh) 08.01.18 13:01 Сейчас в теме
(4) берём код из (2).
Помещаем его в функцию &НаСервере СформироватьОтчет()
В конец ставим Возврат ТабДок;
на клиенте по кнопке говорим (например)
ЭлементыФормы.ТаббДокРезультат.Вывести(СформироватьОтчет());


Ну и проверки всякие, разумеется. И заполнение параметров компоновки. Но тут уже по вкусу и месту.
jan-pechka; +1 Ответить
6. Щука Исключительная (jan-pechka) 129 08.01.18 13:12 Сейчас в теме
(5)
Помещаем его в функцию &НаСервере СформироватьОтчет()


т.е.для начала нужно создать новый объект Отчет? Хорошо,создала.
Далее создаем основную форму отчета? Есть.
На самой форме в ее реквизитах - добавляем новый реквизит формы:табличный документ ТабДок? и перебрасываем его в левое окно редактора форм. Есть.
Потом на форме создаем кнопку "СформироватьОтчет",Есть.
В обработчике действий этой кнопки задаем - на Сервере и Клиенте.Есть.

В серверную проц.кнопки вставляем код (2).Есть.

...дальше не понятно...А где расчет запроса?

п.с. я вызываю форму отчета программно,поэтому маленькое изменение - не по кнопке "СформироватьОтчет" - у меня будет формироваться отчет,а из проц.Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
т.к. мне еще в параметрах при открытии отчета данные нужно передать для запроса...
Вот такой код в новом отчете:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если ЗначениеЗаполнено(Параметры.Отбор) Тогда
		СформироватьТаблицуСДанными();
	КонецЕсли;
КонецПроцедуры

Процедура СформироватьТаблицуСДанными()
	КомпМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпМакета.Выполнить(Схема, Схема.НастройкиПоУмолчанию);
	
	ПроцКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцКомпоновки.Инициализировать(МакетКомпоновки);
	
	ПроцВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	
	ТабДок = Новый ТабличныйДокумент;
	ПроцВывода.УстановитьДокумент(ТабДок);
	
	ПроцВывода.Вывести(ПроцКомпоновки);
КонецПроцедуры
Показать


п.с.я как обезьянка - скопировала,вставила непонятный код программного вызова СКД...А что с ним делать дальше - не понятно...
Прикрепленные файлы:
7. Yan Tsys (YanTsys) 11 08.01.18 14:29 Сейчас в теме
(6)
,,а из проц.Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)


Не уверен что хорошая идея, я бы на вашем месте сначала убедился что у вас получится сформировать отчет своей самодельной кнопкой а уже потом закидывал код так далеко.

И я бы на вашем месте для начала сделал бы типовой отчет скд в котором будет и запрос и схема компоновки данных который выведет данные, а уже потом пытался вывести отчет программно.

А насчет как подсунуть свою таблицу значений в запрос копайте в этом направлении:
ВнешниеНаборыДанных = Новый Структура;
	ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ);
        ПроцКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных);

Потом в схеме компоновки можно использовать поля из своей ТЗ.
jan-pechka; +1 Ответить
8. Щука Исключительная (jan-pechka) 129 12.01.18 10:10 Сейчас в теме
(7)
что у вас получится сформировать отчет своей самодельной кнопкой


Хорошо,начнем с самого простого: создала новый Отчет,дала ему только имя и сразу же на вкладке "Основные" нажимаю на кнопку "СхемаКомпановкиДанных",появляется конструктор СКД,на его первой вкладке - выбираю "Запрос",нажимаю на кнопку "КонструкторЗапросов",в открывшемся окне Конструктора - нахожу кнопку "Запрос",вставляю в него текст запроса,который должен рассчитывать необходимые данные для Отчета.см.рис1

Далее сохраняю это модальное окно с запросом - все четко попадает в КонструкторЗапроса,но если сохранить, то в форме СКД - появляется ошибка см.рис2

Что-то не нравится СКД - моя переданная в Параметрах запроса временная таблица....см.рис3

Что делать????
Прикрепленные файлы:
9. Andrey Kolesnikov (Boneman) 169 12.01.18 10:17 Сейчас в теме
(8) в таком простом варианте, вообще отчет можно голой схемой реализовать.
Не нужно никаких компоновщиков и программирования.
В самой схеме делается макет, с шапкой и таблицей.
Парочку источников данных запрос, один для заполнения шапки, другой для выборки и получим такой отчет, состоящий исключительно из схемы СКД.
10. Щука Исключительная (jan-pechka) 129 12.01.18 10:24 Сейчас в теме
(9)
Парочку источников данных запрос, один для заполнения шапки, другой для выборки и получим такой отчет, состоящий исключительно из схемы СКД.


Вот запрос,который мне нужно запустить через СКД:


ВЫБРАТЬ
	ВнешниеДанные.Контрагенты,
	ВнешниеДанные.Партнеры
ПОМЕСТИТЬ ВнешниеДанные
ИЗ
	&ВнешниеДанные КАК ВнешниеДанные
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Представление КАК ВидКонтактов,
	КонтрагентыКонтактнаяИнформация.Вид.Наименование КАК Контакты
ИЗ
	ВнешниеДанные КАК ВнешниеДанные
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
		ПО ВнешниеДанные.Контрагенты = КонтрагентыКонтактнаяИнформация.Ссылка

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	ПартнерыКонтактнаяИнформация.Представление,
	ПартнерыКонтактнаяИнформация.Вид.Наименование
ИЗ
	ВнешниеДанные КАК ВнешниеДанные
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
		ПО ВнешниеДанные.Партнеры = ПартнерыКонтактнаяИнформация.Ссылка
Показать


В этом запросе есть временная таблица,в которую потом нужно поместить данные из текущего документа,поэтому данная таблица передаетя в виде Параметра! Но СКД,см.пост(8) - не понимает...или не принимает параметр в виде временной таблицы...

Хотя если тот же запрос организовывать через обычный Отчет-Макет (без СКД),то работает!

п.с.здесь как-то по другому нужно задать сам запрос в СКД,но вот как???

п.с.2.Прикреплю на всякий случай внешний Отчет-Макет, который работает без СКД,только я данный отчет вызываю программно из документа,поэтому в нем нет кнопки сформировать.
Чтобы вызвать отчет-макет программно,в модуле формы документа под кнопочкой пишем сл.код:

&НаКлиенте
Процедура КонтактыКлиента(Команда)
Структура=Новый Структура("Партнеры,Контрагенты",Объект.Партнер,Объект.Контрагент);
	 УсловияОтбора=Новый Структура("Партнеры,Контрагенты,Договор,ДатаДоговора,СсылкаДоговора",
	 								Объект.Партнер,Объект.Контрагент,Объект.Номер,Объект.Дата,Объект.Ссылка);
	 ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
	ОткрытьФорму("Отчет.КонтактыКлиентов.ФормаОбъекта", ПараметрыФормы); 
 КонецПроцедуры
Показать
Прикрепленные файлы:
КонтактыКлиентов.erf
11. Andrey Kolesnikov (Boneman) 169 12.01.18 10:31 Сейчас в теме
(10)
Вот запрос,который мне нужно запустить через СКД:

запрос в СКД, это должен быть запрос из БД.
А внешние данные, это уже и конструировать надо по другому, не запрос, а "добавить набор данных обьект" - где описываешь свою структуру тз, которую будешь подпихивать.
И объединяем со своим запросом объединением.
А подпихиваешь применрно как тебе в (7) написали
jan-pechka; +1 Ответить
12. Щука Исключительная (jan-pechka) 129 12.01.18 10:37 Сейчас в теме
(11)
А подпихиваешь применрно как тебе в (7) написали


здесь мне описали: когда программно буду вызывать СКД,то в ПроцессорКомпановкиДанных - уже затолкаю эту временную таблицу,но...

Пока с того же поста(7) дали совет запустить СКД не программно,а в "живую" под кнопочку "Сформировать"...Вот пробую с чистого листа, но сразу же на этом запросе и застряла...

Со старта вижу вывод один - СКД не работает как обычный конструктор запросов - к нему (к СКД) нужно найти другой подход, может не нужно ему весь запрос сразу запихивать,а разбить его на части??? Сейчас попробую...
14. Andrey Kolesnikov (Boneman) 169 12.01.18 10:43 Сейчас в теме
(12)
может не нужно ему весь запрос сразу запихивать,а разбить его на части???

я же тебе так и написал...наверное не очень понятно.
Да
Добавляешь два набора данных, один Набор данных объект - для твоей временной таблицы.
Другоц набор данных запрос- где кусок запроса уже получающий непосредственно данные.
Ну а потом соединяешь все это средствами СКД.

А подпихиваешь, эту таблицу программно, в момент компоновки.
jan-pechka; +1 Ответить
13. Andrey Kolesnikov (Boneman) 169 12.01.18 10:39 Сейчас в теме
(10)
И вообще этот код, какой-то бессмысленный.
    Структура=Новый Структура("Партнеры,Контрагенты", Источник.Партнеры,Источник.Контрагенты);
    
    //Документы.ДоговорСтроительноМонтажныхРабот.КонтактыКлиентаНаСервереМодуль(Структура,ТаблицаЗапр);
    //не работает вызов рассчетной проц.ни с мод.дока ни с общего модуля.
    
    Партнеры=Источник.Партнеры;
    Контрагенты=Источник.Контрагенты;
    
    ВнешниеДанные=Новый ТаблицаЗначений;
    ВнешниеДанные.Колонки.Добавить("Партнеры",Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
    ВнешниеДанные.Колонки.Добавить("Контрагенты",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
    стр=ВнешниеДанные.Добавить();
    стр.Контрагенты=Контрагенты;
    стр.Партнеры=Партнеры;    
Показать

Таблица значений, с одной строкой, которая формируется из структуры, которая получается из значений отбора ?
Вообще ничего этого не нужно, сразу параметры запроса - эти значения передавай, и не надо никаких внешних таблиц городить.
15. Щука Исключительная (jan-pechka) 129 12.01.18 10:56 Сейчас в теме
(13)
И вообще этот код, какой-то бессмысленный.
Таблица значений, с одной строкой, которая формируется из структуры, которая получается из значений отбора ?


Это код не бессмысленный,это пример...Просто в примере - в документе всего две переменные - они из шапки этого дока берутся, а вот в реальной жизни - данные для фильтрации запроса берутся из табличной части, в которой может быть и сто строк...Конечно,что тогда не простой структурой придется передавать такие данные во временную таблицу,а массивом,или,как недавно меня подучили, - массивом структур,но это уже ньюансы,главное -запустить от простых параметров работу запроса именно с Временной таблицей!

(14)
Добавляешь два набора данных, один Набор данных объект - для твоей временной таблицы.


Хорошо,вновь запустила чистый Отчет,выбрала кнопку СКД,на ее первой вкладке "НаборыДанных"- выбираю "Объект" - и записываю в него названия полей своей временной Таблицы см.рис
То есть делаю все тоже самое,что ранее в Консоли запросов - сначала формировала Временную таблицу,а потом связывала ее с обектами базы.
Сейчас посмотрим,что получится...
Прикрепленные файлы:
16. Щука Исключительная (jan-pechka) 129 12.01.18 11:24 Сейчас в теме
А теперь сравниваю работу с созданием временной таблицы в Консоли запросов и в Конструкторе СКД:

1.В Консоли запросов - открываем КонструкторЗапросов,на его первой вкладке,в центральном окне - жмем на кнопку "СоздатьОписаниеВременнойТаблицы",вводим имя этой таблицы,обязательно в начале поставить амперсанд & - это будет означать,что наша Временная Таблица будет передаваться как Параметр!
Далее, на вкладке КонструктораЗапросов "Дополнительно" - указываем,что это временная таблица с именем таким-то (см.рис)

2.В Конструкторе СКД - на его первой вкладке"НаборыДанных" - создаем новый набор данных - Объект, здесь же на этой вкладке просто добавляем новые поля этой внешней таблицы....где здесь можно указать,что эта таблица будет параметром - не нашла я пока...см.рис2

3.Далее сравниваем - в КонсолиЗапросов-в КонструктореЗапросов,добавили новый запрос на вкладке "ПакетЗапросов",переходим на первую вкладку и КРОМЕ объектов БД - мы видим список наших временных таблиц!!!! см.рис3

Здесь все просто:перетягиваем в среднее окно КонструктораЗапроса - Временную таблицу и таб.часть справочника Контрагенты - в поля выбрасываем данные из справочника,а вот на вкладке "Связи"КонструктораЗапросов - устанавливаем связь нашей временной таблицы и данных из справочника.

4.В СКД на ее первой вкладке - создаю новый НаборДанных=Запрос,открываю здесь КонструкторЗапросов,вытягиваю свой справочник Контрагентов,а как его здесь связать с моей временной таблицей???? Здесь даже в списке ее нет...см.рис4
Прикрепленные файлы:
17. Andrey Kolesnikov (Boneman) 169 12.01.18 11:28 Сейчас в теме
(16)
как его здесь связать с моей временной таблицей

не в запросе надо связывать,
а связывать сами наборы данных, на закладке "связи наборов данных" в СКД.
Там и условия и параметры... отдаленно напоминающее, как в конструкторе запросов, когда левыми соединениями соединяешь

P.S.
Вообще поэкспериментируй с несколькими наборами данных, типа запрос.
Как разберешся, как их можно связывать, как использовать одну в качестве параметра для другого тогда уже и с внешним набором данных будешь экспериментирвоать
jan-pechka; +1 Ответить
18. Щука Исключительная (jan-pechka) 129 12.01.18 11:36 Сейчас в теме
(17)
связывать сами наборы данных, на закладке "связи наборов данных" в СКД


Хорошо,но когда я в КонсолиЗапросов создавала запрос,то ВремТаб связывала с каждым справочником Левым соединением,а потом все эти выборки связывала Общим Обединением...Здесь же в СКД - если в запросе просто выбрать оба справочника,не указывая им фильтрацию в виде Врем.Таб,то потом в самом СКД - связь временной таблицы указывается уже сразу со всем запросом...см.рис

п.с.в запросе получается все данные справочников будут тянуться...это очень энергоемко будет на больших базах...
Прикрепленные файлы:
19. Щука Исключительная (jan-pechka) 129 12.01.18 11:57 Сейчас в теме
Итак,в запросе СКД в конструкторе - пришлось из справочников вытянуть их ссылки,потом уже в самом СКД на закладке "СвязиНаборовДанных" - как-то связать данные справочники(они в СКД находятся в НаборДанных1) с временной таблицей см.рис1

Далее привязала вызов этого Отчета-СКД к кнопке на форме документа, жмем эту кнопку - чтобы проверить КАК вообще это будет работать в СКД,сразу же выдается ошибка см.рис2 -
нет данных в нашей временной таблице....

Так как данный отчет я вызываю программно,передав в параметрах вызова все необходимые данные чтобы составить временную таблицу значений,сейчас попробую в модуле формы моего Отчет-СКД вставить процедуру "ПриСозданииНаСервере" со следующим кодом:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если ЗначениеЗаполнено(Параметры.Отбор) Тогда
		СформироватьТаблицуСДанными();
	КонецЕсли;
КонецПроцедуры
Прикрепленные файлы:
20. Щука Исключительная (jan-pechka) 129 12.01.18 12:06 Сейчас в теме
Так,что-то тут не то...Пока же решили не создавать программно сам СКД,а вот как же в готовый объект Отчет со схемой СКД - затолкать данные внешней таблицы????

Если просто в модуле формы этого отчета создаю таблицу значений и загружаю в нее свои данные,переданные документом,то это еще не значит что "СКД" догадается их оттуда взять:

Процедура СформироватьТаблицуСДанными()
	 Перем ТаблицаЗапр;
	
	 Источник=Параметры.Отбор;
	 
	 Партнеры=Источник.Партнеры;
	Контрагенты=Источник.Контрагенты;
	
	ВнешниеДанные=Новый ТаблицаЗначений;
	ВнешниеДанные.Колонки.Добавить("Партнеры",Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
	ВнешниеДанные.Колонки.Добавить("Контрагенты",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
	стр=ВнешниеДанные.Добавить();
	стр.Контрагенты=Контрагенты;
	стр.Партнеры=Партнеры;	

КонецПроцедуры
Показать


КАК здесь теперь эту таблицу,заполненную данными прикрутить к временной таблице СКД "ВнешниеДанные"???
21. Andrey Kolesnikov (Boneman) 169 12.01.18 12:35 Сейчас в теме
(20)
десь теперь эту таблицу,заполненную данными прикрутить к временной таблице СКД "ВнешниеДанные

В модуле объекта, самого отчета есть процедура "При компоновке результата",
вот туда всю нестандартную бодягу и пихаешь
в это место
	// Выполняем компоновку с помощью процессора компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);

вот внешние наборы данных, это и есть структура с таблицами значений, и ключами совпадающими по имени

В типовухах посмотри, там полно примеров вмешательства в эту процедуру.
Ну а про Инициализировать - СП покури
jan-pechka; +1 Ответить
22. Щука Исключительная (jan-pechka) 129 12.01.18 14:27 Сейчас в теме
(21)
В модуле объекта, самого отчета есть процедура "При компоновке результата",
вот туда всю нестандартную бодягу и пихаешь


Нашла такую стандартную процедуру "ПриКомпановкеРезультата" в модуле Отчета, заглянула в синтаксис-помощник см.рис -

оказывается если присоздании Отчета нажать на вкладке "Основные" кнопку "Схема компановки данных",а потом еще и создать стандартную форму отчета, то система сама на форму поставит реквизит "Результат" с типом Тиабличный документ,а так же реквизит "ДанныеРасшифровки" с типом строка,то есть система создает сразу все готовые реквизиты как для процедуры ПриКомпановкеРезультата.....но пока не соображу как точно в нее данные прикрутить....(типовых на текущий момент под рукой нет - чтобы из них подсмотреть этот механизм)...

п.с.Пожалуйста, выложите код этой проц.ПриКомпановкеРезультата из типовых как пример....
Прикрепленные файлы:
23. Andrey Kolesnikov (Boneman) 169 12.01.18 14:32 Сейчас в теме
(22)
например из УНФ какой то отчет
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	НастройкиОтчета = КомпоновщикНастроек.Настройки;
	
	ПараметрыОтчета = ОтчетыУНФ.ПараметрыФормированияОтчета(НастройкиОтчета);
	УправлениеНебольшойФирмойОтчеты.ВывестиЗаголовокОтчета(ПараметрыОтчета, ДокументРезультат);
	
	ОтчетыУНФ.СтандартизироватьСхему(СхемаКомпоновкиДанных);
	
	УправлениеНебольшойФирмойОтчеты.УстановитьМакетОформленияОтчета(НастройкиОтчета);
	ДополнительныеСвойства = КомпоновщикНастроек.Настройки.ДополнительныеСвойства;
	
	Если ДополнительныеСвойства.Свойство("Сравнение") 
		И ТипЗнч(ДополнительныеСвойства.Сравнение)=Тип("ПеречислениеСсылка.Периодичность") 
		И ЗначениеЗаполнено(ДополнительныеСвойства.Сравнение)
		И НЕ ДополнительныеСвойства.Сравнение=Перечисления.Периодичность.ПустаяСсылка() Тогда
		Периодичность = ДополнительныеСвойства.Сравнение;
	Иначе
		Периодичность = Неопределено;
	КонецЕсли;
	
	ПараметрыФормирования = Новый Структура;
	ПараметрыФормирования.Вставить("ГруппировкаКолонок", ?(ДополнительныеСвойства.Свойство("ГруппировкаКолонок"), ДополнительныеСвойства.ГруппировкаКолонок, "ГруппировкаКолонок"));
	ПараметрыФормирования.Вставить("Сравнение", ?(ДополнительныеСвойства.Свойство("Сравнение"), ДополнительныеСвойства.Сравнение, "Сравнение"));
	Если ТипЗнч(ПараметрыФормирования.Сравнение)=Тип("ПеречислениеСсылка.Периодичность") Тогда
		ПараметрыФормирования.Вставить("Сравнение", "ДинамическийПериод");
	КонецЕсли;
	ПараметрыФормирования.Вставить("ПорядокГруппировок", Новый Массив);
	ПараметрыФормирования.Вставить("ПорядокГруппировокЗаполнен", Ложь);
	ПараметрыФормирования.Вставить("СтруктураПолейСравнения", Новый Структура);
	Если ДополнительныеСвойства.Свойство("ИспользоватьСравнение") И ДополнительныеСвойства.ИспользоватьСравнение Тогда
		ОтчетыУНФ.ОбновитьПоляСравнения(СхемаКомпоновкиДанных, НастройкиОтчета, ПараметрыФормирования);
	КонецЕсли; 
	
	ВнешниеНаборыДанных = Новый Структура;
	Если НЕ СхемаКомпоновкиДанных.НаборыДанных.Найти("ТаблицаПериодов")=Неопределено Тогда
		ПериодОтчета = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("СтПериод");
		ТаблицаДанных = Новый ТаблицаЗначений;
		ТаблицаДанных.Колонки.Добавить("ДатаПериода",Новый ОписаниеТипов("Дата",Новый КвалификаторыДаты(ЧастиДаты.Дата)));
		КонецПериода = ?(ЗначениеЗаполнено(ПериодОтчета.Значение.ДатаОкончания),КонецДня(ПериодОтчета.Значение.ДатаОкончания), КонецДня(ТекущаяДатаСеанса()));
		НачалоПериода = НачалоДня(ПериодОтчета.Значение.ДатаНачала);
		Если НЕ ЗначениеЗаполнено(НачалоПериода) Тогда
			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
			               |	Управленческий.Период КАК Период
			               |ИЗ
			               |	РегистрБухгалтерии.Управленческий КАК Управленческий
			               |
			               |УПОРЯДОЧИТЬ ПО
			               |	Период";
			Выборка = Запрос.Выполнить().Выбрать();
			Если Выборка.Следующий() Тогда
				НачалоПериода = НачалоДня(Выборка.Период);
			Иначе
				НачалоПериода = НачалоДня(ДобавитьМесяц(ТекущаяДатаСеанса(), -12));
			КонецЕсли; 
		КонецЕсли; 
		ПолеСхемы = СхемаКомпоновкиДанных.НаборыДанных[0].Поля.Найти("ДинамическийПериод");
		Если НЕ ЗначениеЗаполнено(Периодичность) Тогда
			ТаблицаДанных.Добавить().ДатаПериода = КонецПериода;
			Если ПолеСхемы <> Неопределено Тогда
				ПолеСхемы.Заголовок = НСтр("ru = 'Баланс'");
				ПараметрОформленияФормат = ПолеСхемы.Оформление.Элементы.Найти("Формат");
				ПараметрОформленияФормат.Значение = "ДЛФ=D";
				ПараметрОформленияФормат.Использование = Истина;
			КонецЕсли; 
		Иначе
			Позиция = НачалоПериода;
			Пока Позиция<КонецПериода Цикл
				Позиция = СледующаяПозиция(Позиция, Периодичность);
				ТаблицаДанных.Добавить().ДатаПериода = Позиция;
			КонецЦикла;
			Если ПолеСхемы <> Неопределено Тогда
				СтрокаДлительностьПериода = ОбщегоНазначения.ИмяЗначенияПеречисления(Периодичность);
				ПолеСхемы.Заголовок = СтрокаДлительностьПериода;
				ПараметрОформленияФормат = ПолеСхемы.Оформление.Элементы.Найти("Формат");
				ПараметрОформленияФормат.Значение = УправлениеНебольшойФирмойОтчеты.ФорматнаяСтрокаДинамическогоПериода(Периодичность);
				ПараметрОформленияФормат.Использование = Истина;
			КонецЕсли;
		КонецЕсли; 
		ВнешниеНаборыДанных.Вставить("ТаблицаПериодов", ТаблицаДанных);
	КонецЕсли;
	
	ОтчетыУНФ.ДобавитьСимволВалютыКЗаголовкамПолей(СхемаКомпоновкиДанных, "СуммаОстаток");
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
	
	//Создадим и инициализируем процессор компоновки
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
	
	//Создадим и инициализируем процессор вывода результата
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	//Обозначим начало вывода
	ПроцессорВывода.НачатьВывод();
	ТаблицаЗафиксирована = Ложь;

	ДокументРезультат.ФиксацияСверху = 0;
	
	//Основной цикл вывода отчета
	ОбластиКУдалению = Новый Массив;
	КоличествоДиаграмм = 0;
	
	Пока Истина Цикл
		//Получим следующий элемент результата компоновки
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();

		Если ЭлементРезультата = Неопределено Тогда
			//Следующий элемент не получен - заканчиваем цикл вывода
			Прервать;
		Иначе
			// Зафиксируем шапку
			Если  Не ТаблицаЗафиксирована 
				  И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 
				  И ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда

				ТаблицаЗафиксирована = Истина;
				ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;

			КонецЕсли;
			//Элемент получен - выведем его при помощи процессора вывода
			ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
			
			ОтчетыУНФ.ВывестиКартинкиВЭлементРезультата(ЭлементРезультата, ДанныеРасшифровки, ДокументРезультат, ПараметрыФормирования); 
			
		КонецЕсли;
	КонецЦикла;

	ПроцессорВывода.ЗакончитьВывод();
	
	Для каждого Область Из ОбластиКУдалению Цикл
		ДокументРезультат.УдалитьОбласть(Область, ТипСмещенияТабличногоДокумента.ПоВертикали);
	КонецЦикла;
	
	ОтчетыУНФ.ВыполнитьОперацииПослеФормирования(ДокументРезультат, ПараметрыФормирования);
	
	ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, 1, ДокументРезультат.ВысотаТаблицы, 1).Текст = НСтр("ru = 'Чистые активы'");
	
КонецПроцедуры
Показать
jan-pechka; +1 Ответить
25. Щука Исключительная (jan-pechka) 129 12.01.18 14:43 Сейчас в теме
(23)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;


Спасибо за код....до ночи хватит разбираться...
Особенно,если бегло пробежаться по коду,то сразу бросится в глаза:

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
    
    //Создадим и инициализируем процессор компоновки
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
    
    //Создадим и инициализируем процессор вывода результата
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    //Обозначим начало вывода
    ПроцессорВывода.НачатьВывод();
Показать


то есть это тот же алгоритм формирования программно СКД,код которого я в посте(2) нашла на форуме.....Нет,получается,никакого ПРОГРАММНОГО формирования СКД....а чтобы в это СКД элементарно свои данные из внешней таблицы подключить - уже нужно полностью уметь работать со всем этим механизмом СКД....

п.с.что ж,буду разбираться...вот книжку Хрусталевой достала по запросам и СКД - это страшно!!!!

п.с.эх,а так хотелось быстренько:оп,оп,как в обычном отчете - и готово!!!))
26. Andrey Kolesnikov (Boneman) 169 12.01.18 14:49 Сейчас в теме
(25)
Нет,получается,никакого ПРОГРАММНОГО формирования СКД

почему нет.
Можно вообще ничего этого не использовать,
полностью программно создать новую схему, инициализировать ее, загрузить в компоновщик, и выполнить. Да еще и программно, все в схеме попеременять, не так как конструктором сделано.

Просто, с объекте отчет, можно перехватить стандартную обработку, (см. по коду начинается СтандартнаяОбработка = Ложь;)
и заколбасить все свое.
Можешь скачать консоли отчетов универсальные, и посмотреть как там программно разные схемы подпихиваются и обрабатываются. Хотя, конечно поковырятся там придется немало, чтобы понять.
jan-pechka; +1 Ответить
27. Щука Исключительная (jan-pechka) 129 12.01.18 15:45 Сейчас в теме
(26)
Можешь скачать консоли отчетов универсальные, и посмотреть как там программно разные схемы подпихиваются и обрабатываются.


Скачала вот отсюда Консоль СКД http://1c-uroki.ru/poleznoe_po_1s/konsol_skd_dlja_1S_8.3_i_8.2

Открыла ее под толстым клиентом,чтобы все конструкторы работали.
Так же как в своем объекте-Отчете - задала в КонсолиСКД сначала временную таблицу,потом просто запросом соединила ее с одним справочником (чтобы пока не заморачиваться с несколькими справочниками) - результат на рис. ....Нет никакого результата...

и инструкции - как пользоваться этой Консолью тоже нет...

Эта КонсольЗапросов даже не спрашивает где ей брать данные для внешней таблицы...Пробежалась по всем ее вкладкам - ничего подобного,куда можно было бы вводить Параметры для отчетов нет....

Что-то совсем плохо в СКД с временными таблицами....

п.с.прикрепляю на всякий случай здесь саму КонсольСКД с того сайта
п.с2. нашла еще варианты Консоли СКД с оглашенной многофункциональностью http://1clancer.ru/catalog/2 но запустила,а это под обычные формы и у меня никак не показывается...хотя настройку своей базы-черновика я сделала:чтобы обычные и упр.запускались - ошибка - нет основной заданной формы,где это задать - не разберусь...
Прикрепленные файлы:
konsol_skd_dlja_1s_8.3_i_8.2.zip
24. Andrey Kolesnikov (Boneman) 169 12.01.18 14:35 Сейчас в теме
(22)
оказывается если присоздании Отчета нажать на вкладке "Основные" кнопку "Схема компановки данных",а потом еще и создать стандартную форму отчета, то система сама на форму поставит

вообще не нужно никакой формы делать,
голую схему - и все что заложено в схему само будет работать.
А форма отчета откроется, та которая в корне кофигурации в формах отчета указана.

Это для нестандартных, можно форму нарисовать свою.
И форма настроек, тоже отрисуется автоматом, с реквизитами со всеми какие нужно.
1С конечно сильно покрутела после 7.7, многое делается на раз два, только голову приложить
jan-pechka; +1 Ответить
28. Щука Исключительная (jan-pechka) 129 12.01.18 16:26 Сейчас в теме
Хорошо,пока все что пересмотрела с консолью отчетов по СКД - или то же самое что делает механизм СКД в конфигураторе в объекте Отчет, или что-то очень непонятное,которе к тому же уже не запускается даже под режимом совместимости 82...

Мне всего-то нужно: в отчете СКД на простой запрос из справочника(ну может быть из нескольких справочников) - наложить фильтр по отбору в виде временной таблицы...и никак!!!! Да,СКД - это жесть!!!)))
29. DenisCh Гейтс (DenisCh) 12.01.18 16:29 Сейчас в теме
Первый источник - твоя таблица. Описываешь её как набор данных.
второй источник - твой запрос к справочнику.
объединяешь источники через связь по ключевому полю.

потом в ПриКомпоновкеРезультата -

	СтандартнаяОбработка = ложь;
	ДокументРезультат.Очистить();
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); 
	
	ВнешниеНаборыДанных = Новый Структура; 
	ВнешниеНаборыДанных.Вставить("тзДанные", тз); 

	Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);    
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; 
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);  
	табДок = Новый ТабличныйДокумент; 
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; 
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); 
Показать
jan-pechka; +1 Ответить
30. Щука Исключительная (jan-pechka) 129 12.01.18 16:34 Сейчас в теме
(29)
ВнешниеНаборыДанных.Вставить("тзДанные", тз);


весь механизм Сборки СКД я уже в процедуру ПриКомпановкеРезультата вставила:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	 Перем ТаблицаЗапр;
	  СтандартнаяОбработка = Ложь;
	  
	 Источник=Параметры.Отбор;
	 
	 Партнеры=Источник.Партнеры;
	Контрагенты=Источник.Контрагенты;
	
	сообщить("Партнеры="+Партнеры+" Контрагенты="+Контрагенты);
	
	ВнешниеДанные=Новый ТаблицаЗначений;
	ВнешниеДанные.Колонки.Добавить("Партнеры",Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
	ВнешниеДанные.Колонки.Добавить("Контрагенты",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
	стр=ВнешниеДанные.Добавить();
	стр.Контрагенты=Контрагенты;
	стр.Партнеры=Партнеры;
	
	//2.Чтобы Макет "завелся"-в него нужно передать схему и настройки:
	//схема - из ПС это и есть физический объект Макет,который сосдала автоматом СКД
	Схема=Отчеты.КонтактыКлиентов.ПолучитьМакет("ОсновнаяСхемаКомпановкиДанных");
	//у макета есть стандартные свойства "НастройкиПоУмолчанию":
	Настройки=Схема.НастройкиПоУмолчанию;  
	
	//1.Нужно поймать выполнение Макета
	Компановщик=Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет=Компановщик.Выполнить(Схема,Настройки);
	
	Компановщик=Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет=Компановщик.Выполнить(Схема,Настройки);
	//Обработка данных.Активируем процессор обработки данных
	Процессор=Новый ПроцессорКомпоновкиДанных;
	//Подгрузка внешних данных
	Процессор.Инициализировать(Макет,
						Новый Структура("ВнешниеДанные",ВнешниеДанные));
						
	//5.Выводим данные в твбличный документ
	ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	 Результат=ПроцессорВывода.Вывести( Процессор);
	Результат.Показать();

КонецПроцедуры
Показать


но теперь в данную процедуру - никак не попадает,даже параметрами - мои данные для временнойТаблицы!!!!........................
31. DenisCh Гейтс (DenisCh) 12.01.18 16:37 Сейчас в теме
(30)
теперь в данную процедуру - никак не попадает,даже параметрами - мои данные

Тут должна быть картинка с лётчиком, но я задам вопрос по-другому.
Что куда когда не попадает? Что такое параметры?
Отладчик работает? Что показывает?
jan-pechka; +1 Ответить
32. Щука Исключительная (jan-pechka) 129 12.01.18 16:48 Сейчас в теме
(31)
Что куда когда не попадает?


Все просто:есть документ,в нем кнопка. Жмем кнопку в документе - открываться должен СКД-Отчет. И это работает с обычным Отчето-Макетом,но я учусь и очень хочу догнать - как то же самое сделать в с СКД-Отчетом...

Итак,под кнопочкой на форме документа - есть запускающая процедура,которая открывает форму Отчета, при этом та же процедура в своих параметрах передает Структуру.
А вот в эту структуру - я запихиваю текущие данные по документу - эти данные должны быть записаны во Временную таблицу, которая и есть фильтр данных для запроса (запрос просто выбирает данные из справочников).

Если в модуле формы отчета использовать его стандартную процедуру ПриСозданииНаСервере,то отладчиком мы видим,что в Параметры этой процедуры при ее отработке - передается наша Структура данных из документа.

И в данной процедуре - мы можем что угодно делать с полученными данными документа:создавать временную таблицу и запихивать туда эти данные, но
здесь не запускается механизм компановки СКД
- почему не знаю....

А если сборку СКД делать в модуле Отчета в процедуре ПриКомпановкеРезультата,то здесь другая фишка - я не могу передать данные,чтобы сформировать эту временнуюТаблицу "ВнешниеДанные"

п.с.на всякий случай залью сюда свою базу-черновик.На текущий момент идет борьба в Отчете КонтактыКлиентовСКД
Прикрепленные файлы:
1Cv8_черновик.dt
33. DenisCh Гейтс (DenisCh) 12.01.18 16:51 Сейчас в теме
"стандартную процедуру ПриСозданииНаСервере"
"здесь не запускается механизм компановки СКД - почему не знаю.... "

А почему бы он тут должен был запускаться? переноси код из прикомпоновке в ПриСозданииНаСервере.
Или попробуй позвать отчет.СкомпоноватьРезультат()...
34. Щука Исключительная (jan-pechka) 129 12.01.18 17:00 Сейчас в теме
(33)
А почему бы он тут должен был запускаться? переноси код из прикомпоновке в ПриСозданииНаСервере.
Или попробуй позвать отчет.СкомпоноватьРезультат()


пробывала:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Сообщить("Проц.ПриСозданииНаСервере "+Параметры.Отбор);
	Если ЗначениеЗаполнено(Параметры.Отбор) Тогда
		СформироватьТаблицуСДанными();
	КонецЕсли;
КонецПроцедуры

Процедура СформироватьТаблицуСДанными()
	 Перем ТаблицаЗапр;
	
	 Источник=Параметры.Отбор;
	 
	 Партнеры=Источник.Партнеры;
	Контрагенты=Источник.Контрагенты;
	
	сообщить("Партнеры="+Партнеры+" Контрагенты="+Контрагенты);
	
	ВнешниеДанные=Новый ТаблицаЗначений;
	ВнешниеДанные.Колонки.Добавить("Партнеры",Новый ОписаниеТипов("СправочникСсылка.Партнеры"));
	ВнешниеДанные.Колонки.Добавить("Контрагенты",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
	стр=ВнешниеДанные.Добавить();
	стр.Контрагенты=Контрагенты;
	стр.Партнеры=Партнеры;
	
	//2.Чтобы Макет "завелся"-в него нужно передать схему и настройки:
	//схема - из ПС это и есть физический объект Макет,который сосдала автоматом СКД
	Схема=Отчеты.КонтактыКлиентов.ПолучитьМакет("ОсновнаяСхемаКомпановкиДанных");
	//у макета есть стандартные свойства "НастройкиПоУмолчанию":
	Настройки=Схема.НастройкиПоУмолчанию;  
	
	//1.Нужно поймать выполнение Макета
	Компановщик=Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет=Компановщик.Выполнить(Схема,Настройки);
	
	Компановщик=Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет=Компановщик.Выполнить(Схема,Настройки);
	//Обработка данных.Активируем процессор обработки данных
	Процессор=Новый ПроцессорКомпоновкиДанных;
	//Подгрузка внешних данных
	Процессор.Инициализировать(Макет,
						Новый Структура("ВнешниеДанные",ВнешниеДанные));
						
	//5.Выводим данные в твбличный документ
	ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	 Результат=ПроцессорВывода.Вывести( Процессор);
	Результат.Показать();


КонецПроцедуры
Показать


...глухо как в танке - ничего не происходит при открытии из документа этого отчета...даже команда Сообщить() - не реагирует...
35. DenisCh Гейтс (DenisCh) 12.01.18 17:06 Сейчас в теме
(34)
аже команда Сообщить() - не реагирует

какая из двух?
36. Щука Исключительная (jan-pechka) 129 12.01.18 17:14 Сейчас в теме
(35)
какая из двух?


любая из двух Сообщить():в процедуре ПриСозданииНаСервере и внутри этой проц.идет переключение на проц.СформироватьТаблицуСДанными - ничего не показывает
37. Щука Исключительная (jan-pechka) 129 12.01.18 17:23 Сейчас в теме
Решила пройтись отладчиком внутри процедуры ПриСозданииНаСервере и в подчиненной ей процедуре СформироватьТаблицуСДанными - но почему-то Отладчик не запускает выражение "Вычислить".....

Это означает,что при открытии данного отчетаСКД в пользовательском режиме - не используется стандартная процедура ПриСозданииНаСервере?????

Тогда вопрос - если стандартная процедура "ПриСозданииНаСервере " в СКД-отчете не работает,то КАК передать данные для временной таблицы в др.стандарную процедуру отчета "ПриКомпоновкеРезультата"????
Прикрепленные файлы:
38. Sergey Andreev (starik-2005) 1346 12.01.18 22:39 Сейчас в теме
Неясно, зачем тут нужна временная таблица, но может я чего недопонимаю. А по поводу отчета, то вот для бухгалтерии 3.0 без партнеров (только контрагенты) в качестве пищи для ума...
Прикрепленные файлы:
ВнешнийОтчет1.erf
jan-pechka; +1 Ответить
39. Щука Исключительная (jan-pechka) 129 13.01.18 18:14 Сейчас в теме
Ура,заработал Отчет-СКД при его программном вызове!!!

Только для того,чтобы происходил отбор по данным из временной таблицы - пришлось немного заморочиться)) До этого у меня во временной таблице было два поля с типом данных из справочников- Партнеры и Клиенты, но если такой подход отлично работает при открытии простого Отчета-Макета,в котором выполняется сложный запрос, то данный метод не работает с СКД...

Вот здесь очень наглядно описано как в СКД сделать простое объединение двух таблиц:
http://helpme1c.ru/sistema-komponovki-dannyx-1s-8-3-dlya-nachinayushhix-urok-9

А вот здесь есть описание создания составных типов данных:
http://helpme1c.ru/opisanie-tipov-v-yazyke-1s-8-v-primerax

Здесь мне очень понравилось как красиво и четко описано (с комментариями) сам механизм создания СКД:
http://forum-1c.ru/index.php?topic=12776.0

//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
                                        Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
                                                   ДанныеРасшифровки);

//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();

//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных
                                                  ВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Показать


На рис.запустившийся СКД,который данные отбирает четко по содержанию из временной таблицы
Прикрепленные файлы:
41. Sergey Andreev (starik-2005) 1346 13.01.18 19:14 Сейчас в теме
(39)
Только для того,чтобы происходил отбор по данным из временной таблицы - пришлось немного заморочиться
Отбор в СКД - это отдельная сущность, и временные таблицы там не нужны.
jan-pechka; +1 Ответить
42. Щука Исключительная (jan-pechka) 129 13.01.18 19:48 Сейчас в теме
(41)
и временные таблицы там не нужны


СКД - вообще не гибкий инструмент, если сравнивать с обычным Отчето-Макетом,в который сколь угодно можно запихать сложный запрос...

Но в данном примере - я использовала временную таблицу - отбор,фильтр по запросу из справочников...

А как иначе,чем не через временные таблицы,здесь можно установить Отбор???см.рис

п.с.и в данном примере - у меня еще самая простая временная таблица формируется - из данных шапки документа, а в жизни - обычно следует накладывать фильтр из данных табличной части документа...
Прикрепленные файлы:
43. Щука Исключительная (jan-pechka) 129 13.01.18 20:06 Сейчас в теме
(41)
Отбор в СКД - это отдельная сущность, и временные таблицы там не нужны.


Допустим,что в простом самом примере - мы можем СКД построить без временныхТаблиц:

Просто два запроса,обединены в общую таблицу. см.рис

Но в каждом из запросов - мы обязаны указать ссылку на документ - он будет фильтром по выборке из справочников.

Вопрос: Как теперь мне заполнить данную ссылку при формировании СКД?

п.с.в обычном отчете-запросе - любые параметры легко выловить:Запрос.УстановитьПараметр("Ссылка",Документ.Ссылка);
А в случае с СКД - где ловить его параметры????
Прикрепленные файлы:
44. Щука Исключительная (jan-pechka) 129 13.01.18 20:43 Сейчас в теме
(43)
А в случае с СКД - где ловить его параметры?


Пока оставила СКД без врем.таб,только с одним параметром в запросах=Ссылка на документ.

в процедуре,которая формирует СКД вставила код - поиска параметра:

 Схема=ПолучитьОбщийМакет("КонтрагентыПартнерыСКД");
	ПараметрыСсылка=Схема.Параметры.Найти("Ссылка");
	Если ПараметрыСсылка=Неопределено Тогда
	        сообщить("нету никакого параметра");
	Иначе	
	        сообщить("есть параметрСсылка");
	КонецЕсли; 
	
	Настройки=Схема.НастройкиПоУмолчанию;  
	Компановщик=Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет=Компановщик.Выполнить(Схема,Настройки);
	Процессор=Новый ПроцессорКомпоновкиДанных;
Показать


При проверке в пользовательском режиме - сообщает,что нету у этого запроса-СКД никаких параметров...Как правильно установить параметры в СКД?
45. Щука Исключительная (jan-pechka) 129 13.01.18 23:56 Сейчас в теме
(43)
Допустим,что в простом самом примере - мы можем СКД построить без временныхТаблиц


Все,получился отчет-СКД без использования временных таблиц, но с установочными параметрами программно в процедуре ПриКомпоновкеРезультата

Только с самими запросами в СКД - пришлось сильно помучаться...зато отчет получился практически без кода!!! А открывается так же программно - из документа.

п.с.Дааааа,Вывод: Принцип построения запроса и по нему создания обычного Отчета-Макета - абсолютно отличается от принципа создания Отчета-СКД!

п.с.2 Теперь пробую вообще без объекта-Отчет собрать СКД....
Прикрепленные файлы:
40. Щука Исключительная (jan-pechka) 129 13.01.18 18:22 Сейчас в теме
К своему отчетику - прикрепила шаблон "МакетОформления" - теперь он совсем красивый!))

Единственный глюк пока на данный момент - никак не могу найти автонастройку ширины полей в отчете...Все уже перебрала-не видать такой...Приходится в ручную растягивать колонки...Может кто знает - где это находится?
Прикрепленные файлы:
46. Щука Исключительная (jan-pechka) 129 14.01.18 01:13 Сейчас в теме
Нет,не получается без Объекта-Отчет установить параметры СКД,например,ссылку на документ....

Вот код,шла по цепочке из синтаксис-помощника:

Схема=Обработки.ОбработкаКонтактыКлиентовСКД.ПолучитьМакет("КонтрагентыПартнерыСКД333");	
	Настройки=Схема.НастройкиПоУмолчанию;  //это методы СКД
	Нашли=Схема.Параметры.Найти("Ссылка");
	Если Нашли=Неопределено Тогда
	        Сообщить("не нашли параметр Ссылка");
	Иначе	
	          Сообщить("нашли Ссылку="+Нашли.Значение);
			инд= Схема.Параметры.Индекс(Схема.Параметры.Найти("Ссылка")); 
	КонецЕсли; 
	
	
	 //Схема.Параметры.Вставить( инд).Значение=Объект.ДопПараметр;
	  Схема.Параметры.Добавить("Ссылка").Значение =Объект.ДопПараметр;
	
	Компановщик=Новый КомпоновщикМакетаКомпоновкиДанных;
	Макет=Компановщик.Выполнить(Схема,Настройки);
	Процессор=Новый ПроцессорКомпоновкиДанных;
	Процессор.Инициализировать(Макет);
						
	ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	Отчет=ПроцессорВывода.Вывести( Процессор);
	
	Возврат Отчет;
Показать


А вот передать внешнию таблицу данных в СКД без использования объекта-Отчета - получается!!!

Отсюда следует вывод:что при программном создании СКД (без объекта-Отчет) - параметры,кроме как Внешняя Таблица Данных,передать нельзя!
47. Щука Исключительная (jan-pechka) 129 14.01.18 01:39 Сейчас в теме
Все,закончила работу над третьим видом отчета-СКД,который обходится полностью без объекта-Отчет,принимает внешние параметры в виде временной таблицы,и выводит данные!! см.рис.

Итак, из одной задачки - у меня получилось:
1.-3. три варианта отчетов-СКД,
4.Отчет без СКД со сложным запросом и временной таблицей
5.Вывод данных на экран с помощью команды Сообщить() или здесь можно сделать и из Массива
6.Хочу закончить одним из самых простых вариантов:выводом в объект.таблица без использования СКД и объекта-Отчет в принципе
Прикрепленные файлы:
48. Щука Исключительная (jan-pechka) 129 14.01.18 12:53 Сейчас в теме
Итого получилось 8 вариантов вывода данных на экран, 3 из которых СКД....

СКД,конечно,очень интересный инструмент,мощный...но из-за своей мощности - он теряет в гибкости....так много было потрачено времени, чтобы решить через СКД элементарные задачки,которые обычным запросом+объектОтчетом решаются за минуты!!!

п.с. все примеры с моими страданиями выложила в публикацию
примеры отчетов: скд и нескд
заходите,расскажите какой из вариантов вывода на экран лично вам нравится.Спасибо.
49. Алексей Белоусов (AllexSoft) 15.01.18 22:55 Сейчас в теме
(48)
В итоге у вас сложилось неверное представление о СКД. Что вы должны были понять:
1. Запрос в СКД формируется динамически! Это ключевое понятие. То есть то что вы написали в наборе данных - запрос как правило НЕ БУДЕТ ВЫПОЛЕНО!. Платформа сама модифицирует ваш запрос в соответствии с настройкой компоновки (вариантом отчета) и вставит например отборы (прям ГДЕ в запрос) если они заданы пользователем, уберет из запроса поля которые пользователь (в настройке варианта отчета) убрал из отчета и тд. Причем порой она это делает непредсказуемо, что изменяет результаты самого запроса, именно поэтому результирующая таблица через классический запрос и запрос на СКД могут отличаться! и это есть норма.
2. Существует несколько уровней настроек СКД об этом можно почитать в интернетах и в документации (была где то схемка иерархии этих настроек, так как они не равнозначны), там все хорошо описано, а в целом структура работы СКД выглядит так https://its.1c.ru/db/content/metod8dev/src/platform81/review8.1/reports/i8101536.files/datacomposition6.jpg?_=1516016665
То что у вас не получилось установить параметр - это не значит что его нельзя установить!
3. Инструмент гибче чем вам могло показаться, у нас например на СКД по мимо отчетов реализовано - ввод данных табличных частей документов и справочников "как в экселе", инструменты обмена данными (загрузки и выгрузки, выборки данных с произвольными отборами задаваемыми пользователями), печатные формы - которые формируется без единой строки кода, достаточно передать ссылку в параметры.

Советую поработать с вычисляемыми выражениями и расчетом итогов в группировках
Оставьте свое сообщение