Имя: Пароль:
1C
1С v8
Как удалить выбранные строки из таблицы (Управляемая форма)
0 Mista444
 
28.03.16
07:59
Как удалить выбранные строки из таблицы (Управляемая форма)?

Процедура УдалитьФайл(Команда)
         ВыделенныеСтроки = Элементы.ФайловаяТаблица.ВыделенныеСтроки;
        Для Каждого ВыделеннаяСтрока ИЗ ВыделенныеСтроки Цикл
        Элементы.ФайловаяТаблица.Удалить(ВыделеннаяСтрока);
КонецПроцедуры
1 Fedor-1971
 
28.03.16
08:48
(0) Так в чём вопрос то?
2 Fedor-1971
 
28.03.16
08:49
ФайловаяТаблица - это реквизит формы или объекта?
3 Остап Сулейманович
 
28.03.16
08:49
(1) Нет КонецЦикла;
4 Mankubus
 
28.03.16
08:49
>>Элементы.ФайловаяТаблица.Удалить(ВыделеннаяСтрока);

Удаляй не из элемента, а из данных с которым он связан
5 Mista444
 
28.03.16
08:50
(4) Через "Объект"?
(2) объекта.
6 Fedor-1971
 
28.03.16
08:51
(3) скорее всего, ТС его просто не скопировал.
(5) Объект.ФайловаяТаблица.Удалить(ВыделеннаяСтрока);
7 Mista444
 
28.03.16
08:56
(6) так не получается(ничего не происходит).
Добавляю следующим образом:
Процедура ВыбратьФалйы(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл";
    Диалог.ПолноеИмяФайла = "";  
    Диалог.МножественныйВыбор = Истина;
    Если Диалог.Выбрать() Тогда

        Сообщить(Диалог.ПолноеИмяФайла);
    КонецЕсли;
    Таблица =  Объект.ФайловаяТаблица;
    ПараметрыОтбора=Новый Структура;
    Для каждого Файл из Диалог.ВыбранныеФайлы Цикл
        ПараметрыОтбора.Вставить("ПутьКФайлу",Файл);
        МассивСтрок= Таблица.НайтиСтроки(ПараметрыОтбора);
        если МассивСтрок.Количество() = 0
            Тогда
        Строка = Таблица.Добавить();
        Строка.ПутьКФайлу=Файл;
    КонецЕсли;
    ПараметрыОтбора.Очистить();
        КонецЦикла;
КонецПроцедуры
8 ЧеловекДуши
 
28.03.16
09:03
(0) На сервере выполняешь код

ТЗ = ТвойТаблица.Выгрузить();

//Затем удаляешь все что лишнее.
//Работаешь с ТЗ, как с Таблицей значения

//Помещаешь все обратно.
ЗначениеВРеквизитФормы(ТЗ,"Объект");

И вуаля, ТЗ отредактирована :)
9 ЧеловекДуши
 
28.03.16
09:03
(7) Ты сервер и Клиент не путай :)
10 Mista444
 
28.03.16
09:06
(9) а то, что я добавляю оно же записывается на сервере или нет?
11 zak555
 
28.03.16
09:08
(8) на клиенте нельзя ?
12 Mista444
 
28.03.16
09:09
Просто в ИТС написано : ДокументОбъект.Товары.Удалить(ЭлементыФормы.Товары.ТекущаяСтрока);
13 Fedor-1971
 
28.03.16
09:24
(12) ты прочитай полностью и обрати внимание к чему оно относится. в УФ ДокументОбъект - живёт только на сервере и на клиента может приехать только в виде формы.

Если тебе нужно удалить строку из ТЧ то используй Объект.ТЧ.Удалить(..), если нужно удалять из ТаблицыЗначений - реквизита формы, то ТЗ.Удалить(..).
По сути без разницы НаКлиенте или НаСервере будешь удалять строку, но при удалении  НаКлиенте, при большой таблице, запустишь большой поток обмена с сервером (таблицу сначала нужно притащить на клиента, найти строку, удалить её и вернуть всю таблицу на сервер).
Тебе больше известно про твою задачу, вот и реши сам где тебе удобней удалять строку.
14 Fedor-1971
 
28.03.16
09:27
(10) оно заносится в структуры формы и отправляется на сервер, но в саму БД до записи объекта не попадает
15 Mista444
 
28.03.16
09:29
(13) ааа, забыл принудительно указать &НаКлиенте. Забываю, что по умолчанию на сервере выполняется. Спасибо вам!
16 ЧеловекДуши
 
28.03.16
09:50
(11) Можно, а оно надо? :)
17 zak555
 
28.03.16
09:54
(16) правильнее удалить на клиенте
18 ЧеловекДуши
 
28.03.16
10:47
(17) Как знать. Среди 100 000 строк, использовать перебор в Цикле. Чет как то не очень :)
19 Mista444
 
28.03.16
11:51
Вообщем удалять получается, однако если еще раз вызвать функцию удаления она будет ругаться на индекс. Видимо при удалении данные сервера и клиента не синхронизируются. Как правильно это сделать? Какие директивы на какие функции повесить?
20 zak555
 
28.03.16
11:54
(18) для начала нужно понято, что под строками имеется ввиду

например
ТЧ дока -- удаляют на стороне клиента
при закрытии формы систмеа спрашивает -- сохрнаить ли данные изменения или нет
если сохранить, то она "форму с данными" передаёт на Сервер и там записывает в базу...
21 Mista444
 
28.03.16
12:00
(20) спасибо.
Написал следующее(вроде работает):
&НаКлиенте
Функция ВыборФайлов()
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл";
    Диалог.ПолноеИмяФайла = "";  
    Диалог.МножественныйВыбор = Истина;
        Если Диалог.Выбрать() Тогда
        Сообщить(Диалог.ПолноеИмяФайла);
    КонецЕсли;

    Возврат Диалог.ВыбранныеФайлы;
КонецФункции

&НаСервере
Процедура СохранитьВыбранныеФайлы(МассивФайлов)
    Таблица =  Объект.ФайловаяТаблица;
    ПараметрыОтбора=Новый Структура;
        Для каждого Файл из МассивФайлов Цикл
        ПараметрыОтбора.Вставить("ПутьКФайлу",Файл);
        МассивСтрок= Таблица.НайтиСтроки(ПараметрыОтбора);
        если МассивСтрок.Количество() = 0
            Тогда
        Строка = Таблица.Добавить();
        Строка.ПутьКФайлу=Файл;
            КонецЕсли;
    ПараметрыОтбора.Очистить();
    КонецЦикла;
    КонецПроцедуры
    
&НаКлиенте
Процедура ВыбратьФалйы(Команда)
    МассивФайлов = Новый Массив();
    МассивФайлов = ВыборФайлов();
    СохранитьВыбранныеФайлы(МассивФайлов);
    КонецПроцедуры
22 Mista444
 
28.03.16
12:02
&НаКлиенте
Процедура УдалитьФайл(Команда)
         ВыделенныеСтроки = Элементы.ФайловаяТаблица.ВыделенныеСтроки;
        Для Каждого ВыделеннаяСтрока ИЗ ВыделенныеСтроки Цикл
        Сообщить(ВыделенныеСтроки.Количество());
        //Объект.ФайловаяТаблица.Удалить(ВыделеннаяСтрока);
        //ДокументОбъект.Товары.Удалить(ЭлементыФормы.Товары.ТекущаяСтрока);
        Объект.ФайловаяТаблица.Удалить(ВыделеннаяСтрока);
        КонецЦикла;
КонецПроцедуры