Имя: Пароль:
1C
1С v8
Как обойти новшевства в запросе платформы 1с 8.2?!
0 junior_senior
 
10.03.13
19:52
Доброе время суток!
Столкнулся с ситуацией, которая раньше не имела смысла, а именно обязательное добавление поля в запросе, если по нему необходимо сделать сортировку. В принципе, фирма 1С регламентировала использование данного условия, и этим допущением можно пренебречь, если не делать группировку по полям. Но у меня как раз такая ситуация.
Тоже самое, но другими словами)) Произвожу сортировку по полю "Дата", но мне категорически не надо, чтобы данное поле попадало в группировку по полям (на ряду с этим полем обязательно должны группироваться другие поля) Если я исключаю его из полей, то выдаёт закономерную запись "Поле не входит в группу". Есть ли какие-нибудь пути обхода данной ситуации, или после получения выборки по запросу удалять ненужные строки? Заранее благодарен за любой ответ.
На всякий случай текст запроса:
ВЫБРАТЬ
   ВложенныйЗапрос.Склад,
   ВложенныйЗапрос.Номенклатура,
   СУММА(ВложенныйЗапрос.Остаток) КАК Остаток,
   ВложенныйЗапрос.Артикул,
   СУММА(ВЫБОР
           КОГДА СебестоимостьТоваров.Количество = 0
               ТОГДА 0
           ИНАЧЕ СебестоимостьТоваров.Стоимость / СебестоимостьТоваров.Количество
       КОНЕЦ) КАК Цена,
   СебестоимостьТоваров.Регистратор.Дата
ИЗ
   (ВЫБРАТЬ
       ТоварыКОформлениюИзлишковНедостачОстатки.Склад КАК Склад,
       ТоварыКОформлениюИзлишковНедостачОстатки.Номенклатура КАК Номенклатура,
       СУММА(ТоварыКОформлениюИзлишковНедостачОстатки.КОформлениюАктовОстаток) КАК Остаток,
       ТоварыКОформлениюИзлишковНедостачОстатки.Номенклатура.Артикул КАК Артикул
   ИЗ
       РегистрНакопления.ТоварыКОформлениюИзлишковНедостач.Остатки(, Склад = &Склад) КАК ТоварыКОформлениюИзлишковНедостачОстатки
   ГДЕ
       ТоварыКОформлениюИзлишковНедостачОстатки.КОформлениюАктовОстаток < 0
   
   СГРУППИРОВАТЬ ПО
       ТоварыКОформлениюИзлишковНедостачОстатки.Номенклатура,
       ТоварыКОформлениюИзлишковНедостачОстатки.Склад,
       ТоварыКОформлениюИзлишковНедостачОстатки.Номенклатура.Артикул) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
       ПО ВложенныйЗапрос.Склад = СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Склад
           И ВложенныйЗапрос.Номенклатура = СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура

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

УПОРЯДОЧИТЬ ПО
   СебестоимостьТоваров.Регистратор.Дата УБЫВ
1 GANR
 
10.03.13
19:57
А обернуть запрос (1) во вложенный запрос, в котором все сгруппировано так, как надо?
2 mistеr
 
10.03.13
19:57
Сортировка выполнятся после группировки. Так что надо включать.
3 mikecool
 
10.03.13
20:15
(0) как ты себе представляешь сортировку по полю, которого нет в запросе?
4 mikecool
 
10.03.13
20:16
+3 и это не новшество, это скорее возврат к истокам скулевых запросов.
5 Злобный Фей
 
10.03.13
20:18
(2) Какая разница, до или после?
6 junior_senior
 
11.03.13
06:02
(1) GANR, если я его "оберну" во вложенной запрос, то это ничего не изменит, т.к. мне всё равно придётся в группировку добавлять сортировочное поле.
7 junior_senior
 
11.03.13
06:09
(4) В самую точку! Где-то я слышал, что данное построение запроса действительно более правильное, и похоже на скулевский язык, с которым к сожалению не очень-то знаком( Сложности не возникало, как в 7-ных, так и в 8-ных запросах, где я бы сделал сортировку по полю (в моём случае по полю "Дата"), а в группировку его бы не включил. И результат запроса меня полностью устроил. Видимо придётся фильтровать уже итоговую выборку(
p.s. мне ещё предстоит собрать камни, которые уже давно известны))
8 junior_senior
 
11.03.13
06:10
(2) Согласен со Злобным Феем, какая разница?
9 kosts
 
11.03.13
06:15
Делай 1С-кую группировку, правда получишь дерево, но это можно обойти.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              |    ФизическиеЛица.Наименование КАК Наименование,
              |    ФизическиеЛица.ДатаРождения КАК ДатаРождения
              |ИЗ
              |    Справочник.ФизическиеЛица КАК ФизическиеЛица
              |
              |УПОРЯДОЧИТЬ ПО
              |    ДатаРождения
              |ИТОГИ ПО
              |    Наименование"
;

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока Выборка.Следующий() Цикл
   
КонецЦикла;
10 Defender aka LINN
 
11.03.13
06:30
(9) Жесть какая...
(6) Что мешает добавить поле Минимум(Дата) и сортировать по нему?
11 mistеr
 
11.03.13
12:22
(5) (8) Во-первых, после группировки меняется состав как строк, так и колонок (в общем случае), так что результат сортировки будет существенно разным. Во-вторых, операция группировки не сохраняет (в общем случае) порядок.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший