|
СКД: изменение текста запроса системой компоновки | ☑ | ||
---|---|---|---|---|
0
Kaidend
14.03.13
✎
14:31
|
Всем привет. Столкнулся с одной проблемкой в СКД, не могу сообразить, как ее решить.
В общем, есть простейшая таблица вида Документ - Номенклатура - Количество. Номенклатура может несколько раз повторяться в пределах одного документа, т. е. поля Документ и Номенклатура не образуют вместе первичный ключ. Есть такой запрос: ВЫБРАТЬ Таблица.Документ, Таблица.Номенклатура, СУММА(Таблица.Количеств) КАК Количество ПОМЕСТИТЬ СгруппированнаяТаблица ИЗ Таблица КАК Таблица СГРУППИРОВАТЬ ПО Таблица.Документ, Таблица.Номенклатура ; ////////////////////////////// ВЫБРАТЬ СгруппированнаяТаблица.Документ, СУММА(ВЫБОР КОГДА СгруппированнаяТаблица.Количество > 3 ТОГДА 1 ИНАЧЕ 0) КОНЕЦ ИЗ СгруппированнаяТаблица КАК СгруппированнаяТаблица СГРУППИРОВАТЬ ПО СгруппированнаяТаблица.Документ СКД, когда выполняет запрос, убирает из временной таблицы группировку по номенклатуре, т. к. ее нет ни в выводимых полях, ни в группировочных, ну в общем, нигде (ну, собственно, номенклатуры нет и в результирующем запросе, так что попасть в какие-либо поля она не может). То есть запрос такой получается: ВЫБРАТЬ Таблица.Документ СУММА(Таблица.Количеств) КАК Количество ПОМЕСТИТЬ СгруппированнаяТаблица ИЗ Таблица КАК Таблица СГРУППИРОВАТЬ ПО Таблица.Документ, Таблица.Номенклатура ; ////////////////////////////// ВЫБРАТЬ СгруппированнаяТаблица.Документ, СУММА(ВЫБОР КОГДА СгруппированнаяТаблица.Количество > 3 ТОГДА 1 ИНАЧЕ 0) КОНЕЦ ИЗ СгруппированнаяТаблица КАК СгруппированнаяТаблица СГРУППИРОВАТЬ ПО СгруппированнаяТаблица.Документ В итоге отчет выводит совсем не то, что нужно. Кто-нибудь знает, как справиться с таким самовольным поведением СКД? |
|||
1
Kaidend
14.03.13
✎
14:32
|
Прощу прощения, неудачно скопипастил второй запрос. Он такой получается:
ВЫБРАТЬ Таблица.Документ СУММА(Таблица.Количеств) КАК Количество ПОМЕСТИТЬ СгруппированнаяТаблица ИЗ Таблица КАК Таблица СГРУППИРОВАТЬ ПО Таблица.Документ ; ////////////////////////////// ВЫБРАТЬ СгруппированнаяТаблица.Документ, СУММА(ВЫБОР КОГДА СгруппированнаяТаблица.Количество > 3 ТОГДА 1 ИНАЧЕ 0) КОНЕЦ ИЗ СгруппированнаяТаблица КАК СгруппированнаяТаблица СГРУППИРОВАТЬ ПО СгруппированнаяТаблица.Документ |
|||
2
Kaidend
14.03.13
✎
15:02
|
Апнем, пожалуй.
|
|||
3
Пеппи
14.03.13
✎
15:23
|
тебе нужно сгруппировать номенклатуру в пределах одного документа?
|
|||
4
YAGolova
14.03.13
✎
15:24
|
У меня тоже были подобные случаи, я помещал еще в одну временную таблицу и уже потоб брал оттуда данные - мне помогало...
|
|||
5
Kaidend
14.03.13
✎
15:25
|
(3) Да, и определить, сколько раз в пределах одного документа какая-то номенклатура имеет количество более 3.
На самом деле, задача чуть более сложная, но я упростил, поэтому она может казаться немного странной. Но меня даже сам принцип удивляет какого-то крайне неаккуратного вмешательства СКД в текст запроса. |
|||
6
Kaidend
14.03.13
✎
15:26
|
(4) Типа до первой временной таблицы СКД не доберется? :) Хотя попробовать можно...
|
|||
7
Пеппи
14.03.13
✎
15:26
|
(5)в бесплатных видео Гилева чтото было на эту тему.
|
|||
8
Vakhrin
14.03.13
✎
15:28
|
ВЫБРАТЬ
Таблица.Документ, СУММА(ВЫБОР КОГДА СгруппированнаяТаблица.Количество > 3 ТОГДА 1 ИНАЧЕ 0) КОНЕЦ КАК Поле1 Поместить ТаблицаДокумент ИЗ Таблица КАК Таблица СГРУППИРОВАТЬ ПО СгруппированнаяТаблица.Документ; ВЫБРАТЬ Таблица.Документ, Таблица.Номенклатура, СУММА(Таблица.Количеств) КАК Количество, ТаблицаДокумент.Поле1 ИЗ Таблица КАК Таблица ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаДокумент КАК ТаблицаДокумент ПО ТаблицаДокумент.Документ = Таблица.Документ СГРУППИРОВАТЬ ПО Таблица.Документ, Таблица.Номенклатура, ТаблицаДокумент.Поле1 |
|||
9
Vakhrin
14.03.13
✎
15:30
|
к (8) сори... работать не будет, потому как обращение к несуществующей таблице в первом запросе, но общий смысл должен быть понятен вроде )
|
|||
10
Defender aka LINN
14.03.13
✎
15:35
|
1465-я жертва автозаполнения...
|
|||
11
Vakhrin
14.03.13
✎
15:37
|
(10) Где?! Оо
|
|||
12
Defender aka LINN
14.03.13
✎
15:45
|
(11) в (0)
|
|||
13
Kaidend
14.03.13
✎
16:07
|
(4) Как ни странно помогло, хех.
(10) А поподробнее можно? А то уж больно намек туманный. Я включил в результирующий запрос поле Номенклатура, засунув его в агрегатную функцию, и включил этому полю признак "Обязательное" в наборе данных (в диалоге "Роль"). Проблема как бы решилась, но какой-то кривой способ все равно. |
|||
14
Defender aka LINN
14.03.13
✎
16:41
|
(13) Надо знать, как работает построитель запроса / СКД.
Если поле не выбрано в настройках нигде и не является обязательным, СКД его из запроса недолго думая выкидывает. Чтобы этого избежать, надо самому в {} поля прописывать |
|||
15
Kaidend
14.03.13
✎
17:31
|
(14) Хм, не пойму все-таки, какое отношение к данной проблеме имеет метод заполнения полей набора данных - через автозаполнение или вручную через фигурные скобки. Мне же все равно придется включать поле Номенклатура в результирующий запрос и указывать в его свойствах в наборе данных, что оно обязательное, иначе СКД его решительно выкинет. Какая в этом случае разница, как были заполнены поля набора данных - автозаполнением или вручную?
|
|||
16
Defender aka LINN
14.03.13
✎
19:34
|
(15) Следи за руками:
|
|||
17
rphosts
14.03.13
✎
19:38
|
(0) отключ автозаполнение и бдет тебе счастье!
|
|||
18
Kaidend
15.03.13
✎
10:07
|
(16) Видимо, я отчаянно туплю, но не работает.
Скопипастил твой запрос в СКД, выключил автозаполнение. Выполнил отчет. Посмотрел результат, он такой, как будто СКД выкинула группировку по номенклатуре из запроса, формирующего временную таблицу. Посмотрел отчет в консоли системы компоновки данных - точно. СКД преобразует запрос следующим образом: ВЫБРАТЬ Таблица.Документ КАК Документ, СУММА(Таблица.Количество) КАК Количество ПОМЕСТИТЬ СгруппированнаяТаблица ИЗ РегистрСведений.Таблица КАК Таблица СГРУППИРОВАТЬ ПО Таблица.Документ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СгруппированнаяТаблица.Документ КАК Документ, СУММА(ВЫБОР КОГДА СгруппированнаяТаблица.Количество > 3 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК Поле, ПРЕДСТАВЛЕНИЕССЫЛКИ(СгруппированнаяТаблица.Документ) КАК ДокументПредставление ИЗ СгруппированнаяТаблица КАК СгруппированнаяТаблица СГРУППИРОВАТЬ ПО СгруппированнаяТаблица.Документ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |