УФ.
нужно задавать вопрос перед удалением строки в таблице формы.

```1c
    &НаКлиенте
    Процедура ДанныеОВремениПередУдалением(Элемент, Отказ)

    Отказ = Истина;

    Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект, Элемент);

    ПоказатьВопрос(Оповещение, "Удалить строку?",
    РежимДиалогаВопрос.ДаНетОтмена,
    0,
    КодВозвратаДиалога.Да);

    КонецПроцедуры
```

затем ловлю ответ в

```1c
    Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт / тут в параметрах эта текущая строка

    Если Результат = КодВозвратаДиалога.Да Тогда

    а как удалить ее не пойму? именно на клиенте. ведь в объект еще может не быть

    Иначе

    КонецЕсли;

    КонецПроцедуры
```
---
в Оповещении нужно передать Параметры, содержащие данные о строке. Ваша таблица это табличная часть Объекта? Если да, то удаляйте так:

```1c
    Объект.Таблица.Удалить(Параметры.УдаляемаяСтрока);
```

как то так.
---
а как удалить ее не пойму? именно на клиенте. ведь в объект еще может не быть
чушь
---
ок. как удалить без чуши?
---
в Оповещении нужно передать Параметры, содержащие данные о строке. Ваша таблица это табличная часть Объекта? Если да, то удаляйте так:

```1c
    Объект.Таблица.Удалить(Параметры.УдаляемаяСтрока);
```

как то так.
---
Объект.Таблица.Удалить(Параметры.УдаляемаяСтрока)

Пример кода, который очищает текущую выбранную строку из ТаблицыФормы, связанной с табличной частью объекта:

```1c
    &НаКлиенте
    Процедура ОчиститьКартинку(Команда)
    ТекущаяСтрока = Элементы.КоллекцияИзображений.ТекущаяСтрока;
    Если ТекущаяСтрока <> Неопределено Тогда
    Объект.КоллекцияИзображений.Удалить(Объект.КоллекцияИзображений.НайтиПоИдентификатору(ТекущаяСтрока));
    КонецЕсли;
    КонецПроцедуры
```
---
```1c
    &НаКлиенте
    Процедура ДанныеОВремениПередУдалением(Элемент, Отказ)

    Отказ = Истина;
    Элемент = Элемент.ТекущаяСтрока;
    Параметр = Новый Структура("Элемент", Элемент);
    Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект, Параметр);

    ПоказатьВопрос(Оповещение, "Удалить строку?",
    РежимДиалогаВопрос.ДаНетОтмена,
    0,
    КодВозвратаДиалога.Да);

    КонецПроцедуры

    &НаКлиенте
    Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда
    Объект.Перечень.Удалить(Параметры.Элемент);
    КонецЕсли;

    КонецПроцедуры
```
---
1) Передать в оповещение не сам элемент а идентификатор удаляемой строки:

```1c
    .....
    ТекущиеДанные = Элементы.ЗдесьИмяТаблицыНаФорме.ТекущиеДанные;
    ИдентификаторТекущейСтроки = ТекущиеДанные .ПолучитьИдентификатор();
    Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект, Новый Структура("ИдентификаторТекущейСтроки", ИдентификаторТекущейСтроки));
    ....
```

2) Затем в обработке оповещения

```1c
    ......
    Если Результат = КодВозвратаДиалога.Да Тогда
    НайденнаяСтрокаТаблицы = Объект.Таблица.НайтиПоИдентификатору(Параметры.ИдентификаторТекущейСтроки);
    Объект.Таблица.Удалить(НайденнаяСтрокаТаблицы );
    Иначе

    КонецЕсли;
    ......
```
---
Схожая проблема. Делаю канбан. Нужно удалить строку ТаблицаФормы (переместить в другую таблицу). Одна строка удаляется нормально, при попытке удалить вторую строку получаю ошибку - Значение индекса выходит за границы диапазона. Удаляю при событии ОкончаниеПеретаскивания.
Элемент - ТаблицаФормы
Элемент.Имя совпадает с реквизитом-источником.
Думал, Элемент.Обновить будет и индексы обновлять в таблице, но нет. У второй строки остается индекс 2 даже если это последняя строка таблицы. Как нужно правильно перемещать строки из таблиц перетаскиванием?

```1c
    &НаКлиенте
    Процедура СтатусОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    УдалитьСтрокуТаблицы(Элемент.Имя, Элемент.ТекущаяСтрока);
    Элемент.Обновить();
    КонецПроцедуры

    &НаСервере
    Процедура УдалитьСтрокуТаблицы(ИмяРеквизита, НомерСтроки)
    Таблица = РеквизитФормыВЗначение(ИмяРеквизита);
    Таблица.Удалить(НомерСтроки);
    ЗначениеВРеквизитФормы(Таблица, ИмяРеквизита);
    КонецПроцедуры
```
---
Окей ТекущаяСтрока это идентификатор, а не индекс....мне бы получить индекс или возможность удалять по идентификатору а не по индексу
---
Элементарно - найти строку по идентификатору и удалить ее.

```1c
    &НаКлиенте
    Процедура СтатусОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    УдалитьСтрокуТаблицы(Элемент.Имя, Элемент.ТекущаяСтрока);
    КонецПроцедуры

    &НаСервере
    Процедура УдалитьСтрокуТаблицы(ИмяРеквизита, ИдСтроки)
    СтрокаТаблицы = ЭтотОбъект[ИмяРеквизита].НайтиПоИдентификатору(ИдСтроки);
    ЭтотОбъект[ИмяРеквизита].Удалить(СтрокаТаблицы );
    КонецПроцедуры
```
---
А зачем серверный вызов?
---
Скопировал исходный код и не правил это. Но да, вы правы, можно на клиенте.
---
Большое Спасибо! Вроде смотрел СП, но не мог найти нужные мне методы.

Если кому нужно:

```1c
    &НаКлиенте
    Процедура СтатусОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
    УдалитьСтрокуТаблицы(Элемент.Имя, Элемент.ТекущаяСтрока);
    КонецПроцедуры

    &НаКлиенте
    Процедура УдалитьСтрокуТаблицы(ИмяРеквизита, НомерСтроки)
    СтрокаТаблицы = ЭтотОбъект[ИмяРеквизита].НайтиПоИдентификатору(НомерСтроки);
    ЭтотОбъект[ИмяРеквизита].Удалить(СтрокаТаблицы);
    КонецПроцедуры
```