Имя: Пароль:
1C
1С v8
МАКСИМУМ в запросе
0 lakich
 
07.04.17
15:21
Добрый день,...имеется простой запрос



ВЫБРАТЬ
МАКСИМУМ(ПИК_КоэффСегмДляЗП.Период) КАК Период,
ПИК_КоэффСегмДляЗП.Сегмент
ПОМЕСТИТЬ ТМАКСП
ИЗ
    РегистрСведений.ПИК_КоэффСегмДляЗП КАК ПИК_КоэффСегмДляЗП

СГРУППИРОВАТЬ ПО
    ПИК_КоэффСегмДляЗП.Сегмент
;

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

СГРУППИРОВАТЬ ПО
    ТМАКСП.Сегмент,
    НоменклатураСегмента.Номенклатура

По идее должен получать записи Номенклатура,Период,Сегмент без повторений Номенклатуры с максимальным Периодом..однако выдает все записи по данной номенклатуре ..в чем не прав?
1 Вафель
 
07.04.17
15:22
все пары номенклатура+сегмент выдаст
2 lakich
 
07.04.17
15:23
(1) так и выдает..а как получить только одну запись с макс периодом?
3 AlexGaren
 
07.04.17
15:24
Почему не СрезПоследних,если тебе период именно нужен.
4 lakich
 
07.04.17
15:25
(3) пробывал и с СрезПоследних у РегистрСведений.ПИК_КоэффСегмДляЗП...все равно дублирует
5 azernot
 
07.04.17
15:26
Без понимания структуры регистра НоменклатураСегмента  ничего не понятно.

Группировка по втором запросе бессмысленна. Там уже для каждого сегмента самая последняя дата.
6 ИУБиПовиц
 
07.04.17
15:27
Во выборке не максимум, а просто период, и в связь по периоду сделайте. должно помочь
7 AlexGaren
 
07.04.17
15:28
Быть этого не может,значит у тебя сегменты,может по наименованию выглядит одинаково на на деле разные.
8 lakich
 
07.04.17
15:28
(5) там два измерения Сегмент и Номенклатура и все..непериодический с..ук
9 azernot
 
07.04.17
15:29
В первой таблице
Сегмент1 31.12.2017
Сегмент2 30.11.2017

Во втором запросе должно быть что-то типа
Номенклатура1 Сегмент1 31.12.2017
Номенклатура2 Сегмент1 31.12.2017
Номенклатура3 Сегмент2 30.11.2017
Номенклатура4 Сегмент2 30.11.2017


А что ожидается?
10 Вафель
 
07.04.17
15:29
(2) нужно для каждой номенклатуры найти макс период и потом уже по ном+период искать сегмент
11 AlexGaren
 
07.04.17
15:32
Стоп,а зачем делать Непериодический регистр сведений с имзерением Период?
Это что за демон?))))
12 lakich
 
07.04.17
15:33
(9) а получается,вернее выдает

Номенклатура1 Сегмент1 31.12.2015
Номенклатура2 Сегмент2 31.12.2016
Номенклатура2 Сегмент3 30.11.2017
13 lakich
 
07.04.17
15:33
(11) это оф.франчи ваяли,мне отчет нужно сделать..хотел сам ругаться,да тут фильтр стоит))
14 azernot
 
07.04.17
15:34
ВЫБРАТЬ
МАКСИМУМ(ПИК_КоэффСегмДляЗП.Период) КАК Период
ПОМЕСТИТЬ ТМАКСП
ИЗ
    РегистрСведений.ПИК_КоэффСегмДляЗП КАК ПИК_КоэффСегмДляЗП

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура,
    ПИК_КоэффСегмДляЗП.Период КАК Период,
    ПИК_КоэффСегмДляЗП.Сегмент КАК Сегмент
ИЗ
    РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПИК_КоэффСегмДляЗП КАК ПИК_КоэффСегмДляЗП
        ПО НоменклатураСегмента.Сегмент = ПИК_КоэффСегмДляЗП.Сегмент
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТМАКСП КАК ТМАКСП
        ПО ПИК_КоэффСегмДляЗП.Период= ТМАКСП.Период
15 azernot
 
07.04.17
15:34
(12) Всё правильно выдаёт.
Повторяю, а что ожидается?
16 lakich
 
07.04.17
15:36
ожидается

Номенклатура1 Сегмент1 31.12.2017
Номенклатура2 Сегмент2 31.12.2017
Номенклатура3 Сегмент2 30.11.2017
Номенклатура4 Сегмент4 30.11.2017
17 azernot
 
07.04.17
15:37
А если Номенклатура2 связана ещё и с сегментом2, то что?

Нужно чтобы отбирались только последние сегменты для каждой номенклатуры, что ли?
18 azernot
 
07.04.17
15:38
+(17) А если Номенклатура2 связана ещё и с сегментом3, то что?
19 lakich
 
07.04.17
15:38
(17) да,Сегменты с максимальной датой нужны..
20 1dvd
 
07.04.17
15:39
+ если по одной номенклатуре за одну дату 2 разных сегмента. Какой брать?
21 lakich
 
07.04.17
15:40
то есть Ном входит в сегмент,вводили ее туда весной,потом в другой сегмент летом,в слетующий зимой..так вот нужен сегмент с зимней датой
22 PCcomCat
 
07.04.17
15:45
(0) Скидываю кусок запроса - почитай. Если не разберешься - пиши.

Текст:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СписокЗатрат.Затрата,
    ЗначенияСвойствОбъектов_Резерв.Значение КАК СкладскойРезерв,
    ЗначенияСвойствОбъектов_УпаковкаПоставщика.Значение КАК УпаковкаПоставщика,
    ЦеныНоменклатурыКонтрагентов.Цена,
    ЦеныНоменклатурыКонтрагентов.Регистратор,
    ЦеныНоменклатурыКонтрагентов.Регистратор.Контрагент,
    ЦеныНоменклатурыКонтрагентов.Регистратор.Дата,
    ЦеныНоменклатурыКонтрагентовДопЦена1.Цена КАК ДопЦена2,
    ЦеныНоменклатурыКонтрагентовДопЦена2.Цена КАК ДопЦена1
ПОМЕСТИТЬ РезервЦенаУпаковка
ИЗ
    СписокЗатрат КАК СписокЗатрат
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_Резерв
        ПО СписокЗатрат.Затрата = ЗначенияСвойствОбъектов_Резерв.Объект
            И (ЗначенияСвойствОбъектов_Резерв.Свойство = &СвойствоРезерв)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
        ПО СписокЗатрат.Затрата = ЦеныНоменклатурыКонтрагентов.Номенклатура
            И (ЦеныНоменклатурыКонтрагентов.Регистратор В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    ЦеныНоменклатурыКонтрагентов.Регистратор
                ИЗ
                    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
                ГДЕ
                    ЦеныНоменклатурыКонтрагентов.Номенклатура = СписокЗатрат.Затрата
                    И ЦеныНоменклатурыКонтрагентов.ТипЦен.ТипЦеныНоменклатуры = &ТипЦен
                УПОРЯДОЧИТЬ ПО
                    ЦеныНоменклатурыКонтрагентов.Регистратор.Дата УБЫВ))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов_УпаковкаПоставщика
        ПО СписокЗатрат.Затрата = ЗначенияСвойствОбъектов_УпаковкаПоставщика.Объект
            И (ЗначенияСвойствОбъектов_УпаковкаПоставщика.Свойство = &СвойствоУпаковкаПоставщика)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентовДопЦена1
        ПО СписокЗатрат.Затрата = ЦеныНоменклатурыКонтрагентовДопЦена1.Номенклатура
            И (ЦеныНоменклатурыКонтрагентовДопЦена1.Регистратор В
                (ВЫБРАТЬ ПЕРВЫЕ 2
                    ЦеныНоменклатурыКонтрагентов.Регистратор
                ИЗ
                    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
                ГДЕ
                    ЦеныНоменклатурыКонтрагентов.Номенклатура = СписокЗатрат.Затрата
                    И ЦеныНоменклатурыКонтрагентов.ТипЦен.ТипЦеныНоменклатуры = &ТипЦен
                УПОРЯДОЧИТЬ ПО
                    ЦеныНоменклатурыКонтрагентов.Регистратор.Дата УБЫВ))
            И (НЕ ЦеныНоменклатурыКонтрагентовДопЦена1.Регистратор В
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        ЦеныНоменклатурыКонтрагентов.Регистратор
                    ИЗ
                        РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
                    ГДЕ
                        ЦеныНоменклатурыКонтрагентов.Номенклатура = СписокЗатрат.Затрата
                        И ЦеныНоменклатурыКонтрагентов.ТипЦен.ТипЦеныНоменклатуры = &ТипЦен
                    УПОРЯДОЧИТЬ ПО
                        ЦеныНоменклатурыКонтрагентов.Регистратор.Дата УБЫВ))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентовДопЦена2
        ПО СписокЗатрат.Затрата = ЦеныНоменклатурыКонтрагентовДопЦена2.Номенклатура
            И (ЦеныНоменклатурыКонтрагентовДопЦена2.Регистратор В
                (ВЫБРАТЬ ПЕРВЫЕ 3
                    ЦеныНоменклатурыКонтрагентов.Регистратор
                ИЗ
                    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
                ГДЕ
                    ЦеныНоменклатурыКонтрагентов.Номенклатура = СписокЗатрат.Затрата
                    И ЦеныНоменклатурыКонтрагентов.ТипЦен.ТипЦеныНоменклатуры = &ТипЦен
                УПОРЯДОЧИТЬ ПО
                    ЦеныНоменклатурыКонтрагентов.Регистратор.Дата УБЫВ))
            И (НЕ ЦеныНоменклатурыКонтрагентовДопЦена2.Регистратор В
                    (ВЫБРАТЬ ПЕРВЫЕ 2
                        ЦеныНоменклатурыКонтрагентов.Регистратор
                    ИЗ
                        РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
                    ГДЕ
                        ЦеныНоменклатурыКонтрагентов.Номенклатура = СписокЗатрат.Затрата
                        И ЦеныНоменклатурыКонтрагентов.ТипЦен.ТипЦеныНоменклатуры = &ТипЦен
                    УПОРЯДОЧИТЬ ПО
                        ЦеныНоменклатурыКонтрагентов.Регистратор.Дата УБЫВ))
23 PCcomCat
 
07.04.17
15:46
+(22) У меня поиск последней цены по номенклатуре. А у тебя максимум по номенклатуре
24 azernot
 
07.04.17
15:48
ВЫБРАТЬ
МАКСИМУМ(ПИК_КоэффСегмДляЗП.Период) КАК Период,
ПИК_КоэффСегмДляЗП.Сегмент
ПОМЕСТИТЬ ТМАКСП
ИЗ
    РегистрСведений.ПИК_КоэффСегмДляЗП КАК ПИК_КоэффСегмДляЗП

СГРУППИРОВАТЬ ПО
    ПИК_КоэффСегмДляЗП.Сегмент
;

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

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

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НоменклатураСегмента.Номенклатура КАК Номенклатура,
    ТМАКСП.Период КАК Период,
    ТМАКСП.Сегмент КАК Сегмент
ИЗ
    РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТМАКСП КАК ТМАКСП
        ПО НоменклатураСегмента.Сегмент = ТМАКСП.Сегмент
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ НоменклатураМаксимумПериодСегмента КАК НоменклатураМаксимумПериодСегмента
        ПО НоменклатураСегмента.Номенклатура= НоменклатураМаксимумПериодСегмента.Номенклатура
           И ТМАКСП.период= НоменклатураМаксимумПериодСегмента.Период
25 Вафель
 
07.04.17
15:48
написать развернуто срез последних - это классическая задача.
гуглится на раз-два.
26 PCcomCat
 
07.04.17
15:50
(24) Максимум сегмента у каждой номенклатуры свой. Не прокатит...
27 azernot
 
07.04.17
15:52
(26) Да? И в каком регистре период сегмента по номенклатуре хранится?
28 lakich
 
07.04.17
15:54
(24) все просто...спасибо)..а я тормоз))
29 azernot
 
07.04.17
16:01
(28) Но если для двух сегментов одинаковая дата, и с этими двумя сегментами связана одна номенклатура - запрос даст сбой.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн