Имя: Пароль:
1C
1С v8
Задачка по запросу
, ,
0 Ион
 
04.11.12
09:47
Есть следующая таблица:
Товар Дата КолвоЗаказанногоЗаДату ТекОстатокНаСкладе
1 Wobland
 
04.11.12
09:49
решение:
выбрать
Значение(Справочник.Номенклатура.ПустаяСсылка) как товар,
ДатаВремя(1, 1, 1) как дата,
0 как КолвоЗаказанногоЗаДату,
0 как ТекОстатокНаСкладе
2 rphosts
 
04.11.12
09:51
(0), (1) стебаетесь?
3 Wobland
 
04.11.12
09:53
(2) стебётесь? - так правильно
4 rphosts
 
04.11.12
09:54
(3) не учи меня и баста!
5 Wobland
 
04.11.12
09:55
(4) Сработал фильтр анти-мат
6 rphosts
 
04.11.12
09:56
(5) нет, это я так сразу написал
7 Wobland
 
04.11.12
09:59
(0) за 10 минут уже можно было договорить.. протухла ветка
8 Повелитель
 
04.11.12
10:03
(0) Не спи на клаве, а то будут потом долго кубики на морде ))
9 Ион
 
04.11.12
10:05
Не на то нажал - отправилось. И так :

Есть следующая таблица:
Товар     Дата        КолвоЗаказанногоНаДату ТекОстаток
========================================================
Торты     04.11.2012  3                      8
Торты     05.11.2012  4                      8
Торты     06.11.2012  5                      8
Конфеты   04.11.2012  2                      6
Конфеты   05.11.2012  4                      6
Пряники   04.11.2012  5                      9
Пряники   05.11.2012  2                      9
Пряники   06.11.2012  1                      9
...
Вопрос. Как одним запросом получить по каждому товару кол-во дней , на которое хватит текущего остатка склада, чтобы удовлетворить заказы на эти дни ? (можно понятно просто перебрать выборку - но хочется запросом).
т.е. по этим приведенным данным мы должны получить след. табличку:
====================
Торты    2
Конфеты  2
Пряники  3
===
10 Wobland
 
04.11.12
10:12
(9) откуда исходную таблицу взял?
11 Ион
 
04.11.12
10:17
Исходная таблица , которую привел - это некая промужуточная временная таблица. Вот из нее нужно получить вышеозвученный результат. Я уже где-то на грани решения - но окончательно еще не блеснуло...
12 Wobland
 
04.11.12
10:18
(11) ну понятно, что она у тебя в готовом виде не хранится. просто, может оттуда как-то что-то..
13 Wobland
 
04.11.12
10:18
(12) *начать оттуда
14 Wobland
 
04.11.12
10:23
сдаётся мне, запрос тут не справится, ибо нарастающий итог
15 rphosts
 
04.11.12
10:23
или начать с того, что советуют в(12)
или так:
1.группируем по товру и выбираем максимальную дату
2.отбираем из исходной талицы записи в кторых комбинаця товар+дата есть в выборке из таблицы 1. + вычислимое поле остаток/hfc[jl d ltym
16 rphosts
 
04.11.12
10:23
/расход в день
17 rphosts
 
04.11.12
10:24
(14) запрос вполне справляется с нарастающим итогом, щас поищу
18 rphosts
 
04.11.12
10:27
19 Ион
 
04.11.12
10:59
Вот для консоли запросов текст, если кто захочет пограться:
==========================================================  
ВЫБРАТЬ
   "Торты" КАК ТОВАР,
   "04.11.2012" КАК ДатаЗаказов,
   3 КАК КолвоЗаказовНаДату,
   8 КАК ТекОстаток
   
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Торты",
   "05.11.2012",
   4,
   8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Торты",
   "06.11.2012",
   5,
   8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Конфеты",
   "04.11.2012",
   2,
   6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Конфеты",
   "05.11.2012",
   4,
   6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Пряники",
   "04.11.2012",
   5,
   9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Пряники",
   "05.11.2012",
   2,
   9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Пряники",
   "06.11.2012",
   1,
   9
=========================================================
(14,18)Спасибо , сейчас посмотрю
20 Ион
 
04.11.12
12:58
Вот , если кому интересно - запрос (полностью рабочий в консоли) , решающий данную задачу. Казалось бы все просто - но когда делаешь , то тонкости есть.
(18) Это , безусловно, помогло. Там необязательно делать левое соединение , ВНУТРЕННЕЕ нормально отрабатывает.
=======================================================
   
ВЫБРАТЬ
   "Торты" КАК ТОВАР,
   "04.11.2012" КАК ДатаЗаказов,
   3 КАК КолвоЗаказовНаДату,
   8 КАК ТекОстаток

ПОМЕСТИТЬ ИсхТабл  

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Торты",
   "05.11.2012",
   4,
   8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Торты",
   "06.11.2012",
   5,
   8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Конфеты",
   "04.11.2012",
   2,
   6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Конфеты",
   "05.11.2012",
   4,
   6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Пряники",
   "04.11.2012",
   5,
   9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Пряники",
   "05.11.2012",
   2,
   9

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   "Пряники",
   "06.11.2012",
   1,
   9
;
///////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1000
   Т1.Товар,
   Т1.ДатаЗаказов,
   Т1.КолвоЗаказовНаДату,
   Т1.ТекОстаток,
   СУММА(Т2.КолвоЗаказовНаДату) КАК НарастИтог

ПОМЕСТИТЬ ТаблНарастИтог

ИЗ
   ИсхТабл КАК Т1
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсхТабл КАК Т2
   ПО (Т1.Товар=Т2.Товар) И (Т1.ДатаЗаказов>=Т2.ДатаЗаказов)
   
СГРУППИРОВАТЬ ПО
   Т1.Товар,
   Т1.ДатаЗаказов,
   Т1.КолвоЗаказовНаДату,
   Т1.ТекОстаток
УПОРЯДОЧИТЬ ПО
   Т1.Товар,
   Т1.ДатаЗаказов
   
;
///////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Товар,
   КОЛИЧЕСТВО(ДатаЗаказов) КАК Текущего_Остатка_Хватит_На_Столько_Дней

ИЗ
   ТаблНарастИтог

ГДЕ
   ТекОстаток>=НарастИтог    

СГРУППИРОВАТЬ ПО
   Товар

УПОРЯДОЧИТЬ ПО
   Товар
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн