Помогите правильно составить запрос

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Доброе время суток.

Не могу сделать запрос. Заранее спасибо

В документе есть табличная часть в неё товары которые входят в разные групп.
Я их все упорядочил определил суммы групп на который взят товар в документе
пример
канцелярии - 100р
Прасходников 1500р

И все это дело записал в ТЗ

теперь не могу сообразить как теперь сделать что бы брать наименование группы из ТЗ и подставлять в запрос в часть условия и что бы по регистру(обороты) выдовал сумму.

вот как делаю

ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с (НачКвартала(ТекущаяДата()));
|Наименование = Регистр.рег_групп_тов.группа_товара.Наименование;
|сумма = Регистр.рег_групп_тов.сумма;
|Функция суммаСумма = Сумма(сумма);
|Группировка Наименование без упорядочивания;
|Условие(Наименование = строка(ТабЗнач.ГруппаТовараДок));
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#2
1. Зачем фигачить запросы в цикле?
2. В ТЗ вставляйте не наименования групп, а сами группы. Потом выгрузите колонку с группами в список значений и условие формируйте по списку значений.
Код:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с (НачКвартала(ТекущаяДата()));
|ГруппаТовара = Регистр.рег_групп_тов.группа_товара;
|сумма = Регистр.рег_групп_тов.сумма;
|Функция суммаСумма = Сумма(сумма);
|Группировка ГруппаТовара упорядочить по ГруппаТовара.Наименование;
|Условие(ГруппаТовара в СписокГрупп);
|"//}}ЗАПРОС
 
G

Guest

#3
1.у меня в табличной части может несколько товаров из разных групп и мне их надо подсчитать потому что надо контролировать суммы по группам товара
2. в регистр пишится группа и сумма по группе. А зачем в цикле сначало что бы брал первое наименование группы из ТЗ проверял по условию потом брал второе и тд.

Большое спасибо твой скриптик очень помог (натолкнул на правильную мысль)
Во как сделал

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с (НачКвартала(ТекущаяДата()));
|Наименование = Регистр.рег_групп_тов.группа_товара;
|сумма = Регистр.рег_групп_тов.сумма;
|Функция суммаСумма = Сумма(сумма);
|Группировка Наименование без упорядочить;
|Условие(Наименование = ТабЗнач.ГруппаТовараДок);
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#4
Мать моя женщина... А если в документе будет 300 товаров? А если еще и пользователей будет по 50 человек. Сервак, спасайся, запросы атакуют!
 
E
#6
Если честно, изначально вопроса твоего не понял...либо я тугой, либо ты объясняешь не совсем понятно.

Но составленый запрос в цикле ТЗ это конечно круто!
 
G

Guest

#8
то есть вы предлогаете сделапть все с помошью СЗ
Думаете будет быстрей работать
 
K
#9
в отладчике есть такая штука как замер производительности, сделайте два варианта и проверьте :rolleyes:
 

vbs

Well-known member
18.02.2007
1 708
1
#12
практика без теории слепа, теория без практики беспредметна (с)
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#13
А на пракике лично проверяете?
Ну разумеется. Но в данном случае можно и не проверять. Особенно, если знать, что происходит с запросом на сервере, поймете, что выборка данных одним запросом всегда кошерней, нежели кидать в цикле запросы и получать порциями. С одной оговоркой - следует учитывать размер запроса и количество возвращаемых данных.