Имя: Пароль:
1C
1С v8
Выборка последних записей
,
0 zhig75
 
04.10.14
23:58
Привет!
Вопрос такой. Допустим я выбираю запросом определенные позиции номенклатуры.
Мне требуется получить последние данные на эти позиции из регистров накопления. К примеру последние цены закупки.
Вопрос, есть ли механизм получения этих данных в запросе?
Именно в запросе без обработок.
1 Wobland
 
05.10.14
00:09
есть
2 Wobland
 
05.10.14
00:10
а на накопления цен я бы посмотрел
3 zhig75
 
05.10.14
00:12
Уточню, последнии три цены.
4 Wobland
 
05.10.14
00:12
(3) теперь нет
5 zhig75
 
05.10.14
00:13
Запросом никак?
6 Wobland
 
05.10.14
00:14
ну почему? именно запросом. механизма нет
7 zhig75
 
05.10.14
00:38
Смотри есть регистр накопления "Джигурда" в которую пишутся суммы и количества поступления из документов.
Я в запросе выбрал некие позиции номенклатуры, и мне требуется получить "последние 3" суммы из этого регистра для эих позиций. Это запросом никак?
8 Franchiser
 
гуру
05.10.14
02:58
Связь реальной таблицы самой к себе с упорядочиванием и группировками во вложенном запросе если кратко
9 Franchiser
 
гуру
05.10.14
03:06
На скд проще сделать, запрос будет достаточно сложный мне кажется
10 zhig75
 
05.10.14
10:05
(8) Вязал вязал, так и на навязал. Есть пример реальный какой-нибудь?
11 alle68
 
05.10.14
11:04
(10) Условие для соединения: Т1.Товар = Т2.Товар и (Т1.Период < Т2.Период или Т1.Период = Т2.Период и Т1.Док < Т2.Док)
12 zhig75
 
05.10.14
11:40
(11) В Т1 Нет периода это справочник номенклатура.
13 timurhv
 
05.10.14
11:49
Я похоже отупел, но "ВЫБРАТЬ ПОСЛЕДНИЕ 3" не котируется?
14 timurhv
 
05.10.14
11:57
(13) Хотя все, допер :(
15 Fragster
 
гуру
05.10.14
11:59
ВЫБРАТЬ
    "А" КАК И1,
    "Б" КАК И2,
    1 КАК Р1
ПОМЕСТИТЬ Т1
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    "А" КАК И1,
    "Б" КАК И2,
    "В" КАК И3,
    1 КАК Р1
ПОМЕСТИТЬ Т2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "А",
    "Б",
    "Г",
    2
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Т1.И1 КАК Т1_И1,
    Т1.И2 КАК Т1_И2,
    Т1.Р1 КАК Т1_Р1,
    Т2.И1 КАК Т2_И1,
    Т2.И2 КАК Т2_И2,
    Т2.И3 КАК Т2_И3,
    Т2.Р1 КАК Т2_Р1
ИЗ
    Т1 КАК Т1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т2 КАК Т2
        ПО Т1.И1 = Т2.И1
            И Т1.И2 = Т2.И2
            И (Т2.И3 В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    Т2_Отбор.И3
                ИЗ
                    Т2 КАК Т2_Отбор
                ГДЕ
                    Т2_Отбор.И1 = Т2.И1
                    И Т2_Отбор.И2 = Т2.И2
                УПОРЯДОЧИТЬ ПО
                    Т2_Отбор.И3))
16 Fragster
 
гуру
05.10.14
12:00
ПЕРВЫЕ 1 на нужное количество меняешь
17 Ник второй
 
05.10.14
14:00
(15) за это растрелять надо или ты любитель сервер насиловать?
18 Fragster
 
гуру
05.10.14
18:40
(17) ну сделай лучше, чо
19 alle68
 
06.10.14
16:23
(12) Это относится к "последним данным на эти позиции из регистров накопления".
20 Classic
 
06.10.14
16:26
(17)
Можно подумать, что соединение само к себе меньше насилует
21 zhig75
 
07.10.14
22:40
Победить удалось только таким запросом. Мож кому пригодится.
ВЫБРАТЬ
    Продажи60.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    ВЫРАЗИТЬ(Продажи60.АналитикаУчетаНоменклатуры.Склад КАК Справочник.Склады) КАК Склад,
    Продажи60.КоличествоОборот КАК Продажи60,
    0 КАК Продажи30,
    0 КАК Продажи14,
    0 КАК Продажи7,
    0 КАК Возвраты60,
    0 КАК ВНаличии,
    0 КАК НаВитрине
ПОМЕСТИТЬ ПродажиОстатки
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
            ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -60),
            ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, -30 * 24 * 60 * 60 - 1),
            ,
            ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
                И АналитикаУчетаНоменклатуры.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)) КАК Продажи60

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Продажи14.АналитикаУчетаНоменклатуры.Номенклатура,
    ВЫРАЗИТЬ(Продажи14.АналитикаУчетаНоменклатуры.Склад КАК Справочник.Склады),
    0,
    0,
    Продажи14.КоличествоОборот,
    0,
    0,
    0,
    0
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
            ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -14),
            ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, -7 * 24 * 60 * 60 - 1),
            ,
            ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
                И АналитикаУчетаНоменклатуры.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)) КАК Продажи14

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Закупки.Количество КАК Количество1,
    ВтДатаПоступления1.Номенклатура,
    Закупки.Партнер КАК Поставщик1,
    Закупки.Сумма / Закупки.Количество КАК ЦенаЗакупки1
ПОМЕСТИТЬ Закупки1
ИЗ
    ВтДатаПоступления1 КАК ВтДатаПоступления1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки
        ПО ВтДатаПоступления1.Номенклатура = Закупки.АналитикаУчетаНоменклатуры.Номенклатура
            И ВтДатаПоступления1.Дата1 = Закупки.Период
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВтДатаПослупления2.Номенклатура,
    Закупки.Количество КАК Количество2,
    Закупки.Партнер КАК Поставщик2,
    Закупки.Сумма / Закупки.Количество КАК ЦенаЗакупки2
ПОМЕСТИТЬ Закупки2
ИЗ
    ВтДатаПослупления2 КАК ВтДатаПослупления2
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки
        ПО ВтДатаПослупления2.Номенклатура = Закупки.АналитикаУчетаНоменклатуры.Номенклатура
            И ВтДатаПослупления2.Дата2 = Закупки.Период
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТДатаПоступления3.Номенклатура,
    Закупки.Количество КАК Количество3,
    Закупки.Партнер КАК Поставщик3,
    Закупки.Сумма / Закупки.Количество КАК ЦенаЗакупки3
ПОМЕСТИТЬ Закупки3
ИЗ
    ВТДатаПоступления3 КАК ВТДатаПоступления3
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК Закупки
        ПО ВТДатаПоступления3.Номенклатура = Закупки.АналитикаУчетаНоменклатуры.Номенклатура
            И ВТДатаПоступления3.Дата3 = Закупки.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиОстатки.Номенклатура,
    ПродажиОстатки.Склад,
    ПродажиОстатки.Продажи60,
    ПродажиОстатки.Продажи30,
    ПродажиОстатки.Продажи14,
    ПродажиОстатки.Продажи7,
    ПродажиОстатки.Возвраты60,
    ПродажиОстатки.ВНаличии,
    ПродажиОстатки.НаВитрине,
    Закупки3.Количество3,
    Закупки3.Поставщик3,
    Закупки3.ЦенаЗакупки3,
    Закупки2.Количество2,
    Закупки2.Поставщик2,
    Закупки2.ЦенаЗакупки2,
    Закупки1.Количество1,
    Закупки1.Поставщик1,
    Закупки1.ЦенаЗакупки1
ПОМЕСТИТЬ ВТЗакупкиПродажиОстатки
ИЗ
    ПродажиОстатки КАК ПродажиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ Закупки2 КАК Закупки2
        ПО ПродажиОстатки.Номенклатура = Закупки2.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Закупки1 КАК Закупки1
        ПО ПродажиОстатки.Номенклатура = Закупки1.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Закупки3 КАК Закупки3
        ПО ПродажиОстатки.Номенклатура = Закупки3.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриоритетыПродажНоменклатурыСрезПоследних.ПриоритетПродажи КАК ПриоритетПродажи,
    ЕСТЬNULL(ПроцентПремииОтРазнницыМеждуЦенамиСрезПоследних.Процент, 0) КАК ПроцентОтРазницы,
    ЕСТЬNULL(СтоимостьСЛогистикойСрезПоследних.СтоимостьСЛогистикой, 0) КАК СтоимостьСЛогистикой,
    ЕСТЬNULL(СтоимостьСЛогистикойСрезПоследних.Процент, 0) КАК Процент,
    ВТЗакупкиПродажиОстатки.Номенклатура КАК Номенклатура,
    ВТЗакупкиПродажиОстатки.Склад КАК Склад,
    ВТЗакупкиПродажиОстатки.Продажи60 КАК Продажи60,
    ВТЗакупкиПродажиОстатки.Продажи30 КАК Продажи30,
    ВТЗакупкиПродажиОстатки.Продажи14 КАК Продажи14,
    ВТЗакупкиПродажиОстатки.Продажи7 КАК Продажи7,
    ВТЗакупкиПродажиОстатки.Возвраты60 КАК Возвраты60,
    ВТЗакупкиПродажиОстатки.ВНаличии КАК ВНаличии,
    ВТЗакупкиПродажиОстатки.НаВитрине КАК НаВитрине,
    ВТЗакупкиПродажиОстатки.Количество3 КАК Количество3,
    ВТЗакупкиПродажиОстатки.Поставщик3 КАК Поставщик3,
    ВЫРАЗИТЬ(ВТЗакупкиПродажиОстатки.ЦенаЗакупки3 КАК ЧИСЛО(15, 1)) КАК ЦенаЗакупки3,
    ВТЗакупкиПродажиОстатки.Количество2 КАК Количество2,
    ВТЗакупкиПродажиОстатки.Поставщик2 КАК Поставщик2,
    ВЫРАЗИТЬ(ВТЗакупкиПродажиОстатки.ЦенаЗакупки2 КАК ЧИСЛО(15, 1)) КАК ЦенаЗакупки2,
    ВТЗакупкиПродажиОстатки.Количество1 КАК Количество1,
    ВТЗакупкиПродажиОстатки.Поставщик1 КАК Поставщик1,
    ВЫРАЗИТЬ(ВТЗакупкиПродажиОстатки.ЦенаЗакупки1 КАК ЧИСЛО(15, 1)) КАК ЦенаЗакупки1,
    ЕСТЬNULL(ВТЗакупкиПродажиОстатки.Продажи14, 0) + ЕСТЬNULL(ВТЗакупкиПродажиОстатки.Продажи7, 0) КАК Продажи7_14,
    ЕСТЬNULL(ВТЗакупкиПродажиОстатки.ВНаличии, 0) - ЕСТЬNULL(ВТЗакупкиПродажиОстатки.НаВитрине, 0) КАК НаличиеБезВитрины,
    БонусыВендераСрезПоследних.ОжидаемыйБонусВендера КАК ОжидаемыйБонусВендера
ИЗ
    ВТЗакупкиПродажиОстатки КАК ВТЗакупкиПродажиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПроцентПремииОтРазнницыМеждуЦенами.СрезПоследних(&КонецПериода, ) КАК ПроцентПремииОтРазнницыМеждуЦенамиСрезПоследних
        ПО ВТЗакупкиПродажиОстатки.Номенклатура = ПроцентПремииОтРазнницыМеждуЦенамиСрезПоследних.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПриоритетыПродажНоменклатуры.СрезПоследних(&КонецПериода, ) КАК ПриоритетыПродажНоменклатурыСрезПоследних
        ПО ВТЗакупкиПродажиОстатки.Номенклатура = ПриоритетыПродажНоменклатурыСрезПоследних.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтоимостьСЛогистикой.СрезПоследних(&КонецПериода, ) КАК СтоимостьСЛогистикойСрезПоследних
        ПО ВТЗакупкиПродажиОстатки.Номенклатура = СтоимостьСЛогистикойСрезПоследних.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БонусыВендера.СрезПоследних КАК БонусыВендераСрезПоследних
        ПО ВТЗакупкиПродажиОстатки.Номенклатура = БонусыВендераСрезПоследних.Номенклатура

УПОРЯДОЧИТЬ ПО
    ВТЗакупкиПродажиОстатки.Номенклатура.Родитель.Наименование,
    ВТЗакупкиПродажиОстатки.Номенклатура.Марка.Наименование,
    ВТЗакупкиПродажиОстатки.Номенклатура.Наименование
ИТОГИ
    МАКСИМУМ(ПриоритетПродажи),
    МАКСИМУМ(ПроцентОтРазницы),
    МАКСИМУМ(СтоимостьСЛогистикой),
    МАКСИМУМ(Процент),
    СУММА(Продажи60),
    СУММА(Продажи30),
    СУММА(Продажи14),
    СУММА(Продажи7),
    СУММА(Возвраты60),
    СУММА(ВНаличии),
    СУММА(НаВитрине),
    МАКСИМУМ(Количество3),
    МАКСИМУМ(Поставщик3),
    МАКСИМУМ(ЦенаЗакупки3),
    МАКСИМУМ(Количество2),
    МАКСИМУМ(Поставщик2),
    МАКСИМУМ(ЦенаЗакупки2),
    МАКСИМУМ(Количество1),
    МАКСИМУМ(Поставщик1),
    МАКСИМУМ(ЦенаЗакупки1),
    СУММА(Продажи7_14),
    СУММА(НаличиеБезВитрины),
    МАКСИМУМ(ОжидаемыйБонусВендера)
ПО
    Номенклатура,
    Склад ТОЛЬКО ИЕРАРХИЯ
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.