Запрос: количество дней наличия товара на складе за период

Публикация № 17023

Разработка - Практика программирования

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


Проверочный набор данных №1

НачПериода = '01.08.2006 0:00:00';
КонПериода = '01.09.2006 23:59:59';


Вид движения Партия Период Количество

Приход Партия1 01.08.2006 1
Приход Партия2 02.08.2006 1
Расход Партия1 07.08.2006 1
Расход Партия2 07.08.2006 1
Приход Партия3 31.08.2006 1

Решение дожно выдать 8.

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. d.snissarenko 26.09.07 14:38 Сейчас в теме
о нашел место где можно плюсик поставить ;)
2. Kino 29.09.07 01:42 Сейчас в теме
Как знал, что нужно! Очень вовремя!
3. Aleksey.Bochkov 09.10.07 06:25 Сейчас в теме
А если эту же задачу рассмотреть применительно к прямым запросам в 7.7 ?
4. Вадимко 202 12.10.07 01:45 Сейчас в теме
2(3) Что-то делал похожее, но не употреблял к сожалению, почему не помню, до конца не доделано возможно
Вот короче какой-то шматог:


ТекстЗапроса = "
	|SELECT Контрагенты.ID [Покупатель $Справочник.Контрагенты]
	|	, $ОтгрузкаТМЦ.Номенклатура [Номенклатура $Справочник.Номенклатура]
	|	, SUM($ОтгрузкаТМЦ.Количество) Количество
	|	, SUM($ОтгрузкаТМЦ.СуммаРуб) СуммаРуб
	|	, COUNT(DISTINCT CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DateTime)) КолвоОтгрузок
	|	, COUNT(DISTINCT CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DateTime))/:МесяцевВОтчете ОтгрузокВМесяц
	|	, MAX((CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DateTime))) + ROUND(:ДнейВОтчете/COUNT(DISTINCT CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DateTime)),0) ПланОтгрузка
	|FROM $Регистр.ОтгрузкаТМЦ AS ОтгрузкаТМЦ With (NOLOCK)
	|	INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ОтгрузкаТМЦ.IDDOC = Журнал.IDDOC
	|	LEFT JOIN $Справочник.Договоры AS Договоры With (NOLOCK) ON $ОтгрузкаТМЦ.ДоговорПокупателя = Договоры.ID
	|	LEFT JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON Договоры.PARENTEXT = Контрагенты.ID
	|WHERE (Журнал.DATE_TIME_IDDOC > :ДатаНачала)
	|	AND (Журнал.DATE_TIME_IDDOC < :ДатаКонца)
	|	AND (($ОтгрузкаТМЦ.ДоговорПокупателя = :ВыбДоговор) OR ($ОтгрузкаТМЦ.ДоговорПокупателя = :ВыбДоговор1))
	|GROUP BY Контрагенты.ID
	//|, $ОтгрузкаТМЦ.Номенклатура
	|ORDER BY Контрагенты.ID
	|, COUNT(DISTINCT CAST(LEFT(Журнал.DATE_TIME_IDDOC, 8) AS DateTime)) DESC
	|";
Показать
5. Вадимко 202 12.10.07 01:46 Сейчас в теме
Упс, это типа темп отгрузок
Ну ладно, мот кому пригодиццо :)
6. Вадимко 202 12.10.07 01:48 Сейчас в теме
Вспомнил, это полезный отчет "кому пора отгружать" :)
7. ValentinV 05.11.08 16:22 Сейчас в теме
>Проверочный набор данных №1
А почему должно быть 8
8. seducer 82 24.12.08 16:47 Сейчас в теме
У меня вот как раз такая же проблемка есть. В этом запросе все хорошо, кроме одного. Не может считать по производственному календарю. У меня вот выходные не должны учитываться. Пока просто приходится перебор делать и выкидывать выходные.
9. elizarovs 76 15.07.09 13:18 Сейчас в теме
А проверьте-ка при тех же данных на периоде с 5 августа по 1 сентября!
10. tormozit 5682 15.07.09 13:59 Сейчас в теме
(9) Думаешь нашел баг? Тогда опиши его
11. elizarovs 76 15.07.09 17:00 Сейчас в теме
(10) Пока не разобрался, но в запросе, построенном "по образу и подобию" для случая, когда на день начала периода не было записи в регистре, а остатки были, считаются дни не с начала периода, а только со следующего поступления товара.
Я так понимаю, ограничив выборку прошлых периодов датами начала и конца периода запроса, мы получаем хитрую ситуацию, когда запрос не видит остатков, из-за отсуствия предыдущей записи в регистре.
12. ZLENKO 12.03.12 12:17 Сейчас в теме
(11) Написал запрос для расчета количества дней на складе. Вложенный запрос получает периоды когда товар был на складе, а потом периоды "склеиваются" с производственным календарем. В отличие от тех запросов, которые я встречал в инете, мой запрос корректно рассчитывает если товара не было на начало или на конец анализируемого периода.

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

СГРУППИРОВАТЬ ПО
	ОстаткиПериоды.Номенклатура
Показать
ALEXEY_KONONETS; SIMatveev@1cbit.ru; Paradise.87; ant8; ong1990; S_D_M; svilsa; TapeFiver; +8 Ответить
13. elizarovs 76 13.03.12 05:36 Сейчас в теме
(12) Посмотри здесь http://infostart.ru/public/21177/. При написании ставил целью уйти от производственного календаря. Имхо, теоретически, в него можно забыть воткнуть дату, или вообще забыть заполнить. Получилось гораздо более громоздко, но совсем не зависит от календарей. Теория: 1) составляем список товара, который был на складе на начало периода 2) или был на конец периода 3) или был оборот в периоде. 4) Для этого товара делается выборка на каждую запись в регистре остатков, сравнивается с предыдущей записью в этом же регистре, считается количество прошедших дней с этой предыдущей записи (если там остаток был больше нуля), или с начала периода, при отсутствии предыдущей записи, количество записывается для данного товара. 5) Во внешнем запросе группируем по товару с суммированием количества дней, получаем искомый результат.
SIMatveev@1cbit.ru; +1 Ответить
14. ZLENKO 13.03.12 08:33 Сейчас в теме
(13) Если внимательнее посмотриш на мой запрос, то увидиш он гораздо проще твоего, а делает по сути то же самое :-)
Календарь мне нужен чтобы учитывать праздники и выходные. По мой му не сложно раз в год заполнить календарь.
Если просто в календарных днях, то еще проще и календарь не нужен - можно просто взять РАЗНОСТЬДАТ(ОстаткиПериоды.ПериодНач, ОстаткиПериоды.ПериодКон).
Но
SIMatveev@1cbit.ru; Arthur_bear; elizarovs; +3 Ответить
15. elizarovs 76 13.03.12 12:19 Сейчас в теме
(14) Кстати, разность дат действительно лучше! На моих выкрутасах на периоде 3 месяца 1С умирает. А на разнице дат - работает, на порядок быстрее.
16. mxm2 1165 24.10.12 09:24 Сейчас в теме
Так вроде проще:

ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.ПериодДень                 КАК Период
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура               КАК Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладахОстаткиИОбороты.Склад                      КАК Склад,
    ВЫБОР КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ЕстьНаКО
    ВЫБОР КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ЕстьНаНО
Поместить ДниНаличияНаОстатках
ИЗ  РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&НачПериода, &КонПериода, Авто, , Номенклатура В ИЕРАРХИИ  (&Номенклатура)) КАК ПартииТоваровНаСкладахОстаткиИОбороты
;
ВЫБРАТЬ
    ДниНаличияНаОстатках.Номенклатура,
    ДниНаличияНаОстатках.ХарактеристикаНоменклатуры,
    ДниНаличияНаОстатках.Склад,
    ДниНаличияНаОстатках.Период,
    Минимум(ВЫБОР КОГДА ДниНаличияНаОстатках.Период = ДниНаличияНаОстаткахПеребор.Период) ТОГДА ДниНаличияНаОстатках.ЕстьНаКО ИНАЧЕ РазностьДат(ДниНаличияНаОстатках.Период - ДниНаличияНаОстаткахПеребор.Период, День) КАК Дни

ПОМЕСТИТЬ ИнтервалыНаличия
ИЗ ДниНаличияНаОстатках КАК ДниНаличияНаОстатках
Соединение ДниНаличияНаОстатках КАК ДниНаличияНаОстаткахПеребор
По ДниНаличияНаОстатках.Номенклатура = ДниНаличияНаОстаткахПеребор.Номенклатура
И ДниНаличияНаОстатках.ХарактеристикаНоменклатуры = ДниНаличияНаОстаткахПеребор.ХарактеристикаНоменклатуры
И ДниНаличияНаОстатках.Склад = ДниНаличияНаОстаткахПеребор.Склад
И ДниНаличияНаОстаткахПеребор.ЕстьНаНО = 1 И ДниНаличияНаОстатках.ЕстьНаКО = 1
И (ДниНаличияНаОстатках.Период < ДниНаличияНаОстаткахПеребор.Период И Не ДниНаличияНаОстаткахПеребор.Период = &НачПериода
ИЛИ ДниНаличияНаОстатках.Период = ДниНаличияНаОстаткахПеребор.Период И ДниНаличияНаОстаткахПеребор.Период = &КонПериода)

СГРУППИРОВАТЬ ПО
    ДниНаличияНаОстатках.Номенклатура,
    ДниНаличияНаОстатках.ХарактеристикаНоменклатуры,
    ДниНаличияНаОстатках.Склад,
    ДниНаличияНаОстатках.Период
;
Выбрать 
    ИнтервалыНаличия.Номенклатура,
    ИнтервалыНаличия.ХарактеристикаНоменклатуры,
    ИнтервалыНаличия.Склад,
    Сумма(ИнтервалыНаличия.Дни) КАК Дни
Из ИнтервалыНаличия КАК ИнтервалыНаличия
Сгруппировать По
    ИнтервалыНаличия.Номенклатура,
    ИнтервалыНаличия.ХарактеристикаНоменклатуры,
    ИнтервалыНаличия.Склад
Показать



Как то так, поскольку не имею в наличии УТ10.2/10.3, то за работоспособность не ручаюсь, но вроде должно работать.
17. mxm2 1165 24.10.12 09:39 Сейчас в теме
(16) mxm2, ... первый запрос - таблица по датам, второй - получает интервалы когда товар в наличии, третий - сворачивает эти интервалы. применяю подобную методу в УТ11, на регистре Свободные остатки, но тут перевел в объекты УТ10.Х.
18. Antoska 13 27.03.13 13:53 Сейчас в теме
19. Antoska 13 27.03.13 16:19 Сейчас в теме
Кхмм... Почему нет возможности скачать обработку? Или я совсем ослеп? Запрос это, конечно, хорошо, но хотелось бы и готовую обработку скачать...
20. Boudybuilder 61 07.06.14 21:14 Сейчас в теме
Ну с этого можно хороший показатель вывести. Получить день первого поступления товара на склад , и высчитать всего дней сколько мы уже знакомы с товаром. Ротом из этого запроса получить сколькод дней он был на складе , и высчитать процент. Как такой показатель назвать? Чтото как "% Обеспечнности склада" что ли... ? Кто знает , отпишитесь. Хотелось б грамотно в свои решения это засунуть.
21. more 03.12.14 17:25 Сейчас в теме
Мне вот такой запрос понравился из 1С розница 2,1
ВЫБРАТЬ
	РабочиеДниНоменклатуры.Номенклатура КАК Номенклатура,
	РабочиеДниНоменклатуры.Характеристика КАК Характеристика,
	РабочиеДниНоменклатуры.Магазин,
	СУММА(ВЫБОР
			КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток - ТоварыНаСкладахОстаткиИОбороты.РезервКонечныйОстаток > 0
					ИЛИ КОНЕЦПЕРИОДА(РабочиеДниНоменклатуры.ДатаКалендаря, ДЕНЬ) = КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
						И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход
						И НЕ ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход = 0
						И ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
				ТОГДА РабочиеДниНоменклатуры.РабочийДень
			ИНАЧЕ 0
		КОНЕЦ) КАК КоличествоДнейВПродаже
ИЗ
	(ВЫБРАТЬ
		ГрафикРаботы.ДатаКалендаря КАК ДатаКалендаря,
		ГрафикРаботы.РабочийДень КАК РабочийДень,
		МАКСИМУМ(ТоварыНаСкладахОстаткиИОбороты.Период) КАК Период,
		ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
		ТоварыНаСкладахОстаткиИОбороты.Характеристика КАК Характеристика,
		ГрафикРаботы.Магазин КАК Магазин
	ИЗ
		РегистрСведений.ГрафикиРаботыМагазинов КАК ГрафикРаботы
			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
					&ДатаАнализаНачало {(&ДатаАнализаНачало)},
					&ДатаАнализаКонец {(&ДатаАнализаКонец)},
					День,
					ДвиженияИГраницыПериода,
					НЕ Склад.Магазин.МетодРасчетаПотребности = ЗНАЧЕНИЕ(Перечисление.МетодыРасчетаПотребности.ПоЗаказамПокупателей)
						И Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстаткиИОбороты
			ПО ГрафикРаботы.Магазин = ТоварыНаСкладахОстаткиИОбороты.Склад.Магазин
				И (НАЧАЛОПЕРИОДА(ГрафикРаботы.ДатаКалендаря, ДЕНЬ) >= НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ))
	ГДЕ
		ГрафикРаботы.ДатаКалендаря <= &ДатаАнализаКонец
		И ГрафикРаботы.ДатаКалендаря >= &ДатаАнализаНачало
		И НЕ ГрафикРаботы.Магазин.МетодРасчетаПотребности = ЗНАЧЕНИЕ(Перечисление.МетодыРасчетаПотребности.ПоЗаказамПокупателей)
		И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = &Номенклатура
	
	СГРУППИРОВАТЬ ПО
		ГрафикРаботы.ДатаКалендаря,
		ГрафикРаботы.РабочийДень,
		ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
		ТоварыНаСкладахОстаткиИОбороты.Характеристика,
		ГрафикРаботы.Магазин) КАК РабочиеДниНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
				&ДатаАнализаНачало {(&ДатаАнализаНачало)},
				&ДатаАнализаКонец {(&ДатаАнализаКонец)},
				День,
				ДвиженияИГраницыПериода,
				НЕ Склад.Магазин.МетодРасчетаПотребности = ЗНАЧЕНИЕ(Перечисление.МетодыРасчетаПотребности.ПоЗаказамПокупателей)
					И Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстаткиИОбороты
		ПО РабочиеДниНоменклатуры.Период = ТоварыНаСкладахОстаткиИОбороты.Период
			И РабочиеДниНоменклатуры.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
			И РабочиеДниНоменклатуры.Характеристика = ТоварыНаСкладахОстаткиИОбороты.Характеристика
ГДЕ
	РабочиеДниНоменклатуры.Номенклатура = &Номенклатура

СГРУППИРОВАТЬ ПО
	РабочиеДниНоменклатуры.Номенклатура,
	РабочиеДниНоменклатуры.Характеристика,
	РабочиеДниНоменклатуры.Магазин
Показать
22. more 23.07.16 17:31 Сейчас в теме
Еще можно так.

ВЫБРАТЬ
ДанныеПроизводственногоКалендаря.Дата КАК Период
ПОМЕСТИТЬ Дни
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

СГРУППИРОВАТЬ ПО
ДанныеПроизводственногоКалендаря.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
Движения.Номенклатура,
ДНИ.Период КАК Период,
СУММА(ВЫБОР
КОГДА Движения.Период = &ДатаНачала
ТОГДА Движения.ВНаличииКонечныйОстаток
ИНАЧЕ ВЫБОР
КОГДА Движения.Период <= ДНИ.Период
ТОГДА Движения.ВНаличииОборот
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ) КАК КоличествоКонечныйОстаток
ИЗ
Дни КАК ДНИ,
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, День, , Склад = &Склад) КАК Движения

СГРУППИРОВАТЬ ПО
Движения.Номенклатура,
ДНИ.Период

УПОРЯДОЧИТЬ ПО
Период
Оставьте свое сообщение

См. также

Программная работа с настройками СКД

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    5388    ids79    25       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

[СКД] Программное создание схемы компоновки данных

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

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

15.01.2020    7335    John_d    21       

30 задач. Странных и не очень

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    9280    YPermitin    72       

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Агрегатные функции СКД, о которых мало кто знает

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    24012    ids79    45       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Три костыля. Сказ про фокусы в коде

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    15713    YPermitin    76       

Отслеживание выполнения фонового задания

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    18238    ids79    16       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    33108    ids79    36       

Фоновое выполнение кода в 1С - это просто

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

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

02.08.2019    18326    avalakh    21       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    27081    ids79    9       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    19579    ids79    27       

Регистры сведений. За кулисами

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    14814    YPermitin    12       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

6500 рублей

"Меньше копипаста!", или как Вася универсальную процедуру писал

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    12080    SeiOkami    49       

Создание отчетов с помощью СКД - основные понятия и элементы

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    31704    ids79    17       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

CorelDRAW – пакет профессиональных инструментов для редактирования фотографий, разработки дизайна, создания макетов страниц и векторных иллюстраций

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    16910    dmurk    144       

Регистры накопления. Структура хранения в базе данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    27220    YPermitin    27       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Выполнение внешней обработки в фоновом задании

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    17255    Eret1k    23       

Выгрузка документа по условию

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    9289    m-rv    2       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Как прикрутить ГУИД к регистру сведений

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    12420    m-rv    16       

О расширениях замолвите слово...

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    23382    ellavs    125       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    18549    ellavs    83       

Трюки с внешними источниками данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    20404    YPermitin    53