|
Опять прямой запрос :( Ø (длинная ветка 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
|
(945)См http://us.ua/1089082/
|
|||
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) а об этом мы узнаем в следующей серии
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |