|
Помощь в запросе (выборка) | ☑ | ||
---|---|---|---|---|
0
Tanis
18.03.13
✎
14:05
|
Добрый день!
Помогите с запросом... Нужно выбрать физ.лиц, с 0 датой выдачи паспорта. Это не проблема. Проблема, что с 0 датой может быть и всего одна запись в регистре по этому физ.лицу. А мне надо, что если у физ.лица 2 или более строчки в регистре, и если у одной из строк дата.выдачи 0, тогда вывести. |
|||
1
Wobland
18.03.13
✎
14:07
|
выбрать физлицо, минимум(дата)
|
|||
2
GANR
18.03.13
✎
14:07
|
не понял проблемы
|
|||
3
cw014
18.03.13
✎
14:08
|
Выбратиь различные физлицо где датавыдачи = 0
|
|||
4
cw014
18.03.13
✎
14:08
|
В чем трабла то?
|
|||
5
GANR
18.03.13
✎
14:09
|
(1) +
имеющие количество(*)>=2 |
|||
6
cw014
18.03.13
✎
14:11
|
(1)(5) Вы чота усложняете
|
|||
7
Tanis
18.03.13
✎
14:12
|
(5) это в запросе писать, или уже в обработке?
|
|||
8
cw014
18.03.13
✎
14:13
|
(7) Да :)
|
|||
9
Tanis
18.03.13
✎
14:16
|
Да. В обработке или запросе?
|
|||
10
Wobland
18.03.13
✎
14:18
|
(9) это запросные слова
|
|||
11
Tanis
18.03.13
✎
14:22
|
ВЫБРАТЬ
ПаспортныеДанныеФизЛиц.Период, ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо, ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц УПОРЯДОЧИТЬ ПО ФизЛицо Где вот здесь это вставить? Или в консоле такого не сделаешь? |
|||
12
Tanis
18.03.13
✎
14:26
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПаспортныеДанныеФизЛиц.Период, ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо, ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц СГРУППИРОВАТЬ ПО ПаспортныеДанныеФизЛиц.Период, ПаспортныеДанныеФизЛиц.ФизЛицо, ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи ИМЕЮЩИЕ КОЛИЧЕСТВО(ПаспортныеДанныеФизЛиц.ФизЛицо) >= 2 УПОРЯДОЧИТЬ ПО ФизЛицо Так не работает. |
|||
13
Rovan
гуру
18.03.13
✎
14:26
|
(11) ВЫБРАТЬ РАЗЛИЧНЫЕ
ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц ГДЕ ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи = ДАТА(1,1,1) УПОРЯДОЧИТЬ ПО ФизЛицо |
|||
14
Tanis
18.03.13
✎
14:29
|
ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи = ДАТА(1,1,1)
Не работает. |
|||
15
НафНаф
18.03.13
✎
14:31
|
ДАТАВРЕМЯ(1,1,1)
|
|||
16
Tanis
18.03.13
✎
14:33
|
Спасибо.
Т.е. запрос, не выбирет физ лицо с 0 датой, если строчка в регистре всего одна? |
|||
17
Tanis
18.03.13
✎
14:36
|
Не пойдет. Такое мне уже выводил.
Мне надо чтоб если, запись регистра всего одна, то не отбирать. |
|||
18
Tanis
18.03.13
✎
14:37
|
(5) где это вписать?
|
|||
19
cw014
18.03.13
✎
14:38
|
(17) Чо ты хочешь, сформируй по человечески
|
|||
20
Tanis
18.03.13
✎
14:41
|
Тогда так.
Регистр: Иванов И.И. - ДатаВыдачи - 0, Иванов И.И. - ДатаВыдачи - 2, Сидоров И.И. - ДатаВыдачи - 0 Нужно чтоб запросе вывелся только Иванов И.И. Дата - 0. Т.к. у Сидорова, только одна строчка записи... |
|||
21
cw014
18.03.13
✎
14:43
|
Что у тебя в (12) не работает?
|
|||
22
Tanis
18.03.13
✎
14:44
|
Вообще ничего не выводит.
|
|||
23
Tanis
18.03.13
✎
14:45
|
Видимо
ИМЕЮЩИЕ КОЛИЧЕСТВО(ПаспортныеДанныеФизЛиц.ФизЛицо) >= 2 ему не нравится. |
|||
24
GANR
18.03.13
✎
14:45
|
ВЫБРАТЬ
ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц ИМЕЮЩИЕ МИНИМУМ(ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи) = ДАТАВРЕМЯ(1, 1, 1) КОЛИЧЕСТВО(*) >= 2 |
|||
25
Tanis
18.03.13
✎
14:49
|
Не работает. :-(
База БУХ. Если это имеет значение. |
|||
26
GANR
18.03.13
✎
14:50
|
ВЫБРАТЬ
ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц СГРУППИРОВАТЬ ПО ПаспортныеДанныеФизЛиц.ФизЛицо ИМЕЮЩИЕ МИНИМУМ(ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи) = ДАТАВРЕМЯ(1, 1, 1) КОЛИЧЕСТВО(*) >= 2 |
|||
27
cw014
18.03.13
✎
14:51
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ПаспортныеДанныеФизЛиц.ФизЛицо, КОЛИЧЕСТВО(*) КАК Количество ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц ГДЕ ПаспортныеДанныеФизЛиц.ФизЛицо В (ВЫБРАТЬ ПаспортныеДанныеФизЛиц.ФизЛицо ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц ГДЕ ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи = ДАТАВРЕМЯ(1,1,1)) УПОРЯДОЧИТЬ ПО ФизЛицо |
|||
28
cw014
18.03.13
✎
14:52
|
Что выведет?
|
|||
29
GANR
18.03.13
✎
14:55
|
(26) работает? (24) платформа не ест
|
|||
30
Tanis
18.03.13
✎
15:06
|
(27) при этом выдает ошибку, что поле не входит в группу.
Платформа что ест? |
|||
31
GANR
18.03.13
✎
15:09
|
(30) платформа не воспримет (24) (без СГРУППИРОВАТЬ ПО), (26) должен работать.
|
|||
32
Tanis
18.03.13
✎
15:10
|
Нет. Без этого не дает.
Проблема в консоли может быть? |
|||
33
Wobland
18.03.13
✎
15:11
|
(31) имеющие что-то И что-то?
|
|||
34
GANR
18.03.13
✎
15:14
|
(32) Не в консоли дело - синтаксис запроса один и для консоли и для НЕ консоли. (33) Да, 2 агрегатные функции.
|
|||
35
GANR
18.03.13
✎
15:15
|
(32) так (26) работает или нет?
|
|||
36
Tanis
18.03.13
✎
15:15
|
Нет.
|
|||
37
GANR
18.03.13
✎
15:16
|
(36) а что пишет и на каком этапе? выложи скрин на http://xmage.ru/ и ссылку в ветку
|
|||
38
GANR
18.03.13
✎
15:18
|
(36) просто данные не выбирает никакие?
|
|||
39
Tanis
18.03.13
✎
15:22
|
Прошу прощения.
Может, нет так что делал. (26) работает, сейчас до конца проверю. |
|||
40
Tanis
18.03.13
✎
15:28
|
Работает, но не доконца. Если 3 строчки, одна Дата - 1, а 2 строчки дата - 0, то выводит одну строчку.
А если всего 2, то не выводит. |
|||
41
Tanis
18.03.13
✎
15:29
|
ВЫБРАТЬ
ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо, ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц СГРУППИРОВАТЬ ПО ПаспортныеДанныеФизЛиц.ФизЛицо, ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи ИМЕЮЩИЕ МИНИМУМ(ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи) = ДАТАВРЕМЯ(1, 1, 1) И КОЛИЧЕСТВО(*) >= 2 |
|||
42
GANR
18.03.13
✎
15:42
|
(41) Необходимо убрать ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи из группировок? Это уже совсем те физлица и данные, что в запросе (26).
|
|||
43
Tanis
18.03.13
✎
15:42
|
Оставил, только физ.лицо. Тогда работает.
Надеюсь лишнего не удалится... |
|||
44
GANR
18.03.13
✎
15:42
|
НЕ те физлица
|
|||
45
Tanis
18.03.13
✎
15:43
|
(42) Уже понял, хотел посмотреть... Правильно ли выводит.
Но методом проверок, понял что правильно Спасибо! |
|||
46
Tanis
18.03.13
✎
15:44
|
Сейчас как и в (26)
ВЫБРАТЬ ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц СГРУППИРОВАТЬ ПО ПаспортныеДанныеФизЛиц.ФизЛицо ИМЕЮЩИЕ МИНИМУМ(ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи) = ДАТАВРЕМЯ(1, 1, 1) И КОЛИЧЕСТВО(*) >= 2 |
|||
47
GANR
18.03.13
✎
15:44
|
(45) Да, а если надо какие-то поля помимо физлиц вывести то
ВЫБРАТЬ * ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц ГДЕ ФизЛицо В (ВЫБРАТЬ ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц СГРУППИРОВАТЬ ПО ПаспортныеДанныеФизЛиц.ФизЛицо ИМЕЮЩИЕ МИНИМУМ(ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи) = ДАТАВРЕМЯ(1, 1, 1) КОЛИЧЕСТВО(*) >= 2) |
|||
48
Tanis
18.03.13
✎
15:47
|
Ок. Спасибо!
|
|||
49
Tanis
18.03.13
✎
15:56
|
А еще вопросик.
С регистрами так не делал. Какой командой удалить строчку можно? |
|||
50
GANR
18.03.13
✎
16:11
|
НаборЗаписей = РегистрыСведений.ТвойРегистрСведений.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ТвоеИзмерение1.Установить(ЗначениеИзмерения1); НаборЗаписей.Отбор.ТвоеИзмерение2.Установить(ЗначениеИзмерения2); ... НаборЗаписей.Отбор.ТвоеИзмерениеN.Установить(ЗначениеИзмеренияN); НаборЗаписей.Записать(); // ВСЁ! Регистр в разрезе измерений очищен. ВНИМАНИЕ!!! Не забудь установить все необходимые отборы - иначе удалятся лишние записи. например, если сделать так: НаборЗаписей = РегистрыСведений.ТвойРегистрСведений.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); то очистится ВЕСЬ регистр сведений без остатка |
|||
51
Tanis
18.03.13
✎
16:14
|
Мне вот эти найденные записи из запроса надо удалить.
|
|||
52
Tanis
18.03.13
✎
16:15
|
НаборЗаписей.Отбор.ФизЛицо.Установить(ФизЛицо);
Так? Или как там подвязать, чтоб данные только из запроса попали? |
|||
53
GANR
18.03.13
✎
16:17
|
(52) нужно не только в разрезе физлица, но и в разрезе остальных измерений отборы поставить, иначе сотрутся ВСЕ записи по ФизЛицу
|
|||
54
Tanis
18.03.13
✎
16:21
|
Хм. А где остальные отборы взять?
А как можно посмотреть что он там наотбирал? |
|||
55
Tanis
18.03.13
✎
16:22
|
Строка = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей();
Строка.Отбор.ФизЛицо.Установить(Рез.ФизЛицо); Значит это не годится. :-( |
|||
56
GANR
18.03.13
✎
16:26
|
(54) НаборЗаписей.Прочитать()
|
|||
57
GANR
18.03.13
✎
16:27
|
(55) Кстати, после этого можно удалить то, что надо и записать набор. Тоже можно удаления лишнего избежать.
|
|||
58
Tanis
18.03.13
✎
16:33
|
Пока Рез.Следующий() Цикл
//Сообщить(Рез.ФизЛицо); Строка = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей(); Строка.Отбор.ФизЛицо.Установить(Рез.ФизЛицо); Строка.Прочитать(); Строка.Удалить(); Так? |
|||
59
Tanis
18.03.13
✎
16:34
|
А то что он прочитал, на экран вывести можно?
|
|||
60
GANR
18.03.13
✎
16:39
|
(58) Это не Строка - это НаборЗаписей, который обходится
Для Каждого Стр Из НаборЗаписей Цикл ... КонецЦикла (59) Можно, но я бы это глянул прямо в отладчике. |
|||
61
Tanis
18.03.13
✎
16:47
|
Я наборЗаписей Строкой назвал.
А Для каждого Зачем писать? |
|||
62
Tanis
18.03.13
✎
16:48
|
Вот при таком, он мне что удалит?
Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо |ИЗ |РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц |СГРУППИРОВАТЬ ПО |ПаспортныеДанныеФизЛиц.ФизЛицо |ИМЕЮЩИЕ |МИНИМУМ(ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи) = ДАТАВРЕМЯ(1, 1, 1) И |КОЛИЧЕСТВО(*) >= 2" ; //Запрос.УстановитьПараметр("Дата",Дата); Рез = Запрос.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл //Сообщить(Рез.ФизЛицо); НаборЗаписей = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ФизЛицо.Установить(Рез.ФизЛицо); НаборЗаписей.Удалить(); КонецЦикла; |
|||
63
Tanis
18.03.13
✎
16:53
|
Там еще прочитать вставить забыл.
|
|||
64
GANR
18.03.13
✎
16:55
|
(62) Записи со значениями измерений ФизЛицо, попавшими в Рез. И ещё: это НаборЗаписей.Удалить(); надо заменить на НаборЗаписей.Записать();
(63) Да не... Прочитать не надо. Если нужно более тонко чистить, то можно применить (47) с последующими отборами НаборЗаписей по всем нужным измерениям. |
|||
65
Tanis
18.03.13
✎
16:58
|
Пока вроде с таким отбором.
А почему записать, если надо удалить? Или сначала записать а потом удалить? Что-то совсем запутался? |
|||
66
Tanis
18.03.13
✎
16:58
|
куда он их запишет?
|
|||
67
GANR
18.03.13
✎
17:02
|
(65) Потому что запись подразумевает удаление отсутствующих и добавление присутствующих строк в наборе записей по установленным отборам. Удалить() - это в оперативной памяти с набором операцию проводит, на диск не пишет. Ну это в справке прочти про РегистрСведенийНаборЗаписей.
|
|||
68
Tanis
18.03.13
✎
17:16
|
Стер, но лишнего... Все записи по выбранным физ.лицам.
|
|||
69
GANR
18.03.13
✎
17:22
|
(68) Значит (47), повторюсь и накладывать перед НаборЗаписей.Записать() отборы не только по физлицу, по всем измерениям, а если стирать не надо - веткой Если обработать в коде ситуацию.
|
|||
70
Tanis
18.03.13
✎
17:52
|
Запрос = Новый Запрос;
Запрос.Текст= "ВЫБРАТЬ | ПаспортныеДанныеФизЛиц.Период, | ПаспортныеДанныеФизЛиц.ФизЛицо, | ПаспортныеДанныеФизЛиц.ДокументВид, | ПаспортныеДанныеФизЛиц.ДокументСерия, | ПаспортныеДанныеФизЛиц.ДокументНомер, | ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи, | ПаспортныеДанныеФизЛиц.ДокументКемВыдан, | ПаспортныеДанныеФизЛиц.ДокументКодПодразделения, | ПаспортныеДанныеФизЛиц.ДатаРегистрацииПоМестуЖительства |ИЗ | РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц |ГДЕ | ПаспортныеДанныеФизЛиц.ФизЛицо В | (ВЫБРАТЬ | ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо | ИЗ | РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц | СГРУППИРОВАТЬ ПО | ПаспортныеДанныеФизЛиц.ФизЛицо | ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) >= 2) | И ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи = ДАТАВРЕМЯ(1, 1, 1) | И (ПаспортныеДанныеФизЛиц.Период = ДАТАВРЕМЯ(2012,01,18) ИЛИ ПаспортныеДанныеФизЛиц.Период = ДАТАВРЕМЯ(2012,01,19))"; Рез = Запрос.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл //Сообщить(Рез.ФизЛицо); НаборЗаписей = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ФизЛицо.Установить(Рез.ФизЛицо); НаборЗаписей.Записать(); КонецЦикла; Все равно стирает больше чем надо |
|||
71
Tanis
18.03.13
✎
17:54
|
Отбирает все нормально, а стирает все записи, по отобранному физ.лицу.
ИЛИ надо еще дописать НаборЗаписей.Отбор.Дата.Установить(Рез.Дата) |
|||
72
Tanis
18.03.13
✎
17:57
|
Написал вот так
НаборЗаписей = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ФизЛицо.Установить(Рез.ФизЛицо); НаборЗаписей.Отбор.Период.Установить(Рез.Период); НаборЗаписей.Отбор.ДокументДатаВыдачи.Установить(Рез.ДокументДатаВыдачи); |
|||
73
GANR
18.03.13
✎
17:59
|
(72) Уже лучше! Ключом каждой записи является Период и единственное измерение ФизЛицо. По крайней мере, в Зарплата и Управление Персоналом, редакция 2.5 (2.5.9.2).
|
|||
74
GANR
18.03.13
✎
18:00
|
Ну, а на то, что не надо удалять - ветки Если поставить можно.
|
|||
75
Tanis
18.03.13
✎
18:17
|
НаборЗаписей.Отбор.ДокументДатаВыдачи.Установить(Рез.ДокументДатаВыдачи);
Вот на это ругается. Нет такого отбора? |
|||
76
GANR
18.03.13
✎
18:22
|
(75) Есть НаборЗаписей.Отбор.Период.Установить(Рез.ДокументДатаВыдачи);Отбор ставится на ключевые поля: Период, Регистратор и Измерение.
|
|||
77
Tanis
18.03.13
✎
18:50
|
Оставил, вот так... Вроде, правильно удалилось...
Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПаспортныеДанныеФизЛиц.Период КАК Период, | ПаспортныеДанныеФизЛиц.ФизЛицо, | ПаспортныеДанныеФизЛиц.ДокументВид, | ПаспортныеДанныеФизЛиц.ДокументСерия, | ПаспортныеДанныеФизЛиц.ДокументНомер, | ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи КАК ДокументДатаВыдачи, | ПаспортныеДанныеФизЛиц.ДокументКемВыдан, | ПаспортныеДанныеФизЛиц.ДокументКодПодразделения, | ПаспортныеДанныеФизЛиц.ДатаРегистрацииПоМестуЖительства |ИЗ | РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц |ГДЕ | ПаспортныеДанныеФизЛиц.ФизЛицо В | (ВЫБРАТЬ | ПаспортныеДанныеФизЛиц.ФизЛицо КАК ФизЛицо | ИЗ | РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц | СГРУППИРОВАТЬ ПО | ПаспортныеДанныеФизЛиц.ФизЛицо | ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) >= 2) | И ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи = ДАТАВРЕМЯ(1, 1, 1) | И (ПаспортныеДанныеФизЛиц.Период = ДАТАВРЕМЯ(2012,01,18) ИЛИ ПаспортныеДанныеФизЛиц.Период = ДАТАВРЕМЯ(2012,01,19))"; Рез = Запрос.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл //Сообщить(Рез.ФизЛицо); НаборЗаписей = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ФизЛицо.Установить(Рез.ФизЛицо); НаборЗаписей.Отбор.Период.Установить(Рез.Период); НаборЗаписей.Записать(); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |