Имя: Пароль:
1C
1С v8
Странное поведение поля формы
,
0 alexshape
 
11.07.17
07:42
Привет всем, кто сталкивался с такой особенностью. Есть обычное поле ввода  на форме, при вводе текста в него после нажатия на пробел текст пропадает. Код получает данные с интернет сервиса и записывает все это в список выбора хначений для поле ввода. Но вот особенность если передавать в процедуру реквизит формы "СписокРеквизитовОрганизации", то текст введенный в поле пропадает после пробела, а если не передавать то остается и можно с ним работать мСписокДляВыбора  = ПолучитьСписокДляВыбора(Текст, СписокРеквизитовОрганизации);



&НаКлиенте
Процедура ПолеПоискаПоИННАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)    

    Если СтрДлина(Текст) > 3 Тогда
        Элемент.СписокВыбора.Очистить();    
        мСписокДляВыбора  = ПолучитьСписокДляВыбора(Текст, СписокРеквизитовОрганизации);
        Для Сч = 0 по мСписокДляВыбора.Количество()-1 Цикл
            Элемент.СписокВыбора.Добавить(мСписокДляВыбора[Сч],мСписокДляВыбора[Сч]);
            Сч = Сч + 1;
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСписокДляВыбора(Текст,СписокРеквизитовОрганизации)
    
    мЗначения = Новый Массив;
    
        
    HTTPЗапрос = Новый HTTPЗапрос();
    HTTPЗапрос.АдресРесурса = "/api/v2/suggest/party";
    
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/xml");
    HTTPЗапрос.Заголовки.Вставить("Accept", "application/xml");
    HTTPЗапрос.Заголовки.Вставить("Authorization", "Token "+Token);
    HTTPЗапрос.УстановитьТелоИзСтроки("<req><query>" + Текст + "</query></req>");
    
    Соединение = Новый HTTPСоединение("dadata.ru",,,,,, Новый ЗащищенноеСоединениеOpenSSL);
    
    ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    
    Тело = ОтветHTTP.ПолучитьТелоКакСтроку();
    
    Если ОтветHTTP.КодСостояния = 200 Тогда
        ЧтениеXML = Новый ЧтениеXML;
        ЧтениеXML.УстановитьСтроку(Тело);
        ЧтениеXML.ПерейтиКСодержимому();
        ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
        ЧтениеXML.Закрыть();
        стрЗначение = "";
        Если ОбъектXDTO.Свойства().Получить("suggestions") <> Неопределено Тогда
            Если ТипЗнч(ОбъектXDTO.suggestions) = Тип("СписокXDTO") Тогда
                Для каждого Ключ Из ОбъектXDTO.suggestions Цикл
                    ДобавитьвМассивЗначений(мЗначения,Ключ);
                КонецЦикла;
            ИначеЕсли ТипЗнч(ОбъектXDTO.suggestions) = Тип("ОбъектXDTO") Тогда
                ДобавитьвМассивЗначений(мЗначения,ОбъектXDTO.suggestions);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Возврат мЗначения;    
КонецФункции
1 Тихий омут
 
11.07.17
07:53
Два вопроса.
Первый. Если в твоей функции ПолучитьСписокДляВыбора() переменная СписокРеквизитовОрганизации не используется, то зачем её передавать?
Второй. А нет ли тут какого-то особого поведения платформы - т.к. функция у тебя определена на сервере без контекста, а ты туда передаешь реквизит формы? Т.е. если поменять определение на просто на сервере, поведение меняется или нет?
2 Имитация работы
 
11.07.17
07:55
(1) контекстный вызов при автоподборе делать нельзя
(0) напиши перед параметром списком Знач (:
3 RomaH
 
naïve
11.07.17
07:56
(1) если будет контекстный вызов сервера - поведение будет "непредсказуемо"
4 alexshape
 
11.07.17
07:57
(1) Первое: СписокРеквизитовОрганизации  я собираюсь использовать

Второе: &НаСервере та же ошибка
5 alexshape
 
11.07.17
07:59
(2) Т.е. более одного параметра нельзя передавать?
6 RomaH
 
naïve
11.07.17
08:03
поиграй со свойство поля - Обновление текста редактирования
7 alexshape
 
11.07.17
08:07
(6) Обновление текста редактирования помогло спасибо. С чем связанно то что Контекстный вызов не работает при автоподборе, из за частоты вызовов?
8 Имитация работы
 
11.07.17
08:11
(7) с требованиями вендора. СП почитай, наконец
9 RomaH
 
naïve
11.07.17
08:12
(7) он работает
но форма передается на сервер и возвращается с него - обновляется
а при непосредственной работе с формой лучше ничего не обновлять
10 alexshape
 
11.07.17
08:18
(8) Да, нашел: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.