Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 июл 2022, 12:13

Создать элемент на форме

Автор magnifico61, 29 сен 2017, 16:19

0 Пользователей и 1 гость просматривают эту тему.

magnifico61

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

Элемент = ЭтаФорма.Элементы.Добавить("Страница"+ном, Тип("Страница"), ЭтаФорма.Элементы.ГруппаСтраницы);
      Элемент.Вид = ВидГруппыФормы.Страница;

LexaK

вот рабочий код по добавлению страницы, но затем на нее надо добавить какие-то друкие элементы с данными, а то похоже пустые страницы в УФ не отображаются

//====================== настройка закладок ======================
лкНоваяСтраница = Элементы.Добавить(лкЗакладкаТЧ, Тип("группаформы"),Элементы.ГруппаСтраницы);
лкНоваяСтраница.Заголовок = лкИмяТаблицы;
лкНоваяСтраница.Картинка = БиблиотекаКартинок.ПланСчетов;
...            

(взято из обработки: ФормаАдминистратора, которая может открывать любой объект, со всеми реквизитами)
если помогло нажмите: Спасибо!

magnifico61


//Добавляем поле ввода
      лСтраница = Элементы.Добавить(Строка.Определение.НаименованиеПолное, Тип("ГруппаФормы"), ЭтаФорма.Элементы.ГруппаСтраницы);
      лСтраница.Вид = ВидГруппыФормы.Страница;
лСтраница.Заголовок = Строка.Определение.Определение.НаименованиеПолное;
лСтраница.Видимость = Истина;

СписокЭлементов = ПолучитьЭлементыОпределения(Строка.Определение);

Для Каждого СтрокаЭлемент Из СписокЭлементов Цикл
лЭлемент = Элементы.Добавить("" + СтрокаЭлемент.ЭлементТаксономии.НаименованиеПолное + Ном, Тип("ПолеФормы"), лСтраница);
лЭлемент.Вид = ВидПоляФормы.ПолеВвода;
лЭлемент.Заголовок = СтрокаЭлемент.Наименование;
лЭлемент.Видимость = Истина;
Ном = Ном + 1;
КонецЦикла;


Страницы создаются на форме, а вот поля не создаются, что не так в их создании?

LexaK

у меня на новую страницу добавляется ТЧ, у вас поле ввода
в любом случае надо указывать Путь к данным,

отделоные поля, наверно лучше добавлять как строчки ТЗ

опять же как из примера Формы администратора
на первой закладке отображаются все реквизиты документа в ТЗ
на последующих закладках распологаются все ТЧ документа одна ТЧ на одной закладке
если помогло нажмите: Спасибо!

magnifico61

Спасибо с этим разобрался.
Теперь стоит другая проблема. Так как форма динамическая и реквизиты и вкладки меняются на форме в зависимости от выбранного значения. Поэтому как удалить созданные реквизиты, элементы и страницы, чтобы создать другие. Так как имена могу совпадать и сейчас вылетает ошибка.

vitasw

Вариантов2
- или хранить список создаваемых реквизитов
- или перед созданием каждого реквизита проверять наличие его (геморойнее уитывая то что располагаться на форме он может не там где вам хочется).
А вообще... огласите все задачу, может вы не тем путем пошли... например попробовать изначально в конфигураторе создать все страницы, а при открытии играться только с видимостью...

Oldman06

Я когда-то делал так:
Процедура СобратьМассивПодключаемыхЭлементовФормы(РодительскийЭлемент, МассивПодключаемых)
Для Каждого Эл Из РодительскийЭлемент Цикл
Если Лев(Эл.Имя, 13) <> "Подключаемый_" Тогда
Продолжить;

КонецЕсли;

Если ТипЗнч(Эл) = Тип("ГруппаФормы") Тогда
СобратьМассивПодключаемыхЭлементовФормы(Эл.ПодчиненныеЭлементы, МассивПодключаемых);

КонецЕсли;

МассивПодключаемых.Добавить(Эл);

КонецЦикла;

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

Процедура УдалитьПодключаемыеРеквизитыФормы(Форма, СписокРеквизитов) Экспорт
МассивПодключаемых = Новый Массив;
Попытка // удаляем подключаемые элементы формы
СобратьМассивПодключаемыхЭлементовФормы(Форма.Элементы.ОбластьРазмещенияДинамическихДанныхЗаписи.ПодчиненныеЭлементы, МассивПодключаемых);
Для Каждого ТекущийЭлемент Из МассивПодключаемых Цикл
Форма.Элементы.Удалить(ТекущийЭлемент);

КонецЦикла;

Исключение
ВызватьИсключение ИнформацияОбОшибке().Описание;

КонецПопытки;

Попытка // удаляем подключаемые команды и пункты меню печати
Пока Форма.Элементы.ГруппаПечатиПодключаемыхФорм.ПодчиненныеЭлементы.Количество() > 0 Цикл
ТекЭлементМеню = Форма.Элементы.ГруппаПечатиПодключаемыхФорм.ПодчиненныеЭлементы[0];
Форма.Команды.Удалить(Форма.Команды.Найти(ТекЭлементМеню.Имя));
Форма.Элементы.Удалить(ТекЭлементМеню);

КонецЦикла;

Исключение
ВызватьИсключение ИнформацияОбОшибке().Описание;

КонецПопытки;

Если СписокРеквизитов.Количество() > 0 Тогда
МассивУдаляемыхРеквизитов = Новый Массив;
Для Каждого ОписаниеТекущегоРеквизита Из СписокРеквизитов Цикл
МассивУдаляемыхРеквизитов.Добавить(ОписаниеТекущегоРеквизита.Значение.НаименованиеРеквизита);

КонецЦикла;

СписокРеквизитов.Очистить();

Попытка // удаляем подключаемые реквизиты формы
Форма.ИзменитьРеквизиты(, МассивУдаляемыхРеквизитов);

Исключение
ВызватьИсключение ИнформацияОбОшибке().Описание;

КонецПопытки;

КонецЕсли;

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


Но лучше, действительно, создать все в конфигураторе и играться видимостью.

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск