|
Программное удаление таблицы с формы | ☑ | ||
---|---|---|---|---|
0
NIGHTHUNTER
05.08.21
✎
09:37
|
На форме, программно создаю таблицу. По нажатию на кнопку, с заполнением данных.
Хочу проверять существует ли она, что бы была возможность повторного нажатия на кнопку. Изначально этой таблицы не существует. Что нужно добавить в коде удаления, почему ошибка повторяется? // НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме"); Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда Элементы.Удалить(НайденнаяТаблицаНаФорме); КонецЕсли; // Неуникальное имя реквизита. Имя: "ТаблицаНаФорме" {ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(63)}: ИзменитьРеквизиты(Реквизиты); {ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(95)}: ПрочитатьФайлXLSНаСервере(); по причине: Неуникальное имя реквизита. Имя: "ТаблицаНаФорме" |
|||
1
ДенисЧ
05.08.21
✎
09:39
|
потому что ты удаляешь элемент формы, а не реквизит
|
|||
2
Адинэснег
05.08.21
✎
09:40
|
еще и кусок вытащил, не на который платформа ругнулась
|
|||
3
NIGHTHUNTER
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). Создание кнопки ПереборТаблицыНаФорме = ЭтаФорма.Команды.Добавить("ПереборТаблицыНаФорме"); ПереборТаблицыНаФорме.Действие = "ПереборТаблицыНаФорме"; // КнопкаПеребораТаблицыНаФорме = Элементы.Добавить("ПереборТаблицыНаФорме", Тип("КнопкаФормы"), ПрограммноСозданнаяГруппаДляТаблиц); КнопкаПеребораТаблицыНаФорме.Заголовок = "Перебор таблицы на форме"; КнопкаПеребораТаблицыНаФорме.ИмяКоманды = "ПереборТаблицыНаФорме"; КонецПроцедуры // |
|||
4
NIGHTHUNTER
05.08.21
✎
09:43
|
(1) Ну и как должно быть????
|
|||
5
acht
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 месяцев, пару лет и будет ЧСВшить на мисте в таких же ветках
|
|||
9
NIGHTHUNTER
05.08.21
✎
09:54
|
сейчас такая ошибка
// НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме"); Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда УдаляемыеРеквизиты = Новый Массив; УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы("ТаблицаНаФорме", Новый ОписаниеТипов("ТаблицаЗначений"))); Для каждого Ст Из Элементы.ТаблицаНаФорме.Колонки Цикл УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме")); КонецЦикла; ИзменитьРеквизиты(,УдаляемыеРеквизиты); КонецЕсли; // Поле объекта не обнаружено (Колонки) {ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(24)}: Для каждого Ст Из Элементы.ТаблицаНаФорме.Колонки Цикл {ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(100)}: ПрочитатьФайлXLSНаСервере(); |
|||
10
acht
05.08.21
✎
09:54
|
(8) Это ты только по одному его нику посчитал...
|
|||
11
ДенисЧ
05.08.21
✎
09:55
|
(9) Удалил, молодец. А добавлять - Барак будет?
|
|||
12
NIGHTHUNTER
05.08.21
✎
09:57
|
(11) Я пока не удалял. На этот код идет такая ошибка, -
// НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме"); Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда УдаляемыеРеквизиты = Новый Массив; УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы("ТаблицаНаФорме", Новый ОписаниеТипов("ТаблицаЗначений"))); Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме")); КонецЦикла; ИзменитьРеквизиты(,УдаляемыеРеквизиты); КонецЕсли; // Поле объекта не обнаружено (Колонки) {ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(24)}: Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл {ВнешняяОбработка.ЗаменаВБазеУУ.Форма.Форма.Форма(100)}: ПрочитатьФайлXLSНаСервере(); |
|||
13
Галахад
гуру
05.08.21
✎
09:57
|
Конструктора 1С на (0) кастую. Операции чтение из файлов и отображение надо изолировать...
|
|||
14
acht
05.08.21
✎
10:00
|
(12) > Я пока не удалял.
> ИзменитьРеквизиты(,УдаляемыеРеквизиты); Ну не трынди, Андрей. Неприлично уже. |
|||
15
NIGHTHUNTER
05.08.21
✎
10:03
|
пока ничего не получается, пробую всяко разно
// НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме"); Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда УдаляемыеРеквизиты = Новый Массив; УдаляемыеРеквизиты.Добавить("ПрограммноСозданнаяГруппаДляТаблиц"); УдаляемыеРеквизиты.Добавить("ТаблицаНаФорме"); //Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл // УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме")); //КонецЦикла; ИзменитьРеквизиты(,УдаляемыеРеквизиты); // Элементы.Удалить( Элементы["ТаблицаНаФорме"]); КонецЕсли; // |
|||
16
NIGHTHUNTER
05.08.21
✎
10:04
|
(14) до этого не доходит, там ошибка шла (12)
|
|||
17
NIGHTHUNTER
05.08.21
✎
10:08
|
как вот это программно удалить?
ПрограммноСозданнаяГруппаДляТаблиц = Элементы.Добавить("ПрограммноСозданнаяГруппаДляТаблиц", Тип("ГруппаФормы"), Элементы.ГруппаТаблицы); // Добавляет группу на форму |
|||
18
NIGHTHUNTER
05.08.21
✎
10:09
|
Сейчас удаляю таблицу вот так
НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме"); Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда УдаляемыеРеквизиты = Новый Массив; //УдаляемыеРеквизиты.Добавить("ПрограммноСозданнаяГруппаДляТаблиц"); УдаляемыеРеквизиты.Добавить("ТаблицаНаФорме"); //Для каждого Ст Из НайденнаяТаблицаНаФорме.Колонки Цикл // УдаляемыеРеквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "ТаблицаНаФорме")); //КонецЦикла; ИзменитьРеквизиты(,УдаляемыеРеквизиты); // //Элементы.Удалить( Элементы["ПрограммноСозданнаяГруппаДляТаблиц"]); Элементы.Удалить( Элементы["ТаблицаНаФорме"]); КонецЕсли; Как удалять программно созданную группу? |
|||
19
NIGHTHUNTER
05.08.21
✎
10:21
|
Вот так стало отрабатывать, все ли правильно?
// НайденнаяТаблицаНаФорме = Элементы.Найти("ТаблицаНаФорме"); Если Не НайденнаяТаблицаНаФорме = Неопределено Тогда УдаляемыеРеквизиты = Новый Массив; УдаляемыеРеквизиты.Добавить("ТаблицаНаФорме"); ИзменитьРеквизиты(,УдаляемыеРеквизиты); Элементы.Удалить( Элементы["ТаблицаНаФорме"]); // НайденнаяГруппа = Элементы.Найти("ПрограммноСозданнаяГруппаДляТаблиц"); Если НЕ НайденнаяГруппа = Неопределено Тогда Элементы.Удалить(НайденнаяГруппа); КонецЕсли; // НайденнаяКнопка = ЭтаФорма.Команды.Найти("ПереборТаблицыНаФорме"); Если НЕ НайденнаяКнопка = Неопределено Тогда ЭтаФорма.Команды.Удалить(НайденнаяКнопка); КонецЕсли; КонецЕсли; // |
|||
20
hhhh
05.08.21
✎
11:43
|
(19) вьобще-то удалять - это дебилизм. Просто убери видимость и всё.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |