Имя: Пароль:
1C
1С v8
Как корректно построить запрос к РС с отбором по реквизитам?
0 Aleks73
 
27.09.11
14:12
Есть периодический зависимый регистр сведений, у которого один из реквизитов имеет тип справочник, по нему нужно сделать отбор.
Совсем не классика, я не имел дело с отборами по реквизитам вкупе со СрезПоследних, и не уверен что прокатит ГДЕ с учетом того, что понадобится ЛЕВОЕ СОЕДИНЕНИЕ. Чтобы не изобретать велосипед, киньте в меня кто-нибудь таким кодом.
1 Aleks73
 
27.09.11
14:13
сорри, напутал, по РЕСУРСАМ, если это важно
2 mikecool
 
27.09.11
14:13
сам спросил, сам ответил
3 Aleks73
 
27.09.11
14:13
(2) нет не ответил
4 mzelensky
 
27.09.11
14:16
(27) ну ты бы хоть свой вариант написал...для начала!
5 mzelensky
 
27.09.11
14:16
(4) -> (0)
6 Aleks73
 
27.09.11
14:21
(4) В сущности я написал (0). конкретно:
выбрать
что-то там
из
рс.срезпоследних(
левое соединение другой рс
по.....
где рс.ресурс в (&списзначений)

Не уверен, что так будет правильно.
Кто делал, киньте код !
7 mzelensky
 
27.09.11
14:23
(6) а исходя из каких соображений "Не уверен, что так будет правильно." ??? где читал, от кого слышал?
8 Aleks73
 
27.09.11
14:24
(7) у меня были не раз случаи, и читал, что при СОЕДИНЕНИИ глючит отбор ГДЕ.
9 GenV
 
27.09.11
14:25
(8) Озвучь примеры, может что нового узнаю ...
10 catena
 
27.09.11
14:30
(8)ГДЕ никогда не глючит, скорее глючилка по другую сторону экрана. :)
11 Ненавижу 1С
 
гуру
27.09.11
14:32
(8) потому при ЛЕВОМ бывает NULL
12 Aleks73
 
27.09.11
14:34
(9) насколько я помню, чуть ли не стандат такое есть.
например

Р1.остатки(отбор1)
левое соединение Р2.остатки(отбор2)

прокатит,

Р1.остатки()
левое соединение Р2.остатки(отбор2)
ГДЕ
отбор1

заглючит.

конкретного примера нет, давно с этим сталкивался.
13 unregistered
 
27.09.11
14:35
Ну, например, с отбором по стране:

ВЫБРАТЬ
  ГражданствоФизЛицСрезПоследних.ФизЛицо,
  ГражданствоФизЛицСрезПоследних.Страна,
  ФИОФизЛицСрезПоследних.Фамилия,
  ФИОФизЛицСрезПоследних.Имя,
  ФИОФизЛицСрезПоследних.Отчество
ИЗ
  РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&Период, Страна = &НужнаяСтрана) КАК ГражданствоФизЛицСрезПоследних
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&Период, ) КАК ФИОФизЛицСрезПоследних
  ПО ГражданствоФизЛицСрезПоследних.ФизЛицо = ФИОФизЛицСрезПоследних.ФизЛицо
14 Aleks73
 
27.09.11
14:35
(11) при том, что ГДЕ относится к ПЕРВОМУ регистру из соединения.
15 Aleks73
 
27.09.11
14:36
(13) тут отбор ПО ИЗМЕРЕНИЯМ, а мне надо по РЕСУРСАМ
16 unregistered
 
27.09.11
14:37
(15) Страна - ресурс регитра, а не измерение.
17 unregistered
 
27.09.11
14:39
(12) Бред. Не верю (с). Нужен конкретный пример. Уверен, что причина не в "ГДЕ".
18 catena
 
27.09.11
14:40
(14)Во-первых, у тебя в примере остатки, что не вяжется с РС. А во-вторых, не путай условие виртуальной таблицы с условием в самом запросе.
19 Aleks73
 
27.09.11
14:43
(16) так будет работать ? какая база ? у меня на базе бух 2.0 один из последних релизов, по глобальному поиску ничего близко нет.
20 Aleks73
 
27.09.11
14:43
(17) когда будет - напишу
21 Aleks73
 
27.09.11
14:44
(18) просто редко делал РС ЛЕВОЕ СОЕДИНЕНИЕ РС, поэтому РО.
22 Ненавижу 1С
 
гуру
27.09.11
14:44
(12) бухаем?
23 mzelensky
 
27.09.11
14:46
(0) не вижу проблемы/глюков совершенно никаких!
24 unregistered
 
27.09.11
14:47
(19) Это бух 1.5
25 Aleks73
 
27.09.11
14:47
(22) я на работе не пью
26 Aleks73
 
27.09.11
14:47
(24) а...попробую, все может быть.
27 catena
 
27.09.11
14:48
(21)В данном примере левое соединение вообще ни на что не влияет.
28 unregistered
 
27.09.11
14:49
(26) Кстати в Бух 2.0 есть точно такие же периодические регистры сведений.
29 GenV
 
27.09.11
14:49
(12) Если проблемы и могут быть, то только из-за (18)...
30 catena
 
27.09.11
14:50
ВЫБРАТЬ
   РаботникиСрезПоследних.ФизЛицо
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиСрезПоследних
   где
   РаботникиСрезПоследних.Должность = &Должность

Все, кто чичас имеет должность &Должность

ВЫБРАТЬ
   РаботникиСрезПоследних.Физлицо
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Должность = &Должность) КАК РаботникиСрезПоследних

Все, кто когда-либо имел должность &Должность.
31 Aleks73
 
27.09.11
14:51
(30) интересное кино....
32 catena
 
27.09.11
14:53
(31)гы :)
Я ж говорю -> (18)
33 Aleks73
 
27.09.11
14:54
(32) а если конкретную дату ?
34 catena
 
27.09.11
14:56
(33)Ну будет на дату.
Усолвие в виртуальной таблице применяется до отбора, в ГДЕ - после отбора.
35 mzelensky
 
27.09.11
14:56
(30) с какой это радость:

"ВЫБРАТЬ
   РаботникиСрезПоследних.Физлицо
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Должность = &Должность) КАК РаботникиСрезПоследних

Все, кто когда-либо имел должность &Должность." ???

ты же все-таки срез последних берешь!!!
36 mzelensky
 
27.09.11
14:57
(35) + я же правельно понял ,что "Должность" в обоих случаях измерение ?
37 unregistered
 
27.09.11
14:58
(30) >> Все, кто когда-либо имел должность &Должность

С чего бы?

Ты получишь только сотрудников которые сейчас на этой должности.
38 Aleks73
 
27.09.11
14:58
(36) РЕСУРС
39 unregistered
 
27.09.11
14:59
(38) Не имеет значения.
40 catena
 
27.09.11
15:00
(35)Потому что
РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Должность = &Должность)

Берет срез последних среди записей Должность = &Должность. А не из всех записей.
41 mzelensky
 
27.09.11
15:03
(38) а...тогда ДА!
42 Aleks73
 
27.09.11
15:08
(40-41) озадачили.
43 unregistered
 
27.09.11
15:11
Что-то я тоже запутался. :))
Надо будет попробовать и сравнить.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан