Имя: Пароль:
1C
1С v8
Скверно работает упорядочивание в запросе
,
0 Prog111
 
16.02.16
09:02
Делаю запрос, в котором собираю остатки товаров исходя из регистра "Партии товаров на складах". На соединение с документами прихода внимание не обращайте - мне это нужно, чтобы вытаскивать менеджера из документа поступления товаров.

Далее, хочу отсортировать остатки по сроку годности, взятому из серии номенклатуры. Делаю "Упорядочить" в запросе - сначала по организации, потом по сроку годности.

Результат вывожу по группировкам:
1) Общие итоги
2) Организация
3) Номенклатура
4) Серия номенклатуры

И вот такая фигня - при выводе группировки по первой организации всё сортируется отлично - товары выводятся с упорядочением по сроку годности. Но когда выводится товар по второй организации - то сортировка товаров идет как попало, даже не могу увидеть закономерность.

Может, подскажете, в чем проблема...

Вот текст запроса:

|ВЫБРАТЬ
|    ПоступлениеТоваровУслугТовары.Ссылка.Организация КАК Организация,
|    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
|    ПоступлениеТоваровУслугТовары.СерияНоменклатуры КАК СерияНоменклатуры,
|    СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток,
|    СУММА(ПартииТоваровНаСкладахОстатки.СтоимостьОстаток) КАК СтоимостьОстаток,
|    СУММА(ПартииТоваровНаСкладахОстатки.СуммаУчетнаяОстаток) КАК СуммаУчетнаяОстаток,
|    ПоступлениеТоваровУслугТовары.Ссылка КАК ДокументОприходования
|ИЗ
|    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&НаДату, ) КАК ПартииТоваровНаСкладахОстатки
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|        ПО ПартииТоваровНаСкладахОстатки.ДокументОприходования = ПоступлениеТоваровУслугТовары.Ссылка
|            И ПартииТоваровНаСкладахОстатки.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
|            И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры = ПоступлениеТоваровУслугТовары.СерияНоменклатуры
|
|СГРУППИРОВАТЬ ПО
|    ПоступлениеТоваровУслугТовары.Ссылка.Организация,
|    ПоступлениеТоваровУслугТовары.Номенклатура,
|    ПоступлениеТоваровУслугТовары.СерияНоменклатуры,
|    ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
|    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
|    ПартииТоваровНаСкладахОстатки.СуммаУчетнаяОстаток,
|    ПоступлениеТоваровУслугТовары.Ссылка
|
|УПОРЯДОЧИТЬ ПО
|    ПоступлениеТоваровУслугТовары.Ссылка.Организация.Наименование,
|    ПоступлениеТоваровУслугТовары.СерияНоменклатуры.СрокГодности
|ИТОГИ
|    СУММА(КоличествоОстаток),
|    СУММА(СтоимостьОстаток),
|    СУММА(СуммаУчетнаяОстаток)
|ПО
|    ОБЩИЕ,
|    Организация,
|    Номенклатура,
|    СерияНоменклатуры
1 vip03
 
16.02.16
09:05
|УПОРЯДОЧИТЬ ПО
|    ПоступлениеТоваровУслугТовары.Ссылка.Организация.Наименование,
|    ПоступлениеТоваровУслугТовары.СерияНоменклатуры.СрокГодности

а где здесь упорядочивание по товарам?
2 Prog111
 
16.02.16
09:10
(1) А по товарам (наименованию) в этом запросе не нужно упорядочивание. Подразумевается (мною), что таблица отсортируется по срокам годности, и в зависимости от сроков годности будет выводиться сам товар.
3 Apokalipsec
 
16.02.16
09:12
(2) Так зачем упорядочивание по наименованию организации вытянутое через ж?
4 marvak
 
16.02.16
09:13
(0)
срок годности то в запросе выведи
5 ptiz
 
16.02.16
09:14
(2) Сам же написал в запросе
ИТОГИ ПО ..
ПО
|    ОБЩИЕ,
|    Организация,
|    Номенклатура,
|    СерияНоменклатуры

Поэтому сначала по товарам сортирует, причем по их ID, а внутри товара - серии пойдут по срокам
6 Prog111
 
16.02.16
09:23
(5) Группирует по товарам, да. Но сортировать же запрос должен по сроку годности?
То есть если есть товары с несколькими сериями с разными сроками годности - то сначала выводится товар с самой ранней серией, по нему выводятся все серии (пусть и с более поздними сроками), затем товар с серией более поздней, чем самая ранняя серия первого товара.
7 Prog111
 
16.02.16
09:34
Например, должно выводиться так:

1) Цитрамон
      - 01.01.2017
      - 31.06.2017
      - 31.12.2018

1) Но-шпа
      - 01.03.2017
      - 31.07.2017
      - 31.12.2017

1) Витамин А
      - 01.07.2017
      - 31.08.2017
      - 31.12.2019



То есть я упорядочиваю по сроку годности и получаю:
- 01.01.2017 (Цитрамон)
- 01.03.2017 (Но-шпа)
- 31.06.2017 (Цитрамон)
- 01.07.2017 (Витамин А)
- 31.08.2017 (Витамин А)
- 31.12.2017 (Но-шпа)
- 31.12.2018 (Цитрамон)
- 31.12.2019 (Витамин А)


---------------------------------------
И вот что в итоге получается - при выводе результата по первой организации всё так и выходит, как надо. А когда начинает выводиться результат запроса по второй организации - то вывод идёт как попало.
8 ObjectRelation Model
 
16.02.16
09:36
может там сроков годности не указано?
9 mehfk
 
16.02.16
09:37
Для осознания всей тупости происходящего предлагаю проверить чему равно значение поля "СрокГодности" на уровне группировки "Номенклатура".
10 Prog111
 
16.02.16
09:38
(8) Нет, сроки годности есть. С отсутствующими выводятся в первую очередь.
11 Prog111
 
16.02.16
09:40
(3) Иначе ругается на неоднозначность поля.
12 ObjectRelation Model
 
16.02.16
09:41
вынеси поле в ВЫБРАТЬ и в ИТОГИ
13 Prog111
 
16.02.16
09:44
(9) Оно равно NULL, что логично)
Но ведь по идее результат запроса уже должен упорядочиться до вывода группировок.
14 mehfk
 
16.02.16
09:44
Кому должен?
15 Prog111
 
16.02.16
11:31
(14) Разве нет?
Допустим, есть запрос с группировкой по товарам и по сериям, с упорядочением по наименованию товаров. Когда начинает выводиться группировка товаров - должно же быть известно уже, какой товар должен выйти первым - то есть таблица из запроса уже должна упорядочиться.

Я, конечно, могу ошибаться...
16 marvak
 
16.02.16
11:45
Сначала идет группировка по итогам, а внутри каждой группы из итогов уже сортировка.
то есть в пределах каждой номенклатуры упорядочится по сроку годности, но не в пределах организации.
17 Prog111
 
16.02.16
12:40
(16) Как ни странно, но в пределах первой организации тоже отсортировалось по сроку годности.
18 mehfk
 
16.02.16
12:46
Тормозуху что-ли бухал на выходных?
19 Prog111
 
16.02.16
12:47
(18) Ты что такой агрессивный?
20 Cyberhawk
 
16.02.16
12:47
Добавь в плоскую таблицу для каждой номенклатурной позиции еще  одно поле: самая ранняя дата серии
По нему и упорядочивай в группировке "Номенклатура"
21 Prog111
 
16.02.16
12:56
(20) Это через вложенный запрос можно сделать?
22 Eugene_life
 
16.02.16
12:59
(0) Я бы убрал итоги вообще, результат нынешнего запроса поместил в промежуточную виртуальную таблицу и уже в ней отсортировал поля так, как нужно.
23 mehfk
 
16.02.16
13:02
(19) Я добрый.
24 Cyberhawk
 
16.02.16
13:04
(21) Левое соединение к таблице "Номенклатура" - "Дата серии", свернутой по номенклатуре и минимуму даты
25 mehfk
 
16.02.16
13:14
Читай (12) и не городи велосипедов.