HelpF.pro

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

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

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

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

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

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

И так, код будет следующий:
Код 1C v 8.х
 //Процедура кнопки очистить список значений
Процедура КоманднаяПанельОчистить(Кнопка)
СписокСотрудников.Очистить();
КонецПроцедуры

// Процедура открывает форму выбора сотрудников организации
// Параметры:
// Владелец - владелец формы
// Ключ - ключ, ссылка на объект из которого открывается форма
// ЗакрыватьПриВыборе - Булево, закрывать ли нет
// ГоловнаяОрганизация - головная организация
//
Процедура ОткрытьФормуВыбораСотрудника(Владелец, Ключ, ЗакрыватьПриВыборе, ГоловнаяОрганизация = Неопределено) Экспорт

СтандартнаяОбработка = Ложь;

Форма = Справочники.СотрудникиОрганизаций.ПолучитьФормуВыбора(, Владелец, Ключ);
Форма.ЗакрыватьПриВыборе = ЗакрыватьПриВыборе;

//установим отборы по организации и виду договора
Если ЗначениеЗаполнено(ГоловнаяОрганизация) Тогда
Форма.Отбор.Организация.Установить(ГоловнаяОрганизация);
Форма.Отбор.Организация.Использование = ЗначениеЗаполнено(ГоловнаяОрганизация);
КонецЕсли;

СписокДоговоров = Новый СписокЗначений;
СписокДоговоров.Добавить(Перечисления.ВидыДоговоровСФизЛицами.ТрудовойДоговор);
СписокДоговоров.Добавить(Перечисления.ВидыДоговоровСФизЛицами.Подряда);
СписокДоговоров.Добавить(Перечисления.ВидыДоговоровСФизЛицами.Авторский);
Форма.Отбор.ВидДоговора.ВидСравнения = ВидСравнения.ВСписке;
Форма.Отбор.ВидДоговора.Использование = Истина;
Форма.Отбор.ВидДоговора.Значение = СписокДоговоров;
//Открываем форму выбора
Форма.Заголовок = "Выберите работников:";
Форма.Открыть();

КонецПроцедуры

//Процедура кнопки подбор
Процедура КоманднаяПанельПодбор(Кнопка)
// Процедура для подбора в табличное поля
ОткрытьФормуВыбораСотрудника(ЭлементыФормы.ТабличноеПолеРаботники, ЭтотОбъект, Ложь, );

// Процедура для подбора в список значений
ОткрытьФормуВыбораСотрудника(ЭлементыФормы.СписокСотрудников, ЭтотОбъект, Ложь, );
КонецПроцедуры

//Обработка Выбора значения для списка значений
Процедура СписокСотрудниковОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
//Для того чтобы не было задвоений при выборе, наложим условие
Если СписокСотрудников.НайтиПоЗначению(ВыбранноеЗначение) = Неопределено Тогда
НоваяСтрока = СписокСотрудников.Добавить();
НоваяСтрока.Значение = ВыбранноеЗначение;
КонецЕсли;
КонецЕсли;

КонецПроцедуры

//Обработка Выбора значения для табличного поля
Процедура ТабличноеПолеРаботникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;

Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
//Для того чтобы не было задвоений при выборе, наложим условие
Если ТабличноеПолеРаботники.НайтиСтроки(Новый Структура("Работник", ВыбранноеЗначение)).Количество() = 0 Тогда
НоваяСтрока = ТабличноеПолеРаботники.Добавить();
НоваяСтрока.Работник = ВыбранноеЗначение;
// далее можно описать заполнение других колонок табличного поля
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Автор: Мигачев Евгений
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/680.html