Имя: Пароль:
1C
1С v8
Подскажите как правильно получить последний документ прихода и его дату
,
0 location
 
naïve
06.04.17
11:44
Добрый день уважаемые форумчане.
Имеется следующий запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    ВложенныйЗапрос.Контрагент КАК Контрагент,
    СУММА(ВложенныйЗапрос.Расход) КАК Расход,
    ВложенныйЗапрос.Номенклатура.Артикул КАК Артикул,
    ВложенныйЗапрос.Номенклатура.Родитель КАК ГруппаТовара,
    СУММА((ВложенныйЗапрос.НачальныйОстаток + ВложенныйЗапрос.КонечныйОстаток) / 2) КАК Остаток
{ВЫБРАТЬ
    Номенклатура.*,
    Контрагент.*,
    Расход,
    Артикул,
    ГруппаТовара.*,
    Остаток КАК СреднийОстаток}
ИЗ
    (ВЫБРАТЬ
        ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,
        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
        ВЫБОР
            КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК Документ.ПоступлениеТоваровУслуг).Контрагент
            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
        КОНЕЦ КАК Контрагент,
        ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
        ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонечныйОстаток,
        0 КАК Расход
    {ВЫБРАТЬ
        Номенклатура.*,
        Контрагент.*}
    ИЗ
        РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, , Склад В (&ВыбСклады)) КАК ПартииТоваровНаСкладахОстаткиИОбороты
    {ГДЕ
        ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура.*,
        (ВЫБОР
                КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг
                    ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК Документ.ПоступлениеТоваровУслуг).Контрагент
                ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            КОНЕЦ).* КАК Контрагент}
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ПартииТоваровНаСкладах.Склад,
        ПартииТоваровНаСкладах.Номенклатура,
        ВЫБОР
            КОГДА ПартииТоваровНаСкладах.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг
                ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладах.ДокументОприходования КАК Документ.ПоступлениеТоваровУслуг).Контрагент
            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
        КОНЕЦ,
        0,
        0,
        ПартииТоваровНаСкладах.Количество
    ИЗ
        РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
    ГДЕ
        ПартииТоваровНаСкладах.КодОперации В(&КодыДвиженияРасход)
        И ПартииТоваровНаСкладах.Период >= &НачалоПериода
        И ПартииТоваровНаСкладах.Период <= &КонецПериода
        И ПартииТоваровНаСкладах.Склад В(&ВыбСклады)
        И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    {ГДЕ
        ПартииТоваровНаСкладах.Номенклатура.*,
        (ВЫБОР
                КОГДА ПартииТоваровНаСкладах.ДокументОприходования ССЫЛКА Документ.ПоступлениеТоваровУслуг
                    ТОГДА ВЫРАЗИТЬ(ПартииТоваровНаСкладах.ДокументОприходования КАК Документ.ПоступлениеТоваровУслуг).Контрагент
                ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            КОНЕЦ).* КАК Контрагент}) КАК ВложенныйЗапрос
{ГДЕ
    ВложенныйЗапрос.Номенклатура.*,
    ВложенныйЗапрос.Контрагент.*}

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.Контрагент,
    ВложенныйЗапрос.Номенклатура.Артикул,
    ВложенныйЗапрос.Номенклатура.Родитель


Как к данной номенклатуре прилепить последний приход на эти склады, я пытался сделать следующим образом


ВЫБРАТЬ
    ПартииТоваровНаСкладах.Номенклатура,
    ПартииТоваровНаСкладах.Склад,
    МАКСИМУМ(ПартииТоваровНаСкладах.Регистратор) КАК Регистратор,
    МАКСИМУМ(ПартииТоваровНаСкладах.Регистратор.Дата) КАК РегистраторДата
ПОМЕСТИТЬ ВТПоследнийДок
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
ГДЕ
    ПартииТоваровНаСкладах.Период <= &КонецПериода
    И ПартииТоваровНаСкладах.Склад В(&ВыбСклады)
    И ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладах.Номенклатура,
    ПартииТоваровНаСкладах.Склад
;


потом соединял по номенклатуре в итоге консоль запросов ничего не выдала, а когда запихнул в компоновку, выдало даты, но выдранные с откуда то непонятно. В чем я затупил, помогите плз?
1 location
 
naïve
06.04.17
12:15
Подскажите куда смотреть, уже не знаю что куда добавить, чтобы сформировалось верно?
2 Naf2017
 
06.04.17
12:24
МАКСИМУМ(ПартииТоваровНаСкладах.Регистратор) КАК Регистратор

это глупость
3 gorakh
 
06.04.17
12:42
У меня "взлетело" так.
ВЫБРАТЬ
    МАКСИМУМ(ОстаткиПоРегистратору.Регистратор) КАК Регистратор,
    ОстаткиПоПаспортамОбороты.Паспорт КАК Паспорт
ИЗ
    РегистрНакопления.ОстаткиПоПаспортам.Обороты(, &Период, Регистратор, Склад ССЫЛКА Справочник.ФизическиеЛица) КАК _ОстаткиПоПаспортамОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления._ОстаткиПоПаспортам КАК ОстаткиПоРегистратору
        ПО ОстаткиПоПаспортамОбороты.Регистратор = ОстаткиПоРегистратору.Регистратор
ГДЕ
    ОстаткиПоПаспортамОбороты.КоличествоПриход > 0
    И ОстаткиПоПаспортамОбороты.Регистратор.Склад ССЫЛКА Справочник.ФизическиеЛица

СГРУППИРОВАТЬ ПО
    ОстаткиПоПаспортамОбороты.Паспорт
//Регистр ОстаткиПоПаспортам - партия в производстве
4 location
 
naïve
06.04.17
17:15
(3) это если однотипный регистратор, то максимум подойдет, а что сделать если регистраторы разнотипные, а то получается регистратор максимальный выбирает ПТУ от 04.04.17, а МАКС дата 05.04.17 и действительно последний документ в регистре по этой номенклатуре 05.04.17
5 Garykom
 
гуру
06.04.17
17:18
(4) условие на вид регистратора
6 location
 
naïve
06.04.17
17:26
(5) так в том и дело мне нужны все документы и ПТУ и Перемещения, все документы которые делают приход в регистр.
7 Garykom
 
гуру
06.04.17
17:33
(6) "макс(регистратор.дата)"
8 location
 
naïve
06.04.17
17:55
(7) а регистратор потом сам как найти? связать внутренним соединением по дате?
потому что если взять макс по регистратору, то выходит два совершенно разные значения.
9 Garykom
 
гуру
06.04.17
17:58
(8) Не поверишь но я бы просто вывел простым запросом простую линейную табличку и далее кодом а не извратами с языком запросов
10 location
 
naïve
06.04.17
18:03
(9) это все в скд сделано. не хочеться писать ручной вывод для него.
11 AlvlSpb
 
06.04.17
20:57
(1) ВЫБРАТЬ ПЕРВЫЕ 1
    ................
    УПОРЯДОЧИТЬ ПО
    ОстаткиПоПаспортамОбороты.Регистратор УБЫВ
12 AlvlSpb
 
06.04.17
21:01
Точнее: ПО ОстаткиПоПаспортамОбороты.Регистратор.Дата УБЫВ
13 location
 
naïve
07.04.17
08:39
(12) а если 2 документа сделали приход в одно и тоже время как тогда быть?
14 Dmitrii
 
гуру
07.04.17
08:51
(13) Можешь упорядочивать по МоментВремени (это Дата + Ссылка на документ).
Только надо понимать, что это весьма условное упорядочивание, не имеющее ничего общего с жизнью. Упорядочивание по ссылке документов одного вида с одним и тем же датой и временем даст информацию о том какие документы были созданы раньше, а какие позже (упорядочит по моменту создания в базе данных). Однако если есть документы нескольких видов, то упорядочивание по ссылке или по моменту времени фактически упорядочит документы по дата+время+вид документа+ссылка. То есть для случая нескольких документов с одной датой и временем разных видов сначала вывалятся документы одного вида, потом другого и т.д. (например, сначала все перемещения, потом поступления).
15 Dmitrii
 
гуру
07.04.17
09:11
И вообще.
Упорядочивание по документу и дате - неверно.
Упорядочивать надо в первую очередь по периоду записи регистра. А уже потом - по дате документа, ссылке и прочим признакам.
А как учитываются корректировочные записи (приходы с минусом)?
А как это будет работать, когда появятся какие-либо другие документы прихода, например, Возвраты, Комплектация, Ордера (какие-либо еще)?
16 location
 
naïve
07.04.17
09:28
(15) так должен быть любой документ поступления (вообще любой), но последний.
17 Dmitrii
 
гуру
07.04.17
09:38
(16) Что понимать под поступлением?
Возвраты - это поступление?
Комплектации (сборка/разборка) - это поступление?
Или надо тупо брать любое последнее движение по регистру с видом "Приход"? А если это приход с минусом (корректировочная запись)?
18 AlvlSpb
 
07.04.17
09:38
(13) А какой документ, в таком случае, вы считаете последним?
Если это две ПН и дата/время абсолютно одинаковы, то какая разница какой из них последний? А если это, например, ПН и Возврат, то укажите в запросе, что в приоритете