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

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.

См. также

SALE! 20%

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

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121592    670    389    

710

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5740    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6279    30    mkalimulin    25    

49

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1740    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5384    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16163    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. d.snissarenko 152 26.09.07 14:38 Сейчас в теме
о нашел место где можно плюсик поставить ;)
2. Kino 29.09.07 01:42 Сейчас в теме
Как знал, что нужно! Очень вовремя!
3. Aleksey.Bochkov 3660 09.10.07 06:25 Сейчас в теме
А если эту же задачу рассмотреть применительно к прямым запросам в 7.7 ?
4. Вадимко 214 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. Вадимко 214 12.10.07 01:46 Сейчас в теме
Упс, это типа темп отгрузок
Ну ладно, мот кому пригодиццо :)
6. Вадимко 214 12.10.07 01:48 Сейчас в теме
Вспомнил, это полезный отчет "кому пора отгружать" :)
7. ValentinV 05.11.08 16:22 Сейчас в теме
>Проверочный набор данных №1
А почему должно быть 8
8. seducer 82 24.12.08 16:47 Сейчас в теме
У меня вот как раз такая же проблемка есть. В этом запросе все хорошо, кроме одного. Не может считать по производственному календарю. У меня вот выходные не должны учитываться. Пока просто приходится перебор делать и выкидывать выходные.
9. elizarovs 83 15.07.09 13:18 Сейчас в теме
А проверьте-ка при тех же данных на периоде с 5 августа по 1 сентября!
10. tormozit 7136 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 10 30.04.21 19:23 Сейчас в теме
(12) Как-же ты меня выручил даже не представляешь, низкий тебе поклон, коллега ;)
27. GODCRM 10 30.04.21 19:51 Сейчас в теме
(12) только вот один вопрос возник если товара не было на остатках и в обед он пришел и тут-же весь ушел, этот день засчитается, что товар был на складе?
если нет то неточная цифра получится средней продажи в активный(день нахождения товара на складе) день
16. mxm2 1263 24.10.12 09:24 Сейчас в теме
Так вроде проще:

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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