|
Отбор при вводе строки в управляемом приложении 1с 8.3 | ☑ | ||
---|---|---|---|---|
0
JinAir
08.03.17
✎
09:25
|
Здравствуйте, уважаемые форумчане. столкнулся с проблемой при реализации отбора при вводе в строку. Сам смысл задачи: "Сотрудник" является реквизитом табличной части "Сотрудники", при задании Организации в соответствующем реквизите формы при вводе должен формироваться список сотрудников, работающих только в данной организации.
Вот код собственно: &НаКлиенте Процедура СотрудникиСотрудникАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если НЕ Объект.Организация.Пустая() Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = ПолучитьДанныеВыбораСотрудников(Текст, Объект.Организация); Иначе СтандартнаяОбработка = Истина; КонецЕсли; КонецПроцедуры &НаСервереФункция ПолучитьДанныеВыбораСотрудников(Текст, Организация) ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование КАК Сотрудник, | КадроваяИсторияСотрудниковСрезПоследних.Организация |ИЗ | РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный | ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = КадроваяИсторияСотрудниковИнтервальный.Сотрудник |ГДЕ | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование ПОДОБНО &Наименование + ""%"" | И НЕ КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.ПометкаУдаления | И КадроваяИсторияСотрудниковСрезПоследних.Организация = &Организация"; Запрос.УстановитьПараметр("Наименование", Текст); Запрос.УстановитьПараметр("Организация", Организация); Запрос.Выполнить(); Таблица = Запрос.Выполнить().Выгрузить(); Для Каждого Строка Из Таблица Цикл ДанныеВыбора.Добавить(Строка.Сотрудник); КонецЦикла; Возврат ДанныеВыбора; КонецФункции Работает криво само по себе, но в отладчике всё так как должно быть (запрос отрабатывает, данные передаются). Для примера: в одной организации работает двое женщин с фамилией "Волкова", а во второй один мужчина с фамилией "Волков". начинаю вводить и кроме двух женщин, ещё этот мужик в списке почему-то. Помогите пожалуйста |
|||
1
Мимохожий Однако
08.03.17
✎
10:12
|
Так в чём проблема?
|
|||
2
Web00001
08.03.17
✎
10:15
|
(0)>>начинаю вводить и кроме двух женщин, ещё этот мужик в списке почему-то
Значит в списке который возвращает запрос, этот мужик еще есть почему-то. Для начала надо отладить запрос и убедиться, что он возвращает нужные данные. Потом, может можно как то закешировать список сотрудников, что бы не дергать базу каждый раз? |
|||
3
Мимохожий Однако
08.03.17
✎
10:18
|
(0) Отладь запрос в консоли, а потом вставь в свой код
|
|||
4
JinAir
08.03.17
✎
10:36
|
(1) (2) (3)
проблема как и говорил не в запросе, это я давно отладил. вот пруфы http://devtrainingforum.v8.1c.ru/forum/mess_files/1_LTGD.jpg http://devtrainingforum.v8.1c.ru/forum/mess_files/2_oRy4.jpg |
|||
5
Мимохожий Однако
08.03.17
✎
10:43
|
По большому счету, я бы вообще не стал менять и отключать стандартные механизмы автоподобора. Этот механизм и так работает нормально.
|
|||
6
Vladal
08.03.17
✎
10:45
|
(2) предлагаю «что бы» добавить в матофильтр.
|
|||
7
h-sp
08.03.17
✎
10:48
|
(4) попробуйте
СтандартнаяОбработка = Истина |
|||
8
Web00001
08.03.17
✎
11:04
|
+(0)Ну и и еще у меня вот такой вот код работает:
Элемент.СписокВыбора.ЗагрузитьЗначения(ЗдесьМассивСЗначениями); |
|||
9
Web00001
08.03.17
✎
11:11
|
+(8) То есть вот так выглядит весь код
|
|||
10
JinAir
08.03.17
✎
12:02
|
(9) а ВариантыНазваний это что у вас?
|
|||
11
JinAir
08.03.17
✎
12:11
|
(9) почему у вас:
СтандартнаяОбработка = Ложь; он же без этого по стандартному алгоритму ищет и на: Элемент.СписокВыбора.Очистить(); Элемент.СписокВыбора.ЗагрузитьЗначения(НайтиВозможныеВарианты(Текст, ВариантыНазваний)); ему пофиг |
|||
12
RomanYS
08.03.17
✎
12:24
|
Непонятно почему (0) ошибку не выдает:
"...АвтоПодбор ... Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере. " |
|||
13
RomanYS
08.03.17
✎
12:26
|
Ну и
"КадроваяИсторияСотрудниковСрезПоследних.Сотрудник.Наименование КАК Сотрудник" возвращает строку, а не ссылку |
|||
14
JinAir
08.03.17
✎
12:37
|
(13) точно, спасибо ошибся
|
|||
15
Web00001
08.03.17
✎
13:30
|
(10) ВариантыНазваний - закэшированные значения в массиве, что бы не ходить к базе каждый раз.
(11)Это работающий код. |
|||
16
JinAir
08.03.17
✎
13:41
|
У меня ругается, когда делаю как вы.
{Документ.ИЦК_ПриказОПоощрении.Форма.ФормаДокумента.Форма(13)}: Ошибка при вызове метода контекста (ЗагрузитьЗначения) Элемент.СписокВыбора.ЗагрузитьЗначения(ПолучитьДанныеВыбораСотрудников(Текст, Объект.Организация)); по причине: Несоответствие типов (параметр номер '1') в интернете прочитал, что так надо делать для события НачалоВыбораИзСписка |
|||
17
JinAir
08.03.17
✎
14:00
|
(15) простите. можете скинуть полный код вашей программы
|
|||
18
Web00001
08.03.17
✎
15:28
|
(16)Это по той причине, что Элемент.СписокВыбора это список значений и в ЗагрузитьЗначения, он ожидает массив а у тебя функция возвращает, список значений
ЗЫ можно говорить мне ты, я не расстроюсь. |
|||
19
JinAir
08.03.17
✎
17:14
|
Сделал всё как у тебя вместо структуры в функции на сервере объявил массив, всё туда аккуратненько добавляю. Вызывается при автоподборе: Элемент.СписокВыбора.ЗагрузитьЗначения(ПолучитьДанныеВыбораСотрудников(Текст, Объект.Организация));
и через отладчик даже смотришь, что в массиве столько же элементов сколько и должно выводиться. вот только теперь при написании: Стандартнаяобработка = Ложь; - вообще ничего не ищет, а при Стандартнаяобработка = Истина; - ищет всё (18) |
|||
20
TeMochkiN
08.03.17
✎
18:10
|
А почему нужно в регистре сведений эту информацию брать? Разве в карточке сотрудника нет реквизита Организация? И почему бы не использовать параметры выбора у колонки при изменении организации?
|
|||
21
Web00001
09.03.17
✎
01:19
|
(19) это у тебя точно к событию автоподбор привязано? при вводе текста это событие срабатывает?
|
|||
22
JinAir
09.03.17
✎
03:17
|
(21) срабатывает, скрины кидал же с отладчика (4)
|
|||
23
Web00001
09.03.17
✎
05:44
|
(22)Сложно сказать, где проблема. Надо смотреть глазами. У меня текстовое поле и там нет стандартной обработки автоподбора текста. Поэтому и проблемы с ее включением\выключением, тоже нет.
|
|||
24
h-sp
09.03.17
✎
06:57
|
(22) поставь все-таки правильно
СтандартнаяОбработка = Истина; у тебя же стандартная обработка. |
|||
25
TeMochkiN
09.03.17
✎
08:45
|
(22) так вы не можете пояснить, почему не подходят параметры выбора для вашей задачи? Организация то одна на весь документ, как я понял. Вот при выборе организации устанавливали бы параметры выбора у поля сотрудник.
|
|||
26
TeMochkiN
09.03.17
✎
09:13
|
даже не параметры выбора, а связи параметров выбора.
|
|||
27
TeMochkiN
09.03.17
✎
09:14
|
оно ж на автоподбор тоже влияет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |