Не работает история выбора при вводе 1с

Содержание
  1. История выбора при вводе — Как отфильтровать?
  2. Работа с полем выбора
  3. Установка значения в поле выбора
  4. Представление значения, хранящегося в поле выбора
  5. Поиск значения в поле выбора по введенному тексту
  6. Связь поля выбора с данными
  7. Особенности инициализации и использования списка выбора
  8. Использование поля выбора: пример 1
  9. Использование поля выбора: пример 2
  10. Использование поля выбора: пример 3
  11. Значение реквизита — пустая ссылка:
  12. Значение реквизита — одно из значений, имеющихся в списке выбора для поля выбора:
  13. Значение реквизита в списке выбора для поля выбора отсутствует:
  14. Особенности работы ввода по строке в поле ввода
  15. 1. Как переопределять работу поля ввода в части ввода по строке
  16. 1.1. Событие АвтоПодборТекста
  17. 1.2. Событие ОкончаниеВводаТекста
  18. 2. Использование результатов поиска по строке
  19. 2.1. Работа стандартного (системного) обработчика события АвтоПодборТекста с результатами поиска по строке
  20. 2.2. Устройство механизма преобразования текста в поле ввода в значение и обработчик события ОкончаниеВводаТекста
  21. 2.3. Работа стандартного (системного) обработчика события ОкончаниеВводаТекста с результатами поиска по строке
  22. 3. Настройка состава и порядка полей, используемых в стандартных (системных) обработчиках событий АвтоПодборТекста и ОкончаниеВводаТекста
  23. 4. Модальные действия в обработчиках событий АвтоПодборТекста и ОкончаниеВводаТекста
  24. 5. Управление механизмом автопоиска и автоподбора с помощью прав
  25. 6. Работа механизма автопоиска и автоподбора с правами на уровне записей

История выбора при вводе — Как отфильтровать?

Итак, есть форма создания документа, на ней поле выбора из справочника. В этом справочнике часть значений принадлежит к «основной группе» а часть — нет (определяется по реквизиту типа булево). Так вот, в зависимости от одного из реквизитов формы нужно, чтобы в форме выбора и самое главное — в истории при быстром выборе (маленькое выпадающее окошко, где написано нажать F4 для просмотра всего списка) был отбор, и отображалась либо одна группа значений справочника, любо другая.

Форму выбора справочника я смог отфильтровать так:

П = Новый Структура;
Отбор = Новый Структура;
Отбор.Вставить(«ПренадлежитКОсновнойГруппе», Ложь);
П.Вставить(«Отбор», Отбор);
ОткрытьФорму(«Справочник.ПредприятияКлиенты.ФормаВыбора», П);

Однако, в истории (окошко быстрого выбора) все равно либо лезет все подряд, либо она отключается полностью.

Существует ли какой-нибудь способ отфильтровать список истории выбранных значений и при этом не лезть на сервер большим запросом, и если да, то как?

В интернетах сто раз обсуждалось. Главный вопрос был от программистов разработчикам, ну вот как можно было сделать такую ерунду ненастраиваемой. На что был ответ, мол, так это ж такая крутая фича, ну кому в голову придет отключать её.

Начиная то ли с 8.3.6 у поля элемента добавили флажок, мол, неиспользовать историю. Но он все равно работает в 50% случаев)

Короче, отфильтровать нельзя, можно только отключить. Отключаться должно так:
ПолеИнициаторПроцесса.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать;
Но не всегда работает, разбираться нет времени, тем более на упр. формах платформа писана на костылях.

Поэтому можно использовать целый зоопарк настроек:

Источник

Работа с полем выбора

Элемент управления «Поле выбора» предназначен для хранения и быстрого выбора одного из значений, входящих в его список выбора. Список выбора для поля выбора есть список значений. Значением поля выбора является одно единственное значение, а не весь список выбора.

Установка значения в поле выбора

В Поле выбора можно установить любое значение. В процессе установки значения будет выполнен его поиск среди значений, входящих в список выбора. Если устанавливаемое значение найдено в списке выбора, оно будет сохранено в поле выбора, иначе в поле выбора будет установлено значение «Неопределено». Исключение составляет значение «Неопределено», которое можно установить в поле выбора в любом случае, независимо от того, какие значения при этом хранятся в списке выбора.

Например, если список выбора имеет значениями числа 1, 2 и 3, тогда в поле выбора удастся установить любое из этих значений. При установке других значений, хотя ошибки времени выполнения и не произойдет, они сохранены не будут.

Представление значения, хранящегося в поле выбора

В качестве представления значения, хранящегося в поле выбора, используется представление элемента списка выбора, значение которого эквивалентного значению поля выбора. Если у элемента списка выбора представление не указано, оно формируется в виде текстового представления самого значения. В ситуациях, когда в списке выбора есть несколько одинаковых значений с разными представлениями, будет использоваться первое найденное из этих значений. Представление значения при этом будет сформировано на его основе, как описывалось выше.

Поиск значения в поле выбора по введенному тексту

Поиск значений по тексту осуществляется на основе представлений для элементов списка выбора. Для тех из элементов, в которых представление значения не указано, используется представление самого значения, хранящегося в нем.

Связь поля выбора с данными

Поле выбора можно связывать по данным с выбираемым значением, а не со списком значений. Например, если мы хотим, чтобы в поле выбора можно было выбирать число, и оно было связано по данным со значением некоторого реквизита, типом данных для реквизита должно быть число, а не список значений.

Особенности инициализации и использования списка выбора

Для правильного отображения в поле выбора данных, с которыми он связан, список выбора должен формироваться в теле модуля формы. Формировать список выбора для поля выбора в обработчике любого из событий формы – поздно. Это приведет к тому, что в поле выбора будет установлено значение «Неопределено», хотя в реквизите при этом может быть любое значение.

Такая ситуация возникает из-за того, что данные устанавливаются в элементы управления формы, связанные с ними, в процессе создания формы. А обработчики событий ПередОткрытием(), ПриОткрытии() вызываются после создания самой формы, в процессе инициализации ее визуальной части. Получается, что при создании формы полю выбора поставили некоторое значение в момент, когда его список выбора пустой. При этом, поскольку список выбора пустой, вместо устанавливаемого значения в поле выбора будет сохранено значение «Неопределено».

При смене типа значения (свойство «ТипЗначения») для списка выбора, у которого есть элементы, будет выполнено преобразование их значений к новому типу. Может быть следующая ситуация: после смены типа значения для списка выбора некоторое значение, которое раньше удавалось успешно установить в поле выбора, после смены типа значения установить не получается. Причина такой ситуации в том, что в процессе установки типа значения для списка выбора, успешно устанавливаемое ранее значение было конвертировано в другое значение (в соответствии с новым типом значения). Соответственно, устанавливаемое значение в списке выбора больше найдено не будет.

Читайте также:  Филипс не работает звонок

Использование поля выбора: пример 1

Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: число, длина = 10, точность = 0). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:

Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:

1. В начальном состоянии поле выбора — пустое, поле ввода содержит значение 0.

2. Выбираем в поле выбора в выпадающем списке строку с надписью «Один»: в поле ввода помещается значение 1. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку «Один», значение для которой равно 1. Оно и отобразилось в поле ввода.

3. Выбираем в поле выбора в выпадающем списке строку с надписью «Два»: в поле ввода помещается значение 2.

Перейдем в поле ввода и попробуем редактировать значения в нем:

1. Введем в поле ввода значение 3 и сойдем с поля ввода. В поле выбора запишется значение 3 и установится значение из соответствующей строки списка выбора поля выбора («Три»).

2. Вернемся в поле ввода и введем в нем значение 4. Перейдем с поля ввода к следующему элементу управления. В поле ввода будет сохранено введенное значение «4», а поле выбора станет пустым. В данном случае введенное в поле ввода значение 4 будет сохранено в связанных с полем ввода данных, после чего выставлено из них в поле выбора. Поскольку поле выбора в списке выбора значения 4 не имеет, оно установлено в поле выбора не будет.

Использование поля выбора: пример 2

Пусть есть форма, в которой размещены поле выбора (ПолеВыбора1), поле ввода (ПолеВвода1) и создан реквизит (Реквизит1: СправочникСсылка.Номенклатура). В качестве данных для редактирования в ПолеВвода1 и ПолеВыбора1 стоит реквизит Реквизит1. В теле модуля формы написан следующий код:

Открыв такую форму в режиме 1С:Предприятие, можно видеть, как будут устанавливаться значения в поле выбора:

1. В начальном состоянии поле выбора и поле ввода — пустые:

2. Выбираем в поле выбора в выпадающем списке строку с надписью «Один»: в поле ввода помещается значение. Поскольку поле ввода и поле выбора связаны с одним и тем же реквизитом формы, при изменении значения в поле ввода оно устанавливается в поле выбора и наоборот. В данном случае в поле выбора выбрали строку «Один», значение для которой равно ссылке на на элемент справочника Справочники.Номенклатура.Элемент1. Оно и отобразилось в поле ввода.

3. Выбираем в поле выбора в выпадающем списке строку с надписью «Два»: в поле ввода помещается ссылка на элемент справочника Справочники.Номенклатура.Элемент2:

Перейдем в поле ввода и попробуем редактировать значения в нем:

1. Выберем в поле ввода значение Справочники.Номенклатура.Элемент1. В поле выбора запишется значение Справочники.Номенклатура.Элемент1 и установится значение из соответствующей строки списка выбора поля выбора («Один»).

2. Выберем в поле ввода значение Справочники.Номенклатура.Элемент2. В поле выбора запишется значение Справочники.Номенклатура.Элемент2 и установится значение из соответствующей строки списка выбора поля выбора («Два»).

3. Выберем в поле ввода значение Справочники.Номенклатура.Элемент3. В поле выбора значение Справочники.Номенклатура.Элемент3 записано не будет, поскольку оно не было добавлено в список выбора. Значением в поле ввода будет «Неопределено»:

Использование поля выбора: пример 3

Пусть есть внешняя обработка, в которой создан реквизит Реквизит1 типа СправочникСсылка.Номенклатура. Во внешней обработке есть две формы: в первой устанавливается значение реквизита и по нажатию на кнопку открывается вторая форма.

В левой колонке — внешний вид первой формы внешней обработки. По нажатию на кнопку «Открыть форму» из поля ввода берется значение и сохраняется в реквизите внешней обработки, после чего открывается вторая форма:

В правой колонке — внешний вид второй формы внешней обработки. В ней размещены поле выбора и поле ввода; они оба связаны с реквизитом внешней обработки Реквизит1 по данным. Приведем текст модуля формы:

Мы видим,. что в модуле формы инициализируется список выбора для поля выбора: поле выбора может принимать значения Справочники.Номенклатура.Элемент1, Справочники.Номенклатура.Элемент2, Неопределено. При этом для двух первых значений явно указаны их представления — «Один» и «Два».

Посмотрим, как будет выглядеть вторая форма в зависимости от того, какое значение сохранено предварительно в реквизите внешней обработки Реквизит1.

Значение реквизита — пустая ссылка:

В данном случае в поле ввода значением будет пустая ссылка на элемент справочника, а в поле выбора — Неопределено . Поскольку в списке выбора для поля выбора пустая ссылка на элемент справочника в значения не входит, ее установить нельзя — при установке значения в виде пустой ссылки поле выбора примет значение Неопределено .

Значение реквизита — одно из значений, имеющихся в списке выбора для поля выбора:

В данном случае и в поле ввода, и в поле выбора значением будет ссылка на Элемент1 справочника. При этом для представления значения поле выбора воспользуется представлением установленного значения из списка выбора — строкой «Один».

Значение реквизита в списке выбора для поля выбора отсутствует:

В данном случае в открываемой форме в поле выбора и поле ввода будет произведена попытка установить в качестве значения ссылку на Элемент3 справочника. В поле ввода такое значение будет нормально установлено, а вот в поле выбора после его установки сохранится значение Неопределено , поскольку ссылка на Элемент3 справочника в значения из списка выбора не входит.

Читайте также:  Чем починить крышу металлического гаража

Заметим, что в данном примере в случае переноса инициализации списка выбора для поля выбора в любой из обработчиков событий открываемой формы в каждом из рассмотренных случаев поле выбора будет принимать значение Неопределено , поскольку на момент установки значения в него список выбора будет еще пустой.

Источник

Особенности работы ввода по строке в поле ввода


1. Как переопределять работу поля ввода в части ввода по строке

Для переопределения работы поля ввода в части ввода по строке можно обрабатывать события поля ввода «АвтоПодборТекста» и «ОкончаниеВводаТекста».

1.1. Событие АвтоПодборТекста

Событие «АвтоПодборТекста» возникает во время начала ожидания ввода текста (когда в процессе набора текста сделана пауза). При стандартной отработке события происходит поиск по полям, указанным в свойстве «Ввод по строке» соответствующего объекта метаданных. Если найдено единственное значение, то производится автоподстановка окончания текста. Если введенному тексту соответствует несколько значений, то автоподстановки не происходит.

В этом примере при вводе в поле ввода буквы «п» и прерывании редактирования в поле ввода появился слово «пункт», при этом выделена будет его часть «ункт» (начало слова было уже введено и выделение на него не делается):

Выделение выставляется для того, чтобы подставленную часть текста можно было легко заменить следующим действием редактирования, если подставленный текст не подходит. Для отключения стандартного обработчика в значение параметра «СтандартнаяОбработка» записали «Ложь».

1.2. Событие ОкончаниеВводаТекста

Событие «ОкончаниеВводаТекста» вызывается системой в тех случаях, когда по введенному (отредактированному) в поле ввода тексту нужно сформировать значение, соответствующее этому тексту. При этом, если по имеющемуся в поле ввода тексту уже было ранее успешно сформировано значение, нового формирования значения по этому тексту выполняться не будет (т.е. не будет возникать событие «ОкончаниеВводаТекста»).

Необходимость формирования значения по тексту в поле ввода возникает в различных ситуациях, например при переходе из поля ввода к другому элементу управления, нажатии в поле ввода кнопки выбора (клавиша F4) и в ряде других ситуаций.

Стандартный (системный) обработчик события ищет некоторое значение, которое соответствует набранному тексту. Если найдено одно значение – оно сохраняется в качестве значения поля ввода. Если найдено несколько значений – в выпадающем списке предоставляется возможность выбрать из них нужное значение. Если не найдено ни одного значения – выдается сообщение о том, что в элементе управления введены некорректные данные.

В этом примере обеспечивается следующая функциональность для поля ввода: если в поле ввода набрать слово «одежда», то при формировании значения по имеющемуся в поле ввода тексту (например, при переходе из поля ввода к другому элементу управления в форме), пользователю будет предоставлена возможность выбрать одно из двух значений: «Рубашка» или «Брюки»:

— введем в поле ввода слово «одежда»:

— нажмем на клавишу Tab для перехода к следующему элементу управления: при этом появится выпадающий список из двух значений:

— выберем в выпадающем списке первое значение с помощью клавиши «Enter». выбранное значение будет установлено в поле ввода, а мы перейдем к следующему элементу управления:

2. Использование результатов поиска по строке

При поиске значения по тексту могут быть следующие результаты поиска:
· не найдено ни одного значения;
· найдено одно значение;
· найдено больше одного, но не более некоторого количества значений (в системе используется константа — 50 значений);
· найдено некоторое количество значений или больше (т.е. > 50).

В каждом из этих случаев стандартные (системные) обработчики событий «АвтоПодборТекста» и «ОкончаниеВводаТекста» ведут себя определенным образом.

2.1. Работа стандартного (системного) обработчика события АвтоПодборТекста с результатами поиска по строке

1. По имеющемуся в поле ввода тексту ищется одно подходящее значение

2. Значение найдено?

2.1. Получается текстовое представление найденного значения

2.2. В поле ввода дописываются недостающие завершающие символы текстового представления найденного значения.

Пример : пусть поле ввода имеет тип «СправочникСсылка.Номенклатура»; в свойстве «Ввод по строке» указаны поля «Код», «Наименование»; в справочнике есть два элемента с наименованиями «Рубашка», «Брюки»:

Если мы введем воле ввода текст «Ру», он будет дополнен текстом «башка»:

2.2. Устройство механизма преобразования текста в поле ввода в значение и обработчик события ОкончаниеВводаТекста

Рассмотрим процесс формирования значения по тексту, введенному в поле ввода. Ниже приводится алгоритм преобразования текста в поле ввода в значение:

  1. Начало процесса формирования значения по тексту поля ввода.
  2. Получение текста из поля ввода.
  3. Вызов обработчика события «ОкончаниеВводаТекста».
    В параметры вызываемой процедуры записывается:
    Текст — текст из поля ввода;
    Значение — Неопределено. В обработчике события в него можно записать значение или список значений;
    СтандартнаяОбработка = Истина.
  4. В обработчике события разрешили выполнение стандартной обработки?
  5. Через параметр «Значение» вернули список значений?
  6. Кнопка выбора (клавиша F4) нажата ?
  7. В переданном списке количество значений больше одного?
  8. Открытие выпадающего списка в поле ввода и выбор значения из списка. Если в выпадающем списке выбрано значение, оно выставляется в качестве значения в поле ввода, а в качестве текста в поле ввода устанавливается текстовое представление выбранного значения. Если же значение в выпадающем списке не выбрано, состояние поля ввода не меняется.
  9. В переданном списке храниться только одно значение?
  10. В качестве значения в поле ввода устанавливается единственное значение из переданного списка. В качестве текста в поле вода устанавливается текстовое представление устанавливаемого значения.
  11. В параметре «Значение» вернули не список значений, а конкретное значение?
  12. Установка в поле ввода значения по умолчанию того типа, который сейчас выставлен в поле ввода.
  13. В качестве значения в поле ввода устанавливается значение параметра «Значение», а в качестве текста — представление устанавливаемого значения.
  14. Вызов стандартного (системного) обработчика события «ОкончаниеВводаТекста».
  15. Конец процесса формирования значения по тексту поля ввода.

Из описанного алгоритма видно, что смысл подмены стандартного (системного) обработчика может состоять в том, чтобы сформировать свой список значений из одного и более элементов или одно конкретное значение для поля ввода в зависимости от того текста, который есть в поле ввода.

2.3. Работа стандартного (системного) обработчика события ОкончаниеВводаТекста с результатами поиска по строке

Стандартный (системный) обработчик события «ОкончаниеВводаТекста» работает следующим образом:

  1. Начало работы стандартного обработчика.
  2. Получение текста из поля ввода.
  3. Текст в поле ввода не пустой?
  4. Формирование списка значений на основе текста из поля ввода. Например — поиск товаров, у которых наименование товара начинается с имеющегося в поле ввода текста.
  5. В сформированном в пункте 4 списке значений есть элементы?
  6. Кнопка выбора (клавиша F4) нажата? Это условие проверяется, потому что если она нажата, то будет открываться форма выбора и выпадающих списков появляться не должно.
  7. В сформированном в пункте 4 списке значений есть только одно значение?
  8. Устанавливаем единственное значение из списка в поле ввода. В качестве текста в поле ввода устанавливается представление этого значения.
  9. В сформированном в пункте 4 списке значений более 50 элементов?
  10. Открывается выпадающий список у поля ввода. В качестве списка значений для него используется список, сформированный в пункте 4. Пользователь может выбрать в этом списке одно из значений.
  11. Вывод пользователю сообщения о том, что найдено слишком много значений.
  12. Установка в поле ввода значения по умолчанию того типа, который сейчас выставлен в поле ввода.
  13. Конец работы стандартного обработчика.

3. Настройка состава и порядка полей, используемых в стандартных (системных) обработчиках событий АвтоПодборТекста и ОкончаниеВводаТекста

Для определения состава полей, используемых стандартными (системными) обработчиками событий » АвтоПодборТекста» и «ОкончаниеВводаТекста» , и их порядка, ряд объектов метаданных поддерживают свойство «Ввод по строке», доступное для редактирования через палитру свойств и в форме редактирования объекта метаданных. К таким объектам метаданных относятся «Справочники», «Документы», «Планы видов характеристик», «Планы счетов», «Планы видов расчета», «Планы обмена», «Бизнес-процессы», «Задачи».

Состав полей объекта метаданных, которые могут участвовать в поиске, состоит из некоторых фиксированных полей и реквизитов, для которых указано, что они строкового или числового типа и их нужно индексировать или индексировать с дополнительным упорядочиванием.

При поиске по строке для числовых полей из строки формируется число, которое затем ищется в базе данных. При поиске по строке для строковых полей ищутся все записи из базы данных, у которых в соответствующем поле хранится текст, начинающийся с искомого.

В качестве значения по умолчанию для свойства «Ввод по строке» в 1С:Предприятии 8 используются следующие поля:

План счетов Наименование, Код План обмена Наименование, Код План видов характеристик Наименование, Код Документ Номер документа Справочник Наименование, Код Бизнес-процесс Номер Задача Номер, Наименование План видов расчета Наименование, Код

Отметим, что поле используется для поиска по строке только в том случае, если длина поля больше нуля. Так, например, если длина наименования в некотором справочнике равна нулю, то поиск по полю «Наименование» выполняться не будет.

Пример . Есть справочник товаров , описываемых кодом (число), наименованием (строка) и артикулом (строка).

Если принято использование артикулов товаров, можно указать в свойстве «Ввод по строке» поля «Артикул», «Наименование», «Код». При этом в выпадающем списке сначала будут идти товары, у которых в поле «Артикул» хранится хранится текст, начинающийся с введенного текста, затем — товары, у которых в поле «Наименование» хранится текст, начинающийся с введенного текста, затем — товары, у которых в поле «Код» хранится введенное значение (текст из поля ввода интерпретируется как число).

Если использование артикулов товаров не принято, можно указать в свойстве «Ввод по строке» поля » Наименование», » Код». При этом в выпадающем списке сначала будут идти товары, у которых в поле » Наименование» хранится текст, начинающийся с введенного текста, затем — товары, у которых в поле » Код» хранится введенное значение (текст из поля ввода интерпретируется как число).

4. Модальные действия в обработчиках событий АвтоПодборТекста и ОкончаниеВводаТекста

Механизм автоподбора текста в поле ввода и преобразования текста в значение не предусматривает возможности использования разработчиком конфигурации интерактивных действий в обработчиках событий. Кроме того, логика работы стандартных (системных) обработчиков событий достаточно сложная и в обработчиках этих событий не всегда можно узнать, по какому поводу он (обработчик) вызван. Например, обработчик события » ОкончаниеВводаТекста» будет вызываться не только при переходе из поля ввода на другой элемент управления формы, но и при нажатии в поле ввода кнопки выбора (клавиша F4).

Рекомендуется в обработчиках событий » АвтоПодборТекста» и » ОкончаниеВводаТекста» работать исключительно с параметрами обработчиков, формируя нужный текст и значения и отдавая их через параметры обработчиков.

5. Управление механизмом автопоиска и автоподбора с помощью прав

Управлять механизмом автопоиска и автоподбора можно на уровне прав пользователей. Для этого в списке прав для различных объектов метаданных существует право «Ввод по строке».

Если у пользователя нет права на ввод по строке для соответствующего объекта метаданных , в поле ввода запрещается редактирование текста и работа механизма автопоиска и автоподбора блокируется.

6. Работа механизма автопоиска и автоподбора с правами на уровне записей

Данные, используемые системой в обработчиках событий автопоиска и автоподбора, могут иметь ограничения на доступ к ним. Достичь этого можно с помощью механизма ограничения прав доступа к данным на уровне записей. В этой ситуации сама платформа 1С:Предприятие 8 выбирает только разрешенные записи и дополнительной поддержки на уровне обработчиков событий для этого не требуется.

Если же есть необходимость поиска подходящих данных в обработчиках событий автопоиска и автоподбора, в запросе нужно использовать служебное слово «РАЗРЕШЕННЫЕ», указывающее, что при встрече данных, доступ к которым ограничен, нужно их просто пропускать: в противном случае будет выдана ошибка времени исполнения.

Источник

Оцените статью