Имя: Пароль:
1C
1С v8
Просить подтверждение перед удалением строк табличной части
,
0 MistaEr
 
05.04.18
15:08
Как понимаю, настройками платформы это не сделать.
Пытаюсь программно

&НаКлиенте
Процедура ПередУдалениемСтрок(Элемент, Отказ)
    
    Если Элемент.ВыделенныеСтроки.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ТекстВопроса = НСтр("ru='Вы действительно хотите удалить выделенные строки из документа?'");
    ОписаниеОповещения = Новый ОписаниеОповещения("ПередУдалениемСтрокЗавершение", ЭтотОбъект, Отказ);
    ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    
КонецПроцедуры

&НаКлиенте
Процедура ПередУдалениемСтрокЗавершение(РезультатВопроса, Отказ) Экспорт
    Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Но строка удаляется уже в первой процедуре
1 okSYS
 
05.04.18
15:09
отКаз поставь в ложь сразу
2 MistaEr
 
05.04.18
15:30
&НаКлиенте
Процедура ПередУдалениемСтрокЗавершение(РезультатВопроса, Отказ) Экспорт
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        Отказ = Ложь;
    КонецЕсли;
КонецПроцедуры

Тогда не удаляет
3 okSYS
 
05.04.18
15:41
имел введу в истину отказ сразу)

&НаКлиенте
Процедура ПередУдалениемСтрок(Элемент, Отказ)
    

    Если Элемент.ВыделенныеСтроки.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Отказ = Истина;

    ТекстВопроса = НСтр("ru='Вы действительно хотите удалить выделенные строки из документа?'");
    ОписаниеОповещения = Новый ОписаниеОповещения("ПередУдалениемСтрокЗавершение", ЭтотОбъект, Отказ);
    ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    
КонецПроцедуры

Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
Отказ = Ложь;
КонецЕсли
4 Ненавижу 1С
 
гуру
05.04.18
15:41
(2) конечно не удалит, надо запомнить строки где-то
а в этой процедуре их удалить
5 MistaEr
 
05.04.18
15:43
&НаКлиенте
Процедура ПередУдалениемСтрокЗавершение(РезультатВопроса, Отказ) Экспорт
    
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        МассивВыделенныхСтрок = Элемент.ВыделенныеСтроки;
        СпВыделенныхСтрок = Новый СписокЗначений;
        СпВыделенныхСтрок.ЗагрузитьЗначения(МассивВыделенныхСтрок);
        СпВыделенныхСтрок.СортироватьПоЗначению(НаправлениеСортировки.Убыв);    
        
        Для Каждого Стр Из СпВыделенныхСтрок Цикл
            Объект[Элемент.Имя].Удалить(Стр.Значение);
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры
6 oslokot
 
05.04.18
15:43
Просто поставь Отказ=Истина в процедуре обработчика
7 MistaEr
 
05.04.18
15:51
&НаКлиенте
Процедура ПередУдалениемСтрок(Элемент, Отказ)
    Отказ = Истина;
    МассивВыделенныхСтрок = Элемент.ВыделенныеСтроки;
    Если Элемент.ВыделенныеСтроки.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ТекстВопроса = НСтр("ru='Вы действительно хотите удалить выделенные строки из документа?'");
    ОписаниеОповещения = Новый ОписаниеОповещения("ПередУдалениемСтрокЗавершение", ЭтотОбъект, Новый Структура("МассивВыделенныхСтрок, Элемент", МассивВыделенныхСтрок, Элемент));
    ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    
КонецПроцедуры

&НаКлиенте
Процедура ПередУдалениемСтрокЗавершение(РезультатВопроса, ДопПараметры) Экспорт
    
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        
        МассивВыделенныхСтрок = ДопПараметры.МассивВыделенныхСтрок;
        Элемент = ДопПараметры.Элемент;
        СпВыделенныхСтрок = Новый СписокЗначений;
        СпВыделенныхСтрок.ЗагрузитьЗначения(МассивВыделенныхСтрок);
        СпВыделенныхСтрок.СортироватьПоЗначению(НаправлениеСортировки.Убыв);    
        
        Для Каждого Стр Из СпВыделенныхСтрок Цикл
            Объект[Элемент.Имя].Удалить(Стр.Значение);
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

///////

Первый раз он так удаляет нормально. Но когда еще выделяешь несколько строк, он не учитывает что до этого уже были удалены строки
8 MistaEr
 
05.04.18
16:04
Нужно что то такое, типа, обновить форму. Но Элементы[Элемент.Имя].Обновить() читает форму из объекта БД и восстанавливает удаленные строки
9 DmitrO
 
05.04.18
16:16
(8)Нет, выделенные строки это вовсе не индексы строк. Это идентификаторы строк. Поэтому просто удалять надо вот так:
Для Каждого ИДСтроки Из ДопПараметры.МассивВыделенныхСтрок Цикл
    Объект[Элемент.Имя].Удалить(Объект[Элемент.Имя].НайтиПоИдентификатору(ИДСтроки));
КонецЦикла;
10 MistaEr
 
05.04.18
17:15
(9) Большое спасибо
Я сделал вот так
&НаКлиенте
Процедура ПередУдалениемСтрокЗавершение(РезультатВопроса, ДопПараметры) Экспорт
    
    Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
        
        МассивВыделенныхСтрок = ДопПараметры.МассивВыделенныхСтрок;
        Элемент = ДопПараметры.Элемент;
        
        Размер = МассивВыделенныхСтрок.Количество();
        Для а = 1 По Размер Цикл
            Объект[Элемент.Имя].Удалить(Объект[Элемент.Имя].НайтиПоИдентификатору(МассивВыделенныхСтрок[Размер-а]));
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры