Имя: Пароль:
1C
1С v8
Помогите с запросом
0 Puzoter
 
03.04.14
12:51
Вопрос 1 - можно ли в завпросе выбрать только вычисляемые поля, т.е. не указывать источник ИЗ?
вопрос 2 - мне нужно организовать выбор в зависимости от количества записей подзапроса, как составить условие?
Вот так не работает:

ВЫБРАТЬ
Выбор
Когда
(выбрать
    Количество(РаботникиОрганизацийСрезПоследних.Сотрудник) КАК КоличествоЗаписей
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния) = 1
Тогда 1
Иначе 2
Конец КАК Количество
Из     
    РегистрСведений.РаботникиОрганизаций;
1 Wobland
 
03.04.14
12:53
1. да
2. имеющие
2 Puzoter
 
03.04.14
12:54
(1) 1 как подскажи
3 Wobland
 
03.04.14
12:55
что подсказать?
4 Лефмихалыч
 
03.04.14
12:56
(0) 2 - при обходе выборки заменяй всё, кроме 1 на 2. Ну, или, если дело в СКД, пользовательское поле добавьте.
А зачем это торжество разума над логикой, если не секрет?
5 Godofsin
 
03.04.14
12:56
(3) Кто убил Кеннеди?
6 Puzoter
 
03.04.14
12:57
(1) Понял, спасибо
7 Wobland
 
03.04.14
12:58
(5) снайпер. целую в щёчку, ваш К.О.
8 Puzoter
 
03.04.14
12:59
(4) Нужно проверить результат запроса и в зависимости от него выполнить тот или иной запрос. Не знаю, как иначе составить условие
9 Wobland
 
03.04.14
13:03
(8) а сразу один, нормальный не?
10 Puzoter
 
03.04.14
13:07
(9) Наверно можно, просто интересно было почему вот так не работает
11 ramir
 
03.04.14
13:08
(1) Как это понимать? Какого размера выборка должна быть, одна строка?

Если размер выборки равен размеру вложенного запроса, то просто выбирайте вычисляемые поля из вложенного запроса

Выбрать 1 как Поле1 из (Выбрать ... ) как ВложенныйЗапрос
12 Wobland
 
03.04.14
13:08
(10) это язык такой
13 Puzoter
 
03.04.14
14:00
(12) вот это я имел в виду
ВЫБРАТЬ
Выбор
Когда 2 В
(выбрать
    Количество(РаботникиОрганизацийСрезПоследних.Сотрудник) КАК КоличествоЗаписей
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния)
Тогда 1
Иначе 2
Конец КАК Количество
14 Wobland
 
03.04.14
14:01
(13) а по-человечьи это как будет?
15 Puzoter
 
03.04.14
15:00
(14) пожалуй вот так...
Выбрать ПЕРВЫЕ 1 *
ИЗ (Выбрать ПЕРВЫЕ 1 *
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния
    И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = &ВидЗанятости
Объединить ВСЕ
Выбрать ПЕРВЫЕ 1 *
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния
Объединить ВСЕ
Выбрать ПЕРВЫЕ 1 *
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = &ПричинаИзмененияСостояния
    И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = &ВидЗанятости
Объединить ВСЕ    
Выбрать ПЕРВЫЕ 1 *
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния  = &ПричинаИзмененияСостояния) КАК Подзапрос
16 Wobland
 
03.04.14
15:04
по-человечьи - это русским языком. и первые 1 без упорядочивания редко имеет смысл
17 Puzoter
 
03.04.14
15:13
(16) Нужно выбрать записи из таблицы в зависимости от приоритета
1. Условие1=Истина, Условие2=Истина
2. Условие1=Истина
3. Условие1=Ложь, Условие2=Истина
4. тот, кто остался
18 Серго62
 
03.04.14
15:24
+ (17)
5. кто не спрятался я не виноват
19 Puzoter
 
03.04.14
15:49
(16) Т.е. последовательность объединений не влияет на порядок записей в результирующем наборе?
20 Wobland
 
03.04.14
15:53
(19) нет. несмотря на то, что чаще всего порядок будет по порядку
21 Puzoter
 
03.04.14
16:21
О, наваял с порядком)) Кто проще?

Выбрать ПЕРВЫЕ 1 РаботникиОрганизацийСрезПоследних.*,
1 КАК приоритет
Поместить т1
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния
    И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = &ВидЗанятости
Упорядочить по Период Убыв
;

Выбрать ПЕРВЫЕ 1 РаботникиОрганизацийСрезПоследних.*,
2
Поместить т2
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &ПричинаИзмененияСостояния
Упорядочить по Период Убыв
;    

Выбрать ПЕРВЫЕ 1 РаботникиОрганизацийСрезПоследних.*,
3
Поместить т3
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = &ПричинаИзмененияСостояния
    И РаботникиОрганизацийСрезПоследних.Сотрудник.ВидЗанятости = &ВидЗанятости
Упорядочить по Период Убыв
;    
    
Выбрать ПЕРВЫЕ 1 РаботникиОрганизацийСрезПоследних.*,
4
Поместить т4
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, Сотрудник.Физлицо = &ФизЛицо) КАК РаботникиОрганизацийСрезПоследних
ГДЕ
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния  = &ПричинаИзмененияСостояния
Упорядочить по Период Убыв
;

Выбрать ПЕРВЫЕ 1 *
ИЗ (Выбрать ПЕРВЫЕ 1 *
ИЗ т1
ОБЪЕДИНИТЬ ВСЕ
Выбрать ПЕРВЫЕ 1 *
ИЗ т2
ОБЪЕДИНИТЬ ВСЕ
Выбрать ПЕРВЫЕ 1 *
ИЗ т3
ОБЪЕДИНИТЬ ВСЕ
Выбрать ПЕРВЫЕ 1 *
ИЗ т4
Упорядочить по приоритет) КАК Подзапрос
22 kumena
 
03.04.14
16:34
(21) зачем это надо?
23 kumena
 
03.04.14
16:35
+22 проще в регистр залезть и посмотреть
24 Puzoter
 
03.04.14
16:36
(23) А как это сделать? Предложи свой вариант
25 kumena
 
03.04.14
16:38
я из вашего запроса не понял что надо сделать
26 kumena
 
03.04.14
16:38
и зачем он вообще
27 Puzoter
 
03.04.14
16:42
см. 16
28 Puzoter
 
03.04.14
16:42
т.е. (17)
29 Wobland
 
03.04.14
17:16
(25) спасибо, полегчало. думал, всем всё ясно, а я один, как идиот ;)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший