Имя: Пароль:
1C
1C 7.7
v7: соответствие ключа справочника контрагенты и юрлица либо физлица
0 vsy
 
02.09.23
12:31
Есть задача по инн найти контрагента. В запросе пытался по ключу DESCR сделать выборку, получаю либо пустой запрос либо кучу одинаковых результатов. В физлицах могут быть несколько одинаковых элементов, а юрлицах не соответствует информация по полю DESCR. Вопрос к знатокам по какому ключу можно сопоставить справочники, чтобы однозначно найти контрагента по инн.
1 Guk
 
02.09.23
12:44
(0) ищи по ИНН в справочнике юр.лиц или физ лиц. что за херь DESCR?...
2 vsy
 
02.09.23
12:50
Ну я и нахожу элемент в спр юрлица или физлица, а через LEFT JOIN пытаюсь получить элемент из справочника контрагенты.
3 vsy
 
02.09.23
12:52
В качестве примера
|SELECT    
|Контр.ID [Контрагент :Справочник.Контрагенты]
|FROM Справочник_ЮрЛица as ЮрЛица
|LEFT JOIN Справочник_Контрагенты as Контр ON Контр.DESCR=ЮрЛица.DESCR
|WHERE ЮрЛица.ИНН=:ИНН
4 Guk
 
02.09.23
12:55
(3) ты стандартными запросами 1С пользоваться не умеешь?...
5 Guk
 
02.09.23
12:58
(3) вот кому вся эта херь нужна?...
6 vsy
 
02.09.23
13:02
Я вообще не из 1с делаю выборку. Я написал в качестве примера на 1sqlite, чтобы 1с-никам было понятно, о чем я спрашиваю.
7 vsy
 
02.09.23
13:02
Мне нужен ключ для связи справочников.
8 Djelf
 
02.09.23
14:38
(7) Ну если только ключ связи...
:ВидСправочника можешь достать в MetaDateWork или в 1sqlite из запроса
Индекс на это не работает, но если не 100500 записей, то индекс и не нужен, приемлимо по скорости быстро будет

SELECT
    Выборка.DESCR
    ,Выборка.ИНН
FROM ( SELECT
    Контрагенты.DESCR DESCR
    ,IIF(instr(ЮрЛица.ИНН,'\')>0,substr(ЮрЛица.ИНН,1,instr(ЮрЛица.ИНН,'\')-1)
    ,IIF(instr(ЮрЛица.ИНН,'/')>0,substr(ЮрЛица.ИНН,1,instr(ЮрЛица.ИНН,'/')-1)
    ,COALESCE(ЮрЛица.ИНН,ФизЛица.ИНН))) ИНН
FROM Справочник_Контрагенты AS Контрагенты
LEFT JOIN Справочник_ЮрЛица AS ЮрЛица
    ON substr(Контрагенты.ЮрФизЛицо,1,4)=:ВидСправочника.ЮрЛица
    AND ЮрЛица.ID = substr(Контрагенты.ЮрФизЛицо,5,9)
LEFT JOIN Справочник_ФизЛица AS ФизЛица
    ON substr(Контрагенты.ЮрФизЛицо,1,4)=:ВидСправочника.ФизЛица
    AND ФизЛица.ID = substr(Контрагенты.ЮрФизЛицо,5,9)
WHERE COALESCE(ФизЛица.ИНН,ЮрЛица.ИНН) > ' '
)
AS Выборка
WHERE trim(Выборка.ИНН)='12345'
9 vsy
 
02.09.23
14:44
Я сделал по другому. Вот так LEFT JOIN Справочник_Контрагенты as Контр ON Контр.ЮрФизЛицо=:ВидСправочника.ЮрЛица||ЮрЛица.ID.
Сейчас попробую этот вариант.
10 Djelf
 
02.09.23
14:47
+(8) Можно еще чуток быстрее, если по длине ИНН определить что джойнить и сначала джойнить либо ЮрЛица, либо Физлица и поменять порядок соединения с Контрагентами по этой же схеме.
11 vsy
 
02.09.23
14:47
Я так и сделал.
12 Aleksey
 
02.09.23
15:19
Перенести ИНН в контрагенты и проблем не будет
13 vsy
 
02.09.23
15:27
(12) А если нужен день рождения клиента, то тоже переносить к организациям. Совет полный бред.
14 vsy
 
02.09.23
15:29
день рождения, я сказал к примеру, так как реквизиты в справочниках разные.
15 MWWRuza
 
03.09.23
18:25
Не совсем в тему, но рядышком: https://forum.infostart.ru/forum9/topic146691/
В свое время, пешил подчинить ЮрЛиц Контрагентам... Прошло 7 лет, куча баз с такой доработкой, полет нормальный.
16 victuan1
 
06.09.23
05:29
(15) Можно было вместо Владельца сделать реквизит с отбором, чтобы ничего не удалять и не загружать заново...
Программист всегда исправляет последнюю ошибку.