1с как сделать подбор из справочника

от admin

1с как сделать подбор из справочника

В форме размещаем кнопку «Подбор». Это может быть кнопка панели инструментов или отдельно стоящая кнопка.

В обработчике события Нажатие для кнопки пишем:

При этом происходят довольно интересные вещи:

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

Если вы получили не форму подбора, а обычную форму (методом ПолучитьФорму или ПолучитьФормуСписка), то по умолчанию у нее не установлено свойство РежимВыбора. Нужно или установить это свойство в Истина, или оповещать о выборе элемента самостоятельно (см. метод формы ОповеститьОВыборе).

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

б) Вторым параметр указывается владелец формы — форма или элемент управления, из которого производится вызов формы выбора. После совершения выбора именно владельцу формы будет послано оповещение о выборе, которое инициирует событие «ОбработкаВыбора» (у формы или элемента формы).

в) Третьим параметром можно указать ключ уникальности для поиска среди уже открытых форм. Если форма с таким ключом уникальности будет найдена, то будет возвращена именно она. Это удобно, если не нужно открывать новых форм выбора.

2. Вторая строка устанавливает режим, при котором после выбора значения форма не будет закрываться, т.е. это и и есть основная функция подбора. При множественном выборе это свойство имеет смысл установить в Истина, но об этом ниже. Здесь же можно присвоить и другие свойства открываемой формы, например, расположение на экране, задать значения реквизитов формы или экспортных переменных модуля формы.

3. Третья строка открывает форму выбора. После первой строки форма еще не была открыта, но ее модуль уже был скомпилирован и инициализирован.

В свойствах формы должен быть назначен обработчик события «ОбработкаВыбора».

2. Множественный выбор

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

Тогда обработчик события ОбработкаВыбора можно написать так:

Примечание: Для ручной генерации события выбора из формы подбора нужно использовать функцию ОповеститьОВыборе.

Как сделать подбор элементов справочника в табличную часть документа?

Нужно на форме документа сделать кнопочку Подбор для справочника сотрудники и чтобы выбранные элементы добавлялись в табличное поле документа?

В данной статье я приведу пример подбора элемента справочника в Список значений и в Табличную часть!

Создаем на форме следующие элементы:

Логика такова:
При нажатии на кнопку ПОДБОР (Процедура КоманднаяПанельПодбор) должена открыться форма подбора сотрудников:
Для Списка значений (СЗ) — ОткрытьФормуВыбораСотрудника(ЭлементыФормы.СписокСотрудников, ЭтотОбъект, Ложь, );
Для Табличного поля (ТП) — ОткрытьФормуВыбораСотрудника(ЭлементыФормы.ТабличноеПолеРаботники, ЭтотОбъект, Ложь, );

Далее открывается форма подбора сотрудника, при двойном щелчке — сотрудник должен добавится в СЗ или ТП.
Для этого у СЗ и ТП в Свойства — События добавляем ОбработкуВыбора :
Для Списка значений (СЗ) — Процедура СписокСотрудниковОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Для Табличного поля (ТП) — Процедура ТабличноеПолеРаботникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
А в них пропишем проверку, добавлен сотрудник или нет — чтобы не было задвоений!

И так, код будет следующий:
Код 1C v 8.х
Автор: Мигачев Евгений

Информационные системы / Курсовая_6_семестр / Учебники / Радченко М.Г. 1С- Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы (2013) (1)

Некоторые типовые приемы разработки

Ориентировочная продолжительность занятия – 2 часа.

Подбор с использованием множественного выбора.

Множественный подбор с использованием множественного выбора.

Использование метода «Оповестить о выборе()» . .

Особенности разработки в режиме без использования модальности.

Как задать вопрос пользователю в команде формы . .

Как задать вопрос пользователю в обработчике события . .

Ввод на основании.

Команда ввода на основании.

Объекты, введенные на основании.

Получение объектов, введенных на основании.

792 1С:Предприятие 8.3. Практическое пособие разработчика

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

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

Для иллюстрации механизма подбора информации в форме мы будем использовать задачу подбора элементов справочника в табличную часть документа как наиболее распространенную.

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

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

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

Событие ОбработкаВыбора в форме документа будет вызвано в двух случаях:

когда в форме справочника будет выполнен интерактивный выбор;

когда в форме справочника будет вызван метод ОповеститьОВы-

Различные способы подбора мы проиллюстрируем на примере подбора элементов справочника Номенклатура в документ Приход-

Занятие 26 79 3

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

В режиме «Конфигуратор»

Откроем форму документа ПриходнаяНакладная .

На закладке Команды создадим команду Подбор и в открывшейся палитре свойств нажмем кнопку открытия в строке Действие . Укажем, что команда будет выполняться на клиенте.

Шаблон обработчика команды заполнять пока не будем, а перейдем на закладку Форма и перетащим эту команду в окно элементов формы, в командную панель таблицы Материалы (рис. 26.1).

Рис. 26.1. Создание кнопки «Подбор»

В форме документа в обработчик команды Подбор добавим следующий текст (листинг 26.1).

794 1С:Предприятие 8.3. Практическое пособие разработчика

Листинг 26.1. Обработчик нажатия кнопки «Подбор»

&НаКлиенте Процедура Подбор(Команда)

ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора», , Элементы.Материалы); КонецПроцедуры

В этой процедуре мы открываем форму выбора для справочника Номенклатура , указывая, что она подчинена таблице Материалы

формы документа ПриходнаяНакладная ( Элементы.Материалы ).

При выборе из формы выбора справочника выбранное значение будет передано в обработчик события ОбработкаВыбора таблицы формы Материалы , так как она является владельцем открытой формы выбора.

Поэтому откроем палитру свойств таблицы Материалы и создадим обработчик события ОбработкаВыбора (рис. 26.2). Укажем, что событие будет обрабатываться только на клиенте (листинг 26.2).

Рис. 26.2. Создание обработчика события «ОбработкаВыбора» для таблицы «Материалы»

Занятие 26 79 5

Листинг 26.2. Обработчик события «ОбработкаВыбора» таблицы «Материалы»

&НаКлиенте Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Элементы.Материалы.ДобавитьСтроку(); Элементы.Материалы.ТекущиеДанные.Материал = ВыбранноеЗначение;

В этой процедуре мы добавляем новую строку в таблицу Материалы

и присваиваем колонке Материал в новой строке выбранное в форме выбора справочника значение. Это значение передается в обработчик события в параметре ВыбранноеЗначение .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки.

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

В командной панели списка материалов нажмем кнопку Подбор и двойным щелчком мыши подберем в накладную один материал.

В режиме «Конфигуратор»

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

В форме документа ПриходнаяНакладная , в обработчике команды Подбор заменим прежний текст новым (листинг 26.3).

Листинг 26.3. Обработчик нажатия кнопки «Подбор»

&НаКлиенте Процедура Подбор(Команда)

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

796 1С:Предприятие 8.3. Практическое пособие разработчика

При открытии формы мы используем ее параметры .

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

Такую структуру мы передаем в метод ОткрытьФорму() вторым параметром (переменная ПараметрыФормы ).

Предварительно мы эту структуру формируем. В ней у нас всего один элемент с ключом ЗакрыватьПриВыборе .

Таким образом, передавая эту структуру в метод ОткрытьФорму() , мы устанавливаем параметр открываемой формы ЗакрыватьПриВыборе в значение Ложь .

Читать:
Как активировать доктор веб бесплатно

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

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки.

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

В командной панели списка материалов нажмем кнопку Подбор . Двойным щелчком мыши подберем в накладную один материал, затем другой материал. Перейдем в группу Услуги и подберем несколько услуг.

Когда все желаемые товары и услуги будут выбраны, закроем окно с формой выбора.

Подбор с использованием множественного выбора

В режиме «Конфигуратор»

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

Режим множественного выделения в списке устанавливается, как правило, во всех формах списков по умолчанию.

Однако возможность выбрать сразу несколько элементов из списка по умолчанию, как правило, отключена.

Занятие 26 79 7

Поэтому для того, чтобы в форме списка справочника Номенклатура можно было не только отметить, но и выбрать сразу несколько элементов, мы снова воспользуемся одним из параметров расширения формы динамического списка – МножественныйВыбор .

В форме документа ПриходнаяНакладная изменим текст обработчика команды Подбор следующим образом (листинг 26.4).

Листинг 26.4. Обработчик нажатия кнопки «Подбор»

&НаКлиенте Процедура Подбор(Команда)

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

При множественном выборе форма выбора будет возвращать уже не один элемент, а массив элементов.

Поэтому в обработчик события ОбработкаВыбора добавим обход массива переданных элементов (листинг 26.5).

Листинг 26.5. Обработчик события «ОбработкаВыбора» таблицы «Материалы»

&НаКлиенте Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл НоваяСтрока = Объект.Материалы.Добавить(); НоваяСтрока.Материал = ВыбранныйЭлемент;

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки.

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

В командной панели списка материалов нажмем кнопку Подбор . Для удобства в открывшейся форме выбора справочника Номенклатура установим режим просмотра в виде списка – Еще  Режим

798 1С:Предприятие 8.3. Практическое пособие разработчика

Удерживая клавишу Ctrl , выделим в списке несколько товаров и несколько услуг.

Нажмем кнопку Выбрать .

Отмеченные элементы появятся в табличной части документа.

Множественный подбор с использованием множественного выбора

В режиме «Конфигуратор»

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

Для этого нам будет необходимо при открытии формы выбора устано-

вить оба параметра: ЗакрыватьПриВыборе и МножественныйВыбор .

Процедура нажатия кнопки Подбор будет выглядеть следующим образом (листинг 26.6).

Листинг 26.6. Обработчик нажатия кнопки «Подбор»

&НаКлиенте Процедура Подбор(Команда)

ПараметрыФормы = Новый Структура(«ЗакрыватьПриВыборе, МножественныйВыбор», Ложь, Истина);

ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора», ПараметрыФормы, Элементы.Материалы);

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки.

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

В командной панели списка материалов нажмем кнопку Подбор .

Откроем группу Услуги  Телевизоры , выделим в ней все услуги и нажмем кнопку Выбрать .

Занятие 26 79 9

Откроем группу Материалы  Прочее , выделим в ней все материалы и нажмем кнопку Выбрать .

Закроем окно с формой выбора справочника Номенклатура .

Использование метода «Оповестить о выборе()»

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

Метод ОповеститьОВыборе() посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение и закрывает форму, если она открыта не в режиме множественного выбора.

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

Особенности разработки в режиме без использования модальности

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

800 1С:Предприятие 8.3. Практическое пособие разработчика

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

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

Однако с тех пор, как «1С:Предприятие» перестало быть «обычным десктопным приложением», с появлением веб-клиента и с переходом «1С:Предприятия» на мобильные платформы использование модальных окон стало вызывать много проблем.

Основные неудобства заключались в том, что для нормальной работы веб-клиента на обычных компьютерах требовалась предварительная настройка браузера. А на мобильных устройствах браузеры вообще не поддерживают работу с модальными окнами.

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

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

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

Чтобы система знала, с какого места продолжать исполнение программного кода, блокирующему окну передается имя процедуры,

Быстрая реализация подбора на управляемых формах 1С 8.2/8.3 — Программист 1С Минск. Автоматизация бизнеса.

Быстрая реализация подбора на управляемых формах 1С 8.2/8.3

ПРОГРАММИРОВАНИЕ 1С 8 → перейти в меню [СТАТЬИ И ИНСТРУКЦИИ]


&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )

&НаСервере
Процедура УправлениеТаблицей ()

ТаблицаМатериалов . Параметры . УстановитьЗначениеПараметра ( «МаркаАвтомобиля» , Параметры . МаркаАвтомобиля );
ТаблицаМатериалов . Параметры . УстановитьЗначениеПараметра ( «СкладРемзона» , Параметры . СкладРемзона );
СписокСвойств = » ПоказыватьТолькоОстатки, МаркаАвтомобиля, ДатаДокумента,СкладРемзона» ;
ЗаполнитьЗначенияСвойств ( ЭтаФорма , Параметры , СписокСвойств ); //


&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )

&НаСервере
Процедура УправлениеТаблицей ()

ТаблицаМатериалов . Параметры . УстановитьЗначениеПараметра ( «МаркаАвтомобиля» , Параметры . МаркаАвтомобиля );
ТаблицаМатериалов . Параметры . УстановитьЗначениеПараметра ( «СкладРемзона» , Параметры . СкладРемзона );
ТаблицаМатериалов . Параметры . УстановитьЗначениеПараметра ( «ДатаДокумента» , Параметры . ДатаДокумента );
ПоказыватьТолькоОстаткиПриИзмененииНаСервере (); //то же самое //ТаблицаМатериалов.Параметры.УстановитьЗначениеПараметра(«ПоказыватьТолькоОстатки», Параметры.ПоказыватьТолькоОстатки);

СписокСвойств = «ПоказыватьТолькоОстатки, МаркаАвтомобиля, ДатаДокумента,СкладРемзона» ;
ЗаполнитьЗначенияСвойств ( ЭтаФорма , Параметры , СписокСвойств ); //

&НаКлиенте
Процедура ПеренестиВДокумент ( Команда )

ПеренестиВДокумент = Истина;
Закрыть ( КодВозвратаДиалога . OK );

&НаСервере
Функция ПоместитьПодобранныеМатериалыВХранилище ()

ТаблицаМатериалов2 = Объект . ПодобранныеМатериалы . Выгрузить ();
АдресПодобранныхМатериаловВХранилище = ПоместитьВоВременноеХранилище ( ТаблицаМатериалов2 , УникальныйИдентификатор ); //
Возврат АдресПодобранныхМатериаловВХранилище ;

&НаСервере
Функция ПриЗакрытииНаСервере ()

СтруктураВозврата = Новый Структура ();

Если ПеренестиВДокумент Тогда
АдресПодобранныхМатериаловВХранилище = ПоместитьПодобранныеМатериалыВХранилище ();
СтруктураВозврата . Вставить ( «АдресПодобранныхМатериаловВХранилище» , АдресПодобранныхМатериаловВХранилище );
КонецЕсли;

&НаКлиенте
Процедура ПриЗакрытии ()

Если ПеренестиВДокумент Тогда
ОповеститьОВыборе ( СтруктураВозврата );
КонецЕсли;

&НаКлиенте
Процедура ПередЗакрытием ( Отказ , СтандартнаяОбработка )

Если Не ПеренестиВДокумент И Объект . ПодобранныеМатериалы . Количество () > 0 Тогда

ОтветНаВопрос = Вопрос ( НСтр ( «ru = ‘Подобранные материалы не перенесены в документ.
|
|Перенести?'» ), РежимДиалогаВопрос . ДаНетОтмена );

Если ОтветНаВопрос = КодВозвратаДиалога . Отмена Тогда
Отказ = Истина;
ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога . Да Тогда
ПеренестиВДокумент = Истина;
КонецЕсли;

&НаКлиенте
Процедура ДобавитьВыбранныйМатериал ( ПараметрыМатериала , Количество )

ПараметрыФормы = Новый Структура ;
ПараметрыФормы . Вставить ( «Материал» , ПараметрыМатериала . Материал );
ПараметрыФормы . Вставить ( «Количество» , 1 );
ПараметрыФормы . Вставить ( «ИмяТаблицы» , «ТабличнаяЧастьЗаявки» );
ПараметрыПоиска = Новый Структура ( «Материал» , ПараметрыМатериала . Материал );

ВозвращенноеЗначение = ОткрытьФормуМодально ( «Обработка.ПодборЗЧ.Форма.ФормаВводаКоличество» , ПараметрыФормы , ЭтаФорма );
Если ВозвращенноеЗначение <> Неопределено Тогда
Количество = ВозвращенноеЗначение . Количество ;
Иначе
Возврат;
КонецЕсли;

РезультатПоиска = Объект . ПодобранныеМатериалы . НайтиСтроки ( ПараметрыПоиска );
Если РезультатПоиска . Количество () = 0 Тогда
ТекущаяСтрока = Объект . ПодобранныеМатериалы . Добавить ();
ЗаполнитьЗначенияСвойств ( ТекущаяСтрока , ПараметрыМатериала );
Иначе
ТекущаяСтрока = РезультатПоиска [ 0 ];
КонецЕсли;

ТекущаяСтрока . Количество = Количество + ТекущаяСтрока . Количество ;
Элементы . ПодобранныеМатериалы . ТекущаяСтрока = ТекущаяСтрока . ПолучитьИдентификатор ();

&НаКлиенте
Процедура ТаблицаМатериаловВыбор ( Элемент , ВыбраннаяСтрока , Поле , СтандартнаяОбработка )

СтандартнаяОбработка = Ложь;
Если Элемент . ТекущиеДанные <> Неопределено Тогда

СтруктураПараметрыМатериала = Новый Структура ;
СтруктураПараметрыМатериала . Вставить ( «Материал» , Элемент . ТекущиеДанные . Материал );
ДобавитьВыбранныйМатериал ( СтруктураПараметрыМатериала , 1 );

&НаСервере
Процедура ПоказыватьТолькоОстаткиПриИзмененииНаСервере ()

ТаблицаМатериалов . Параметры . УстановитьЗначениеПараметра ( «ПоказыватьТолькоОстатки» , ПоказыватьТолькоОстатки );

Похожие статьи