Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: ТиС 7.7. Последнее поступление номенклатуры (прямой запрос)

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


Вроде бы работает.
Посмотрите, пожалуйста.
Нет ли косяков? Что можно улучшить?
 
 
   es3000
 
1 - 10.10.19 - 14:20
Ребята, есть идеи?
   ivsher
 
2 - 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
тем более, в запросе нет получения себестоимости

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