Перейти к содержимому

Ввод по строке 1с что это

  • автор:

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

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 выбирает только разрешенные записи и дополнительной поддержки на уровне обработчиков событий для этого не требуется.

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

Ввод по строке 1с что это

(2) Как это понять? Например у документа «РКО» в роли стоит право «ввод по строке»!? И что это означает?

(3) имхо, при выборе документа куданибудь можно будет воспользоватся механизмом поиска по строке. посмотри как на справочниках это реализовано, в ЗУП например, удобно физлиц выбирать

то есть, правильно ли я понял, что «ввод по строке» — это доступ к подбору в журнале документов?

(5) ну не в журнале, а подбор из документов этого типа. чот не задавался я таким вопросом, надо проверить, что несложно впринципе. вот.

Заметки 1с

Справочные статьи по моментам разработки на платформе 1с

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

Чтобы использовать ввод по строке в документах нужно на уровне справочника указать поля по которым будет использоваться ввод по строке. По умолчанию это предопределенные реквизиты «Наименование» и «Код».

1.jpg

Для переопределения события ввода по строке в модуле менеджера документа (в котором собственно и будем творить бардак) создаем событие
ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

В этом модуле можно определить новый массив для данных выбора

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

  • СтрокаПоиска (SearchString) — строка, используемая при поиске данных, Неопределено — осуществляется быстрый выбор;
  • Отбор (Filter) — отбор, используемый при поиске данных;
  • ВыборГруппИЭлементов (ChoiceFoldersAndItems) — указывается использование групп и элементов (только для иерархических данных); тип ИспользованиеГруппИЭлементов;
  • СпособПоискаСтроки (StringSearchMode) — указывается способ поиска при вводе по строке; тип СпособПоискаСтрокиПриВводеПоСтроке; параметр может отсутствовать;
  • ПолнотекстовыйПоиск (FullTextSearch) — указывается необходимость использования полнотекстового поиска при вводе по строке; тип — ПолнотекстовыйПоискПриВводеПоСтроке; параметр может отсутствовать;
  • РежимПолученияДанныхВыбора (ChoiceDataGettingMode) — указывает режим запуска поиска. Тип РежимПолученияДанныхВыбораПриВводеПоСтроке; параметр может отсутствовать.

Пример дублирования типового поведения:

Листинг процедуры ОбработкаПолученияДанныхВыбора:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

Запрос = Новый Запрос(«ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &Наименование»);
Запрос.УстановитьПараметр(«Наименование», «%» + Параметры.СтрокаПоиска + «%»);
// Конструкция «%» + Параметры.СтрокаПоиска + «%» показывает что в начале и в конце строки
//может быть неопределенное количество символов

//Выгружаем таблицу в массив чтобы потом загрузить ее в данные выбора
Массив = Таблица.ВыгрузитьКолонку(«Ссылка»);

ДанныеВыбора = Новый СписокЗначений; // Переопределяем данные выбора т.к. по
//умолчанию они имею тип — «неопределено»

СтандартнаяОбработка = Ложь; //ключевое вырожение отлючает стандартное выполнение
//и позволяет рабртать новому алгоритму

Ввод по строке

Для прикладных объектов (справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, регистры, бизнес-процессы и задачи, а также планы обмена) в свойстве Ввод по строке можно указать те реквизиты, по которым выполняется поиск. Если ввод по строке разрешен (заданы соответствующие реквизиты), то допустимо в поле ввода соответствующего типа не выполнять выбор из формы объекта, а ввести информацию, которая содержится в заданных реквизитах объекта.
Например, в справочнике Номенклатура ввод по строке разрешен у реквизита наименования. У справочника есть несколько наименований, в котором находится несколько товаров, начинающихся со слова Ве. Тогда, введя в поле ввода
номенклатуры подстроку Ве, мы получим список товаров, которые начинаются с этого слова

В качестве реквизитов, по которым будет выполняться поиск, могут выступать:
● Для справочников, планов видов характеристик, планов счетов, планов видов расчета, планов обмена – Код и Наименование.
● Для документов – Номер .
● Для бизнес-процессов и задач – Номер и Наименование .
● Реквизиты, имеющие тип Число или Строка , для которых свойство Индексироват ь имеет значение Индексировать или Индексировать с доп. упорядочиванием. Примером последних может служить поле для ввода артикула, штрихкода, ИНН.

Настройка ввода по строке

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

Если полей несколько, то установить порядок их следования. При поиске по строке поиск выполняется в полях в той последовательности, в которой они приведены в данном диалоге. Например, для элемента справочника Номенклатура ввод может осуществляться как по коду, так и по артикулу. Если значение кода одного элемента совпадет со значением артикула другого, то в список найденные значения попадут в том порядке, в котором указаны при настройке.
ВНИМАНИЕ! При выполнении поиска данных (во время ввода по строке) действуют ограничения доступа к данным .
Кроме указания того, по каким полям будет выполняться поиск, система позволяет дополнительно настроить некоторые параметры поиска. Свойство Способ поиска строки предназначено для указания способа поиска строки:
● Только в начале поля, выбранного для ввода по строке (значение Начало). В этом случае поисковая строка не разбивается на слова, а введенный текст ищется целиком. Например, если поиск выполняется в следующих данных: Иванов Максим и Максимов , то при вводе в поле ввода слова Максим будут найдены данные Максимов , а при вводе в поле ввода Иван Макс не будет найдено ничего.
● В любой части поля (значение Любая часть). Если строка поиска состоит из нескольких слов и поиск выполняется в любой части, то для поиска используется запрос, аналогичный следующему (для двух полей и двух слов):

(Поле1 ПОДОБНО “%Слово1%” ИЛИ Поле2 ПОДОБНО “%Слово1%”) И (Поле1 ПОДОБНО “%Слово2%” ИЛИ Поле2 ПОДОБНО “%Слово2%”)
Свойство Полнотекстовый поиск позволяет задействовать полнотекстовый поиск при организации ввода по строке. Полнотекстовый поиск нельзя использовать для таблиц внешних источников данных. Использование полнотекстового поиска обладает несколькими особенностями:
1. Полнотекстовый поиск всегда выполняется по началу слов.
2. Полнотекстовый поиск используется для первоначального отбора объектов, в которых будет выполняться дальнейший поиск (уменьшается количество объектов, в которых будет выполняться поиск).
3. К результатам полнотекстового поиска будут добавлены все непроиндексированные ссылки из таблицы, по которой выполнялся ввод по строке.
4. В списке отобранных объектов будет выполняться поиск по полям, которые отобраны для использования в механизме ввода по строке способом, который задан свойством Способ поиска строки .
5. Для каждого слова из поискового запроса в конце добавляется символ “*”.
Указанные особенности могут привести к тому, что:
● Полнотекстовый поиск может чрезмерно сузить набор данных для поиска, если используется поиск по любой части вместе с полнотекстовым поиском. В результате данные найдены не будут. При этом отключение полнотекстового поиска приведет к нахождению нужных данных. Это произойдет потому, что полнотекстовый поиск ищет только по началу слова. Если искомый текст не находится в начале слова – ввод по строке не найдет такие данные.
● Неактуальный индекс полнотекстового поиска может негативно сказаться на результатах поиска.
● Если полнотекстовый поиск завершился с ошибкой, то будет применяться обычный поиск, в соответствии со свойством Способ поиска строки. Это может привести к ситуации, когда найденный объект превратиться в ненайденный (для способа поиска по любой части слова). Например: в поле ввода введен символ «а», который есть не только в начале, а и в середине массива слов, в котором выполняется поиск. Для большого набора данных полнотекстовый поиск завершится с ошибкой (слишком большой результат поиска) и с помощью обычного поиска будут найдены данные, которые внутри себя содержат букву «а». Затем пользователь введет еще одну букву (например, «ц») и поисковая строка станет «ац». В этом случае полнотекстовый поиск отберет только те данные, которые начинаются на «ац» и проигнорирует те данные, которые содержат «ац» внутри себя.
Если выпадающий список формируется системой (а не с помощью программного кода прикладного решения), то представления найденных объектов формируются по специальному алгоритму. Представление найденного объекта состоит из двух частей: представление реквизита, содержащего строку поиска (обязательная часть) и дополнительное представление (не обязательная часть).
Собственно представление формируется следующим образом:
● Определяется поле, содержащее поисковую строку:
● В случае использования полнотекстового поиска или при обычном поиске по нескольким словам таким полем будет первое поле, из состава полей, указанных в свойстве Ввод по строке, в котором найдено первое слово из поисковой строки.
● При использовании обычного поиска по одному слову таким полем будет реквизит, в котором выполнялся поиск.
● Представление значения, расположенного в определенном поле будет являться обязательной частью представления найденного объекта для выпадающего списка.
● Определяется, необходимо или нет формировать дополнительное представление. Для этого определяется состав полей, который будет использоваться для формирования дополнительного представления:
● Если у найденного объекта есть только одно поле, используемое для формирования представления, и поисковая строка обнаружена в этом реквизите – используются поля альтернативного представления.
● В противном случае используются поля основного представления. Список полей основного и альтернативного представления приведен ниже.
● Если список полей для формирования дополнительного представления является пустым – дополнительное представление не формируется. В противном случае дополнительное представление формируется следующим образом:
● В круглые скобки заключается текстовое представление всех полей, которые выбраны для формирования дополнительного представления,через “, “;
● Сформированное дополнительное представление добавляется справа, через пробел, к обязательной части представления найденного объекта.
● Для формирования основного и альтернативного представления используются следующие поля:
● Справочник, бизнес-процесс, план видов характеристик, план счетов, план видов расчета:
● Основное представление: Наименование , Код .
● Альтернативное представление: в зависимости от того, какое выбрано основное представление, для альтернативного представления используется оставшееся поле.
● Документ:
● Основное представление: Номер , Дата .
● Альтернативное представление: отсутствует.
● Задача:
● Основное представление: Наименование, Номер, Дата .
● Альтернативное представление: отсутствует.
● Внешний источник данных:
● Основное представление: поле указанное в свойстве Поле представления таблицы внешнего источника данных .
● Альтернативное представление: отсутствует.
Свойство Режим получения данных выбора управляет тем, как платформа осуществляет поиск данных при вводе по строке. Если свойство установлено в значение Фоновый, то для получения данных используется фоновое задание, а в выпадающем списке отображается анимированная картинка, аналогичная фоновому выполнению отчета (см. здесь). Фоновое задание используется в том случае, если за 200 мс требуемые данные не получены для отображения пользователю. Для файлового варианта информационной базы возможно получение данных в фоновом режиме в том случае, если в момент получения данных не выполняется другое фоновое или регламентное задание. Во время фонового получения результатов выбора пользователь может продолжать редактировать поле ввода. Указанием значения Непосредственно в качестве значения свойства приводит к тому, что поиск выполняется без использования фоновых заданий.
При настройке ввода по строке рекомендуется следовать следующим рекомендациям:
● Значение Фоновый для свойства Режим получения данных выбора рекомендуется устанавливать для объектов, в которых планируется большое количество данных.
● Полнотекстовый поиск рекомендуется включать для объектов, в которых ожидается большое количество данных.
● Поиск строки в любом месте рекомендуется включать совместно с фоновым поиском, либо в таблицах, в которых не ожидается большого количества данных. Желательно, так же при большом количестве данных, если включается поиск в любом месте, то включать и полнотекстовый поиск (чтобы большая часть поисков выполнялась бы через полнотекстовый поиск).

Особенности поведения поля ввода

При вводе данных в поле ввода следует учитывать некоторые особенности работы со списком выбора. Если в результате набора обнаружено несколько объектов, начинающихся с введенного текста, то список этих объектов будет расположен в выпадающем списке. Во время ввода пользователь может с помощью кнопок Стрелка вверх и Стрелка вниз передвигаться по списку, при этом продолжая набор текста в самом поле. В этом случае для осуществления выбора требуется выбрать необходимый элемент и подтвердить выбор нажатием кнопки Enter или Tab. Для формирования списка
выбора для поля ввода используется следующий алгоритм:
1. Выполняется получение данных при выполнении поиска в первом поле (из списка выбранных полей) по началу строки и по подстроке. Количество записей, полученных в результате поиска по началу строки, будем называть РС, а количество записей, полученных в результате поиска по подстроке, будем называть РП.
2. Если РС+РП 3. Если РП и РС больше 5 (каждый), то в список выбора попадет по 5 записей из каждого списка.
4. Если любое из значений РП или РС меньше 5, то в выпадающий список попадут все записи из меньшего списка и столько записей из большего списка, чтобы дополнить выпадающий список до 10.
5. Если общее количество записей в выпадающем списке оказалось меньше 10, то выполняем алгоритм с шага 1 для следующего поля из списка выбранных полей, используя разницу между 10 и количеством полученных результатов как число необходимых к получению данных на следующем шаге.

Программное формирование списка выбора

Если разработчика не устраивает, каким образом формируется список выбора, он может переопределить его самостоятельно.
Сделать это можно двумя способами:
● Непосредственно в форме – в этом случае особое формирование списка выбора будет работать только для этого, единственного поля. Для этого необходимо определить обработчики событий НачалоВыбора , АвтоПодбор и ОкончаниеВводаТекста .
● В модуле менеджера соответствующего объекта – в этом случае особое формирование списка выбора будет выполняться для всех полей ввода, в которых вводятся значения используемого объекта.
Если поле связано с данными, имеющими тип ссылки на прикладной объект (например, СправочникСсылка, ПеречислениеСсылка и т. д.), то список выбора можно сформировать или в модуле менеджера соответствующего объекта, или с помощью обработчиков модуля формы. В остальных случаях список выбора можно сформировать только с помощью обработчиков модуля формы.
Подробнее остановимся на втором способе.
Для программного формирования списка выбора необходимо переопределить обработчик события ОбработкаПолученияДанныхВыбора менеджера
объекта. Обработчик получает набор параметров, определяющих условия формирования списка выбора. Набор параметров представляет собой
структуру, которая содержит:
● Строку поиска – текстовую строку, содержащую текст, который пользователь ввел в поле ввода. Данное свойство присутствует всегда (свойство
СтрокаПоиска).
● Отбор – структура, которая описывает отбор так, как его описывает параметр формы Отбор для расширения формы для динамического списка.
Данное свойство присутствует всегда.
Отбор, указанный в данном свойстве, будет конвертироваться (по возможности) в запрос полнотекстового поиска, уточняя этот запрос для
повышения скорости поиска.
● Свойство, которое указывает режим выбора групп и элементов (передается только для иерархических списков) – свойство ВыборГруппИЭлементов.
● Свойство, которое определяет способ поиска строки: по началу слова или по любой части (свойство СпособПоискаСтроки).
● Необходимость использования полнотекстового поиска (свойство ПолнотекстовыйПоиск).
● Режим получения данных выбора (свойство РежимПолученияДанныхВыбора).
● Кроме этого, в структуре передаются элементы, которые заданы в свойствах элемента формы – Связи параметров выбора (см. здесь) и Параметры
выбора (см. здесь).
Кроме того, в обработчик передается переменная, в которую следует вернуть сформированный список выбора, и параметр СтандартнаяОбработка,
который определяет поведение системы после того, как произойдет выход из обработчика.
Если разработчик устанавливает параметр СтандартнаяОбработка в значение Ложь, то ему необходимо самому полностью формировать список выбора.
Если флажок стандартной обработки установить в значение Истина, то можно предоставить системе возможность сформировать список выбора, но при
этом можно модифицировать параметры выбора (добавить дополнительные значения отбора, изменить режим выбора групп и элементов и т. д.).
Примечание 1. Если система сама формирует список выбора, при формировании списка учитываются ограничения доступа к данным .
Примечание 2. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации различных механизмов получения списков выбора.
Так, следующий код в случае любого текста, вводимого пользователем, будет предоставлять выбор из трех товаров, с кодами 00000002, 00000003 и 00000004.
Пример:

Процедура ОбработкаПолученияДанныхВыбора ( ДанныеВыбора , Параметры , СтандартнаяОбработка )
ДанныеВыбора = Новый СписокЗначений ;
ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду (“00000002”));
ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду (“00000003”));
ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду (“00000004”));

СтандартнаяОбработка = Ложь ;
КонецПроцедуры

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Параметры.Отбор.Вставить (“Вид”, Перечисления.ВидыТоваров.Товар );
КонецПроцедуры

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Запрос = Новый Запрос ;
Запрос.Текст = “ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Товары.Ссылка как Товар
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Наименование ПОДОБНО &Наименование”;
Запрос.УстановитьПараметр (“Наименование”, Параметры.СтрокаПоиска + “%”);
Результат = Запрос.Выполнить ();
ТаблицаРезультатов = Результат.Выгрузить ();
МассивТоваров = ТаблицаРезультатов.ВыгрузитьКолонку (“Товар”);
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(МассивТоваров) ;
СтандартнаяОбработка = Ложь ;
КонецПроцедуры

Также следует обратить внимание на еще один способ формирования списка выбора: передачу в качестве значения элемента списка значений не ссылки на искомый объект (как в примерах выше), а структуру особого содержания.
Эта структура состоит из следующих элементов:
● Значение – собственно значение выбираемого элемента. Элемент структуры с таким именем должен быть обязательно.
● ПометкаУдаления – признак, что выбираемое значение помечено на удаление в информационной базе. Элемент структуры с таким именем не является обязательным.
● Предупреждение – строка с текстом предупреждения, которое отобразит «1С:Предприятие» при выборе такого элемента из списка значений.
Элемент структуры с таким именем не является обязательным.
Если в структуре свойство ПометкаУдаления равно значению Истина и не указано свойство Предупреждение, то система автоматически сформирует текст предупреждения. Если свойство Предупреждение указано, то отображается именно оно. Следует помнить, что текст Предупреждение завершается вопросом Продолжить? и отображается в качестве вопроса с вариантами ответа Да и Нет.
Далее будет показана модификация предыдущего примера, в котором для складов с установленным в значение Истина реквизитом НеИспользовать будет сформировано предупреждение Этот склад не должен использоваться.
Также можно совмещать в одном списке выбора и значения типа Структура, и простые значения.
Пример:

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ДанныеВыбора = Новый СписокЗначений;
// Сформируем список с предупреждениями
Запрос = Новый Запрос ;
Запрос.Текст = “ВЫБРАТЬ
| Склады.Ссылка,
| Склады.Наименование,
| Склады.НеИспользовать
|ИЗ
| Справочник.Склады КАК Склады”;
Результат = Запрос.Выполнить() ;
ВыборкаДетальныеЗаписи = Результат.Выбрат ь();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Структура = Новый Структура (“Значение”, ВыборкаДетальныеЗаписи.Ссылка );
// Заполним предупреждение
Если ВыборкаДетальныеЗаписи.НеИспользовать Тогда
Структура.Вставить(“Предупреждение “, “Этот склад не должен использоваться!”);
КонецЕсли;
Элемент = ДанныеВыбора.Добавить( );
Элемент.Значение = Структура ;
Элемент.Представление = ВыборкаДетальныеЗаписи.Наименование ;
КонецЦикла;
КонецПроцедуры
ПРИМЕЧАНИЕ. Если представления элементов (в том числе и элементов структуры с именем Значение) не указаны в явном виде, то они будут получены автоматически.

Поделиться ссылкой:

  • Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
  • Нажмите, чтобы открыть на Facebook (Открывается в новом окне)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *