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





Поклонники 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,,"Автозаполнение") = КодВозвратаДиалога.Нет  Тогда
Возврат;
КонецЕсли;
КонецЕсли;

Для Каждого Строка Из ЧтоЗаполняемОбъект Цикл
Строка[ИмяРеквизита] = Значениереквизита;
//ДополнительнаяОбработкаЯчеекТаблицы(Строка, ИмяРеквизита, Значениереквизита);
КонецЦикла;

КонецПроцедуры // ЗаполнитьРеквизитТЧ

 



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

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *