Имя: Пароль:
1C
Юмор
Опять прямой запрос :(
Ø (длинная ветка 11.04.2013 14:14)
, ,
0 bananan
 
26.03.13
19:19
Дело в том, что к запросам, которые вы мне помогали написать (или, скорее вы их написали) есть некоторые замечания клиента (шефа моего).
Так вот в запросе №2
|SELECT
   |    IDDoc [Документ $Документ]
   |    ,IdDocDef Документ_вид
   |   ,ТМЦ   [ТМЦ $Справочник.ТМЦ]
   |   ,lineno_ НомерСтроки_
   |    ,Автор [Автор $Справочник.Сотрудники]                
   |    ,Клиент [ Клиент $Справочник.Клиенты]        
   |    , 'Не встановлена ціна катгорії' as Ошибка
   |FROM (                        
   |SELECT
   |  Запрос.*
   | ,cast((SELECT TOP 1 История.Value FROM _1SCONST История(NOLOCK) WHERE История.OBJID=Запрос.ТМЦ AND История.ID=Запрос.ИдентификаторИсторииЦены AND История.DATE<=Запрос.ДатаДок ORDER BY История.DATE DESC) as numeric(10,2)) ЦенаДляКаналаСбыта
ЦенаДляКаналаСбыта мне нужна в саомом внешнем запросе (т.е. после первого оператора селект, пробывал и так и сяк - никак не получается.
Подскажите, ребята, пожалуйста!
903 Wobland
 
10.04.13
13:25
(901) не хочу
904 bananan
 
10.04.13
13:41
Народ! подскажите, как мне добраться к полю Адрес из справочника Доставка (isnull($ДокШН.Доставка, $ДокШ.Доставка) as [Доставка $Справочник.Доставка])
905 orefkov
 
10.04.13
13:57
Думаю, что за ветка под штуку постов про запрос?
Захожу - действительно, запрос. На 10ти страницах уже.
Удивительно.
906 Wobland
 
10.04.13
13:59
(905) уже не первая
907 bananan
 
10.04.13
14:04
Всем (кроме  Wobland) - до встречи, с адресом доставки сам разобрался...
908 In123
 
10.04.13
14:26
(905) Это норма. Тут так принято.
909 In123
 
10.04.13
14:27
bananan Халявщик еще тот )))
910 bananan
 
10.04.13
14:36
Ок, запрос - работает и работает в основном правильно, но...
Выбираю в окне ТМЦ три товара для запроса выводит результаты и там кроме трех выбраных товаров есть еще несколько других товаров.
Скорее всего, я думаю, это что-то в БД неправильно записано, хотя... мой опыт работы с SQL... так что может и я что неправильно в запросе написал...
Текст скрипта без части  с выводом таблицы такой:
   ТекстЗапроса = "
       | 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 (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($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар";    
   Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
   Запрос.УложитьСписокОбъектов(ВыбАгент, "#СписокАгентов","Агент");          
   Запрос.УложитьСписокОбъектов(ВыбКлиент, "#СписокКлиентов","Клиенты");          
   Запрос.УстановитьТекстовыйПараметр("НачДата", ДатаС);  
   Запрос.УстановитьТекстовыйПараметр("КонДата", ДатаПо);  
   Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница", ВыбЕд);  
   //Запрос.Отладка(1);
   ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Подскажите в чем проблема (почему в выбор попадают невыбранные товары)?
911 Туц
 
10.04.13
15:29
Это какой-то сериал, что-то похожее на лену из полипропилена.
912 Wobland
 
10.04.13
16:47
(910) дай текст готовый запроса, глаза ломаются так смотреть
913 viktor_vv
 
10.04.13
17:03
(912) Я так подозреваю, что там не в запросе дело, а в его ВыбТМЦ, где-то выше проскакивало, что это список с метками.
И под выбраны он подразумевает флажки. А во времянку грузит весь список.
Но от него хрен добьешся вразумительного ответа, что такое ВыбТМЦ.
914 vinogradъ
 
10.04.13
17:10
(913) угу, причем речь шла, что в списке и элементы и группы могут быть
915 Sensodin
 
10.04.13
17:14
закладка
916 viktor_vv
 
10.04.13
17:15
(915) К пятнице готовишься :).
917 batman69
 
10.04.13
17:48
(916) До пятницы кончится ветка ))
918 Сниф
 
10.04.13
18:26
1С++ с СКД еще не скрестили? Типа 7.7 с помощью 1С++ формирует XML и дает команду специальной базе 1С8 сформировать на СКД табличный документ и вернуть его в 7.7.
919 Wobland
 
10.04.13
18:35
(918) да нам бы select 'Hello, world!' пока
920 Mikeware
 
10.04.13
19:10
(918) можно. только зачем?
921 Mikeware
 
10.04.13
19:12
(918) можно даже проще :-)
квериконсоль, настраиваешь отображение полей, делаешь вывод в табличный документ, и вуаля...
день работы.
922 Сниф
 
11.04.13
01:47
(920) ну, вдруг кто на семерке решил навсегда задержаться =) Тогда 1С++ даст ему скорость выборки данных, а вспомогательная базка на 1С - сформирует из выборки красивый отчет. Вручную это делать, как я помню, крайне утомительно.

А что за квериконсоль?)
923 Mikeware
 
11.04.13
05:41
(922) ну, это для тех, кто работает на семерке :-) Без восьмерочных костылей :-)))
924 ЧеловекДуши
 
11.04.13
07:58
(919) Оппонент отказывается от традиционного познания прекрасного... Его больше всего интересует анальный метод познания SQL запросов (но почему то он их называет скриптами, как заядлый Web программист) :)
925 bananan
 
11.04.13
10:34
Даю текст запроса (когда есть выбранные тмЦ)
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 :КонДата~)and (isnull($ДокС.ТМЦ, $ДокН.ТМЦ) IN (SELECT val FROM #СписокТМЦ))group by isnull($ДокШ.Агент, $ДокШН.Агент), isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар, $Доставка.Адрес, isnull($ДокШН.Доставка, $ДокШ.Доставка)
ORDER BY isnull($ДокШ.Агент, $ДокШН.Агент),isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар:
Вообще по-моему в самом запросе вроде как все правильно, остается окно выбора ТМЦ...
У меня вызывает подозрение:
Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");
926 ЧеловекДуши
 
11.04.13
10:36
(925) Узнаю, твой подчерк... ты его уже месяц трешь.
"Что, Данила Мастер, не получается каменный цветок?" (с)
927 ЧеловекДуши
 
11.04.13
10:37
+(925)>>> Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");

Нормальный метод:

УложитьСписокОбъектов(<?>,<?>,<?>)
Синтаксис:
PutObjectList(ObjList, strTableName, strRefKinde)
Назначение:
сохраняет список объектов во временной таблице MS SQL. Идентификаторы
объектов из списка ObjList сохраняются во временной таблице strTableName. Таблица
имеет единственное поле val char(9). Имя таблицы должно начинаться с символа «#».
Если strRefKinde идентификатор иерархического справочника, то таблица будет
содержать элементы иерархически принадлежащие группам переданным в списке.
(Подобно оператору «в» стандартного языка запросов 1С.)
Параметры:
- ObjList (СписокЗначений/АгрегатныйТип): список для сохранения или
элемент справочника, группа справочника, документ и т.п.;
- strTableName (строка): имя таблицы;
- strRefKinde (строка): вид справочника для иерархического включения элементов или вид плана счетов для иерархического включения счетов;
928 bananan
 
11.04.13
11:01
(926) С этим скриптом я работаю третий день. а не месяц.
(927) У меня все вроде правильно...
А можно ли в 1С как-то посмотреть реальный текст запроса?
929 Ёпрст
 
11.04.13
11:05
(928)
мд = СоздатьОбъект("MetaDataWork");
   Сообщить(мд.ОбрМетаСКЛ(ТекстЗапроса));
930 bananan
 
11.04.13
11:07
(929) я применил Запрос.Отладка(1);
он выдает:

select    
   Таб.Товар as [Товар $Справочник.ТМЦ]
   ,isnull(ДокШН.sp4784, ДокШ.sp4783) as [Доставка $Справочник.Доставка]
   , Доставка.sp4782 as Адрес
   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент, 1)) as КоличествоВЕд
   ,isnull(ДокШ.sp1158, ДокШН.sp4216) as [Клиент $Справочник.Клиенты]
   ,isnull(ДокШ.sp4332, ДокШН.sp4333) as [Агент $Справочник.Агент]        
from
   (
       select
           ДокС.sp1171 as Товар
           ,ДокС.iddoc as Документ
           ,ДокС.sp1173*ДокС.sp1174 as Количество
       from  dt1157 as ДокС (nolock)
   union all
       select
           ДокН.sp4235
           ,ДокН.iddoc
           ,ДокН.sp4237*ДокН.sp4238 as Количество
   from  dt4215 as ДокН (nolock)
   )as Таб
inner join                                
   _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
   and Жур.iddocdef in (1157,4215)
   and Жур.Date_Time_IDDoc BETWEEN '20121220' and '20121220Z'
   and Жур.Closed&1 = 1
   left join dh1157 as ДокШ (nolock) on ДокШ.iddoc = Жур.iddoc and Жур.IdDocDef = 1157        
  Left join dh4215 as ДокШН (nolock) on ДокШН.iddoc = Жур.iddoc and Жур.IdDocDef = 4215
  left join dt1157 as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = 1157
  left join dt4215 as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = 4215
  left join sc4780 Доставка (nolock) on Доставка.id = isnull(ДокШ.sp4783, ДокШН.sp4784)
left join (
    select  
          max(Спр.sp115) as Коэффициент
           ,Спр.parentext as Владелец
    from sc113 as Спр (nolock)
    where Спр.sp114 ='    1F   '
          and Спр.sp115>0
          and Спр.ismark=0
    group by Спр.parentext
  ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
 WHERE (Жур.Date_Time_IDDoc BETWEEN '20121220' AND '20121220Z')and (isnull(ДокС.sp1171, ДокН.sp4235) IN (SELECT val FROM #СписокТМЦ))group by isnull(ДокШ.sp4332, ДокШН.sp4333), isnull(ДокШ.sp1158, ДокШН.sp4216), Таб.Товар, Доставка.sp4782, isnull(ДокШН.sp4784, ДокШ.sp4783)
ORDER BY isnull(ДокШ.sp4332, ДокШН.sp4333),isnull(ДокШ.sp1158, ДокШН.sp4216), Таб.Товар
Здесь вроде все правильно...
931 Mikeware
 
11.04.13
11:08
Если "все правильно" - какие тогда вопросы?
932 Ёпрст
 
11.04.13
11:08
>>>>У меня вызывает подозрение:
Запрос.УложитьСписокОбъектов(ВыбТМЦ, "#СписокТМЦ","ТМЦ");

Ага.. Справочник с видом "ТМЦ" есть у тебя в дереве метаданных ?
:))
933 Mikeware
 
11.04.13
11:09
(932) А ты сам-то как думаешь? :-)
934 Wobland
 
11.04.13
11:10
(929) а я спецгалку в 1CQA жмакаю ;)
935 bananan
 
11.04.13
11:23
(932) Да, есть такой справочник.
936 vinogradъ
 
11.04.13
11:25
(935) открой все-таки тайну: что такое ВыбТМЦ?
937 bananan
 
11.04.13
11:28
(936) Не знаю, как это правильно - назвать. это окно на форме (реквизит диалога) с типом справочник.ТМЦ...
938 Wobland
 
11.04.13
11:30
дельфист сказал бы "едит-бокс"
939 In123
 
11.04.13
11:34
(938) +100
940 vinogradъ
 
11.04.13
11:37
(937) тогда что за " ВыбТМЦ.РазмерСписка()>0 "
941 Wobland
 
11.04.13
11:38
(940) хм.. лист-бокс?
942 Ёпрст
 
11.04.13
11:39
это какой-то неправильный мёд..
запрос не очень верный.
943 Ёпрст
 
11.04.13
11:40
вот это вот всё нахрена там ?

  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 = $ВидДокумента.РасходнаяНакладнаяН
944 Wobland
 
11.04.13
11:40
>окно на форме (реквизит диалога) с типом
форма ж сама по себе окно.. и как элемент управления может участвовать в запросе? значит, всё-таки реквизит, визуализирующийся на форме непонятно чем. значит, никаких размеров списка. а они есть... или это во мне говорит восьмёрочный взгляд на мир?
945 vinogradъ
 
11.04.13
11:45
Скрин с ВыбТМЦ на форме в студию
946 bananan
 
11.04.13
11:45
(943) соединения, которые объявлют алиясы.
може и неправильно, но я не знаю как это сделать иначе...
947 bananan
 
11.04.13
11:49
948 Wobland
 
11.04.13
11:50
(946) вопрос: "зачем?" ответ: "соединения"
949 vinogradъ
 
11.04.13
11:50
(947) список с пометками?
950 Wobland
 
11.04.13
11:51
даю справку: тот же радикал удобней для скриншотов
951 vinogradъ
 
11.04.13
11:52
+(949) выбор групп возможен?
952 bananan
 
11.04.13
11:55
(951) Да - выбор групп - возможен
953 bananan
 
11.04.13
11:57
(950) Это форум по расспространению скриншотов?
(948) Внимательно прочитай ответ, а потом уж стебись!
954 Wobland
 
11.04.13
11:58
(953) нет. (948) не сторнирую
955 Ёпрст
 
11.04.13
11:59
(946) открою тебе тайну - в твоём запросе они не нужны.. совсем
956 bananan
 
11.04.13
12:12
(955) Возможно - у меня конечно опыт такой работы мизерный...
Но, как написать без них - не знаю. И написал так как знаю...
Но сейчас вопрос в том ПОЧЕМУ запрос мне выдает НЕ выбранные ТМЦ? И как с этим бороться?
957 Wobland
 
11.04.13
12:21
предлагаю заподозрить истинность всегда: (isnull(ДокС.sp1171, ДокН.sp4235) IN (SELECT val FROM #СписокТМЦ)
958 sapphire
 
11.04.13
12:29
(956) Написать нормальный запрос и научиться человечески передавать параметры в оный.
959 sapphire
 
11.04.13
12:29
(957) А оно там вообще надо?
960 Wobland
 
11.04.13
12:31
(959) хм, задумался.. надо из документов дёргать только нужную номенклатуру, не? //в имеющийся запрос традиционно не вникаю
961 bananan
 
11.04.13
12:32
(957) Значит - не только я буксую со своим мизерным опытом написания прямых запросов?
(958) Чем мой запрос "ненормальный"?
(957) а оно так невсегда - для того isnull(ДокС.sp1171, ДокН.sp4235) IN (SELECT val FROM #СписокТМЦ) и используется в секции WHERE
962 bananan
 
11.04.13
12:34
(960) почти так... Надо выбрать документы в которых имеется выбранная номенклатура, ну там еще проверка Агентов и Клиентов (но с этими двумя условиями - вроде все нормально работает)
963 Wobland
 
11.04.13
12:34
(961) я тебя удивлю, если скажу, что у меня тоже есть типа прямой запрос, с которым у меня не всегда всё хорошо (время от времени задача меняется и уточняется)?
964 Ёпрст
 
11.04.13
12:34
Ну, так хотя бы.. хотя тоже, не комильфо


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  Таб.Товар IN (SELECT val FROM #СписокТМЦ)
group by
 isnull($ДокШ.Агент, $ДокШН.Агент)
,isnull($ДокШ.Клиент, $ДокШН.Клиент)
,Таб.Товар
,$Доставка.Адрес
,isnull($ДокШН.Доставка, $ДокШ.Доставка)
ORDER BY isnull($ДокШ.Агент, $ДокШН.Агент),isnull($ДокШ.Клиент, $ДокШН.Клиент), Таб.Товар
965 bananan
 
11.04.13
12:39
(964) Сейчас проверю твой вариант запроса... Т.е. ты переставил проверку на наличие выбраных ТМЦ в подзапрос... Интерестный вариант... ну там мелочи по поводу того если нет ниодного выбраного ТМЦ... (Юзера интересуют Агенты, которые продали за определенный период хоть что-то)...
Ни и ты убрал проверку на период создания документов...
966 Wobland
 
11.04.13
12:40
+(963) в частности, принял сомнительное решение считать количество проданных услуг 1 (собираю ОтчётыККМ). количество и сумму беру из партий, а в партиях нулевое количество услуг (глазами в движения документа смотрел). кто кинет в меня какашкой? ;)
967 Ёпрст
 
11.04.13
12:41
(965) какой подзапрос ?
Разуй глаза!
968 Ёпрст
 
11.04.13
12:41
И проверка периода есть - она в иннер джоине
969 sapphire
 
11.04.13
12:45
(966) Услуги по продажам не проходят?! :)))
970 bananan
 
11.04.13
12:47
(968) пардон,  просто неправильно сказал... Проверил твой вариант - с ТМЦ работает нормально, агенты и клиенты пока не проверял
971 Wobland
 
11.04.13
12:49
(969) только количество. скрин показать?
972 Wobland
 
11.04.13
12:53
973 In123
 
11.04.13
12:57
Близится к тыще...
974 Wobland
 
11.04.13
12:59
(973) к третьей тысяче, если учитывать только полные тыщи
975 In123
 
11.04.13
12:59
(974) К третьей, ох сколько их еще будет...
976 Wobland
 
11.04.13
13:04
а вот ещё вопрос имею. хочется сделать РС соответствия кодов организаций и складов в семёрке справочникам в восьмёрке. измерения: ВидСправочника, Код, ресурс: ссылка (типа организация или склад). ВидСправочника чем делать?
строка - долго (это у меня религия такая)
число - непонятно
перечисление - трудно
дата - бессмысленно
булево - некошерно...
977 bananan
 
11.04.13
13:05
(968) ТАк то воно так але тришечки не так...
В окне выбора я выбираю три ТМЦ, он мне выдает тех клиентов, что взыли хотя бы один из трех ТМЦ, а мне надо только те что взяли все ТМЦ из окна выбора!
Как это сделать?
978 bananan
 
11.04.13
13:06
(976) В зоопарк сходи - там для тебя будет все понятно, нетрудно, со смыслом и кощерно!
979 Wobland
 
11.04.13
13:08
(978) а что там?
980 sapphire
 
11.04.13
13:09
(976) А зачем РС?
981 bananan
 
11.04.13
13:09
(979) в том числе и кошерная вобла... :)
982 Wobland
 
11.04.13
13:11
(980) эмм.. а что же?
983 sapphire
 
11.04.13
13:11
(979) Это долбобей так шуткует.
Смеяться при слове "лопата" типа...
984 sapphire
 
11.04.13
13:12
(982) Не использовать коды, а использовать ID в 7.7 и ими же заполнять поля в справочнике - добавить поле нетрудно же
985 In123
 
11.04.13
13:12
Так он еще и шутник.. ни фига се
986 Wobland
 
11.04.13
13:14
(984) а вот не хочу конфигурацию ломать. и потом есть уже:
Функция ПолучитьСкладПоКоду(КодСклада)
Функция ПолучитьОрганизациюПоКоду(КодФирмы)
987 bananan
 
11.04.13
13:18
+ И непонятно почему с агентом и клиентом проверка типа:
and (isnull($ДокШ.Агент, $ДокШН.Агент) IN (SELECT val FROM #СписокАгентов)) работает правильно, а с ТМЦ надо проверять так:
and Таб.Товар IN (SELECT val FROM #СписокТМЦ)
(ну и опять же с ТМЦ - в запрос попадают любые клиенты поторые купили хотябы Один из указанных ТМЦ (а ндо чтобы выбирались только те что купили ВСЕ из выбраных ТМЦ)
988 Ёпрст
 
11.04.13
13:25
(977)
типа того:

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)
989 bananan
 
11.04.13
13:43
(988) Спасибо! Вроде понял. позже попробую. #tmptable  - это выбранные (#СписокТМЦ))?
990 Ёпрст
 
11.04.13
13:46
(989) да, table  - это твой запрос что сейчас, без всяких условий на ТМЦ.
991 bananan
 
11.04.13
14:03
А зачем проверка: t1.client =t2.client? Юезр может выбрать только ТМЦ..
992 samozvanec
 
11.04.13
14:06
капец. на десятой странице все еще разговаривают про запрос! про ТОТ ЖЕ запрос, что в сабже!!! о_О
993 samozvanec
 
11.04.13
14:08
что же предпримет ТС, когда ветку закроют, а вопросы так и не решены?)
994 bananan
 
11.04.13
14:08
(990) Написал так:
ТекстЗапроса = "
       | 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)";
       КонецЕсли;
   не пропускает:
]Incorrect syntax near the keyword 'from'.
995 samozvanec
 
11.04.13
14:09
(994) ошибка рядом со словом "from"
996 bananan
 
11.04.13
14:10
(995) Ошибка у тебя в голове! Не спамь!!!
997 Wobland
 
11.04.13
14:10
998 samozvanec
 
11.04.13
14:10
(996) ну так ты долго будешь искать
999 Wobland
 
11.04.13
14:11
девятьсот девяносто девять!
1000 samozvanec
 
11.04.13
14:11
ТЫЩА
1001 bananan
 
11.04.13
14:13
(990) А что такое t1?
1002 Wobland
 
11.04.13
14:14
(1001) а об этом мы узнаем в следующей серии
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.