Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Запрос по проводкам (число прочтений - 4085 )
Levsha
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 01. Марта 2011
Запрос по проводкам
01. Марта 2011 :: 08:48
Печать  
Подскажите с запросом пожалуйста
запрос следующего вида
|SELECT Проводки.DOCID [Документ $Документ]
     |      , Журнал.IDDocDef as Документ_вид
     |      , Проводки.ACCDTID [ДтСчет $Счет.Основной]
     |      , Проводки.SUM_ Сумма
     |      , Проводки.AMOUNT Количество
     |      , Проводки.DATE_TIME_DOCID ДатаВремяИдДок
     |      , Проводки.DTSC0 [ДтСубконто1 $Субконто]
     |      , Проводки.VDTSC0 ДтСубконто1_вид
     |FROM _1SENTRY AS Проводки
     |      INNER JOIN _1SJOURN AS Журнал ON            Проводки.DOCID = Журнал.IDDOC AND Проводки.DATE_TIME_DOCID = Журнал.DATE_TIME_IDDOC
|WHERE (Журнал.IDDocDef = '13083') or  (Журнал.IDDocDef = '255')
     |";
запрос отбирает проводки по документам поступление материалов и документам операция. Как наложить условие что бы отбор был по дебету в группе счета 10, и по конкретному материалу??? Подскажите пожалуйста
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос по проводкам
Ответ #1 - 01. Марта 2011 :: 09:04
Печать  
условие на ACCDTID и на  DTSC0
  
Наверх
 
IP записан
 
Levsha
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 01. Марта 2011
Re: Запрос по проводкам
Ответ #2 - 01. Марта 2011 :: 09:26
Печать  
У меня с синтаксисом проблемы к условию
добавил
and (Проводка.DTSC0 = :Элемент) and (Проводка.ACCDTID like '10%')
запрос.установитьтекстовыйпармемтр("Элемент",материал)

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по проводкам
Ответ #3 - 01. Марта 2011 :: 09:38
Печать  
Проводка.ACCDTID in (select val from #счет10)

запрос.уложитьсписокобъектов(счетпокоду("10"), "#счет10", "названиепланасчетов");
  

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


1C++ rocks!

Сообщений: 6
Зарегистрирован: 01. Марта 2011
Re: Запрос по проводкам
Ответ #4 - 01. Марта 2011 :: 09:49
Печать  
Гениально berezdetsky! Спасибо огромное все получилось.
  
Наверх
 
IP записан
 
Levsha
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 6
Зарегистрирован: 01. Марта 2011
Re: Запрос по проводкам
Ответ #5 - 01. Марта 2011 :: 11:47
Печать  
А можно как то оптимизировать запрос? а то по сравнению с этим

|Период с ДатаНач по (ТекущаяДата());
     |Без итогов;
     |ОбрабатыватьОперации Включенные;
     |Док = Операция.ТекущийДокумент;
     |Счет = Операция.Дебет.Счет;
     |Материалы = Операция.Дебет.Материалы;
     |Количество = Операция.Количество;
     |Сумма = Операция.Сумма;
     |Группировка Док;
     |Группировка Количество;
     |Условие(Материалы = Мат);
     |Условие ((Док.Вид() = ПМ) или (Док.Вид() = Опер));
     |";





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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по проводкам
Ответ #6 - 01. Марта 2011 :: 12:22
Печать  
Levsha писал(а) 01. Марта 2011 :: 11:47:
|Группировка Количество;

Озадачен

Сколько в конфигурации планов счетов? Разделитель учёта определён?
  

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


1C++ rocks!

Сообщений: 6
Зарегистрирован: 01. Марта 2011
Re: Запрос по проводкам
Ответ #7 - 01. Марта 2011 :: 13:00
Печать  
План счетов один - основной. Разделителя учета нет, это бухия обычная
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по проводкам
Ответ #8 - 01. Марта 2011 :: 14:04
Печать  
Если нет сложных проводок, попробуй так:
Код
Выбрать все
SELECT Проводки.DOCID [Документ $Документ]
	, Журнал.IDDocDef as Документ_вид
	, Проводки.ACCDTID [ДтСчет $Счет.Основной]
	, Проводки.SUM_ Сумма
	, Проводки.AMOUNT Количество
	, Журнал.DATE_TIME_IDDOC ДатаВремяИдДок
FROM _1SJOURN AS Журнал With (NOLOCK)
	LEFT JOIN _1SENTRY AS Проводки With (NOLOCK, INDEX=ACCDTID) ON Проводки.DATE_TIME_DOCID = Журнал.DATE_TIME_IDDOC
WHERE (Журнал.IDDocDef IN ($ВидДокумента.ПоступлениеМатериалов, $ВидДокумента.Операция))
	AND (Журнал.DATE_TIME_IDDOC > :ДатаНач)
	AND (Проводки.DATE_TIME_DOCID > :ДатаНач)
	AND (Проводки.ACCDTID IN (select val from #счет10))
	AND (Проводки.PROVKIND = '') AND (Проводки.ACTIVE = '')
	AND (Проводки.DTSC0 = :Элемент) 



или так:
Код
Выбрать все
SELECT Проводки.DOCID [Документ $Документ]
	, Журнал.IDDocDef as Документ_вид
	, Проводки.ACCDTID [ДтСчет $Счет.Основной]
	, Проводки.SUM_ Сумма
	, Проводки.AMOUNT Количество
	, Журнал.DATE_TIME_IDDOC ДатаВремяИдДок
FROM _1SJOURN AS Журнал With (NOLOCK)
	INNER JOIN _1SENTRY AS Проводки With (NOLOCK) ON Проводки.DATE_TIME_DOCID = Журнал.DATE_TIME_IDDOC
WHERE (Журнал.IDDocDef IN ($ВидДокумента.ПоступлениеМатериалов, $ВидДокумента.Операция))
	AND (Журнал.DATE_TIME_IDDOC > :ДатаНач)
	AND (Проводки.DATE_TIME_DOCID > :ДатаНач)
	AND (Проводки.ACCDTID IN (select val from #счет10))
	AND (Проводки.PROVKIND = '') AND (Проводки.ACTIVE = '')
	AND (Проводки.DTSC0 = :Элемент) 

  

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


1C++ rocks!

Сообщений: 6
Зарегистрирован: 01. Марта 2011
Re: Запрос по проводкам
Ответ #9 - 01. Марта 2011 :: 14:43
Печать  
Еще раз спасибо berezdetsky. Прироста скорости к сожалению практически не дало. Ваш второй вариант With (NOLOCK) заметно быстрее работает, нежели первый With (NOLOCK, INDEX=ACCDTID).
Скорость обработки доков поступления материалов по материалу в изначальном варианте  33 материала в минуту, во втором вашем варианте 35 материалов в минуту, а первый ваш вариант 25 материалов в минуту. А у меня их 14 тыщ. Благо что процедура парктически разовая. Спасибо вам еще раз.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по проводкам
Ответ #10 - 01. Марта 2011 :: 15:26
Печать  
Там запрос слишком простой для того, чтобы получить существенно бóльшую скорость. Прирост быстродействия можно получить, если переписать алгоритм так, чтобы получать данные по всем материалам одним запросом. Не меняя алгоритм можно получить несколько меньший (но заметный) прирост, если использовать подготовленные запросы или включить RPCMode.

На всякий случай: УложитьСписокОбъектов достаточно выполнить один раз, этого не нужно делать для каждого материала.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать