Версия для печати темы (https://pro1c.org.ua/index.php?s=4754b82cbd173d9314066d78b7a8cb0e&showtopic=64202)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ В открытом справочнике активизировать нужную строку

Автор: denis84 22.01.21, 9:31

Добрый день! Есть такая задача: Открываем справочник контрагентов, вводим номер телефона контрагента. Далее происходит поиск контрагента по реквизиту "телефон". Если находит хочу,чтобы спозиционироваться на найденном объекте.

Так вот контрагента находит(сообщает), но позиционировать отказывается. Как это можно сделать?

Код ниже:

    СпрКлиенты.НайтиПоНаименованию(Запрос.ТекущийЭлемент.Наименование,0,1);
    АктивизироватьОбъект(СпрКлиенты.ТекущийЭлемент());


denis84 @ Сегодня, 8:39 * ,

Дает такую ошибку:

{Справочник.Клиенты.ФормаСписка.ФормаСписка.Модуль(69)}: В данной формуле не может быть вызвана эта процедура(функция)

Добавил поиск клиента из расходной накладной. Все проходит нормально и активизиркет объект в справочнике,но выбрать его в документ не могу. "ФормаСписка" используется и для выбора элементов. Вот код:

    СпрКлиенты.НайтиПоНаименованию(Запрос.ТекущийЭлемент.Наименование,0,1);
    Конт = "";
    ОткрытьФорму("Справочник.Клиенты.ФормаСписка",Конт,);
    Конт.АктивизироватьОбъект(СпрКлиенты.ТекущийЭлемент());

Автор: sava1 22.01.21, 11:36

в форме списка все нормально отрабатывает - откуда Вы вызываете поиск?
полный код давайте

Автор: denis84 22.01.21, 11:55

sava1 @ Сегодня, 11:36 * ,
открываю форму списка. На форме есть поле для ввода номера телефона(длина поля 10) вводим номер 0999999999 и жмем ENTER, в спрввочнике "телефон" длина 32 символа (строка).
Находить,сообщает клиента но не позиционируется

Процедура НайтиКлиента()
    Перем Запрос, ТекстЗапроса;
    Перем НомСтр, ТЗ;
    
    СпрКлиенты             = СоздатьОбъект("Справочник.Клиенты");
    СпрРодительКлиента     = СоздатьОбъект("Справочник.Клиенты");
    ТЗ                    = СоздатьОбъект("ТаблицаЗначений");
    
    Если ПустоеЗначение(СокрЛП(НомерТелефон))= 1 Тогда
    Иначе
           Для Позиция = 1 По СтрДлина(СокрЛП(НомерТелефон)) Цикл    
                    Символ = Сред(СокрЛП(НомерТелефон),Позиция,1);
                Если Найти("0123456789", Символ) > 0 Тогда
            Иначе    
                Предупреждение("Можно вводить только цифры!");
                Возврат;
            КонецЕсли;  
           КонецЦикла;  

        Если СтрДлина(СокрЛП(НомерТелефон)) < 10 Тогда
            Сообщить("Неверный формат номера!");
            Возврат;
        Иначе
            Запрос = СоздатьОбъект("Запрос");
            ТекстЗапроса =
            "//{{ЗАПРОС(Сформировать)
            |ТекущийЭлемент = Справочник.Клиенты.ТекущийЭлемент;
            |Родитель         = Справочник.Клиенты.Родитель;
            |Телефон         = Справочник.Клиенты.Телефон;
            |Условие(СокрЛП(Телефон) = НомерТелефон);
            |Группировка ТекущийЭлемент без групп;
            |";
    
            Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
                Возврат;
            КонецЕсли;

            Если Запрос.Группировка(1) = 1 тогда
                          Сообщить("Клиент с таким номером телефона уже существует в справочнике - " + Запрос.Родитель + " / " + Запрос.ТекущийЭлемент.Наименование);
                              
                              СпрКлиенты.НайтиПоНаименованию(Запрос.ТекущийЭлемент.Наименование,0,1);
                              АктивизироватьОбъект(СпрКлиенты.ТекущийЭлемент());
                  НомерТелефон = "";
            Иначе
                Если Вопрос("Не найден клиент создать нового?","Да+Нет")="Да" Тогда            
                    Конт = "";
                    НаимКлиента = "";
                    ВвестиСтроку(НаимКлиента,"Укажите наименование клиента",32,,);
                    СпрКлиенты.Новый();
                    СпрРодительКлиента.НайтиПоНаименованию("Покупатели",0,1);
                    СпрКлиенты.Родитель     = СпрРодительКлиента.ТекущийЭлемент();
                    СпрКлиенты.Наименование = НаимКлиента;
                    СпрКлиенты.Телефон        = НомерТелефон;
                    СпрКлиенты.Записать();                
                    ОткрытьФормуМодально(СпрКлиенты.ТекущийЭлемент(),Конт,,0,);
                КонецЕсли;
                НомерТелефон = "";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры

Автор: sava1 22.01.21, 12:36

вот поиск товара в списке

стрПоиск - строка

Процедура НайтиТовар()
    
    Сообщить("...."+стрПоиск);
    
    сс = СоздатьОбъект("Справочник.Номенклатура");
    рез = сс.НайтиПоНаименованию(СокрЛП(стрПоиск),0);
    Сообщить(""+рез);
    Если рез=1 Тогда
        Сообщить(сс.ТекущийЭлемент());
        АктивизироватьОбъект(сс.ТекущийЭлемент());        
    КонецЕсли;
    
КонецПроцедуры // НайтиТовар()


попробуйте вместо НайтиПоНаименованию - НайтиЭлемент(запрос.ТекущийЭлемент)

Автор: denis84 22.01.21, 14:04

sava1 @ Сегодня, 12:36 * ,
Проверил Ваш вариант предложенный НайтиТовар() - работает. А Вот в моей конструкции:

Если Запрос.Группировка(1) = 1 тогда
    Сообщить("Клиент с таким номером телефона уже существует в справочнике - " + Запрос.Родитель + " / " + Запрос.ТекущийЭлемент.Наименование);
    СпрК             = СоздатьОбъект("Справочник.Клиенты");

    Поиск = Запрос.ТекущийЭлемент.Наименование;
    Сообщить("...."+Поиск);

    рез = СпрК.НайтиПоНаименованию(СокрЛП(Поиск),0);
    Сообщить(""+рез);
        Если рез=1 Тогда
              Сообщить(СпрК.ТекущийЭлемент());
              АктивизироватьОбъект(СпрК.ТекущийЭлемент());        
        КонецЕсли;
КонецЕсли;

дает ошибку

Клиент с таким номером телефона уже существует в справочнике - Покупатели / СПЕЦТРАНС КОМПАНИ
....СПЕЦТРАНС КОМПАНИ
1
СПЕЦТРАНС КОМПАНИ
АктивизироватьОбъект(СпрК.ТекущийЭлемент());
{Справочник.Клиенты.ФормаСписка.ФормаСписка.Модуль(71)}: В данной формуле не может быть вызвана эта процедура(функция)

НайтиЭлемент, тоже не помогло

Вопрос закрыл таким способом:
1.Объявил переменную "поиск".
2. В процедуре НайтиКлиента(),если нашел клиента, то поиск = Запрос.ТекущийЭлемент.Наименование.
3.На форму добавил кнопку, для нее назначил процедуру ПозиционированиеНаКлиенте().

Процедура ПозиционированиеНаКлиенте()
    НайтиКлиента();
    СпрК = СоздатьОбъект("Справочник.Клиенты");
    Результат = СпрК.НайтиПоНаименованию(СокрЛП(Поиск),0);
    Если Результат = 1 Тогда
        Сообщить("Клиент с таким номером телефона уже существует в справочнике - " + Группа + " / " + Поиск);
        АктивизироватьОбъект(СпрК.ТекущийЭлемент());        
    КонецЕсли;
КонецПроцедуры


И все заработало!

Я так понял в запросе, активизироватьобъект() нельзя.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua