Имя: Пароль:
1C
Юмор
Выбор документов с заданными товарами
🠗 (длинная ветка 18.04.2013 16:17)
0 bananan
 
11.04.13
14:34
Увы в прошлой ветке, мне так и не удалось решить данную задачу.
Ёпрст посоветовал: "типа того:

select t1.tovar,t1.client from table as t1

where exists (select val from #tmptable where
val not in (select t2.tovar from table as t2 where t1.client =t2.client)"
Я написал такой Текст запроса:
   ТекстЗапроса = "
       | select    
         |    Таб.Товар as [Товар $Справочник.ТМЦ]
         |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as [Доставка $Справочник.Доставка]
         |    , $Доставка.Адрес as Адрес
         |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
         |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as [Клиент $Справочник.Клиенты]
         |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная        
         |   Left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
         |   left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
       |   left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
       |   left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
         | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |  WHERE (Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)";
       Если ВыбТМЦ.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + "and exists (select from #СписокТМЦ where val not in (select t2.ТМЦ from Таб as t2 where t1.client=t2.client)";
       КонецЕсли
Не пропускает - ругается на message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'from'.
Ну и из совета Ёпрст я не понял что такое t1?
1 Ёпрст
 
11.04.13
14:34
Это абстрактный пример для таблички с 2-мя полями - клиентосом и товаром и списком с товаром.
2 Ёпрст
 
11.04.13
14:35
в твоём случае, table - это твой запрос, tovar - это твой ТМЦ из этого запроса, client - это твой Клиентос из запроса
3 In123
 
11.04.13
14:35
Што опять? Скока можно!
4 VladZ
 
11.04.13
14:37
select from #СписокТМЦ - что выбрать?
5 bananan
 
11.04.13
14:48
(3) Надо написать запрос. КОгда запрос будет работать как заказал клиент - тогда вопросов на форум не будет. А вот из-за таких реплик как твоя ветки и разростаются. Не спамь!
6 Wobland
 
11.04.13
14:51
бедный клиент...
7 vip67
 
11.04.13
14:51
(5) пиши - разрешаю!
8 vip67
 
11.04.13
14:53
Миколо - тобі ясно сказали - треба замість table підставити свою табличку і усьо буде в ажурі!
9 Анна_84
 
11.04.13
14:55
(8) думаете, так он поймет лучше, чем по-русски? :)
10 bananan
 
11.04.13
14:55
Хм, возникла такая идея в верхнем селекте считатьколичесвто тмц и выводить результат если это количество = выбранному юзером количеству ТМЦ.
Сейчас попробую. Если получится - покажу...
11 bananan
 
11.04.13
14:56
(9) А что я должен понять (3)(4) или (9)??!
12 ДенисЧ
 
11.04.13
14:56
Продолжение? Опять?
Люди, вам не надоело?
13 Анна_84
 
11.04.13
15:02
(12) нам - нет. у нас попкорна много ))
а вот как не надоело еще тем, кто помогает - не знаю. медальки им надо.
14 Ёпрст
 
11.04.13
15:11
На вот, развлекайся
   ТекстЗапроса = "
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная        
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "where  exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
       ТекстВася ="
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная        
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
15 Ёпрст
 
11.04.13
15:12
И не вздумай туда ручонками залезть и всё испортить
16 bananan
 
11.04.13
15:17
(15) Спасибо! Сейчас попробую... лазить туда не буду :)
17 Ёпрст
 
11.04.13
15:20
(12) не трогайте нашего падавана!
А то занятся иногда нечем.
18 bananan
 
11.04.13
15:21
(15) а у меня там еще проверка на выбраных агентов и клиентов... Ее так оставить как и было? А(14) вставить до:        Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов))";
       КонецЕсли;
       Если ВыбКлиент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)) ";
       КонецЕсли;
       ТекстЗапроса = ТекстЗапроса + "group by isnull($ДокШ.Агент, $ДокШН.Агент), isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар, $Доставка.Адрес, isnull($ДокШН.Доставка, $ДокШ.Доставка)
       | ORDER BY isnull($ДокШ.Агент, $ДокШН.Агент),isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар";    
??
19 Ёпрст
 
11.04.13
15:22
(18) её воткнуть надо в два места - в текст запроса и в Текст запросаВася
20 Ёпрст
 
11.04.13
15:23
ну и ордер бай выкинь - он уже есть и где надо и как надо
21 bananan
 
11.04.13
15:24
(20) Понял..., но... выдает:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'as'.
22 bananan
 
11.04.13
15:26
Пробывал я с коунтом поиграть добавил count(Таб.Товар) в select ну и в GroupBy - не пропускает....
И еще, можно ли в SQL определить сколько юзер выбрал ТМЦ?
23 bananan
 
11.04.13
15:28
(19)(20) Я твои коды вставил вместо своего ТекстаЗапроса ну и удалил    Если ВыбТМЦ.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + "and exists (select from #СписокТМЦ where val not in (select t2.ТМЦ from Таб as t2 where t1.client=t2.client))";
       КонецЕсли;
24 Ёпрст
 
11.04.13
15:34
ТекстЗапроса = "
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
       ТекстВася ="
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");
   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");
   КонецЕсли;
25 Ёпрст
 
11.04.13
15:37
а так, надо хотя бы во временную тз кидать результат запроса
или сте пользовать
26 Mikeware
 
11.04.13
15:45
Уже ту ветку добили... молодцы!
27 bananan
 
11.04.13
15:47
(24) Что - то ... опять таже ошибка.. может я неправильно делаю?
Показіваю код у меня:
ТекстЗапроса = "
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";

       ТекстВася ="
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

   КонецЕсли;
       Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов))";
       КонецЕсли;
       Если ВыбКлиент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)) ";
       КонецЕсли;
       ТекстЗапроса = ТекстЗапроса + "group by isnull($ДокШ.Агент, $ДокШН.Агент), isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар, $Доставка.Адрес, isnull($ДокШН.Доставка, $ДокШ.Доставка)
       | ORDER BY isnull($ДокШ.Агент, $ДокШН.Агент),isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар";    
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
28 bananan
 
11.04.13
15:48
(25) А что такое сте?
29 Ёпрст
 
11.04.13
15:50
(27) пилять..
вот это выкинь нахрен

   ТекстЗапроса = ТекстЗапроса + "group by isnull($ДокШ.Агент, $ДокШН.Агент), isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар, $Доставка.Адрес, isnull($ДокШН.Доставка, $ДокШ.Доставка)
       | ORDER BY isnull($ДокШ.Агент, $ДокШН.Агент),isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар";    
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
30 Ёпрст
 
11.04.13
15:51
оставь только
 Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
31 Ёпрст
 
11.04.13
15:57
(28) Common table expression (CTE)
32 Масянька
 
11.04.13
15:58
(31) Тебе в учителя надо :)))))
33 Ёпрст
 
11.04.13
15:59
(32) нельзя.. одни недоделанные ученики будут
34 Масянька
 
11.04.13
16:01
(33) Я тебе указку (металлическую, 150 см) подарю. И ученики будут ... шикарные... :)))
35 viktor_vv
 
11.04.13
16:04
(34) Без пальцев :), а код как набирать, носом :) ?
36 Масянька
 
11.04.13
16:07
(35) Ну, кто чем может. Можно подумать - в первый раз :)))
37 bananan
 
11.04.13
16:12
(29)(30)Странно оставил так:
Н (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

   КонецЕсли;
       Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов))";
       КонецЕсли;
       Если ВыбКлиент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)) ";
       КонецЕсли;
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
все-равно відает:
Incorrect syntax near the keyword 'as'.
38 bananan
 
11.04.13
16:13
(33) А по поводу учительства - ты и прада - подумай. И никакие недоделанные не будут!
39 Ёпрст
 
11.04.13
16:16
пиляяяяяяяяяяяяяяяяять...
убери к едрени фени свой код, оставь только мой +
Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
Запрос.УложитьСписокОбъектов(СписокКлиентов, ....
Запрос.УложитьСписокОбъектов(СписокАгентов, ....
40 Ёпрст
 
11.04.13
16:18
вот это вот выкини в первую очередь:

       Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов))";

       КонецЕсли;
       Если ВыбКлиент.РазмерСписка()>0 тогда
           ТекстЗапроса = ТекстЗапроса + " and (isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)) ";

       КонецЕсли;
41 Масянька
 
11.04.13
16:19
(40) Говорю же, УКАЗКУ подарю :))))))

PS Не психуй! Ты - сильно помогаешь. И за это тебе огромное НАИОГРОМНЕЙШЕЕ СПАСИБО!
42 Wobland
 
11.04.13
16:20
что, пришёл Ёпрст и зарубил очередную тысячу на корню? или у нас ещё есть шанс?
43 Ёпрст
 
11.04.13
16:58
Ну.. автору еще надо постичь курсоры хранимки..триггеры , но для начала, delete,truncate и drop
44 bananan
 
11.04.13
17:09
(40) Но там надо выбирать и по выбранным Агентам и Клиентам...
45 Wobland
 
11.04.13
17:11
(43) класс! про курсоры и триггеры не знаю. остаюсь ;)
46 bananan
 
11.04.13
17:11
+(44) Выкинул - рещультат тот же:
ncorrect syntax near the keyword 'as'.
47 Mikeware
 
11.04.13
17:26
(42) а почему "шанс"? шанс - это вероятность значительно ниже единицы. а вероятность того, что ветка дотянет до тысячи - единица.
48 Ёпрст
 
11.04.13
17:26
(46) ну кидай сюда то, что у тебя есть
49 Wobland
 
11.04.13
17:43
>шанс - это вероятность значительно ниже единицы
а не соглашусь. имхо шанс - вероятность строго (не включая границы) между 0 и 1. расхоже выражение "неплохой шанс"; по всей видимости в нём имеется в виду вероятность порядка нескольких десятых.
далее. P(дотянет до тысячи)=1. единица - это непременное наступление события. а ведь пророков среди нас нет. поэтому в контексте происходящего можно лишь говорить о величине, бесконечно приближающейся к единице, но всё-таки не равной ей...
50 Wobland
 
11.04.13
17:46
ну и плюс ко всему я просто не верю, что бананан (@Ёпрст?) не сможет решить заявленную задачу за тысячу постов ;)
51 bananan
 
11.04.13
17:51
(48) Весь код:
Процедура Сформировать()
   Запрос=СоздатьОбъект("ODBCRecordset");    
ТекстЗапроса = "
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";

       ТекстВася ="
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

   КонецЕсли;
   Сообщить(ТекстЗапроса);
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
   Запрос.УложитьСписокОбъектов(ВыбАгент, "#СписокАгентов","Агент");          
   Запрос.УложитьСписокОбъектов(ВыбКлиент, "#СписокКлиентов","Клиенты");          
   Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаС);  
   Запрос.УстановитьТекстовыйПараметр("КонДата", ДатаПо);  
   Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница", ВыбЕд);  
   //Запрос.Отладка(1);
   Сообщить(ТекстЗапроса);
52 bananan
 
11.04.13
17:51
(50) К стати, в прошлой ветке обсуждалось три запроса, а не один, так может быть и с этой...
53 Classic
 
11.04.13
17:53
(50)
Ага. Мне кажется, что он просто стебется.
Как можно не понять фразу "incorrect syntax near the keyword 'as'." и кинуть вопрос на форум?
Как можно взять готовый написанный Ёпрстом рабочий запрос и начинать его дописывать?
Это реально стеб
54 sapphire
 
11.04.13
17:53
(51) Долбобей, а в самом начале волшебныф скулеж
SELECT за тебя кто писать-то буде?
55 Wobland
 
11.04.13
17:53
(51) ну и какие мысли?
(53) ты новенький? он реально такой
56 Wobland
 
11.04.13
17:54
(54) гы! а я не заметил ;)
57 sapphire
 
11.04.13
17:54
ТекстЗапроса = "SELECT
58 Classic
 
11.04.13
17:54
(55)
Не, не новенький.
Просто таких тупых реально не бывает. Если человек тупой - он возьмет готовое и не будет трогать. А этот и тупит, и готовое корежит.
59 sapphire
 
11.04.13
17:55
(56) Уже привычно, что Долбобеюшко очепятки любит
60 sapphire
 
11.04.13
17:55
(58) Ему можно - у него образование соответствующее.
61 Wobland
 
11.04.13
17:55
(58) новенький в нашем фан-клубе поклонников бананана ;)
62 Wobland
 
11.04.13
17:56
(57) надеюсь, обе Е латинские ;))
63 sapphire
 
11.04.13
17:56
(61) тсс... Не спугни зверушку :)
64 Classic
 
11.04.13
17:57
(60)
Какое?
Неужели журналист?
65 sapphire
 
11.04.13
17:58
(64) Не.. Хореографическое. Говорит даже мол в Киеве...
66 Classic
 
11.04.13
17:59
(65)
Такое бывает?
Я думал это типа так, вечерком на танцы.
За это диплом дают???????
67 Classic
 
11.04.13
18:00
(0)
Лучше станцуй клиенту. Будет больше пользы
68 sapphire
 
11.04.13
18:00
(66) Типа да, типа танцор я так понел
69 Ёпрст
 
11.04.13
18:36
Странно, а у меня форум в дауне был всё это время..
70 bananan
 
11.04.13
18:38
(70) У меня он переодически сваливался....
71 sapphire
 
12.04.13
09:32
(70) см (54).
72 be-may
 
12.04.13
09:50
/*читаю уже которую ветку, правда по диагонали, и скажу я вам, что я в поклонницах Ёпрст-а.. Какая выдержка, какое терпение, какая крепкая нервная система..!!! педагогика много потеряла.. :) */
73 sapphire
 
12.04.13
10:25
(72) Точняк :)
/* я так, исключительно постебаться*/
74 bananan
 
12.04.13
10:26
Всем доброе утро!
Вопрос к Ёпрст: показываю все что у меня есть:
ТекстЗапроса = "
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";

       ТекстВася ="
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

   КонецЕсли;
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
   Запрос.УложитьСписокОбъектов(ВыбАгент, "#СписокАгентов","Агент");          
   Запрос.УложитьСписокОбъектов(ВыбКлиент, "#СписокКлиентов","Клиенты");          
   Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаС);  
   Запрос.УстановитьТекстовыйПараметр("КонДата", ДатаПо);  
   Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница", ВыбЕд);  
   //Запрос.Отладка(1);
   Сообщить(ТекстЗапроса);
Опять же ругается:
Server]Incorrect syntax near the keyword 'as'.
Я пока тсам так и не смог разобраться. Помоги, пожалуйста! и еще а зачем и к чему проверка
|where 1=1 and 2=2?
75 Wobland
 
12.04.13
10:26
(74) -> (71)
76 Wobland
 
12.04.13
10:27
(75) сторно, я не Ёпрст
77 Ёпрст
 
12.04.13
10:29
(74)

ТекстЗапроса = " select
78 Wobland
 
12.04.13
10:30
(77) а закрывающую кавычку куда дел? ;)
79 Ёпрст
 
12.04.13
10:30
>>>и еще а зачем и к чему проверка
|where 1=1 and 2=2?

чтоб потом, если надо , заменить 1=1 на это в тексте запроса:

Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");
80 bananan
 
12.04.13
10:36
(78)(79) Огромное спасибо!
81 bananan
 
12.04.13
10:42
+(80)Запустил - работает, но выдает все что - угодно,  ное не те ТМЦ которые выбраны в окне выбора! :(
82 sapphire
 
12.04.13
10:59
(81) Код покажи
83 sapphire
 
12.04.13
10:59
(81) Все должны угадать, что именно ты там заменил?
84 bananan
 
12.04.13
11:00
(82)(83)ТекстЗапроса = " SELECT
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";

       ТекстВася ="
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

   КонецЕсли;
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
   Запрос.УложитьСписокОбъектов(ВыбАгент, "#СписокАгентов","Агент");          
   Запрос.УложитьСписокОбъектов(ВыбКлиент, "#СписокКлиентов","Клиенты");          
   Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаС);  
   Запрос.УстановитьТекстовыйПараметр("КонДата", ДатаПо);  
   Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница", ВыбЕд);
85 sapphire
 
12.04.13
11:14
(84) Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))
-- Пусть автор объяснит тебе внятно КАК это работает
86 bananan
 
12.04.13
11:20
Ёпсрт! Если не трудно объясни мне пожалуста (85).
87 bananan
 
12.04.13
11:33
+(86) Когда из ) Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент)) убрал not - выдает уже те товары (не факт что именно все) но и плюс еще несколько товаров которых я не выбирал (похоже лишние товары находятся в той же группе, что и те товары, которые я выбрал в окне выбора...
88 Ёпрст
 
12.04.13
12:34
(81) нам отчюда не видно, что ты выбрал в окошке выбора ТМЦ.
89 Ёпрст
 
12.04.13
12:38
Ну а как работает - читай про разность множеств.

В мойм коде в выборке будут только те клиентосы, для которых есть все товары в твоём списке.
90 Ёпрст
 
12.04.13
12:47
для проверки, выбери в свой список 2 товара (не группу) и проверяй.
Ну и not in верни на место
91 bananan
 
15.04.13
11:05
(90) Сейчас not in  верну на место и проверю, а почему только два товара (больше можно)?
92 Ёпрст
 
15.04.13
11:09
(91)
Дяденька, а можно я с крыши спрыгну ?
Можно, но только один раз!
93 bananan
 
15.04.13
11:10
(92) Ну если тебе надо очень быстро добраться на улицу с сотого этажа, то можно
94 bananan
 
15.04.13
11:13
+(93) Сдела как ты и говорил not in вернул на место запустил с лвумя выбранными товарами - отработал вернул, но, опять же в первых 50 строка возвращенных НЕТ НИ ОДНОГО из двух выбраных товаров...
Ну если они там таки есть, - лишние товары можно убрать из таблицы значений 1М, а не SQL...
95 Ёпрст
 
15.04.13
11:46
(94) и какой запрос сейчас запущаешь ?
96 Ёпрст
 
15.04.13
11:46
и че такое 1м ?
97 Ёпрст
 
15.04.13
11:50
И вот так спробуй еще
//  ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
 ТекстЗапроса = ТекстЗапроса + "Where not exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
98 Ёпрст
 
15.04.13
11:50
//  ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
ТекстЗапроса = ТекстЗапроса + "Where not exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
99 bananan
 
15.04.13
12:05
(96) Сори за опечатку 1м - 1 написал так:
Если (ТбЗн.Товар=выбТмц.ПолучитьЗначение(1, "ТМЦ")) ИЛИ
            (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) ИЛИ
            (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) Тогда
               Таб.ВывестиСекцию("Документ");                            
ну и это не выводит невырабнные товары на печать...
А по поводу (97) и (98) - не понял
во первых в том коде что ты дал так и есть:
ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))", а во-вторых, не вижу разницы между тем что ты показал // заремаренным
и не заремаренным кодом и в-третих не вижу разницы между (97) и (98)
100 Ёпрст
 
15.04.13
12:06
(99)там две строки, замени ту что выше на ту, что ниже.
101 bananan
 
15.04.13
12:08
(100) Вижу что две стороки но они ОДИНАКОВЫЕ (за ислючением того что первая заремарена)...
102 Ёпрст
 
15.04.13
12:13
(101) хреново у тебя со зрением.
Копипасти нижнюю строку (та, что без //) к себе в код и наслаждайся
103 bananan
 
15.04.13
12:14
+(100) К ко всему прочему: запустил с двумя выбранными товарами - вернул правильный результат, запустил и доваил еще третий товар - результат вернулся тот-же, т.е. для трех выбраныых товаров - этот результат НЕПРАВИЛЬНЫЙ!!
104 Ёпрст
 
15.04.13
12:17
(103) ты (102) сделал, или нет ?
105 cw014
 
15.04.13
12:18
Ребят, отсыпьте попкорна, до магаза далеко бежать, боюсь пропустить что нибудь интересное )))))))))))))0
106 bananan
 
15.04.13
12:18
(104) Только что сделал (102) в результате до исправления с одинаковыми товарами он выдал 4 или 6 строк , после исправления - ниодной!!
107 Ёпрст
 
15.04.13
12:19
(106) ну и круто - значит, нет таких клиентосов, которые брали эти товары все.
108 bananan
 
15.04.13
12:21
(107) До испрвления - они были :)
109 bananan
 
15.04.13
12:22
+(106) Когда убрал один из выбраных товаров (оставил один выбраный товар) вернул результат и внем 10 строк (8 из которых - левые товары)...
110 Wobland
 
15.04.13
12:23
я ничего в запросе и задаче не понял, но почему-то верю Ёпрсту
111 bananan
 
15.04.13
12:23
+(109) Когда запустил запрос только со вторым товаром - тоже вернул результат... Так что последние изменения в коде - НЕПРАВИЛЬНЭЫЕ
112 bananan
 
15.04.13
12:24
(110) Ты во много ничего не понимаешь, Ёпрст я тоже верю, но - результат работы запроса - негативный...
113 ЧеловекДуши
 
15.04.13
12:31
(38) Будут, ты пример, он за тебя пишет. Но ты буксуешь даже тут на ровном месте :)
114 Ёпрст
 
15.04.13
12:31
(112) покажи весь свой код
115 ЧеловекДуши
 
15.04.13
12:32
(108) Ты иногда думай :)
116 bananan
 
15.04.13
12:32
(113) Тебе из   видней как я буксую
117 ЧеловекДуши
 
15.04.13
12:33
(116) Ага... Тебе даже на родном языке попытались написать совет, но ты и тут не понял :)
118 Mikeware
 
15.04.13
12:36
(105) Можешь даже неторопясь сходить. все равно новая серия будет.
"эта музыка будет вечной"©
119 Ёпрст
 
15.04.13
12:36
ладно, так еще тогда

ТекстЗапроса = ТекстЗапроса + "Where(Табличка.Товар in (select val from #СписокТМЦ)) and (not exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент)))";
120 Wobland
 
15.04.13
12:37
(118) если работодатель не заменит батарейки
121 bananan
 
15.04.13
12:53
(120) Тебе опять же - виднеее, но сейчас еслои выбирабю товари т1 и т2 - не выдает ниоднгой строки, если выбираю только т1 - выдает строки, если выбираю т2 - тоже выдает строки а вот когода и е2 и е1 - не выдает (причем в обоих члучаях клиенты - одни и те же)
122 Ёпрст
 
15.04.13
12:57
(121)

ты (119) видел, не ?
123 bananan
 
15.04.13
13:20
(122) Видел - поменял, проверяю (но - лишние (невырабные товары он все-равно выбирает))...
124 bananan
 
15.04.13
13:21
(+123) выбираю период - год, два товара - нет ни одной записи - это НЕВОЗМОЖНО...
125 Ёпрст
 
15.04.13
13:23
(124) если выбираешь один товар, есть ?
Если выбираешь другой, есть ?
Клиентос при этом, одинаковый ?
126 bananan
 
15.04.13
13:24
(125) Сейчас проверю по разным товарам просто период большщой задал...
127 bananan
 
15.04.13
13:31
+ Точно - НЕ РАБОТАЕТ проверял по разным товарам - ничего не ваыбирает, когда не задаю ниодного товара - тоже ничего не показівает, - т.е. ошибка в логике запроса... :( Абидна!
128 Ёпрст
 
15.04.13
13:50
(127) еще раз, сымаешь фильтр по товарам, смотришь результат запроса, видишь например, картину:


Клиентос  Товар

Вася        Яблоки
Вася        Сало
Вася        Горилка
Бананан     Сало
Бананан     Горилка

ставишь в Фильтр Сало
Должен получить на выходе
Вася        Сало
Бананан     Сало

ставишь в фильтр Сало,Горилка
должен получить на выходе
Вася        Сало
Вася        Горилка
Бананан     Сало
Бананан     Горилка

ставишь в фильтр Сало,Горилка,Яблоки, должне получить на выходе
Вася        Яблоки
Вася        Сало
Вася        Горилка

у тебя так, или нет ?

А так, нам отсюда не видно, что ты проверяешь и как
129 bananan
 
15.04.13
14:05
(127) Вроде я все правильно проверяю... т.е. если брать твои данніе если я ничего из товаров не вибрал - то запрос не вернет ни одной строки (а за єтот период продажи - были), если я веберу Горилка то он мне еще вернет и какието бутербробы и колбасу ...
130 Ёпрст
 
15.04.13
14:06
больше кода
131 Ёпрст
 
15.04.13
14:07
(129) мой код физически не может выдать товар, который не в списке.
132 bananan
 
15.04.13
14:08
Значит базируясь на прошлом - нужен такой запрос, который вибирает всех клиентов которые за заданный пеирод времени купили все из выбраных товаров...
Т.е. скажем выбраем всех клиентов которые купили товар1 - таблица 1
выбраем всех клиентов которые купили товар2 - таблица 2
выбраем всех клиентов которые купили товар3 - таблица 3
Далее выбираем записи из таблиц которые совпадают, т.е. в результате мы выбираем всех клиентов которые за заданный пеирод времени купили все из выбраных товаров...
133 bananan
 
15.04.13
14:09
(131) Не знаю, но какой резон мне тебе врать?
134 Ёпрст
 
15.04.13
14:16
(133) еще раз - больше кода.
Нам отсюда не видно твой текст запроса и ка ты его выполняешь
135 bananan
 
15.04.13
14:20
(133) Запрос по клиентах и товарах - пока отложил, есть запрос который вы мне помогали сделать за несколько прошлых веток - "ошибки" в ценах (три вида ошибки есть)... так вот в нем в результаты выдавали Приходную цену, а надо выдавать цену товара в документе. В табличной части тех документов есть поле ЦенаСНДС, добавил я в запрос и... (как всегда :() выдает:
Invalid column name 'ЦенаСНДС'.
Показываю текст запроса:
|SELECT
       |    Данные.IDDoc as [Документ $Документ]
       |,   Данные.IdDocDef as Документ_вид
       |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
       |,   Данные.lineno_ as НомерСтроки_
       |,   Данные.Автор as [Автор $Справочник.Сотрудники]
       |,   Данные.Клиент [Клиент $Справочник.Клиенты]        
       |,   Данные.ЦенаВДок                                                                              
       |,     ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2) as МинЦена  
       |,     ROUND(Данные.СуммаСНДС/Данные.Количество, 2) as ЦенаТовара
         |,   Данные.КаналСбыта as КаналСбыта
         |,     Данные.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
       |,   Данные.ИдентификаторИсторииЦены
       |,     cast((SELECT TOP 1 История.Value FROM _1SCONST История(NOLOCK) WHERE История.OBJID=Данные.ТМЦ AND История.ID=Данные.ИдентификаторИсторииЦены AND История.DATE<=Данные.ДатаДок ORDER BY История.DATE DESC) as numeric(10,2)) ЦенаДляКаналаСбытаВ
       |,   case Данные.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц
       |,   'має ціну нижчу за прихідну' as Ошибка                                                        
       |from (
       |   SELECT
       |       Жур.IDDoc as IDDoc
       |   ,   Жур.IdDocDef as IdDocDef
       |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
       |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
       |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
       |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС
       |   ,   isnull($ДокШН.Клиент, $ДокШ.Клиент) as Клиент          
       |    ,   isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |   ,   isnull($ДокШ.ТипЦен, $ДокШН.ТипЦен) ТипЦен        
       |   ,   isnull($ДокШ.Агент, $ДокШН.Агент) Агеннт  
       |   ,   isnull(ДокС.ЦенаСНДС, ДокН.ЦенаСНДС) ЦенаВДок
       |    ,   $КаналСбыта.КатегорияЦены as КатегорияЦены
       |,   case $КаналСбыта.КатегорияЦены  
       |          when $Перечисление.ТипыЦен.Категория1 then $ИсторияРеквизита.ТМЦ.Цена1
       |          when $Перечисление.ТипыЦен.Категория2 then $ИсторияРеквизита.ТМЦ.Цена2
       |          when $Перечисление.ТипыЦен.Категория3 then $ИсторияРеквизита.ТМЦ.Цена3
       |       when $Перечисление.ТипыЦен.Категория4 then $ИсторияРеквизита.ТМЦ.Цена4
       |       when $Перечисление.ТипыЦен.Категория5 then $ИсторияРеквизита.ТМЦ.Цена5
       |       when $Перечисление.ТипыЦен.Категория6 then $ИсторияРеквизита.ТМЦ.Цена6
       |       when $Перечисление.ТипыЦен.Категория7 then $ИсторияРеквизита.ТМЦ.Цена7
       |       when $Перечисление.ТипыЦен.Категория8 then $ИсторияРеквизита.ТМЦ.Цена8
       |       when $Перечисление.ТипыЦен.Категория9 then $ИсторияРеквизита.ТМЦ.Цена9
       |       ELSE '    ' END ИдентификаторИсторииЦены
       |   ,   КаналСбыта.id as КаналСбыта
       |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
       |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
       |   ,   $ОбщийРеквизит.Автор as Автор
       |    ,cast(left(Жур.date_time_iddoc, 8) as datetime) as ДатаДок
       |   FROM _1SJourn as Жур (nolock)
       |   left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
       |   left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
       |   left join $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
       |   left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
       |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
       |   left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       |   left join $Справочник.КаналыСбыта КаналСбыта (nolock) on КаналСбыта.id = $Доставка.КаналСбытаТТ
       |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН) ";
Что неправильно с полем ЦенаСЭНДС?
136 bananan
 
15.04.13
14:20
(134) По запросу клиенты/товары - позже...
137 Mikeware
 
15.04.13
14:20
бананан превзошел себя...
138 bananan
 
15.04.13
14:21
(137) и тебя тоже...
139 Dolly_EV
 
15.04.13
14:27
(135) $ДокС.ЦенаСНДС, $ДокН.ЦенаСНДС

доллАр забыл....

блин, на самом деле поучительно местами... когда до триггеров и курсоров дело дойдет - позовите меня, тоже поучусь

bananan, это жесть конечно... как ты сам такую мешанину понимаешь? то алиса, то напрямую обращаешься...или не понимаешь? просто отладка текста на мисте через копи-паст, пока не заработает??)))
140 Wobland
 
15.04.13
14:42
(139) он немного всё же понимает. как-то без помощи скобки вокруг вложенного запроса догадался поставить..
141 Mikeware
 
15.04.13
14:45
(138) а что ты хотел узнать про курсоры и триггеры? :-)
142 Mikeware
 
15.04.13
14:47
(139)(140) и все-таки, подход в (132) - редкостный по идиотизму даже для бананана...
143 Wobland
 
15.04.13
14:48
(141) у меня вот пробел в знаниях, не прочь ликвидировать ;)
144 Mikeware
 
15.04.13
14:49
Ну дык кнышшка есть, так ффсе написано.
если есть вопросы - "спрашивайте, отвечаем"
145 Wobland
 
15.04.13
14:50
хм, логично ;)
146 bananan
 
15.04.13
14:54
(139) Да уж как-то понимаю, про копи-паст здесь уже много говорилось но каогда проще и быстрее сделатьт копи-паст и потом в вставленном исправить один-два символа - то я делаю копи-паст а не набираю по-новой, у каждого свой подход...
147 bananan
 
15.04.13
14:55
(142) А какую ельетрнативу моему идиотскому подходу ты предлагаешь? или ты просто как всегда флудишь??
148 Dolly_EV
 
15.04.13
14:59
(141) про триггеры - все хочу узнать))) теория есть, на практике не применял, нужен пинок))) вот-вот настанет подходящая задача... про курсоры - только слово такое знаю:-))
149 Mikeware
 
15.04.13
15:01
(147) так тебе уже решение дали. готовое.
а у тебя соотношение радиусов стремится к нулю....
150 Dolly_EV
 
15.04.13
15:04
(144) кнышки и инструкции - не наш метод! :-)))
151 bananan
 
15.04.13
15:09
(149) Но это готовое рещение, увы, НЕРАБОТАЕТ - за год ниодин клиент не купил Два выбраных товара? Абсурд - так не бывает!
152 Dolly_EV
 
15.04.13
15:10
(151) Не, такими темпами до триггеров в рамках темы не доберемся)))
153 Dolly_EV
 
15.04.13
15:11
(151) может это товар-стояк? ты просто так случайно угадал ? :-))) выбери ДВА других товара?
154 bananan
 
15.04.13
15:18
(153) Чтобы я без тебя делал? Выбирал разные товары - результат - ноль!
155 Джон Вэйн
 
15.04.13
15:33
так решил или не решид, а то у меня в чулане обработочка пылится, все ждет - найдется ли какой смелый мужчинка и вызволит ее из-заточения за какой-нить троячок
Да и я мучаюсь глядя на твои мучения
156 Ёпрст
 
15.04.13
15:37
(151) еще раз - покажи запрос и весь свой код и то , что ты в в фильтр задаешь при этом.
157 bananan
 
15.04.13
15:42
(156) Сейчас верну твои изменения и покажу...
158 bananan
 
15.04.13
15:48
+(157) Выбрал такие товары (3 позиции): Нескафе Рістретто 12*500 г, Нескафе Еспрессо 12*500 г, Чай Нести Лимон 10*1кг
Запрос выдал несколько десятков строк но НИ В ОДНОЙ строке нет Чай Нести Лимон 10*1кг!
Теперь код (опять же, изивини, ноя неуверен, что это именно такой код, как давал ты:
ТекстЗапроса = " SELECT
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент)
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
//        ТекстЗапроса = ТекстЗапроса + "Where exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент))";
       ТекстЗапроса = ТекстЗапроса + "Where(Табличка.Товар in (select val from #СписокТМЦ)) and (not exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент)))";
       ТекстВася ="                                                                                                                                                                                                              
       
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

   КонецЕсли;
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
   Запрос.УложитьСписокОбъектов(ВыбАгент, "#СписокАгентов","Агент");          
   Запрос.УложитьСписокОбъектов(ВыбКлиент, "#СписокКлиентов","Клиенты");          
   Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаС);  
   Запрос.УстановитьТекстовыйПараметр("КонДата", ДатаПо);  
   Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница", ВыбЕд);  
   //Запрос.Отладка(1);
   ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   Таб = СоздатьОбъект("Таблица");
   Если Детали = 1 Тогда
       Таб.ИсходнаяТаблица("Таблица");
   Иначе                              
       Таб.ИсходнаяТаблица("ТаблицаБез");
   КонецЕсли;
   Таб.ВывестиСекцию("Шапка");
   Таб.Опции(0,0,Таб.ВысотаТаблицы());
   ТбЗн.ВыбратьСтроки();                        
   итер = 0;
   ПредАгент = "";
   Пока ТбЗн.Получитьстроку()=1 Цикл        
       Если итер > 1 тогда
           ПредАгент = ТбЗн.ПолучитьЗначение(итер-1, "Агент");
       КонецЕсли;        
         Если ТбЗн.Агент<>ПредАгент Тогда
           Если ВыбТмц.РазмерСписка()=3 тогда
               Если (ТбЗн.Товар=выбТмц.ПолучитьЗначение(1, "ТМЦ")) ИЛИ
                   (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) ИЛИ
                   (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) Тогда
                       Таб.ВывестиСекцию("Док2");                            
               КонецЕсли;
           КонеЦесли;
       Иначе
           Если ВыбТмц.РазмерСписка()=3 тогда
               Если (ТбЗн.Товар=выбТмц.ПолучитьЗначение(1, "ТМЦ")) ИЛИ
                   (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) ИЛИ
                   (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) Тогда
                       Таб.ВывестиСекцию("Документ");                            
           КонецЕсли;
           КонецЕсли;
       КонецЕсли;      
       итер = итер + 1;
ну и ву нем, как видещь есть "обработка" невыбраных товаров средствами 1С...
159 Ёпрст
 
15.04.13
15:52
(157) зачет, ага.. т.е ты всега что-то еще от себя добавляешь каждый раз ?
160 Ёпрст
 
15.04.13
15:55
Значит так, делаем

ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
ТбЗн .ВыбратьСтроку();
Возврат;

задаем фильтр Чай Нести Лимон 10*1кг

Есть че ?
161 bananan
 
15.04.13
16:00
(160) Извиняюсь, странно, но ничего нет...
162 bananan
 
15.04.13
16:01
+(161) Тоесть за заданный период небыло ни одного клиента который купилбы ВСЕ ТРИ товара (см. (158), и значит запрос не должин был не выдать НИОДНОЙ СТРОКи а он выдал
163 Ёпрст
 
15.04.13
16:03
(161) значит чай никто не брал, вставляем
Нескафе Рістретто 12*500 г
есть че ?
164 Ёпрст
 
15.04.13
16:03
(162) чего он выдал ?
165 bananan
 
15.04.13
16:03
+ И ко всему прочему сейчас даюавил два пердыдущих товара к чаю - возврат - ноль - что за фигня...
166 bananan
 
15.04.13
16:04
(164) Ноль ничего не выбрал!
167 bananan
 
15.04.13
16:06
+(166) и на експресо ничего нету!
168 bananan
 
15.04.13
16:07
(164) Ты гдле пропал?
169 vinogradъ
 
15.04.13
16:08
>> задаем фильтр Чай Нести Лимон 10*1кг
>> небыло ни одного клиента который купилбы ВСЕ ТРИ товара
и значит запрос не должин был не выдать НИОДНОЙ СТРОКи !а он выдал!

>> чего он выдал ?
>> Ноль ничего не выбрал!

http://rghost.ru/45306873/image.png
170 Ёпрст
 
15.04.13
16:08
(167) а должно быть ?

Блин, выкини все фильтры - запусти запрос без них и смотри , что есть в результате. Потом добавляй в товары - смотри как фильтрует.
171 Ёпрст
 
15.04.13
16:12
и период выбери - один день.
172 bananan
 
15.04.13
16:14
(170) Должно см (158). Запустил без выбора товарв (выкинул фильтры)- выдал несколько десятков строк..., запустил с Експресо выдал две строки, запустил с Ристето - выдал 5 строк,запустил с чаем - выдал 4 строки...
173 bananan
 
15.04.13
16:15
период всегда во всех проверках по этому зхапросу 20.11.12-20.11.12
174 Ёпрст
 
15.04.13
16:15
(172) И ?
чего не устраивает ?
175 bananan
 
15.04.13
16:16
+172 А когда запустил все три Еспресо, РИсото, чай - ответ - НОЛЬ СТРОК
176 Ёпрст
 
15.04.13
16:17
(175)
И клиенты одни и те же были, когда ты запускал по отдельности
Експресо ,Ристето  и нескафе свой ?
177 bananan
 
15.04.13
16:18
(174) Блин, что то я уж совсем запутался... Сейчас все еще и еще раз перепроверю и тогда скажу что не устраивает..
178 Ёпрст
 
15.04.13
16:18
Пиши так:

фильтр Експрессо
запрос выдал:

Клиентос   Товар
вася          Експрессо

.....

фильтр чай
запрос выдал:
Клиентос   Товар
Федя          чай..
179 bananan
 
15.04.13
16:19
(176) А в окне которое вместо таблицы - клиентов нет...
180 Ёпрст
 
15.04.13
16:19
Ну и потом думай, что должно выдать, когда три товара сразу..
181 Ёпрст
 
15.04.13
16:20
(179) А куды делись ??
:))

Колонки Клиент нема шоле  ?
:)
ты тот хоть запрос то запущаешь ?
182 bananan
 
15.04.13
16:23
+ Что-то я НИЧЕГО НЕ ПОНИМАЮ, мистика какая-то, или у меня с головой фигня или с сервером сейчас с какм бы товаром (из тех трех ) не запустил - ничего не возвращает!!!
183 bananan
 
15.04.13
16:26
(181) Ну да запускаю а колонки клиент там нет... :( Я сола с ума, ах какая досада :(
184 Ёпрст
 
15.04.13
16:38
(183) ты там это, закрой все окошки и открой правидьный отчет и запущай.
185 bananan
 
15.04.13
16:43
Да тот я запрос запускаю, но онр чего-то .глючит. - то выдает результаты то нет, вот сейчас запустил на период 1 год, без выбраных товаров - не выдал НИЧЕГО, а этого уж никак не может быть!
186 Джон Вэйн
 
15.04.13
16:44
Хе-хе, они меня даже не заметили.. Ну нехай мучаются.. За такое отношение не грех и помучаться безрезультатненько..
187 bananan
 
15.04.13
16:46
(186) джони - вейнай отсюда!
188 bananan
 
15.04.13
16:48
+(185) запустил период 20,11,01-20,11,12, без выбраных товаров - результтат ноль
189 vinogradъ
 
15.04.13
16:49
(185) запускай с такими параметрами, которые можешь проверить вручную: 1 день, 1-2 товара, которые были только у определенных клиентов...
190 Ёпрст
 
15.04.13
16:50
(186)твоя поделка врят ли поможет аутору, даже за даром.
191 bananan
 
15.04.13
16:50
так блин запустил с изменениями в коде есть ТбЗн .ВыбратьСтроку(); ну и есть таблица так вот ТбЗн .ВыбратьСтроку(); в окошке несколько строк а в таблице - ниодной, буду смотреть чего там с таблицей не так...
192 vinogradъ
 
15.04.13
16:56
(191) сначала проверь правильность данных в ТбЗн, а потом уже печатную форму рисуй
193 Ёпрст
 
15.04.13
17:05
(191) ну дык, ты правильность запроса с фильтром проверил ?
ЗЫ: для отладки, кинь ТЗ на форму и в коде:

Запрос.ВыполнитьИнструкцию(ТекстЗапроса).Выгрузить(ТабличкаНаФорме);
194 bananan
 
15.04.13
17:13
+ Все вроде разобрался - работает как и надо, возник у меня вопрос... вроде так можно, короче надо чтобы был выдан Агент, клиент все товары что клиент брал.. т.е. идет группировка АГент Клиент ТМЦ. Ёпрст, где поставить такую групировку?
195 Джон Вэйн
 
15.04.13
17:23
(187) да ты просто мистомоська
196 sapphire
 
15.04.13
17:31
(195) Не, он - долбобей :)
197 viktor_vv
 
15.04.13
17:32
(191) Копипаст до добра не доводит :)

           Если ВыбТмц.РазмерСписка()=3 тогда
               Если (ТбЗн.Товар=выбТмц.ПолучитьЗначение(1, "ТМЦ")) ИЛИ
                    (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) ИЛИ
                    (ТбЗн.Товар=выбТмц.ПолучитьЗначение(2, "ТМЦ")) Тогда
198 viktor_vv
 
15.04.13
17:34
Зачетное условие для вывода секций :)

Если ВыбТмц.РазмерСписка()=3 тогда
199 Ёпрст
 
15.04.13
17:36
(194) у тебя и так всё это есть ужо в коде

тебе осталось только всё это красиво вывести в Таблицу отчета
200 bananan
 
15.04.13
17:42
(199) вижу что есть но надо чтобі в первой строке таблиці Агент клиент Товар
дальше
вторая строка Агент клиент Товар
третья клиент тот же - не выводим Товар другой
201 bananan
 
15.04.13
17:44
+(200) Это делать кодом 1С?
202 viktor_vv
 
15.04.13
17:46
(201) Ну у тебя же есть пример по выводу Агент -> Товар .
203 bananan
 
15.04.13
17:50
(202) ТАк и думал делать, но решил лучше спрошу у экспертов...
204 viktor_vv
 
15.04.13
17:54
(203) Ну можешь использовать Индексированную таблицу из 1С++, правда это опять обсуждение надолго, наверное.
205 bananan
 
15.04.13
17:57
(204) Есть адрес где об такой таблице можно почитать?
206 Ёпрст
 
15.04.13
17:59
207 viktor_vv
 
15.04.13
18:11
Ну и на примерную схему для твоего случая

   лтзИнд = СоздатьОбъект("ИндексированнаяТаблица") ;
   ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса,лтзИнд);

   лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*;Товар:Товар*","КоличествоВЕд");
   
   лтзИнд.ВыбратьСтроки();
   Пока лтзИнд.ПолучитьСтроку() = 1 Цикл
       // Ввыводим секцию по Агенту
       // ................
       Таб.ВывестиСекцию("Агент");
       лтзКлиент = лтзИнд.ТЗПотомки ;
       лтзКлиент.ВыбратьСтроки();
       Пока лтзКлиент.ПолучитьСтроку() = 1 Цикл
           // Ввыводим секцию по Клиенту
           // ..............
           Таб.ВывестиСекцию("Клиент");
           
           лтзТовар = лтзКлиент.ТЗПотомки ;
           лтзТовар.ВыбратьСтроки();
           Пока лтзТовар.ПолучитьСтроку() = 1 Цикл
               // Ввыводим секцию по Товару
               // ..............
               Таб.ВывестиСекцию("Товар");
               
           КонецЦикла ;                    
       КонецЦикла ;        
   КонецЦикла ;    

На всякий случай уточню, имена секций даны для примера и могут не совпадать с твоими :).
208 bananan
 
15.04.13
18:29
(206)(207) СПАсИБО!
209 bananan
 
15.04.13
18:53
(207) а зачем в коде Агент*, а не просто Агент?
210 viktor_vv
 
15.04.13
19:10
(209) Так группируется по внутренней ссылке, а не по представлению, так быстрее.
211 Wobland
 
16.04.13
06:41
а скажите, как можно проверить пустоту результата? типа Запрос.Выполнить().Пустой()? так лениво документацию копать, прям так лениво ;)
212 Mikeware
 
16.04.13
06:43
(211)КоличествоСтрок()=0 ?
213 Wobland
 
16.04.13
06:49
(212) так и сделал. для того, чтобы узнать есть/нет, приходится заводить целую ТЗ, выгружать в неё.. думал, мож, проще есть что-то
214 Mikeware
 
16.04.13
06:52
(213) А зачем заводить-выгружать?

ну, или у тебя запрос типа "да/нет"?
215 Wobland
 
16.04.13
06:54
а вообще, у меня методический подход неверен, переобдумал.
бал задача: выяснить, нет ли в документе комиссионного товара. если есть, начинать выгружать. комиссионность определяется статусом партии в регистре партии
216 Wobland
 
16.04.13
06:54
(215) *была задача
217 Mikeware
 
16.04.13
06:56
(215) ну и получай весь комиссионный. Если он есть - обрабатывай.
218 Wobland
 
16.04.13
07:00
(217) вот это и есть методически верный подход ;)
219 Wobland
 
16.04.13
07:04
ВыполнитьСкалярный можно ж юзать для проверки пустоты, судя по документации
220 Mikeware
 
16.04.13
07:07
(219)я к тому и вел в (214) :-)
221 bananan
 
16.04.13
10:28
Доброе утро!
Вот вожусь с СоздатьОбъект("ИндексированнаяТаблица"), ну написал (взял из того что мне дал (207) вроде здесь ничего менять не надо:
лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*;Товар:Товар*","КоличествоВЕд");
но, блин, выдает Колонка 'Агент' не найдена!
Запускаю таблицу значений, ясно, колонка Агент есть, так в чем проблесма?
222 Mikeware
 
16.04.13
10:40
в ДНК
223 chelentano
 
16.04.13
10:42
(221) не твоё это, смирись
224 Гефест
 
16.04.13
10:42
Вы ему уже и индексированную таблицу показали? Беспощадные люди...
225 Mikeware
 
16.04.13
10:43
(224) а забавно же...
как мартышке - гранату...
226 Mikeware
 
16.04.13
10:44
+(225) впрочем, я, похоже, только что этим сравнением сильно обидел и даже оскорбил мартышек...
227 chelentano
 
16.04.13
10:45
(224) Вообще звери. Главное, чтобы ему никто про платформу 8.2 ничего не сказал, хотя... будет забавно
228 Mikeware
 
16.04.13
10:47
(227) там скрипты не той системы...
229 viktor_vv
 
16.04.13
10:49
(221) А где хоть ошибку выдает ? И запрос еще раз покажи, а то у тебя есть привычка постоянно че-то менять там.
230 chelentano
 
16.04.13
10:50
(229) Я думал, что только Ёпрст такой терпеливый
231 viktor_vv
 
16.04.13
10:53
(230) Ну интересно поэкспериментировать :).

(221) Че-то меня смущает твое

"но, блин, выдает Колонка 'Агент' не найдена!
Запускаю таблицу значений, ясно, колонка Агент"

Попробуй еще так

   лтзИнд = СоздатьОбъект("ИндексированнаяТаблица") ;
   Запрос.ВыполнитьИнструкцию(ТекстЗапроса,лтзИнд);
232 bananan
 
16.04.13
10:57
(226) Мартишки на таких как ты - не обижаются!
(229) лтзИнд.Группировать("Агент:Агент; Клиент:Клиент*;Товар:Товар*","КоличествоВЕд");
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС _КЛИЕНТ+ТОВАР.ERT(154)}: Колонка 'Агент' не найдена!
233 bananan
 
16.04.13
10:58
Сейчас попробую (231), хотя мне тоже чем-то не нравится строка:
лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
234 bananan
 
16.04.13
11:06
+(233) Хотя нет, изменил как в (231) и заработало...
235 chelentano
 
16.04.13
11:08
(234) Мы все рады за тебя, с нетерпением ждём следующих вопросов
236 Wobland
 
16.04.13
11:23
а прикольно. никогда не пробовал плюсы в именах файлов использовать
237 bananan
 
16.04.13
11:31
(236) Такое впечатление, что только флудить пробывал всегда, а вот что-то полезное - это тебе слабо...
238 Mikeware
 
16.04.13
11:32
(236) и не надо.
239 viktor_vv
 
16.04.13
11:35
(237) Ты не отвлекайся, мы ждем результатов :).
240 bananan
 
16.04.13
11:41
(239) Результати - нормально все, от "мартышки" - МикнутомуВеру и Тшелентано спасибо.
а от меня лично - спасибо всем кто подсказал мне полезное...
241 Privalov
 
16.04.13
11:45
Охренеть!!! Это какая серия?
242 viktor_vv
 
16.04.13
11:47
(241) Эта музыка будет длиться вечно. Наутилус (с).
243 chelentano
 
16.04.13
11:50
(240) Не "подсказал", а "сделал за меня"
244 Wobland
 
16.04.13
11:52
(237) у меня за крайние пол-года около сотни скриптов накопилось ;)
245 Wobland
 
16.04.13
11:54
(244) и это только внешних. а ещё есть встроенные скрипты и даже одна нетленка
246 chelentano
 
16.04.13
11:56
(245) "скриптленка"?
247 Wobland
 
16.04.13
12:03
(246) тут кусок есть. кстати, файл не удаляется до сих пор
v8: Отправка почты помогите с примером
248 bananan
 
16.04.13
12:14
+Что-то странное...
Запускаю запрос (период 1 месяц выбираю товары:
Нескафе Еспрессо 12*500 г
Нескафе Рістретто 12*500 г
выдает Присяжнюк Сергій    
Яцковець Ігор Вячеславович    
Нескафе Еспрессо 12*500 г    4.66
Нескафе Еспрессо 12*500 г    4.66
Опанасюк Сергій    
Данилицький Павло Андрійович    
Нескафе Еспрессо 12*500 г    1.08
Нескафе Еспрессо 12*500 г    1.08
249 bananan
 
16.04.13
12:16
когда выбрал только выдает:
Бреус Юрій    
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Смірнов Дмитро Євгенович    
Нескафе Рістретто 12*500 г    1.91
Опанасюк Сергій    
Борис Олена Петрівна    
Нескафе Рістретто 12*500 г    13.08
Борис Олена Петрівна    
Нескафе Рістретто 12*500 г    13.08
Борис Олена Петрівна    
ну там много строк, когда выбираю експрессо -
Мохнач Микола    
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Сагома 16436    
Нескафе Еспрессо 12*500 г    1.24
Опанасюк Сергій    
Сагома 16449    
Нескафе Еспрессо 12*500 г    1.08
опять же - много строк...
250 Ёпрст
 
16.04.13
12:16
нам отсюда не видно, что там у тебя в коде написано
251 Wobland
 
16.04.13
12:17
>когда выбрал только выдает
только что? какие варианты ответа?
252 bananan
 
16.04.13
12:17
Почему в первом случае когда было выбрано два товара - запрос выдал на гора только несколько строк в которых только один из выбраных товаров?
Вся беда влтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");?
253 bananan
 
16.04.13
12:17
(250)
   лтзИнд = СоздатьОбъект("ИндексированнаяТаблица");
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса,лтзИнд);
   //ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   //ТбЗн .ВыбратьСтроку();
   //Возврат;
   лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
   лтзИнд.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
   Таб.ВывестиСекцию("Шапка");
   Если Детали = 1 Тогда
       Таб.ИсходнаяТаблица("ИндексТаблица");
254 Ёпрст
 
16.04.13
12:27
(253)И ?
где всё остальное ?
255 bananan
 
16.04.13
12:30
(254) полный код:
ТекстЗапроса = " SELECT
       |    Табличка.Товар as [Товар $Справочник.ТМЦ]
       |    ,Табличка.Доставка as [Доставка $Справочник.Доставка]
       |    ,Табличка.Адрес as Адрес
       |    ,Табличка.КоличествоВЕд
       |    ,Табличка.Клиент as [Клиент $Справочник.Клиенты]
       |    ,Табличка.Агент as [Агент $Справочник.Агент]        
       |from
       |(
       | select    
       |    Таб.Товар as Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка) as Доставка
       |    , $Доставка.Адрес as Адрес
       |    ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
       |    ,isnull($ДокШ.Агент, $ДокШН.Агент) 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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
       | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
       | left join $Справочник.Доставка Доставка (nolock) on Доставка.id = isnull($ДокШ.Доставка, $ДокШН.Доставка)
       | left join (
       |     select  
       |           max($Спр.Коэффициент) as Коэффициент
       |            ,Спр.parentext as Владелец
       |     from $Справочник.ЕдИзм as Спр (nolock)
       |     where $Спр.Ед =:ВыбЕдиница
       |           and $Спр.Коэффициент>0
       |           and Спр.ismark=0
       |     group by Спр.parentext
       |   ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
       |Where 1=1 and 2=2
       | group by
       |    isnull($ДокШ.Агент, $ДокШН.Агент)
       |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент)
       |    , Таб.Товар
       |    ,isnull($ДокШН.Доставка, $ДокШ.Доставка)
       |    ,$Доставка.Адрес
       |) as Табличка
       |";
   Если ВыбТМЦ.РазмерСписка()>0 тогда
       ТекстЗапроса = ТекстЗапроса + "Where(Табличка.Товар in (select val from #СписокТМЦ)) and (not exists (select val from #СписокТМЦ where val not in (select t2.Товар from Вася as t2 where t2.Клиент = Табличка.Клиент)))";
       ТекстВася ="                                                                                                                                                                                                              
       
           |(
           | select    
           |    Таб.Товар as Товар
           |    ,isnull($ДокШ.Клиент, $ДокШН.Клиент) as Клиент
           |from
           |    (
           |        select
           |            $ДокС.ТМЦ as Товар
           |            ,ДокС.iddoc as Документ
           |        from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
           |    union all
           |        select
           |            $ДокН.ТМЦ
           |            ,ДокН.iddoc
           |    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 $Документ.РасходнаяНакладная as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc      
           | left join $Документ.РасходнаяНакладнаяН as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc
           |where 1=1 and 2=2
           |)";
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"Вася",ТекстВася);
   КонецЕсли;
   Если ВыбАгент.РазмерСписка()>0 тогда
           ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1","isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)");

   КонецЕсли;
   Если ВыбКлиент.РазмерСписка()>0 тогда
       ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2","isnull($ДокШ.Клиент, $ДокШН.Клиент) IN (SELECT val FROM #СписокКлиентов)");

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

       // ................

       Таб.ВывестиСекцию("Агент");
       лтзКлиент = лтзИнд.ТЗПотомки ;
       лтзКлиент.ВыбратьСтроки();
       Пока лтзКлиент.ПолучитьСтроку() = 1 Цикл
           // Ввыводим секцию по Клиенту

           // ..............

           Таб.ВывестиСекцию("Клиент");
           
           лтзТовар = лтзКлиент.ТЗПотомки ;
           лтзТовар.ВыбратьСтроки();
           Пока лтзТовар.ПолучитьСтроку() = 1 Цикл
               // Ввыводим секцию по Товару

               // ..............

               Таб.ВывестиСекцию("Товар");
               
           КонецЦикла ;                    
       КонецЦикла ;        
   КонецЦикла ;
256 Ёпрст
 
16.04.13
12:32
круто.. а в самом макете в секции Агент/Клиент/Менеджер что написано ?
257 Ёпрст
 
16.04.13
12:33
ну и ничего, что у тебя еще и  Адрес с Доставкой есть ?
258 bananan
 
16.04.13
12:33
(256)
секция Агент  лтзИнд.Агент

секция Клиент        лтзИнд.Клиент

секция товар  лтзИнд.Товар
259 bananan
 
16.04.13
12:33
(257) об адресе - забыл...
260 Ёпрст
 
16.04.13
12:35
(258)
измени на так, для начала

секция Агент  лтзИнд.Агент

секция Клиент лтзКлиент.Клиент

секция товар  лтзТовар.Товар   Количество лтзТовар.КоличествоВЕд
261 bananan
 
16.04.13
12:37
Количество - это еще одна секция?
Я не точно тебе показал в секции товар у меня (сейчас)
лтзИнд.Товар Окр(лтзИнд.КоличествоВЕД, 2,2) лтзИнд.Адрес
262 Ёпрст
 
16.04.13
12:41
(261) только надо брать значения вложенных ИТЗ, а не как у тебя.
263 Ёпрст
 
16.04.13
12:42
в общем, не помешало бы прочитать про метог группировать - там даже мини пример "на пальцах" есть
264 viktor_vv
 
16.04.13
12:58
(263) Я наверное поторопился, дав ему пример , надо было подождать, может таки прочитал бы хоть по диагонали :).
265 Wobland
 
16.04.13
12:59
(264) я его уже тыкал носом в прочитанного Ицика. без толку
266 Ёпрст
 
16.04.13
13:13
Та не, метод копи-паста рулит!
В следующий раз , надо просто почаще пользовать конструкцией truncate в тексте запроса и усё будет  пучком
267 bananan
 
16.04.13
13:13
(262) читал, вернее - бегло посмотрел, но в примере по методу Гриппировать НИЧЕГО НЕТ КАК ОБРАЩАТСЯ К ЗНАЧЕНИЯМ вложенных ИТЗ!...
P.S.Оказывается Mikeware - модератор (или ведущий)! Какая честь для меня что энтот чел меня мартишкой называет!
ОГРОМНОЕ спасибо Mikeware за блокировку!!!
P.S.P.S.
Как тут не вспомнить: "Сила есть - ума НеНАДО!"
268 Ёпрст
 
16.04.13
13:15
(267) че за блокировка ?
269 Wobland
 
16.04.13
13:16
(268) бананан как-то хамил, Майквар размышлял о бане. не знаю
270 bananan
 
16.04.13
13:19
(268) Я что-то не додумался скопипастить, но короче дословно не помню, пользователь заблокирован за коверкание ников до 13:08...
А как достучаться до вложеных ИТЗ?
272 Mikeware
 
16.04.13
13:21
(268) банил на пол-часика за коверканье ников
274 viktor_vv
 
16.04.13
13:22
(270) А чего там стучаться. Вот здесь тебе что непонятно, и где ты тут видишь упоминание про лтзИнд ?
275 viktor_vv
 
16.04.13
13:23
(274)+ Вот здесь имел ввиду

           лтзТовар = лтзКлиент.ТЗПотомки ;
           лтзТовар.ВыбратьСтроки();
           Пока лтзТовар.ПолучитьСтроку() = 1 Цикл
               // Ввыводим секцию по Товару

               // ..............

               Таб.ВывестиСекцию("Товар");
               
           КонецЦикла ;
276 bananan
 
16.04.13
13:23
(272) А за коверкание моего ника ты кого-нить банил?
277 Wobland
 
16.04.13
13:24
(276) а я как-то не припомню. его сложно заковеркать
278 viktor_vv
 
16.04.13
13:24
Насчет достучаться, медитируй вот над этой строчкой

лтзТовар = лтзКлиент.ТЗПотомки ;
279 Mikeware
 
16.04.13
13:25
(276) а кто его коверкал? транслитерация на русский - ковераньем не считается...
280 bananan
 
16.04.13
13:35
(275) А что такое: лтзКлиент?
281 bananan
 
16.04.13
13:37
(279) Твои возможности, о МОГУЧИЙ модератор, я запомнил, а с коверканием моего ника 99% до конца этой ветки такое будет и не раз...
282 Wobland
 
16.04.13
13:38
тут уже ради спортивного интереса хочется исковеркать.. подумаю пока
283 bananan
 
16.04.13
13:39
+(280) Догадываюсь что  это, но так:
лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
   лтзТовар = лтзКлиент.ТЗПотомки ;
   лтзИнд.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
не пропускает:
Переменная не определена (лтзКлиент)
284 bananan
 
16.04.13
13:40
(282) Я посмотрю ты на форуме только спортом и занимаешся - пустословием...
285 bananan
 
16.04.13
13:46
+ХМ, написал так:
лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
   лтзКлиент = лтзИнд.ТЗПотомки ;
   лтзТовар = лтзКлиент.ТЗПотомки ;
   лтзИнд.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
ругается:
лтзКлиент = лтзИнд.ТЗПотомки ;
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС _КЛИЕНТ+ТОВАР.ERT(156)}: Нет текущей строки!
286 Wobland
 
16.04.13
13:47
(284) серьёзно?
287 bananan
 
16.04.13
13:48
(286) Хоть один пример твоего сообщения без оскорбления и со стоящим советом?
288 Wobland
 
16.04.13
13:49
289 Ёпрст
 
16.04.13
13:50
(285) опять шаловливыми ручонками в код тянешься ?
Тебе же написали, что нужно поменять в макете, чтоб код из
(255) стал рабочим (точнее, чтоб твой макет был рабочим)
290 Mikeware
 
16.04.13
13:51
(281) Ну так приведи пример - номер поста. Или буду вынужден забанить за вранье...
291 bananan
 
16.04.13
13:55
(290) - (244), (236), (110), (120), (140)
а теперь бань, пусть все посмотрят какой ты ВСЕМАГУЧИй
292 Wobland
 
16.04.13
13:56
(290) банить за враньё? кто дятловцев укокошил? обязательно ж кто-то на мисте врёт ;)
293 bananan
 
16.04.13
13:56
(289) Не понял. Где мне написали?
294 Wobland
 
16.04.13
13:56
(291) ээ.. как-то о коверкании там ни слова
295 bananan
 
16.04.13
13:57
(260)?
Что такое: Количество лтзТовар.КоличествоВЕд?
296 bananan
 
16.04.13
13:57
(294) как всегда - "одни дельные советы"!
297 Ёпрст
 
16.04.13
13:57
(293) в (260)
298 bananan
 
16.04.13
13:58
(297) псомтри (295)...
299 Ёпрст
 
16.04.13
13:59
(295) Это куда там у тебя количество выводится у товара, нужно прописать  лтзТовар.КоличествоВЕд?
300 Ёпрст
 
16.04.13
14:00
только ты еще забыл про свои адреса и доставку.
301 bananan
 
16.04.13
14:19
(299) Не понял со слов, сейчас попробую примерно как ты говоришь...
но код:
   лтзИнд = СоздатьОбъект("ИндексированнаяТаблица");
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса,лтзИнд);
   //ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   //ТбЗн .ВыбратьСтроку();
   //Возврат;
   лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
   лтзКлиент = лтзИнд.ТЗПотомки ;
   лтзТовар = лтзКлиент.ТЗПотомки ;
   лтзИнд.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
   Таб.ВывестиСекцию("Шапка");
   Если Детали = 1 Тогда
       Таб.ИсходнаяТаблица("ИндексТаблица");

Выдает:
лтзКлиент = лтзИнд.ТЗПотомки ;
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС _КЛИЕНТ+ТОВАР.ERT(156)}: Нет текущей строки!
а если убрать лтзКлиент = лтзИнд.ТЗПотомки ; - выдает:
лтзТовар = лтзКлиент<<?>>.ТЗПотомки ;
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС _КЛИЕНТ+ТОВАР.ERT(156)}: Переменная не определена (лтзКлиент)
Как быть?
302 Ёпрст
 
16.04.13
14:22
(301) читать мануал вестимо.
У какой строки ты хоть берешь свою ТЗПотмоки ?
:))
303 Ёпрст
 
16.04.13
14:22
у тя же был рабочий код.. нафига ты его портишь ?
304 bananan
 
16.04.13
14:24
(301) В мануале об этом я что-то ничего не нашел...
305 bananan
 
16.04.13
14:25
(304) потомки на сколько я понимаю надо искать у строки агент, и  строки клиент...
306 Ёпрст
 
16.04.13
14:26
(304) а ты его хоть открывал/читал ?
307 Ёпрст
 
16.04.13
14:26
http://www.1cpp.ru/docum/icpp/html/IndexedTable.html#group
там есть всё - даже пример
308 Ёпрст
 
16.04.13
14:26
в картинках
309 Wobland
 
16.04.13
14:27
(307) номер строки, куда читать, скажи
310 bananan
 
16.04.13
14:27
(307) Открывал и читал, прмер? И где же там как достучаться до Потомков?
311 bananan
 
16.04.13
14:28
(309) Опять дельный совет!
312 Zhuravlik
 
16.04.13
14:28
(310) ИТЗ.тзПотомки
313 Wobland
 
16.04.13
14:29
(311) а то! ты ж самостоятельно даже с чтением не справляешься
314 Zhuravlik
 
16.04.13
14:29
(310) + и получаем таблицу такого вида (в *колонке тзПотомки* показано содержимое таблицы тзПотомки):
315 bananan
 
16.04.13
14:30
(312) Группировать / Group

Синтаксис: Группировать(стрГруппировки, стрКолонкиСумм, [чРасшифровкаПоследнегоУровня = 0])
Параметры:
стрГруппировки - тип: Строка. Строка, описывающая требуемую структуру группировки. Задаётся в виде <ИмяИндекса1>: <ИндексноеВыражение1> [; <ИмяИндекса2>: <ИндексноеВыражение2> ... ]. ИндексноеВыражение - строка в том же формате, что и для метода ДобавитьИндекс(), с одним дополнением: если в списке модификаторов колонки присутствует символ '&', то по этой колонке будут посчитаны итоги по группам справочника. Колонка с таким модификатором может быть только одна на каждом уровне группировки.
стрКолонкиСумм - тип: Строка. Строка с колонками, по которым нужно считать суммы.
чРасшифровкаПоследнегоУровня - тип: Число. 1 - в каждой строке последнего уровня группировки будет таблица с расшифровкой, содержащая строки исходной таблицы в нетронутом виде. 0 - последний уровень будет свёрнут.

Описание: формирует таблицу с древовидной структурой в соответствии с группировками. На каждом уровне группировки остаются только уникальные значения по соответствующему индексу. В колонки сумм записываются суммы по всем строкам с совпадающим значением ключа. Строки с совпадающими значениями ключа записываются в таблицу, которая помещается в колонку тзПотомки - эта колонка создаётся в процессе группировки.

Пример: на входе имеем таблицуФамилия    Имя    Сумма
Иванов    Иван    100
Иванов    Сергей    120
Петров    Пётр    130
Петров    Александр    200


группируем её:
ТЗ.Группировать("Фамилия: Фамилия; Имя: Имя", "Сумма");

и получаем таблицу такого вида (в колонке тзПотомки показано содержимое таблицы тзПотомки):Фамилия    Имя    Сумма    тзПотомки
Фамилия    Имя    Сумма
Иванов    Иван    220    Иванов    Иван    100
Иванов    Сергей    120
Петров    Пётр    330    Петров    Пётр    130
Петров    Александр    200


При группировке возможно также подсчитывать суммы по группам справочников - для этого в списке модификаторов индекса нужно указать '&'. Если в таблице есть колонка с именем '<ИмяКолонкиСправочника>_Родитель', то родитель для элемента будет браться из этой колонки - это уменьшает количество обращений к базе, и заметно увеличивает производительность. Итоговая таблица будет организована в виде дерева, в точности повторяющего структуру справочника. Следующий уровень группировки располагается в листьях этого дерева (т.е. в строках, не являющихся группами). Для удобства работы с полученным деревом в таблицу добавляется колонка '__ЭтоГруппа__', в которую записывается 1 для всех групп, и ПустоеЗначение для элементов. Также добавляется колонка '__Уровень__', которая заполняется значением уровня групп справочника (нумерация начинается с 1). Для элементов в колонку '__Уровень__' записывается ПустоеЗначение.
И где здесь ИТЗ.тзПотомки????
316 Zhuravlik
 
16.04.13
14:31
(315) CTRL + F -> "Потомки"
317 viktor_vv
 
16.04.13
14:31
(314) Не поможет, на предыдущей странице все это есть, и оно даже работало у него, немного неправильно, и объяснили в чем косяк, а не выходит каменный цветок.
318 viktor_vv
 
16.04.13
14:32
(315) По слогам читай

"и получаем таблицу такого вида (в колонке тзПотомки показано содержимое таблицы тзПотомки):Фамилия    Имя    Сумма    тзПотомки"
319 Zhuravlik
 
16.04.13
14:32
(315) ИТЗ - это объект "ИндексированнаяТаблица"
320 viktor_vv
 
16.04.13
14:33
(318)+ И это тоже

"Строки с совпадающими значениями ключа записываются в таблицу, которая помещается в колонку тзПотомки - эта колонка создаётся в процессе группировки."
321 bananan
 
16.04.13
14:33
(316) ИТЗ.тзПотомки где? нет! Мануал криво написан с офигенным примером, который то примером назвать нельзя...
322 bananan
 
16.04.13
14:34
(318)(320) вроде суть понял - сейчас буду пробывать...
323 viktor_vv
 
16.04.13
14:35
(322) Да не надо пробовать, возьми начальный вариант, который работал, и поменяй макет как Ёпрст написал.
324 Zhuravlik
 
16.04.13
14:35
(321) Да...
Если по примеру в (301), то можно написать лтзИнд.тзПотомки. Смысл в том, что моя "ИТЗ", или "лтзИНД" из (301) - это суть одно и тоже. Просто ИТЗ - понятнее обычно, ИТЗ - "индексированная таблица значений".
325 viktor_vv
 
16.04.13
14:37
(324) Как это одно и тоже, если буковки разные :). Это я шучу так.
Но в данном случае это актуально, насчет разных буковок.
326 bananan
 
16.04.13
14:38
(323) Начальный вариант это (207) ? А совет Ёпрст к нему какой?
327 Zhuravlik
 
16.04.13
14:39
(325) Я уже понял)
328 bananan
 
16.04.13
14:39
+(326) Ко всему вариант (207) не работает ...
329 viktor_vv
 
16.04.13
14:39
(326) Начальный вариант (255), а совет (260).
330 Mikeware
 
16.04.13
14:40
(314) лтз - локальная таблица значений.
тоже все понятно
331 viktor_vv
 
16.04.13
14:41
(328) Такое ощущение, что у тебя дольше 5 минут в голове ничего не держится, ты уж извини.
332 Mikeware
 
16.04.13
14:43
(331)"а если у вас вместо головы жопа - заведите себе записную книжку!"©
333 bananan
 
16.04.13
14:46
332 Еще один абуриген вспомнил умные слова... Да, не ту страну назвали Гондурасом...
334 Mikeware
 
16.04.13
14:51
(333) сходи к депутату вашей рады, и выдвинь инициативу назвать гондурасом именно  вашу страну. ты как абориген имеешь полное право на такую инициативу.
335 Mikeware
 
16.04.13
14:52
+(334) ну хотя бы область или город.
"бананан из гондураса" - это звучит!
336 ЧеловекДуши
 
16.04.13
14:52
(334) Ему там самое место, думать не надо, помнить не надо.
Жимкай кнопку "Да", "Нет" по взмаху куратора и все будет Хорошо :)
337 Wobland
 
16.04.13
14:54
в общем, исковеркать имя не получилось. тупая замена гласных - так себе вариант. так что не было и не будет
338 bananan
 
16.04.13
15:03
(334)  Украину надо называть Янебляндия ну или Зонблядния
339 bananan
 
16.04.13
15:04
+ Ну и в совете Ёпрест я на понял "секция товар  лтзТовар.Товар   Количество лтзТовар.КоличествоВЕд"
Количество лтзТовар.КоличествоВЕд - это что?
340 bananan
 
16.04.13
15:10
+(339) ну и в сеции Товар у меня было и есть поле Окр(лтзИнд.КоличествоВЕД, 2,2).
Так что надо чтобы он правильно выдавл результаты??
341 viktor_vv
 
16.04.13
15:11
(339) Ну что ж ты на ровном месте буксуешь?

Ну вместо Окр(лтзИнд.КоличествоВЕД, 2,2). напиши

Окр(лтзТовар.КоличествоВЕД, 2,2).
342 Ёпрст
 
16.04.13
15:12
(340) надо в секции Товар заменить Окр(лтзИнд.КоличествоВЕД, 2,2). на  лтзТовар.КоличествоВЕд
343 viktor_vv
 
16.04.13
15:12
(341) Именно в секции Товар. Вместо лтзИнд.Товар напиши лтзТовары.Товар .
344 bananan
 
16.04.13
15:15
(343) я написал (не читая еще то что вы советуете? Окр(лтзТовар.КоличествоВЕД, 2,2) - выдает все-равно не то что должен был бы выдавать. Сейчас попробую так как вы советуете, но ведь вы же мне тоже самое советуете?
345 viktor_vv
 
16.04.13
15:15
(343)* лтзТовар.Товар .
346 viktor_vv
 
16.04.13
15:16
(344) Тут уже зависит от того, а что тебе там надо выдавать.
347 bananan
 
16.04.13
15:19
(345) Спасибо, вроде заработало правильно сейчас отнесу нашей агенту пусть проверят
348 Mikeware
 
16.04.13
15:22
(347) Бобру?
349 bananan
 
16.04.13
15:46
Странно макет таблицы такой: http://us.ua/1093992/, а выдает на экран: http://us.ua/1093993/
Почему?
350 Ёпрст
 
16.04.13
15:56
(349) потому, что в адресе косъяк
351 bananan
 
16.04.13
16:01
(350) В самих данных или в лтзИнд.Адрес?
352 viktor_vv
 
16.04.13
16:06
(349) А что тебе там не нравится ?
353 viktor_vv
 
16.04.13
16:07
И как этот адрес выглядит в карточке ?
Там в глобальнике должна быть функция для нормального представления адреса.
354 Mikeware
 
16.04.13
16:08
(352) "Мохнач Микола" - эта пять! особенно если вспомнить, что обычно называют "мохнаткой"...
355 bananan
 
16.04.13
16:12
(354) До коверкания ника ты еще не дорос?
(353)  Сейчас поищу в глобалье...
356 bananan
 
16.04.13
16:13
+ (355) А как хоть примерно она называется?
357 viktor_vv
 
16.04.13
16:14
(355) Долго ж ты будешь глобальник лопатить.
(356) :).

Карточку клиента в конфигураторе не судьба посмотреть.
358 Mikeware
 
16.04.13
16:14
(355) кстати, да... ты предъявил факт коверканья твоего ника? или тебя все-таки наказать за вранье?
359 Ёпрст
 
16.04.13
16:16
(351) в выводе.
Адрес и доставку нужно либо в отдельную свёртку (если нужно для каждого товара в отдельности видеть) или в индекс товара воткнуть..
360 bananan
 
16.04.13
16:18
(351) Сейчас попробую... хотя не понимаю...
(358) Ты мое имя коверкаешь еще и добавляещь манду свою...
361 bananan
 
16.04.13
16:23
(359) В таблице написал : лтзТовар.Адрес - таже байда... :(
362 Mikeware
 
16.04.13
16:26
(360)это как раз твоя манда - на второй картинке по ссылке из (349).  :-)
363 bananan
 
16.04.13
16:26
+(361) А как откнуть индекс товара?
364 bananan
 
16.04.13
16:28
(362) Ну куда уж мне "мартышке" спорить с виликим и магучим мандераторам...
365 Ёпрст
 
16.04.13
16:33
Ё...

в коде воткнешь так:


Таб = СоздатьОбъект("Таблица");
Если Детали = 1 Тогда
   Таб.ИсходнаяТаблица("ИндексТаблица");
Иначе                              
   Таб.ИсходнаяТаблица("ТаблицаБез");
КонецЕсли;
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,ТабюВысотаТаблицы());

лтзИнд.Группировать("Агент:*Агент; Клиент:*Клиент; Товар:*Товар; АдресИДоставка:*Адрес,*Доставка","КоличествоВЕд");
лтзИнд.ВыбратьСтроки();
Пока лтзИнд.ПолучитьСтроку() = 1 Цикл
   ПечАгент = лтзИнд.Агент;
   ПечКоличество = лтзИнд.КоличествоВЕд;
   Таб.ВывестиСекцию("Агент");
   лтзКлиент = лтзИнд.ТЗПотомки ;
   лтзКлиент.ВыбратьСтроки();
   Пока лтзКлиент.ПолучитьСтроку() = 1 Цикл
       ПечКлиент = лтзКлиент.Агент;
       ПечКоличество = лтзКлиент.КоличествоВЕд;
       Таб.ВывестиСекцию("Клиент");
       лтзТовар = лтзКлиент.ТЗПотомки ;
       лтзТовар.ВыбратьСтроки();
       Пока лтзТовар.ПолучитьСтроку() = 1 Цикл
           ПечТовар = лтзТовар.Товар;
           ПечКоличество = лтзТовар.КоличествоВЕд;
           Таб.ВывестиСекцию("Товар");
           лтзДоставкаАдрес= лтзТовар.ТЗПотомки ;
           лтзДоставкаАдрес.ВыбратьСтроки();
           Пока лтзДоставкаАдрес.ПолучитьСтроку() = 1 Цикл
               ПечДоставка = лтзДоставкаАдрес.Доставка;
               ПечАдрес = лтзДоставкаАдрес.Адрес;
               ПечКоличество = лтзДоставкаАдрес.КоличествоВЕд;
               Таб.ВывестиСекцию("ДоставкаАдрес");
           КонецЦикла;
       КонецЦикла ;                    
   КонецЦикла;        
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Бананама на");


макет слепишь такой:
http://s1.ipicture.ru/uploads/20130416/3LuO68KP.jpg

наслаждайся
366 bananan
 
16.04.13
16:46
(365) Видно я код не так или не туда вставил:
   лтзИнд = СоздатьОбъект("ИндексированнаяТаблица");
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса,лтзИнд);
   //ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   //ТбЗн .ВыбратьСтроку();
   //Возврат;
   лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
   лтзИнд.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
Если Детали = 1 Тогда
   Таб.ИсходнаяТаблица("ИндексТаблица");
Иначе                              
   Таб.ИсходнаяТаблица("ТаблицаБез");
КонецЕсли;
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы());

выдает:
лтзИнд.Группировать("Агент:*Агент; Клиент:*Клиент; Товар:*Товар; АдресИДоставка:*Адрес,*Доставка","КоличествоВЕд");
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС _КЛИЕНТ+ТОВАР.ERT(166)}: Колонка тзПотомки уже есть!
367 Ёпрст
 
16.04.13
16:50
ААААААА... ПОМОГИТЕ!!!!!!!!!
368 viktor_vv
 
16.04.13
16:50
(366) Ты два раза группируешь.
И таки объясни, что не нравится в выводе адреса.
369 Ёпрст
 
16.04.13
16:50
:)))
370 Ёпрст
 
16.04.13
16:51
Замени свой вывод таблицы на мой.
371 Ёпрст
 
16.04.13
16:51
и наслаждайся.. и макет поменяй.
372 viktor_vv
 
16.04.13
16:52
(367) Похоже он уже даже самого терпеливого достал :).
373 bananan
 
16.04.13
16:53
(368) Гдн я ДВА раза группирую? А не нравится то что на макете скажем в шапке есть надпись, а вот в уже "готовой" таблице этой надписи - НЕТ...
374 bananan
 
16.04.13
16:54
(370) Да я вроде так и сделал, привожу полный код:
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
   Запрос.УложитьСписокОбъектов(ВыбАгент, "#СписокАгентов","Агент");          
   Запрос.УложитьСписокОбъектов(ВыбКлиент, "#СписокКлиентов","Клиенты");          
   Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаС);  
   Запрос.УстановитьТекстовыйПараметр("КонДата", ДатаПо);  
   Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница", ВыбЕд);  
   //Запрос.Отладка(1);      
   лтзИнд = СоздатьОбъект("ИндексированнаяТаблица");
    Запрос.ВыполнитьИнструкцию(ТекстЗапроса,лтзИнд);
   //ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   //ТбЗн .ВыбратьСтроку();
   //Возврат;
   лтзИнд.Группировать("Агент:Агент*; Клиент:Клиент*; Товар:Товар*","КоличествоВЕд");
   лтзИнд.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
Если Детали = 1 Тогда
   Таб.ИсходнаяТаблица("ИндексТаблица");
Иначе                              
   Таб.ИсходнаяТаблица("ТаблицаБез");
КонецЕсли;
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы());

лтзИнд.Группировать("Агент:*Агент; Клиент:*Клиент; Товар:*Товар; АдресИДоставка:*Адрес,*Доставка","КоличествоВЕд");
лтзИнд.ВыбратьСтроки();
Пока лтзИнд.ПолучитьСтроку() = 1 Цикл
   ПечАгент = лтзИнд.Агент;
   ПечКоличество = лтзИнд.КоличествоВЕд;
   Таб.ВывестиСекцию("Агент");
   лтзКлиент = лтзИнд.ТЗПотомки ;
   лтзКлиент.ВыбратьСтроки();
   Пока лтзКлиент.ПолучитьСтроку() = 1 Цикл
       ПечКлиент = лтзКлиент.Агент;
       ПечКоличество = лтзКлиент.КоличествоВЕд;
       Таб.ВывестиСекцию("Клиент");
       лтзТовар = лтзКлиент.ТЗПотомки ;
       лтзТовар.ВыбратьСтроки();
       Пока лтзТовар.ПолучитьСтроку() = 1 Цикл
           ПечТовар = лтзТовар.Товар;
           ПечКоличество = лтзТовар.КоличествоВЕд;
           Таб.ВывестиСекцию("Товар");
           лтзДоставкаАдрес= лтзТовар.ТЗПотомки ;
           лтзДоставкаАдрес.ВыбратьСтроки();
           Пока лтзДоставкаАдрес.ПолучитьСтроку() = 1 Цикл
               ПечДоставка = лтзДоставкаАдрес.Доставка;
               ПечАдрес = лтзДоставкаАдрес.Адрес;
               ПечКоличество = лтзДоставкаАдрес.КоличествоВЕд;
               Таб.ВывестиСекцию("ДоставкаАдрес");
           КонецЦикла;
       КонецЦикла ;                    
   КонецЦикла;        
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Бананама на");
375 viktor_vv
 
16.04.13
16:55
(374) Теперь читай по строчкам и считай количество методов Группировать().
376 viktor_vv
 
16.04.13
16:55
И оно тебе оказывается нахрен не надо :).
377 viktor_vv
 
16.04.13
16:58
Ты просто оба макета смотри, и смотри какой выводишь.
378 bananan
 
16.04.13
16:58
(375) Оба - как я не заметил этого раньше? Извеняюсь...
а какой из методов Группировать убрать? Первый? И все?
379 viktor_vv
 
16.04.13
16:58
Вот эти твои два макета

Если Детали = 1 Тогда
   Таб.ИсходнаяТаблица("ИндексТаблица");
Иначе                              
   Таб.ИсходнаяТаблица("ТаблицаБез");
КонецЕсли;
380 bananan
 
16.04.13
16:59
(377) Я свой макет уже грохнул, оставил макет Ёпрст; его и вывожу...
381 bananan
 
16.04.13
16:59
(379) по умолчанию вывожу первый макет "ИндексТаблица"...
382 viktor_vv
 
16.04.13
17:01
(380) Это ты поторопился, но оно конечно ломать, не строить.
383 viktor_vv
 
16.04.13
17:01
(381) Меня терзают смутные сомнения :).
384 bananan
 
16.04.13
17:03
(383) И зря они тебя терзают.. - все уже нормально! СПАСИБО Ёпрст и  viktor_vv!!!!!!!
ну и неспасибо мудератору...
385 Wobland
 
16.04.13
17:59
(367) Ёпрст, ты прекрасен ;)
386 Wobland
 
16.04.13
18:02
(358) у него уже ОЗУ обнулилось, отстань от человека ;)
387 bananan
 
17.04.13
10:49
(386) ОЗУ у меня практически никогда не обноляется. Возник такой вопрос цену в документе я беру так:
|   ,   isnull($ДокС.ЦенаСНДС, $ДокН.ЦенаСНДС) ЦенаВДок
В таблице поле показываю так:
Окр(ТбРазом.ЦенаВДок, 2)
Так вот если в даних цена равна 1.0, 2.0 и т.д. то на выводи идет 1, а не 1.0.
Что сделать чтобы на экране / принтере было 1.0 а не 0?
388 Wobland
 
17.04.13
10:50
(387) врёшь ты всё
ОбщаяСумма#Ч15.2
389 Wobland
 
17.04.13
10:51
или вот (в конце пробел): Результат.ИтогПродаж#Ч15.2.
390 bananan
 
17.04.13
10:53
(388) Что я вру все?
391 bananan
 
17.04.13
10:53
+(390) Показать скриншот?
392 Wobland
 
17.04.13
10:54
(390) врёшь про длинной время жизни памяти
(391) смотря какой
393 bananan
 
17.04.13
11:11
(392) Докажи! Не пустословь..
Ешще вопрос вывожу я процент наценки ну или там чего....
процент вычисляется так:
(Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 as Проц
Так вот часто-густо когда цена в документе меньше от приходний цены процент (который в данной ситуации должен бытьт отрицательным) Положительный,
конкретный пример
Цена в документе  минЦена  %
8.00               8.01      19.83
394 Wobland
 
17.04.13
11:14
я только напомню о том, что ты часто задаёшь вопросы, на которые уже получал ответы
395 bananan
 
17.04.13
11:15
(394) И сейчас я задал вопрос на который цже получал ответ???!
396 Wobland
 
17.04.13
11:16
(395) ложь. //ещё и обобщать не умеешь. ну прям как дитё малое
397 Ёпрст
 
17.04.13
11:17
мот еще с чем его "складываешь"
398 bananan
 
17.04.13
11:19
(397) вот код из запроса, который и возвращает %:
(Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
399 Wobland
 
17.04.13
11:20
(398) синтаксически неверен или просто неполон
400 bananan
 
17.04.13
11:20
(396) А что тебе обобщить? Твои пустые слова? Дак пустота - не обобщается!
401 Wobland
 
17.04.13
11:21
"енд" прибавился. опять руки шаловливые?
402 viktor_vv
 
17.04.13
11:21
(398) Еще вывод в отчет показывай.
403 bananan
 
17.04.13
11:21
(399) Чем он синтаксически не верен или неполон?
404 bananan
 
17.04.13
11:22
(402)    ТбРазом = СоздатьОбъект("ТаблицаЗначений");
   ТбЗн.Выгрузить(ТбРазом);
   ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн2.КоличествоСтрок()+ТбЗн3.КоличествоСтрок());
   
   //Сообщить("Строк в ТбЗн="+ТбЗн.КоличествоСтрок()+"Строк в ТбЗн2="+ТбЗн2.КоличествоСтрок());
   Если ТбЗн2.КоличествоСтрок()>0 тогда
       ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1);
   КонецЕсли;
   Если ТбЗн3.КоличествоСтрок()>0 тогда        
       ТбРазом.Заполнить(ТбЗн3, ТбЗн.КоличествоСтрок()+ТбЗн2.КоличествоСтрок()+1);
   КонецЕсли;
   ТбРазом.ВыбратьСтроку();
   ТбРазом.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица1");
405 bananan
 
17.04.13
11:22
Поле % в таблице:
Окр(ТбРазом.Проц, 2)
406 Wobland
 
17.04.13
11:22
(403) скобками, ендами
407 bananan
 
17.04.13
11:24
(406) Скобки и енд? Сейяас тебе покажу полный вариант:
|,   case Данные.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц
408 viktor_vv
 
17.04.13
11:24
И ты бы (398) уточнил. Или дай кусок пошире, а то может там case имеется.
409 chelentano
 
17.04.13
11:26
(387) я так понимаю, что имеется ввиду "никогда не обноВляется"
410 Wobland
 
17.04.13
11:26
(407) как дитё, чесслово ;) зачем ты пол-формулы показал сначала?
411 bananan
 
17.04.13
11:26
(408) Ок тут идет три отдельных запроса - каждый скидывает в отдельну ТЗ.
Показываю % из второго (из первого (407) запроса:
|,   case Запрос.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
третий:
|,   case Запрос.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
412 Wobland
 
17.04.13
11:27
и куда ушёл енд в (393)?
413 Ёпрст
 
17.04.13
11:28
(411) а потом все три ТЗ складываешь в одну ?
:))
И процент свой поди тоже ?
:)
414 bananan
 
17.04.13
11:28
(410) А какая разница? Первая половина формулы в кейсе тебе что-то дала?
415 bananan
 
17.04.13
11:28
(413) Ну да
416 viktor_vv
 
17.04.13
11:31
Какая-то каша.

Вот тут ты похоже неправильно начальную строку даешь, да и дальше.

ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1);
417 bananan
 
17.04.13
11:31
(413) Там во всех ТЗ разные значения и процент не суммируется же.
Т.е. если в ТЗ1 - 10 строк, в Тз2- 20
то в итоговой ТЗ 30 строк и проценты там не складываются!
418 viktor_vv
 
17.04.13
11:32
(416) Хотя не, нормально.
419 bananan
 
17.04.13
11:33
(416) Почему неправильную? Значений из второй таблицы идут после значени2й из первой - так что значени из второй таблицы начинаются со троки с номером ТбЗн.КоличествоСтрок()+1
420 Ёпрст
 
17.04.13
11:34
(417) тогда выводи по-отдельности

Запрос.СуммаСНДС / Запрос.Количество
и
Запрос.Цена_Прих

и потом посмотри, верно ли вычисляется твоя формула.
421 bananan
 
17.04.13
11:36
(420) Аба поля выводятся то есть именно их я и показал, а формула почемуто неправильно вычисляется...
422 Ёпрст
 
17.04.13
11:48
аа.. ну вот так сделай :

ELSE ((1.0*Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
423 bananan
 
17.04.13
11:55
(422) попробывал вроде ничего не изменилось:
8.00    8.01    19.83
424 Ёпрст
 
17.04.13
11:56
везде поменял то хоть ?
Должно работать
425 bananan
 
17.04.13
11:57
+ И, кстати, я вывожу предварительно ТЗ1 - там все как и оно попадает в таблицу - так что с объединением ТЗ - все нормально работает
426 Ёпрст
 
17.04.13
11:57
ну или на так
ELSE ((1.00*Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
427 bananan
 
17.04.13
12:02
(426)
8.00    8.01    19.83
Что за лажа, блин?
428 Ёпрст
 
17.04.13
12:04
(427) открой QA
напиши это, посмотри, что возвращает:

select
 (1.00*100/20/8-1)*100
,
 (100/20/8-1)*100
429 Wobland
 
17.04.13
12:24
430 bananan
 
17.04.13
12:42
(428)  В конце-концов решил это скорее математически % вычисляю так:
|,   case Данные.Цена_Прих
       |        WHEN  0 then 0
       |    /*ELSE ((Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    /*ELSE ((1.0*Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    ELSE (((Данные.СуммаСНДС/Данные.Количество)/ (Данные.Цена_Прих * (1+Данные.Ставка)))-1)*100 end as Проц
431 Wobland
 
17.04.13
12:59
на всякий случай даю справку. умножение на 1.0 - неявное преобразование int во float
432 Ёпрст
 
17.04.13
13:02
дас ис так. иначе 8/10 будет 0 всегда
433 bananan
 
17.04.13
15:17
(432) Дас ис так - украиноско-немецое Ес! :)
434 Wobland
 
17.04.13
19:19
а дельфисты в принципе понимают разницу между целым и вещественным?
435 Wobland
 
17.04.13
19:53
мужик, ты - не программист (доказывать не буду за очевидностью). это не плохо и не хорошо, это так есть. ты зря занимаешь своё место - не твоя профессия. просто поверь, если не можешь осмыслить рационально. и вот этими своими тысячепостовыми несколькомесячными трипами ты уже всех залюбил (возможно, кроме Ёпрста). займись, блин, своим делом, а не этим онанизмом. танцуй, рисуй, пиши, но только не бери в руки клавиатуру.
436 bananan
 
18.04.13
11:30
(435) Только после ВАС, СЭР!
Добрый день
в запросе у меня
|,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
приведение типов есть, а в таблицу выдает какието числа вместо: Категория 1 и т.д.
Что может быть?
437 bananan
 
18.04.13
11:46
+(436) В таблице это поле тоже правильно , Смотрел Таблицу Значений - В таблице значений значение поля ЦенаКатегории - правильное, а в экранную Таблицу почему-то идут числа...
438 bananan
 
18.04.13
11:53
+(437) Люди добрые! Помогите, подскажите!!! В чем у меня проблема с выводом на экран?
439 bananan
 
18.04.13
12:12
Неужели все на футболе?
я нашел когда он вместо текстового поля Категорияцены вставляет циисла:
ТбЗн.Выгрузить(ТбРазом);
   ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн2.КоличествоСтрок()+ТбЗн3.КоличествоСтрок());
   Если ТбЗн2.КоличествоСтрок()>0 тогда
       ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1);
       Сообщить("2-е");
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   Если ТбЗн3.КоличествоСтрок()>0 тогда        
       ТбРазом.Заполнить(ТбЗн3, ТбЗн.КоличествоСтрок()+ТбЗн2.КоличествоСтрок()+1);
       Сообщить("3-е");
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   ТбРазом.ВыбратьСтроки();
Если посмотреть Таблицу Значений до Сообщить("2-е"); - то там в поле КатегорияЦены - идут правильные данные,а после
ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1);
в ТбРазом в поле КатегорияЦены - числа!!
Почему?!
440 bananan
 
18.04.13
12:54
большое спасибо за поддержку и, главное - за попомощь!
441 Ёпрст
 
18.04.13
13:20
Объедини 3 запроса в один через юнион и выкини заполнение ТЗ из кода.
442 bananan
 
18.04.13
13:23
(441) Я уже понял и увидел что ошибка происходит именно при заполнении /*вернее объединеии трех ТЗ..
А вотк как эти три запроса втыкнут ь в один - не знаю... а блин задача ГОРИТ!! :(
443 Ёпрст
 
18.04.13
13:25
(442)
пример

select
a
,b
,c
from table1

union all

select
a
,b
,c
from table2

select
a
,b
,c
from table3
444 bananan
 
18.04.13
13:32
(443)  Сейчас попробую, с обединением ТЗ уже 4 часа вожусь - ничего толком не получается..
445 bananan
 
18.04.13
13:47
А у меня там к каждому из запросов идет:
Если ВыбАгент.РазмерСписка()>0 Тогда
           ТекстЗапроса = ТекстЗапроса +" and isnull($ДокШН.Агент, $ДокШ.Агент) IN (SELECT Val FROM #СписокАгентов)";
       КонецЕсли;      
       Если ВыбСклад.РазмерСписка()>0 Тогда
           ТекстЗапроса = ТекстЗапроса +" and isnull($ДокШН.Склад, $ДокШ.Склад) IN (SELECT Val FROM #СписокСкладов)";
       КонецЕсли;      
Это как надо сделать, Понятно, что один раз Но...
А делаю текст Запроса потоп добавляю "выбранных, потом в ТекстЗапроса пишу union all
так же с Текстом Запроса№2
так же с Текстом Запроса№3
Да?
446 bananan
 
18.04.13
14:03
+(445) У меня там в одном из трех запросов Group By, а в других двох его нет... Блин, это теперь надо Group By в два других запроса вставлять?
Абидна.... Бляха муха, почти месяц работы - и теперь коту под хвост...
Но, непонятно почему он ТЗ обэединяет с глюком, именно после обэдинений трех ТЗ - вылазят числа вместо строк!!!
ЁПрст можешь посмотреть как я сделал Объединение 3 ТЗ в одну ТЗ?
Код:
ТбРазом = СоздатьОбъект("ТаблицаЗначений");                                    
   ТбРазом.КоличествоСтрок(ТбЗн.КоличествоСтрок());
   Если ТбЗн.КоличествоСтрок()>0 тогда
       ТбЗн.Выгрузить(ТбРазом,1,,);
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   
   Если ТбЗн2.КоличествоСтрок()>0 тогда
       ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн2.КоличествоСтрок());
       ТбРазом.Заполнить(ТбЗн2, ТбЗн.КоличествоСтрок()+1,,);
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;                                                                    
   Если ТбЗн3.КоличествоСтрок()>0 тогда                                          
       ТбРазом.КоличествоСтрок(ТбРазом.КоличествоСтрок()+ТбЗн3.КоличествоСтрок());
       ТбРазом.Заполнить(ТбЗн3, ТбЗн.КоличествоСтрок()+ТбЗн2.КоличествоСтрок(),,);
       Сообщить("После послденего");
       ТбРазом.ВыбратьСтроку();
   КонецЕсли;
   ТбРазом.ВыбратьСтроки();
447 viktor_vv
 
18.04.13
14:11
(446) У тебя там имена колонок перепутаны наверное. Вот у тебя в колонку с категорией цен залетает какое-нибудь поле с числом.
448 bananan
 
18.04.13
14:16
(447) Смотрел - вроде там все нормально... А 3 ТаблицыЗначений я сливаю в одну правильно?
449 viktor_vv
 
18.04.13
14:17
(447)+ Потому как вот эта твоя фраза очень смущает

"В таблице значений значение поля <<ЦенаКатегории>> - правильное, а в экранную Таблицу почему-то идут числа"

А тут ты пишешь

|,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
450 viktor_vv
 
18.04.13
14:19
Показывай уже все три select'a верхних из своих запросов.
451 bananan
 
18.04.13
14:20
(450) Первы:
|SELECT
       |    Данные.IDDoc as [Документ $Документ]
       |,   Данные.IdDocDef as Документ_вид
       |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
       |,   Данные.lineno_ as НомерСтроки_
       |,   Данные.Автор as [Автор $Справочник.Сотрудники]
       |,   Данные.Клиент [Клиент $Справочник.Клиенты]        
       |,   Данные.ЦенаВДок                                                                              
       |,     (Данные.Цена_Прих * (1+Данные.Ставка)) as МинЦена  
       |,     (Данные.СуммаСНДС/Данные.Количество) as ЦенаТовара
         |,     'прихідна' as КатегорияЦены
       |,   Данные.ИдентификаторИсторииЦены
       |,   case Данные.Цена_Прих
       |        WHEN  0 then 0
       |    /*ELSE ((Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    /*ELSE ((1.0*Данные.СуммаСНДС / Данные.Количество)/Данные.Цена_Прих-1)*100 end as Проц*/
       |    ELSE (((Данные.СуммаСНДС/Данные.Количество)/ (Данные.Цена_Прих * (1+Данные.Ставка)))-1)*100 end as Проц
       |,   'ціна нижча прихідної' Ошибка
452 bananan
 
18.04.13
14:21
2-й
   |SELECT
       |    IDDoc [Документ $Документ]
       |    ,IdDocDef Документ_вид
       |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
       |   ,lineno_ НомерСтроки_
       |    ,Автор [Автор $Справочник.Сотрудники]
       |,   Запрос.Клиент [Клиент $Справочник.Клиенты]        
       |,   Запрос.ЦенаВДок
       |,     0 as МинЦена  
       |,     ROUND(Запрос.СуммаСНДС/Запрос.Количество, 2) as ЦенаТовара
         |,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
       |,   Запрос.ИдентификаторИсторииЦены
       |,   case Запрос.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц
       |    , 'Не встановлена ціна' as Ошибка
       |FROM (
453 bananan
 
18.04.13
14:21
3-й
   |SELECT
       |    IDDoc [Документ $Документ]
       |    ,IdDocDef Документ_вид
       |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
       |   ,lineno_ НомерСтроки_
       |    ,Автор [Автор $Справочник.Сотрудники]
       |,   Запрос.Клиент [Клиент $Справочник.Клиенты]        
       |,   Запрос.ЦенаВДок                                                                              
       |,     ROUND(Запрос.Цена_Прих * (1+Запрос.Ставка),2) as МинЦена  
       |,     ROUND(Запрос.СуммаСНДС/Запрос.Количество, 2) as ЦенаТовара
         |,   Запрос.КаналСбыта as КаналСбыта
         |,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]
       |,   Запрос.ИдентификаторИсторииЦены
       |,   case Запрос.Цена_Прих
       |        WHEN  0 then 0
       |    ELSE ((Запрос.СуммаСНДС / Запрос.Количество)/Запрос.Цена_Прих-1)*100 end as Проц    
       |    ,'ціна нижча допустимої ='
       |    +cast(cast(Запрос.СуммаСНДС / Запрос.Количество as numeric(15,2)) as varchar(255))
       |    +' мінімальна='
       |    +cast(cast(Запрос.МинЦена*(1+Запрос.Скидка/100) as numeric(15,2)) as varchar(255))
       |FROM (
454 bananan
 
18.04.13
14:21
Все - больше запросов НЕТ (сегодня :(
455 viktor_vv
 
18.04.13
14:25
Из-за этого

       |,     'прихідна' as КатегорияЦены

         |,     Запрос.КатегорияЦены [КатегорияЦены $Перечисление.ТипыЦен]


в одной ТЗ у тебя тип значения строка, в другой Перечисление, вот оно и приводится к внутреннему идентификатору перечисления.
456 viktor_vv
 
18.04.13
14:26
У тебя в твоем пеерчислении ТипыЦен есть элемент "прихідна" ?
457 Mikeware
 
18.04.13
14:27
он реально тупой.
458 bananan
 
18.04.13
14:27
(455) А Как это исправить? Дело в том что мне в первом запросе надо чтобы он возврашал строку, а во вторых двух : Перечисление ТипыЦен
459 Privalov
 
18.04.13
14:28
(457) Всё-таки это большой проект какого-то тролля. Нельзя быть таким тупым и при этом работать.
460 viktor_vv
 
18.04.13
14:29
(458) Ну извини.
Разве что создай итоговую таблицу руками, для колонки Категория цен тип не определяй, тогда по идее можно туда впихнуть разные типы.
461 bananan
 
18.04.13
14:29
(459) А свою желч выливать на нормальных людей можно??!
462 viktor_vv
 
18.04.13
14:30
(458)+ А почему такая строгость со строкой, чем тебя там не устроит перечисление, оно легко в строку потом приводится.
463 bananan
 
18.04.13
14:35
(462) А как мне в первом запросе выдать что мол ЦенаКатегории - призыдна?
Т.е. как эту строку втиснуть в перечисление в SQL?
464 viktor_vv
 
18.04.13
14:35
(459) Я думаю троллю быстро надоело столько строчить, и за столько постов таки прокололся бы :).
А тут незавидно постоянство IQ.
465 viktor_vv
 
18.04.13
14:37
(463) Идентификатор у этого значения перечисления "прiхидна" какой в конфигураторе ?

вместо

      |,     'прихідна' as КатегорияЦены



пишешь

      |,     $Перечисление.ТипыЦен.ИдентификаторТвоегоЗначения as [КатегорияЦены $Перечисление.ТипыЦен]
466 Ёпрст
 
18.04.13
14:39
(463)

// |,     'прихідна' as КатегорияЦены
|,   :Парам as КатегорияЦены
.........

Запрос.УстановитьТекстовыйПараметр("Парам",Перечисление.нужныйВид.НужноеЗначение);
467 bananan
 
18.04.13
14:39
(465) Спасибо! Сейчас попробую так...
468 Ёпрст
 
18.04.13
14:39
или так
469 viktor_vv
 
18.04.13
14:40
(465) Хотя не уверен, может я с SQlite спутал.

Если не получится можешь параметром закинуть в запрос.
470 bananan
 
18.04.13
14:40
(465) Но делов в том что вПеречислении ТипыЦен нет значения прихыдна...
471 viktor_vv
 
18.04.13
14:42
(470) Засада :).
472 bananan
 
18.04.13
14:43
(471) И что никак это обойти нельзя?
Добавлять новый пункт в перечисление - НЕЛЬЗЯ....
473 viktor_vv
 
18.04.13
14:44
(470) Может там "закупочная" есть ?
474 bananan
 
18.04.13
14:45
нету там  Только Категори 1.. 9, ну и еще поару Кеш категорий...
475 Mikeware
 
18.04.13
14:45
(472) создать временную таблицу, и уложить туда пары {ИдПеречисления, СтроковоеПредставление}
ну и джойнить с ним во втором и третьем...
476 bananan
 
18.04.13
14:47
А можно не объединять ТЗ в одну а выводить каждую из ТЗ последовательно: вывел ТЗ1, вывел ТЗ2, вывел ТЗ3 и потом уж показал Таблицу на экран?
477 Mikeware
 
18.04.13
14:48
твое право. можешь даже на экран не выводить - сразу на печать.
а еще лучше - стирай сразу.
478 viktor_vv
 
18.04.13
14:49
(475) Меня терзают смутные сомнения :)) насчет понимания ТС написанного тобой :)).
479 bananan
 
18.04.13
14:50
(478) Что такое ТС?
480 viktor_vv
 
18.04.13
14:50
(476) Если тебе с объединенной таблице больше никаких манипуляций делать не надо, кроме вывода, то вперед.
481 bananan
 
18.04.13
14:51
(480) Сейчас попробую так сделать...
482 Mikeware
 
18.04.13
14:55
(478) с учетом (479) - посты (456), (459) и (464) засияли новыми красками...
483 viktor_vv
 
18.04.13
14:59
(482) Думаешь прокол :)? Мне почему-то кажется, что пока вполне гармонично.
484 bananan
 
18.04.13
15:14
Ничего не понимаю взял тупо без цикла скажем по первой ТаблицеЗначений:
   Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       Документ = ТбЗн.Документ;
       Если Подр = 1 тогда
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("ДокументИТовар");
           Конецесли;
       Иначе
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("Документ");
           Конецесли;
       КонецЕсли;
       Если Подр = 1 тогда
           Таб.ВывестиСекцию("ОшибкаТ");
       ИНАЧЕ
           Таб.ВывестиСекцию("Ошибка");
       КонецЕсли;
   КонецЦикла;
   
   Пока(ТбЗн2.ПолучитьСтроку()=1) Цикл
Ну и дальше - аналогично...
А на экран выходит пустая таблица в которой только шапка есть...
Или это надо делать не в конце скрипта, а после выполнени каждого из запросов?
485 bananan
 
18.04.13
15:18
+(484) "Это делать" подразумевается обход Таблицы Значений в цикле...
486 bananan
 
18.04.13
15:21
(485) Пробывл выводить ТаблицуЗначений в Таблицу сразу же после формирования ТЗ, - резудльтат тот же - выводится только шапка Таблицы....
:(
487 vinogradъ
 
18.04.13
15:22
bananan, зачем ты этим занимаешься?
488 bananan
 
18.04.13
15:30
(487) Жить за что-то надо...
489 bananan
 
18.04.13
15:32
Блин а в цикл обхода первой же ТЗ он не входит почему-то...
490 vinogradъ
 
18.04.13
15:34
выбратьстроки
491 bananan
 
18.04.13
15:35
(490) Точно! Выбрать строки из каждой ТЗ забыл!
492 ЧеловекДуши
 
18.04.13
15:36
(488) Иди в Политики, там смыслу будет больше :)
И жить есть За что, за страну :)
493 bananan
 
18.04.13
15:48
Блин, ЗАРАБОТАЛО!! Виноградарь - БОЛЬШОЕ СПАСИБО, в этой кутерьме я обо многом забыл напрояь!
494 bananan
 
18.04.13
15:48
(492) Прикинь, а у меня и программить получается!
495 Джон Вэйн
 
18.04.13
16:00
(494)  деточка, ты льстишь себе.. совсем..
496 bananan
 
18.04.13
16:00
+ Ребята вопрос на будущее,
Скажем как мне в данном (первом) Запросе создать временную таблицу типа Перечисление и заполнить ее одним значением ?
497 bananan
 
18.04.13
16:00
(494) Совсем - не совсем - а роезультат на экране!
498 viktor_vv
 
18.04.13
16:02
(496) Для одного значения нафик не нужна временная таблица. Или ты имел ввиду одни вид перечисления ?
(497) Ты уж извини, но то что на экране не совсем ты напрограммировал.
499 bananan
 
18.04.13
16:05
(498) А я и не говорю, что это я сам напрограммировал, - в данных трех запросах 90% помощь вашего форума...!
500 Mikeware
 
18.04.13
16:07
(496) ТКВ:Анахуа?
501 viktor_vv
 
18.04.13
16:08
(500) Ну типа надо развиваться дальше :).
502 bananan
 
18.04.13
16:09
(500) А щоб была Дохуа!
503 Mikeware
 
18.04.13
16:17
(502) Тебе советы - как молоко негру. "не поможет".
504 bananan
 
18.04.13
16:51
(503) И что же ТЫ советовал???
Сейчас вот вылезло: выдает и много раз (я так понимаю в каждой итерации обхода ТЗ):
1
Поле агрегатного объекта не обнаружено (КатегорияЦены)
Поле агрегатного объекта не обнаружено (Автор)
Поле агрегатного объекта не обнаружено (Ошибка)
Поле агрегатного объекта не обнаружено (КатегорияЦены)
Поле агрегатного объекта не обнаружено (Автор)
Поле агрегатного объекта не обнаружено (Ошибка)

Код именно этого куска такой:
   ТбЗн.ВыбратьСтроки();
   Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       Документ = ТбЗн.Документ;
       Клиент = ТбЗн.Клиент;        
       ТМЦ        = ТбЗн.ТМЦ;
       ЦенаВДок = ТбЗн.ЦенаВДок;
       МинЦена = ТбЗн.МинЦена;
       КатегорияЦены = ТбЗн.КатегорияЦены;
       Проц = ТбЗн.Проц;
       Автор = ТбЗн.Автор;
       Ошибка = ТбЗн.Ошибка;
       Сообщить("1");
       Если Подр = 1 тогда
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("ДокументИТовар");
           Конецесли;
       Иначе
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("Документ");
           Конецесли;
       КонецЕсли;
       Если Подр = 1 тогда
           Таб.ВывестиСекцию("ОшибкаТ");
       ИНАЧЕ
           Таб.ВывестиСекцию("Ошибка");
       КонецЕсли;
   КонецЦикла;
505 bananan
 
18.04.13
16:52
Все эти поля агрегатного объекта относятся к текущей таблице Значений или к Таблице (та что потом выводится на экран)?
506 bananan
 
18.04.13
16:55
Когда в коде по первой ТЗ закоментировал строки с этими полями - все-равно выдает все тоже, и.. по первой ТЗ - так ведь там
оле агрегатного объекта не обнаружено (КатегорияЦены)
а потом еще раз
оле агрегатного объекта не обнаружено (КатегорияЦены)
Почему?
507 bananan
 
18.04.13
16:57
+ Обявил я в начале процедуры эти пермеменные, но все-равно поле агрегатного объкьа необнаружено!!!
508 bananan
 
18.04.13
16:59
+ Хотя .. в неоторых итерация он только Один раз ругается что поле не обнаружено....
В чем глюк?
(Просьба о ДНК не писать...)
509 bananan
 
18.04.13
17:05
Судя по тому что в одних итерациях одно и тоэе поле "ругается" дважды - а в других только ОДИН раз ...
Как мне програмно определить есть ли такое поле у агрегатного объекта:
510 Ёпрст
 
18.04.13
17:09
Открой тз и посмотри, что в ней.
511 Ёпрст
 
18.04.13
17:09
есть ли колонки с такими именами
512 bananan
 
18.04.13
17:10
Открывал, смотрел ТАМ есть данные поля (ну и потом на экране они тоже есть и с адекватными значениями)!!!
513 bananan
 
18.04.13
17:10
(511) Почему в одной итерации на одно и тоже поле ругается ДВА раза, а в другой - только раз?
514 bananan
 
18.04.13
17:14
код:
Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       Документ = ТбЗн.Документ;
       Клиент = ТбЗн.Клиент;        
       ТМЦ        = ТбЗн.ТМЦ;
       ЦенаВДок = ТбЗн.ЦенаВДок;
       МинЦена = ТбЗн.МинЦена;
       КатегорияЦены = ТбЗн.КатегорияЦены;
       Проц = ТбЗн.Проц;
       Автор = ТбЗн.Автор;
       Ошибка = ТбЗн.Ошибка;
       
       Сообщить("1 !!!");
       Возврат;
Выдает:
1 !!!
Когда  заремарил обращение к полям ТбЗн - все равно выдает 1 !!!
515 bananan
 
18.04.13
17:15
Тоесть в данном случае нет несуществующего поля! В чем тогда проблема??? Чего она, зараза ругается!!!
516 bananan
 
18.04.13
17:17
+ когда написал так:
Пока(ТбЗн.ПолучитьСтроку()=1) Цикл
       //Документ = ТбЗн.Документ;
       //Клиент = ТбЗн.Клиент;        
       //ТМЦ        = ТбЗн.ТМЦ;
       //ЦенаВДок = ТбЗн.ЦенаВДок;
       //МинЦена = ТбЗн.МинЦена;
       //КатегорияЦены = ТбЗн.КатегорияЦены;
       //Проц = ТбЗн.Проц;
       //Автор = ТбЗн.Автор;
       //Ошибка = ТбЗн.Ошибка;
       //
       Сообщить("1 !!!");
       Если Подр = 1 тогда
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("ДокументИТовар");
               Возврат;
           Конецесли;
       Иначе
           Если ТбЗн.Документ<>Предыдущий тогда
               Предыдущий = ТбЗн.Документ;
               Таб.ВывестиСекцию("Документ");
           Конецесли;
       КонецЕсли;      
       Возврат;
выдает:
1 !!!
1 !!!
1 !!!
Поле агрегатного объекта не обнаружено (КатегорияЦены)
Поле агрегатного объекта не обнаружено (Автор)
Поле агрегатного объекта не обнаружено (Ошибка)
Все 6 строк показал.
В чем фиигня??
517 bananan
 
18.04.13
17:22
Ларчик просто открывался у меня у всех этих полей в таблице была Расшифровка ТбРазом....
518 Wobland
 
18.04.13
18:21
пля, я тоже был таким идиотом. через пару месяцев прошло. с восьмёркой буксовал, правда, с полгода. с УФ тоже пару месяцев. теперь обратно буксую с семёркой зачастую. вывод: максимум - полгода
519 bananan
 
18.04.13
18:23
еще один вопрос, он давно просто сейчас вспомнил вывожу я секции, кажадя секция имеет горизонтальную рамку с лева скажем
так вот, есть часто-густо удет секция с левой рамкой, а потом пустая (без ничего) строка небольшой высоты, потом секция опять таже (это в цикле).
Почему возникают зазоры межде секциями при итерациях и как этого избежать?
520 bananan
 
18.04.13
18:24
(518) А вот попробуй не забуксуй когда запрос "горит" а на форуме тебе всякие пля советуют!
521 Wobland
 
18.04.13
18:28
(520) есть конкретный момент, буксую. не ною на мисте, а разбираю вопрос/запрос на мелкие задачи, дроблю, делю, упрощаю, снимаю группировки, чтоб найти конкретного п...са (документ) с нетрадиционными движениями
522 Wobland
 
18.04.13
18:28
+(521) а горит
523 Wobland
 
18.04.13
18:31
ваще-то ною ;)
Хроники истины (около сотого поста)
но применяю мозх и работаю самостоятельно
524 Wobland
 
18.04.13
18:55
а нашёл я конкретного п..са в частном случае. человек приходит в магазин и выражает желание приобрести одну штуку шпательной лопатки. в регистре продажи делается две записи:
количество -1, продстоимость 0
количество 2, продстоимость 49.90
а в запросе получаю ПродСтоимость 0
|    sum(ISNULL(Продажи.ПродСтоимость, 0)) as ПродажиПродСтоимость,
...
|    LEFT JOIN
|    (SELECT
|        $регПродажи.Номенклатура AS Номенклатура,
|        SUM($регПродажи.Количество) AS Количество,
|        SUM($регПродажи.ПродСтоимость) AS ПродСтоимость,
|        SUM($регПродажи.ПродСтоимостьВ) AS ПродСтоимостьВ,
|        SUM($регПродажи.ПродСтоимость)/SUM(CASE WHEN $регПродажи.Количество=0 THEN 1 ELSE $регПродажи.Количество END) AS ЦенаПродажи
|    FROM
|        $Регистр.Продажи AS регПродажи
|    WHERE
|        регПродажи.IDDoc=:Источник
|    GROUP BY
|        $регПродажи.Номенклатура) AS Продажи

завтра поговорим, если не найду баг, буду спрашивать у мисты
525 Wobland
 
18.04.13
19:00
(524) описался
Номенклатура: тот_шпатель, количество -1, продстоимость 49.90;
шпатель; количество 2; продстоимость 0
почему Сумма(исНулл(ПродСтоимость, 0)) говорит, что 0?
526 Wobland
 
18.04.13
19:02
ну и так.. в качестве воспитывания ТС
   |    SUM(ISNULL(Продажи.ЦенаПродажи, 0)*(CASE WHEN ISNULL(ПартииО.Количество, 0)=0 THEN ОтчётыККМ.Количество ELSE ПартииО.Количество END))
   |        -SUM(ISNULL(ПродажиВ.ЦенаПродажи, 0)*ISNULL(ПартииВ.Количество, 0)) AS ИтогПродаж,
из этого я раздробил и вывел нулевую сумму в регистре продаж
527 bananan
 
18.04.13
19:04
Воблан - у тебя, как всегда пустые слова. а вопросы что я задавл перед твоим ..сом, я уже решил сам. Без тебя о, виликай и мандучий админь! :)
528 Wobland
 
18.04.13
19:05
(527) ты не обзывайся, админстовать я бросил лет 6 назад