Очистка Динамически созданной ТЗ

1. user645801_yyyuuu123q 06.09.18 10:51 Сейчас в теме
Здравствуйте. На таблице динамически создаю ТЗ

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


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


Визуально все очищенно. Но при загрузки нового файла выдает ошибку

{ВнешняяОбработка.ЗагрузкаВITIL.Форма.Форма.Форма(196)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(Реквизиты);
по причине:
Неуникальное имя реквизита. Имя: "ТаблицаНаФорме"
По теме из базы знаний
Найденные решения
6. Boneman 298 07.09.18 09:07 Сейчас в теме
(4)
Разве это не оно?

Реквизиты формы и элементы формы - это немного разные вещи.

Ты удалил элемент но не удалил реквизит.

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


далее ты создаешь элементы формы, и связываешь их с созданными реквизитами.


потом удаление
    Реквизиты = Новый Массив;
    Для Каждого Колонка ИЗ Таблица.Колонки Цикл
        //
        Реквизиты.Добавить("ТаблицаНаФорме." + Колонка.Имя); //Добавляешь реквизиты, колонки
        //
    КонецЦикла;
    // 
.....ИВСЕ ! А где реквизит ТаблицаНаФорме ?
    ИзменитьРеквизиты( ,Реквизиты);
Показать


В итоге таблица на форме, у тебя остался.
А ты пытаешься по новой его создать..естественно ошибка
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 06.09.18 11:32 Сейчас в теме
(1) ты удаляешь только реквизиты колонок таблицы на форме, но сама таблица на форме остается.
Ее тоже надо удалить.
4. user645801_yyyuuu123q 07.09.18 02:05 Сейчас в теме
(2) Разве это не оно?
Если ЭлементТаблица <> Неопределено Тогда
		//
		Элементы.Удалить(ЭлементТаблица);
		//
	КонецЕсли;
6. Boneman 298 07.09.18 09:07 Сейчас в теме
(4)
Разве это не оно?

Реквизиты формы и элементы формы - это немного разные вещи.

Ты удалил элемент но не удалил реквизит.

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


далее ты создаешь элементы формы, и связываешь их с созданными реквизитами.


потом удаление
    Реквизиты = Новый Массив;
    Для Каждого Колонка ИЗ Таблица.Колонки Цикл
        //
        Реквизиты.Добавить("ТаблицаНаФорме." + Колонка.Имя); //Добавляешь реквизиты, колонки
        //
    КонецЦикла;
    // 
.....ИВСЕ ! А где реквизит ТаблицаНаФорме ?
    ИзменитьРеквизиты( ,Реквизиты);
Показать


В итоге таблица на форме, у тебя остался.
А ты пытаешься по новой его создать..естественно ошибка
7. user645801_yyyuuu123q 07.09.18 09:34 Сейчас в теме
(6)
Извините пожалуйста немного не понял, ошибка при создании или при очистки?
3. Doreng 27 06.09.18 11:44 Сейчас в теме
(1)
Если ЭлементТаблица <> "ТаблицаНаФорме" Тогда
//
Элементы.Удалить(ЭлементТаблица);
//
КонецЕсли;


Если ЭлементТаблица <> Неопределено Тогда
        //
        Элементы.Удалить(ЭлементТаблица);
        //
    КонецЕсли;

Может так?
user645801_yyyuuu123q; +1 Ответить
5. user645801_yyyuuu123q 07.09.18 05:14 Сейчас в теме
После очистки выглядит так, но ошибка все ровно
{ВнешняяОбработка.ЗагрузкаВITIL.Форма.Форма.Форма(196)}: Ошибка при вызове метода контекста (ИзменитьРеквизиты)
ИзменитьРеквизиты(Реквизиты);
по причине:
Неуникальное имя реквизита. Имя: "ТаблицаНаФорме"
Прикрепленные файлы:
8. user645801_yyyuuu123q 07.09.18 09:48 Сейчас в теме
	Рекв = Новый Массив;
	Рекв.Добавить("ТаблицаНаФорме");
	ИзменитьРеквизиты(,Рекв);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот