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

25.09.07

Разработка - Запросы

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169314    937    403    

905

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    11396    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    6342    XilDen    36    

83

Запросы Программист Запросы Бесплатно (free)

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

16.08.2024    9071    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2729    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    10221    implecs_team    6    

48

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3625    andrey_sag    10    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. d.snissarenko 153 26.09.07 14:38 Сейчас в теме
о нашел место где можно плюсик поставить ;)
2. Kino 29.09.07 01:42 Сейчас в теме
Как знал, что нужно! Очень вовремя!
3. Aleksey.Bochkov 3686 09.10.07 06:25 Сейчас в теме
А если эту же задачу рассмотреть применительно к прямым запросам в 7.7 ?
4. Вадимко 156 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. Вадимко 156 12.10.07 01:46 Сейчас в теме
Упс, это типа темп отгрузок
Ну ладно, мот кому пригодиццо :)
6. Вадимко 156 12.10.07 01:48 Сейчас в теме
Вспомнил, это полезный отчет "кому пора отгружать" :)
7. ValentinV 05.11.08 16:22 Сейчас в теме
>Проверочный набор данных №1
А почему должно быть 8
8. seducer 84 24.12.08 16:47 Сейчас в теме
У меня вот как раз такая же проблемка есть. В этом запросе все хорошо, кроме одного. Не может считать по производственному календарю. У меня вот выходные не должны учитываться. Пока просто приходится перебор делать и выкидывать выходные.
9. elizarovs 83 15.07.09 13:18 Сейчас в теме
А проверьте-ка при тех же данных на периоде с 5 августа по 1 сентября!
10. tormozit 7245 15.07.09 13:59 Сейчас в теме
(9) Думаешь нашел баг? Тогда опиши его
11. elizarovs 83 15.07.09 17:00 Сейчас в теме
(10) Пока не разобрался, но в запросе, построенном "по образу и подобию" для случая, когда на день начала периода не было записи в регистре, а остатки были, считаются дни не с начала периода, а только со следующего поступления товара.
Я так понимаю, ограничив выборку прошлых периодов датами начала и конца периода запроса, мы получаем хитрую ситуацию, когда запрос не видит остатков, из-за отсуствия предыдущей записи в регистре.
12. ZLENKO 398 12.03.12 12:17 Сейчас в теме
(11) Написал запрос для расчета количества дней на складе. Вложенный запрос получает периоды когда товар был на складе, а потом периоды "склеиваются" с производственным календарем. В отличие от тех запросов, которые я встречал в инете, мой запрос корректно рассчитывает если товара не было на начало или на конец анализируемого периода.

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

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

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

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

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



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

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

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

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

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

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

УПОРЯДОЧИТЬ ПО
Период
23. tipa-leha 17.11.20 15:12 Сейчас в теме
Если приход и расход в один день, то 0 дней дает :(
25. Vladimir_D 122 22.03.21 12:03 Сейчас в теме
(23) Это и есть сама тема! Если на конец дня нет остатка - значит день не считается. То есть можно предположить, что кто-то из покупателей ушел без покупки, т.к. не хватило
28. FreeArcher 162 27.09.23 13:40 Сейчас в теме
(23) Решается проблема

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

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

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

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

УПОРЯДОЧИТЬ ПО
	Период
Показать
29. SerZ06 21.05.24 15:56 Сейчас в теме
Оставьте свое сообщение