Рассчитать количество дней, когда товар находился на складе можно, используя данный запрос:
Немного изменив данный запрос можно получить количество дней, которое товар был на остатках понедельно или помесячно.
Чтобы получить для месяца: заменяем периодичность "НЕДЕЛЯ" на "МЕСЯЦ".
Результат выполнения запроса для получения понедельного количества дней товара на остатках (с учетом выходных и праздников) представлен на скриншоте ниже.
ВЫБРАТЬ
ОстаткиПериоды.Номенклатура,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Календарь.ДатаКалендаря) КАК ДатаКалендаря
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТоварыНаСкладахНач.Номенклатура КАК Номенклатура,
ТоварыНаСкладахНач.Период КАК ПериодНач,
МИНИМУМ(ТоварыНаСкладахКон.Период) КАК ПериодКон
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахНач
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахКон
ПО ТоварыНаСкладахНач.Номенклатура = ТоварыНаСкладахКон.Номенклатура
И (ТоварыНаСкладахНач.КоличествоНачальныйОстаток = 0
ИЛИ ТоварыНаСкладахНач.Период = НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ))
И (ТоварыНаСкладахКон.КоличествоКонечныйОстаток = 0
ИЛИ ТоварыНаСкладахКон.Период = НАЧАЛОПЕРИОДА(&ДатаКон, ДЕНЬ))
И ТоварыНаСкладахНач.Период <= ТоварыНаСкладахКон.Период
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахНач.Номенклатура,
ТоварыНаСкладахНач.Период) КАК ОстаткиПериоды
ПО (Календарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон)
И (Календарь.ДатаКалендаря МЕЖДУ ОстаткиПериоды.ПериодНач И ОстаткиПериоды.ПериодКон)
И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
СГРУППИРОВАТЬ ПО
ОстаткиПериоды.Номенклатура
Принцип работы: сначала, используя вложенный запрос, получаем периоды, когда товар был на складе, а потом периоды соединяем с производственным календарем. Данный запрос корректно рассчитывает, даже, если товара не было на складе на начало или конец анализируемого периода.ОстаткиПериоды.Номенклатура,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Календарь.ДатаКалендаря) КАК ДатаКалендаря
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТоварыНаСкладахНач.Номенклатура КАК Номенклатура,
ТоварыНаСкладахНач.Период КАК ПериодНач,
МИНИМУМ(ТоварыНаСкладахКон.Период) КАК ПериодКон
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахНач
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахКон
ПО ТоварыНаСкладахНач.Номенклатура = ТоварыНаСкладахКон.Номенклатура
И (ТоварыНаСкладахНач.КоличествоНачальныйОстаток = 0
ИЛИ ТоварыНаСкладахНач.Период = НАЧАЛОПЕРИОДА(&ДатаНач, ДЕНЬ))
И (ТоварыНаСкладахКон.КоличествоКонечныйОстаток = 0
ИЛИ ТоварыНаСкладахКон.Период = НАЧАЛОПЕРИОДА(&ДатаКон, ДЕНЬ))
И ТоварыНаСкладахНач.Период <= ТоварыНаСкладахКон.Период
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахНач.Номенклатура,
ТоварыНаСкладахНач.Период) КАК ОстаткиПериоды
ПО (Календарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон)
И (Календарь.ДатаКалендаря МЕЖДУ ОстаткиПериоды.ПериодНач И ОстаткиПериоды.ПериодКон)
И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
СГРУППИРОВАТЬ ПО
ОстаткиПериоды.Номенклатура
Немного изменив данный запрос можно получить количество дней, которое товар был на остатках понедельно или помесячно.
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ) КАК НачалоИнтервала,
КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ) КАК КонецИнтервала,
КОЛИЧЕСТВО(РегламентированныйПроизводственныйКалендарь.ВидДня) КАК РабочихДнейВИнтервале
ПОМЕСТИТЬ ПериодИнтервал
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
И (РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ),
КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ)
ИНДЕКСИРОВАТЬ ПО
НачалоИнтервала,
КонецИнтервала
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПериодИнтервал.НачалоИнтервала КАК НачалоИнтервала,
ПериодИнтервал.КонецИнтервала КАК КонецИнтервала,
ОстаткиПериоды.Номенклатура КАК Номенклатура,
ПериодИнтервал.РабочихДнейВИнтервале,
КОЛИЧЕСТВО(Календарь.ДатаКалендаря) КАК КоличествоДнейНаОстатках
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТоварыНаСкладахНач.Номенклатура КАК Номенклатура,
ТоварыНаСкладахНач.Период КАК ПериодНач,
МИНИМУМ(ТоварыНаСкладахКон.Период) КАК ПериодКон
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
&НачалоПериода,
&КонецПериода,
День,
ДвиженияИГраницыПериода,
Номенклатура.ОсновнойПоставщик = &Поставщик
И Склад.Подразделение = &Подразделение {(Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахНач
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахКон
ПО ТоварыНаСкладахНач.Номенклатура = ТоварыНаСкладахКон.Номенклатура
И (ТоварыНаСкладахНач.КоличествоНачальныйОстаток = 0
ИЛИ ТоварыНаСкладахНач.Период = НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ))
И (ТоварыНаСкладахКон.КоличествоКонечныйОстаток = 0
ИЛИ ТоварыНаСкладахКон.Период = НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ))
И ТоварыНаСкладахНач.Период <= ТоварыНаСкладахКон.Период
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахНач.Номенклатура,
ТоварыНаСкладахНач.Период) КАК ОстаткиПериоды
ПО (Календарь.ДатаКалендаря МЕЖДУ ОстаткиПериоды.ПериодНач И ОстаткиПериоды.ПериодКон)
И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПериодИнтервал КАК ПериодИнтервал
ПО (Календарь.ДатаКалендаря МЕЖДУ ПериодИнтервал.НачалоИнтервала И ПериодИнтервал.КонецИнтервала)
СГРУППИРОВАТЬ ПО
ОстаткиПериоды.Номенклатура,
ПериодИнтервал.НачалоИнтервала,
ПериодИнтервал.КонецИнтервала,
ПериодИнтервал.РабочихДнейВИнтервале
НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ) КАК НачалоИнтервала,
КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ) КАК КонецИнтервала,
КОЛИЧЕСТВО(РегламентированныйПроизводственныйКалендарь.ВидДня) КАК РабочихДнейВИнтервале
ПОМЕСТИТЬ ПериодИнтервал
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода
И (РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ),
КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, НЕДЕЛЯ)
ИНДЕКСИРОВАТЬ ПО
НачалоИнтервала,
КонецИнтервала
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПериодИнтервал.НачалоИнтервала КАК НачалоИнтервала,
ПериодИнтервал.КонецИнтервала КАК КонецИнтервала,
ОстаткиПериоды.Номенклатура КАК Номенклатура,
ПериодИнтервал.РабочихДнейВИнтервале,
КОЛИЧЕСТВО(Календарь.ДатаКалендаря) КАК КоличествоДнейНаОстатках
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТоварыНаСкладахНач.Номенклатура КАК Номенклатура,
ТоварыНаСкладахНач.Период КАК ПериодНач,
МИНИМУМ(ТоварыНаСкладахКон.Период) КАК ПериодКон
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
&НачалоПериода,
&КонецПериода,
День,
ДвиженияИГраницыПериода,
Номенклатура.ОсновнойПоставщик = &Поставщик
И Склад.Подразделение = &Подразделение {(Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахНач
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахКон
ПО ТоварыНаСкладахНач.Номенклатура = ТоварыНаСкладахКон.Номенклатура
И (ТоварыНаСкладахНач.КоличествоНачальныйОстаток = 0
ИЛИ ТоварыНаСкладахНач.Период = НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ))
И (ТоварыНаСкладахКон.КоличествоКонечныйОстаток = 0
ИЛИ ТоварыНаСкладахКон.Период = НАЧАЛОПЕРИОДА(&КонецПериода, ДЕНЬ))
И ТоварыНаСкладахНач.Период <= ТоварыНаСкладахКон.Период
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахНач.Номенклатура,
ТоварыНаСкладахНач.Период) КАК ОстаткиПериоды
ПО (Календарь.ДатаКалендаря МЕЖДУ ОстаткиПериоды.ПериодНач И ОстаткиПериоды.ПериодКон)
И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПериодИнтервал КАК ПериодИнтервал
ПО (Календарь.ДатаКалендаря МЕЖДУ ПериодИнтервал.НачалоИнтервала И ПериодИнтервал.КонецИнтервала)
СГРУППИРОВАТЬ ПО
ОстаткиПериоды.Номенклатура,
ПериодИнтервал.НачалоИнтервала,
ПериодИнтервал.КонецИнтервала,
ПериодИнтервал.РабочихДнейВИнтервале
Результат выполнения запроса для получения понедельного количества дней товара на остатках (с учетом выходных и праздников) представлен на скриншоте ниже.
Я порекомендую всем, кто ищет кредит для бизнеса, г-ну Бенджамину, который помог мне с кредитом в четыре миллиона долларов, чтобы начать свой бизнес, и это было быстро. Когда я получил от них кредит, было удивительно, насколько легко им было работать. Процесс был быстрым и ненадежно. Это был определенно положительный опыт. Избегайте мошенников и свяжитесь с г-ном Бенджамином. lfdsloans@outlook.com. WhatsApp ... + 19893943740. Если вы ищете бизнес-кредит.
ОтветитьУдалить