Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Не человеческие тормоза (число прочтений - 6448 )
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Не человеческие тормоза
19. Декабря 2008 :: 12:23
Печать  
Пвтаюсь получить оборот по контрагенту за год, тормозит не почеловечески, возможно ли это оптимизировать?
ар.УстановитьТекстовыйПараметр("Дата01",Дата01); 
     ар.УстановитьТекстовыйПараметр("Дата02",Дата02);             
     ар.УстановитьТекстовыйПараметр("ГрСчет",Счет);
     ар.УстановитьТекстовыйПараметр("Контрагент",Контрагент); 


     ТекстЗапроса="
|SELECT
|ОсновнойОборотыДтКт.СубконтоДт1 [СубконтоДт1 $Субконто]                  
|, ОсновнойОборотыДтКт.СубконтоДт1_вид                  
|, ОсновнойОборотыДтКт.СубконтоДт2 [СубконтоДт2 $Субконто]                  
|, ОсновнойОборотыДтКт.СубконтоДт2_вид
|, SUM(ОсновнойОборотыДтКт.СуммаОборот)      AS Оплата      
|FROM $БИОборотыДтКт.Основной(:Дата01, :Дата02 ~,,,(СчетДт=:ГрСчет),,,,(СубконтоДт1 =:Контрагент)) AS ОсновнойОборотыДтКт
|GROUP BY
| ОсновнойОборотыДтКт.СубконтоДт1
|,ОсновнойОборотыДтКт.СубконтоДт1_вид      
|, ОсновнойОборотыДтКт.СубконтоДт2
|,ОсновнойОборотыДтКт.СубконтоДт2_вид
|";                  
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не человеческие тормоза
Ответ #1 - 19. Декабря 2008 :: 12:54
Печать  
Для начала:
|FROM $БИОборотыДтКт.Основной(:Дата01, :Дата02 ~,,,
|            (СчетДт=:ГрСчет),
|            (Субконто1, Субконто2),,
|            БезСубконто,
|            (СубконтоДт1 =:Контрагент)) AS ОсновнойОборотыДтКт


И напомни, у тебя в конфигурации разделитель учёта определён?
  

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


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #2 - 19. Декабря 2008 :: 12:55
Печать  
Разделителя нет.
     
|FROM $БИОборотыДтКт.Основной(:Дата01, :Дата02 ~,,,(СчетДт=:ГрСчет),(Контрагенты, Договоры),,БезСубконто,(СубконтоДт1 =:Контрагент)) AS ОсновнойОборотыДтКт

не помогло. Плачущий
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не человеческие тормоза
Ответ #3 - 19. Декабря 2008 :: 13:03
Печать  
А вообще на данный момент в классе нет ВТ, эффективно решающей твою задачу. Прямой запрос к _1SBKTTL тебя спасёт.
  

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


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #4 - 19. Декабря 2008 :: 13:07
Печать  
Не подскажите, где описание полей _1SBKTTL взять.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не человеческие тормоза
Ответ #5 - 19. Декабря 2008 :: 13:12
Печать  
Я обычно ищу на 1csql.ru и каждый раз забываю добавить в избранное.  Ужас

Запрос могу набросать, если напишешь, оборотные или нет виды субконто (Контрагенты, Договоры) и если период состоит из целых кварталов.
  

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


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #6 - 19. Декабря 2008 :: 13:19
Печать  
Проблема в том, что запрос нужен с начала года по текущую дату, т.е. если это будет начало следующего года, то может быть даже неполный месяц.
Не совсем понял, что значит оборотные виды, во всяком случае галка снята со значения "только обороты" у обоих субконто.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Не человеческие тормоза
Ответ #7 - 19. Декабря 2008 :: 13:41
Печать  
Ну смотри:

ар.УложитьСписокОбъектов(ГрСчет, "#ГрСчет", "Основной");

Код
Выбрать все
SELECT SC1 [СубконтоДт2 $Субконто]
	, VSC1 СубконтоДт2_вид
	, Sum(ObDt1 + ObDt2 + ObDt3) Оплата
FROM _1SBKTTL (nolock)
WHERE ([Date] = '20080101')
	AND (Kind = 1)
	AND (AccId In (SELECT val FROM #ГрСчет))
	AND (SC0 = :Контрагент)
GROUP BY SC1
	, VSC1 



Так получается оплата за первый квартал 2008 года ([Date] хранит дату начала квартала).
За первый месяц можно получить, оставив ObDt1, за последний, соответственно, ObDt3.
Хвосты за неполный месяц нужно посчитать по _1SENTRY и объединить результаты (UNION ALL). Для этого можно использовать БИДвиженияССубконто или БИОборотыДтКт.
  

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


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #8 - 22. Декабря 2008 :: 07:18
Печать  
Для таблицы _1SENTRY корректно ли так сравнивать даты?
Left(DATE_TIME_DOCID,8) BETWEEN :Дата01 AND :Дата02~
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Не человеческие тормоза
Ответ #9 - 22. Декабря 2008 :: 07:35
Печать  
RuporAbsurda писал(а) 22. Декабря 2008 :: 07:18:
Для таблицы _1SENTRY корректно ли так сравнивать даты?
Left(DATE_TIME_DOCID,8) BETWEEN :Дата01 AND :Дата02~

Что то кажется мне что так ты в индекс не попадешь
  
Наверх
ICQ  
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #10 - 22. Декабря 2008 :: 07:43
Печать  
Вообще то сейчас путем эксперимента получилось, но все равно тормозит ужасно, притом, что запрос с начала месяца по текущую дату, т.е. всего за 22 дня. Не знаю что и делать. Плачущий
Запрос вроде правильный:
|SELECT
|Sum(Sum_) as Сумма
|FROM _1SENTRY (nolock)
|WHERE 
|(Left(DATE_TIME_DOCID,8 ) BETWEEN :Дата01 AND :Дата02~ )
|      AND (ACTIVE='')
|      AND (AccDTId In (SELECT val FROM #ГрСчет))
|      AND (DTSC0 = :Контрагент)
  
Наверх
 
IP записан
 
GEORG
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 43
Зарегистрирован: 15. Мая 2008
Re: Не человеческие тормоза
Ответ #11 - 22. Декабря 2008 :: 07:59
Печать  
Если
CAST(LEFT(Date_Time_IDDoc, 8) as DateTime)
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #12 - 22. Декабря 2008 :: 08:02
Печать  
Syntax error converting datetime from character string
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Не человеческие тормоза
Ответ #13 - 22. Декабря 2008 :: 08:14
Печать  
Попробуй так:

Код
Выбрать все
|SELECT
|Sum(Sum_) as Сумма
|FROM _1SENTRY (nolock)
|WHERE
|(DATE_TIME_DOCID BETWEEN :Дата01 AND :Дата02 + 'ZZZZZZZZZZZZZZZ'  )
|	AND (ACTIVE='')
|	AND (AccDTId In (SELECT val FROM #ГрСчет))
|	AND (DTSC0 = :Контрагент)

 

  
Наверх
ICQ  
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не человеческие тормоза
Ответ #14 - 22. Декабря 2008 :: 08:25
Печать  
Так ровно в 8 раз быстрее. А в чем секрет?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать