gifts2017

Автозаполнение колонки табличного поля формы

Опубликовал Olga Kazakevich (ok521) в раздел Обработки - Универсальные обработки

Поклонники Microsoft office Excell, к которым я себя с удовольствием отношу, наверняка знают о волшебном сочетании клавиш Ctrl+D. Для остальных, поясню: нажав эти клавиши можно заполнить выделенные ячейки значением, введенным в верхнюю. Предлагаю аналог этой функции для табличного поля.

Как это работает?

  • На форме имеется табличное поле с заполненной первой строкой

  • Активизируем ячейку с нужным значением
  • Нажимаем кнопку «Автозаполнение текущей колонки» или волшебное сочетание клавиш Ctrl+D
  • Отвечаем согласием на вопрос о серьезности наших намерений
  • Любуемся результатом

Вполне допускаю, что каждый раз подтверждать свои намерения совершить операцию не очень удобно, поэтому предусмотрено отключение запроса при помощи флажка «Автозаполнение без запроса»


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


Как это организовать в вашем табличном поле?

Создаем табличное поле на форме: Режим выделения Множественный, Режим выделения строки Ячейка (если указать Строка, тоже будет работать, но будет неудобно выделять)

В процедуре формы ПриОткрытии() размещаем код, заполняющий табличное поле:




Процедура ПриОткрытии()
	Заполнить_тзДляЗаполнения();
КонецПроцедуры

Процедура Заполнить_тзДляЗаполнения()
	
	тзДляЗаполнения = Новый ТаблицаЗначений;		
	тзДляЗаполнения.Колонки.Добавить("Номер", Новый ОписаниеТипов("Число", , Новый КвалификаторыЧисла(5, 0, ДопустимыйЗнак.Неотрицательный))); 	
	тзДляЗаполнения.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(40))); 	
	тзДляЗаполнения.Колонки.Добавить("НаименованиеПродукции", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50))); 
	тзДляЗаполнения.Колонки.Добавить("Штрихкод", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(13))); 	
	
	СтрокаТЗ = тзДляЗаполнения.Добавить();
	СтрокаТЗ.Номер = 1;
	СтрокаТЗ.Наименование = "Конфеты Аленушка";
	СтрокаТЗ.НаименованиеПродукции = "Конфеты Аленушка шоколадные с пралине";
	СтрокаТЗ.Штрихкод = "4670002967739";
	
	Для Счетчик = 1 По 12 Цикл
		СтрокаТЗ = тзДляЗаполнения.Добавить();
		СтрокаТЗ.Номер = Счетчик;
		
	КонецЦикла;
	ЭлементыФормы.ТабличноеПоле1.Значение = тзДляЗаполнения;
	ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
КонецПроцедуры

 



На форме рисум флажок с именем «ФлажокАвтозаполнениеБезЗапроса», и кнопку «АвтозаполнениеТекущейКолонки». В свойстве кнопки Сочетание клавиш указываем Ctrl+D. Привязываем к кноке процедуру АвтозаполнениеТекущейКолонкиНажатие


Процедура АвтозаполнениеТекущейКолонкиНажатие(Элемент)
	ЗаполнитьРеквизитТЧ(ЭлементыФормы.ТабличноеПоле1,ЭлементыФормы.ФлажокАвтозаполнениеБезЗапроса.Значение);
КонецПроцедуры

В модуле обработки размещаем код процедуры ЗаполнитьРеквизитТЧ


 Процедура ЗаполнитьРеквизитТЧ(ТабПоле, ФлажокАвтозаполнениеБезЗапроса = Ложь) Экспорт
	
	ТабЧасть = ТабПоле.Значение;
	ИмяРеквизита = ?(типзнч(ТабПоле.ТекущаяКолонка.ЭлементУправления ) = тип("флажок"),ТабПоле.ТекущаяКолонка.ДанныеФлажка,ТабПоле.ТекущаяКолонка.Данные);   
	Значениереквизита = ТабПоле.ТекущаяСтрока[ИмяРеквизита];
	
	Если  ТабПоле.ВыделенныеСтроки.Количество()>1 Тогда
		ЧтоЗаполняем = " ВЫДЕЛЕНИЕ ";
		ЧтоЗаполняемОбъект	= ТабПоле.ВыделенныеСтроки;
		Значениереквизита = ЧтоЗаполняемОбъект[0][ИмяРеквизита]; 
		Если  НЕ  ЗначениеЗаполнено(Значениереквизита)      Тогда   
			//Ищем значение в выделении
			Для Каждого Строка Из ЧтоЗаполняемОбъект Цикл
				Если   ЗначениеЗаполнено(Строка[ИмяРеквизита])   Тогда
					Значениереквизита =Строка[ИмяРеквизита];
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;	
	Иначе
		ЧтоЗаполняем = " ВСЮ КОЛОНКУ ";
		ЧтоЗаполняемОбъект = ТабЧасть;
	КонецЕсли;	
	
	Если  НЕ ФлажокАвтозаполнениеБезЗапроса  Тогда
		Если Вопрос(?(ЗначениеЗаполнено(Значениереквизита),"Заполнить" +ЧтоЗаполняем+ИмяРеквизита+ " таблицы  значением "+строка(Значениереквизита)+"?",
			"Заполнить " +ЧтоЗаполняем+ИмяРеквизита+ " таблицы пустым значением? ")
			, РежимДиалогаВопрос.ДаНет,0,,"Автозаполнение") = КодВозвратаДиалога.Нет  Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	
	Для Каждого Строка Из ЧтоЗаполняемОбъект Цикл
		Строка[ИмяРеквизита] = Значениереквизита;
		//ДополнительнаяОбработкаЯчеекТаблицы(Строка, ИмяРеквизита, Значениереквизита);
	КонецЦикла;	
	
КонецПроцедуры // ЗаполнитьРеквизитТЧ

 



Сохраняем, проверяем, пользуемся...

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Автозаполнение колонки табличного поля формы
.epf 74,22Kb
13.06.13
17
.epf 74,22Kb 17 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа