Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Особенности редактирования значений произвольного типа в табличном поле          
Batchir Подменю пользователя
сообщение 11.02.09, 22:32
Сообщение #1

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

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

Пусть существует форма подбора, содержащая табличное поле, состоящее из двух колонок: колонки Тип, содержащей тип выбираемого значения, и колонки Значение, содержащей значение указанного типа. Колонка Тип содержит индексы в массиве доступных типов, а колонка Значение не связана с данными, т. к. для элемента управления, расположенного в данной колонке, требуется изменять тип редактируемого значения.

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



// Заполняем массив доступных типов. Из этого массива будет выбираться тип редактируемого значения.
МассивДоступныхТипов = Новый Массив;
МассивДоступныхТипов.Добавить(Тип(Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой))));
МассивДоступныхТипов.Добавить(Тип(Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))));
МассивДоступныхТипов.Добавить(Тип(Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))));
МассивДоступныхТипов.Добавить(Тип(Новый ОписаниеТипов("Булево")));

// Добавляем ссылки на справочники
Для Каждого ЭлементТипа Из Справочники.ТипВсеСсылки().Типы() Цикл

МассивДоступныхТипов.Добавить(ЭлементТипа);

КонецЦикла;

// Добавляем ссылки на документы
Для Каждого ЭлементТипа Из Документы.ТипВсеСсылки().Типы() Цикл

МассивДоступныхТипов.Добавить(ЭлементТипа);

КонецЦикла;

// На основании массива доступных типов формируем список значений для поля ввода в колонке, отображающей тип.
// Значением является индекс типа в массиве доступных типов, а представлением - представление типа
Для ИндексЭлемента = 0 по МассивДоступныхТипов.Количество() - 1 Цикл

ЭлементыФормы.Список.Колонки.Тип.ЭлементУправления.СписокВыбора.Добавить(ИндексЭ
лемента, МассивДоступныхТипов[ИндексЭлемента]);

КонецЦикла;

// В таблицу значений (Список) добавляем колонку для хранения значения выбранного типа.
Список.Колонки.Добавить("Значение");


В обработчике события ПриИзменении элемента управления, расположенного в колонке Тип делается установка выбранного типа в элемент управления (в нашем случае это поле ввода) в колонке Значение.



Процедура СписокТипПриИзменении(Элемент)

// Устанавливаем выбранный тип в поле ввода в колонке "Значение"
МассивТипов = Новый Массив;
МассивТипов.Добавить(МассивДоступныхТипов[Элемент.Значение]);
ЭлементыФормы.Список.Колонки.Значение.ЭлементУправления.ТипЗначения = Новый ОписаниеТипов(МассивТипов);

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


При выборе значения в колонке Значение полученное значение необходимо сохранить в таблице значений, т.к. данная колонка не связана с данными. Для этого также используется обработчик события ПриИзменении поля ввода, расположенного в колонке Значение табличного поля.



Процедура СписокЗначениеПриИзменении(Элемент)

// Сохраняем выбранное значение в таблице значений
ЭлементыФормы.Список.ТекущиеДанные.Значение = Элемент.Значение;

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


Наконец для того, чтобы выбранные значения корректно отображались в табличном поле необходимо использовать обработчик события ПриВыводеСтроки, в котором текст для выбранного типа и значения.



Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

ОформлениеСтроки.Ячейки.Тип.УстановитьТекст(МассивДоступныхТипов[ДанныеСтроки.Ти
п]);
ОформлениеСтроки.Ячейки.Значение.УстановитьТекст(ДанныеСтроки.Значение);

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

Спасибо сказали: DiegoLidabo,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 30.04.24, 13:22
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!