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

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

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

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

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

Комментарии
Избранное Подписка Сортировка: Древо
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 5638 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
						ИЛИ ТоварыНаСкладахКон.Период = НАЧАЛОПЕРИОДА(&ДатаКон, ДЕНЬ))
					И ТоварыНаСкладахНач.Период <= ТоварыНаСкладахКон.Период
		
		СГРУППИРОВАТЬ ПО
			ТоварыНаСкладахНач.Номенклатура,
			ТоварыНаСкладахНач.Период) КАК ОстаткиПериоды
		ПО (Календарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон)
			И (Календарь.ДатаКалендаря МЕЖДУ ОстаткиПериоды.ПериодНач И ОстаткиПериоды.ПериодКон)
			И (Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
				ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))

СГРУППИРОВАТЬ ПО
	ОстаткиПериоды.Номенклатура
Показать
SIMatveev@1cbit.ru; Paradise.87; ant8; ong1990; S_D_M; svilsa; TapeFiver; +7 Ответить
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 1152 24.10.12 09:24 Сейчас в теме
Так вроде проще:

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

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

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



Как то так, поскольку не имею в наличии УТ10.2/10.3, то за работоспособность не ручаюсь, но вроде должно работать.
17. mxm2 1152 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 60 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
КОНЕЦ
КОНЕЦ) КАК КоличествоКонечныйОстаток
ИЗ
Дни КАК ДНИ,
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, День, , Склад = &Склад) КАК Движения

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

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

См. также

Полезные процедуры и функции для программиста 160

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

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

07.10.2019    12286    HostHost    23       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

Семинар по регулярному менеджменту от Александра Фридмана для собственников, первых лиц и топов. Технология управленческого планирования, комплексного управления временем и другими ресурсами, выполнением поручений, делами, информацией, контактами (встречи-звонки-почта).

от 11000 до 29000 рублей

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

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

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

05.09.2019    16215    ids79    44       

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

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

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

03.09.2019    10905    YPermitin    69       

Онлайн-курс "Технология выполнения проектов ERP-класса – процессный подход". Третий поток. Курс проходит с 21 января по 18 марта 2020 года. Промо

Курс разработан Внедренческим центром «Раздолье». Курс предназначен для подготовки аналитиков, архитекторов и руководителей проектов автоматизации процессов управления с использованием комплексных ИТ-систем (1С:ERP, 1С:УХ, 1С:КА, 1С:УТ). В основе курса лежит методика применения процессного подхода.

9000 рублей

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

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

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

17.08.2019    13414    ids79    16       

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

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

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

08.08.2019    18989    ids79    31       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

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

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

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

02.08.2019    13038    avalakh    21       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

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

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

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

26.07.2019    17075    ids79    8       

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

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

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

17.07.2019    13978    ids79    27       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

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

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

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

09.07.2019    11202    YPermitin    12       

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

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

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

04.07.2019    10039    SeiOkami    49       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

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

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

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

25.06.2019    24293    ids79    17       

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

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

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

11.06.2019    13806    dmurk    134       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

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

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

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

16.05.2019    21854    YPermitin    27       

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

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

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

11.05.2019    13718    Eret1k    23       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

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

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

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

25.04.2019    7897    m-rv    2       

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

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

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

16.04.2019    10436    m-rv    16       

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

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

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

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

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

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

07.04.2019    19100    ellavs    125       

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

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

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

28.03.2019    15646    ellavs    83       

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

На интенсиве будут рассмотрены все теоретические вопросы, связанные с устройством механизма бизнес-процессов – это необходимо для успешной сдачи экзамена 1С:Специалист по платформе. Также, в качестве практического примера, будет решена задача, аналогичная экзаменационной.

777 рублей

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

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

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

14.03.2019    16629    YPermitin    53       

Перенос данных УТ 10.3 => УТ 11 / КА 2 / ERP 2 (ЕРП 2) (документы, остатки и справочная информация из "1С:Управление торговлей, ред. 10.3" в УТ 11 / КА 2 / ERP 2). Обновлен до УТ 10.3.56.х, УТ 11.4.10.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Уже более 100 компаний приобрели перенос и выполнили переход на УТ 11 / КА 2 / ERP 2 с помощью нашей разработки! Обработка перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2 позволяет перенести не только остатки на указанную дату (как типовой перенос), но и все возможные документы за выбранный период. При выходе новых релизов этих программ оперативно выпускаем обновление обработки. Предоставляем техническую поддержку. Можем сделать бесплатный тестовый перенос!

29700 руб.

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 174

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

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    19590    ids79    9