Имя: Пароль:
1C
1С v8
Помогите написать запрос
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С.
так существенно быстрее выборка будет происходить