Имя: Пароль:
1C
1С v8
Получение сроков годности партий в УТ 10.3
0 123GO
 
20.01.20
10:43
Добрый день. Скажите, пожалуйста, как правильно написать запрос (чтобы было поменьше циклов чтения, данных в базе очень много):
Задача вроде бы не сложная - получить первые 3 партии по каждой номенклатуре. У меня идея выбрать три таблицы с МИНИМУМ(Партия.Дата), но как их соединить так, чтобы исключить периоды друг друга?
1 123GO
 
20.01.20
10:46
Может есть возможность как-то воспользоваться ВЫБРАТЬ ПЕРВЫЕ 3, чтобы не плодить таблиц - было бы вообще идеально
2 Гипервизор
 
20.01.20
10:49
Вы уж определитесь что надо: "поменьше циклов чтения" или "не плодить таблиц"?
3 123GO
 
20.01.20
10:54
Надо минимально нагрузить уже и без того долго формирующийся отчет
4 Йохохо
 
20.01.20
11:01
(3) засунуть это в расшифровку
5 123GO
 
20.01.20
11:01
Получилась такая хрень(

ВЫБРАТЬ
    МИНИМУМ(Остатки.ДокументОприходования.Дата) КАК Дата,
    Остатки.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ДатыПартия1
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата) КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток > 0

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МИНИМУМ(Остатки.ДокументОприходования.Дата) КАК Дата,
    Остатки.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ДатыПартия2
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата) КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток > 0
    И НЕ (Остатки.ДокументОприходования.Дата, Остатки.Номенклатура) В
                (ВЫБРАТЬ
                    ДатыПартия1.Дата,
                    ДатыПартия1.Номенклатура
                ИЗ
                    ДатыПартия1)

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МИНИМУМ(Остатки.ДокументОприходования.Дата) КАК Дата,
    Остатки.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ДатыПартия3
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата) КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток > 0
    И НЕ (Остатки.ДокументОприходования.Дата, Остатки.Номенклатура) В
                (ВЫБРАТЬ
                    ДатыПартия1.Дата,
                    ДатыПартия1.Номенклатура
                ИЗ
                    ДатыПартия1)
    И НЕ (Остатки.ДокументОприходования.Дата, Остатки.Номенклатура) В
                (ВЫБРАТЬ
                    ДатыПартия2.Дата,
                    ДатыПартия2.Номенклатура
                ИЗ
                    ДатыПартия2)

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Остатки.ДокументОприходования.Дата КАК Дата,
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.ДокументОприходования,
    Остатки.Склад,
    Остатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата) КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток > 0
    И (Остатки.ДокументОприходования.Дата, Остатки.Номенклатура) В
            (ВЫБРАТЬ
                ДатыПартия1.Дата,
                ДатыПартия1.Номенклатура
            ИЗ
                ДатыПартия1
        
            ОБЪЕДИНИТЬ ВСЕ
        
            ВЫБРАТЬ
                ДатыПартия2.Дата,
                ДатыПартия2.Номенклатура
            ИЗ
                ДатыПартия2
        
            ОБЪЕДИНИТЬ ВСЕ
        
            ВЫБРАТЬ
                ДатыПартия3.Дата,
                ДатыПартия3.Номенклатура
            ИЗ
                ДатыПартия3)

УПОРЯДОЧИТЬ ПО
    Остатки.ДокументОприходования.Дата
6 D_E_S_131
 
20.01.20
11:35
Если делать на СКД, то выбирай данные из остатков (Номенклатура, Партия, ДатаПартии), делаешь группировку по Номенклатуре и детальные записи, в "детальных" выводишь Партию и ДатуПартии, сортируешь "детальные" по дате партии и на закладке "Другие настройки" ставишь "Количество записей = 3".
7 123GO
 
21.01.20
02:29
Нет, к сожалению, отчет написан не на СКД( Переписывать его займет кучу времени..
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.