helpf.pro
Регистрация
 +6 
Распечатать

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

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

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

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

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

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

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

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

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

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

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

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

Автор: Мигачев Евгений
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 75075
 +6 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С Предприятие что это? 13
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ;
Посмотреть все результаты поиска похожих
Комментарии
XOCTEP
14.12.2012 15:21Комментарий: 1
XOCTEP
Спасибо огромное, очень помогли. Полезная статья!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!