Каталог решений - Табличная часть как поле ввода

Табличная часть как поле ввода

Табличная часть как поле ввода

В наличии

Табличная часть как поле ввода с программным добавлением строк.

Категория:

Описание


Табличные части существуют у большинства объектов в 1С:

  • Справочники
  • Документы
  • Отчеты и обработки
  • Планы счетов
  • Планы видов характеристик
  • Планы видов расчета
  • Бизнес-процессы и задачи

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

Для отображения табличной части на форме существует только одна сущность "таблица" и этот объект не всегда удобен для отображения некоторых видов данных, например таких как телефоны, email адреса и т.д. 

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

Моя реализация не привязана к конкретному объекту, располагается в общем модуле и встраивается в любую форму, количество строк кода  для реализации базового функционала, составляет  от 12 строк без учета комментариев.

На форме нужно разместить общую группу для всех строк таблицы, например ГруппаEmailКакПолеВвода, и группу в которой будет размещаться поле(поля) ввода, кнопки удалить/добавить и другие элементы оформления, например ГруппаEmail как на картинке. В дальнейшем будем называть эту группу "группой строки".

 

 

Внутри группы строки количество элементов и вложенных групп не ограничено.  

У поля ввода внутри группы строки устанавливаем ПутьКДанным как ссылку на необходимые данные в нулевой строке табличной части.

 

 

Добавляем на форму команды Добавить и Удалить

 

 

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

Так как изменять форму можно только в контексте Сервера, делаем процедуру обертку на Сервере

// ***********************************************************************************************
// Вариант с ограничением количества строк таблицы 10-тью
// *********************************************************************************************** 
&НаСервере
Процедура EmailДобавитьНаСервере()       
    TableAsInputField.ДобавитьСтроку(ЭтаФорма, Объект.Email, Элементы.ГруппаEmail, 10);
КонецПроцедуры // EmailДобавитьНаСервере() 
&НаКлиенте
Процедура EmailДобавить(Команда)       
    EmailДобавитьНаСервере();
КонецПроцедуры // EmailДобавить() 



// ***********************************************************************************************
// Вариант без ограничения
// *********************************************************************************************** 
&НаСервере
Процедура EmailДобавитьНаСервере()       
    TableAsInputField.ДобавитьСтроку(ЭтаФорма, Объект.Email, Элементы.ГруппаEmail);
КонецПроцедуры // EmailДобавитьНаСервере() 
&НаКлиенте
Процедура EmailДобавить(Команда)       
    EmailДобавитьНаСервере();
КонецПроцедуры // EmailДобавить() 

Внутри процедуры команды "удалить" вызываем процедуру УдалитьСтроку из общего модуля TableAsInputField, в которой передаем ссылки на форму, табличную часть, группу строки, булево (удалять с подтверждением / без подтверждения) и текст вопроса подтверждения.

Процедура УдалитьСтроку асинхронная и доступна только в контексте клиента, это сделано для поддержки ВебКлиента.

// ***********************************************************************************************
// Вариант без подтверждения
// ***********************************************************************************************
&НаКлиенте                      
Процедура EmailУдалить(Команда)  
    TableAsInputField.УдалитьСтроку(ЭтаФорма, Объект.Email, Элементы.ГруппаEmail);    
КонецПроцедуры // EmailУдалить() 



// ***********************************************************************************************
// Вариант с подтверждением
// ***********************************************************************************************
&НаКлиенте                      
Процедура EmailУдалить(Команда)  
    TableAsInputField.УдалитьСтроку(ЭтаФорма, Объект.Email, Элементы.ГруппаEmail, Истина, "Вы уверены?"););    
КонецПроцедуры // EmailУдалить() 

Для отображения существующих строк табличной части в общем модуле TableAsInputField реализована процедура ВывестиСтрокиТаблицыИсточника, которую нужно поместить в процедуру ПриСозданииНаСервере, в качестве параметров передаем ссылки на форму, табличную часть и группу строки.

// ***********************************************************************************************
// ***********************************************************************************************
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)  
	TableAsInputField.ВывестиСтрокиТаблицыИсточника(ЭтаФорма, Объект.Email, Элементы.ГруппаEmail);
КонецПроцедуры // ПриСозданииНаСервере()

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

В заключение привожу полный листинг общего модуля TableAsInputField

 

has been added to your cart:
Оформление заказа