Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> В открытом справочнике активизировать нужную строку          
denis84 Подменю пользователя
сообщение 22.01.21, 9:31
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

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

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

Код ниже:

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


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

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

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

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

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


Сообщение отредактировал denis84 - 22.01.21, 9:57

sava1 Подменю пользователя
сообщение 22.01.21, 11:36
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

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

denis84 Подменю пользователя
сообщение 22.01.21, 11:55
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

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

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

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

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


Сообщение отредактировал denis84 - 22.01.21, 11:56

sava1 Подменю пользователя
сообщение 22.01.21, 12:36
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

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

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

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


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

Сообщение отредактировал sava1 - 22.01.21, 12:33

Спасибо сказали: denis84,

denis84 Подменю пользователя
сообщение 22.01.21, 14:04
Сообщение #5

Оратор
Иконка группы
Группа: Местный
Сообщений: 421
Из: Украина
Спасибо сказали: 133 раз
Рейтинг: 132.5

sava1 @ Сегодня, 12:36 * ,
Проверил Ваш вариант предложенный НайтиТовар() - работает. А Вот в моей конструкции:
Если Запрос.Группировка(1) = 1 тогда
    Сообщить("Клиент с таким номером телефона уже существует в справочнике - " + Запрос.Родитель + " / " + Запрос.ТекущийЭлемент.Наименование);
    СпрК             = СоздатьОбъект("Справочник.Клиенты");

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

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

дает ошибку

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

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

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

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


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

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


Сообщение отредактировал denis84 - 22.01.21, 13:06

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:53
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!