СКД. Необходимо чтобы в отчет выводилась информация об оборотах в разрезе дня. Создали группировку ПеридДень и вывели ресурс КоличествоОборот. Стандартно выводятся только те дни где был оборот. Надо сделать так чтобы выводились все дни попадающие в данный период. Как это сделать?
(1) использовать в группировке дополнение периода
Немного про это было здесь (правда здесь дополнение периода для остатков а не оборотов) https://youtu.be/PY3icvZXJc8
(1) использовать в группировке дополнение периода
Немного про это было здесь (правда здесь дополнение периода для остатков а не оборотов) https://youtu.be/PY3icvZXJc8
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", "Истина");
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции