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

1С:Предприятие :: 1С:Предприятие 8 общая

Просить подтверждение перед удалением строк табличной части

Просить подтверждение перед удалением строк табличной части
Я
   MistaEr
 
05.04.18 - 15:08
Как понимаю, настройками платформы это не сделать.
Пытаюсь программно

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

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

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

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

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

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

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

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

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

///////


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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует