Сайт Малько Александра.

1С и иже с ней (Бухгалтерский учет , Управленческий учет , Налоговый учет и т.д) .

Раздел находится в разработке. Здесь будут размещены интересные и полезные данные , касающиеся данной темы .

 

Для начала помещу здесь маленькую задачку . Когда смотришь на решение - все просто. Но когда делаешь , то тонкости есть.

Итак , задачка , которую можно решить в консоли запросов 1с.

 

Есть следующая таблица:

Товар     Дата        КолвоЗаказанногоНаДату ТекОстаток  
========================================================  
Торты     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 
====================

Если кто-то захочет попробовать решить в консоли данную задачку , вот подготовленные данные для консоли , чтобы самому не набирать (а далее , после этого запроса , привожу запрос-ответ, который решает данную задачку).

Запрос для формирования исходных данных.

==========================================================     

ВЫБРАТЬ

"Торты" КАК ТОВАР,

"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

=========================================================

 

 

А вот конечный запрос-ответ , решающий данную проблему:

 

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

 


Используются технологии uCoz