Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: производительность запроса продажи по дням

Я
   perkos
 
25.12.12 - 06:46
ТекстЗапроса = 
    "//{{ЗАПРОС(Продажи)
 
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Номенклатура = Регистр.Продажи.Номенклатура.ТекущийЭлемент;
   //|Фирма = Регистр.Продажи.Фирма.ТекущийЭлемент;
 
    |Склад = Регистр.Продажи.Склад.ТекущийЭлемент;
    |Количество = Регистр.Продажи.Количество;
    |ПродСтоимостьРуб = Регистр.Продажи.ПродСтоимостьРуб;
    |Функция КоличествоСумма = Сумма(Количество);
    |Функция ПродСтоимостьРубСумма = Сумма(ПродСтоимостьРуб);
    |Группировка День;
    |Группировка Номенклатура;
   //|Группировка Фирма;
 
   //|Группировка Склад без групп;
 
    |Условие(Номенклатура в СписокТоваров);
    |Условие(Склад в СписокСкладов);
    |//}}ЗАПРОС
 
    ;

база на mssql запрос выполняется довольно долго даже за неделю более 60 секунд, а мне бы еще этот отчет не помешало делать для разных наборов складов

есть какойнить совет?
 
 
   Андрей_Андреич
 
1 - 25.12.12 - 07:05
прямые запросы и 1С++
   Mikeware
 
2 - 25.12.12 - 07:13
   1Сергей
 
3 - 25.12.12 - 07:22
убери .ТекущийЭлемент во всём запросе
   perkos
 
4 - 25.12.12 - 07:28
(2) это че за зло?
   perkos
 
5 - 25.12.12 - 07:29
(3) а что так?
   dk
 
6 - 25.12.12 - 07:32
В СписокТоваров и СписокСкладов сколько элементов?
попробуй по 1 складу и 1 товару ну и (3)
   Морозов Александр
 
7 - 25.12.12 - 07:32
выключи скл...
   1Сергей
 
8 - 25.12.12 - 07:32
(5) а нахрена они там нужны? тормозов мало?
   dk
 
9 - 25.12.12 - 07:33
еще есть волшебные слова "Без Итогов;" )
   Mikeware
 
10 - 25.12.12 - 07:38
(4) почему "зло"?
сводный анализ продаж.
порядка 20 разрезов, 5 видов итогов. строится в онлайне за месяц порядка 1.5 минут (это около 40 тысяч документов продаж), и дальше крутится-фильтруется в любом виде.
 
 Рекламное место пустует
   perkos
 
11 - 25.12.12 - 07:51
(9) надо итоги ради них запрос...
(6) надо по всем, в списке группы номенклатуры складов, что толку по одному, пробовал быстро.... врядли будет быстрее если я сперва сделаю запрос по списку товаров учавствующем в эти дни в продажах а потом чистый список в запрос суну

(10) ты по документам данные собираешь чтоли? вк?
   Mikeware
 
12 - 25.12.12 - 07:58
(11) почему "по документам"? из регистра продажи - ну и соответсвенно, реквизиты свойства номенклатуры, контрагентов, договоров... Просто количество документов - чтоб объем мог прикинуть...
   dk
 
13 - 25.12.12 - 08:09
Итоги можно потом на клиенте посчитать, хотя не факт что быстрее
А про кол-во элементов в фильтре я не просто так спросил, если их там больше сотни, то 1с начинает тупить (в скульной версии)
   Mikeware
 
14 - 25.12.12 - 08:17
(13) да прямым запросом дернуть, и все.
дольше обсуждать, нежели сделать.
делов ровно на 10 минут с чаем...
   ЧеловекДуши
 
15 - 25.12.12 - 08:24
>>> |Функция КоличествоСумма = Сумма(Количество);
    |Функция ПродСтоимостьРубСумма = Сумма(ПродСтоимостьРуб);

Народ, мне одному показалось этот текст запроса странный?
Учитывая, что автор работает с регистром :)
   ЧеловекДуши
 
16 - 25.12.12 - 08:24
+ Нет так же информации, какой это регистр, оборотный или остатков
   dk
 
17 - 25.12.12 - 08:25
(15) все верно оборотный регистр
   ЧеловекДуши
 
18 - 25.12.12 - 08:27
Тогда что автор хочет?
Если у него там большой оборот, т.е. торгуют спичками.
То все нормально, запросы от 1Свсегда долго играющие :)
...
Если автору нужна скорость, то ему нужно читать (1) до просветления :)
   perkos
 
19 - 25.12.12 - 08:28
(14) раз так просто набросай как начать
   Mikeware
 
20 - 25.12.12 - 08:28
(18) автор хочет, чтоб сделали за него...
   perkos
 
21 - 25.12.12 - 08:29
(18) тут дело не в спичках а в большом номенклатурном справочнике похоже.... продаж не так и много
   Mikeware
 
22 - 25.12.12 - 08:29
во! я ж говорил!
(19)начни с
SELECT
   ЧеловекДуши
 
23 - 25.12.12 - 08:33
(19)

Перем ЗапросSQL, ТекстЗапроса;
Перем Мета;
    
ТЗ_Результ=СоздатьОбъект("ТаблицаЗначений");
    
Мета=СоздатьОбъект("MetaDataWork");
    
 //ЗапросSQL = глУстановитьНаборЗаписей();
 
ЗапросSQL = 0;
ЗапросSQL = СоздатьОбъект("ODBCRecordSet"); 
ЗапросSQL.УстБД1С();  
    
Если глОтладкаSQL=1 Тогда
    ЗапросSQL.Отладка(1);
КонецЕсли;
    
ЗапросSQL.УстановитьТекстовыйПараметр("ВыбНачПериода",ВыбНачПериода);
ЗапросSQL.УстановитьТекстовыйПараметр("ВыбКонПериода",ВыбКонПериода);

ТекстЗапроса = "
|SELECT ";
|FROM $Справочник.Контрагенты AS Контр(NOLOCK) 
|LEFT OUTER JOIN $Регистр.АкцииНаЦены AS АЦ(NOLOCK) ON (Контр.ID = $АЦ.Контрагент)
|LEFT OUTER JOIN $Справочник.Номенклатура AS Товар(NOLOCK) ON ($АЦ.Номенклатура = Товар.ID)
|Where 
|    ( ($АЦ.НачалоАкции >= :ВыбНачПериода~~) and ($АЦ.КонецАкции <= :ВыбКонПериода~~)
|    or ($АЦ.НачалоАкции >= :ВыбНачПериода~~) and ($АЦ.НачалоАкции <= :ВыбКонПериода~~) 
|    or ($АЦ.КонецАкции >= :ВыбНачПериода~~) and ($АЦ.КонецАкции <= :ВыбКонПериода~~) )
|    And Товар.ID is not null 
|    And IsNull($АЦ.ТипЦены,:ПустойЭлемент) <> :ПустойЭлемент 
|    And IsNull($АЦ.Единица,:ПустойЭлемент) <> :ПустойЭлемент ";
ТекстЗапроса = ТекстЗапроса + "
|Group By
|    Матрица.Сети
|    ,Матрица.ЦенаС
|    ,Матрица.НачалоАкции
|    ,Матрица.КонецАкции
|    ,Матрица.ДокумАкции
|   ,Матрица.ПорядокДок
|
 //|Having 
 
//|    $АЦ.Цена <> 0
 //|
 
|Order By
|    Replace(Матрица.Контрагент + Матрица.ТипЦен + Матрица.Номенклатура,' ','%')
|    ,Матрица.ПорядокДок
|
|";

    Если ЗапросSQL.Подготовить(ТекстЗапроса) = 0 Тогда
        Сообщить(""+ЗапросSQL.GetLastError()+"
        |"+ТекстЗапроса, "!");
        Возврат ; 
    КонецЕсли; 
    
    Попытка
        ЗначСпс = ЗапросSQL.ВыполнитьИнструкцию(,ТЗ_Результ,1); 
    Исключение
        Сообщить("ВыполнитьИнструкцию: "+ОписаниеОшибки());
    КонецПопытки;
    
    Попытка
        ЗапросSQL.Закрыть();
    Исключение
        Сообщить("Закрыть SQL запрос: "+ОписаниеОшибки());
    КонецПопытки;
    
    Если ТЗ_Результ.КоличествоКолонок() = 0 Тогда
        Сообщить("Ошибка в запросе SQL! Запрос не выполнен! СформироватьSQLзапрос("+Строка(ЗначСпс)+")");
        Возврат;
    КонецЕсли;
   ЧеловекДуши
 
24 - 25.12.12 - 08:34
+ Текст самого запроса накидаешь сам :)
По аналогии, читать про 1С++ тут http://www.1cpp.ru/forum/YaBB.pl?board=general
   ЧеловекДуши
 
25 - 25.12.12 - 08:38
+(21)Если продаж не много, то ты походу вообще не разбираешься в объемах информации :)
...порой, все дело куда хуже... ДНК...
   perkos
 
26 - 25.12.12 - 09:01
а можно сделать чтобы по итогам шагалось типа

Пока Запрос.Группировка(1) = 1 Цикл
       // День
 
        
        тзПродаж.НоваяКолонка(БезРазделителей(Запрос.День),,,,Строка(Запрос.День));
        
        Склад = Запрос.Склад;
        Пока Запрос.Группировка(2) = 1 Цикл
           // Номенклатура
 
            Если СписокТоваров.НайтиЗначение(Запрос.Номенклатура)<>0 Тогда
.
.
.
   dk
 
27 - 25.12.12 - 09:04
выгрузи в Индексную таблицу, сгруппируй и потом через ИндТЗ.ТЗПотомки
   Mikeware
 
28 - 25.12.12 - 09:05
(27) бугага©
   dk
 
29 - 25.12.12 - 09:06
?
   Mikeware
 
30 - 25.12.12 - 09:08
(29)см (20), и последняя строчка в (25)
   perkos
 
31 - 25.12.12 - 09:12
ну вы и тролли(=
   МихаилМ
 
32 - 25.12.12 - 09:14
замените
|Группировка Номенклатура без упорябочивания;
   ЧеловекДуши
 
33 - 25.12.12 - 09:15
(29)Он к тому, что в (20), и последняя строчка в (25) :)
 
 
   ЧеловекДуши
 
34 - 25.12.12 - 09:17
(31)Тебе привели возможность написать прямой запрос в (23) (24)... Учись, познавай новое... Если не хочется, то твоя строчка в (25) :)
   perkos
 
35 - 25.12.12 - 09:17
(20) и (25) самое важное обратите внимание(=
   ЧеловекДуши
 
36 - 25.12.12 - 09:18
(35)Постигай тогда в (27)... там еще круче :)
   ЧеловекДуши
 
37 - 25.12.12 - 09:18
+ Думать нужно меньше
   perkos
 
38 - 26.12.12 - 06:55
http://www.1cpp.ru/forumfiles/Attachments/mod_002.zip

качественно разжеванное руководство
   perkos
 
39 - 26.12.12 - 12:37
|SELECT
    |Продажи.Период AS Период,    
    |Продажи.Номенклатура AS [Товар $Справочник.Номенклатура],
    |Продажи.Склад AS [Склад $Справочник.Склады],
    |SUM(Продажи.КоличествоОборот) AS Количество,
    |SUM(Продажи.ПродСтоимостьРубОборот) AS ПродСтоим
    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,,(Номенклатура,Склад),(Количество,ПродСтоимостьРуб)) AS Продажи
    |WHERE $Продажи.Склад IN (SELECT Val FROM #Группа))
    |GROUP BY 
    |Продажи.Период,
    |Продажи.Номенклатура,
    |Продажи.Склад
    |ORDER BY Продажи.Период,
    |Продажи.Склад,
    |Продажи.Номенклатура
    |";         

Meta name parser error: неизвестное метаимя или алиас "$Продажи"

а если без доллара делаю то пишет
ВыполнитьИнструкцию: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 25: Incorrect syntax near ')'.
Ошибка в запросе SQL! Запрос не выполнен! СформироватьSQLзапрос()

хелп
   Dolly_EV
 
40 - 26.12.12 - 13:28
(39)
   |SELECT
    |    Продажи.Период AS Период    
    |    ,Продажи.Номенклатура AS [Товар $Справочник.Номенклатура]
    |    ,Продажи.Склад AS [Склад $Справочник.Склады]
    |    ,SUM(Продажи.КоличествоОборот) AS Количество
    |    ,SUM(Продажи.ПродСтоимостьРубОборот) AS ПродСтоим
    |FROM
    |    $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,(Склад IN (SELECT Val FROM #Группа)),(Номенклатура,Склад),(Количество,ПродСтоимостьРуб)) AS Продажи
    |GROUP BY
    |    Продажи.Период,Продажи.Номенклатура,Продажи.Склад
    |ORDER BY Продажи.Период,Продажи.Склад,Продажи.Номенклатура";
   Dolly_EV
 
41 - 26.12.12 - 13:30
Ну а в твоем варианте - в строке WHERE в конце лишняя скобка ))) ну и "$" убрать
   Ёпрст
 
42 - 26.12.12 - 13:34
как бэ гроуп бай там не нужен вообще, ВТ и так свёрнута
   perkos
 
43 - 26.12.12 - 14:37
(42) да нет не сворачивает без груп бай...
2664 строк с груп бай
3002 без груп бай


далею так

    Перем ЗапросSQL, ТекстЗапроса;
    Перем Мета;
    
    ТЗ_Результ=СоздатьОбъект("ТаблицаЗначений");
    
    Мета=СоздатьОбъект("MetaDataWork");
    
   //ЗапросSQL = глУстановитьНаборЗаписей();
 
    
    ЗапросSQL = 0;
    ЗапросSQL = СоздатьОбъект("ODBCRecordSet"); 
    ЗапросSQL.УстБД1С();  
    
    ЗапросSQL.УстановитьТекстовыйПараметр("ВыбНачПериода",ВыбНачПериода);
    ЗапросSQL.УстановитьТекстовыйПараметр("ВыбКонПериода",ВыбКонПериода);
    
    СписокСкладов = СоздатьОбъект("СписокЗначений");
    тзСклады.Выгрузить(СписокСкладов,,,"Склад");
    ЗапросSQL.УложитьСписокОбъектов13(СписокСкладов, "#Группа");
 
    
    ТекстЗапроса = " 
    |SELECT
    |Продажи.Период AS Период,    
    |Продажи.Номенклатура AS [Товар $Справочник.Номенклатура],
    |SUM(Продажи.КоличествоОборот) AS Количество,
    |SUM(Продажи.ПродСтоимостьРубОборот) AS ПродСтоим
    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,Склад IN (SELECT Val FROM #Группа),(Номенклатура,Склад),(Количество,ПродСтоимостьРуб)) AS Продажи
    |GROUP BY Продажи.Период,Продажи.Номенклатура
    |ORDER BY Продажи.Период,Продажи.Номенклатура
    |";                                                               
    
    Если ЗапросSQL.Подготовить(ТекстЗапроса) = 0 Тогда
        Сообщить(""+ЗапросSQL.GetLastError()+"
        |"+ТекстЗапроса, "!");
        Возврат ТЗ_Результ;
    КонецЕсли; 
    
    Попытка
        ЗначСпс = ЗапросSQL.ВыполнитьИнструкцию(,ТЗ_Результ,1); 
    Исключение
        Сообщить("ВыполнитьИнструкцию: "+ОписаниеОшибки());
    КонецПопытки;
    
    Попытка
        ЗапросSQL.Закрыть();
    Исключение
        Сообщить("Закрыть SQL запрос: "+ОписаниеОшибки());
    КонецПопытки;
    
    Если ТЗ_Результ.КоличествоКолонок() = 0 Тогда
        Сообщить("Ошибка в запросе SQL! Запрос не выполнен! СформироватьSQLзапрос("+Строка(ЗначСпс)+")");
        Возврат ТЗ_Результ;
    КонецЕсли;
                               
    Сообщить(ТЗ_Результ.КоличествоСтрок());

    ТЗ_Результ.ВыбратьСтроку();
                   
    Возврат ТЗ_Результ;

с этим условием хоть внутри ВТ хоть во WHERE выборка пустая... хотя по (0) с тем же списком все выбирает...
   perkos
 
44 - 26.12.12 - 14:40
этот запрос без условия по складам и номенклатуре выполняется за 2 секунды, а 1с запрос за 140 секунд
   perkos
 
45 - 26.12.12 - 14:45
(41)
в статье acsent пример

Тот же пример, но по списку контрагентов:
ТекстЗапроса = "
|SELECT
|    Док.IDDoc as [Док $Документ.Реализация]
|FROM
|    $Документ.Реализация as Док
|WHERE
|    $Док.Контрагент IN (SELECT Val FROM #Группа)";
 
RS.УложитьСписокОбъектов13(Список, "#Группа");
   perkos
 
46 - 26.12.12 - 14:52
СписокСкладов = СоздатьОбъект("СписокЗначений");
    тзСклады.Выгрузить(СписокСкладов,,,"Склад");
    ЗапросSQL.УложитьСписокОбъектов13(СписокСкладов, "#Группа");
 
    
    ТекстЗапроса = " 
    |SELECT
    |Продажи.Период AS Период,    
    |Продажи.Номенклатура AS [Товар $Справочник.Номенклатура],
    |SUM(Продажи.КоличествоОборот) AS Количество,
    |SUM(Продажи.ПродСтоимостьРубОборот) AS ПродСтоим
    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,,(Номенклатура,Склад),(Количество,ПродСтоимостьРуб)) AS Продажи
    |WHERE $Продажи.Склад IN (SELECT Val FROM #Группа)
    |GROUP BY Продажи.Период,Продажи.Номенклатура
    |ORDER BY Продажи.Период,Продажи.Номенклатура
    |";

Meta name parser error: неизвестное метаимя или алиас "$Продажи"

почему? я думаю какраз в преобразовании дело, в списке моем 1с склады сравниваются с складами МССКЛ
   Dolly_EV
 
47 - 27.12.12 - 06:09
(46) в примере из статьи $Док - потому что это алиас реальной таблицы (Документ.Реализация), а у тебя Продажи - это алиас виртуальной таблицы, поэтому надо без $
в (39) у тебя таки в строке в ГДЕ в конце - лишняя скобка
и список складов вот так уложи:
ЗапросSQL.УложитьСписокОбъектов(СписокСкладов,"#Группа","ВидСправочникаСкладыКакУТебяНазывается")
   Dolly_EV
 
48 - 27.12.12 - 06:13
И если тебе в итоге не нужна группировка по "Склад" - выкини его из измерений ВТ, и не надо будет делать ГрупБай (поэтому у тебя и разное количество строк: без ГрупБай - Номенклатура, помноженная на колво Складов, с ГрупБай - только Номенклатура)
   perkos
 
49 - 27.12.12 - 06:17
угу уже попробовал укладывать с видом и без 13, работает... вот и надейся на руководства(=
 
 Рекламное место пустует
   perkos
 
50 - 27.12.12 - 06:26
вот такая красота получилась

    ТекстЗапроса = " 
    |SELECT
    |Продажи.Период AS Период,
    |Продажи.Номенклатура AS [Товар $Справочник.Номенклатура],
    |Продажи.КоличествоОборот AS Количество,
    |Продажи.ПродСтоимостьРубОборот AS ПродСтоим
    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,Склад IN (SELECT Val FROM #Группа),(Номенклатура),(Количество,ПродСтоимостьРуб)) AS Продажи
    |ORDER BY Продажи.Период,Продажи.Номенклатура
    |";                                                               

     СписокСкладов = СоздатьОбъект("СписокЗначений");
    тзСклады.Выгрузить(СписокСкладов,,,"Склад");
    ЗапросSQL.УложитьСписокОбъектов(СписокСкладов, "#Группа", "Склады");
   perkos
 
51 - 27.12.12 - 06:59
ТекстЗапроса = 
    "//{{ЗАПРОС(Продажи)
 
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |Склад = Регистр.Продажи.Склад;
    |Количество = Регистр.Продажи.Количество;
    |ПродСтоимостьРуб = Регистр.Продажи.ПродСтоимостьРуб;
    |Функция КоличествоСумма = Сумма(Количество);
    |Функция ПродСтоимостьРубСумма = Сумма(ПродСтоимостьРуб);
    |Группировка День;
    |Группировка Номенклатура;
    |Условие(Номенклатура в СписокТоваров);
    |Условие(Склад в СписокСкладов);
    |//}}ЗАПРОС
 
    ;    

146секунд
ТекстЗапроса = " 
    |SELECT
    |Продажи.Период AS Период,
    |Продажи.Номенклатура AS [Товар $Справочник.Номенклатура],
    |Продажи.КоличествоОборот AS Количество,
    |Продажи.ПродСтоимостьРубОборот AS ПродСтоим
    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,(Склад IN (SELECT Val FROM #СписокС)) AND (Номенклатура IN (SELECT Val FROM #СписокН)),(Номенклатура),(Количество,ПродСтоимостьРуб)) AS Продажи
    |ORDER BY Продажи.Период,Продажи.Номенклатура
    |";                                                               
    
    СписокТоваров = СоздатьОбъект("СписокЗначений");
    тзТовары.Выгрузить(СписокТоваров,,,"Товар");
    ЗапросSQL.УложитьСписокОбъектов(СписокТоваров, "#СписокН", "Номенклатура");
 
    
     СписокСкладов = СоздатьОбъект("СписокЗначений");
    тзСклады.Выгрузить(СписокСкладов,,,"Склад");
    ЗапросSQL.УложитьСписокОбъектов(СписокСкладов, "#СписокС", "Склады");
 

157 секунд

одбц проиграл(= проблема производительности в условии с "В" по номенклатуре(мой случай) нельзя им пользоватся впринципе, обрабатывать только после полной выборки....

без условия оба варианта работают одинаково быстро..
   perkos
 
52 - 27.12.12 - 07:14
я что то не так понимаю или всетаки голые запросы все же не эффективны без скрипта обработки результата?

курсоры в т-скл или циклы в 1с необходимы для нормальной производительности
   ЧеловекДуши
 
53 - 27.12.12 - 07:28
(52)Да... не понимаешь...
"РегистрОбороты" - создает вложенный запрос, и тут все зависит от производительности сервера SQL.
Так, как у тебя оборотный регистр, то лучше написать запрос к регистру самому и без подзапросов :)
   ЧеловекДуши
 
54 - 27.12.12 - 07:29
+ >>>     |Продажи.КоличествоОборот AS Количество,
    |Продажи.ПродСтоимостьРубОборот AS ПродСтоим

 
А где команда "Sum(<!>)" ?
   ЧеловекДуши
 
55 - 27.12.12 - 07:30
+ Он у тебя вообще выдал простыню :DDDDD
   ЧеловекДуши
 
56 - 27.12.12 - 07:32
+ Убери еще вот это 

|ORDER BY Продажи.Период,Продажи.Номенклатура

Зачем еще быстрее получится :)
   perkos
 
57 - 27.12.12 - 07:40
(55)

   |SELECT
    |Продажи.Период AS Период,
    |Продажи.Номенклатура AS [Товар $Справочник.Номенклатура],
   //|SUM(Продажи.КоличествоОборот) AS Количество,
 
   //|SUM(Продажи.ПродСтоимостьРубОборот) AS ПродСтоим
 
    |Продажи.КоличествоОборот AS Количество,
    |Продажи.ПродСтоимостьРубОборот AS ПродСтоим
 //    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,(Склад IN (SELECT Val FROM #СписокС)) AND (Номенклатура IN (SELECT Val FROM #СписокН)),(Номенклатура),(Количество,ПродСтоимостьРуб)) AS Продажи
 
    |FROM $РегистрОбороты.Продажи(:ВыбНачПериода,:ВыбКонПериода~,День,,Склад IN (SELECT Val FROM #СписокС),(Номенклатура),(Количество,ПродСтоимостьРуб)) AS Продажи
   //|GROUP BY Продажи.Период,Продажи.Номенклатура
 
    |ORDER BY Продажи.Период,Продажи.Номенклатура
    |"; 

количество строк одинаковое с sum и без, sum без групБай не пашет Column 'Продажи.Период' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

(56) да это не принципиально...
   dk
 
58 - 27.12.12 - 07:43
(54) мимо
(51)
попробуй
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |Склад = Регистр.Продажи.Склад;
    |Количество = Регистр.Продажи.Количество;
    |ПродСтоимостьРуб = Регистр.Продажи.ПродСтоимостьРуб;
    |Функция КоличествоСумма = Сумма(Количество);
    |Функция ПродСтоимостьРубСумма = Сумма(ПродСтоимостьРуб);
    |Без Итогов;
    |Группировка День;
    |Группировка Номенклатура;
    |Условие(Склад в СписокСкладов);
    |Условие(Номенклатура в СписокТоваров);
 

Скуль или дбф?
   ЧеловекДуши
 
59 - 27.12.12 - 07:44
Скуль у него
   ЧеловекДуши
 
60 - 27.12.12 - 07:45
(57)Паццак, это SQL, тут тебе дается мего механизм запросов, где нужно варьировать и оптимизировать самому :)
т.е. все зависит от твоей фантазии...
"Просто вы не умеете её готовить" (с)
   ЧеловекДуши
 
61 - 27.12.12 - 07:48
+(57)>>> да это не принципиально...

Не принципиально, ты еще и с ТЗ работать не умеешь?
Поди команду "Сортировать" не знаешь?
Да и как всегда делаешь все методом:

ТЗ.ВыбратьСтроки();
+ и т.д.

Так вот, этот метод мего тормозит при больших простынках :)
Так же, не забывай, 1С-ные запросы еще мего тормозят при 30-50-ти пользователях в одной БД. :)
   perkos
 
62 - 27.12.12 - 07:53
(61) а про выбрать строки итд действительно так и делаю, покажи как быстрее хотя это тоже принципиально не меняет производительность..

(60) ты о чем вапще? (54) мимо видишь? (61) сортировка не меняет время выполнения на 100 секунд как это делает отсутствие условия В или подзапрос...
человек не души уже....



(58) мне этот запрос без итогов не нужен... я номенклатуру быстро после запроса выбираю за секунду... это все копейки... просто нельзя совать условие В
   dk
 
63 - 27.12.12 - 07:56
я уже спрашивал сколько элементов ты в условие пихаешь?
может у тебя в ТЗ несколько тысяч строк
ну и свернуть фильтр не помешает
   dk
 
64 - 27.12.12 - 08:00
SELECT 
    ПродажиОбороты.Период Период
    , ПродажиОбороты.Товар [Товар $Справочник.Номенклатура]
    , ПродажиОбороты.КоличествоОборот
    , ПродажиОбороты.СуммаОборот
FROM $РегистрОбороты.Продажи(:НачДата,
        :КонДата~,
        День,,
        (Товар = :ВыбТовар),
        Товар,
        (Количество, Сумма)) AS ПродажиОбороты

работает без группировок
   perkos
 
65 - 27.12.12 - 08:02
(63) там много номенклатуры группами выбирается может и несколько тысяч,
свернуть фильтр - убрать условие, правильно понял?
(64) это зачем? тема иссякла кажется
   dk
 
66 - 27.12.12 - 08:03
свернуть фильтр, условие оставить
   perkos
 
67 - 27.12.12 - 08:10
фильтр == условие ??? что такое фильтр по твоему список номенклатуры? свернуть? я пробовал его уменьшать ставить в него только номенклатуру которая реально была продана за период выборки это не дает результатов... ты об этом?
   perkos
 
68 - 27.12.12 - 08:14
тут либо без ВТ делать запрос как говорит (53) что впринципе для меня сомнительно...

либо просто убрать это условие на список номенклатуры из запроса и добавить его на обработку результата.
   dk
 
69 - 27.12.12 - 08:19
СписокСкладов = СоздатьОбъект("СписокЗначений");
ВремТЗ = СоздатьОбъект("ТаблицаЗначений");
тзСклады.Выгрузить(ВремТЗ,,,"Склад");
ВремТЗ.Свернуть("Склад", "");
ВремТЗ.Выгрузить(СписокСкладов,,,"Склад");

и с товарами тоже самое
   perkos
 
70 - 27.12.12 - 09:09
пробовал я примерно так же, никаких задвоев в списке номенклатуры небыло проверял...



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует