0
- 23.02.2012 - 14:17
|
Запрос: SELECT (ВЫБОР КОГДА Выборка.Касса = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Касса КОНЕЦ) ВыборкаКасса, Выборка.НачОстКасса, Выборка.КонОстКасса, Выборка.ПриходКасса, Выборка.РасходКасса, (ВЫБОР КОГДА Выборка.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Регистратор КОНЕЦ) Регистратор, Выборка.ПериодСекунда FROM ( SELECT регКасса.Касса Касса, регКасса.СуммаНачальныйОстаток НачОстКасса, регКасса.СуммаКонечныйОстаток КонОстКасса, регКасса.СуммаПриход ПриходКасса, регКасса.СуммаРасход РасходКасса, регКасса.ПериодСекунда ПериодСекунда, регКасса.Регистратор FROM РегистрНакопления.ОстаткиВКассе.ОстаткиИОбороты(** &НачПериода**, **&КонПериода**, Авто) регКасса ) Выборка При детализации Касса/Регистратор получаем: Нач. остаток - 0 Приход - 1300 Расход - 0 Кон. остаток - 1300. Эти цифры - верные. Убираю галку с детализации Регистратор и получаю: Нач. остаток - 2700 Приход - 1300 Расход - 0 Кон. остаток - 4000. Вот кто дурак и что делать? | |
1
- 23.02.2012 - 14:19
| СКД - это вынос мозга... Бежать, пора бежать!;-) | |
2
- 23.02.2012 - 14:19
| 2-Маус > Я бы с радостью. Но ранее взятые обязательства надо выполнять. | |
3
- 23.02.2012 - 14:46
|
1. Убрать вложенный запрос 2. Проверить наличие соответствующих ролей остатков у полей компоновки Если не спасет, то 3. Автозаполнение СКД отключить, описывать поля в запросе конструкциями СКД. Роли установить вручную. | |
4
- 23.02.2012 - 14:49
|
4-Reaper > 1. Нельзя. Во вложенном запросе будет несколько подзапросов, объединенных UNION. На данный момент все убрано для локализации ошибки. 2. В ролях Нач и Кон остатки указано: "Остатки", Имя: "Группа", Тип - соответствующий тип. 3. Вот здесь не понял. Вроде, элементарный запрос? Зачем такие сложности? | |
5
- 23.02.2012 - 14:55
|
5-Sadovnikov > а тексты реально исполняемых запросов не смотрел? ИМХО ПериодСекунда без Регистратор такую шутку играют | |
6
- 23.02.2012 - 14:56
|
6-roma n > Смотрел, конечно: ВЫБРАТЬ ВЫБОР КОГДА Выборка.Касса = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Касса КОНЕЦ КАК ВыборкаКасса, Выборка.НачОстКасса КАК НачОстКасса, Выборка.КонОстКасса КАК КонОстКасса, Выборка.ПриходКасса КАК ПриходКасса, Выборка.РасходКасса КАК РасходКасса, ПРЕДСТАВЛЕНИЕССЫЛКИ(ВЫБОР КОГДА Выборка.Касса = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Касса КОНЕЦ) КАК ВыборкаКассаПредставление ИЗ (ВЫБРАТЬ регКасса.Касса КАК Касса, регКасса.СуммаНачальныйОстаток КАК НачОстКасса, регКасса.СуммаКонечныйОстаток КАК КонОстКасса, регКасса.СуммаПриход КАК ПриходКасса, регКасса.СуммаРасход КАК РасходКасса, регКасса.ПериодСекунда КАК ПериодСекунда, регКасса.Регистратор КАК Регистратор ИЗ РегистрНакопления.ОстаткиВКассе.ОстаткиИОбороты(&П 2, &П, Авто, , ) КАК регКасса) КАК Выборка КонПериода: 29.02.2012 23:59:59 НачПериода: 01.02.2012 0:00:00 П: 29.02.2012 23:59:59 П2: 01.02.2012 0:00:00 Период: 01.02.2012 - 29.02.2012 | |
7
- 23.02.2012 - 14:58
|
Твою ж мать... Поставил галку "Обязательный" тому самому ПериодСекунда. И цифры стали правильными... 6-roma n > Спасибо огромное!!! | |
8
- 23.02.2012 - 15:04
|
5-Sadovnikov > 1. Я бы использовал объединение простых наборов данных 2. Все верно 3. Оптимизатор иногда так доставляет при автозаполнении, что диву даешься. 7-Sadovnikov > Это при втором варианте? Ну вот тебе и ответ - оптимизатор из вложенного запроса не выбросил ни секунду, ни регистратор. Либо избавься от вложенного запроса, либо пиши конструкциями компоновки разрешение на манипуляцию с полями вложенного запроса, причем псевдонимы полей для вложенного запроса и для основного должны совпадать, чтобы оптимизатор их синхронно выкидывал... | |
9
- 23.02.2012 - 15:05
| 9-Reaper > В том-то и дело, что выбросил... Секунду. И посчитал погоду в результате... | |
10
- 23.02.2012 - 15:09
| (10) При второй настройке ни секунда, ни регистратор во вложенном запросе не нужны вообще. Но они остались и записей в результирующий набор данных попало больше, чем нужно. Записей по совпадающим значениям группировок несколько, а периода нигде нет - вот компоновщик и охренел мальца. Ты сейчас искусственно заставишь тащить из базы все, вплоть до регистратора - это решит проблему, но запрос виртуальной таблицы будет сложнее, чем минимально нужный. Вот и все. Дальше смотри по обстановке, нужно бороться за производительность или и так сойдет. | |
11
- 23.02.2012 - 15:11
|
11-Reaper > "Ты сейчас искусственно заставишь тащить из базы все" - и, если честно, тихо охреневаю от этого... И еще больше охреневаю от конструкции: (ВЫБОР КОГДА Выборка.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Регистратор КОНЕЦ) Регистратор, | |
12
- 23.02.2012 - 15:18
|
12-Sadovnikov > От этих выборов я еще на старте мальца охренел. Потом списал на объединение с какими-то еще запросами. Потому, что я бы их выбросил нафик. Ну и повторюсь - правильный вариант это не обязательное использование секунды, а указание полей доступных для выбора компоновщику под одинаковыми псевдонимами. Я тут с месяц назад отчет по анализу цен закупок ваял в условиях когда закупки то в евро, то в злотых, то в юанях... вот уж где мы с оптимизатором набодались. Он мне такие запросы к курсам валют, такие пересчеты делал - диво дивное. Пришлось отрубать автозаполнение и собирать мозаику вручную... | |
13
- 23.02.2012 - 15:18
| Неопределено - это значение (аналогично пустой ссылке - хоть и пустая, но есть). NULL - отсутствие значения. | |
14
- 23.02.2012 - 15:20
|
13-Reaper > Да я понимаю, когда отчет - сложный. Там и у прогера башню снесет. Не то что у оптимизатора. Но когда вот такая элементарщина... Тут уже начинаешь задумываться: а вот это, в чем я отчет пишу, точно - учетная программа нового поколения? | |
15
- 23.02.2012 - 15:21
| (15) *ворчит: "Сразу надо было вложенный запрос вышвырнуть, и сделать несколько простых наборов данных в объединении"* | |
16
- 23.02.2012 - 15:22
|
14-Пудель > Гениальная мысль :) Но вот только к чему она в данном случае? | |
17
- 23.02.2012 - 15:24
| 16-Reaper> Я буду думать эту мысль :) | |
18
- 23.02.2012 - 15:25
| 16-Reaper > А как при этом отработает Нач и Кон остаток? Не получу ли я новых проблем? | |
19
- 23.02.2012 - 15:31
| (19) Отработает. Главное осознать мысль, что подсчетом занимается всегда компоновщик, а не запрос. При этом если будет несколько записей с одинаковыми группировками - они будут просуммированы в лоб. Подсчет нарастающих итогов начнется только если будет отметка времени. Что нужно проконтролировать - это чтобы отметка времени включалась одновременно для всех наборов данных. | |
20
- 23.02.2012 - 15:55
|
ближайшее будущее Раскольн....... тьфу, Sadovnikov-а | |
21
- 23.02.2012 - 16:00
|
Продолжение банкета... SELECT (ВЫБОР КОГДА Выборка.Касса = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Касса КОНЕЦ) ВыборкаКасса, Выборка.НачОстКасса, Выборка.КонОстКасса, Выборка.ПриходКасса, Выборка.РасходКасса, Выборка.НачОстПодотчет, Выборка.КонОстПодотчет, Выборка.ПриходПодотчет, Выборка.РасходПодотчет, Выборка.ИтогоНачОст ИтогоНачОст, Выборка.ИтогоКонОст ИтогоКонОст, (ВЫБОР КОГДА Выборка.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Регистратор КОНЕЦ) Регистратор, Выборка.ПериодСекунда FROM ( SELECT регПодотчет.Регистратор.Касса Касса, 0 НачОстКасса, 0 КонОстКасса, 0 ПриходКасса, 0 РасходКасса, регПодотчет.СуммаНачальныйОстаток НачОстПодотчет, регПодотчет.СуммаКонечныйОстаток КонОстПодотчет, регПодотчет.СуммаПриход ПриходПодотчет, регПодотчет.СуммаРасход РасходПодотчет, регПодотчет.СуммаНачальныйОстаток ИтогоНачОст, регПодотчет.СуммаКонечныйОстаток ИтогоКонОст, регПодотчет.ПериодСекунда, регПодотчет.Регистратор FROM РегистрНакопления.Подотчет.ОстаткиИОбороты(**&НачП ериода**, **&КонПериода**, Авто) регПодотчет ) Выборка Имеем НачОстПодотчет в виде какой-то вообще бешеной цифры. Хотя, должен быть 0. | |
22
- 23.02.2012 - 16:05
| Ну так та же петрушка ведь(секунда во вложенном запросе без секунды во внешнем), только вид сбоку. Подотчет, коль скоро это своя группа показателей, должен был быть независимым набором данных, связанным с предыдущим набором по кассе и по секунде. | |
23
- 23.02.2012 - 16:09
|
23-Reaper > Ну, вроде, не должен во второй раз на те же грабли наступать. Вот выполняемый запрос: ВЫБРАТЬ ВЫБОР КОГДА Выборка.Касса = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Касса КОНЕЦ КАК ВыборкаКасса, Выборка.НачОстКасса КАК НачОстКасса, Выборка.КонОстКасса КАК КонОстКасса, Выборка.ПриходКасса КАК ПриходКасса, Выборка.РасходКасса КАК РасходКасса, Выборка.НачОстПодотчет КАК НачОстПодотчет, Выборка.КонОстПодотчет КАК КонОстПодотчет, Выборка.ПриходПодотчет КАК ПриходПодотчет, Выборка.РасходПодотчет КАК РасходПодотчет, Выборка.ИтогоНачОст КАК ИтогоНачОст, Выборка.ИтогоКонОст КАК ИтогоКонОст, ВЫБОР КОГДА Выборка.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Регистратор КОНЕЦ КАК Регистратор, Выборка.ПериодСекунда КАК ПериодСекунда, ПРЕДСТАВЛЕНИЕССЫЛКИ(ВЫБОР КОГДА Выборка.Касса = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Касса КОНЕЦ) КАК ВыборкаКассаПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(ВЫБОР КОГДА Выборка.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Регистратор КОНЕЦ) КАК РегистраторПредставление ИЗ (ВЫБРАТЬ регПодотчет.Регистратор.Касса КАК Касса, 0 КАК НачОстКасса, 0 КАК КонОстКасса, 0 КАК ПриходКасса, 0 КАК РасходКасса, регПодотчет.СуммаНачальныйОстаток КАК НачОстПодотчет, регПодотчет.СуммаКонечныйОстаток КАК КонОстПодотчет, регПодотчет.СуммаПриход КАК ПриходПодотчет, регПодотчет.СуммаРасход КАК РасходПодотчет, регПодотчет.СуммаНачальныйОстаток КАК ИтогоНачОст, регПодотчет.СуммаКонечныйОстаток КАК ИтогоКонОст, регПодотчет.ПериодСекунда КАК ПериодСекунда, регПодотчет.Регистратор КАК Регистратор ИЗ РегистрНакопления.Подотчет.ОстаткиИОбороты(&П2, &П, Авто, , ) КАК регПодотчет) КАК Выборка Есть там секунда... Отличие от первого запроса - "Касса" - не измерения, е реквизит регистратора. Регистраторов у регистра 2 вида. У обоих есть реквизит "Касса". | |
24
- 23.02.2012 - 16:19
|
24-Sadovnikov > Регистратор обязательно в "верхний" запрос включи. Это, сколько помню, даже на ИТС было - обязательно парные итоги (и Нач и Кон) - обязательно родительское поле | |
25
- 23.02.2012 - 16:24
|
25-roma n > Есть регистратор в "верхнем" запросе... : ВЫБОР КОГДА Выборка.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА NULL ИНАЧЕ Выборка.Регистратор Парные итоги и родительское поле тоже есть. Медитирую вот над этим: "не позволяется группировать по реквизитам поля Регистратор". Уродам, кто прогил ИТС - что б вам гробу поикалось. Дабы копи-паст там не отрубали. | |
26
- 23.02.2012 - 16:31
| Вопрос отменяется. Сам ступил. | |
27
- 24.02.2012 - 11:49
| | |
28
- 24.02.2012 - 12:09
| 28-2Green > Пасиба :) | |
| Интернет-форум Краснодарского края и Краснодара |