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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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


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


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

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


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


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

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

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

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

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

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

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


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


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

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

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

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


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

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

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

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


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


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

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

ОБЪЕДИНИТЬ

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


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

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

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

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

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

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


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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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


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

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


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

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

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

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

Просто, с объекте отчет, можно перехватить стандартную обработку, (см. по коду начинается СтандартнаяОбработка = Ложь;)
и заколбасить все свое.
Можешь скачать консоли отчетов универсальные, и посмотреть как там программно разные схемы подпихиваются и обрабатываются. Хотя, конечно поковырятся там придется немало, чтобы понять.
jan-pechka; +1 Ответить
27. jan-pechka 403 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. Boneman 298 12.01.18 14:35 Сейчас в теме
(22)
оказывается если присоздании Отчета нажать на вкладке "Основные" кнопку "Схема компановки данных",а потом еще и создать стандартную форму отчета, то система сама на форму поставит

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

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

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

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

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

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


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

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

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


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

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


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

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

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

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

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

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

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


пробывала:

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

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


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


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

какая из двух?
36. jan-pechka 403 12.01.18 17:14 Сейчас в теме
(35)
какая из двух?


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

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

Тогда вопрос - если стандартная процедура "ПриСозданииНаСервере " в СКД-отчете не работает,то КАК передать данные для временной таблицы в др.стандарную процедуру отчета "ПриКомпоновкеРезультата"????
Прикрепленные файлы:
38. starik-2005 3033 12.01.18 22:39 Сейчас в теме
Неясно, зачем тут нужна временная таблица, но может я чего недопонимаю. А по поводу отчета, то вот для бухгалтерии 3.0 без партнеров (только контрагенты) в качестве пищи для ума...
Прикрепленные файлы:
ВнешнийОтчет1.erf
jan-pechka; +1 Ответить
39. jan-pechka 403 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. starik-2005 3033 13.01.18 19:14 Сейчас в теме
(39)
Только для того,чтобы происходил отбор по данным из временной таблицы - пришлось немного заморочиться
Отбор в СКД - это отдельная сущность, и временные таблицы там не нужны.
jan-pechka; +1 Ответить
42. jan-pechka 403 13.01.18 19:48 Сейчас в теме
(41)
и временные таблицы там не нужны


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

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

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

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


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

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

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

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

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


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

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

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


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


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

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

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

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

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

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

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


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

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

Итак, из одной задачки - у меня получилось:
1.-3. три варианта отчетов-СКД,
4.Отчет без СКД со сложным запросом и временной таблицей
5.Вывод данных на экран с помощью команды Сообщить() или здесь можно сделать и из Массива
6.Хочу закончить одним из самых простых вариантов:выводом в объект.таблица без использования СКД и объекта-Отчет в принципе
Прикрепленные файлы:
48. jan-pechka 403 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. Инструмент гибче чем вам могло показаться, у нас например на СКД по мимо отчетов реализовано - ввод данных табличных частей документов и справочников "как в экселе", инструменты обмена данными (загрузки и выгрузки, выборки данных с произвольными отборами задаваемыми пользователями), печатные формы - которые формируется без единой строки кода, достаточно передать ссылку в параметры.

Советую поработать с вычисляемыми выражениями и расчетом итогов в группировках
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)