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

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

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

v7: Оптимизация запроса
Я
   bananan
 
25.12.12 - 11:35
Когда я задал обрботку 10 дней он работал 00:05:59, когда я ему задал тужу обработку но в функции ПересчетВЯщики(ТМЦ, Количество) в первой же строке вызвал Возврат - он работал 00:03:34 (на 2 минуты и 25 секунд меньше). Т.е. именно функция ПересчетВЯщики() сильно тормозит. К подчиненному справочнику Справочник.ЕдИз надо как-то иначе обращаться (не в функции, в функции опять же циклы). Т.е. е справочнику Справочник.ЕдИз надообращатьс через Запрос строго через запрос, может выполнять для этого второй Запрос. Подскажите как это сделать?
 
 
   Ёпрст
 
101 - 25.12.12 - 14:59
(100) им лет то сколько ?
Да и.. привыкнут без мамы.
   Ёпрст
 
102 - 25.12.12 - 14:59
Новую им найдешь, здоровую.
   bananan
 
103 - 25.12.12 - 15:00
(101) Дочери 18,5 - студентка, сыну - 15,5 (школьник)
   Ёпрст
 
104 - 25.12.12 - 15:02
(103) :)))))
да уж..
Тут даже думать не надо - дети сами по себе в таком возрасте,
разводись не думая, жене пинка под зад.
   bananan
 
105 - 25.12.12 - 15:03
(104) Да мне ее жалко и детей. Что их ждет если они будут с мамой - алкоголичкой?
   Ёпрст
 
106 - 25.12.12 - 15:05
(105) она еще и бухает ? :))
наркоша -алкоголик.. зачет
   bananan
 
107 - 25.12.12 - 15:08
(106) насчет наркоты - мы с тобой тут не поняли друг-друга; нарктой она не балуется
   Ёпрст
 
108 - 25.12.12 - 15:09
(107) пилять.. всё у тебя через одно место, даже с терминами.
   bananan
 
109 - 25.12.12 - 15:09
по поводу запроса сделал так:
ТекстЗапроса = "
        |SELECT
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС
        |INNER JOIN
        |    $Документ.РасходнаяНакладная as Док ON Док.IDDoc = ДокС.IDDoc
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.ТМЦ";
;
    Запрос=СоздатьОбъект("ODBCRecordset");
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
Дык ругается:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near 'Жур'
Чем ему Жур не нравится?
   Ёпрст
 
110 - 25.12.12 - 15:09
А жену тогда кодируй, раз в месяц, пока не поумнееет
 
 Рекламное место пустует
   Ёпрст
 
111 - 25.12.12 - 15:10
(109) and Жур.Date_Time....
   bananan
 
112 - 25.12.12 - 15:11
(108) может здесь разлчия в украинском и руссокм языках. У нас (87) вмазанный шоле? - это пьяния чи що :)
   Ёпрст
 
113 - 25.12.12 - 15:11
и вот это
INNER JOIN
        |    $Документ.РасходнаяНакладна
тут как бэ не нужно
   Ёпрст
 
114 - 25.12.12 - 15:12
(112) вмазанный - находящийся в наркотическом опьянении
   bananan
 
115 - 25.12.12 - 15:13
(111) Написал так:
|SELECT
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС
        |INNER JOIN
        |    $Документ.РасходнаяНакладная as Док ON Док.IDDoc = ДокС.IDDoc
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       AND Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.ТМЦ";
выдает:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 11: Incorrect syntax near 'Жур'.
   Ёпрст
 
116 - 25.12.12 - 15:14
(115) см (111)
   Ёпрст
 
117 - 25.12.12 - 15:14
and пропущен в условии
   bananan
 
118 - 25.12.12 - 15:15
(116) блин смотрб в книгу вижу фигу
   bananan
 
119 - 25.12.12 - 15:16
Написал так:
|INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
 
       |                       AND Жур.Closed & 1 = 1
Ругается:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'AND'.
   varelchik
 
120 - 25.12.12 - 15:18
(115)
Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       AND Жур.Closed & 1 = 1
смотрим внематочно
 

Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND   AND Жур.Closed & 1 = 1
   varelchik
 
121 - 25.12.12 - 15:18
нафига 2 and подряд?
   bananan
 
122 - 25.12.12 - 15:20
(121) Уже исправил, спасибо. Изучаю дадьше
   bananan
 
123 - 25.12.12 - 15:40
Ёпрст4  по поводу запроа к подчиненному справочнику что-то типа так (понятно что здесь совсем не то, но...):
ТекстЗапроса = "
|SELECT
|    Жур.IDDoc [Док $Документ], 
|    Жур.IDDocDef Док_вид
|FROM 
|    _1Sjourn Жур
|INNER JOIN 
|    _1SCRDOC Отбор ON Отбор.ChildID = Жур.IDDoc AND
|                      Отбор. MDID = 0 AND
|                    Отбор.ParentVal = :ВыбДок* AND 
|                    Отбор.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~";  
?
Но как мне дотучаться до справочника по конкретному ТМЦ?
   Ёпрст
 
124 - 25.12.12 - 15:44
(123) не угадал.
   Ёпрст
 
125 - 25.12.12 - 15:48
можно либо коррелированный подзапрос в селекте, для получения коэффициента, либо соединение с подзапросом, в котором будут выбраны вся номенклатура и коэффициенты для нужной единицы измерения)
   bananan
 
126 - 25.12.12 - 15:51
(125) УхЮ как сложно... Голова совсем не варит
   bananan
 
127 - 25.12.12 - 15:52
+(125) С подзапросами никогда не работал, а об соединении с подзапросмо молчу
   bananan
 
128 - 25.12.12 - 16:12
чего-то я не понимаю написал так:
 ТекстЗапроса = "                             
        |SELECT
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    $ДокС.Ед as [Товар $Справочник.ЕдИзм],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.ТМЦ";
ругается:
State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'ДокС.SP1175' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
   bananan
 
129 - 25.12.12 - 16:21
+(128) т.е. я в РАБОТАБЩИЙ ЗАПРОС:
    |SELECT
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.ТМЦ";
добавил еще одно поле для выбора
|SELECT
        |    $ДокС.Ед as [Товар $Справочник.ЕдИзм],
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
при этом GROUP BY меня перестал понимать :(
   Ёпрст
 
130 - 25.12.12 - 16:35
(129)дык в гроуп бай кто добавлять поле будет ?
   bananan
 
131 - 25.12.12 - 16:42
(130) полный код запроса:
|SELECT
        |    $ДокС.Ед as [Товар $Справочник.ЕдИзм],
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
|FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС in
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.ТМЦ";
   Ёпрст
 
132 - 25.12.12 - 16:45
GROUP BY
        |    $ДокС.ТМЦ,$ДокС.Ед
   bananan
 
133 - 25.12.12 - 16:51
(132) Спасибо. сейчас попробую
 
 
   bananan
 
134 - 25.12.12 - 16:53
(132) Ура!!! Работает!! Сейчас буду пробывать делать реальный запрос
   bananan
 
135 - 25.12.12 - 17:02
(132) Блин, что-то я круто туплю... Работало. Добавил в начале скрипта код:
   НачДата = НачМесяца(ТекущаяДата());
   КонДата = ТекущаяДата();
Стал он ругаться:
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'in'.
Что за фи фигня? Или он у меня раньше не работал?
   bananan
 
136 - 25.12.12 - 17:15
+(135) Кажется я понял: у меня раньше работал такой запрос:
|SELECT
|    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
|    SUM($ДокС.Кво) as Количество
|FROM
|    $ДокументСтроки.РасходнаяНакладная as ДокС
|INNER JOIN
|    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
|                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|                       Жур.Closed & 1 = 1
|GROUP BY
|    $ДокС.ТМЦ";
ане этот:
|SELECT               
        |   $ДокС.Ед as [Товар $Справочник.ЕдИзм],
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС in
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.ТМЦ,$ДокС.Ед";
   bananan
 
137 - 25.12.12 - 17:20
+(136) Насколько я понимаю, ошибка здесь:
    |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
   Ёпрст
 
138 - 25.12.12 - 17:23
as ДокС in

че то у тя со зрением - однозначно
   Ёпрст
 
139 - 25.12.12 - 17:24
in выкини оттуда
   bananan
 
140 - 25.12.12 - 17:38
(138) не со зрением,. а с головой
   bananan
 
141 - 25.12.12 - 17:39
(139) Теперь, точно - роаботает, мне еще нужен номер документа
набрал:
|SELECT        
        |   $ДокС.DocNo as НомерДок,
        |   $ДокС.Ед as [Ед. измерения $Справочник.ЕдИзм],
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    $ДокС.DocNo,$ДокС.ТМЦ,$ДокС.Ед";
Выдает:
Meta name parser error: поле таблицы не найдено "$ДокС.DocNo
   Ёпрст
 
142 - 25.12.12 - 17:40
| Жур.DocNo
   bananan
 
143 - 25.12.12 - 17:45
(142) Спасибо. А Жур - это типа синоним на журнал документов?
   Ёпрст
 
144 - 25.12.12 - 17:46
(143) яя, натюрлих
   Ёпрст
 
145 - 25.12.12 - 17:46
только не синоним, а псевдоним таблички  _1SJourn в тексте запроса
   bananan
 
146 - 25.12.12 - 17:48
(145) Еще раз спасибо!
   bananan
 
147 - 25.12.12 - 18:03
Тут еще подводных (для меня) камней море... Поставил:
|SELECT         
        |   Жур.DocNo as НомерДок,
        |   $ДокС.Ед as [Ед. измерения $Справочник.ЕдИзм],
        |    $ДокС.ТМЦ as [Товар $Справочник.ТМЦ],         
        |   $ДокС.Кф as [Коэффициент $Справочник.ЕдИзм.Коэффициент],
        |    SUM($ДокС.Кво) as Количество
        |FROM
        |    $ДокументСтроки.РасходнаяНакладная as ДокС
        |INNER JOIN
        |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
        |                       AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
        |                       Жур.Closed & 1 = 1
        |GROUP BY
        |    Жур.DocNo,$ДокС.ТМЦ,$ДокС.Ед,$ДокС.Кф";
Дак он ругается:
Meta name parser error: поле таблицы не найдено "$ДокС.Кф"
   bananan
 
148 - 25.12.12 - 18:04
+(147) Или здесь еще один подзпрос надо делать? если - даЮ то как?
   bananan
 
149 - 25.12.12 - 18:25
Ау! Есьть кто живой? Как разрулить запрос (147)
 
 Рекламное место пустует
   bananan
 
150 - 25.12.12 - 18:37
Ёпрст4! Как ты мнре нужен!
   varelchik
 
151 - 25.12.12 - 18:49
Усе пошли домой.
До встречи завтра.
   bananan
 
152 - 25.12.12 - 18:52
(151) Завтра так завтраЮ мне еще час ы 8 минут на работе голову ломать над этим запросом...
   viktor_vv
 
153 - 25.12.12 - 18:55
(147) В расходной в бухии там нет такого реквизита Кф. Есть "Коэффициент".

В твоем случае.

        |   $ДокС.Коэффициент as Коэффициент ,
 

Без типизации.
   bananan
 
154 - 25.12.12 - 18:59
(153) Спасибо, работает
   Stella0608
 
155 - 25.12.12 - 19:32
Опять пропустила все самое интересное. :)
Хотела уточнить у местных спецов - а у обычных семерочных запросов есть возможность обращения к подчиненным справочникам?
Не помню и сто лет их уже не писала :).
   zak555
 
156 - 25.12.12 - 19:35
(155) делай запрос по нему
   ADirks
 
157 - 26.12.12 - 06:17
(155) и правильно, нефиг всякие гадости писать
   ЧеловекДуши
 
158 - 26.12.12 - 06:46
Не забывай в селекте ставить команду (NOLOCK)
Иначе можешь писать заявление по собственному...
...дай другому поломать БД...
   ЧеловекДуши
 
159 - 26.12.12 - 06:47
+(147) Жур.Closed & 1 = 1

Убери из связей.... не кошерно это там иметьэ

Познай для себя команду WHERE
А по сути гуг рулит, в плане поисков ответов по SQL
   ЧеловекДуши
 
160 - 26.12.12 - 06:48
+ И это тоже AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND

Убери в условие
   ЧеловекДуши
 
161 - 26.12.12 - 06:51
+ INNER JOIN - на SQL 2000 он отрабатывает медленней, нежели попросту выполнить команду LEFT(Right) OUTER JOIN?
   ADirks
 
162 - 26.12.12 - 07:31
(161) У них смысл разный. Поэтому оценивать медленнее/быстрее не слишком осмысленное занятие.
   ЧеловекДуши
 
163 - 26.12.12 - 07:55
(162)Смысл разный и бесполезный.
Может и писать меньше, но медленней работает, проверено :)
   ADirks
 
164 - 26.12.12 - 08:02
(163) Что значит "бесполезный"?
Кроме того, тупо сравнивать время выполнения запросов в SQL - тоже не информативно. Сравнивать надо планы запросов.
   Stella0608
 
165 - 26.12.12 - 09:30
Разве медленнее?
А вообще, некоторые условия превращают левое/правое соединение во внутреннее :).
   Stella0608
 
166 - 26.12.12 - 09:46
(159) Какой дает выигрыш перенос условия из соединения в Where?
   Ёпрст
 
167 - 26.12.12 - 10:08
ТекстЗапроса="
|select         
|   Жур.iddoc as [Док $Документ.РасходнаяНакладная]
|   ,$ДокС.ТМЦ as [Товар $Справочник.ТМЦ] 
|   ,sum($ДокС.Кво*$ДокС.Коэффициент) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum($ДокС.Кво*$ДокС.Коэффициент/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
|from
|    $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|inner join
|    _1sjourn as Жур (nolock) on Жур.IDDoc = ДокС.IDDoc
|      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
|      and Жур.Closed&1 = 1
|left join (
|             select  
|                   max($Спр.Коэффициент) as Коэффициент
|                    ,Спр.parentext as Владелец
|             from $Справочник.Единицы as Спр (nolock)
|             where $Спр.Ед =:ВыбЕдиница
|                   and $Спр.Коэффициент>0
|                   and Спр.ismark=0
|             group by Спр.parentext
|           ) as СпрЕдиницы on СпрЕдиницы.Владелец = $ДокС.ТМЦ
|
|group by
|    Жур.iddoc,$ДокС.ТМЦ
|";
Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
..................
   ADirks
 
168 - 26.12.12 - 10:46
(166) есть мнение, что никакого :)
Просто человеку почему-то не нравится. А мне наоборот - нравится, считаю что в inner join все условия д.б. именно там. Но ему и inner join тоже не нравится, так что логично :)
   bananan
 
169 - 26.12.12 - 11:45
(167) Неправильный запрос мы с вами сделали! Дело в том, что данный запрос показывает коэффициент ТМЦ по документа, а не берет коэффициент данного ТМЦ для еденицы ищмерения ящик!
Т.е. здесь таки надо делать еще один подзапрос
   Ёпрст
 
170 - 26.12.12 - 11:49
(169) Еще подумай
   bananan
 
171 - 26.12.12 - 11:50
(167) Хотя я просмотрел код Ёпрст4 - это вроде должно работать.
   bananan
 
172 - 26.12.12 - 11:51
(170) 169 я написал не просотрев твой код. Сейчас проверю в скрипте (там надо многое изменить - так что рещультат будет минут через 7)
   bananan
 
173 - 26.12.12 - 11:53
(172) У всех прошу прощения за опечатки
   bananan
 
174 - 26.12.12 - 11:58
+(172) Выдает ошибку:
Запр.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАПРОС01.ERT(101)}: Значение не представляет агрегатный объект (УстановитьТекстовыйПараметр)
   Ёпрст
 
175 - 26.12.12 - 11:59
(174) нам отсюда не видно, что есть Запр в твоём коде
   bananan
 
176 - 26.12.12 - 12:00
(175) Дело в том что код менялся много раз
Запр это Запрос
   bananan
 
177 - 26.12.12 - 12:01
+(176) И меняться код еще будет не мало раз...
   bananan
 
178 - 26.12.12 - 12:03
Дело в том что результаты работы запроса нужно выдать в Таблицу а не в ТблицуЗначений
   Ёпрст
 
179 - 26.12.12 - 12:07
(178) да уж, мне бы твои проблемы
   bananan
 
180 - 26.12.12 - 12:14
(179) а (174) что за фигнгя и как с ней бороться?
   Ёпрст
 
181 - 26.12.12 - 12:15
(180) зачем бороться ?
Запр сделать объектом одбсрекордсет
   bananan
 
182 - 26.12.12 - 12:23
(181) Моя невнимательность!
Но, дело в том, что он показывает количество ТМЦ в ящиках по ВСЕХ документах (вернее не все,а по документах РасходнаяНакладная (надо еще сюда же и по документу РасходнаяНакладнаяН)
   ЧеловекДуши
 
183 - 26.12.12 - 12:25
(168)Останемся каждый при своем...
   bananan
 
184 - 26.12.12 - 12:26
+(182) Но м количество проданых ящиков по всех документах - тожу надо
   Ёпрст
 
185 - 26.12.12 - 12:26
(182) тогда тебе еще стоит ознакомится с юнион алл
   ЧеловекДуши
 
186 - 26.12.12 - 12:27
(184)Сделай двумя запросами :)
(185)А я разочаровался в этом методе :(
   bananan
 
187 - 26.12.12 - 12:27
(182) насколько позволяют мои знания английского - это объеденение всех?
Это SQL?
   Ёпрст
 
188 - 26.12.12 - 12:28
(186) зря
   bananan
 
189 - 26.12.12 - 12:29
Ёпрст4 так что мне разобраться с юнион алл?
   Ёпрст
 
190 - 26.12.12 - 12:30
(189)
сделать запросы к табличным частям документов, объеденить их через юнион алл, отфильтровать их через внутреннее соедиенение
с журналом доков. всё.
   bananan
 
191 - 26.12.12 - 12:33
(190) Думаешь я это, на данном этапе моиз щнаний, смогу сделать сам?
   Ёпрст
 
192 - 26.12.12 - 12:35
(191) думаю нет, но мот попытаешься хотя бы ?
   bananan
 
193 - 26.12.12 - 12:36
(192) Конечно попытаюсь (хотя попытка, зная, что она обречена - что даст?)
   bananan
 
194 - 26.12.12 - 12:38
+(193) Мне уже страшно :(
   bananan
 
195 - 26.12.12 - 12:39
(190) Данный запрос как раз обращается к табличным частым документов...
   Sinus1984
 
196 - 26.12.12 - 12:42
ну из простого можно попробовать union all
   bananan
 
197 - 26.12.12 - 12:42
+(194) Пока изучаю, вернее углубляю свои знания SQL
   Ёпрст
 
198 - 26.12.12 - 12:47
ТекстЗапроса="
|select         
|   Жур.iddoc as [Док $Документ]
|   Жур.iddocdef as [Док_вид $ВидДокумента]
|   ,Таб.Товар as [Товар $Справочник.ТМЦ] 
|   ,sum(Таб.Количество) as КоличествоВБазовойЕдиницеИзмерения
|   ,sum(Таб.Количество/isnull(СпрЕдиницы.Коэффициент,1)) as КоличествоВЯщиках
|from
|    (
|      select
|        $ДокС.ТМЦ as Товар
|        ,ДокС.iddoc as Документ
|        ,$ДокС.Кво*$ДокС.Коэффициент as Количество
|      from  $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|     
|      union all
|
|      select
|        $ДокН.ТМЦ 
|        ,ДокН.iddoc
|        ,$ДокН.Кво*$ДокН.Коэффициент 
|      from  $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
|    )as Таб
|
|inner join
|    _1sjourn as Жур (nolock) on Жур.IDDoc = Таб.Документ
|      and Жур.iddocdef in ($ВидДокумента.РасходнаяНакладная,$ВидДокумента.РасходнаяНакладнаяН)
|      and Жур.Date_Time_IDDoc BETWEEN :НачДата and :КонДата~ 
|      and Жур.Closed&1 = 1
|left join (
|             select  
|                   max($Спр.Коэффициент) as Коэффициент
|                    ,Спр.parentext as Владелец
|             from $Справочник.Единицы as Спр (nolock)
|             where $Спр.Ед =:ВыбЕдиница
|                   and $Спр.Коэффициент>0
|                   and Спр.ismark=0
|             group by Спр.parentext
|           ) as СпрЕдиницы on СпрЕдиницы.Владелец = Таб.Товар
|
|group by
|    Жур.iddoc,Жур.iddocdef,Таб.Товар
|";
Запрос.УстановитьТекстовыйПараметр("ВыбЕдиница",Перечисление.Единицы.ящик);
..................
   sapphire
 
199 - 26.12.12 - 12:52
(198) Осталось только предположить, что ящик, это единица с максимальным коэффициентом
   Ёпрст
 
200 - 26.12.12 - 12:54
(199) дык там же ищется максимум, только среди "ящиков"..
защита от дурака, мало ли. как они там единиц поназаводили..
  1  2  3  4  5   

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