Имя: Пароль:
1C
1C 7.7
v7: ТиС 7.7. Последнее поступление номенклатуры (прямой запрос)
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
    |";
    лКоманда.ВыполнитьИнструкцию(ТекстЗапроса, лИТ);


Вроде бы работает.
Посмотрите, пожалуйста.
Нет ли косяков? Что можно улучшить?
1 es3000
 
10.10.19
14:20
Ребята, есть идеи?
2 ivsher
 
11.10.19
13:49
Как совет, поставьте в конфигураторе для регистра ПартииНаличие признак "быстрая обработка движений"... при этом отпадает надобность в первом запросе... У вас в таблице движений регистра появится поле Date_Time_IDDoc.
3 Ёпрст
 
11.10.19
14:18
(0) все делается в одном запросе и без временных таблиц
4 Ёпрст
 
11.10.19
14:19
ну и для "последнего прихода", партииНаличие не нужен, достаточно - остаткиТМЦ, он в разы меньше
5 Ёпрст
 
11.10.19
14:20
тем более, в запросе нет получения себестоимости