Имя: Пароль:
1C
1С v8
Помогите оптимизировать запрос
0 antihacker
 
02.10.18
11:43
Всем привет !

Вот работающий запрос. Но мне кажется его можно сократить. Но не вижу как. Есть идеи ?

ВЫБРАТЬ ПЕРВЫЕ 1
ИмпортФорма127Акт.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ИмпортФорма127АктПосРег
ИЗ
РегистрСведений.ИмпортФорма127Акт.СрезПоследних
(&ПериодОТ,  Бюджет В (&вхБюджет)) КАК ИмпортФорма127Акт  
УПОРЯДОЧИТЬ ПО
Период УБЫВ
;
ВЫБРАТЬ
Ф127.НомерРаздела КАК НомерРаздела,
Ф127.Поступление КАК Поступление,    
Ф127.УтвержденныйБюджет    

ПОМЕСТИТЬ ВТ_ИмпортФорма127
ИЗ      
ВТ_ИмпортФорма127АктПосРег КАК ВТ_ИмпортФорма127АктПосРег         
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмпортФорма127Акт КАК Ф127
ПО ВТ_ИмпортФорма127АктПосРег.Регистратор = Ф127.Регистратор

;
ВЫБРАТЬ
ВЫБОР КОГДА ВТ_ИмпортФорма127.НомерРаздела = "I"
      ТОГДА 1
      
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "II"
      ТОГДА 2
        
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "III" И  НЕ ВТ_ИмпортФорма127.Поступление
      ТОГДА 3
        
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "III" И  ВТ_ИмпортФорма127.Поступление
      ТОГДА 4
        
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "IV"  И  НЕ ВТ_ИмпортФорма127.Поступление
      ТОГДА 5    
        
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "IV"  И  ВТ_ИмпортФорма127.Поступление
      ТОГДА 6    
        
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "VI"  И  НЕ ВТ_ИмпортФорма127.Поступление
      ТОГДА 7    
        
      КОГДА ВТ_ИмпортФорма127.НомерРаздела = "VI"  И  ВТ_ИмпортФорма127.Поступление
      ТОГДА 8                
КОНЕЦ КАК ПорядокСтрок,
      
ВТ_ИмпортФорма127.НомерРаздела КАК НомерРаздела,
ВТ_ИмпортФорма127.Поступление КАК Поступление,
СУММА(ВТ_ИмпортФорма127.УтвержденныйБюджет) КАК УтвержденныйБюджет127,
0 КАК УтвержденныйБюджет

ПОМЕСТИТЬ ВТ_Итоговый127

ИЗ  ВТ_ИмпортФорма127

СГРУППИРОВАТЬ ПО
ВТ_ИмпортФорма127.НомерРаздела,
ВТ_ИмпортФорма127.Поступление  


;

ВЫБРАТЬ
ВТ_Итоговый127.ПорядокСтрок,
ВТ_Итоговый127.УтвержденныйБюджет127,
0 КАК УтвержденныйБюджет

ПОМЕСТИТЬ ВТ_ГотовыйИмпорт127

ИЗ  ВТ_Итоговый127

;
ВЫБРАТЬ
    1 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    СУММА(ППоБФПоПоступлениям.СуммаЯнварь
    +  ППоБФПоПоступлениям.СуммаФевраль
    +  ППоБФПоПоступлениям.СуммаМарт
    +  ППоБФПоПоступлениям.СуммаАпрель
    +  ППоБФПоПоступлениям.СуммаМай
    +  ППоБФПоПоступлениям.СуммаИюнь
    +  ППоБФПоПоступлениям.СуммаИюль
    +  ППоБФПоПоступлениям.СуммаАвгуст
    +  ППоБФПоПоступлениям.СуммаСентябрь
    +  ППоБФПоПоступлениям.СуммаОктябрь
    +  ППоБФПоПоступлениям.СуммаНоябрь
    +  ППоБФПоПоступлениям.СуммаДекабрь
    ) КАК УтвержденныйБюджет
    
ПОМЕСТИТЬ ВТ_ГотовыйОрганизация
    
ИЗ  
         РегистрНакопления.ПланПоБюджетуФинансированияПоПоступлениям

   КАК ППоБФПоПоступлениям  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоПоступлениям)
  
   И   ППоБФПоПоступлениям.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Бюджет В (&вхБюджет)      
      
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоОбязательствамНаПериод.СуммаЯнварь
    +  ППоБФПоОбязательствамНаПериод.СуммаФевраль
    +  ППоБФПоОбязательствамНаПериод.СуммаМарт
    +  ППоБФПоОбязательствамНаПериод.СуммаАпрель
    +  ППоБФПоОбязательствамНаПериод.СуммаМай
    +  ППоБФПоОбязательствамНаПериод.СуммаИюнь
    +  ППоБФПоОбязательствамНаПериод.СуммаИюль
    +  ППоБФПоОбязательствамНаПериод.СуммаАвгуст
    +  ППоБФПоОбязательствамНаПериод.СуммаСентябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаОктябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаНоябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоОбязательствам

   КАК ППоБФПоОбязательствамНаПериод  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоРасходам)
  
   И   ППоБФПоОбязательствамНаПериод.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Бюджет В (&вхБюджет)      

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

ВЫБРАТЬ
    3 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоОбязательствамНаПериод.СуммаЯнварь
    +  ППоБФПоОбязательствамНаПериод.СуммаФевраль
    +  ППоБФПоОбязательствамНаПериод.СуммаМарт
    +  ППоБФПоОбязательствамНаПериод.СуммаАпрель
    +  ППоБФПоОбязательствамНаПериод.СуммаМай
    +  ППоБФПоОбязательствамНаПериод.СуммаИюнь
    +  ППоБФПоОбязательствамНаПериод.СуммаИюль
    +  ППоБФПоОбязательствамНаПериод.СуммаАвгуст
    +  ППоБФПоОбязательствамНаПериод.СуммаСентябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаОктябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаНоябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоОбязательствам

   КАК ППоБФПоОбязательствамНаПериод  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоРасходам)
  
   И   ППоБФПоОбязательствамНаПериод.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Бюджет В (&вхБюджет)      
   И   ППоБФПоОбязательствамНаПериод.КлассификацияРасходов.ФКР В (&вхСписокФКР3)


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

ВЫБРАТЬ
    4 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоПоступлениям.СуммаЯнварь
    +  ППоБФПоПоступлениям.СуммаФевраль
    +  ППоБФПоПоступлениям.СуммаМарт
    +  ППоБФПоПоступлениям.СуммаАпрель
    +  ППоБФПоПоступлениям.СуммаМай
    +  ППоБФПоПоступлениям.СуммаИюнь
    +  ППоБФПоПоступлениям.СуммаИюль
    +  ППоБФПоПоступлениям.СуммаАвгуст
    +  ППоБФПоПоступлениям.СуммаСентябрь
    +  ППоБФПоПоступлениям.СуммаОктябрь
    +  ППоБФПоПоступлениям.СуммаНоябрь
    +  ППоБФПоПоступлениям.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоПоступлениям

   КАК ППоБФПоПоступлениям  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоПоступлениям)
  
   И   ППоБФПоПоступлениям.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Бюджет В (&вхБюджет)  
   И   ППоБФПоПоступлениям.КлассификацияПоступлений.ПодклассПоступления В (&вхСписокПодклассПоступления4)

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

ВЫБРАТЬ
    5 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоОбязательствамНаПериод.СуммаЯнварь
    +  ППоБФПоОбязательствамНаПериод.СуммаФевраль
    +  ППоБФПоОбязательствамНаПериод.СуммаМарт
    +  ППоБФПоОбязательствамНаПериод.СуммаАпрель
    +  ППоБФПоОбязательствамНаПериод.СуммаМай
    +  ППоБФПоОбязательствамНаПериод.СуммаИюнь
    +  ППоБФПоОбязательствамНаПериод.СуммаИюль
    +  ППоБФПоОбязательствамНаПериод.СуммаАвгуст
    +  ППоБФПоОбязательствамНаПериод.СуммаСентябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаОктябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаНоябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоОбязательствам

   КАК ППоБФПоОбязательствамНаПериод  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоРасходам)
  
   И   ППоБФПоОбязательствамНаПериод.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Бюджет В (&вхБюджет)      
   И   ППоБФПоОбязательствамНаПериод.КлассификацияРасходов.ФКР В (&вхСписокФКР5)
  
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    6 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоПоступлениям.СуммаЯнварь
    +  ППоБФПоПоступлениям.СуммаФевраль
    +  ППоБФПоПоступлениям.СуммаМарт
    +  ППоБФПоПоступлениям.СуммаАпрель
    +  ППоБФПоПоступлениям.СуммаМай
    +  ППоБФПоПоступлениям.СуммаИюнь
    +  ППоБФПоПоступлениям.СуммаИюль
    +  ППоБФПоПоступлениям.СуммаАвгуст
    +  ППоБФПоПоступлениям.СуммаСентябрь
    +  ППоБФПоПоступлениям.СуммаОктябрь
    +  ППоБФПоПоступлениям.СуммаНоябрь
    +  ППоБФПоПоступлениям.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоПоступлениям

   КАК ППоБФПоПоступлениям  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоПоступлениям)
  
   И   ППоБФПоПоступлениям.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Бюджет В (&вхБюджет)  
   И   ППоБФПоПоступлениям.КлассификацияПоступлений.ПодклассПоступления В (&вхСписокПодклассПоступления6)
  
  
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    7 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоПоступлениям.СуммаЯнварь
    +  ППоБФПоПоступлениям.СуммаФевраль
    +  ППоБФПоПоступлениям.СуммаМарт
    +  ППоБФПоПоступлениям.СуммаАпрель
    +  ППоБФПоПоступлениям.СуммаМай
    +  ППоБФПоПоступлениям.СуммаИюнь
    +  ППоБФПоПоступлениям.СуммаИюль
    +  ППоБФПоПоступлениям.СуммаАвгуст
    +  ППоБФПоПоступлениям.СуммаСентябрь
    +  ППоБФПоПоступлениям.СуммаОктябрь
    +  ППоБФПоПоступлениям.СуммаНоябрь
    +  ППоБФПоПоступлениям.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоПоступлениям

   КАК ППоБФПоПоступлениям  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоПоступлениям)
  
   И   ППоБФПоПоступлениям.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоПоступлениям.Бюджет В (&вхБюджет)  
   И   ППоБФПоПоступлениям.КлассификацияПоступлений.ПодклассПоступления В (&вхСписокПодклассПоступления7)
  

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

ВЫБРАТЬ
    8 КАК ПорядокСтрок,
    0 КАК УтвержденныйБюджет127,
    
    СУММА(ППоБФПоОбязательствамНаПериод.СуммаЯнварь
    +  ППоБФПоОбязательствамНаПериод.СуммаФевраль
    +  ППоБФПоОбязательствамНаПериод.СуммаМарт
    +  ППоБФПоОбязательствамНаПериод.СуммаАпрель
    +  ППоБФПоОбязательствамНаПериод.СуммаМай
    +  ППоБФПоОбязательствамНаПериод.СуммаИюнь
    +  ППоБФПоОбязательствамНаПериод.СуммаИюль
    +  ППоБФПоОбязательствамНаПериод.СуммаАвгуст
    +  ППоБФПоОбязательствамНаПериод.СуммаСентябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаОктябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаНоябрь
    +  ППоБФПоОбязательствамНаПериод.СуммаДекабрь
    ) КАК УтвержденныйБюджет
ИЗ
         РегистрНакопления.ПланПоБюджетуФинансированияПоОбязательствам

   КАК ППоБФПоОбязательствамНаПериод  ГДЕ ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.УтвержденныйПланФинансированияПоРасходам)
  
   И   ППоБФПоОбязательствамНаПериод.Период >= НАЧАЛОПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Период <= КОНЕЦПЕРИОДА(&ПериодОТ, ГОД)
   И   ППоБФПоОбязательствамНаПериод.Бюджет В (&вхБюджет)      
   И   ППоБФПоОбязательствамНаПериод.КлассификацияРасходов.ФКР В (&вхСписокФКР8)
;

ВЫБРАТЬ
ВТ_ГотовыйИмпорт127.ПорядокСтрок,
ВТ_ГотовыйИмпорт127.УтвержденныйБюджет127,    
ВТ_ГотовыйОрганизация.УтвержденныйБюджет

ИЗ      
ВТ_ГотовыйИмпорт127 КАК ВТ_ГотовыйИмпорт127         
ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ГотовыйОрганизация  КАК ВТ_ГотовыйОрганизация
ПО ВТ_ГотовыйИмпорт127.ПорядокСтрок = ВТ_ГотовыйОрганизация.ПорядокСтрок

УПОРЯДОЧИТЬ ПО   ВТ_ГотовыйИмпорт127.ПорядокСтрок
1 unregistered
 
02.10.18
12:28
ИМХО, проще написать заново, чем разобраться в этом бреду. Такое ощущение, что автор запроса - бухгалтер или финик (знатоков арифметики), а не программист (предположительно знаток математики и алгоритмов). Весь текст запроса - изложение на тему "какую цифирь откуда взять и куда положить" без относительно системной логики расчета.
2 DSSS
 
02.10.18
12:31
использовать короткие псевдонимы таблиц
3 antihacker
 
02.10.18
12:31
Не обязательно разобраться в деталях. Хотя бы примерную идею. А так все мы любим писать по своему )
4 singlych
 
02.10.18
12:44
Ну к примеру РегистрНакопления.ПланПоБюджетуФинансированияПоОбязательствам с полем УтвержденныйБюджет и отборами по периоду и бюджету пихнуть в ВТ, а из нее уже выбирать по регистратору и классификации.
5 unregistered
 
02.10.18
12:53
(3) > все мы любим писать по своему

Суть не в оформлении. Суть в том, как собираются данные.
В (0) данные собираются через *опу. У автора нет системного понимания сути регистров вообще и конкретных в частности - для чего они были сделаны авторами конфигурации и как там храниться информация.
А по оформлению приведённый текст приводит к кровотечению из глаз при просмотре дольше трёх минут.