Имя: Пароль:
1C
1С v8
СрезПоследних
,
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
Я понял. Спасибо большое