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

  1  2  3  4  5
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Оптимизация запроса

v7: Оптимизация запроса
Я
   bananan
 
25.12.12 - 11:35
Когда я задал обрботку 10 дней он работал 00:05:59, когда я ему задал тужу обработку но в функции ПересчетВЯщики(ТМЦ, Количество) в первой же строке вызвал Возврат - он работал 00:03:34 (на 2 минуты и 25 секунд меньше). Т.е. именно функция ПересчетВЯщики() сильно тормозит. К подчиненному справочнику Справочник.ЕдИз надо как-то иначе обращаться (не в функции, в функции опять же циклы). Т.е. е справочнику Справочник.ЕдИз надообращатьс через Запрос строго через запрос, может выполнять для этого второй Запрос. Подскажите как это сделать?
 
 
   monsterZE
 
401 - 28.12.12 - 14:52
вот порвая ссылка в яндексе =)
 
Книга знаний: Эффективное использование MSSQL с помощью ВК 1C++
--
или адрес своего мыла тут напиши
   bananan
 
402 - 28.12.12 - 14:54
lostbananan@bigmir.net
   bananan
 
403 - 28.12.12 - 15:33
Помогите совсем неопытному...
|WHERE
|    $Док.Склад IN (SELECT Val FROM #Группа)";
 
RS.УложитьСписокОбъектов(ВыбГруппа, "#Группа", "Склады");
 
но у меня в запросе по поводу ТМЦ нет WHERE
   bananan
 
404 - 28.12.12 - 15:34
+(403) Полный текст запроса см. в (387)
   monsterZE
 
405 - 28.12.12 - 15:42
(403) так добавь..? =)
а лучше, наврное, добавить в твои подзапросы..
   bananan
 
406 - 28.12.12 - 15:45
Написал так:
   ТекстЗапроса = "                             
        |select         
        |   Жур.iddoc as [Док $Документ]
        |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
        |   ,Таб.Товар as [Товар $Справочник.ТМЦ] 
        |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
        |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
        |from
        |    (
        |      select
        |        $ДокС.ТМЦ as Товар
        |        ,ДокС.iddoc as Документ
        |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
        |     
        |      union all
        |
        |      select
        |        $ДокН.ТМЦ 
        |        ,ДокН.iddoc
        |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
        |    )as Таб
        |
        |inner join
        |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
        |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
        |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
        |      and Жур.Closed&1 = 1
        |left join (
        |             select  
        |                   max($Спр.Коэффициент) as Коэффициент
        |                    ,Спр.parentext as Владелец
        |             from $Справочник.ЕдИзм as Спр (nolock)
        |             where $Спр.Ед =:ВыбЕдиница
        |                   and $Спр.Коэффициент>0
        |                   and Спр.ismark=0
        |             group by Спр.parentext
        |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
        |
        |group by
        |    Жур.iddoc,Жур.iddocdef,Таб.Товар
        | HAVING Таб.Товар IN (SELECT Val From #Группа)";
 
. . .
Запр=СоздатьОбъект("ODBCRecordset");
    Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
    Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
    Запр.УложитьСписокОбъектов13(выбТМЦ, "#Группа");
 
    Нач3=ТекущееВремя();                        
    ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
Так он, запрос, ничего не находит. Понимаю ошибка в SQL (HAVING Таб.Товар IN (SELECT Val From #Группа)";)
А как иначе мне указать SQL что интересуют ТМЦ или Группы ТМЦ выбранная пользователем в окне выбора?
   bananan
 
407 - 28.12.12 - 15:47
(405) Так WHERE Таб.Товар = #Группа И где именно в тексте запроса это добавить?
   monsterZE
 
408 - 28.12.12 - 15:53
|from
        |    (
        |      select
        |        $ДокС.ТМЦ as Товар
        |        ,ДокС.iddoc as Документ
        |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
 
       |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
where Таб.Товар IN (SELECT Val From #Группа)
       |    
       |      union all
       |
        |      select
        |        $ДокН.ТМЦ 
        |        ,ДокН.iddoc
        |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
 
       |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
where Таб.Товар IN (SELECT Val From #Группа)
       |    )as Таб
   monsterZE
 
409 - 28.12.12 - 15:58
тока ессно никаких таб.товар, а  $ДокС.ТМЦ IN (SELECT Val From #Группа)
   bananan
 
410 - 28.12.12 - 15:59
Зделал так:
    |select         
        |   Жур.iddoc as [Док $Документ]
        |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
        |   ,Таб.Товар as [Товар $Справочник.ТМЦ] 
        |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
        |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
        |from
        |    (
        |      select
        |        $ДокС.ТМЦ as Товар
        |        ,ДокС.iddoc as Документ
        |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
        | WHERE Таб.Товар IN (SELECT VAL FROM #Группа)
        |      union all
        |
        |      select
        |        $ДокН.ТМЦ 
        |        ,ДокН.iddoc
        |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
        
        |    )as Таб
        |
        |inner join
        |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
        |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
        |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
        |      and Жур.Closed&1 = 1
        |left join (
        |             select  
        |                   max($Спр.Коэффициент) as Коэффициент
        |                    ,Спр.parentext as Владелец
        |             from $Справочник.ЕдИзм as Спр (nolock)
        |             where $Спр.Ед =:ВыбЕдиница
        |                   and $Спр.Коэффициент>0
        |                   and Спр.ismark=0
        |             group by Спр.parentext
        |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
        |
        |group by
        |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
Выдает:
The column prefix 'Таб' does not match with a table name or alias name used in the query
:(
 
 Рекламное место пустует
   monsterZE
 
411 - 28.12.12 - 16:00
(409) =) жош
   bananan
 
412 - 28.12.12 - 16:01
(411) Написал так:
| WHERE $ДокН.Товар IN (SELECT VAL FROM #Группа)
Выдает:
{\\SERVER12\VPKTEST$\EXTFORMS\ПРОДАЖА В ЯЩИКАХ 2.ERT(110)}: Meta name parser error: поле таблицы не найдено "$ДокС.Товар"
   monsterZE
 
413 - 28.12.12 - 16:02
(412) =) ты издеваешься?
   monsterZE
 
414 - 28.12.12 - 16:03
у тебя в документе в табличной части какое поле? вот его и подставляй.
   bananan
 
415 - 28.12.12 - 16:03
+(412) когда написал так:
| WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)
То запрос ничего не находит! :(:(
   bananan
 
416 - 28.12.12 - 16:07
Можете вере не там надо ставить?
Подный текст запроса:
ТекстЗапроса = "                             
        |select         
        |   Жур.iddoc as [Док $Документ]
        |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
        |   ,Таб.Товар as [Товар $Справочник.ТМЦ] 
        |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
        |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
        |from
        |    (
        |      select
        |        $ДокС.ТМЦ as Товар
        |        ,ДокС.iddoc as Документ
        |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
        | WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)
        |      union all
        |
        |      select
        |        $ДокН.ТМЦ 
        |        ,ДокН.iddoc
        |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
        | WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)
        |    )as Таб
        |
        |inner join
        |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
        |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
        |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
        |      and Жур.Closed&1 = 1
        |left join (
        |             select  
        |                   max($Спр.Коэффициент) as Коэффициент
        |                    ,Спр.parentext as Владелец
        |             from $Справочник.ЕдИзм as Спр (nolock)
        |             where $Спр.Ед =:ВыбЕдиница
        |                   and $Спр.Коэффициент>0
        |                   and Спр.ismark=0
        |             group by Спр.parentext
        |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
        |
        |group by
        |    Жур.iddoc,Жур.iddocdef,Таб.Товар";
   monsterZE
 
417 - 28.12.12 - 16:08
Запрос.УложитьСписокОбъектов(ВыбТовар, "#Группа","Товары");
   monsterZE
 
418 - 28.12.12 - 16:13
ВыбТовар элемент формы справочник.товары
   bananan
 
419 - 28.12.12 - 16:13
Выдает: Запр.УложитьСписокОбъектов(ВыбТМЦ, "#Группа","Товары");
 
{\\SERVER12\VPKTEST$\EXTFORMS\ПРОДАЖА В ЯЩИКАХ 2.ERT(108)}: Недопустимое значение третьего аргумента метода!
   monsterZE
 
420 - 28.12.12 - 16:14
и ты из своего суперзапроса, сделай сначала чтобы маленькие запросы работали.. просто отбери товар по группе с реквизита формы
   bananan
 
421 - 28.12.12 - 16:15
Все написал так  - работает
а написал так:Запр.УложитьСписокОбъектов(ВыбТМЦ, "#Группа","ТМЦ");
   monsterZE
 
422 - 28.12.12 - 16:16
@#$ я х^ею =) у тебя справочник не Товары видимо называется...
я же кусок даже из мануала запостил.
   monsterZE
 
423 - 28.12.12 - 16:16
(421) неможетбыть =)
   bananan
 
424 - 28.12.12 - 16:28
(423) Сам не верю :
   bananan
 
425 - 28.12.12 - 16:28
(423) Спасибо!
   bananan
 
426 - 03.01.13 - 15:55
Всем огромное спасибо за помощь и подсказки! Запрос таки работает, но возникла такая проблема. Если в списке ТМЦ не ничего не выбрать - то и запрос ничего не вернет, хотя за данный период продажи и были... :(
чтобы освежить тему показываю весь текст запроса:
|select        
        |   Жур.iddoc as [Док $Документ]
        |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
        |   ,Таб.Товар as [Товар $Справочник.ТМЦ] 
        |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
        |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
        |from
        |    (
        |      select
        |        $ДокС.ТМЦ as Товар
        |        ,ДокС.iddoc as Документ
        |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
        | WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)
        |      union all
        |
        |      select
        |        $ДокН.ТМЦ 
        |        ,ДокН.iddoc
        |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
        | WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)
        |    )as Таб
        |
        |inner join
        |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
        |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
        |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
        |      and Жур.Closed&1 = 1
        |left join (
        |             select  
        |                   max($Спр.Коэффициент) as Коэффициент
        |                    ,Спр.parentext as Владелец
        |             from $Справочник.ЕдИзм as Спр (nolock)
        |             where $Спр.Ед =:ВыбЕдиница
        |                   and $Спр.Коэффициент>0
        |                   and Спр.ismark=0
        |             group by Спр.parentext
        |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
        |
        |group by
        |    Жур.iddoc,Жур.iddocdef,Таб.Товар"
   bananan
 
427 - 03.01.13 - 15:58
+(426) Насколько я понимаю вся "загвоздака" здесь:
WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)
т.е. если ТМЦ из текущего документа не выбрано в списке - то оно и пропускается...
Но как здесь быть НЕ ЗНАЮ. подскажите
   bananan
 
428 - 03.01.13 - 16:03
+(426, 427) Но. если убрать WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа), то, естественно не будут выбираться товары выбранные пользовтелем в списке...
   Mikeware
 
429 - 03.01.13 - 16:05
(428) тебя еще не убили?
   bananan
 
430 - 03.01.13 - 16:06
+ Если не с помощью запроса, то текст запроса надо формировать в зависимости от отого есть ли выбранные ТМЦ, а через SQL это никак нельзя сделать?
   bananan
 
431 - 03.01.13 - 16:06
(429) Как видиш
   bananan
 
432 - 03.01.13 - 16:08
(429) Может ты чего подскажешь?
   bananan
 
433 - 03.01.13 - 16:17
+ К тому же, если не делать WHERE по выбраным ТМЦ, то по чему их делать?
 
 
   bananan
 
434 - 03.01.13 - 16:24
+(433) Тоесть если нет выбраных ТМЦ в списке выбора - WHERE совсем опустить?
   bananan
 
435 - 03.01.13 - 16:38
что-то все сегодня спят?
Предыдущие вопросы - решены мною, но как програмно определить выбрал ли что0либо пользователь в окне выбора?
   Mikeware
 
436 - 03.01.13 - 16:43
(431) а жаль.... пора бы... за нечитание документации
   Mikeware
 
437 - 03.01.13 - 16:45
(434) формируй текст запроса динамически.
   bananan
 
438 - 03.01.13 - 16:47
(437) Тоесть если 
Если ВыбТМЦ.РазмерСписка()<0 Тогда
       //запрос без ВЕРЫ
 
ИНАЧЕ 
               // Запрос с WHERE
 
КонецЕсли;
ТАк?
   bananan
 
439 - 03.01.13 - 16:47
(438) меньше 1
   Mikeware
 
440 - 03.01.13 - 16:53
(438)
Если ... тогда
ТекстЗапроса+="where всякая_херня";
конецЕсли
   bananan
 
441 - 03.01.13 - 16:59
(440)З Не понял что ты имел в виду, но сделал как в (438) - работает и работает так как надо
   monsterZE
 
442 - 03.01.13 - 17:50
(441) он имел ввиду, что текст запроса можно собирать по условиям, динамически. подозреваю, что ты скопировал весь текст запроса два раза =) с верой и без..
а можно обойтись одной строчкой
   Mikeware
 
443 - 03.01.13 - 17:51
(442) "не поможет..."©
   bananan
 
444 - 03.01.13 - 19:06
(442)-(443) Теперь скрипт у меня такой (код полностью даю):
//*******************************************
 
Процедура ПриОткрытии()
    НачДата = НачМесяца(ПолучитьДатуТА())+19;
    КонДата = ПолучитьДатуТА();
    Подробно=1; 
КонецПроцедуры

                 
Процедура Подч()  
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("НоваяТаблица");
    
    ТекстЗапроса = "
        |select    
        |   Жур.iddoc as [Док $Документ]
        |   ,Жур.iddocdef as [Док_вид $ВидДокумента]";
    Если Подробно=1 тогда
        ТекстЗапроса = ТекстЗапроса + "   ,Таб.Товар as [Товар $Справочник.ТМЦ]";
    КонецЕсли;                                                                    
    ТекстЗапроса = ТекстЗапроса + "
        |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
        |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
        |from
        |    (
        |      select
        |        $ДокС.ТМЦ as Товар
        |        ,ДокС.iddoc as Документ
        |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)";
    Если ВыбТМЦ.РазмерСписка()>0 ТОГДА
        ТекстЗапроса = ТекстЗапроса + "| WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)";
 
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + "
        |      union all
        |
        |      select
        |        $ДокН.ТМЦ 
        |        ,ДокН.iddoc
        |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
        |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)";
    Если ВыбТМЦ.РазмерСписка()>0 ТОГДА
            ТекстЗапроса = ТекстЗапроса + "| WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)";
 
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + "
        |    )as Таб
        |inner join
        |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
        |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
        |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
        |      and Жур.Closed&1 = 1
        |left join (
        |             select  
        |                   max($Спр.Коэффициент) as Коэффициент
        |                    ,Спр.parentext as Владелец
        |             from $Справочник.ЕдИзм as Спр (nolock)
        |             where $Спр.Ед =:ВыбЕдиница
        |                   and $Спр.Коэффициент>0
        |                   and Спр.ismark=0
        |             group by Спр.parentext
        |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
        |
        |group by ";
    Если Подробно=1 тогда
        ТекстЗапроса = ТекстЗапроса + " Жур.iddoc,Жур.iddocdef,Таб.Товар";    
    ИНАЧЕ
        ТекстЗапроса = ТекстЗапроса + " Жур.iddoc,Жур.iddocdef";
    КонецЕсли;                                                                    
    

    Запр=СоздатьОбъект("ODBCRecordset");
    Запр.Отладка();
    Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
    Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
    Запр.УложитьСписокОбъектов(ВыбТМЦ, "#Группа","ТМЦ");;                        
 
    ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
    Кон2=ТекущееВремя();
    Таб.ВывестиСекцию("Шапка");
    ТЗ.ВыбратьСтроки();                           

    ПечДок="";
    ТЗ.ВыбратьСтроки();      
    ДокЯщ = 0;
    Итог=0;           
    ВыведеноСтрокВДокументе=0;
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
          Если ПечДок<>ТЗ.Док Тогда
             Если 0<ВыведеноСтрокВДокументе Тогда
                 Таб.ВывестиСекцию("ПодвалДок"); 
             КонецЕсли;
             ПечДок = ТЗ.Док;
             Таб.ВывестиСекцию("Документ");
             ДокЯщ = 0;
             
             ВыведеноСтрокВДокументе=0;   

         КонецЕсли;   
             ВыведеноСтрокВДокументе=ВыведеноСтрокВДокументе+1;  
             ДокЯщ = ДокЯщ + ТЗ.КоличествоВЯщиках;
             Итог= Итог + ДокЯщ;

      Если Подробно=1 тогда
          Таб.ВывестиСекцию("Строка");
      КонецЕсли
    КонецЦикла;   
             Если 0<ВыведеноСтрокВДокументе Тогда
                 Таб.ВывестиСекцию("ПодвалДок"); 
             КонецЕсли;
     
 
    Таб.ВывестиСекцию("Итог");
      
    Кон=ТекущееВремя();
    
    Таб.Опции(0,0,Таб.ВысотаСекции("Шапка"),0);
    Таб.ТолькоПросмотр(1);
    Таб.Защита(0);
    Таб.Показать("Расход","");
КонецПроцедуры
 // ===============================
 
Процедура ВыбратьТМЦ(Реж)
    Перем Фрм;
    Перем Тек;
    Если ВыбТМЦ.РазмерСписка()>0 Тогда
        Тек=ВыбТМЦ.ПолучитьЗначение(ВыбТМЦ.ТекущаяСтрока());
    КонецЕсли;
    ОткрытьПодбор("Справочник.ТМЦ",,Фрм,Реж,Тек);
    Фрм.ВыборГруппы(1);
КонецПроцедуры

 // ===============================
 
Процедура ОбработкаПодбора(Выб)
    ВыбТМЦ.ДобавитьЗначение(Выб);
    ВыбТМЦ.ТекущаяСтрока(ВыбТМЦ.РазмерСписка());
КонецПроцедуры
   Mikeware
 
445 - 03.01.13 - 19:55
(444) подробно не смотрел, но на первый взгляд потянет...
хотя в школу бы, в 10 класс не помешало бы вернуться...
   wsxedc83
 
446 - 03.01.13 - 21:43
Прочитал тему - жесть.
   chelentano
 
447 - 04.01.13 - 09:51
(435) "Предыдущие вопросы - решены мною" - ага, тобою, точно
   Mikeware
 
448 - 04.01.13 - 10:06
(447)
В село по разбитой дороге вьезжает телега, загруженная углем, в которую запряжена старая тощая кляча...
в телеге на горе угля сидит мужичок...
и радостно кричит:
- Люди!!! Я вам уголь привез!!!
Кляча устало оборачивается:
- Ага, бл.., ТЫ привез...
©
   trad
 
449 - 04.01.13 - 11:11
(444)такое динамическое построение текста выглядит понятнее. Не так ли?

    ТекстЗапроса = "
    |select    
    |   Жур.iddoc as [Док $Документ]
    |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
    |    /*ПолеТовар*/
    |   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
    |   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
    |from
    |    (
    |      select
    |        $ДокС.ТМЦ as Товар
    |        ,ДокС.iddoc as Документ
    |        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
    |      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
    |      /*Условие1*/
    |      union all
    |
    |      select
    |        $ДокН.ТМЦ 
    |        ,ДокН.iddoc
    |        ,$ДокН.Кво*$ДокН.Коэффициент as Количество
    |      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
    |      /*Условие2*/
    |    )as Таб
    |
    |inner join
    |    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
    |      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
    |      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
    |      and Жур.Closed&1 = 1
    |left join (
    |             select  
    |                   max($Спр.Коэффициент) as Коэффициент
    |                    ,Спр.parentext as Владелец
    |             from $Справочник.ЕдИзм as Спр (nolock)
    |             where $Спр.Ед =:ВыбЕдиница
    |                   and $Спр.Коэффициент>0
    |                   and Спр.ismark=0
    |             group by Спр.parentext
    |           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
    |group by Жур.iddoc, Жур.iddocdef /*ГруппТовар*/
    |";
    Если Подробно=1 Тогда
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ПолеТовар*/", ",Таб.Товар as [Товар $Справочник.ТМЦ]");
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*ГруппТовар*/", ",Таб.Товар");
    КонецЕсли;
    Если ВыбТМЦ.РазмерСписка()>0 Тогда
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие1*/", "WHERE $ДокС.ТМЦ IN (SELECT VAL FROM #Группа)");
 
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "/*Условие2*/", "WHERE $ДокН.ТМЦ IN (SELECT VAL FROM #Группа)");
 
    КонецЕсли;
 
 Рекламное место пустует
   bananan
 
450 - 04.01.13 - 16:34
(449) Спасибо за совет/подсказку - я просто не знал что так можно...
  1  2  3  4  5

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