Имя: Пароль:
1C
1С v8
Поиск дублей в справочнике
,
0 Dersus
 
10.05.20
10:45
Здравствуйте, подскажите как в момент добавления строчки(номер телефона) в табличную часть(номера телефона) в форме элемента справочника(клиенты) проверить нет ли точно такой же записи у другого клиента и получить ссылку на клиента где встречается такой же номер телефона.
1 Dersus
 
10.05.20
10:47
Версия 8.3
2 PuhUfa
 
10.05.20
10:50
Запросом
3 Dersus
 
10.05.20
10:55
(2) А как запрос должен выглядеть, приблизительно?
4 acht
 
10.05.20
10:57
(3) Выбрать ссылку из табличной части где номер телефона равен нашему номеру и ссылка не равна ссылке на нашего клиента
5 Dersus
 
10.05.20
11:03
(4)  "ВЫБРАТЬ
     |    Клиенты.Ссылка КАК Ссылка,
     |    КлиентыНомераТелефонаКлиента.НомерТелефонаКлиента КАК НомерТелефонаКлиента
     |ИЗ
     |    Справочник.Клиенты.НомераТелефонаКлиента КАК КлиентыНомераТелефонаКлиента
     |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Клиенты КАК Клиенты
     |        ПО КлиентыНомераТелефонаКлиента.Ссылка = Клиенты.Ссылка
     |ГДЕ
     |    КлиентыНомераТелефонаКлиента.НомерТелефонаКлиента = &ТекСтрок"
     |  И Клиенты.Ссылка <> Объект.Ссылка

Вот у меня что-то типо этого вышло, что подправить?
6 lodger
 
10.05.20
11:05
(0) первый вопрос который надо задать в данном контексте - а номера телефонов нормированы? храняться в одинаковом виде или +79992228833 89871234455 8(495)999-99-99?
второй вопрос уже запрос к таблице хранимых номеров. если ответ на первый позитивный, то полечить запрос из (5)

"ВЫБРАТЬ
     |    КлиентыНомераТелефонаКлиента.Ссылка КАК Ссылка,
     |    КлиентыНомераТелефонаКлиента.НомерТелефонаКлиента КАК НомерТелефонаКлиента
     |ИЗ
     |    Справочник.Клиенты.НомераТелефонаКлиента КАК КлиентыНомераТелефонаКлиента
     |ГДЕ
     |    КлиентыНомераТелефонаКлиента.НомерТелефонаКлиента = &ТекСтрок
     |  И КлиентыНомераТелефонаКлиента.Ссылка <> &ТекСсылка"
7 Dersus
 
10.05.20
11:09
(6) &ТекСсылка мне нужно переменную завести отдельную? Ведь &ТекСтрок = Элементы.НомераКлиента.ТекущиеДанные;
8 acht
 
10.05.20
11:11
(7) В 1с8 параметры запроса не имеют никакого отношения к текущему контексту кода (как, например, в 7.7) и устанавливаются отдельно методом УстановитьПараметр, где уже передается имя, используемое внутри запроса.
9 Dersus
 
10.05.20
11:40
(8) Не совсем понял
10 Dersus
 
10.05.20
11:43
(8) (6) &НаКлиенте
Процедура НомераКлиентаПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
...
    //Поиск такого же номера у других клиентов
    НайтиДубликатНомераКлиента(ТекСтрок.НомерТелефонаКлиента, Объект.Ссылка)
КонецПроцедуры

Функция НайтиДубликатНомераКлиента(Номер,ссылка)
    УстановитьПапаметрЗ
         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Номер = Параметры.Номер;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
    |    КлиентыНомераТелефонаКлиента.Ссылка КАК Ссылка,
    |    КлиентыНомераТелефонаКлиента.НомерТелефонаКлиента КАК НомерТелефонаКлиента
    |ИЗ
    |    Справочник.Клиенты.НомераТелефонаКлиента КАК КлиентыНомераТелефонаКлиента
    |ГДЕ
    |    КлиентыНомераТелефонаКлиента.НомерТелефонаКлиента = Номер
    |    И КлиентыНомераТелефонаКлиента.Ссылка <> ссылка";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

КонецФункции

Как мне сделать правильно, чтобы у меня сработал запрос и выдал мне например код клиента у которого встречается такой же номер?
11 acht
 
10.05.20
11:55
(9) Твоя переменная в коде "ТекСтрок" не имеет никакого отношения к параметру запроса "&ТекСтрок". Значение параметра, фактически используемое запросом, устанавливается методом объекта запроса "УстановитьПараметр".
Иди-ка ты в https://online.1c.ru/books/book/17269783/

Ну и еще в обработчике ПередОкончаниемРедактирования нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
Это можно проконтролировать, если в конфигураторе установить флажок "Проверять серверные вызовы в обработчиках событий" на вкладке "Сервис/Параметры/Запуск 1С:Предприятия/Дополнительно" и, запустив отладку, добится выполнения обработчика/
12 Dersus
 
10.05.20
12:03
(11) Так я для того, чтобы выполнить запрос создал отдельную функцию, с помощью неё то ведь можно сделать запрос?
13 acht
 
10.05.20
12:10
(12) О, точно. Еще и вот сюда сходи - https://online.1c.ru/books/book/23177431/
14 Dersus
 
10.05.20
12:35
(13) Я обязательно прочту эти книги, но мне нужно срочно данный вопрос решить, подскажите пожалуйста как должен выглядеть код?
15 acht
 
10.05.20
13:00
(14) Печалька. Посмотри на https://1lancer.ru/ или https://kwork.ru/search?query=1c
16 Dersus
 
10.05.20
13:45
(15) Ну я понял, что вы не знаете, и присылаете мне сервисы, которыми сами пользуетесь. Я лучше найду людей, которые действительно знают и могут подсказать.
17 Fish
 
10.05.20
16:55
(16) Подсказать тебе уже подсказали в (8). Ты хочешь чтобы за тебя кто-то запрос написал?
18 Chameleon1980
 
10.05.20
16:57
(16) да ты офигел говорить "не знаете"?
это букварь (азы)
тебя хотят научить искать и не задавать глупых вопросов, а раз нужно срочно - иди на 1сланцер
19 Dersus
 
10.05.20
17:11
(18) (17) Вопрос уже решён, помогли на другом форуме, и при чём просто словами, а не написали мне сразу готовый код.
20 Chameleon1980
 
10.05.20
17:42
(19) так и здесь словами жеж.
😜
21 acht
 
10.05.20
18:27
(19) И ты даже те слова понял? Не зря, не зря столько лет учился!

А дай-ка ссылочку на тот форум, пожалуйста.