|
СрезПоследних | ☑ | ||
---|---|---|---|---|
0
Dmitry017
14.04.13
✎
10:33
|
Насколько я знаю, при работе с виртуальными таблицами, нужно использовать параметры вирт таблицы вместо того чтобы использовать условие ГДЕ.
Однако, я слышал что исключение составляет вирт таблица СрезПоследних. Можете пояснить почему в вирт таблице СрезПоследних при использовании параметров вирт таблицы будет возвращён не тот результат, что нужен? и почему там надо пользоваться условием ГДЕ? |
|||
1
Dmitry017
14.04.13
✎
10:34
|
я нагуглил про эту таблицу, но именно про разницу, почему надо использовать параметры вместо условий не нашёл.
http://nastroy-ka.ru/faq/8-faq/53-2010-06-28-11-58-43.html Знаю что условия накладываются уже после того как таблица сформировалась, а параметры - на этапе формирования |
|||
2
Мимохожий Однако
14.04.13
✎
10:37
|
Нагуглил? Молодец.
|
|||
3
Dmitry017
14.04.13
✎
10:39
|
Вот имеется у нас таблица
Курсы валют 11.01.2010 Доллары 30,18 13.01.2010 Евро 42,61 14.01.2010 Евро 42,94 15.01.2010 Евро 42,77 15.01.2010 Доллары 29,42 19.01.2010 Евро 42,56 20.01.2010 Доллары 29,51 21.01.2010 Евро 42,14 Если взять срезПоследних и наложить значение даны на 21.01 через Условие, результат будет 20.01.2010 Доллары 29,51 21.01.2010 Евро 42,14 А почему будет другой результат, если наложить дату в параметрах вирт таблицы? |
|||
4
Поросенок Петр
14.04.13
✎
10:47
|
Чтобы запомнить, что и где нужно использовать, нужна усидчивость и отсутствие мозгов.
А чтобы разобраться, что как работает, нужно полчаса и капля мозгов. |
|||
5
Dmitry017
14.04.13
✎
12:58
|
(4) сейчас всё брал и проверял через конструктор запросов.
Вот исходные данные в регистре сведений. Дата Измерение Ресурс 10.01.2010 Рубль 1 11.01.2010 Доллары 30,18 13.01.2010 Евро 42,61 14.01.2010 Евро 42,94 15.01.2010 Евро 42,77 15.01.2010 Доллары 29,42 19.01.2010 Евро 42,56 20.01.2010 Доллары 29,51 21.01.2010 Евро 42,14 Вот запрос через Условие: ВЫБРАТЬ КурсыВалют1СрезПоследних.Валюта, КурсыВалют1СрезПоследних.Курс ИЗ РегистрСведений.КурсыВалют1.СрезПоследних(&Дата, ) КАК КурсыВалют1СрезПоследних ГДЕ (КурсыВалют1СрезПоследних.Валюта = &Доллар ИЛИ КурсыВалют1СрезПоследних.Валюта = &Евро) В результате были такие значения: ЧЕРЕЗ ГДЕ Срез на 22.01.2010 20.01.2010 Доллары 29,51 21.01.2010 Евро 42,14 Срез на 15.01.2010 20.01.2010 Доллары 29,42 21.01.2010 Евро 42,77 Срез на 14.01.2010 11.01.2010 Доллары 30,18 14.01.2010 Евро 42,94 А вот запрос через параметры. В результате такие же значения получились по данным срезам. Получается что в СрезПоследних всё равно всегда надо использовать условия в параметрах вирт таблицы и не надо через ГДЕ делать? Если я ошибаюсь, скажите, пожалуйста, в чём и по каким измерениям и в каком случае можно наблюдать такое явление в отладчике. |
|||
6
Dmitry017
14.04.13
✎
13:03
|
ВЫБРАТЬ
КурсыВалют1СрезПоследних.Валюта, КурсыВалют1СрезПоследних.Курс ИЗ РегистрСведений.КурсыВалют1.СрезПоследних( &Дата, Валюта = &Доллар ИЛИ Валюта = &Евро) КАК КурсыВалют1СрезПоследних |
|||
7
mistеr
14.04.13
✎
13:46
|
(5) Разницу можно увидеть, когда условие накладывается на ресурс или реквизит. Например, попробуй выбрать те валюты, текущий курс которых меньше 30.
|
|||
8
Dmitry017
14.04.13
✎
14:28
|
Ну вот. Накладываю условие на ресурс.
ВЫБРАТЬ КурсыВалют1СрезПоследних.Валюта, КурсыВалют1СрезПоследних.Курс ИЗ РегистрСведений.КурсыВалют1.СрезПоследних(, Курс <= &Курс) КАК КурсыВалют1СрезПоследних И вот через ГДЕ ВЫБРАТЬ КурсыВалют1СрезПоследних.Валюта, КурсыВалют1СрезПоследних.Курс ИЗ РегистрСведений.КурсыВалют1.СрезПоследних(, ) КАК КурсыВалют1СрезПоследних ГДЕ КурсыВалют1СрезПоследних.Курс <= &Курс Результат один и тот же. 10.01.2010 Рубль 1 20.01.2010 Доллары 29,51 Может быть мне на каком-то другом примере можно увидеть эту разницу? |
|||
9
KishMish
14.04.13
✎
14:30
|
пример из ЗУП.
Допустим сотрудник уволен ИЗ РаботникиОрганизацииСрезПоследних(&Дата,ФизЛицо=&ФизЛицо) ГДЕ ПричинаИзмененияСостояния<>&Уволен даст правильный ответ, записи нет, так как найдет посленюю запись, а потом проверит на условие и значит запрос будет пустой ИЗ РаботникиОрганизацииСрезПоследних(&Дата,ФизЛицо=&ФизЛицо И ПричинаИзмененияСостояния<>&Уволен) найдет последнюю запись, где работник еще не был уволен как-то так |
|||
10
mistеr
14.04.13
✎
14:41
|
(8) Извини, напутал. Не "меньше", а "больше" 30.
|
|||
11
Dmitry017
14.04.13
✎
15:32
|
Я понял. Спасибо большое
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |