|
v7: Запрос не видит телефон контактного лица контрагента | ☑ | ||
---|---|---|---|---|
0
Anempadest
24.09.15
✎
16:57
|
Делаю отчёт, который ищет дубли клиентов. Критерием является телефон клиента. Или, если быть точным, телефон подотчётного лица клиента.
Справочник Клиенты .. Справочник Лица (подчинён справочнику Клиенты) У каждого элемента справочника Лица есть три реквизита: Телефон1, Телефон2 и Телефон 3. В отчёт нужно вывести такие данные: Телефон | Лицо | Клиент | Накладная В отчёт выводятся телефоны, которые приписаны разным лицам разных клиентов. Если телефон попал в отчёт, значит клиент дублируется. Пишу запрос: ТекстЗапроса=" |_Телефон= Справочник.КлиентыЛица.Телефон1, | Справочник.КлиентыЛица.Телефон2, | Справочник.КлиентыЛица.Телефон3, | Документ.Продажа.Лицо.Телефон1, | Документ.Продажа.Лицо.Телефон2, | Документ.Продажа.Лицо.Телефон3; |_Лицо=Справочник.КлиентыЛица.ТекущийЭлемент,Документ.Продажа.Лицо; |_Клиент=Справочник.КлиентыЛица.Владелец,Документ.Продажа.Клиент; |Группировка _Телефон; |Группировка _Лицо Без Групп; |Группировка _Клиент Без Групп; |Группировка Документ; |Функция Счетчик=Счётчик(); |Условие(ПустаяСтрока(_Телефон)=0); |Условие(_НеДубль=0); |"; Проблема. В отчёт выводятся данные по телефону только в том случае, если телефон записан в реквизит Телефон1. Если телефон записан в Телефон2 или в Телефон3, то по нему в запрос ничего не попадает. Например, есть в справочнике Клиенты есть элемент с кодом 100 "Аврора". У него есть подчинённый элемент "Петров". У Петрова есть Телефон1 со значением 067-123-45678. Также есть клиент "Авгога" с кодом 200. У него есть лицо "Иванов" с Телефон1 = 099-990-5612 и Телефон2 = 067-123-4567. То есть имеем дублирование клиентов. Но в отчёт попадает только запись, для которой телефон 067-123-4567 введён только в Телефон1. Если тот же телефон у другого лица введён в Телефон2, то это другое лицо и его клиент в отчёт не попадают. Помогите разобраться. |
|||
1
vcv
24.09.15
✎
19:57
|
А всё почему? Потому, что наличие реквизитов Телефон1, Телефон2, Телефон3 нарушает правильную методику разработки базы данных :)
А если серьёзно, не взлетит такое запросом. Получай запросом лица, для которых хотя бы один телефон задан, потом результаты запроса обходи и, например, заполняй таблицу значений значениями Телефон, Лицо, Контрагент. Потом сгруппируешь по телефону, или хотя бы отсортируешь и всё станет ясно. |
|||
2
Фокусник
24.09.15
✎
21:16
|
(0) ИМХО, логическая ошибка в задании: одно и то же КЛ может быть у разных контрагентов: работал у одного, перешел к другому (телефон личный)...
|
|||
3
Anempadest
24.09.15
✎
21:28
|
(2) В теории согласен. Но если даже такое случится, то у лица есть галочка "Не проверять дублирование", и данное лицо в отчёт не попадёт совсем.
|
|||
4
Anempadest
24.09.15
✎
21:31
|
(1) Ты намекаешь на то, что нужно создать подчинённый справочник "Телефоны"?
А если серьёзно, то я не понимаю, почему такое не взлетает. ведь по идее в запрос должен просто попадать список значений телефонов. А из каких реквизитов они будут браться - это не важно. |
|||
5
Сияющий в темноте
24.09.15
✎
21:32
|
Система выбирает по записям,если что-то нашлось,то другого искать не будут,так что нужно несколько полей выбирать,а потом их обходить
да и вообще дубли клиентов по телефону это все равно,что по адресу |
|||
6
Фокусник
24.09.15
✎
21:36
|
(4) если по существу, то ИМХО, лучше всё в ТЗ поместить, обработать (избавиться от "-" и прочих лишних символов, если конечно они могут быть в телефоне), копию ТЗ свернуть, посчитав в итоговой колонке количество. Где > 1, там дубли.
|
|||
7
Anempadest
24.09.15
✎
21:38
|
(5) Поверьте, товарищ, нам этот отчёт очень помогает, и мы его очень любим. В большинстве случае для наших клиентов именно телефон является идентификатором.
|
|||
8
Anempadest
24.09.15
✎
21:39
|
(6) Все правильно говоришь. Только не понятно, почему Запрос этого не делает. Я ведь в реквизит _Телефон вытягиваю именно значения текстовых полей.
|
|||
9
Anempadest
24.09.15
✎
23:09
|
(1) Сделал через ТЗ. Благодарю!
|
|||
10
vcv
25.09.15
✎
11:29
|
"Только не понятно, почему Запрос этого не делает"
В принципе такого запрос сделать не может. Запрос читает записи из базы данных и возвращает указанные поля. Если ты просишь |_Телефон= Справочник.КлиентыЛица.Телефон1, | Справочник.КлиентыЛица.Телефон2, | Справочник.КлиентыЛица.Телефон3, это означает "для каждой записи из "Справочник.КлиентыЛица" верни мне в поле "_Телефон" или Телефон1, или Телефон2, или Телефон3... Что тебе запрос должен вернуть, если для этой записи есть и Телефон1, и Телефон2, и Телефон3? Он не может из одной записи в базе данных сделать несколько, каждая со своим номером. Совсем другое, если пишешь |_Телефон= Справочник.КлиентыЛица.Телефон1, | Документ.Продажа.Лицо.Телефон1, Тут всё ясно. Получи записи из Справочник.КлиентыЛица и Документ.Продажа, для каждой записи из КлиентыЛица верни Телефон1, для каждой записи из Продажа верни Лицо.Телефон1. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |