|
Помогите написать запрос | ☑ | ||
---|---|---|---|---|
0
dammit
05.02.19
✎
13:43
|
Подскажите, как решить такую задачу в 1С:
есть регистр сведений "Лицевые счета сотрудников" В нем измерения: Сотрудник, Банк, ресурс: Лицевой счет У каждого сотрудника может быть несколько записей в этом регистре, с лицевыми счетами в разных банках. Например, Иванов И.И. - у него 2 счета - и в Сбере, и в ВТБ Петров П.П. - у него один счет в Сбере Сидоров С.С. - у него один счет в ВТБ Каким запросом можно вывести только тех сотрудников, у которых нет счета в банке ВТБ? То есть в примере выше под эти условия подходит только Петров П.П. |
|||
1
Ёпрст
05.02.19
✎
13:45
|
Где НЕ ЛицевойСчет.Банк = &ВТБ
|
|||
2
Ёпрст
05.02.19
✎
13:47
|
Тебе даже проще
выбрать различные сотрудник из РегистрСведений.ЛицевыеСчета где Не Банк = &ВТБ |
|||
3
dammit
05.02.19
✎
13:58
|
(2) Спасибо, но не совсем то, что надо
строка Иванов И.И. с банком = Сбер также выводится в результат запроса, а как ее тоже исключить? |
|||
4
Сияющий в темноте
05.02.19
✎
14:01
|
Сначала выбрать сотрудников,у которых счета в втб во временную таблицу,а потом выбрать сотрудников,которых в этой таблице нет,просто,вопрос открытый,нужны ли сотрудники,у которых вообще нет счетов.
|
|||
5
Ёпрст
05.02.19
✎
14:06
|
(3) ну так тогда
выбрать различные сотрудник из з РегистрСведений.ЛицевыеСчета где Не сотрудник в (выбрать сотрудник из РегистрСведений.ЛицевыеСчета где Банк = &ВТБ) |
|||
6
aleks_default
05.02.19
✎
14:10
|
Вообще по моему надо левым соединением со спр. Сотрудники делать, а то ведь могут быть и сотрудники у которых вообще нет счетов
|
|||
7
dammit
05.02.19
✎
15:01
|
Запрос ниже корректно не отрабатыват, подскажите, в чем ошибка?
ВЫБРАТЬ РАЗЛИЧНЫЕ ЛицевыеСчетаРаботниковОрганизации.ФизЛицо КАК ФизЛицо, ЛицевыеСчетаРаботниковОрганизации.Банк, ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета ИЗ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации ГДЕ НЕ ФизЛицо В (ВЫБРАТЬ ЛицевыеСчетаРаботниковОрганизации.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации ГДЕ ЛицевыеСчетаРаботниковОрганизации.Банк = &Банк) УПОРЯДОЧИТЬ ПО ФизЛицо.Наименование |
|||
8
Ёпрст
05.02.19
✎
15:09
|
(7) И.. в чем некорректность то ?
|
|||
9
dammit
05.02.19
✎
15:16
|
(8) Ну в том, что физлица у которых несколько счетов (Иванов И.И. - у него 2 счета - и в Сбере, и в ВТБ) - все равно попадают в результат запроса
|
|||
10
VladZ
05.02.19
✎
15:22
|
(9) Ошибка в логике работы.
|
|||
11
Вафель
05.02.19
✎
15:24
|
(9) не может такого быть
|
|||
12
TimurP
05.02.19
✎
15:50
|
Вложенной таблицей получаем список сотрудников, по которым уже есть счет в нужном банке(ВложТаб). Из нее берем физ лицо и банк
Затем берем полный список сотрудников, к нему левым соединением по физлицу присоединяем вложенную таблицу. Забираем поля Физлицо (из таблицы физлиц) ЕстьNull(ВложТаб.Банк,"НЕТУ") КАК НаличиеБанкаВТБ Сортировка по НаличиеБанкаВТБ Вот решение на коленках. Далее можно уже более красиво организовать |
|||
13
Segate
05.02.19
✎
15:52
|
ох деревня...
ВЫБРАТЬ РАЗЛИЧНЫЕ сотрудники.ФизЛицо КАК ФизЛицо ИЗ справочники.сотрудники КАК сотрудники Левое соединение РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации по (сотрудники.физлицо = ЛицевыеСчетаРаботниковОрганизации.физлицо и ЛицевыеСчетаРаботниковОрганизации.Банк = &ВТБ) где ЛицевыеСчетаРаботниковОрганизации.лицевойсчет есть null Как-то так, я за синтаксис не отвечаю. |
|||
14
DES
05.02.19
✎
15:57
|
найти всех у кого есть ВТБ (в курсор) потом найти всех кого нет в этом списке (в курсоре)
|
|||
15
D3O
05.02.19
✎
16:41
|
(14) так. в первую ВТ собрать всех сотров с ВТБ, а потом ее левым соединением ко всем сотрам по ВТ.Сотрудник ЕСТЬ NULL
|
|||
16
D3O
05.02.19
✎
16:44
|
(15) т.е. надо сначала найти всех сотрудников, у кого в ВТБ, а потом из ВСЕХ сотрудников выбрать остальных
|
|||
17
dammit
05.02.19
✎
16:44
|
Всем спасибо, вот так получилось
ВЫБРАТЬ ФизическиеЛица.Наименование как ФизЛицо, ЛицевыеСчетаРаботниковОрганизации.Банк, ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета, ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации ПО (ЛицевыеСчетаРаботниковОрганизации.ФизЛицо = ФизическиеЛица.Ссылка) ГДЕ НЕ ФизЛицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ ФизическиеЛица.Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации ПО (ЛицевыеСчетаРаботниковОрганизации.ФизЛицо = ФизическиеЛица.Ссылка) ГДЕ ЛицевыеСчетаРаботниковОрганизации.Банк = &Банк) УПОРЯДОЧИТЬ ПО ЛицевыеСчетаРаботниковОрганизации.ФизЛицо.Наименование |
|||
18
D3O
05.02.19
✎
16:46
|
ну вот конструкцию "НЕ .... В ( )" лучше заменять левым соединением по ЕСТЬ NULL. особенность 1С.
так существенно быстрее выборка будет происходить |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |