|
Автоподбор в поле выбора | ☑ | ||
---|---|---|---|---|
0
SpellKeeper
13.08.19
✎
13:23
|
Добрый день.
В поле выбора мне нужно сделать ограничение на выбираемые значения при вводе текста. Использую событие АвтоПодбор. Вот моя процедура. Процедура ДокументАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыПолученияДанных = Неопределено; ДанныеВыбора = ПолучитьСписокДокументовПоступления(Объект.ВидОперации, Объект.Склад, НомернойУчетВызовСервера.МоментВыборки(Объект), Текст); КонецПроцедуры Эта функция должна ограничить список выбора только теми значениями, которые есть в остатках. Программа внутрь функции попадает. Функция ПолучитьСписокДокументовПоступления возвращает 2 значения. На момент окончания процедуры в списке ДанныеВыбора сидит 2 значения. По идее в списке выбора на форме должно появиться 2 строки. На самом деле функция не работает. Ограничения не происходит. В список вываливаются все значения, соответствующие введенной строке. Что любопытно, два моих отобранных значения отображаются без выделения (т.е. она все-таки отработала), а добавленные 1С с выделением подстроки зеленым цветом. Я что-то не так сделал? Или это глюкавка релиза? Релиз 8.3.12.1790 |
|||
1
Cyberhawk
13.08.19
✎
13:24
|
Нельзя контекстные вызовы
|
|||
2
SpellKeeper
13.08.19
✎
13:26
|
Функция ПолучитьСписокДокументовПоступления определена как &НаСервереБезКонтекста.
Там все норм. |
|||
3
Cyberhawk
13.08.19
✎
13:29
|
Параметры-реквизиты формы по значению тоже передавать надо, хотя это к твоему коду вроде не относится
|
|||
4
Cyberhawk
13.08.19
✎
13:29
|
А нет, относится - передаешь Объект
|
|||
5
SpellKeeper
13.08.19
✎
13:48
|
Не помогло.
Строку ДанныеВыбора = ПолучитьСписокДокументовПоступления(Объект.ВидОперации, Объект.Склад, НомернойУчетВызовСервера.МоментВыборки(Объект), Текст); заменил на ДанныеВыбора = ПолучитьСписокДокументовПоступления(Объект.ВидОперации, Объект.Склад, НомернойУчетВызовСервера.МоментВыборки(Объект.Дата), Текст); Результат тот же. Я как-то не уверен, что передача объекта типа ДанныеФормыСтруктура на сервер это контекстный вызов. |
|||
6
Cyberhawk
13.08.19
✎
13:50
|
Остается проверить, заменив передачу реквизитов объекта на передачу свежесозданных переменных
|
|||
7
SpellKeeper
13.08.19
✎
13:54
|
Не помогло.
|
|||
8
SpellKeeper
13.08.19
✎
13:57
|
Я даже в функции ПолучитьСписокДокументовПоступления все параметры переделал на Знач....
Не помогает. |
|||
9
Cyberhawk
13.08.19
✎
14:00
|
Может в модуле менеджера ОбработкаПолученияДанныхВыбора для объектов из списка есть
|
|||
10
Cyberhawk
13.08.19
✎
14:02
|
Ну и НачалоВыбора наверное тоже надо стандартную обработку отключить
|
|||
11
SpellKeeper
13.08.19
✎
14:11
|
(9). Такой процедуры нет.
(10). Там все отключено. Изначально у меня уже был сделан выбор по этим же условиям. Но потребовался ручной ввод. Я попробовал заполнять структуру ПараметрыПолученияДанных. Не рабоатет. У меня такое ощущение, что это идеология такая. Сверху помещаются отобранные элементы, а все остальные - ниже. Типа, они в отбор не попадают, но выбрать можно. |
|||
12
НадюшаЯ
13.08.19
✎
14:26
|
в параметры выбора для поля можно загрузить список значений.
|
|||
13
SpellKeeper
13.08.19
✎
14:30
|
(12) Я про это написал в 11.
Не работает. |
|||
14
НадюшаЯ
13.08.19
✎
14:36
|
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 2 | Организации.Ссылка КАК Ссылка |ИЗ | Справочник.Организации КАК Организации"; Результат = Запрос.Выполнить().Выгрузить(); Массив = Результат.ВыгрузитьКолонку("Ссылка");; НовыйМассив = Новый Массив(); НовыйМассив.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", Массив)); НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив); Элементы.Организацияф.ПараметрыВыбора = НовыеПараметры; КонецПроцедуры |
|||
15
SpellKeeper
13.08.19
✎
14:44
|
(14). Это, конечно, здорово. Только я пытаюсь сделать ограничение по вводу строки. Там после каждого символа свой набор данных возникает.
|
|||
16
НадюшаЯ
13.08.19
✎
14:45
|
(15) т.е вы не попробовали да, но уверены что не работает на ввод по строке верно?
|
|||
17
НадюшаЯ
13.08.19
✎
14:46
|
(15) Почему тогда организации только две по строке вводятся?
|
|||
18
НадюшаЯ
13.08.19
✎
14:46
|
(15) Какие мы капризные еще и убедить надо.
|
|||
19
spiller26
13.08.19
✎
15:03
|
У меня сделано так на реквизит
&НаКлиенте Процедура КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если СтрДлина(Текст) > 2 Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = ПолучитьСписокВыбораКонтрагента(Текст); КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьСписокВыбораКонтрагента(знач СтрокаПоиска) СписокВозврат = Новый СписокЗначений; пТекст = ИзбавитьсяОтСпецСимволов(СтрокаПоиска); //убрать спецсимволы Если СтрДлина(пТекст) < 3 Тогда Возврат СписокВозврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 20 | КонтрагентНайденные.Ссылка КАК КонтрагентСсылка, | КонтрагентНайденные.ИНН КАК ИНН, | КонтрагентНайденные.Наименование КАК Наименование, | КонтрагентНайденные.НаименованиеПолное КАК НаименованиеПолное |ИЗ | (ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка, | Контрагенты.ИНН КАК ИНН, | Контрагенты.Наименование КАК Наименование, | Контрагенты.НаименованиеПолное КАК НаименованиеПолное | ИЗ | Справочник.Контрагенты КАК Контрагенты | ГДЕ | Контрагенты.ИНН ПОДОБНО &пТекстИНН | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.ИНН, | Контрагенты.Наименование, | Контрагенты.НаименованиеПолное | ИЗ | Справочник.Контрагенты КАК Контрагенты | ГДЕ | Контрагенты.Наименование ПОДОБНО &пТекст | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Контрагенты.Ссылка, | Контрагенты.ИНН, | Контрагенты.Наименование, | Контрагенты.НаименованиеПолное | ИЗ | Справочник.Контрагенты КАК Контрагенты | ГДЕ | Контрагенты.НаименованиеПолное ПОДОБНО &пТекст) КАК КонтрагентНайденные | |СГРУППИРОВАТЬ ПО | КонтрагентНайденные.Ссылка, | КонтрагентНайденные.ИНН, | КонтрагентНайденные.Наименование, | КонтрагентНайденные.НаименованиеПолное"; Запрос.УстановитьПараметр("пТекст", "%"+ пТекст + "%"); Запрос.УстановитьПараметр("пТекстИНН", пТекст + "%"); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл тИНН = СокрЛП(РезультатЗапроса.ИНН); стрНаименование = СокрЛП(РезультатЗапроса.Наименование); стрНаименованиеПолное = СокрЛП(РезультатЗапроса.НаименованиеПолное); Если стрНаименование = стрНаименованиеПолное Тогда тНаименование = стрНаименование; Иначе тНаименование = стрНаименование + " " + стрНаименованиеПолное; КонецЕсли; Если тИНН <> "" Тогда СписокВозврат.Добавить(РезультатЗапроса.КонтрагентСсылка, "(" + тИНН + ") " + тНаименование); Иначе СписокВозврат.Добавить(РезультатЗапроса.КонтрагентСсылка, тНаименование); КонецЕсли; КонецЦикла; Возврат СписокВозврат; КонецФункции &НаКлиенте Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; Если ТипЗнч(Объект.Контрагент) = Тип("СправочникСсылка.Контрагенты") И ЗначениеЗаполнено(Объект.Контрагент) Тогда ПараметрыФормы.Вставить("ТекущаяСтрока", Объект.Контрагент); КонецЕсли; ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы, Элемент); КонецПроцедуры |
|||
20
SpellKeeper
13.08.19
✎
15:06
|
(16-18) Милочка, прежде чем флудить по чем зря, пояснения давать к коду надо.
Я так понял, что Вы предлагаете при создании формы на сервере заполнять список. Только потом выцарапал нужный кусок. Да, работает. |
|||
21
НадюшаЯ
13.08.19
✎
15:12
|
(20) пф сделай за него, а он еще и носом воротит вместо спасибо. Трындец мужчины пошли ...
|
|||
22
НадюшаЯ
13.08.19
✎
15:13
|
(20) да где хочешь его там и заполняй, чем ближе к началу выбора тем лучше.
|
|||
23
НадюшаЯ
13.08.19
✎
15:14
|
(20) или я по вашему (0) не читала и от нефиг делать кусочек говнокода вам киданула?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |