0
es3000
10.10.19
✎
13:25
|
Здравствуйте!
Конфигурация "Торговля и склад 7.7".
Нужно найти последнее поступление номенклатуры.
Делаю с помощью 1С++ прямыми запросами.
Одним запросом я не смог придумать.
Сделал несколькими запросами.
Так как в одном документе в табличной части одна и та же номенклатура может быть в нескольких строках, пришлось еще искать максимальный номер строки.
Вот что получилось:
ТекстЗапроса = "
|SELECT
| $РегПартии1.Номенклатура AS Tovar,
| MAX(ЖурналДок1.Date_Time_IDDoc) as MaxDateTimeIDDoc
|INTO #RegPastPrihodDoc
| FROM
| $Регистр.ПартииНаличие as РегПартии1
| INNER JOIN
| _1Sjourn as ЖурналДок1 ON ЖурналДок1.IDDoc = РегПартии1.IDDoc
| WHERE
| $РегПартии1.КодОперации = :КодОперации
| GROUP BY $РегПартии1.Номенклатура;
|";
лКоманда.УстановитьТекстовыйПараметр("КодОперации", Перечисление.КодыОпераций.Закупка);
лКоманда.ВыполнитьИнструкцию(ТекстЗапроса, лИТ);
ТекстЗапроса = "
|SELECT
| ЖурналДок.IDDoc as [Док $Документ],
| ЖурналДок.IDDocDef as Док_вид,
| ЖурналДок.IDDoc as IDDoc,
| ЖурналДок.Date_Time_IDDoc
|INTO #DocPrihod
|FROM
| _1Sjourn as ЖурналДок
|WHERE ЖурналДок.Date_Time_IDDoc IN
| (SELECT DISTINCT MaxDateTimeIDDoc FROM #RegPastPrihodDoc)
|";
лКоманда.ВыполнитьИнструкцию(ТекстЗапроса, лИТ);
ТекстЗапроса = "
|SELECT
| $РегПартии.Номенклатура as Tovar,
| РегПартии.IDDoc,
| MAX(РегПартии.LineNo_) as StrNo
|INTO #RegPastPrihodStr
| FROM
| #RegPastPrihodDoc AS РегПриходНоменклатурыДок
| INNER JOIN
| #DocPrihod AS ДокПриход ON РегПриходНоменклатурыДок.MaxDateTimeIDDoc = ДокПриход.Date_Time_IDDoc
| INNER JOIN
| $Регистр.ПартииНаличие as РегПартии ON РегПриходНоменклатурыДок.Tovar = $РегПартии.Номенклатура AND ДокПриход.IDDoc = РегПартии.IDDoc
| GROUP BY $РегПартии.Номенклатура, РегПартии.IDDoc
|";
лКоманда.ВыполнитьИнструкцию(ТекстЗапроса, лИТ);
Вроде бы работает.
Посмотрите, пожалуйста.
Нет ли косяков? Что можно улучшить?
|
|
4
Ёпрст
гуру
11.10.19
✎
14:19
|
ну и для "последнего прихода", партииНаличие не нужен, достаточно - остаткиТМЦ, он в разы меньше
|
|