Отчет СКД отбрасывает записи, хотя в запросе полное соединение

1. AlexeyPapanov 459 15.02.19 10:51 Сейчас в теме
Коллеги, приветствую! Помогите горю моему)

Задача: в УТ 11.4..6.* к отчету "Валовая прибыль" (по поставщикам) приклеить колонку "Сумма закупки у поставщика", чтобы клиент мог видеть товары, которые куплены, но плохо продаются.

Решение мое: приклеиваем полным соединением колонку "Сумма закупки" из РН Закупки.

Проблема: если был куплен товар, но продаж по нему не было, то в отчет он не попадет. Хотя я же не левое соединение использую, а полное.

Наверное, мне нужно в самом макете СКД что-то настроить?

Для проверки, написал такой запрос:
ВЫБРАТЬ
	ЕстьNull(ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура,Значение(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура,
	ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК Выручка,
	ЗакупкиОбороты.СуммаОборот КАК ЗакупкаСуммаОборот
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&Н, &К, , ) КАК ВыручкаИСебестоимостьПродажОбороты
		ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты(&Н, &К, , ) КАК ЗакупкиОбороты
		ПО (ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = ЗакупкиОбороты.АналитикаУчетаНоменклатуры.Номенклатура)

Получаю результат на рисунке 1.
А мой отчет показывает результат на рисунке 2.

Ниже я упростил запрос отчета для восприятия

ВЫБРАТЬ 
	Таблица.Регистратор КАК Регистратор,
	ЕстьNull(Таблица.Номенклатура, Значение(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура,
	Таблица.Организация КАК Организация,
	Таблица.Продавец КАК Продавец,
	Таблица.Партнер КАК Партнер,
//
//	...
//
	ЕСТЬNULL(ЗакупкиОбороты.СуммаОборот, 0) КАК СуммаЗакупки
ИЗ
	(
		АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
		АналитикаНоменклатуры.Характеристика КАК Характеристика,
		АналитикаНоменклатуры.Серия КАК Серия,
		АналитикаПоПартнерам.Организация КАК Организация,
		АналитикаПоПартнерам.Организация КАК Продавец,
		АналитикаПоПартнерам.Партнер КАК Партнер,
//...
		Продажи.СуммаРучнойСкидкиОборот КАК СуммаРучнойСкидкиОборот,
		Продажи.СуммаАвтоматическойСкидкиОборот КАК СуммаАвтоматическойСкидкиОборот,
		Продажи.ХозяйственнаяОперация КАК ХозяйственнаяОперация

	ИЗ
		РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, 
//	...
		) КАК Продажи
			{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
			ПО Продажи.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики}
			{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
			ПО Продажи.АналитикаУчетаПоПартнерам = АналитикаПоПартнерам.КлючАналитики}
			{ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасчетСебестоимостиТоваров.Организации КАК РасчетСебестоимости
			ПО (НАЧАЛОПЕРИОДА(Продажи.ПериодМесяц, МЕСЯЦ) = НАЧАЛОПЕРИОДА(РасчетСебестоимости.Ссылка.Дата, МЕСЯЦ))
				И (АналитикаПоПартнерам.Организация = РасчетСебестоимости.Организация)
				И (РасчетСебестоимости.Ссылка.Проведен)}
//...
	
) КАК Таблица
		ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, , ) КАК ЗакупкиОбороты
		ПО Таблица.Организация = ЗакупкиОбороты.Организация
			И Таблица.Партнер = ЗакупкиОбороты.Партнер
			И Таблица.Контрагент = ЗакупкиОбороты.Контрагент
			И Таблица.Номенклатура = ЗакупкиОбороты.АналитикаУчетаНоменклатуры.Номенклатура

Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
14. ovasiliev 6 16.02.19 07:55 Сейчас в теме +1 $m
Не вчитывался в запрос, но сразу скажу, что при полном соединении с измерениями, по которым соединяете, нужно делать так:
ВЫБОР
КОГДА Таблица1.Измерение1 ЕСТЬ NULL ТОГДА Таблица2.Измерение1
ИНАЧЕ Таблица1.Измерение1
КОНЕЦ
Иначе строки и потеряете.
DoReMu; acanta; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. user623969_dusa 15.02.19 11:18 Сейчас в теме
не рекомендуется использовать полное соединение на виртуальных таблицах https://its.1c.ru/db/metod8dev#content:5842:hdoc
2. YannikAlx 43 15.02.19 11:04 Сейчас в теме
Раздели 2 регистра по 2 временным таблицам с общим реквизитом НОМЕНКЛАТУРА и потом связывай эти таблицы
4. AlexeyPapanov 459 15.02.19 11:33 Сейчас в теме
(2) Там не два регистра :) Ну поместил я итоговую выборку отчета в одну ВТ, а таблицу закупок в другую ВТ. Связал и по ключевым полям (Организация, Партнер, Номенклатура...). Тоже самое имею на выходе.

Я так понимаю все упирается в то, что в полях, где нет данных по выручке и себестоимости, но есть данные по закупкам, везде стоит NULL.

Не пойму как грамотно оформить. Где-то читал, что надо связывать наборы данных СКД. Но не умею это делать,
Прикрепленные файлы:
5. YannikAlx 43 15.02.19 12:17 Сейчас в теме
(4) Что значит
Там не два регистра :)

А это что по вашему ? Справочники? ))))
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&Н, &К, , ) КАК ВыручкаИСебестоимостьПродажОбороты
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления


И кроме того вопрос - а в консоли вы прекрасно получаете все данные так как хотите видеть?
Приведите картинку с этими данными.....
7. AlexeyPapanov 459 15.02.19 13:23 Сейчас в теме
(5)
Я имел ввиду, что оригинальный текст запроса посложнее:

ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Сегменты.Партнер КАК Партнер,
ИСТИНА КАК ИспользуетсяОтборПоСегментуПартнеров
ПОМЕСТИТЬ ОтборПоСегментуПартнеров
ИЗ
РегистрСведений.ПартнерыСегмента КАК Сегменты
{ГДЕ
Сегменты.Сегмент.* КАК СегментПартнеров,
Сегменты.Партнер.* КАК Партнер}

ИНДЕКСИРОВАТЬ ПО
Партнер,
ИспользуетсяОтборПоСегментуПартнеров
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Сегменты.Номенклатура КАК Номенклатура,
Сегменты.Характеристика КАК Характеристика,
ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
Сегменты.Сегмент.* КАК СегментНоменклатуры,
Сегменты.Номенклатура.* КАК Номенклатура,
Сегменты.Характеристика.* КАК Характеристика}

ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Характеристика,
ИспользуетсяОтборПоСегментуНоменклатуры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Таблица.Регистратор,

Таблица.ПериодСекунда,
Таблица.ПериодДень,
Таблица.ПериодНеделя,
Таблица.ПериодДекада,
Таблица.ПериодМесяц,
Таблица.ПериодКвартал,
Таблица.ПериодПолугодие,
Таблица.ПериодГод,

СУММА(Таблица.Количество) КАК Количество,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Выручка)
КОГДА &ДанныеОтчета = 2 ИЛИ &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ВыручкаБезНДС)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.ВыручкаРегл)
ИНАЧЕ СУММА(Таблица.ВыручкаБезНДС)
КОНЕЦ КАК Выручка,
СУММА(Таблица.Выручка) - СУММА(Таблица.ВыручкаБезНДС) КАК ВыручкаНДС,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.СуммаРучнойСкидкиОборот)
ИНАЧЕ 0
КОНЕЦ КАК СуммаРучнойСкидки,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.СуммаАвтоматическойСкидкиОборот)
ИНАЧЕ 0
КОНЕЦ КАК СуммаАвтоматическойСкидки,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.СуммаРучнойСкидкиОборот)
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.СуммаАвтоматическойСкидкиОборот)
ИНАЧЕ 0
КОНЕЦ КАК ВсегоСкидок,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Себестоимость)
КОГДА &ДанныеОтчета = 2
ТОГДА СУММА(Таблица.СебестоимостьБезНДС)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.СебестоимостьУпр)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.СебестоимостьРегл)
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
СУММА(Таблица.СебестоимостьБезНДС)
ИНАЧЕ
СУММА(Таблица.СебестоимостьУпр)
КОНЕЦ
КОНЕЦ КАК Себестоимость,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.ДопРасходы)
КОГДА &ДанныеОтчета = 2
ТОГДА СУММА(Таблица.ДопРасходыБезНДС)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ДопРасходыУпр)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.ДопРасходыРегл)
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
СУММА(Таблица.ДопРасходыБезНДС)
ИНАЧЕ
СУММА(Таблица.ДопРасходыУпр)
КОНЕЦ
КОНЕЦ КАК ДопРасходы,

ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Трудозатраты)
КОГДА &ДанныеОтчета = 2
ТОГДА СУММА(Таблица.Трудозатраты)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ТрудозатратыУпр)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.ТрудозатратыРегл)
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
СУММА(Таблица.Трудозатраты)
ИНАЧЕ
СУММА(Таблица.ТрудозатратыУпр)
КОНЕЦ
КОНЕЦ КАК Трудозатраты,

ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.ПостатейныеПостоянныеСНДС)
КОГДА &ДанныеОтчета = 2
ТОГДА СУММА(Таблица.ПостатейныеПостоянныеБезНДС)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ПостатейныеПостоянныеУпр)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.ПостатейныеПостоянныеРегл)
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
СУММА(Таблица.ПостатейныеПостоянныеБезНДС)
ИНАЧЕ
СУММА(Таблица.ПостатейныеПостоянныеУпр)
КОНЕЦ
КОНЕЦ КАК ПостатейныеПостоянные,

ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.ПостатейныеПеременныеСНДС)
КОГДА &ДанныеОтчета = 2
ТОГДА СУММА(Таблица.ПостатейныеПеременныеБезНДС)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ПостатейныеПеременныеУпр)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.ПостатейныеПеременныеРегл)
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
СУММА(Таблица.ПостатейныеПеременныеБезНДС)
ИНАЧЕ
СУММА(Таблица.ПостатейныеПеременныеУпр)
КОНЕЦ
КОНЕЦ КАК ПостатейныеПеременные,

ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Выручка)
- СУММА(Таблица.Себестоимость)
- СУММА(Таблица.ДопРасходы)
- СУММА(Таблица.Трудозатраты)
- СУММА(Таблица.ПостатейныеПостоянныеСНДС)
- СУММА(Таблица.ПостатейныеПеременныеСНДС)
КОГДА &ДанныеОтчета = 2
ТОГДА СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьБезНДС)
- СУММА(Таблица.ДопРасходыБезНДС)
- СУММА(Таблица.Трудозатраты)
- СУММА(Таблица.ПостатейныеПостоянныеБезНДС)
- СУММА(Таблица.ПостатейныеПеременныеБезНДС)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьУпр)
- СУММА(Таблица.ДопРасходыУпр)
- СУММА(Таблица.ТрудозатратыУпр)
- СУММА(Таблица.ПостатейныеПостоянныеУпр)
- СУММА(Таблица.ПостатейныеПеременныеУпр)
КОГДА &ДанныеОтчета = 4
ТОГДА СУММА(Таблица.ВыручкаРегл)
- СУММА(Таблица.СебестоимостьРегл)
- СУММА(Таблица.ДопРасходыРегл)
- СУММА(Таблица.ТрудозатратыРегл)
- СУММА(Таблица.ПостатейныеПостоянныеРегл)
- СУММА(Таблица.ПостатейныеПеременныеРегл)
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьБезНДС)
- СУММА(Таблица.ДопРасходыБезНДС)
- СУММА(Таблица.Трудозатраты)
- СУММА(Таблица.ПостатейныеПостоянныеБезНДС)
- СУММА(Таблица.ПостатейныеПеременныеБезНДС)
ИНАЧЕ
СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьУпр)
- СУММА(Таблица.ДопРасходыУпр)
- СУММА(Таблица.ТрудозатратыУпр)
- СУММА(Таблица.ПостатейныеПостоянныеУпр)
- СУММА(Таблица.ПостатейныеПеременныеУпр)
КОНЕЦ
КОНЕЦ КАК ВаловаяПрибыль,
ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА ВЫРАЗИТЬ(ВЫБОР
КОГДА СУММА(Таблица.Выручка) <> 0
ТОГДА (СУММА(Таблица.Выручка)
- СУММА(Таблица.Себестоимость)
- СУММА(Таблица.ДопРасходы)
- СУММА(Таблица.Трудозатраты)
- СУММА(Таблица.ПостатейныеПостоянныеСНДС)
- СУММА(Таблица.ПостатейныеПеременныеСНДС)
) / СУММА(Таблица.Выручка)
ИНАЧЕ 0
КОНЕЦ * 100 КАК ЧИСЛО(15, 2))
КОГДА &ДанныеОтчета = 2
ТОГДА ВЫРАЗИТЬ(ВЫБОР
КОГДА СУММА(Таблица.ВыручкаБезНДС) <> 0
ТОГДА (СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьБезНДС)
- СУММА(Таблица.ДопРасходыБезНДС)
- СУММА(Таблица.Трудозатраты)
- СУММА(Таблица.ПостатейныеПостоянныеБезНДС)
- СУММА(Таблица.ПостатейныеПеременныеБезНДС)
) / СУММА(Таблица.ВыручкаБезНДС)
ИНАЧЕ 0
КОНЕЦ * 100 КАК ЧИСЛО(15, 2))
КОГДА &ДанныеОтчета = 3
ТОГДА ВЫРАЗИТЬ(ВЫБОР
КОГДА СУММА(Таблица.ВыручкаБезНДС) <> 0
ТОГДА (СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьУпр)
- СУММА(Таблица.ДопРасходыУпр)
- СУММА(Таблица.ТрудозатратыУпр)
- СУММА(Таблица.ПостатейныеПостоянныеУпр)
- СУММА(Таблица.ПостатейныеПеременныеУпр)
) / СУММА(Таблица.ВыручкаБезНДС)
ИНАЧЕ 0
КОНЕЦ * 100 КАК ЧИСЛО(15, 2))
КОГДА &ДанныеОтчета = 4
ТОГДА ВЫРАЗИТЬ(ВЫБОР
КОГДА СУММА(Таблица.ВыручкаРегл) <> 0
ТОГДА (СУММА(Таблица.ВыручкаРегл)
- СУММА(Таблица.СебестоимостьРегл)
- СУММА(Таблица.ДопРасходыРегл)
- СУММА(Таблица.ТрудозатратыРегл)
- СУММА(Таблица.ПостатейныеПостоянныеРегл)
- СУММА(Таблица.ПостатейныеПеременныеРегл)
) / СУММА(Таблица.ВыручкаРегл)
ИНАЧЕ 0
КОНЕЦ * 100 КАК ЧИСЛО(15, 2))
ИНАЧЕ
ВЫБОР КОГДА &ПоПредприятию ТОГДА
ВЫРАЗИТЬ(ВЫБОР
КОГДА СУММА(Таблица.ВыручкаБезНДС) <> 0
ТОГДА (СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьБезНДС)
- СУММА(Таблица.ДопРасходыБезНДС)
- СУММА(Таблица.Трудозатраты)
- СУММА(Таблица.ПостатейныеПостоянныеБезНДС)
- СУММА(Таблица.ПостатейныеПеременныеБезНДС)
) / СУММА(Таблица.ВыручкаБезНДС)
ИНАЧЕ 0
КОНЕЦ * 100 КАК ЧИСЛО(15, 2))
ИНАЧЕ
ВЫРАЗИТЬ(ВЫБОР
КОГДА СУММА(Таблица.ВыручкаБезНДС) <> 0
ТОГДА (СУММА(Таблица.ВыручкаБезНДС)
- СУММА(Таблица.СебестоимостьУпр)
- СУММА(Таблица.ДопРасходыУпр)
- СУММА(Таблица.ТрудозатратыУпр)
- СУММА(Таблица.ПостатейныеПостоянныеУпр)
- СУММА(Таблица.ПостатейныеПеременныеУпр)
) / СУММА(Таблица.ВыручкаБезНДС)
ИНАЧЕ 0
КОНЕЦ * 100 КАК ЧИСЛО(15, 2))
КОНЕЦ
КОНЕЦ КАК Рентабельность,
ВЫБОР
КОГДА Таблица.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ПродажиМеждуОрганизациями,
Таблица.Номенклатура КАК Номенклатура,
Таблица.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаХранения,
Таблица.Номенклатура.ЕдиницаДляОтчетов КАК ЕдиницаДляОтчетов,
Таблица.Номенклатура.КоэффициентЕдиницыДляОтчетов КАК КоэффициентЕдиницыДляОтчетов,
&ТекстЗапросаВесНоменклатуры1 КАК НоменклатураВес,
&ТекстЗапросаОбъемНоменклатуры1 КАК НоменклатураОбъем,
Таблица.Номенклатура.ГруппаАналитическогоУчета КАК ГруппаАналитическогоУчета,
Таблица.Характеристика КАК Характеристика,
Таблица.Серия КАК Серия,
Таблица.Организация КАК Организация,
Таблица.Продавец КАК Продавец,
Таблица.Партнер КАК Партнер,
Таблица.НаправлениеДеятельности КАК НаправлениеДеятельности,
Таблица.ЗаказКлиента КАК ЗаказКлиента,
Таблица.Подразделение КАК Подразделение,
Таблица.Склад КАК Склад,
Таблица.Контрагент КАК Контрагент,
Таблица.Покупатель КАК Покупатель,
Таблица.Поставщик КАК Поставщик,
Таблица.Менеджер КАК Менеджер,
Таблица.Сделка КАК Сделка,
Таблица.МенеджерСделки КАК МенеджерСделки,
Таблица.ВидЗапасов КАК ВидЗапасов,
Таблица.ГруппаФинансовогоУчета КАК ГруппаФинансовогоУчета,
Таблица.ВидСделки,
Таблица.ХозяйственнаяОперация
ИЗ
(ВЫБРАТЬ
ВЫБОР
КОГДА Продажи.Регистратор = НЕОПРЕДЕЛЕНО
ТОГДА NULL
ИНАЧЕ Продажи.Регистратор
КОНЕЦ КАК Регистратор,

Продажи.ПериодСекунда КАК ПериодСекунда,
НачалоПериода(Продажи.ПериодДень, ДЕНЬ) КАК ПериодДень,
НачалоПериода(Продажи.ПериодНеделя, НЕДЕЛЯ) КАК ПериодНеделя,
НачалоПериода(Продажи.ПериодДекада, ДЕКАДА) КАК ПериодДекада,
НачалоПериода(Продажи.ПериодМесяц, МЕСЯЦ) КАК ПериодМесяц,
НачалоПериода(Продажи.ПериодКвартал, КВАРТАЛ) КАК ПериодКвартал,
НачалоПериода(Продажи.ПериодПолугодие, ПОЛУГОДИЕ) КАК ПериодПолугодие,
НачалоПериода(Продажи.ПериодГод, ГОД) КАК ПериодГод,

ЕСТЬNULL(Продажи.ЗаказКлиента.Сделка, ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка)) КАК Сделка,
ЕСТЬNULL(Продажи.ЗаказКлиента.Сделка.Ответственный, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) КАК МенеджерСделки,
ВЫБОР
КОГДА Продажи.Менеджер = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
ТОГДА ЕСТЬNULL(Продажи.ЗаказКлиента.Менеджер, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))
ИНАЧЕ Продажи.Менеджер
КОНЕЦ КАК Менеджер,
АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
АналитикаНоменклатуры.Характеристика КАК Характеристика,
АналитикаНоменклатуры.Серия КАК Серия,
АналитикаПоПартнерам.Организация КАК Организация,
АналитикаПоПартнерам.Организация КАК Продавец,
АналитикаПоПартнерам.Партнер КАК Партнер,
АналитикаПоПартнерам.НаправлениеДеятельности КАК НаправлениеДеятельности,
Продажи.ВидЗапасов КАК ВидЗапасов,
Продажи.ВидЗапасов.ГруппаФинансовогоУчета КАК ГруппаФинансовогоУчета,
Продажи.Подразделение КАК Подразделение,
АналитикаНоменклатуры.Склад КАК Склад,
ВЫБОР
КОГДА Продажи.ВидЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
ТОГДА Продажи.ВидЗапасов.ВладелецТовара
ИНАЧЕ
Продажи.АналитикаУчетаПартий.Поставщик
КОНЕЦ КАК Поставщик,
Продажи.ЗаказКлиента КАК ЗаказКлиента,
ВЫБОР
КОГДА АналитикаПоПартнерам.Контрагент ССЫЛКА Справочник.Контрагенты
ТОГДА АналитикаПоПартнерам.Контрагент
ИНАЧЕ NULL
КОНЕЦ КАК Контрагент,
ВЫБОР
КОГДА АналитикаПоПартнерам.Контрагент ССЫЛКА Справочник.Организации
ТОГДА АналитикаПоПартнерам.Контрагент
ИНАЧЕ NULL
КОНЕЦ КАК Покупатель,
ВЫБОР
КОГДА НЕ Продажи.ЗаказКлиента.Сделка.ВидСделки ЕСТЬ NULL
ТОГДА Продажи.ЗаказКлиента.Сделка.ВидСделки.Наименование
КОГДА Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента
ИЛИ Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА &СтрокаПродажиПоЗаказам
ИНАЧЕ &СтрокаПродажиБезЗаказов
КОНЕЦ КАК ВидСделки,
Продажи.КоличествоОборот КАК Количество,
Продажи.СуммаВыручкиОборот КАК Выручка,
Продажи.СуммаВыручкиРеглОборот КАК ВыручкаРегл,
Продажи.СуммаВыручкиБезНДСОборот КАК ВыручкаБезНДС,
ВЫБОР
КОГДА Продажи.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
ТОГДА Продажи.СуммаВыручкиОборот
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.Стоимость, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.СтоимостьОборот
КОНЕЦ КАК Себестоимость,
ВЫБОР
КОГДА Продажи.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
ТОГДА Продажи.СуммаВыручкиБезНДСОборот
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.СтоимостьБезНДС, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.СтоимостьБезНДСОборот
КОНЕЦ КАК СебестоимостьБезНДС,
ВЫБОР
КОГДА Продажи.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
ТОГДА Продажи.СуммаВыручкиРеглОборот
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.СтоимостьРегл, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.СтоимостьРеглОборот
КОНЕЦ КАК СебестоимостьРегл,
ВЫБОР
КОГДА Продажи.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
ТОГДА Продажи.СуммаВыручкиБезНДСОборот
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.СтоимостьУпр, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.СтоимостьУпрОборот
КОНЕЦ КАК СебестоимостьУпр,

// Доп. расходы
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.СтоимостьДопРасходы, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ДопРасходыОборот
КОНЕЦ КАК ДопРасходы,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ДопРасходыУпр, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ДопРасходыУпрОборот
КОНЕЦ КАК ДопРасходыУпр,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.СтоимостьДопРасходыБезНДС, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ДопРасходыБезНДСОборот
КОНЕЦ КАК ДопРасходыБезНДС,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ДопРасходыРегл, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ДопРасходыРеглОборот
КОНЕЦ КАК ДопРасходыРегл,

// Трудозатраты
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.Трудозатраты, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ТрудозатратыОборот
КОНЕЦ КАК Трудозатраты,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ТрудозатратыУпр, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ТрудозатратыУпрОборот
КОНЕЦ КАК ТрудозатратыУпр,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ТрудозатратыРегл, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ТрудозатратыРеглОборот
КОНЕЦ КАК ТрудозатратыРегл,

// Постоянные постательные
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПостоянныеСНДС, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПостоянныеСНДСОборот
КОНЕЦ КАК ПостатейныеПостоянныеСНДС,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПостоянныеБезНДС, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПостоянныеБезНДСОборот
КОНЕЦ КАК ПостатейныеПостоянныеБезНДС,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПостоянныеУпр, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПостоянныеУпрОборот
КОНЕЦ КАК ПостатейныеПостоянныеУпр,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПостоянныеРегл, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПостоянныеРеглОборот
КОНЕЦ КАК ПостатейныеПостоянныеРегл,

// Переменные постательные
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПеременныеСНДС, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПеременныеСНДСОборот
КОНЕЦ КАК ПостатейныеПеременныеСНДС,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПеременныеБезНДС, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПеременныеБезНДСОборот
КОНЕЦ КАК ПостатейныеПеременныеБезНДС,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПеременныеУпр, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПеременныеУпрОборот
КОНЕЦ КАК ПостатейныеПеременныеУпр,
ВЫБОР
КОГДА ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
ТОГДА ВЫРАЗИТЬ(Продажи.КоличествоОборот * ЕСТЬNULL(СтоимостьНоменклатуры.ПостатейныеПеременныеРегл, 0) КАК ЧИСЛО(15, 2))
ИНАЧЕ Продажи.ПостатейныеПеременныеРеглОборот
КОНЕЦ КАК ПостатейныеПеременныеРегл,

Продажи.СуммаРучнойСкидкиОборот КАК СуммаРучнойСкидкиОборот,
Продажи.СуммаАвтоматическойСкидкиОборот КАК СуммаАвтоматическойСкидкиОборот,
Продажи.ХозяйственнаяОперация КАК ХозяйственнаяОперация
{ВЫБРАТЬ
ЗаказКлиента.*,
Сделка.*,
МенеджерСделки,
Подразделение.*,
Номенклатура.*,
Характеристика.*,
Склад.*,
Организация.*,
Продавец.*,
Партнер.*,
Контрагент.*,
Покупатель.*,
Поставщик.*,
Менеджер.*,
ВидЗапасов.*,
ГруппаФинансовогоУчета.*,
Регистратор,
ПериодСекунда,
ПериодДень,
ПериодНеделя,
ПериодДекада,
ПериодМесяц,
ПериодКвартал,
ПериодПолугодие,
ПериодГод,
ВидСделки,
ХозяйственнаяОперация.*}
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
{(&НачалоПериода)}, {(&ОкончаниеПериода)},
Авто,
{
(ЕСТЬNULL(ЗаказКлиента.Сделка, ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка))).* КАК Сделка,
(ЕСТЬNULL(ЗаказКлиента.Сделка.Ответственный, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))).* КАК МенеджерСделки,
(ВЫБОР
КОГДА Менеджер = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
ТОГДА ЕСТЬNULL(ЗаказКлиента.Менеджер, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))
ИНАЧЕ Менеджер
КОНЕЦ).* КАК Менеджер,
(ВЫБОР
КОГДА ВидЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
ТОГДА ВидЗапасов.ВладелецТовара
ИНАЧЕ
АналитикаУчетаПартий.Поставщик
КОНЕЦ).* КАК Поставщик,
(ВидЗапасов.ГруппаФинансовогоУчета).* КАК ГруппаФинансовогоУчета,
(ВЫБОР
КОГДА НЕ ЗаказКлиента.Сделка.ВидСделки ЕСТЬ NULL
ТОГДА ЗаказКлиента.Сделка.ВидСделки.Наименование
КОГДА ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента
ИЛИ ЗаказКлиента ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента
ТОГДА &СтрокаПродажиПоЗаказам
ИНАЧЕ &СтрокаПродажиБезЗаказов
КОНЕЦ) КАК ВидСделки}
) КАК Продажи
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
ПО Продажи.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики}
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
ПО Продажи.АналитикаУчетаПоПартнерам = АналитикаПоПартнерам.КлючАналитики}
{ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасчетСебестоимостиТоваров.Организации КАК РасчетСебестоимости
ПО (НАЧАЛОПЕРИОДА(Продажи.ПериодМесяц, МЕСЯЦ) = НАЧАЛОПЕРИОДА(РасчетСебестоимости.Ссылка.Дата, МЕСЯЦ))
И (АналитикаПоПартнерам.Организация = РасчетСебестоимости.Организация)
И (РасчетСебестоимости.Ссылка.Проведен)}
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтоимостьТоваров КАК СтоимостьНоменклатуры
ПО Продажи.АналитикаУчетаНоменклатуры = СтоимостьНоменклатуры.АналитикаУчетаНоменклатуры
И (АналитикаПоПартнерам.Организация = СтоимостьНоменклатуры.Организация)
И Продажи.ВидЗапасов = СтоимостьНоменклатуры.ВидЗапасов
И (СтоимостьНоменклатуры.Период = НАЧАЛОПЕРИОДА(Продажи.ПериодМесяц, МЕСЯЦ))
И Продажи.РазделУчета = СтоимостьНоменклатуры.РазделУчета
И ЕСТЬNULL(РасчетСебестоимости.Ссылка.ПредварительныйРасчет, ЛОЖЬ)
}
ГДЕ
(&ПоказыватьПродажи = 1
И АналитикаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
ИЛИ &ПоказыватьПродажи = 2
И АналитикаПоПартнерам.Партнер = ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
ИЛИ &ПоказыватьПродажи = 0)
{ГДЕ
АналитикаНоменклатуры.Номенклатура.* КАК Номенклатура,
АналитикаНоменклатуры.Характеристика.* КАК Характеристика,
АналитикаПоПартнерам.Организация.* КАК Организация,
АналитикаПоПартнерам.Партнер.* КАК Партнер,
АналитикаНоменклатуры.Склад.* КАК Склад,
((АналитикаНоменклатуры.Номенклатура, АналитикаНоменклатуры.Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
(АналитикаПоПартнерам.Партнер В
(ВЫБРАТЬ
ОтборПоСегментуПартнеров.Партнер
ИЗ
ОтборПоСегментуПартнеров
ГДЕ
ОтборПоСегментуПартнеров.ИспользуетсяОтборПоСегментуПартнеров = &ИспользуетсяОтборПоСегментуПартнеров)),
(ЕСТЬNULL(Продажи.ЗаказКлиента.Сделка, ЗНАЧЕНИЕ(Справочник.СделкиСКлиентами.ПустаяСсылка))).* КАК Сделка,
Продажи.Договор.* КАК Договор,
(ВЫБОР
КОГДА АналитикаПоПартнерам.Контрагент ССЫЛКА Справочник.Контрагенты
ТОГДА АналитикаПоПартнерам.Контрагент
ИНАЧЕ NULL
КОНЕЦ).* КАК Контрагент,
(ВЫБОР
КОГДА АналитикаПоПартнерам.Контрагент ССЫЛКА Справочник.Организации
ТОГДА АналитикаПоПартнерам.Контрагент
ИНАЧЕ NULL
КОНЕЦ).* КАК Покупатель,
Продажи.ХозяйственнаяОперация.*}) КАК Таблица

СГРУППИРОВАТЬ ПО
Таблица.Сделка,
Таблица.МенеджерСделки,
Таблица.Номенклатура,
Таблица.Характеристика,
Таблица.Серия,
Таблица.Организация,
Таблица.Продавец,
Таблица.Партнер,
Таблица.НаправлениеДеятельности,
Таблица.Регистратор,
Таблица.ПериодСекунда,
Таблица.ПериодДень,
Таблица.ПериодНеделя,
Таблица.ПериодДекада,
Таблица.ПериодМесяц,
Таблица.ПериодКвартал,
Таблица.ПериодПолугодие,
Таблица.ПериодГод,
Таблица.ЗаказКлиента,
Таблица.Подразделение,
Таблица.Склад,
Таблица.Контрагент,
Таблица.Покупатель,
Таблица.Поставщик,
Таблица.Менеджер,
Таблица.ВидЗапасов,
Таблица.ГруппаФинансовогоУчета,
Таблица.ВидСделки,
Таблица.Номенклатура.ЕдиницаИзмерения,
Таблица.Номенклатура.ЕдиницаДляОтчетов,
Таблица.Номенклатура.КоэффициентЕдиницыДляОтчетов,
&ТекстЗапросаВесНоменклатуры1,
&ТекстЗапросаОбъемНоменклатуры1,
Таблица.СуммаРучнойСкидкиОборот,
Таблица.СуммаАвтоматическойСкидкиОборот,
Таблица.ХозяйственнаяОперация

ИМЕЮЩИЕ
(СУММА(Таблица.Количество) <> 0
ИЛИ ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Выручка)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ВыручкаРегл)
ИНАЧЕ СУММА(Таблица.ВыручкаБезНДС)
КОНЕЦ <> 0
ИЛИ ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Себестоимость)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.СебестоимостьРегл)
ИНАЧЕ СУММА(Таблица.СебестоимостьБезНДС)
КОНЕЦ <> 0
ИЛИ ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.ДопРасходы)
КОГДА &ДанныеОтчета = 3
ТОГДА 0
ИНАЧЕ СУММА(Таблица.ДопРасходыБезНДС)
КОНЕЦ <> 0
ИЛИ ВЫБОР
КОГДА &ДанныеОтчета = 1
ТОГДА СУММА(Таблица.Выручка) - СУММА(Таблица.Себестоимость) - СУММА(Таблица.ДопРасходы)
КОГДА &ДанныеОтчета = 3
ТОГДА СУММА(Таблица.ВыручкаРегл) - СУММА(Таблица.СебестоимостьРегл)
ИНАЧЕ СУММА(Таблица.ВыручкаБезНДС) - СУММА(Таблица.СебестоимостьБезНДС) - СУММА(Таблица.ДопРасходыБезНДС)
КОНЕЦ <> 0)
Показать


Ну сделаю я выборку по закупкам и помещу ее во временную таблицу. Потом приклею к итоговой таблице оригинального запроса. Результат прежний.
8. YannikAlx 43 15.02.19 13:36 Сейчас в теме
(7) Вот вы и добейтесь "на кошках", чтобы ваш упрощенный вариант отрабатывал так как вы хотите.
Вы же нам простой запрос привели и сказали, что он не работает.
Лезть в сложный нужно тогда, когда поймешь почему простой не работает на 2 регистрах...
9. AlexeyPapanov 459 15.02.19 14:31 Сейчас в теме
(8) Гениально, коллега! Мне нужно разобраться! Так и запишем)
Спасибо!
11. YannikAlx 43 15.02.19 14:47 Сейчас в теме
(9) Вы не записывайте, вы разбирайтесь со своими задачами...
Предлагая читателям одну задачу , имея ввиду совершенно другую и пытаясь еще возмущаться , что предлагают решение предложенной задачи вы ОЧЕНЬ много помощи получите...
12. AlexeyPapanov 459 15.02.19 14:55 Сейчас в теме
(11) Коллега, давайте не будем спорить. Я не возмущаюсь. Вероятно, Вы не поняли суть. Вы ответили как могли, я Вас услышал.

Я попробую упростить запрос штатного отчета, чтобы приклеить нужную мне колонку.
Еще раз повторюсь, дело не во временных таблицах. Дело в том, что скорее всего СКД из-за NULL'ов в измерениях отсекает строки.
Я думал, что наверняка у многих такое было, кто пишет отчеты.
6. YannikAlx 43 15.02.19 12:20 Сейчас в теме
(4) Во временные таблицы помещать нужно не итоговые выборки , а выборки из обоих регистров, или из каждого регистра в свою ВТ - для понятности
10. user752690 15.02.19 14:42 Сейчас в теме
Может, дело в отборе "Кроме услуг"?
13. Release 15.02.19 15:06 Сейчас в теме
Это:
ВЫБРАТЬ 
    Таблица.Регистратор КАК Регистратор,
    ЕстьNull(Таблица.Номенклатура, Значение(Справочник.Номенклатура.ПустаяСсылка)) КАК Номенклатура,
    Таблица.Организация КАК Организация,
    Таблица.Продавец КАК Продавец,
    Таблица.Партнер КАК Партнер,

по хорошему нужно обернуть:
ВЫБРАТЬ 
    Таблица.Регистратор КАК Регистратор,
    ЕстьNull(Таблица.Номенклатура, ЕстьNull(ЗакупкиОбороты.АналитикаУчетаНоменклатуры, Значение(Справочник.Номенклатура.ПустаяСсылка))) КАК Номенклатура,
    ЕстьNull(Таблица.Организация, ЗакупкиОбороты.Организация) КАК Организация, ,
    ЕстьNull(Таблица.Продавец, ЗакупкиОбороты.Продавец) КАК Продавец,
    ЕстьNull(Таблица.Партнер, ЗакупкиОбороты.Партнер) КАК Партнер,
14. ovasiliev 6 16.02.19 07:55 Сейчас в теме +1 $m
Не вчитывался в запрос, но сразу скажу, что при полном соединении с измерениями, по которым соединяете, нужно делать так:
ВЫБОР
КОГДА Таблица1.Измерение1 ЕСТЬ NULL ТОГДА Таблица2.Измерение1
ИНАЧЕ Таблица1.Измерение1
КОНЕЦ
Иначе строки и потеряете.
DoReMu; acanta; +2 Ответить
15. AlexeyPapanov 459 16.02.19 13:49 Сейчас в теме
(14) Да, вот я и подозревал, что так и есть.

Нашел статью на ИТС про объединение наборов данных https://its.1c.ru/db/pubcomplexreports/content/37/hdoc
Очень удобный прием тем, что тест запроса можно разбить на наборы - легче визуально воспринимать структуру запроса.

В упрощенном варианте этим приемом я склеил данные регистров накопления "ВыручкаИСебестоимостьПродаж" и "Закупки".

Теперь осталось победить штатный отчет.
28. DoReMu 3 26.11.20 15:51 Сейчас в теме
(14)
азу скажу, что при полном соединении с измерениями, по которым соединяете, нужно делать так:
ВЫБОР
КОГДА Таблица1.Измерение1 ЕСТЬ NULL ТОГДА Табл


Спасибо, очень помогло ваше сообщение!
16. ovasiliev 6 16.02.19 13:55 Сейчас в теме
Ну, это про объединение. А вы же про соединение писали. Совсем разные вещи.
При объединении валятся в одни и те же колонки разные наборы несвязанных данных. При соединении вы приращиваете колонки, пересекая наборы по каким-либо измерениям.
Вот я и пишу выше - в этом случае, если вы эти измерения включаете в состав выбираемых колонок, то надо их брать из какой-либо из пересекаемых таблиц. А если в ней не окажется данных в текущей троке - то из другой таблицы. Иначе строка выпадет.
17. AlexeyPapanov 459 16.02.19 14:30 Сейчас в теме
(16) См. скрин. Результат я получаю идентичный штатному отчету. Колонка клеится как надо.
По сути, забыв сейчас про возможности СКД и говоря только о запросе, то две таблицы мы можем одинаково склеить по колонкам с помощью объединения (вертикальное) и полного соединения (горизонтальное).
Наверняка, есть нюансы, но в целом, применимо к моей задаче, мне подходит и объединение.

Ну и собственно я так понял исходя из статьи, что это аналог "вертикального" соединения в самом запросе. А связи наборов данных в СКД всегда работают как левое внешнее соединение (горизонтальное).

Вот я и воспользовался вертикальным. В самих запросах часто еще итог такой склейки группируют по колонкам, чтобы не было дублей строк, но за нас это сделает СКД.
Прикрепленные файлы:
18. ovasiliev 6 16.02.19 16:18 Сейчас в теме
Какое вертикальное, о чём вы говорите... Объединение - это применимо к несвязанным наборам данных...
А соединение бывает не только левое (при правом платформа просто меняет местами таблицы, и получается левое), а ещё внутренне и внешнее (полное).
Ни о каком "вертикальном" речь идти не может.
Вы можете сделать объединение, но если вам при этом нужно добавить колонку, то в той таблице, где её нет, вам нужно будет добавить её в виде какого-то постоянного значения. Обычно это NULL.
Но при этом, ещё раз повторюсь, это будут несвязанные данные. То есть, сумма закупки никак не будет привязана к товару детальных записей первой таблицы.
Но в вашем коде и нет никакого объединения.
19. AlexeyPapanov 459 16.02.19 19:58 Сейчас в теме
(18) мы может о разных вещах говорим?)
Но в вашем коде и нет никакого объединения.

Я Вам и не приводил код. Как я Вам приведу его, когда это делает СКД?
В сообщении (17) я показал результат объединения наборов данных средствами СКД.
Этого же можно было добиться в запросе другими средствами. Например полным соединением, которое я использовал изначально.
Я прекрасно знаю, что такое левое, правое, полное и внутреннее соединение. Это все так называемые горизонтальные соединения, когда к одной таблице "сбоку" присоединяем данные из присоединяемой таблицы.
Так вот говорил я о том, что объединение наборов данных средствами СКД мне напоминает использование конструкции ОБЪЕДИНИТЬ ВСЕ в запросе - т.е. "вертикальное" соединение, когда две таблицы с одинаковым набором полей склеиваются по вертикали.

Я не пойму, про что Вы писали...
какие еще несвязанные данные. Вы скриншот посмотрите в 17 посте. Все связано как надо.
Прикрепленные файлы:
20. AlexeyPapanov 459 16.02.19 20:05 Сейчас в теме
Кстати, может кому интересно будет, прикладываю файл отчета.
Это набросок для проверки связи наборов данных СКД, который я сделал по статье с ИТС https://its.1c.ru/db/pubcomplexreports/content/37/hdoc
Прикрепленные файлы:
Валовая прибыль по поставщикам УТ11.4.6.207 - вариант 3 - мой.erf
21. ovasiliev 6 16.02.19 20:14 Сейчас в теме
22. AlexeyPapanov 459 16.02.19 20:15 Сейчас в теме
(21) Да что я не так делаю? Я не стесняюсь ступорезить. Мне просто понять хочется, что же я не так делаю.
23. AlexeyPapanov 459 16.02.19 22:12 Сейчас в теме
(21) Знаете, вот конечно огорчают такие "коллеги", у которых цель, не помочь по теме, а блеснуть прозой.
В начале темы Вы написали по делу, а потом не в то русло пошло.
24. acanta 16.02.19 22:25 Сейчас в теме
Попробуйте протестировать ключи аналитики, возможно потеря данных все же на левых соединениях
25. AlexeyPapanov 459 16.02.19 22:33 Сейчас в теме
(24) Нет, мой косяк был из-за null'ов в измерениях.

Вот решение задачи полным соединением (запрос упрощенный).

Результат запроса абсолютно идентичен варианту с использованием объединений наборов данных. Так что я не понял выше слов уважаемого коллеги про фееричность.

Код
ВЫБРАТЬ
   Продажи.АналитикаУчетаПоПартнерам.Организация КАК Организация,
   Продажи.АналитикаУчетаПартий.Поставщик КАК ПартнерПоставщик,
   Продажи.АналитикаУчетаПартий.Контрагент КАК Контрагент,
   Продажи.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
   СУММА(ЕСТЬNULL(Продажи.СуммаВыручкиОборот, 0)) КАК Выручка,
   СУММА(ЕСТЬNULL(Продажи.СтоимостьОборот, 0)) КАК Себестоимость,
   СУММА(ЕСТЬNULL(Продажи.СуммаВыручкиОборот, 0) - ЕСТЬNULL(Продажи.СтоимостьОборот, 0)) КАК ВаловаяПрибыль
ПОМЕСТИТЬ ВТПродажи
ИЗ
   РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, , ) КАК Продажи

СГРУППИРОВАТЬ ПО
   Продажи.АналитикаУчетаПоПартнерам.Организация,
   Продажи.АналитикаУчетаПартий.Поставщик,
   Продажи.АналитикаУчетаПартий.Контрагент,
   Продажи.АналитикаУчетаНоменклатуры.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЗакупкиОбороты.Организация КАК Организация,
   ЗакупкиОбороты.Партнер КАК ПартнерПоставщик,
   ЗакупкиОбороты.Контрагент КАК Контрагент,
   ЗакупкиОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
   ЕСТЬNULL(ЗакупкиОбороты.СуммаОборот, 0) КАК СуммаЗакупки
ПОМЕСТИТЬ ВТЗакупки
ИЗ
   РегистрНакопления.Закупки.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, , ) КАК ЗакупкиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВЫБОР
      КОГДА ВТЗакупки.Организация ЕСТЬ NULL
         ТОГДА ВТПродажи.Организация
      ИНАЧЕ ВТЗакупки.Организация
   КОНЕЦ КАК Организация,
   ВЫБОР
      КОГДА ВТЗакупки.ПартнерПоставщик ЕСТЬ NULL
         ТОГДА ВТПродажи.ПартнерПоставщик
      ИНАЧЕ ВТЗакупки.ПартнерПоставщик
   КОНЕЦ КАК ПартнерПоставщик,
   ВЫБОР
      КОГДА ВТЗакупки.Контрагент ЕСТЬ NULL
         ТОГДА ВТПродажи.Контрагент
      ИНАЧЕ ВТЗакупки.Контрагент
   КОНЕЦ КАК Контрагент,
   ВЫБОР
      КОГДА ВТЗакупки.Номенклатура ЕСТЬ NULL
         ТОГДА ВТПродажи.Номенклатура
      ИНАЧЕ ВТЗакупки.Номенклатура
   КОНЕЦ КАК Номенклатура,
   ВТПродажи.Выручка КАК Выручка,
   ВТПродажи.Себестоимость КАК Себестоимость,
   ВТПродажи.ВаловаяПрибыль КАК ВаловаяПрибыль,
   ВЫРАЗИТЬ(ВЫБОР
         КОГДА ВТПродажи.Выручка <> 0
            ТОГДА ВТПродажи.Выручка - ВТПродажи.Себестоимость / ВТПродажи.Выручка
         ИНАЧЕ 0 * 100
      КОНЕЦ КАК ЧИСЛО(15, 2)) КАК Рентабельность,
   ВТЗакупки.СуммаЗакупки КАК СуммаЗакупки
ИЗ
   ВТПродажи КАК ВТПродажи
      ПОЛНОЕ СОЕДИНЕНИЕ ВТЗакупки КАК ВТЗакупки
      ПО ВТПродажи.Организация = ВТЗакупки.Организация
         И ВТПродажи.ПартнерПоставщик = ВТЗакупки.ПартнерПоставщик
         И ВТПродажи.Контрагент = ВТЗакупки.Контрагент
         И ВТПродажи.Номенклатура = ВТЗакупки.Номенклатура
Показать полностью
26. ovasiliev 6 16.02.19 23:01 Сейчас в теме
То есть, всё-таки вы смогли привести код? )) То есть, всё-таки не всё делает сама СКД?
Вы все время приводите соединение, и ни разу объединение. И при этом почему-то утверждаете, что это одно и тоже.
Однако, вам всё-таки надо придти к тому, что это никак не одно и то же.
Соединение производится на уровне строк. Берётся строка из одной таблицы, ищется подходящая по условиям строка из другой, и из последней к исходной строке добавляются нужные поля. И так со всеми подходящими по условиям строками. Ещё раз обращаю внимание - добавляются поля к строке.
При объединении же сразу "рисуются" нужные колонки, и в них "вываливаются" данные сначала из одной таблицы, потом из другой. Потом из третьей, четвёртой.. из всех выбранных. При этом каждой из этих таблиц абсолютно всё равно, что содержится во всех остальных. Это данные не связанные.
Собственно, ничего нового не говорю, всё это я уже писал выше.
27. AlexeyPapanov 459 16.02.19 23:09 Сейчас в теме
(26)
То есть, всё-таки вы смогли привести код? ))

Да на кой хрен писать этот код, если мы с Вами понимаем как решить задачу полным соединением?

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

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