Изменение данных табличного поля путем установки типа значения
Как мы уже говорили выше, путем установки типа значения элемента управления также можно изменять отображаемые данные, если данные используемого типа значения могут быть однозначно отображены в элементе управления. В следующем примере мы посмотрим, как можно изменять содержимое табличного поля, не используя реквизиты формы.
Нашей задачей будет создание в форме списка аналогичного механизма отображения движений документов "ОказаниеУслуги" в регистрах накопления.
Откроем конфигуратор и создадим основную форму списка документа "ОказаниеУслуги" с помощью конструктора. Расположим на ней переключатель из трех кнопок:
Зададим следующие выбираемые значения переключателей:
· | "ОстаткиМатериалов" – "Остатки", |
· | "СтоимостьМатериалов" – "Стоимость", |
· | "Продажи" – "Продажи". [520] |
Под переключателем расположим табличное поле с именем "ТабличноеПоле", типом ТаблицаЗначений и пустым свойством Данные:
Создадим процедуру обработки события "При открытии" формы и установим в ней начальное значение переключателя и начальное содержимое табличного поля:
Процедура ПриОткрытии()
ОстаткиМатериалов = "Остатки";
Массив = Новый Массив;
Массив.Добавить(Тип("РегистрНакопленияСписок.ОстаткиМатериалов"));
НашеОписание = Новый ОписаниеТипов(Массив);
ТабПоле = ЭлементыФормы.ТабличноеПоле;
ТабПоле.ТипЗначения = НашеОписание;
ТабПоле.СоздатьКолонки();
ТабПоле.Значение.Отбор.Регистратор.Установить(, Истина);
КонецПроцедуры
В этой процедуре, в зависимости от выбранного значения переключателя мы создаем объект ОписаниеТипов, содержащий нужный нам тип данных. Затем указываем этот объект в качестве значения свойства ТипДанных табличного поля. После создания колонок поля мы устанавливаем использование отбора по значению [521] регистратора, которое, по умолчанию, не определено. Это позволит нам избежать отображения в табличном поле полного списка регистра в момент открытия формы.
Затем создадим процедуру обработки события "ПриИзменении" переключателя, в которой, в зависимости от установленного значения переключателя, будем изменять свойство ТипЗначения табличного поля:
Если ОстаткиМатериалов = "Остатки" Тогда
НужныйТип = Тип("РегистрНакопленияСписок.ОстаткиМатериалов");
ИначеЕсли ОстаткиМатериалов = "Стоимость" Тогда
НужныйТип = Тип("РегистрНакопленияСписок.СтоимостьМатериалов");
ИначеЕсли ОстаткиМатериалов = "Продажи" Тогда
НужныйТип = Тип("РегистрНакопленияСписок.Продажи");
КонецЕсли;
Массив = Новый Массив();
Массив.Добавить(НужныйТип);
НашеОписание = Новый ОписаниеТипов(Массив);
ТабПоле = ЭлементыФормы.ТабличноеПоле;
ТабПоле.ТипЗначения = НашеОписание;
ТабПоле.СоздатьКолонки();
НашОтбор = ТабПоле.Значение.Отбор;
ЗначениеОтбора = ЭлементыФормы.ДокументСписок.ТекущаяСтрока;
НашОтбор.Регистратор.Установить(ЗначениеОтбора, Истина);
КонецПроцедуры
Теперь осталось только создать обработчик события "ПриАктивизацииСтроки" табличного поля "ДокументСписок":
НашОтбор = ЭлементыФормы.ТабличноеПоле.Значение.Отбор;
Если Элемент.ТекущиеДанные = Неопределено Тогда
НашОтбор.Регистратор.Установить(, Истина);
Иначе
НашОтбор.Регистратор.Установить(Элемент.ТекущаяСтрока, Истина);
КонецЕсли;
КонецПроцедуры
Запустите 1С:Предприятие и проверьте работу списка документа "ОказаниеУслуги". [523]