Имя: Пароль:
1C
1C 7.7
v7: Запрос по списку номенклатуры с нахождением даты (SQL)
,
0 zenon46
 
05.12.19
13:24
Доброго дня!
Подскажите пожалуйста, как лучше всего (пока на ум не приходит), найти дату ПЕРВОГО поступления для каждого товара из переданного списка ?
Используя прямой запрос.
1 Ёпрст
 
05.12.19
13:26
max(date)
2 dk
 
05.12.19
13:26
min )
3 Ёпрст
 
05.12.19
13:27
и проще всего коррелированный подзапрос в селекте (хотя и не быстро)
4 Ёпрст
 
05.12.19
13:27
(2) на да :)
обычно, последний ищут а не первый
5 Ёпрст
 
05.12.19
13:27
*ну да
6 zenon46
 
05.12.19
13:31
(4) да, тут есть некое извращение, нужен как раз первое поступление, что бы понять товар так скажем "новый" или "старый"
7 ДенисЧ
 
05.12.19
13:39
(1) (2) AVG()
8 trad
 
05.12.19
13:43
(7) для даты?
9 Ёпрст
 
05.12.19
13:51
тип того

select
    (select top 1  Left(Жур.Date_Time_IDDOC, 8) from _1sjourn Жур (nolock)
     inner join $ДокументСтроки.ПоступлениеТоваров Док (nolock) on Док.iddoc = Жур.iddoc and $Док.Номенклатура = Спр.id
    where iddocdef = $ВидДокумента.ПоступлениеТоваров
   order by Жур.Date_Time_IDDOC asc) [Дата $Дата]

,Спр.id [Номенклатура $Справочник.Номенклатура]
from  $Справочник.Номенклатура Спр (nolock)
where Спр.id in (select val from #tmptable)
10 Ёпрст
 
05.12.19
13:52
если я еще правильно за синтаксис помню, ну и ладно, (8) поправит :)
11 Ёпрст
 
05.12.19
14:00
хотя даже в этом запросе, надо проще:


-- and $Док.Номенклатура = Спр.id
-- and $Док.Номенклатура = val
.....

--,Спр.id [Номенклатура $Справочник.Номенклатура]
,val [Номенклатура $Справочник.Номенклатура]

from  from #tmptable

--from  $Справочник.Номенклатура Спр (nolock)
--where Спр.id in (select val from #tmptable)
12 dk
 
05.12.19
14:01
если в регистре остатков стоит быстрый отбор движений на измерении с товаром, то шустрее через регистр искать
13 Ёпрст
 
05.12.19
14:04
(12) или галка быстрая обработка движений
14 zenon46
 
05.12.19
14:09
(12) это не стоит (13) а вот это стоит
15 Ёпрст
 
05.12.19
14:11
ну перепиши тогда на регистр остаткитмц (он самый маленький), если там есть галка, то соединения с журналом делать не надо
16 Ёпрст
 
05.12.19
14:15

select
    (select top 1  Left(Рег.Date_Time_IDDOC, 8) from $регистр.ОстаткиТМЦ Рег (nolock)
    where iddocdef = $ВидДокумента.ПоступлениеТоваров and $Рег.Номенклатура = val
   order by Рег.Date_Time_IDDOC asc) [Дата $Дата]

,val [Номенклатура $Справочник.Номенклатура]
from #tmptable
17 trad
 
05.12.19
14:16
(13) нет, для решения задачи необходимо (12), иначе - это шлак
18 Ёпрст
 
05.12.19
14:18
(17) врят ли у него есть еще один индекс на измерении (и мало кто ставит такое)
19 trad
 
05.12.19
14:21
(18) так он сказал, что нет (14), а надо!
Кроме подобной задачи, этот индекс исключительно полезен для расчета неактуальных остатков по списку номенклатуры (в отчетах, при проведении расходных документов - особенно)
20 dk
 
05.12.19
14:28
ну нет индекса и ладно - может это некритичный отчет и на время формирования пофиг
будет и без индекса считать
21 trad
 
05.12.19
14:34
(20) повторю, индекс по номенклатуре в движениях остатков очень полезен для расчета остатков
22 Ёпрст
 
05.12.19
14:57
(21) для остатков, самое быстрое - это 5 дней хранения..вот это, точно максимально быстро :)
23 Ёпрст
 
05.12.19
14:57
проверено. и пофик на накладные расходы с открытием периода.
24 trad
 
05.12.19
15:43
(22) я бы поспорил, но не буду ))
25 Ёпрст
 
05.12.19
16:10
(24) замерял ?
26 Ёпрст
 
05.12.19
16:10
даже чорный запрос летает )
27 Ёпрст
 
05.12.19
16:12
Хотя основная цель была - максимально быстрое проведение
28 dk
 
06.12.19
07:43
(27) если проводить всегда в ТА то имхо пофиг месяц у тебя итоги или неделя
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс