Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Можно ли оптимизировать запрос (число прочтений - 2718 )
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Можно ли оптимизировать запрос
16. Июля 2009 :: 12:48
Печать  
Есть такой запрос:
     ТЗ = СоздатьОбъект("ТаблицаЗначений");
     ЛокODBC = СоздатьОбъект("AccountsRecordset");
     ЛокODBC.УстановитьТекстовыйПараметр("ВыбФирма",ВыбФирма);
     ЛокODBC.УстановитьТекстовыйПараметр("ВыбСчет", ВыбСчет);
     ЛокODBC.УстановитьТекстовыйПараметр("НачДата", НачДата);
     ЛокODBC.УстановитьТекстовыйПараметр("КонДата", КонДата);
     
     ТекстЗапроса = "
     |SELECT Счет [Счет $Счет.Основной]
     |      , Субконто1 [Субконто1 $Субконто]
     |      , Субконто1_вид Субконто1_вид
     |      , Субконто2 [Субконто2 $Субконто]
     |      , Субконто2_вид Субконто2_вид
     |      , Субконто3 [Субконто3 $Субконто]
     |      , Субконто3_вид Субконто3_вид
     |      , СуммаОборотДт as ДО
     |      , КоличествоОборотДт as ДОК
     |      , СуммаОборотКт as КО
     |      , КоличествоОборотКт as КОК
     |FROM $БИОбороты.Основной(:НачДата, :КонДата ~,,,
     |            (Счет = :ВыбСчет),,
     |            (РазделительУчета = :ВыбФирма)
     |      ) БИОборотыОсновной
     |";
     
     локТЗ = СоздатьОбъект("ТаблицаЗначений");
     Если ЛокODBC.ВыполнитьИнструкцию(ТекстЗапроса,локТЗ, 1) = 0 Тогда
           Сообщить("Запрос не выполнен!", "!!!");
           Возврат;
     КонецЕсли;
     локТЗ.ВыбратьСтроку();
     локТЗ.Выгрузить(ТЗ);
     
     ЛокODBC.УстановитьТекстовыйПараметр("ВыбФирма",ВыбФирма);
     ЛокODBC.УстановитьТекстовыйПараметр("ВыбСчет", ВыбСчет);
     ЛокODBC.УстановитьТекстовыйПараметр("НачДата", НачДата);
     ТекстЗапроса = "
     |SELECT
     |   ОсновнойОстатки.Счет [Счет $Счет.Основной]
     |      , ОсновнойОстатки.Субконто1 [Субконто1 $Субконто]
     |      , ОсновнойОстатки.Субконто1_вид
     |      , ОсновнойОстатки.Субконто2 [Субконто2 $Субконто]
     |      , ОсновнойОстатки.Субконто2_вид
     |      , ОсновнойОстатки.Субконто3 [Субконто3 $Субконто]
     |      , ОсновнойОстатки.Субконто3_вид
     |      , ОсновнойОстатки.СуммаОстатокДт as СНД
     |      , ОсновнойОстатки.КоличествоОстатокДт as СНДК
     |      , ОсновнойОстатки.СуммаОстатокКт as СНК
     |      , ОсновнойОстатки.КоличествоОстатокКт as СНКК
     |FROM $БИОстатки.Основной(:НачДата,,
     |            (Счет = :ВыбСчет),,
     |            (РазделительУчета = :ВыбФирма)
     |) AS ОсновнойОстатки
     |";
     Если ЛокODBC.ВыполнитьИнструкцию(ТекстЗапроса,локТЗ, 1) = 0 Тогда
           Сообщить("Запрос не выполнен!", "!!!");
           Возврат;
     КонецЕсли;
     НачСтрТЗ = ТЗ.КоличествоСтрок();
     ТЗ.ВставитьКолонку("СНД",8,"Число");
     ТЗ.ВставитьКолонку("СНДК",9,"Число");
     ТЗ.ВставитьКолонку("СНК",10,"Число");
     ТЗ.ВставитьКолонку("СНКК",11,"Число");
     ТЗ.КоличествоСтрок(НачСтрТЗ+локТЗ.КоличествоСтрок());
     9,10,11");
     
     ЛокODBC.УстановитьТекстовыйПараметр("ВыбФирма",ВыбФирма);
     ЛокODBC.УстановитьТекстовыйПараметр("ВыбСчет", ВыбСчет);
     ЛокODBC.УстановитьТекстовыйПараметр("КонДата", КонДата+1);
     ТекстЗапроса = "
     |SELECT
     |   ОсновнойОстатки.Счет [Счет $Счет.Основной]
     |      , ОсновнойОстатки.Субконто1 [Субконто1 $Субконто]
     |      , ОсновнойОстатки.Субконто1_вид
     |      , ОсновнойОстатки.Субконто2 [Субконто2 $Субконто]
     |      , ОсновнойОстатки.Субконто2_вид
     |      , ОсновнойОстатки.Субконто3 [Субконто3 $Субконто]
     |      , ОсновнойОстатки.Субконто3_вид
     |      , ОсновнойОстатки.СуммаОстатокДт as СКД
     |      , ОсновнойОстатки.КоличествоОстатокДт as СКДК
     |      , ОсновнойОстатки.СуммаОстатокКт as СКК
     |      , ОсновнойОстатки.КоличествоОстатокКт as СККДК
     |FROM $БИОстатки.Основной(:КонДата,,
     |            (Счет = :ВыбСчет),,
     |            (РазделительУчета = :ВыбФирма)
     |) AS ОсновнойОстатки
     |";
     
     Если ЛокODBC.ВыполнитьИнструкцию(ТекстЗапроса,локТЗ, 1) = 0 Тогда
           Сообщить("Запрос не выполнен!", "!!!");
           Возврат;
     КонецЕсли;
     НачСтрТЗ = ТЗ.КоличествоСтрок();
     ТЗ.ВставитьКолонку("СКД",8,"Число");
     ТЗ.ВставитьКолонку("СКДК",9,"Число");
     ТЗ.ВставитьКолонку("СКК",10,"Число");
     ТЗ.ВставитьКолонку("СККК",11,"Число");
     ТЗ.КоличествоСтрок(НачСтрТЗ+локТЗ.КоличествоСтрок());
     9,10,11");
     
     ,СКДК,СКК,СККК");

можно ли его оптимизировать (объединить в один)?
  
Наверх
 
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #1 - 16. Июля 2009 :: 13:00
Печать  
в итоге нужно получить ТЗ с колонками СНД, СНК, ДО, КО, СКД и СКК.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли оптимизировать запрос
Ответ #2 - 16. Июля 2009 :: 13:08
Печать  
meanmachine писал(а) 16. Июля 2009 :: 12:48:
Если ЛокODBC.ВыполнитьИнструкцию(ТекстЗапроса,локТЗ, 1) = 0 Тогда

Это условие никогда не выполнится.

meanmachine писал(а) 16. Июля 2009 :: 13:00:
в итоге нужно получить ТЗ с колонками СНД, СНК, ДО, КО, СКД и СКК.

ВТ БИОстаткиОбороты - не вариант?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #3 - 16. Июля 2009 :: 13:22
Печать  
условие пишу по привычке - спасибо, учту в будущем.

наверное подойдет, попробую.
Можно не указывать периодичность при использовании БИОстаткиОбороты?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли оптимизировать запрос
Ответ #4 - 16. Июля 2009 :: 13:40
Печать  
meanmachine писал(а) 16. Июля 2009 :: 13:22:
Можно не указывать периодичность при использовании БИОстаткиОбороты?

Можно. Как и в ВТ БИОбороты, по умолчанию считается весь период.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #5 - 16. Июля 2009 :: 13:47
Печать  
если так
     |      FROM $БИОстаткиОбороты.Основной(:НачДата, :КонДата ~,
     |                  ,,,
     |                  Счет = :ВыбСчет,,

пишет ошибку - "Недопустимое имя столбца "Период""
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли оптимизировать запрос
Ответ #6 - 16. Июля 2009 :: 14:00
Печать  
Как и в ВТ БИОбороты, поле Период в этом случае отсутствует. Выбирать его не нужно.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #7 - 16. Июля 2009 :: 14:08
Печать  
может торможу уже...

пишу так:
     |      FROM $БИОстаткиОбороты.Основной(:НачДата, :КонДата ~,,,,
     |                  Счет = :ВыбСчет,,
     |                  РазделительУчета = :ВыбФирма) БИОстаткиОборотыОсновной
пишет ошибку: Недопустимое имя столбца "Период"
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли оптимизировать запрос
Ответ #8 - 16. Июля 2009 :: 14:10
Печать  
Весь запрос покажи.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #9 - 16. Июля 2009 :: 14:11
Печать  
     |            SELECT Период
     |            , Счет [Счет $Счет.Основной]
     |            , Субконто1 [Субконто1 $Субконто]
     |            , Субконто1_вид
     |            , Субконто2 [Субконто2 $Субконто]
     |            , Субконто2_вид
     |            , Субконто3 [Субконто3 $Субконто]
     |            , Субконто3_вид
     |            , СуммаНачальныйОстатокДт as СНД
     |            , КоличествоНачальныйОстатокДт as СНДК
     |            , СуммаНачальныйОстатокКт as СНК
     |            , КоличествоНачальныйОстатокКт as СНКК
     |            , СуммаОборотДТ as ДО
     |            , КоличествоОборотДТ as ДОК
     |            , СуммаОборотКТ as КО
     |            , КоличествоОборотКТ as КОК
     |            , СуммаКонечныйОстатокДт as СКД
     |            , КоличествоКонечныйОстатокДт as СКДК
     |            , СуммаКонечныйОстатокКт as СКК
     |            , СуммаКонечныйОстатокКт as СККК
     |      FROM $БИОстаткиОбороты.Основной(:НачДата, :КонДата ~,,,,
     |                  Счет = :ВыбСчет,,
     |                  РазделительУчета = :ВыбФирма) БИОстаткиОборотыОсновной
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли оптимизировать запрос
Ответ #10 - 16. Июля 2009 :: 14:13
Печать  
meanmachine писал(а) 16. Июля 2009 :: 14:11:
     |            SELECT Период <- это лишнее
     |            , Счет [Счет $Счет.Основной]
...

  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #11 - 16. Июля 2009 :: 14:16
Печать  
СПАСИБО!!! получилось

еще вопросик: у меня в базе ведется учет по 27 разделителях учета. Приходится выполнять 27 раз запрос, а можно выполнить запрос 1-н раз с группировкой по разделителю?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли оптимизировать запрос
Ответ #12 - 16. Июля 2009 :: 14:24
Печать  
Можно.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
meanmachine
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 12
Зарегистрирован: 09. Июля 2009
Re: Можно ли оптимизировать запрос
Ответ #13 - 16. Июля 2009 :: 14:41
Печать  
попробую...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать