СКД Обороты на каждый день

1. fedor40 706 11.07.22 16:19 Сейчас в теме
СКД. Необходимо чтобы в отчет выводилась информация об оборотах в разрезе дня. Создали группировку ПеридДень и вывели ресурс КоличествоОборот. Стандартно выводятся только те дни где был оборот. Надо сделать так чтобы выводились все дни попадающие в данный период. Как это сделать?
По теме из базы знаний
Найденные решения
3. echo77 1906 11.07.22 16:29 Сейчас в теме
(1) использовать в группировке дополнение периода
Немного про это было здесь (правда здесь дополнение периода для остатков а не оборотов) https://youtu.be/PY3icvZXJc8
independ; fedor40; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. petleon 9 11.07.22 16:25 Сейчас в теме
(1) Есть вариант соединять дни календаря левым соединением с таблицей РН.
user1278383; +1 Ответить
3. echo77 1906 11.07.22 16:29 Сейчас в теме
(1) использовать в группировке дополнение периода
Немного про это было здесь (правда здесь дополнение периода для остатков а не оборотов) https://youtu.be/PY3icvZXJc8
independ; fedor40; +2 Ответить
4. user686924_shipikVV 11.07.22 16:35 Сейчас в теме
Одна из готовых функций.
НаКаждыйдень - если необходимо получать остатки, даже если не было движений.
ПоСкладам - если нужно по складам.
Условие отбора - строка вида УсловиеОтбора = "Номенклатура.Марка В (&ГруппаТоваров)";

&НаСервере
Функция ТекстЗапросаОстатковНаКаждыйДень(УсловиеОтбора, НаКаждыйдень, ПоСкладам)
	
	Если ПоСкладам = Истина Тогда  
		
		ТекстЗапроса = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ДанныеПроизводственногоКалендаря.Дата КАК Дата
		|ПОМЕСТИТЬ ВТ_ДатыНаКаждыйДень
		|ИЗ
		|	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
		|ГДЕ
		|	ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ОстаткиТоваровОстаткиИОбороты.Номенклатура КАК Товар,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.Период, &НачалоПериода) КАК Период,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииНачальныйОстаток, 0) КАК КоличествоНачальныйОстаток,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииКонечныйОстаток, 0) КАК КоличествоКонечныйОстаток,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииОборот, 0) КАК КоличествоОборот,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииПриход, 0) КАК КоличествоПриход,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииРасход, 0) КАК КоличествоРасход,
		|	ОстаткиТоваровОстаткиИОбороты.Склад КАК Склад
		|ПОМЕСТИТЬ ВТ_ОстаткиИОбороты
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &ОкончаниеПериода, День, ДвиженияИГраницыПериода, НЕ Номенклатура В (&СписокИсключаемойНоменклатуры) и " + УсловиеОтбора + ") КАК ОстаткиТоваровОстаткиИОбороты
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ_ДатыНаКаждыйДень.Дата КАК День,
		|	ВТ_ОстаткиИОбороты.Товар КАК Товар,
		|	МАКСИМУМ(ВТ_ОстаткиИОбороты.Период) КАК ПериодОстатковИОборотов
		|ПОМЕСТИТЬ ВТ_СоответствиеДатыПериоду
		|ИЗ
		|	ВТ_ДатыНаКаждыйДень КАК ВТ_ДатыНаКаждыйДень
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты
		|		ПО (ВТ_ОстаткиИОбороты.Период <= ВТ_ДатыНаКаждыйДень.Дата)
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТ_ДатыНаКаждыйДень.Дата,
		|	ВТ_ОстаткиИОбороты.Товар
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ_СоответствиеДатыПериоду.День КАК День,
		|	ВТ_ОстаткиИОбороты.Склад КАК Склад,
		|	ВТ_ОстаткиИОбороты.Товар КАК Номенклатура,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоНачальныйОстаток
		|		ИНАЧЕ ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток
		|	КОНЕЦ КАК НачальныйОстаток,
		|	ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоОборот
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Оборот,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоПриход
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Приход,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоРасход
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Расход
		|ИЗ
		|	ВТ_СоответствиеДатыПериоду КАК ВТ_СоответствиеДатыПериоду
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты
		|		ПО ВТ_СоответствиеДатыПериоду.ПериодОстатковИОборотов = ВТ_ОстаткиИОбороты.Период
		|			И ВТ_СоответствиеДатыПериоду.Товар = ВТ_ОстаткиИОбороты.Товар
		|ГДЕ
		|	&Условие1
		|
		|УПОРЯДОЧИТЬ ПО
		|	День,
		|	ВТ_СоответствиеДатыПериоду.Товар.Наименование";	
		
	Иначе
		
		ТекстЗапроса = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ДанныеПроизводственногоКалендаря.Дата КАК Дата
		|ПОМЕСТИТЬ ВТ_ДатыНаКаждыйДень
		|ИЗ
		|	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
		|ГДЕ
		|	ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ОстаткиТоваровОстаткиИОбороты.Номенклатура КАК Товар,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.Период, &НачалоПериода) КАК Период,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииНачальныйОстаток, 0) КАК КоличествоНачальныйОстаток,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииКонечныйОстаток, 0) КАК КоличествоКонечныйОстаток,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииОборот, 0) КАК КоличествоОборот,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииПриход, 0) КАК КоличествоПриход,
		|	ЕСТЬNULL(ОстаткиТоваровОстаткиИОбороты.ВНаличииРасход, 0) КАК КоличествоРасход
		|ПОМЕСТИТЬ ВТ_ОстаткиИОбороты
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &ОкончаниеПериода, День, ДвиженияИГраницыПериода, НЕ Номенклатура В (&СписокИсключаемойНоменклатуры) и " + УсловиеОтбора + ") КАК ОстаткиТоваровОстаткиИОбороты
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ_ДатыНаКаждыйДень.Дата КАК День,
		|	ВТ_ОстаткиИОбороты.Товар КАК Товар,
		|	МАКСИМУМ(ВТ_ОстаткиИОбороты.Период) КАК ПериодОстатковИОборотов
		|ПОМЕСТИТЬ ВТ_СоответствиеДатыПериоду
		|ИЗ
		|	ВТ_ДатыНаКаждыйДень КАК ВТ_ДатыНаКаждыйДень
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты
		|		ПО (ВТ_ОстаткиИОбороты.Период <= ВТ_ДатыНаКаждыйДень.Дата)
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТ_ДатыНаКаждыйДень.Дата,
		|	ВТ_ОстаткиИОбороты.Товар
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ_СоответствиеДатыПериоду.День КАК День,
		|	ВТ_ОстаткиИОбороты.Товар КАК Номенклатура,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоНачальныйОстаток
		|		ИНАЧЕ ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток
		|	КОНЕЦ КАК НачальныйОстаток,
		|	ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоОборот
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Оборот,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоПриход
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Приход,
		|	ВЫБОР
		|		КОГДА ВТ_СоответствиеДатыПериоду.День = ВТ_ОстаткиИОбороты.Период
		|			ТОГДА ВТ_ОстаткиИОбороты.КоличествоРасход
		|		ИНАЧЕ 0
		|	КОНЕЦ КАК Расход
		|ИЗ
		|	ВТ_СоответствиеДатыПериоду КАК ВТ_СоответствиеДатыПериоду
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИОбороты КАК ВТ_ОстаткиИОбороты
		|		ПО ВТ_СоответствиеДатыПериоду.ПериодОстатковИОборотов = ВТ_ОстаткиИОбороты.Период
		|			И ВТ_СоответствиеДатыПериоду.Товар = ВТ_ОстаткиИОбороты.Товар
		|ГДЕ
		|	&Условие1
		|
		|УПОРЯДОЧИТЬ ПО
		|	День,
		|	ВТ_СоответствиеДатыПериоду.Товар.Наименование";
		
	КонецЕсли;
	
	Если НаКаждыйдень = Истина Тогда
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие1", " ВТ_ОстаткиИОбороты.КоличествоКонечныйОстаток <> 0 ");
	Иначе
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие1", "Истина");
	КонецЕсли;
	
	Возврат ТекстЗапроса;
	
КонецФункции
Показать
5. user686924_shipikVV 11.07.22 16:39 Сейчас в теме
... а с параметрами ГруппаТоваров, СписокИсключаемойНоменклатуры, НачалоПериода, ОкончаниеПериода разберешься.
Оставьте свое сообщение

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