отбор в поле ввода
Поле выбора
Как отобрать значения выводящиеся в список выбора у элемента формы поле выбора?
Использование отбора:
Функционал, который используется для интерактивного отбора в списках, можно использовать и для отбора программным способом.
Для этого нужно для события НачалоВыбора соответствующего поля ввода определить процедуру обработки и внутри процедуры программно устанавить отбор для списка.
Далее следует пример процедуры обработки события НачалоВыбора для поля ввода СтатьяПДР. Реквизит (и поле ввода, соответственно) СтатьяПДР имеет тип СправочникСсылка.ПрочиеДоходыИРасходы. Для списка справочника «Прочие доходы и расходы» устанавливается отбор по реквизиту «Вид прочих доходов и расходов» со значением «Прочие внереализационные доходы (расходы)».
Код 1C v 8.х
Обратите внимание на строку кода:
Код 1C v 8.х
Она закрывает доступ к настройке отбора «Вид прочих доходов и расходов». Таким образом, пользователь не может отключить заданный программно отбор и имеет возможность сделать выбор значения только из ограниченного списка.
Внутри процедуры обработки события НачалоВыбора параметру СтандартнаяОбработка нужно обязательно присвоить значение Ложь. В противном случае будет открыт и ограниченный список, и стандартный список, а это, конечно, не входит в наши планы.
В следующем примере для поля ввода СчетДт типа ПланСчетовСсылка.Хозрасчетный устанавливается отбор в виде списка счетов. Список счетов предварительно формируется с помощью запроса.
Использование выбора из списка:
Выбор значения Перечисления обычно осуществляется из маленького списка. Но даже если включить выбор из формы (это делается с помощью свойства «Быстрый выбор» поля ввода), функционал отбора для перечислений все равно неприменим.
Пример для других агрегатных типов:
Код 1C v 8.х
Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:
Отбор на форме в поле ввода 1С 8.2 с несколькими значениями
В примере выше мы рассмотрели как устанавливать отбор на форме выбора по конкретному значению. Теперь давайте рассмотрим ситуацию когда нужно подставить несколько значений, это может быть например как массив, так и выгрузка из результата запроса. Это отбор в поле ввода 1с с несколькими значениями.
Для начала получаем форму выбора, в параметрах передаем «Элемент» (владельца), устанавливаем флаг режима выбора. Потом создаем список значений и массив, отмечаем что в качестве отбора когда устанавливается вид сравнения в списке, может присутствовать объект только с типом СписокЗначений. Добавляем элементы в массив, затем этот массив загружаем в СписокЗначений который в следствии мы устанавливаем в отборе. Также не забываем включить флаг использования данного отбора, и установить ВидСравнения.
Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора
Как альтернатива можно воспользоваться вариантом как описано открытие формы выбора с отбором для 1С 8.2, конечно код возможно чуть-чуть придется модифицировать, но суть остается та же.
У нас вы можете заказать услуги сопровождения 1с баз данных, а также любые доработки для 1с.
1С 8.x : Поле выбора
Как отобрать значения выводящиеся в список выбора у элемента формы поле выбора?
Использование отбора:
Функционал, который используется для интерактивного отбора в списках, можно использовать и для отбора программным способом.
Для этого нужно для события НачалоВыбора соответствующего поля ввода определить процедуру обработки и внутри процедуры программно устанавить отбор для списка.
Далее следует пример процедуры обработки события НачалоВыбора для поля ввода СтатьяПДР. Реквизит (и поле ввода, соответственно) СтатьяПДР имеет тип СправочникСсылка.ПрочиеДоходыИРасходы. Для списка справочника «Прочие доходы и расходы» устанавливается отбор по реквизиту «Вид прочих доходов и расходов» со значением «Прочие внереализационные доходы (расходы)».
Код 1C v 8.х
Обратите внимание на строку кода:
Код 1C v 8.х
Она закрывает доступ к настройке отбора «Вид прочих доходов и расходов». Таким образом, пользователь не может отключить заданный программно отбор и имеет возможность сделать выбор значения только из ограниченного списка.
Внутри процедуры обработки события НачалоВыбора параметру СтандартнаяОбработка нужно обязательно присвоить значение Ложь. В противном случае будет открыт и ограниченный список, и стандартный список, а это, конечно, не входит в наши планы.
В следующем примере для поля ввода СчетДт типа ПланСчетовСсылка.Хозрасчетный устанавливается отбор в виде списка счетов. Список счетов предварительно формируется с помощью запроса.
Использование выбора из списка:
Выбор значения Перечисления обычно осуществляется из маленького списка. Но даже если включить выбор из формы (это делается с помощью свойства «Быстрый выбор» поля ввода), функционал отбора для перечислений все равно неприменим.
Пример для других агрегатных типов:
Код 1C v 8.х
Быстрый отбор в форме списка (выбора) справочника
Установка быстрых отборов в форме списка (выбора) справочника (для новичков)
Я сам новичок в 1С и знаю, как трудно поначалу разобраться в море незнакомой информации и быстро найти нужную для решения какой-либо срочной задачи. Поэтому эту статейку пишу и для себя тоже.
Иногда пользователю нужно быстро отобрать нужные строки в списке по нескольким не точным критериям.
В списках отбор может быть установлен вручную пользователем стандартным способом через контекстное меню списка «Установить отбор и сортировку списка»
Но если отборы часто используемые, то мы можем вынести поля для ввода критериев на форму и устанавливать отборы программно.
1) Рассмотрим установку такого отбора на примере списка справочника Номенклатура.
Открываем в конфигураторе форму списка справочника Номенклатура.
Уменьшим высоту табличного поля «Список».
На освободившееся место над табличным полем разместим 5 элементов:
со следующими именами:
2) фНомер – Булево
3) отбНомер – Строка(20)
4) фНаименование – Булево
5) отбНаименование – Строка(150)
Результат будет выглядеть примерно так:
Сверим список реквизитов формы на закладке «Реквизиты», наши новые обведены красным:
Теперь пишем в модуле формы обработчики событий «При изменении» для флажков и полей ввода.
И в созданную заготовку процедуры вписываем нужный код:
Вот код этих четырех обработчиков:
// при изменении флажка фНомер
Процедура фНомерПриИзменении ( Элемент )
// если не заполнен Номер для отбора не будем понапрасну дергать Отбор
Если ЗначениеЗаполнено ( отбНомер ) Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
// при изменении поля ввода отбНомер
Процедура отбНомерПриИзменении ( Элемент )
// если не установлен флажок не будем понапрасну дергать Отбор
Если фНомер Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
Процедура фНаименованиеПриИзменении ( Элемент )
// если не заполнено Наименование для отбора не будем понапрасну дергать Отбор
Если ЗначениеЗаполнено ( отбНаименование ) Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
Процедура отбНаименованиеПриИзменении ( Элемент )
// если не установлен флажок не будем понапрасну дергать Отбор
Если фНаименование Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
На двух наших полях ввода включим свойство «КнопкаОчистки».
При очистке поля ввода мы будем сбрасывать соответсвующий флажок и перечитывать отбор:
// при очистке поля ввода отбНомер
Процедура отбНомерОчистка ( Элемент , СтандартнаяОбработка )
фНомер = Ложь;
УстановитьОтборыФормы ();
КонецПроцедуры
// при очистке поля ввода отбНаименование
Процедура отбНаименованиеОчистка ( Элемент , СтандартнаяОбработка )
фНаименование = Ложь;
УстановитьОтборыФормы ();
КонецПроцедуры
Теперь пишем процедуру установки отбора:
Процедура УстановитьОтборыФормы ()
// запомним состояние иерархии
мИерархическийПросмотр = ЭлементыФормы.Список.ИерархическийПросмотр;
Если ( фНомер И НЕ ПустаяСтрока ( отбНомер ))
или ( фНаименование И ЗначениеЗаполнено ( отбНаименование ))
Тогда
// получаем запросом список с установленными критериями отбора
сз = ВернутьСписок ();
А теперь пишем функцию, выбирающую запросом ссылки по введенным пользователем критериям и возвращающую как результат список отобранных ссылок:
Функция ВернутьСписок ()
Запрос = Новый Запрос ;
Вот результат отбора по двум критериям:
Взглянем на форму отборов опять для сравнения и видим на ней установленный наш отбор по ссылке:
2) Рассмотрим более сложный пример со справочником «Основные средства».
Размещаем над списком 7 элементов:
Где 1 – это просто метка, а остальные реквизиты имеют следующие типы:
Добавим в модуль списка новую процедуру ЭлементОтбораПриИзменении и впишем в нее следующий код:
Процедура ЭлементОтбораПриИзменении ( Элемент )
УстановитьОтборыФормы ();
КонецПроцедуры
Всем новым элементам (кроме метки, хе-хе) назначаем этот обработчик, чтобы не плодить их тучу однотипных:
Пишем процедуру установки снятия отбора:
Если ( флПоИнвНомеру и НЕ ПустаяСтрока ( отбИнвНомер ))
или ( флПоПодразделению и ЗначениеЗаполнено ( отбПодразделение ))
или ( флПоМОЛ и ЗначениеЗаполнено ( отбМОЛ ))Тогда
И пишем еще одну процедурку получения списка ссылок запросом.
Здесь мы будем получать последние сведения по ОС из регистров сведений:
— Инвентарный Номер из РС ПервоначальныеСведения
— Подразделение и МОЛ из РС МестонахождениеОС.
Запрос = Новый Запрос ;
Если флПоИнвНомеру и НЕ ( флПоПодразделению или флПоМОЛ ) Тогда
Если флПоПодразделению И ЗначениеЗаполнено ( отбПодразделение ) Тогда
аргУсловие = «МестонахождениеОССрезПоследних.Местонахождение = &пПодразделение»
КонецЕсли;
Если НЕ флПоИнвНомеру Тогда
Теперь добавляем в список две новых колонки МОЛ и Местонахождение без привязки к данным
Установим их свойства «Видимость» в Ложь, чтобы они не светились в списке сразу. Их заполение мы будем обрабатывать в событии ПриПолученииДанных (см. ниже)
В свойстве ЭлементУправления обоим назначаем «Поле ввода»
В обработчик ПриПолученииДанных добавляем код для отображения значений наших добавленных колонок:
Открываем список ОС, устанавливаем видимость наших новых колонок МОЛ и Местонахождение, вводим критерии отбора и вуаля:
P . S .
Недостаток рассмотренного подхода в том, что если ранее был каким-либо образом установлен отбор по ссылке, то он будет затерт нашим.
Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download
Установка быстрых отборов в форме списка (выбора) справочника (для новичков)
Я сам новичок в 1С и знаю, как трудно поначалу разобраться в море незнакомой информации и быстро найти нужную для решения какой-либо срочной задачи. Поэтому эту статейку пишу и для себя тоже.
Иногда пользователю нужно быстро отобрать нужные строки в списке по нескольким не точным критериям.
В списках отбор может быть установлен вручную пользователем стандартным способом через контекстное меню списка «Установить отбор и сортировку списка»
Но если отборы часто используемые, то мы можем вынести поля для ввода критериев на форму и устанавливать отборы программно.
1) Рассмотрим установку такого отбора на примере списка справочника Номенклатура.
Открываем в конфигураторе форму списка справочника Номенклатура.
Уменьшим высоту табличного поля «Список».
На освободившееся место над табличным полем разместим 5 элементов:
со следующими именами:
2) фНомер – Булево
3) отбНомер – Строка(20)
4) фНаименование – Булево
5) отбНаименование – Строка(150)
Результат будет выглядеть примерно так:
Сверим список реквизитов формы на закладке «Реквизиты», наши новые обведены красным:
Теперь пишем в модуле формы обработчики событий «При изменении» для флажков и полей ввода.
И в созданную заготовку процедуры вписываем нужный код:
Вот код этих четырех обработчиков:
// при изменении флажка фНомер
Процедура фНомерПриИзменении ( Элемент )
// если не заполнен Номер для отбора не будем понапрасну дергать Отбор
Если ЗначениеЗаполнено ( отбНомер ) Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
// при изменении поля ввода отбНомер
Процедура отбНомерПриИзменении ( Элемент )
// если не установлен флажок не будем понапрасну дергать Отбор
Если фНомер Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
Процедура фНаименованиеПриИзменении ( Элемент )
// если не заполнено Наименование для отбора не будем понапрасну дергать Отбор
Если ЗначениеЗаполнено ( отбНаименование ) Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
Процедура отбНаименованиеПриИзменении ( Элемент )
// если не установлен флажок не будем понапрасну дергать Отбор
Если фНаименование Тогда
УстановитьОтборыФормы ();
КонецЕсли;
КонецПроцедуры
На двух наших полях ввода включим свойство «КнопкаОчистки».
При очистке поля ввода мы будем сбрасывать соответсвующий флажок и перечитывать отбор:
// при очистке поля ввода отбНомер
Процедура отбНомерОчистка ( Элемент , СтандартнаяОбработка )
фНомер = Ложь;
УстановитьОтборыФормы ();
КонецПроцедуры
// при очистке поля ввода отбНаименование
Процедура отбНаименованиеОчистка ( Элемент , СтандартнаяОбработка )
фНаименование = Ложь;
УстановитьОтборыФормы ();
КонецПроцедуры
Теперь пишем процедуру установки отбора:
Процедура УстановитьОтборыФормы ()
// запомним состояние иерархии
мИерархическийПросмотр = ЭлементыФормы.Список.ИерархическийПросмотр;
Если ( фНомер И НЕ ПустаяСтрока ( отбНомер ))
или ( фНаименование И ЗначениеЗаполнено ( отбНаименование ))
Тогда
// получаем запросом список с установленными критериями отбора
сз = ВернутьСписок ();
А теперь пишем функцию, выбирающую запросом ссылки по введенным пользователем критериям и возвращающую как результат список отобранных ссылок:
Функция ВернутьСписок ()
Запрос = Новый Запрос ;
Вот результат отбора по двум критериям:
Взглянем на форму отборов опять для сравнения и видим на ней установленный наш отбор по ссылке:
2) Рассмотрим более сложный пример со справочником «Основные средства».
Размещаем над списком 7 элементов:
Где 1 – это просто метка, а остальные реквизиты имеют следующие типы:
Добавим в модуль списка новую процедуру ЭлементОтбораПриИзменении и впишем в нее следующий код:
Процедура ЭлементОтбораПриИзменении ( Элемент )
УстановитьОтборыФормы ();
КонецПроцедуры
Всем новым элементам (кроме метки, хе-хе) назначаем этот обработчик, чтобы не плодить их тучу однотипных:
Пишем процедуру установки снятия отбора:
Если ( флПоИнвНомеру и НЕ ПустаяСтрока ( отбИнвНомер ))
или ( флПоПодразделению и ЗначениеЗаполнено ( отбПодразделение ))
или ( флПоМОЛ и ЗначениеЗаполнено ( отбМОЛ ))Тогда
И пишем еще одну процедурку получения списка ссылок запросом.
Здесь мы будем получать последние сведения по ОС из регистров сведений:
— Инвентарный Номер из РС ПервоначальныеСведения
— Подразделение и МОЛ из РС МестонахождениеОС.
Запрос = Новый Запрос ;
Если флПоИнвНомеру и НЕ ( флПоПодразделению или флПоМОЛ ) Тогда
Если флПоПодразделению И ЗначениеЗаполнено ( отбПодразделение ) Тогда
аргУсловие = «МестонахождениеОССрезПоследних.Местонахождение = &пПодразделение»
КонецЕсли;
Если НЕ флПоИнвНомеру Тогда
Теперь добавляем в список две новых колонки МОЛ и Местонахождение без привязки к данным
Установим их свойства «Видимость» в Ложь, чтобы они не светились в списке сразу. Их заполение мы будем обрабатывать в событии ПриПолученииДанных (см. ниже)
В свойстве ЭлементУправления обоим назначаем «Поле ввода»
В обработчик ПриПолученииДанных добавляем код для отображения значений наших добавленных колонок:
Открываем список ОС, устанавливаем видимость наших новых колонок МОЛ и Местонахождение, вводим критерии отбора и вуаля:
P . S .
Недостаток рассмотренного подхода в том, что если ранее был каким-либо образом установлен отбор по ссылке, то он будет затерт нашим.