Содержание
24.04.2018
Теги: 1С:Предприятие • Владелец • ОбработкаВыбора • ОповеститьОВыборе • ОткрытьФорму • УправляемаяФорма
Для иллюстрации механизма подбора информации в форме будем использовать задачу подбора элементов справочника Номенклатура
в табличную часть документа ПриходнаяНакладная
как наиболее распространенную. Поскольку механизм подбора реализован на уровне форм, то в других случаях просто будут задействованы иные прикладные объекты. Сама механика подбора не изменится.
Для организации подбора в форму документа следует открыть форму справочника как подчиненную форме документа в целом либо одному из элементов формы. Способ получения формы справочника может быть любым, также как и сама форма справочника, которая будет использована. Важно лишь то, что эта форма должна быть открыта как подчиненная.
Результат подбора будет доступен в обработчике события ОбработкаВыбора
формы документа или элемента формы (в зависимости от того, чему мы подчиним форму справочника при открытии). Событие ОбработкаВыбора
в форме документа будет вызвано в двух случаях:
- когда в форме справочника будет выполнен интерактивный выбор;
- когда в форме справочника будет вызван метод
ОповеститьОВыборе
.
Одиночный подбор
При одиночном подборе форма справочника будет закрываться сразу после выбора элемента. Для выбора следующего элемента необходимо будет снова инициировать подбор.
Откроем форму документа ПриходнаяНакладная
, создадим команду Подбор
и назначим для нее обработчик:
&НаКлиентеПроцедураВыборОдногоЭлемента(Команда)// Форма выбора закрывается после двойного клика// по выбранному элементуОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",,Элементы.Материалы);КонецПроцедуры
В этой процедуре мы открываем форму выбора для справочника Номенклатура
, указывая, что она подчинена таблице Материалы
формы документа ПриходнаяНакладная
(Элементы.Материалы
). При выборе из формы выбора справочника выбранное значение будет передано в обработчик события ОбработкаВыбора
таблицы формы Материалы
, так как она является владельцем открытой формы выбора.
Поэтому откроем палитру свойств таблицы Материалы
и создадим обработчик события ОбработкаВыбора
:
&НаКлиентеПроцедураМатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Элементы.Материалы.ДобавитьСтроку(); Элементы.Материалы.ТекущиеДанные.Материал = ВыбранноеЗначение;КонецПроцедуры
В этой процедуре мы добавляем новую строку в таблицу Материалы
и присваиваем колонке Материал
в новой строке выбранное в форме выбора справочника значение. Это значение передается в обработчик события в параметре ВыбранноеЗначение
.
Множественный подбор
При множественном подборе форма справочника будет открыта до тех пор, пока пользователь не закроет ее интерактивно или не будет вызван метод формы Закрыть()
.
Обработчик команды Подбор
:
&НаКлиентеПроцедураВыборЭлементовБезЗакрытияФормы(Команда)// Не закрывать форму после двойного клика; можно выбрать// несколько элементов, дважды кликая на каждом ПараметрыФормы =НовыйСтруктура("ЗакрыватьПриВыборе",Ложь);ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.Материалы );КонецПроцедуры
Обработчик события ОбработкаВыбора
остается без изменений.
Подбор с использованием множественного выбора
Еще одним способом организации подбора является возможность выделения в списке сразу нескольких строк. Режим множественного выделения в списке устанавливается, как правило, во всех формах списков по умолчанию. Однако возможность выбрать сразу несколько элементов из списка по умолчанию, как правило, отключена.
Поэтому для того, чтобы в форме списка справочника Номенклатура можно было не только отметить, но и выбрать сразу несколько элементов, мы воспользуемся одним из параметров расширения формы динамического списка — МножественныйВыбор
.
Обработчик команды Подбор
:
&НаКлиентеПроцедураМножественныйВыбор(Команда)// Позволяем выделить и выбрать несколько элементов; в обработчик// ОбработкаВыбора() передается массив элементов ПараметрыФормы =НовыйСтруктура("МножественныйВыбор",Истина);ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.Материалы );КонецПроцедуры
Обработчик события ОбработкаВыбора
:
&НаКлиентеПроцедураМатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)ДляКаждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл НоваяСтрока = Объект.Материалы.Добавить(); НоваяСтрока.Материал = ВыбранныйЭлемент;КонецЦикла;КонецПроцедуры
Множественный подбор с использованием множественного выбора
Последний способ подбора сочетает в себе оба рассмотренных ранее способа. Мы будем отмечать сразу несколько элементов справочника и подбирать их в документ без закрытия формы выбора. Затем снова отмечать несколько элементов справочника и подбирать их в документ. Для этого нам будет необходимо при открытии формы выбора установить оба параметра: ЗакрыватьПриВыборе
и МножественныйВыбор
.
Обработчик команды Подбор
:
&НаКлиентеПроцедураМножественныйВыборБезЗакрытияФормы(Команда)// Позволяем выделить и выбрать несколько элементов несколько раз; в// обработчик ОбработкаВыбора() передается массив элементов; после// каждого выбора форма не закрывается ПараметрыФормы =НовыйСтруктура("ЗакрыватьПриВыборе,МножественныйВыбор",Ложь,Истина);ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, Элементы.Материалы );КонецПроцедуры
Обработчик события ОбработкаВыбора
остается без изменений.
Использование метода ОповеститьОВыборе()
Метод формы ОповеститьОВыборе()
используется в тех случаях, когда алгоритм формирования данных подбора сложен и кроме собственно выбора элемента справочника от пользователя требуется указание некоторой дополнительной информации. В этом случае метод ОповеститьОВыборе()
вызывается тогда, когда вся необходимая информация подбора сформирована.
Метод ОповеститьОВыборе()
посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение и закрывает форму, если она открыта не в режиме множественного выбора.
Также метод ОповеститьОВыборе()
может использоваться в тех случаях, когда требуется передать в форму документа не только выбранный элемент справочника (или массив элементов), а некоторую произвольную структуру данных.
Справка
ТабличноеПоле.ДобавитьСтроку()
ТабличноеПоле.ДобавитьСтроку()
Добавляет строку в табличное поле, аналогично выполнению команды «Добавить».
- Если табличное поле связано с таблицей или деревом значений, метод добавляет строку в таблицу или дерево значений (аналогично соответствующим методам этих объектов).
- Если табличное поле связано со списком объектов, хранимых в базе данных, метод начинает редактирование нового объекта этого списка. (Например, список объектов в форме списка справочника, или документа).
- Если табличное поле связано с набором записей или табличной частью, то метод начинает редактирование новой записи. (Например, список записей в форме списка регистра сведений; табличная часть документа или справочника).
Доступность: Толстый клиент.
ДанныеФормыКоллекция.Добавить()
ДанныеФормыКоллекция.Добавить()
Добавляет элемент в конец коллекции и возвращает его в качестве результата метода. Возвращаемое значение: ДанныеФормыЭлементКоллекции
.
Доступность: тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Поиск: 1С:Предприятие • Владелец • Обработка выбора • Оповестить о выборе • Открыть форму • Управляемая форма
Работая с программами 1С, пользователи постоянно создают документы для отражения различных операций с товарами: покупка, продажа, перемещение, инвентаризация и др. Во всех документах пользователю необходимо указывать список товаров. Когда ассортимент номенклатуры компании достаточно большой, заполнение документов может занимать много времени.
В программе «1С:Управление торговлей, ред. 10.3» во всех документах реализован механизм подбора товаров, позволяющий заполнять документы быстро и удобно. Рассмотрим работу данного механизма на примере документа «Заказ покупателя».
Меню: Документы – Продажи – Заказы покупателей
Создадим документ, укажем в нем организацию, склад и контрагента:
<object>Авиант? Реклама<object></object><object>Помощь по 1С онлайнБесплатные консультации и помощь от специалистов по 1С. Узнать больше</object></object>
Далее необходимо заполнить список заказываемых товаров, их количества и цены. Можно добавлять в таблицу новые строки, выбирать в них номенклатуру и указывать количество, но такой вариант достаточно сложный.
Нажмем на кнопку «Подбор» для открытия окна подбора:
Окно подбора выглядит следующим образом:
Окно подбора состоит из нескольких частей.
Наверху можно выбрать способ подбора, указать номенклатурную группу и сделать поиск номенклатуры.
Ниже располагается список всех групп номенклатуры из справочника:
? Реклама
Вы можете устанавливать курсор на нужную вам группу товаров, и в окне подбора ниже отобразятся товары из выбранной группы.
Под группами располагается сам список товаров и некоторые дополнительные настройки.
Работая с подбором, вы можете выбрать один из вариантов:
- По справочнику. Отображаются все товары из справочника, независимо от их наличия на складе.
- По остаткам номенклатуры. Отображаются только те товары, которые имеют остаток на складе. В списке товаров отображаются дополнительные колонки с общим остатком на складе и свободным остатком.
- По ценам номенклатуры. Отображаются только те товары, по которым указаны цены продажи. В списке товаров показывается дополнительная колонка с ценой.
<object>Авиант? Реклама<object></object><object>Купите 1С Бухгалтерия, а в подарок духиПри покупке 1С ПРОФ дарим сертификат на 2000 руб Летуаль/Детский мир в подарок.Узнать больше</object></object>
- По остаткам и ценам номенклатуры. Этот вариант совмещает в себе варианты «по остаткам номенклатуры» и «по ценам номенклатуры».
Примечание: показываются остатки товаров по складу, который выбран в заказе. Для отображения цен в заказе покупателя должен быть выбрать тип цен.
Установим подбор по остаткам номенклатуры. Для поиска необходимого товара можно воспользоваться полем поиска наверху. Поиск товара возможен по наименованию, артикулу, коду и штрихкоду.
Выберем вариант поиска по артикулу и укажем необходимый артикул. Программа найдет товар с данным артикулом и спозиционируется на нем в списке товаров:
<object>SCloud? Реклама<object>
</object><object>Аренда 1С в облаке — просто, надежно и удобно!Скидка 20% на первый платеж до 31 мартаУзнать больше</object></object>
Чтобы добавить найденный товар в заказ покупателя нужно просто сделать по нему двойной клик мышью. При этом программа добавит в заказ строку с нужным товаром, укажет количество – 1 шт. и установит цену (если она установлена в базе).
Повторный двойной клик по товару вызовет увеличение количества в строке до 2 шт. Т.е. если товар уже присутствует в заказе, он не добавляется повторно, а количество товара в заказе увеличивается.
В момент добавления товара в заказ можно указывать необходимое количество и цену. Для этого установим внизу флаги «Запрашивать количество» и «Запрашивать цену»:
В этом случае при двойном клике по товару откроется специальное окно для ввода количества и цены:
? Реклама
Заказ покупателя после добавления вентилятора:
Если по товару ведется учет по характеристикам, то можно также установить флаг «Запрашивать характеристику» там же. С такой настройкой при двойном клике по товару программа откроет окно для ввода количества и цены по каждой характеристике товара:
В поле количество указывается количество товара с данной характеристикой, которое нужно добавить в заказ. А в поле цена – цена на товар с данной характеристикой.
Заказ покупателя после добавления женских босоножек:
? Реклама
Таким образом, вы можете пользоваться подбором, искать необходимые товары и быстро добавлять их в документы, указав количество и цену. Окно подбора вы можете открыть в любом документе, который содержит список товаров. Все настройки, сделанные в подборе, сохраняются в программе (отдельно для каждого пользователя и вида документа).
Мероприятия
Блоги компаний
Реализация подбора является часто встречающейся задачей, и в управляемых формах она реализуется несколько иначе, чем в формах обычных. И на самом деле есть несколько способов реализовать подбор. Сегодня я расскажу об одном из них.
Допустим у нас есть некий справочник, элементы которого мы будем подбирать, и некая форма с кнопкой «Подобрать» и таблицей значений, в которую попадает результат подбора.
Сначала реализуем обработчик нажатия кнопки «Подобрать», которая открывает окно подбора (это может быть обычная форма выбора):
Параметр «МножественныйВыбор» устанавливайте на свое усмотрение. Параметр «Владелец» в процедуре «ОткрытьФорму» (третий по счету) назначается исходя из цели подбора (у меня цель добавить подобранные элементы в таблицу значений «ИтоговаяТаблица»).
Затем нам остается лишь реализовать событие «ОбработкаВыбора», это событие того элемента, который был указан как владелец формы подбора (у меня это элемент «ИтоговаяТаблица»):
В принципе, на этом все, дальше можно делать с параметром «ВыбранноеЗначение» (в котором хранится результат подбора) все, что требуется. Например я передаю его в процедуру, которая проверяет не добавлен ли уже такой элемент в таблицу, и если нет, то добавляет его:
На этом все, спасибо за внимание, надеюсь данная статья Вам помогла.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Загрузка…Используемые источники:
- https://tokmakov.msk.ru/blog/item/97
- soft/articles/417287/
- https://1c-programmer-blog.ru/programmirovanie/podbor-v-upravlyaemyx-formax.html