Вход | Регистрация
 

Программное удаление таблицы с формы

Программное удаление таблицы с формы
Я
   NIGHTHUNTER
 
05.08.21 - 09:37
На форме, программно создаю таблицу. По нажатию на кнопку, с заполнением данных.
Хочу проверять существует ли она, что бы была возможность повторного нажатия на кнопку.

Изначально этой таблицы не существует.

Что нужно добавить в коде удаления, почему ошибка повторяется?

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


Неуникальное имя реквизита. Имя: "ТаблицаНаФорме"
{ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(63)}:    ИзменитьРеквизиты(Реквизиты);
{ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(95)}:    ПрочитатьФайлXLSНаСервере();

по причине:
Неуникальное имя реквизита. Имя: "ТаблицаНаФорме"
   ДенисЧ
 
1 - 05.08.21 - 09:39
потому что ты удаляешь элемент формы, а не реквизит
   Адинэснег
 
2 - 05.08.21 - 09:40
еще и кусок вытащил, не на который платформа ругнулась
   NIGHTHUNTER
 
3 - 05.08.21 - 09:43
(2)

&НаСервере
Процедура ПрочитатьФайлXLSНаСервере()
    //

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

    ТДсXLS = Новый ТабличныйДокумент;
    ТДсXLS.Прочитать(Объект.ВыборФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    //

    ТЗсТД = Новый ТаблицаЗначений;
    НомерСтроки  = 1;
    Пока НомерСтроки <= 1 Цикл 
        Сообщить(">>> Строка: " + НомерСтроки);
        НомерСтолбца = 1;
        Пока НомерСтолбца < ТДсXLS.ШиринаТаблицы + 1 Цикл
            Сообщить("      Столбец: " + НомерСтолбца);
            Сообщить(ТДсXLS.Область("R" + НомерСтроки + "C" + НомерСтолбца).Текст);
            ТЗсТД.Колонки.Добавить(ТДсXLS.Область("R" + НомерСтроки + "C" + НомерСтолбца).Текст);
            НомерСтолбца = НомерСтолбца + 1; 
        КонецЦикла;    
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    //

    НомерСтроки  = 2;
    Пока НомерСтроки < ТДсXLS.ВысотаТаблицы Цикл 
        Сообщить(">>> Строка: " + НомерСтроки);
        НоваяСтрокаТз = ТЗсТД.Добавить();
        НомерСтолбца = 1;
        Пока НомерСтолбца < ТДсXLS.ШиринаТаблицы + 1 Цикл
            Сообщить("      Столбец: " + НомерСтолбца);
            Сообщить(ТДсXLS.Область("R" + НомерСтроки + "C" + НомерСтолбца).Текст);
            НоваяСтрокаТз[ТЗсТД.Колонки[НомерСтолбца - 1].Имя] = ТДсXLS.Область("R" + НомерСтроки + "C" + НомерСтолбца).Текст;
            НомерСтолбца = НомерСтолбца + 1; 
        КонецЦикла;    
        НомерСтроки = НомерСтроки + 1;
    КонецЦикла;
    //

    // 2).

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

    ИзменитьРеквизиты(Реквизиты);
    // 4).

    // СОЗДАНИЕ ГРУППЫ НА ФОРМЕ -------------------------------------------->>

    ПрограммноСозданнаяГруппаДляТаблиц             = Элементы.Добавить("ПрограммноСозданнаяГруппаДляТаблиц", Тип("ГруппаФормы"), Элементы.ГруппаТаблицы);    // Добавляет группу на форму

    ПрограммноСозданнаяГруппаДляТаблиц.Заголовок   = "Программно созданная группа для таблиц";    
    ПрограммноСозданнаяГруппаДляТаблиц.Вид         = ВидГруппыФормы.ОбычнаяГруппа;
    ПрограммноСозданнаяГруппаДляТаблиц.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;  
    // << --------------------------------------------------------------------

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

    ЗначениеВРеквизитФормы(ТЗсТД, "ТаблицаНаФорме");
    // 6). Создание кнопки

    ПереборТаблицыНаФорме                      = ЭтаФорма.Команды.Добавить("ПереборТаблицыНаФорме");
    ПереборТаблицыНаФорме.Действие            = "ПереборТаблицыНаФорме";
    //

    КнопкаПеребораТаблицыНаФорме               = Элементы.Добавить("ПереборТаблицыНаФорме", Тип("КнопкаФормы"), ПрограммноСозданнаяГруппаДляТаблиц); 
    КнопкаПеребораТаблицыНаФорме.Заголовок  = "Перебор таблицы на форме";
    КнопкаПеребораТаблицыНаФорме.ИмяКоманды = "ПереборТаблицыНаФорме";
КонецПроцедуры
//
   NIGHTHUNTER
 
4 - 05.08.21 - 09:43
(1) Ну и как должно быть????
   acht
 
5 - 05.08.21 - 09:46
(4) Должно быть правильно, Андрей.
   ДенисЧ
 
6 - 05.08.21 - 09:46
(4) Удалять реквизит формы, а не только элемент формы.
Да! Это разные вещи...

ЗЫ. В ИзменитьРеквизиты() есть второй параметр...
   ДенисЧ
 
7 - 05.08.21 - 09:47
(4) Ты представь, что будет, если он начнёт писать правильно??
   Адинэснег
 
8 - 05.08.21 - 09:50
(7) главное упорный, 189 тем за 11 месяцев, пару лет и будет ЧСВшить на мисте в таких же ветках
   NIGHTHUNTER
 
9 - 05.08.21 - 09:54
сейчас такая ошибка

    //

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



Поле объекта не обнаружено (Колонки)
{ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(24)}:        Для каждого Ст Из Элементы.ТаблицаНаФорме.Колонки Цикл
{ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(100)}:    ПрочитатьФайлXLSНаСервере();
   acht
 
10 - 05.08.21 - 09:54
(8) Это ты только по одному его нику посчитал...
   ДенисЧ
 
11 - 05.08.21 - 09:55
(9) Удалил, молодец. А добавлять - Барак будет?
   NIGHTHUNTER
 
12 - 05.08.21 - 09:57
(11) Я пока не удалял. На этот код идет такая ошибка, -

    //

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



Поле объекта не обнаружено (Колонки)
{ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(24)}:        Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл
{ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(100)}:    ПрочитатьФайлXLSНаСервере();
   Галахад
 
13 - 05.08.21 - 09:57
Конструктора 1С на (0) кастую. Операции чтение из файлов и отображение надо изолировать...
   acht
 
14 - 05.08.21 - 10:00
(12) > Я пока не удалял.
> ИзменитьРеквизиты(,УдаляемыеРеквизиты);

Ну не трынди, Андрей. Неприлично уже.
   NIGHTHUNTER
 
15 - 05.08.21 - 10:03
пока ничего не получается, пробую всяко разно

    //

    НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме");
    Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда
        УдаляемыеРеквизиты = Новый Массив;
        УдаляемыеРеквизиты.Добавить("ПрограммноСозданнаяГруппаДляТаблиц");        
        УдаляемыеРеквизиты.Добавить("ТаблицаНаФорме");
        //Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл

        //    УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме"));                   

        //КонецЦикла;                      

        ИзменитьРеквизиты(,УдаляемыеРеквизиты);
        //

        Элементы.Удалить( Элементы["ТаблицаНаФорме"]);         
    КонецЕсли;
    //
   NIGHTHUNTER
 
16 - 05.08.21 - 10:04
(14) до этого не доходит, там ошибка шла (12)
   NIGHTHUNTER
 
17 - 05.08.21 - 10:08
как вот это программно удалить?
    ПрограммноСозданнаяГруппаДляТаблиц             = Элементы.Добавить("ПрограммноСозданнаяГруппаДляТаблиц", Тип("ГруппаФормы"), Элементы.ГруппаТаблицы);    // Добавляет группу на форму
   NIGHTHUNTER
 
18 - 05.08.21 - 10:09
Сейчас удаляю таблицу вот так

    НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме");
    Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда
        УдаляемыеРеквизиты = Новый Массив;
        //УдаляемыеРеквизиты.Добавить("ПрограммноСозданнаяГруппаДляТаблиц");        

        УдаляемыеРеквизиты.Добавить("ТаблицаНаФорме");
        //Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл

        //    УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме"));                   

        //КонецЦикла;                      

        ИзменитьРеквизиты(,УдаляемыеРеквизиты);
        //

        //Элементы.Удалить( Элементы["ПрограммноСозданнаяГруппаДляТаблиц"]);         

        Элементы.Удалить( Элементы["ТаблицаНаФорме"]);         
        
    КонецЕсли;


Как удалять программно созданную группу?
   NIGHTHUNTER
 
19 - 05.08.21 - 10:21
Вот так стало отрабатывать, все ли правильно?

    //

    НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме");
    Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда
        УдаляемыеРеквизиты = Новый Массив;
        УдаляемыеРеквизиты.Добавить("ТаблицаНаФорме");
        ИзменитьРеквизиты(,УдаляемыеРеквизиты);
        Элементы.Удалить( Элементы["ТаблицаНаФорме"]);         
        //

        НайденнаяГруппа = Элементы.Найти("ПрограммноСозданнаяГруппаДляТаблиц");
        Если НЕ НайденнаяГруппа = Неопределено Тогда
            Элементы.Удалить(НайденнаяГруппа);
        КонецЕсли;
        //

        НайденнаяКнопка = ЭтаФорма.Команды.Найти("ПереборТаблицыНаФорме");
        Если НЕ НайденнаяКнопка = Неопределено Тогда
            ЭтаФорма.Команды.Удалить(НайденнаяКнопка);
        КонецЕсли;
    КонецЕсли;
    //
   hhhh
 
20 - 05.08.21 - 11:43
(19) вьобще-то удалять - это дебилизм. Просто убери видимость и всё.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.