К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Знатоки СКД, убейте меня веником.

Гость
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 > Пасиба :)


К списку вопросов






Copyright ©, Все права защищены