Помогите с СКД

1. srub 84 14.02.19 18:24 Сейчас в теме
Доброго дня! Помогите пожалуйста настроить отчет. Есть задача для УТ 11 вывести в отчет
1. Клиентов которые покупали товар ежемесячно в течении последних 3 месяцев
2. Клиентов которые покупали товар хотя бы 1 раз в течении последних 3 месяцев
3. Клиентов которые покупали товар ежемесячно в течении последних 3 месяцев

Я накидал запрос в СКД, но как красиво вывести его не знаю

ВЫБРАТЬ РАЗЛИЧНЫЕ
	Партнеры.Наименование КАК РегулярныеПокупатели,
	РеализацияТоваровУслуг.Ссылка КАК КоличествоПокупок,
	Партнеры.Ссылка КАК Ссылка,
	РеализацияТоваровУслуг.Дата КАК Дат,
	0 КАК НерегулярныеПокупатели,
	0 КАК НеПокупатели
ПОМЕСТИТЬ РП
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
		ПО РеализацияТоваровУслуг.Партнер = Партнеры.Ссылка
ГДЕ
	Партнеры.Клиент = ИСТИНА
	И РеализацияТоваровУслуг.Проведен = ИСТИНА
	И РеализацияТоваровУслуг.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -3) И &Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РП.РегулярныеПокупатели КАК РегулярныеПокупатели,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокР,
	РП.Ссылка КАК Ссылка,
	РП.НерегулярныеПокупатели КАК НерегулярныеПокупатели,
	0 КАК КоличествоПокупокН,
	РП.НеПокупатели КАК НеПокупатели
ПОМЕСТИТЬ РегПок
ИЗ
	РП КАК РП

СГРУППИРОВАТЬ ПО
	РП.РегулярныеПокупатели,
	РП.Ссылка,
	РП.НерегулярныеПокупатели,
	РП.НеПокупатели

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РП.РегулярныеПокупатели КАК НеРегулярныеПокупатели,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокН,
	РП.Ссылка КАК Ссылка,
	РП.НерегулярныеПокупатели КАК РегулярныеПокупатели,
	0 КАК КоличествоПокупокР,
	РП.НеПокупатели КАК НеПокупатели
ПОМЕСТИТЬ НеРегПок
ИЗ
	РП КАК РП

СГРУППИРОВАТЬ ПО
	РП.РегулярныеПокупатели,
	РП.Ссылка,
	РП.НерегулярныеПокупатели,
	РП.НеПокупатели

ИМЕЮЩИЕ
	(КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 2
		ИЛИ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 1) И
	НЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	Партнеры.Ссылка КАК НеПокупатели,
	0 КАК НеРегулярныеПокупатели,
	0 КАК РегулярныеПокупатели,
	0 КАК КоличествоПокупокР,
	0 КАК КоличествоПокупокН,
	0 КАК Ссылка
ПОМЕСТИТЬ НеПок
ИЗ
	Справочник.Партнеры КАК Партнеры
ГДЕ
	Партнеры.Клиент = ИСТИНА
	И НЕ Партнеры.Ссылка В
				(ВЫБРАТЬ
					НеРегПок.Ссылка КАК Ссылка
				ИЗ
					НеРегПок КАК НеРегПок)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	НеПок.НеПокупатели КАК НеПокупатели,
	НеПок.НеРегулярныеПокупатели КАК НеРегулярныеПокупатели,
	НеПок.РегулярныеПокупатели КАК РегулярныеПокупатели,
	НеПок.КоличествоПокупокР КАК КоличествоПокупокР,
	НеПок.КоличествоПокупокН КАК КоличествоПокупокН,
	НеПок.Ссылка КАК Ссылка
ИЗ
	НеПок КАК НеПок

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	РегПок.НеПокупатели,
	РегПок.НерегулярныеПокупатели,
	РегПок.РегулярныеПокупатели,
	РегПок.КоличествоПокупокР,
	РегПок.КоличествоПокупокН,
	РегПок.Ссылка
ИЗ
	РегПок КАК РегПок

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	НеРегПок.НеПокупатели,
	НеРегПок.НеРегулярныеПокупатели,
	НеРегПок.РегулярныеПокупатели,
	НеРегПок.КоличествоПокупокР,
	НеРегПок.КоличествоПокупокН,
	НеРегПок.Ссылка
ИЗ
	НеРегПок КАК НеРегПок 
Показать


Сделал через объединение и вывел 3 варианта отчета переключаясь между которыми можно увидеть все 3 категории. А как бы все это сделать в одном отчете, чтобы были колонки НеПокупатель, НеРегулятныйПокупатель, КоличествоН, РегулярныйПокупатель, КоличествоП идущие друг за другом?
По теме из базы знаний
Найденные решения
20. srub 84 15.02.19 22:09 Сейчас в теме
(19)
Я таки сделал это. В отчете ДобавитьНаборДанных

В модуле отчетаесть ПроцедураПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) я в нее вставил свой запрос и немного дописал код


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;
			
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Партнеры.Наименование КАК Покупатели,
		|	РеализацияТоваровУслуг.Ссылка КАК КоличествоПокупок,
		|	Партнеры.Ссылка КАК Ссылка,
		|	РеализацияТоваровУслуг.Дата КАК Дат
		|ПОМЕСТИТЬ РП
		|ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
		|		ПО РеализацияТоваровУслуг.Партнер = Партнеры.Ссылка
		|ГДЕ
		|	Партнеры.Клиент = ИСТИНА
		|	И РеализацияТоваровУслуг.Проведен = ИСТИНА
		|	И РеализацияТоваровУслуг.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -3) И &Дата
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РП.Покупатели КАК НеРегулярныеПокупатели,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокН,
		|	РП.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ НеРегПок
		|ИЗ
		|	РП КАК РП
		|
		|СГРУППИРОВАТЬ ПО
		|	РП.Покупатели,
		|	РП.Ссылка
		|
		|ИМЕЮЩИЕ
		|	(КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 2
		|		ИЛИ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 1) И
		|	НЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РП.Покупатели КАК РегулярныеПокупатели,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокР,
		|	РП.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ РегПок
		|ИЗ
		|	РП КАК РП
		|
		|СГРУППИРОВАТЬ ПО
		|	РП.Покупатели,
		|	РП.Ссылка
		|
		|ИМЕЮЩИЕ
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	НеРегПок.НеРегулярныеПокупатели КАК НеРегулярныеПокупатели,
		|	НеРегПок.КоличествоПокупокН КАК КоличествоПокупокН
		|ИЗ
		|	НеРегПок КАК НеРегПок
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Партнеры.Наименование КАК НеПокупатели
		|ИЗ
		|	Справочник.Партнеры КАК Партнеры
		|ГДЕ
		|	Партнеры.Клиент = ИСТИНА
		|	И НЕ Партнеры.Ссылка В
		|				(ВЫБРАТЬ
		|					НеРегПок.Ссылка КАК Ссылка
		|				ИЗ
		|					НеРегПок КАК НеРегПок)
		|	И НЕ Партнеры.Ссылка В
		|				(ВЫБРАТЬ
		|					РегПок.Ссылка КАК Ссылка
		|				ИЗ
		|					РегПок КАК РегПок)
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РегПок.РегулярныеПокупатели КАК РегулярныеПокупатели,
		|	РегПок.КоличествоПокупокР КАК КоличествоПокупокР
		|ИЗ
		|	РегПок КАК РегПок";

	
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ДатаОтсчета = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОтсчета")).Значение.Дата;
	
	Запрос.УстановитьПараметр("Дата", ДатаОтсчета);
	
	МассивРезультатов = Запрос.ВыполнитьПакет();
	
	//Не Покупатели
	Выборка = МассивРезультатов[4].Выгрузить();
	МассивНП = Выборка.ВыгрузитьКолонку(0);
	
	//Не регулярные покупатели
	Выборка = МассивРезультатов[3].Выгрузить();
	МассивНР = Выборка.ВыгрузитьКолонку(0);
	МассивНРК = Выборка.ВыгрузитьКолонку(1);
		
	//Регулярные покупатели
	Выборка = МассивРезультатов[5].Выгрузить();
	МассивРП = Выборка.ВыгрузитьКолонку(0);
	МассивРПК = Выборка.ВыгрузитьКолонку(1);
		
	//Определим массив с наибольшим количеством строк
	НаибольшееКол = МАКС(МассивНП.Вграница(), МАКС(МассивНР.Вграница(), МассивРП.Вграница()));
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("РегулярныеПокупатели", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	ТЗ.Колонки.Добавить("КоличествоПокупокР", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,2)));
	ТЗ.Колонки.Добавить("НеРегулярныеПокупатели", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	ТЗ.Колонки.Добавить("КоличествоПокупокН", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,2)));
    ТЗ.Колонки.Добавить("НеПокупатели", Новый   ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	
	//Создадим пустые строки ТЗ
	Для Инд = 0 По НаибольшееКол Цикл
			ТЗ.Добавить();
	КонецЦикла;
	
	//Загрузим массивы в колонки
	ТЗ.ЗагрузитьКолонку(МассивРП,"РегулярныеПокупатели"); 
	ТЗ.ЗагрузитьКолонку(МассивРПК,"КоличествоПокупокР"); 
	ТЗ.ЗагрузитьКолонку(МассивНР,"НеРегулярныеПокупатели"); 
	ТЗ.ЗагрузитьКолонку(МассивНРК,"КоличествоПокупокН"); 
	ТЗ.ЗагрузитьКолонку(МассивНП,"НеПокупатели"); 
		

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

//просто сам факт, одна реализация - одна покупка по партнеру
ВЫБРАТЬ 
	РазностьДат(Док.Дата,&Дата,Месяц) как Месяц,
    Спр.Ссылка как Партнер
ПОМЕСТИТЬ ТабРП
ИЗ
    Документ.РеализацияТоваровУслуг КАК Док
левое СОЕДИНЕНИЕ Справочник.Партнеры КАК Спр
        ПО Док.Партнер = Спр.Ссылка
ГДЕ
    Док.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -3) И &Дата 
    И Док.Проведен = ИСТИНА
    и Спр.Клиент = ИСТИНА
;
//разноисим по месяцам
ВЫБРАТЬ 
	Сумма(1) как ПериодВесь,
	Сумма(Выбор Когда Таб.Месяц = 0 Тогда 1 Иначе 0 Конец) как Период1, //текущий месяц 
	Сумма(Выбор Когда Таб.Месяц = 1 Тогда 1 Иначе 0 Конец) как Период2, //предыдущий месяц 		
	Сумма(Выбор Когда Таб.Месяц = 2 Тогда 1 Иначе 0 Конец) как Период3, //пред-предыдущий месяц 				
	Таб.Партнер	
поместить ТабПром	
из
	ТабРП Таб
Сгруппировать по
	Таб.Партнер	
;
//здесь уже собираем Клиентов по их показателям, всемозможные комбинации можно строить
Выбрать
	"Одна покупка за период" как ТипПокупателя,
	1 как Количество,
	Таб.Партнер	
из
	ТабПром Таб
где
	Таб.ПериодВесь = 1 //всего одна покупка за все 3 месяца
	
Объединить все	

Выбрать
	"Одна покупка каждый месяц",
	3,
	Таб.Партнер	
из
	ТабПром Таб
где
	//каждый месяц строго по одной покупке
	Таб.Период1 = 1
и	Таб.Период2 = 1
и	Таб.Период3 = 1

Объединить все	

Выбрать
	"Несколько покупок каждый месяц",
	Таб.Период1 + Таб.Период2 +	Таб.Период3,
	Таб.Партнер	
из
	ТабПром Таб
где
	//и кучу других условий можно анализировать таким образом
	Таб.Период1 > 1
и	Таб.Период2 > 1
и	Таб.Период3 > 1
Показать
8. srub 84 15.02.19 17:02 Сейчас в теме
(7)
Попробовал но как то странно выходит. Отчет выводит всех покупателей по типом 1 покупка в месяц, хотя должен вроде сортировать по типам покупателя. Я для анализа добавил в Ваш вариант ссылку на документ продажи и вот что получилось (см. скрин1) Я у же реализовал нужный отчет программно вот как мне нужно было (см. скрин2), но мне интересен Ваш запрос и хочу разобраться почему он не отрабатывает как нужно.
Прикрепленные файлы:
9. soft_wind 15.02.19 17:17 Сейчас в теме
(8) Странная ситуация, вам присылают вполне работающий пример, вы его как-то переделываете (похоже совсем не понимаю сути запросов) и при этом удивляетесь:
А что это не работает?
10. srub 84 15.02.19 17:27 Сейчас в теме
(9)
В том то и дел что Ваш пример не отрабатывает должным образом. Я вернул все как было и выкладываю скрин. Выводятся только покупатели с типом "Одна покупка за период" Хотя я точно знаю что там должны быть покупатели всех типов
Прикрепленные файлы:
11. soft_wind 15.02.19 17:46 Сейчас в теме
(10) Еще раз:

изначально надо было определить тип покупателя и количество продаж по нему (общее и в разрезе по месяцам), что мой запрос и делал

Вы решили еще и сами продажи показать, и при расчете Сумм, вы добавили еще свое группирование по ссылке документа (и эти все сломали) .

такое можно сделать, но немного по другому, нельзя не понимая, на обум, что-то группировать.
12. srub 84 15.02.19 17:56 Сейчас в теме
(11)
Согласен. Но я говорил не о измененном мной запросе, а изначальном. Данные по нему выводятся только по типу покупателя "Одна покупка за период" то есть по самому первому. Данные правильные не спорю. По остальным типам покупателей данные не выводятся, вот я и пытаюсь понять почему.
14. soft_wind 15.02.19 18:09 Сейчас в теме
(12) присоедините свой отчет к ответу, посмотрим
15. srub 84 15.02.19 18:27 Сейчас в теме
(14)
Присоединил. Ниже мой вариант собранный программно а не на скд. Я и хотел узнать как собирать отчет на скд, используя собранную мной в модуле формы ТЗ
Прикрепленные файлы:
ВариантОчета soft_wind.erf
КлассификацияПокупателей(Мой вариант).erf
2. Dmitrij-2 45 14.02.19 19:42 Сейчас в теме
Выводите все в одном варианте отчета
3. Dmitrij-2 45 15.02.19 06:20 Сейчас в теме
6. srub 84 15.02.19 09:27 Сейчас в теме
(3)
Если я вывожу водном варианте отчет, то из за объединения, у меня выводятся null в строках где значение не заполнено. То есть получается сначала идут строки с регулярными покупателями, а в остальных колонках пусто, потом с нерегулярными покупателями и тоже в остальных колонках пусто, и потом уже с теми кто не совершал покупок вообще. Ну оно и понятно ведь я же сам проставлял при соединении временных таблиц null в полях. Я сейчас думаю что нужно наверное программно обработать данные 3 пакетов и выгрузить их в массивы которые потом уже загрузить в ТЗ и брать данные для построения отчета из получившейся ТЗ. Пока ничего иного на ум не приходит. сейчас поищу информацию по программной обработке данных в отчете
4. SedovSU@mail.ru 297 15.02.19 08:28 Сейчас в теме
Сделайте три колонки для ваших условий:
1. Клиентов которые покупали товар ежемесячно в течении последних 3 месяцев
2. Клиентов которые покупали товар хотя бы 1 раз в течении последних 3 месяцев
3. Клиентов которые покупали товар ежемесячно в течении последних 3 месяцев

Мне кажется будет информативно и понятно
5. YannikAlx 43 15.02.19 09:25 Сейчас в теме
А в чем разница между 1 и 3 ??
13. Release 15.02.19 18:00 Сейчас в теме
Попробуйте такое:
ВЫБРАТЬ
    РеализацияТоваровУслуг.Дата,
    РеализацияТоваровУслуг.Контрагент
ПОМЕСТИТЬ втДокументыЗаПериод
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -3) И &Период
    И РеализацияТоваровУслуг.Проведен = ИСТИНА
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    втДокументыЗаПериод.Контрагент,
    МАКСИМУМ(ВЫБОР
            КОГДА втДокументыЗаПериод.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -3) И ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -2)
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК Месяц1,
    МАКСИМУМ(ВЫБОР
            КОГДА втДокументыЗаПериод.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -2) И ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -1)
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК Месяц2,
    МАКСИМУМ(ВЫБОР
            КОГДА втДокументыЗаПериод.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -1) И &Период
                ТОГДА 1
            ИНАЧЕ 0
        КОНЕЦ) КАК Месяц3
ПОМЕСТИТЬ втРеализацияПоМесяцам
ИЗ
    втДокументыЗаПериод КАК втДокументыЗаПериод

СГРУППИРОВАТЬ ПО
    втДокументыЗаПериод.Контрагент
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    втРеализацияПоМесяцам.Контрагент КАК Контрагент,
    ВЫБОР
        КОГДА ЕСТЬNULL(втРеализацияПоМесяцам.Месяц1, 0) + ЕСТЬNULL(втРеализацияПоМесяцам.Месяц2, 0) + ЕСТЬNULL(втРеализацияПоМесяцам.Месяц3, 0) = 3
            ТОГДА "Регулярный покупатель"
        КОГДА ЕСТЬNULL(втРеализацияПоМесяцам.Месяц1, 0) + ЕСТЬNULL(втРеализацияПоМесяцам.Месяц2, 0) + ЕСТЬNULL(втРеализацияПоМесяцам.Месяц3, 0) > 0
            ТОГДА "Нерегулярный покупатель"
        КОГДА ЕСТЬNULL(втРеализацияПоМесяцам.Месяц1, 0) + ЕСТЬNULL(втРеализацияПоМесяцам.Месяц2, 0) + ЕСТЬNULL(втРеализацияПоМесяцам.Месяц3, 0) = 0
            ТОГДА "Не покупатель"
    КОНЕЦ КАК ТипПокупателя
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ втРеализацияПоМесяцам КАК втРеализацияПоМесяцам
        ПО Контрагенты.Ссылка = втРеализацияПоМесяцам.Контрагент
Показать
16. srub 84 15.02.19 18:52 Сейчас в теме
(13)
В Вашем варианте запроса не будет выводится НеПокупатель, потому что по нему не было документов реализации и соответственно ссылки на него нет. Выкладываю скрин отчета по Вашему запросу. С запросом у меня изначально вопроса не было мой отрабатывает корректно. Вопрос был в выводе отчета. Клиента не устраивал вывод в две строки или с пустыми строками на верху. поэтому я вывел отчет программно обработав результаты запроса и поместив его в ТЗ второй скрин. Я хотел узнать как выводить собранную мной в модуле отчета ТЗ через СКД чтобы не собирать его программно
Прикрепленные файлы:
17. Release 15.02.19 19:04 Сейчас в теме
(16) Все там должно выводится, я ведь не зря делал через левое соединение справочника с выборкой документов.
Единственное, что я забыл, это добавить условие на исключение групп в справочнике:
ГДЕ
    Контрагенты.ЭтоГруппа = ЛОЖЬ

Плюс, прошу прощения, не дочитал по поводу выводимых колонок в отчете, т.е. не добавил количество покупок.
18. srub 84 15.02.19 19:10 Сейчас в теме
(17)
У меня был вопрос не по запросу. Мой запрос отрабатывает вполне корректно. Я вывел всех через такой запрос, обработал и поместил в ТЗ чтобы не было в строках отчета пустых ячеек
&НаСервере
Функция ЗаполнениеТЗ()
	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Партнеры.Наименование КАК Покупатели,
		|	РеализацияТоваровУслуг.Ссылка КАК КоличествоПокупок,
		|	Партнеры.Ссылка КАК Ссылка,
		|	РеализацияТоваровУслуг.Дата КАК Дат
		|ПОМЕСТИТЬ РП
		|ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
		|		ПО РеализацияТоваровУслуг.Партнер = Партнеры.Ссылка
		|ГДЕ
		|	Партнеры.Клиент = ИСТИНА
		|	И РеализацияТоваровУслуг.Проведен = ИСТИНА
		|	И РеализацияТоваровУслуг.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -3) И &Дата
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РП.Покупатели КАК НеРегулярныеПокупатели,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокН,
		|	РП.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ НеРегПок
		|ИЗ
		|	РП КАК РП
		|
		|СГРУППИРОВАТЬ ПО
		|	РП.Покупатели,
		|	РП.Ссылка
		|
		|ИМЕЮЩИЕ
		|	(КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 2
		|		ИЛИ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 1) И
		|	НЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	НеРегПок.НеРегулярныеПокупатели КАК НеРегулярныеПокупатели,
		|	НеРегПок.КоличествоПокупокН КАК КоличествоПокупокН
		|ИЗ
		|	НеРегПок КАК НеРегПок
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Партнеры.Наименование КАК НеПокупатели
		|ИЗ
		|	Справочник.Партнеры КАК Партнеры
		|ГДЕ
		|	Партнеры.Клиент = ИСТИНА
		|	И НЕ Партнеры.Ссылка В
		|				(ВЫБРАТЬ
		|					НеРегПок.Ссылка КАК Ссылка
		|				ИЗ
		|					НеРегПок КАК НеРегПок)
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РП.Покупатели КАК РегулярныеПокупатели,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокР
		|ИЗ
		|	РП КАК РП
		|
		|СГРУППИРОВАТЬ ПО
		|	РП.Покупатели
		|
		|ИМЕЮЩИЕ
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3";
	
	Запрос.УстановитьПараметр("Дата", ДатаОтсчета);
	
	МассивРезультатов = Запрос.ВыполнитьПакет();
	
	//Не Покупатели
	Выборка = МассивРезультатов[3].Выгрузить();
	МассивНП = Выборка.ВыгрузитьКолонку(0);
	
	//Не регулярные покупатели
	Выборка = МассивРезультатов[2].Выгрузить();
	МассивНР = Выборка.ВыгрузитьКолонку(0);
	МассивНРК = Выборка.ВыгрузитьКолонку(1);
		
	//Регулярные покупатели
	Выборка = МассивРезультатов[4].Выгрузить();
	МассивРП = Выборка.ВыгрузитьКолонку(0);
	МассивРПК = Выборка.ВыгрузитьКолонку(1);
		
	//Определим массив с наибольшим количеством строк
	НаибольшееКол = МАКС(МассивНП.Вграница(), МАКС(МассивНР.Вграница(), МассивРП.Вграница()));
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("РегулярныеПокупатели", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	ТЗ.Колонки.Добавить("КоличествоПокупокР", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,2)));
	ТЗ.Колонки.Добавить("НеРегулярныеПокупатели", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	ТЗ.Колонки.Добавить("КоличествоПокупокН", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,2)));
    ТЗ.Колонки.Добавить("НеПокупатели", Новый   ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	
	//Создадим пустые строки ТЗ
	Для Инд = 0 По НаибольшееКол Цикл
			ТЗ.Добавить();
	КонецЦикла;
	
	//Загрузим массивы в колонки
	ТЗ.ЗагрузитьКолонку(МассивРП,"РегулярныеПокупатели"); 
	ТЗ.ЗагрузитьКолонку(МассивРПК,"КоличествоПокупокР"); 
	ТЗ.ЗагрузитьКолонку(МассивНР,"НеРегулярныеПокупатели"); 
	ТЗ.ЗагрузитьКолонку(МассивНРК,"КоличествоПокупокН"); 
	ТЗ.ЗагрузитьКолонку(МассивНП,"НеПокупатели"); 
	
    Возврат ТЗ;
	
КонецФункции
Показать


Результат я выводил в отчет программно, но хотелось бы знать, как из полученной ТЗ можно вывести его через СКД
19. Release 15.02.19 19:17 Сейчас в теме
(18)
обработал и поместил в ТЗ чтобы не было в строках отчета пустых ячеек

Сомневаюсь, что такое возможно сделать просто запросом на СКД, даже с собственным макетом.
20. srub 84 15.02.19 22:09 Сейчас в теме
(19)
Я таки сделал это. В отчете ДобавитьНаборДанных

В модуле отчетаесть ПроцедураПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) я в нее вставил свой запрос и немного дописал код


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;
			
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Партнеры.Наименование КАК Покупатели,
		|	РеализацияТоваровУслуг.Ссылка КАК КоличествоПокупок,
		|	Партнеры.Ссылка КАК Ссылка,
		|	РеализацияТоваровУслуг.Дата КАК Дат
		|ПОМЕСТИТЬ РП
		|ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры
		|		ПО РеализацияТоваровУслуг.Партнер = Партнеры.Ссылка
		|ГДЕ
		|	Партнеры.Клиент = ИСТИНА
		|	И РеализацияТоваровУслуг.Проведен = ИСТИНА
		|	И РеализацияТоваровУслуг.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -3) И &Дата
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РП.Покупатели КАК НеРегулярныеПокупатели,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокН,
		|	РП.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ НеРегПок
		|ИЗ
		|	РП КАК РП
		|
		|СГРУППИРОВАТЬ ПО
		|	РП.Покупатели,
		|	РП.Ссылка
		|
		|ИМЕЮЩИЕ
		|	(КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 2
		|		ИЛИ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 1) И
		|	НЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РП.Покупатели КАК РегулярныеПокупатели,
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РП.КоличествоПокупок) КАК КоличествоПокупокР,
		|	РП.Ссылка КАК Ссылка
		|ПОМЕСТИТЬ РегПок
		|ИЗ
		|	РП КАК РП
		|
		|СГРУППИРОВАТЬ ПО
		|	РП.Покупатели,
		|	РП.Ссылка
		|
		|ИМЕЮЩИЕ
		|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МЕСЯЦ(РП.Дат)) = 3
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	НеРегПок.НеРегулярныеПокупатели КАК НеРегулярныеПокупатели,
		|	НеРегПок.КоличествоПокупокН КАК КоличествоПокупокН
		|ИЗ
		|	НеРегПок КАК НеРегПок
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Партнеры.Наименование КАК НеПокупатели
		|ИЗ
		|	Справочник.Партнеры КАК Партнеры
		|ГДЕ
		|	Партнеры.Клиент = ИСТИНА
		|	И НЕ Партнеры.Ссылка В
		|				(ВЫБРАТЬ
		|					НеРегПок.Ссылка КАК Ссылка
		|				ИЗ
		|					НеРегПок КАК НеРегПок)
		|	И НЕ Партнеры.Ссылка В
		|				(ВЫБРАТЬ
		|					РегПок.Ссылка КАК Ссылка
		|				ИЗ
		|					РегПок КАК РегПок)
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	РегПок.РегулярныеПокупатели КАК РегулярныеПокупатели,
		|	РегПок.КоличествоПокупокР КАК КоличествоПокупокР
		|ИЗ
		|	РегПок КАК РегПок";

	
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	ДатаОтсчета = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОтсчета")).Значение.Дата;
	
	Запрос.УстановитьПараметр("Дата", ДатаОтсчета);
	
	МассивРезультатов = Запрос.ВыполнитьПакет();
	
	//Не Покупатели
	Выборка = МассивРезультатов[4].Выгрузить();
	МассивНП = Выборка.ВыгрузитьКолонку(0);
	
	//Не регулярные покупатели
	Выборка = МассивРезультатов[3].Выгрузить();
	МассивНР = Выборка.ВыгрузитьКолонку(0);
	МассивНРК = Выборка.ВыгрузитьКолонку(1);
		
	//Регулярные покупатели
	Выборка = МассивРезультатов[5].Выгрузить();
	МассивРП = Выборка.ВыгрузитьКолонку(0);
	МассивРПК = Выборка.ВыгрузитьКолонку(1);
		
	//Определим массив с наибольшим количеством строк
	НаибольшееКол = МАКС(МассивНП.Вграница(), МАКС(МассивНР.Вграница(), МассивРП.Вграница()));
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("РегулярныеПокупатели", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	ТЗ.Колонки.Добавить("КоличествоПокупокР", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,2)));
	ТЗ.Колонки.Добавить("НеРегулярныеПокупатели", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	ТЗ.Колонки.Добавить("КоличествоПокупокН", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10,2)));
    ТЗ.Колонки.Добавить("НеПокупатели", Новый   ОписаниеТипов("Строка", Новый КвалификаторыСтроки(300)));
	
	//Создадим пустые строки ТЗ
	Для Инд = 0 По НаибольшееКол Цикл
			ТЗ.Добавить();
	КонецЦикла;
	
	//Загрузим массивы в колонки
	ТЗ.ЗагрузитьКолонку(МассивРП,"РегулярныеПокупатели"); 
	ТЗ.ЗагрузитьКолонку(МассивРПК,"КоличествоПокупокР"); 
	ТЗ.ЗагрузитьКолонку(МассивНР,"НеРегулярныеПокупатели"); 
	ТЗ.ЗагрузитьКолонку(МассивНРК,"КоличествоПокупокН"); 
	ТЗ.ЗагрузитьКолонку(МассивНП,"НеПокупатели"); 
		

	//Связь между таблицей значений и именами в СКД 
	ВнешниеНаборыДанных = Новый Структура;
	ВнешниеНаборыДанных.Вставить("НаборДанных1", ТЗ);
	
	//Макет компоновки 
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
	
	//Компоновка данных 
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
	
	//Вывод результата 
	ДокументРезультат.Очистить();
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);	
	
КонецПроцедуры
Показать
Прикрепленные файлы:
21. soft_wind 16.02.19 10:59 Сейчас в теме
хм
очччень интересное условие
(Таб.Период1 > 1
И Таб.Период2 > 0
И Таб.Период3 > 0
ИЛИ Таб.Период1 > 0
И Таб.Период2 > 1
И Таб.Период3 > 0
ИЛИ Таб.Период1 > 0
И Таб.Период2 > 0
И Таб.Период3 > 1)

чем вас такое условие не устроило

Таб.Период1 > 1
И Таб.Период2 > 1
И Таб.Период3 > 1

больше одной покупки каждый месяц - Регулярный покупатель
22. srub 84 16.02.19 12:49 Сейчас в теме
(21)
Заказчик считает, что регулярный покупатель, это тот кто делает хотя бы одну покупку в месяц. А не регулярный, тот кто не сделал хотя бы в один из трех месяцев ни одной покупки. Хотя может выйти что за период 3 месяца у нерегулярного покупателя к примеру 200 покупок, а у регулярного их всего 3)))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот