|
1С 8. запрос. ОБЪЕДИНИТЬ не объединяет | ☑ | ||
---|---|---|---|---|
0
m1_1976
31.07.14
✎
12:19
|
Всем привет
Есть простой запрос. ВЫБРАТЬ ЧекККМТовары.Ссылка.Сотрудник КАК СОТРУДНИК, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК КоличествоЧеков, СУММА(ЧекККМТовары.Количество) КАК КолВоВСЕГО, СУММА(ЧекККМТовары.Сумма) КАК СуммаВСЕГО, ВЫРАЗИТЬ(СУММА(ЧекККМТовары.Сумма) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК ЧИСЛО(15, 2)) КАК СредняяСУммаЧека, ВЫРАЗИТЬ(СУММА(ЧекККМТовары.Сумма) / СУММА(ЧекККМТовары.Количество) КАК ЧИСЛО(15, 2)) КАК СредняяСтТовара, ВЫРАЗИТЬ(СУММА(ЧекККМТовары.Количество) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК ЧИСЛО(15, 2)) КАК СрКоличество ИЗ Документ.ЧекККМ.Товары КАК ЧекККМТовары ГДЕ ЧекККМТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ЧекККМТовары.ЧекПробитНаККМ = &ЧекПробитНаККМДА СГРУППИРОВАТЬ ПО ЧекККМТовары.Ссылка.Сотрудник ОБЪЕДИНИТЬ ВЫБРАТЬ ВТ.Ссылка.Сотрудник, -1 * КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка), -1 * СУММА(ВТ.Количество), -1 * СУММА(ВТ.Сумма), -1 * (ВЫРАЗИТЬ(СУММА(ВТ.Сумма) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка) КАК ЧИСЛО(15, 2))), -1 * (ВЫРАЗИТЬ(СУММА(ВТ.Сумма) / СУММА(ВТ.Количество) КАК ЧИСЛО(15, 2))), -1 * (ВЫРАЗИТЬ(СУММА(ВТ.Количество) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка) КАК ЧИСЛО(15, 2))) ИЗ Документ.ВозвратТоваровОтПокупателя.Товары КАК ВТ ГДЕ ВТ.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ВТ.Ссылка.Проведен = &ЧекПробитНаККМДА СГРУППИРОВАТЬ ПО ВТ.Ссылка.Сотрудник результат не объединяет. Почему то. То есть по одному человеку есть и продажи по чекам и возврат по покупателю... а он мне две строки выдает! ... откройте глаза слепому |
|||
1
ДенисЧ
31.07.14
✎
12:20
|
Он и должен дать 2 строки
|
|||
2
Wobland
31.07.14
✎
12:20
|
числа разные
|
|||
3
Огурцы
31.07.14
✎
12:20
|
(0)все правильно он тебе выдает
|
|||
4
m1_1976
31.07.14
✎
12:21
|
(1) - а как сделать одну?
Могу конечно выгружать в ТЗ и сворачивать... но как-то не удобно перед самим собой |
|||
5
m1_1976
31.07.14
✎
12:21
|
что значит числа разные?
|
|||
6
Огурцы
31.07.14
✎
12:21
|
вроде как присоединять обычно нужно
|
|||
7
ДенисЧ
31.07.14
✎
12:22
|
(4) А в запросе свернуть? Аллах не дозволяет?
|
|||
8
SeraFim
31.07.14
✎
12:22
|
А из регистров получать - религия не позволяет?
|
|||
9
m1_1976
31.07.14
✎
12:23
|
(7) - просто подскажи. зачем тебе ответы про аллаха и прочая ерунда
|
|||
10
Drac0
31.07.14
✎
12:23
|
(0) Сгруппировать после объединения. Либо сначала подзапрос, либо в ВТ.
|
|||
11
ДенисЧ
31.07.14
✎
12:23
|
(9) подзапрос с группировкой...
|
|||
12
GROOVY
31.07.14
✎
12:23
|
ОБЪЕДИНИТЬ берет две таблицы и друг на друга их ставит, ну и если слово ВСЕ опущено, делает это только для уникальных записей.
|
|||
13
m1_1976
31.07.14
✎
12:23
|
Как я из регистров получу среднее количество товара в чеке. Среденее количество чеков и т.д.
|
|||
14
m1_1976
31.07.14
✎
12:24
|
(10) как сгрупирровать после объединения в запросе?
|
|||
15
Жан Пердежон
31.07.14
✎
12:25
|
(14) как все запущено...
|
|||
16
_fvadim
31.07.14
✎
12:25
|
|
|||
17
m1_1976
31.07.14
✎
12:25
|
(12) понял. но как мне свою задачку решить кроме как
тз = запрос.Выполнить().Выгрузить(); А потом ТЗ.Свернуть()... но это надо в код выноситься... |
|||
18
m1_1976
31.07.14
✎
12:26
|
(16) - пробую.
|
|||
19
Жан Пердежон
31.07.14
✎
12:26
|
(17) в (10) уже написалиЛибо сначала подзапрос, либо в ВТ.
|
|||
20
Крошка Ру
31.07.14
✎
12:28
|
(16) Вложенный запрос... фу таким быть.
|
|||
21
Крошка Ру
31.07.14
✎
12:29
|
ВТ - это наше всё!
|
|||
22
mikecool
31.07.14
✎
12:29
|
(12) вот как то не получалось у меня, что бы ОБЪЕДИНИТЬ в результате группировал автоматически записи
как то наблюдал и был в легком шоке |
|||
23
_fvadim
31.07.14
✎
12:29
|
(21) зачем плодить сущности?
|
|||
24
Крошка Ру
31.07.14
✎
12:30
|
(23) преимущество запроса - в скорости выполнения. зачем ему в этом мешать?
|
|||
25
_fvadim
31.07.14
✎
12:31
|
(24) т.е. упихать в ВТ, и потом сделать запрос к ВТ - это быстрее, чем вложенный запрос?
|
|||
26
_fvadim
31.07.14
✎
12:31
|
ну применительно к текущей ситуации, когда данные используются 1 раз
|
|||
27
m1_1976
31.07.14
✎
12:32
|
Вот так вышло!
ВЫБРАТЬ ПодЗапрос.СОТРУДНИК, СУММА(ПодЗапрос.КоличествоЧеков) КАК КоличествоЧеков, СУММА(ПодЗапрос.КолВоВСЕГО) КАК КолВоВСЕГО, СУММА(ПодЗапрос.СуммаВСЕГО) КАК СуммаВСЕГО, СУММА(ПодЗапрос.СредняяСУммаЧека) КАК СредняяСУммаЧека, СУММА(ПодЗапрос.СрКоличество) КАК СрКоличество ИЗ (ВЫБРАТЬ ЧекККМТовары.Ссылка.Сотрудник КАК СОТРУДНИК, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК КоличествоЧеков, СУММА(ЧекККМТовары.Количество) КАК КолВоВСЕГО, СУММА(ЧекККМТовары.Сумма) КАК СуммаВСЕГО, ВЫРАЗИТЬ(СУММА(ЧекККМТовары.Сумма) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК ЧИСЛО(15, 2)) КАК СредняяСУммаЧека, ВЫРАЗИТЬ(СУММА(ЧекККМТовары.Сумма) / СУММА(ЧекККМТовары.Количество) КАК ЧИСЛО(15, 2)) КАК СредняяСтТовара, ВЫРАЗИТЬ(СУММА(ЧекККМТовары.Количество) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЧекККМТовары.Ссылка) КАК ЧИСЛО(15, 2)) КАК СрКоличество ИЗ Документ.ЧекККМ.Товары КАК ЧекККМТовары ГДЕ ЧекККМТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ЧекККМТовары.ЧекПробитНаККМ = &ЧекПробитНаККМДА СГРУППИРОВАТЬ ПО ЧекККМТовары.Ссылка.Сотрудник ОБЪЕДИНИТЬ ВЫБРАТЬ ВТ.Ссылка.Сотрудник, -1 * КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка), -1 * СУММА(ВТ.Количество), -1 * СУММА(ВТ.Сумма), -1 * (ВЫРАЗИТЬ(СУММА(ВТ.Сумма) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка) КАК ЧИСЛО(15, 2))), -1 * (ВЫРАЗИТЬ(СУММА(ВТ.Сумма) / СУММА(ВТ.Количество) КАК ЧИСЛО(15, 2))), -1 * (ВЫРАЗИТЬ(СУММА(ВТ.Количество) / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ.Ссылка) КАК ЧИСЛО(15, 2))) ИЗ Документ.ВозвратТоваровОтПокупателя.Товары КАК ВТ ГДЕ ВТ.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ВТ.Ссылка.Проведен = &ЧекПробитНаККМДА СГРУППИРОВАТЬ ПО ВТ.Ссылка.Сотрудник) КАК ПодЗапрос СГРУППИРОВАТЬ ПО ПодЗапрос.СОТРУДНИК |
|||
28
m1_1976
31.07.14
✎
12:33
|
спс как тут плюсы раздать ??? :)
|
|||
29
freddy_kind
31.07.14
✎
12:33
|
(25)ты наверное удивишься, но да, быстрее, у меня как то отчет в разы стал быстрее работать, когда я просто вместо вложенных переделал его на ВТ.
|
|||
30
_fvadim
31.07.14
✎
12:33
|
(27) называй меня учитель
шутка :) |
|||
31
Drac0
31.07.14
✎
12:34
|
(25) это стабильнее.
|
|||
32
Крошка Ру
31.07.14
✎
12:35
|
(25) в общем случае - да. По крайней мере не медленнее. А насчет умножения сущностей: подзапрос - это тоже новая сущность. Так что ссылка на Оккама здесь не катит.
|
|||
33
_fvadim
31.07.14
✎
12:35
|
(29) не удивлюсь, особенно если ВТ соединяется сама с собой.
в случае, когда данные используются один раз, делать ВТ - абсолютно лишние телодвижения |
|||
34
Drac0
31.07.14
✎
12:35
|
(27) не делай сгруппировать в подзапросе - это лишнее.
|
|||
35
_fvadim
31.07.14
✎
12:36
|
(32) для подзапроса не создаётся временных таблиц на сервере.
|
|||
36
_fvadim
31.07.14
✎
12:38
|
рекомендую профайлером посмотреть, сколько всего делается при ипользовании ВТ.
|
|||
37
Drac0
31.07.14
✎
12:38
|
(35) да? :-)
|
|||
38
_fvadim
31.07.14
✎
12:40
|
(37) ты пользуешься моей мнительностью, щас проверю :)
|
|||
39
Drac0
31.07.14
✎
12:41
|
(38) профайлер о многом не рассказывает :-)
|
|||
40
ДенисЧ
31.07.14
✎
12:42
|
(39) Грамотное применение профайлера вкупе с другими средствами даст ответ почти на любой вопрос.
Ну, может, кроме того, кто убил Кеннеди... |
|||
41
_fvadim
31.07.14
✎
12:43
|
а-а-а, ну, что там совсем внутри, я конечно не знаю.
но по крайней мере явных create table нету |
|||
42
Крошка Ру
31.07.14
✎
12:44
|
(28) Про ТСа забыли))
Плюсов здесь у всех - ну просто завались. Дяди работают на плюсовой фабрике. Вот и шлют кому попало. |
|||
43
Ёпрст
31.07.14
✎
12:45
|
(27) выкини группировки унутри подзапроса, раз уж потом опять группируешь.
|
|||
44
m1_1976
31.07.14
✎
12:56
|
(43) все сделано уже. Спс. Этот совет уже был.
|
|||
45
jk3
31.07.14
✎
13:16
|
(12) Угу. Иногда это удобно, т.к.
Выбрать * Объединить Выбрать * равнозначно Выбрать Различные * из (Выбрать * Объединить Все Выбрать *) |
|||
46
acsent
31.07.14
✎
13:27
|
(45) из первой таблицы НЕ берутся различные
|
|||
47
acsent
31.07.14
✎
13:29
|
(46) Хотя нет, берутся
|
|||
48
acsent
31.07.14
✎
13:29
|
ВЫБРАТЬ
Выборка.Поле ИЗ (ВЫБРАТЬ 1 КАК Поле ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1) КАК Выборка ОБЪЕДИНИТЬ ВЫБРАТЬ 1 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |