Задача такая:
Есть динамически заполняемая таблица значений, надо ее отображать на форме.
В поисках решения пришлось покопаться сети, но тоже нормального решения не нашел, или плохо искал, все как то узко, и трудно, решил сам реализовать.
Решение это Процедура, которую надо создать у себя в модуле формы и передавать параметры, и будет вам счастье)
Вот собственно сама процедура:
//*********************************
Процедура СоздатьТаблицуФормы(Знач ИмяПоляТаблицыФормы, Знач ИмяРеквизитаДанныеФормыКоллекция, Знач ТаблицаЗначений)
// Если руками не создали эелемент формы Таблица, то создается программно
Если Элементы.Найти(ИмяПоляТаблицыФормы) = Неопределено Тогда
ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы, Тип(«ТаблицаФормы»),);
ЭлементРеквизита.ПутьКДанным = ИмяРеквизитаДанныеФормыКоллекция;
КонецЕсли;
УдаляемыеРеквизиты = Новый Массив;
РеквизитыДляУдаления = ПолучитьРеквизиты(ИмяРеквизитаДанныеФормыКоллекция);
Для Каждого РеквизитУдаления Из РеквизитыДляУдаления Цикл
УдаляемыеРеквизиты.Добавить(ИмяРеквизитаДанныеФормыКоллекция+».»+РеквизитУдаления.Имя);
// Удаляем элементы формы
Элементы.Удалить(Элементы[ИмяПоляТаблицыФормы+РеквизитУдаления.Имя]);
КонецЦикла;
// Добавление реквизитов в таблицу формы
ДобавляемыеРеквизиты = Новый Массив;
Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, ИмяРеквизитаДанныеФормыКоллекция, Колонка.Заголовок));
КонецЦикла;
ИзменитьРеквизиты(ДобавляемыеРеквизиты,УдаляемыеРеквизиты);
// Добавление элементов форму
Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы + Колонка.Имя, Тип(«ПолеФормы»), Элементы[ИмяПоляТаблицыФормы]);
ЭлементРеквизита.ПутьКДанным = ИмяРеквизитаДанныеФормыКоллекция + «.» + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
КонецЦикла;
ЗначениеВРеквизитФормы(ТаблицаЗначений, ИмяРеквизитаДанныеФормыКоллекция);
КонецПроцедуры
//*********************************
Описание передаваемых параметров:
1) ИмяПоляТаблицыФормы — Имя элемента на форме Таблица, или существующего или который надо создать, не важно. (Пример как у меня «ТаблицаФормы»)
2) ИмяРеквизитаДанныеФормыКоллекция — Имя реквизита формы, его надо создать, пример настройки на картинке (имя должно отличаться от имени элемента формы, желательно) (Пример как у меня «Таблица»)
3) ТаблицаЗначений — Собственно сама таблица с данными из-за которой все это и делалось.)
Ну вот и все. На 1С8.1 это выгляделобы так:
ИмяРеквизитаДанныеФормыКоллекция = ТаблицаЗначени;
ЭлементыФормы.ИмяПоляТаблицыФормы.СоздатьКолонки();




Несколько полезных для начинающего статей
Управляемая форма 1С 8.2 – работа с деревом значений и таблицей значений.
(0) Код статьи можно раскрасить (с)
Несколько полезных для начинающего статей
Управляемая форма 1С 8.2 – работа с деревом значений и таблицей значений.
Видел эту статью, не могу сказать что она как то мне помогла… тк нужно было самое просто решение и универсальное.
На счет раскраски, спасибо, как нибудь попробую… Это хорошо бы к разработчикам сайта, чтоб добавили функцию при редактировании: «вставить элемент кода», что б проще было публикации писать.
.Колонки.Добавить() — не то?
.Колонки.Добавить() — не то? — Причем здесь это? Ты не понял похоже проблемы.
В 8.1 у табличного поля была функция СоздатьКолонки():
«ТабличноеПоле (TableBox)
СоздатьКолонки (CreateColumns)
Синтаксис:
СоздатьКолонки()
Описание:
Удаляет старые колонки и загружает новые колонки из источника данных.» Вот ее нету в 8.2, тоесть приходится самому создавать реквизиты и элементы. Процедура моя в помощь.
Про существование книги «Разработка управляемого интерфейса (В. А. Ажеронок, А. В. Островерх, М. Г. Радченко, Е. Ю. Хрусталева)» я знаю, но думаю что у процента 90% ее нету, как и у меня.
…
Молодец, что не поленился и выложил статью. Недавно похожие проблемы были. Так же где-то нашел такое же описание
И очень был этому рад:)
И кстати всплыла одна проблема с которой так и не смог справиться. После команды ИзменитьРеквизиты() (при условии добавления реквизитов) волшебным образом изменяется форма — едут размеры объектов на форме. наверное это не доработка 1С
спасибо.пригодится
В случае, если некая таблица должна находиться на какой-то конкретной странице, то тогда:
ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы, Тип(«ТаблицаФормы»), Родитель);
и т д.
в той обработке, что сейчас пишу именно так. Много страниц, много вкладок …
10й раз перечитываю…
все равно непонятно как удалять
создать не проблема, и назначить обработчик события не проблема. как удалить — проблема.
Удалить элементы формы?
(11) в целом разобрался сам.
по синтаксис.помощнику внимательно — удаляться могут только программно добавленные элементы/реквизиты формы
//Добавление Реквизита ФОРМЫ МассивТипов = Новый Массив; МассивТипов.Добавить(Тип(«СправочникСсылка.ДеревоВопросов»)); МассивРеквизитов = Новый Массив; МассивРеквизитов.Добавить(Новый РеквизитФормы(Имя, Новый ОписаниеТипов(МассивТипов),»»)); //Обязательное обновление формы ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов); //Добавление Элементы формы со связкой созданного реквизита и даже с назначением обработчика действия нЭлемент = Элементы.Добавить(Имя , Тип(«ПолеФормы»),Элементы.Тематика); нЭлемент.Вид = ВидПоляФормы.ПолеВвода; нЭлемент.ПутьКДанным = Имя; нЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; нЭлемент.КнопкаОчистки = Истина; нЭлемент.КнопкаСпискаВыбора = Истина; нЭлемент.БыстрыйВыбор = Истина; нЭлемент.КнопкаВыбора = Ложь; нЭлемент.КнопкаОткрытия = Ложь; нЭлемент.УстановитьДействие(«ПриИзменении»,»ТематикаОбращенияПриИзменении»);Показать
и после можно удалять такие элементы
внимание! используется таже процедура формы, просто будем передавать второй параметр с массивом ПУТЕЙ удаляемых реквизитов.
собственно у меня и была загвостка с этими ПУТЯМИ
обратите внимание, что при добавление в качестве ПУТИ (3й параметр) я передаю пустую строку
в итоге я в массив удаляемых реквизитов передаю ИМЕНА ранее программно добавленых реквизитов
Лучшая статья по данной теме. 4 года как опубликовано и только что ее нашел.
Все заработало в 5 сек. Автору респект.
Давно не занимался по стечению обстоятельств управляемыми формами. Вот столкнулся с такой же проблемой. Привык использовать процедуру «СоздатьКолонки()». Спасибо за процедуру «СоздатьТаблицуФормы».
Я делаю так:
1. создаю таблицу «ТЗ»;
2. создаю процедуру
Переписал свою обработку с использованием данной процедуры: выводит форму списка выбранного спраочника и позволяет изменить буквы в наименовании и полном наименовании.
При повторном открытии (формировании таблицы) ругается… При выборе другого справочника тоже ругается…
Не все колонки может удалить и не все колонки может пересоздать.
Как написать, чтобы при необходимости повторно вывести очищался весь реквизит Таблица?
Файл прилагаю.
Статья хороша, спасибо!
Но вот столкнулся с такой проблемой: у меня есть реквизит с типом значения булево. Никак не могу получить для данного реквизита поле флажок. В последнем цикле // Добавление элементов форму // для данного реквизита дописал условие
Показать
Но 1ска всё-равно реквизит в таблице отображает как ПолеВвода…
(9)
(9)
(16) Да, это я не учет, но быстро получилось реализовать.
При создании таблицы значений, надо обязательно описать тип:
и в коде когда создаем уже сами элементы формы я сделал проверку на описание типа:
Показать
Или так: