Табличная часть как поле ввода
Табличная часть как поле ввода с программным добавлением строк.
- Описание
- Подробнее
Описание
Табличные части существуют у большинства объектов в 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
