Перед удалением строки в таблице вызывается форма, в котором пользователь заполняет какие-то данные.Если пользователь нажимает кнопку "Ок", то данные записываются в регистр сведений.Например пользователь передумал удалять строку, нажимает на крестик на открываемой форме, но строка все равно удаляется.
Как сделать так, чтобы в таких ситуациях, то есть когда пользователь не нажал на кнопку "Ок", а просто закрыл форму, строка в таблице не удалялась?
---
На примере внешней обработки. Без оповещения. Обратите внимание, в форму "ФормаОбработкиУдаления" я добавил реквизит ДокументОбъект, чтобы можно было удалить строку ТЧ без обработки оповещения.
---
В ПередУдалениемСтроки указать СтандартнаяОбработка = Ложь;
И написать отдельный код на удаление строки, если открываемая форма вернёт Истина
---
дело в том, что я не понимаю как написать этот код.Можно пример?
---
Форма какая? Управляемая или обычная?
---
обычная форма
---
Тогда вообще нет проблем.

СтандартнаяОбработка = Ложь;
Результат = ОткрытьФормуМодально("указываешь форму");

Если Результат = Истина Тогда
    СтандартнаяОбработка = Истина;
КонецЕсли;

В самой форме при нажатии кнопки "ок" впиши код:
Закрыть(Истина);
---
Все равно также удаляет

```1c
    Процедура ТоварыПередУдалением(Элемент, Отказ)

    ПередУдалениемТовары(Элемент, Отказ);

    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор3 = Новый Структура;
    Отбор3.Вставить("Номенклатура",ТекущиеДанные.Номенклатура);
    МассивСтрок3=ПервоначальныеДанные.НайтиСтроки(Отбор3);

    СтандартнаяОбработка = Ложь;
    Результат = ОткрытьФормуМодально("РегистрСведений.ЛогРедактированияДокументов.Форма.РеализацияПриУдалении");

    Если Результат = Истина Тогда
    СтандартнаяОбработка = Истина;

    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    | РеализацияТоваровУслугТовары.Номенклатура,
    | СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Резерв,
    | СУММА(ЕСТЬNULL(ВложенныйЗапрос.КоличествоОстаток, 0)) КАК Остаток,
    | РеализацияТоваровУслугТовары.Количество,
    | РеализацияТоваровУслугТовары.Ссылка,
    | РеализацияТоваровУслугТовары.НомерСтроки
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, ) КАК ТоварыВРезервеНаСкладахОстатки
    | ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
    | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
    | ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
    |
    | СГРУППИРОВАТЬ ПО
    | ТоварыНаСкладахОстатки.Номенклатура,
    | ТоварыНаСкладахОстатки.КоличествоОстаток) КАК ВложенныйЗапрос
    | ПО РеализацияТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.Номенклатура
    |ГДЕ
    | РеализацияТоваровУслугТовары.Ссылка.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | РеализацияТоваровУслугТовары.Номенклатура,
    | РеализацияТоваровУслугТовары.Количество,
    | РеализацияТоваровУслугТовары.Ссылка,
    | РеализацияТоваровУслугТовары.НомерСтроки";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Выборка=Запрос.Выполнить().Выгрузить();
    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    ТекущаяСтрока=ЭлементыФормы.Товары.ТекущаяСтрока;

    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущаяСтрока.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор2 = Новый Структура;
    Отбор2.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок2=Выборка.НайтиСтроки(Отбор2);
    Для Каждого Стр Из ИзмененияКоличества Цикл
    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор2 = Новый Структура;
    Отбор2.Вставить("Номенклатура",ТекущиеДанные.Номенклатура);
    МассивСтрок2=Выборка.НайтиСтроки(Отбор2);

    НаборЗаписей = РегистрыСведений.ЛогРедактированияДокументов.СоздатьНаборЗаписей();
    НоваяЗапись = НаборЗаписей.Добавить();

    НоваяЗапись.Документ = Ссылка;
    НоваяЗапись.Товар = ТекущаяСтрока.Номенклатура;
    НоваяЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    НоваяЗапись.Резерв = МассивСтрок2[0].Резерв;
    НоваяЗапись.Остаток = МассивСтрок2[0].Остаток;
    НоваяЗапись.Было = МассивСтрок3[0].Количество;
    НоваяЗапись.Стало =0;
    НоваяЗапись.Период=ТекущаяДата();
    НоваяЗапись.ПричинаИзменения=Стр.ПричинаИзменения;

    КонецЦикла;
    НаборЗаписей.Записать(Ложь);
    КонецЕсли;

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

это код открываемой формы:

```1c
    Процедура ОКНажатие(Элемент)

    ПараметрыВыбора = Новый Структура;
    ПараметрыВыбора.Вставить("Период", ТекущаяДата());
    ПараметрыВыбора.Вставить("ПричинаИзменения", ПричинаИзменения);
    ПараметрыВыбора.Вставить("Комментарий", Комментарий);
    ПараметрыВыбора.Вставить("ИдентификаторСтроки", ЭтаФорма.КлючУникальности);
    ПараметрыВыбора.Вставить("НомерСтроки", НомерСтроки);
    ПараметрыВыбора.Вставить("Было", Было);
    ОповеститьОВыборе(ПараметрыВыбора);
    Закрыть(Истина);
    КонецПроцедуры
```
---
может вы не совсем поняли
---
и выдает такую ошибку:
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(2907)}: Значение не является значением объектного типа (Записать)
    НаборЗаписей.Записать(Ложь);
---
если закомментировать
НаборЗаписей.Записать(Ложь);
```1c
    НаборЗаписей.Записать(Ложь);
```
 все равно удаляет строку
---
Не используйте модальное открытие окон, пишите сразу красиво. В событии ПередУдалением пишите безусловный отказ (Отказ = Истина) и вызывайте форму "РеализацияПриУдалении", передав в неё информацию о том, какую строку хотел удалить пользователь (например в качестве уникального идентификатора можно передать саму строку табличной части).
Дальше есть 2 варианта: обрабатывать удаление строки в открываемой форме по нажатию кнопки "ОК" (в этом случае нужно еще будет передать ДокументОбъект) или ловить оповещение формы на форме документа и тогда удалять строку. Таким образом, если пользователь нажал на кнопку закрытия или "Esc", ничего не произойдет, потому что удаление строки ТЧ будет производиться программно только после нажатия кнопки "ОК".
---
покажите пожалуйста на примере , как это сделать
---
На примере внешней обработки. Без оповещения. Обратите внимание, в форму "ФормаОбработкиУдаления" я добавил реквизит ДокументОбъект, чтобы можно было удалить строку ТЧ без обработки оповещения.
---
вы добавили в форму обработки обработкаобъект. и используете это в коде

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

Для чего добавлен этот реквизит и для чего используется?
---
В вашем случае это будет ДокументОбъект — основной реквизит формы. Чтобы пример не зависел от какой-либо конфигурации, я использовал ОбработкаОбъект по аналогии.
---
сделал так, но проосто до конца процедуры идет и ничего не происходит, даже форма не вызывается . Не знаете почему так ?

```1c
    Процедура ТоварыПередУдалением(Элемент, Отказ)

    ПередУдалениемТовары(Элемент, Отказ);

    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор3 = Новый Структура;
    Отбор3.Вставить("Номенклатура",ТекущиеДанные.Номенклатура);
    МассивСтрок3=ПервоначальныеДанные.НайтиСтроки(Отбор3);
    вот что находится в вызываемой форме:
    [1C-CODE]Процедура ОКНажатие(Элемент)

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

    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если КлючУникальности = Неопределено Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецПроцедуры
```

 это все, что находится в вызываемой форме

```1c
    Процедура ОКНажатие(Элемент)

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

    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если КлючУникальности = Неопределено Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецПроцедуры
```
---
из-за этого кода форма не открывается:

```1c
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если КлючУникальности = Неопределено Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецПроцедуры
```

но если закомментировать этот код, то строка удаляется
---
выдает такую ошибку:
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(72)}: Ошибка при вызове метода контекста (ПолучитьФорму)
 ФормаОбработкиУдаления = ПолучитьФорму("РегистрСведений.ЛогРедактированияДокументов.Форма.РеализацияПриУдалении",Элемент , ТекущаяСтрока);
по причине:
Несоответствие типов (параметр номер '2')

Если убрать "элемент ", ничего не происходит.И форма не открывается и строка не удаляется, при нажатии на кнопку удаления строки
---
ничего не делает из-за того, что ключУникальности=неопределенно.Но как это исправить, пока не знаю. У меня форма вызывается из регистра сведений

```1c
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если КлючУникальности = Неопределено Тогда
    Отказ = Истина;
    Возврат;
    КонецЕсли;
    КонецПроцедуры
```
---
сделал так, чтобы удалял, теперь если нажать на кнопку "Ок", не записывает данные в регистр сведений.
И тут :

```1c
    Процедура ОКНажатие(Элемент)

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

{РегистрСведений.ЛогРедактированияДокументов.Форма.РеализацияПриУдалении.Форма(13)}: Ошибка при вызове метода контекста (Удалить)
ДокументОбъект.Товары.Удалить(КлючУникальности);
по причине:
Несоответствие типов (параметр номер '1')

этот код перенес в после удаления:

```1c
    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор3 = Новый Структура;
    Отбор3.Вставить("Номенклатура",ТекущиеДанные.Номенклатура);
    МассивСтрок3=ПервоначальныеДанные.НайтиСтроки(Отбор3);

    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    | РеализацияТоваровУслугТовары.Номенклатура,
    | СУММА(ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Резерв,
    | СУММА(ЕСТЬNULL(ВложенныйЗапрос.КоличествоОстаток, 0)) КАК Остаток,
    | РеализацияТоваровУслугТовары.Количество,
    | РеализацияТоваровУслугТовары.Ссылка,
    | РеализацияТоваровУслугТовары.НомерСтроки
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, ) КАК ТоварыВРезервеНаСкладахОстатки
    | ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
    | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура
    | ИЗ
    | РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки
    |
    | СГРУППИРОВАТЬ ПО
    | ТоварыНаСкладахОстатки.Номенклатура,
    | ТоварыНаСкладахОстатки.КоличествоОстаток) КАК ВложенныйЗапрос
    | ПО РеализацияТоваровУслугТовары.Номенклатура = ВложенныйЗапрос.Номенклатура
    |ГДЕ
    | РеализацияТоваровУслугТовары.Ссылка.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | РеализацияТоваровУслугТовары.Номенклатура,
    | РеализацияТоваровУслугТовары.Количество,
    | РеализацияТоваровУслугТовары.Ссылка,
    | РеализацияТоваровУслугТовары.НомерСтроки";
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Выборка=Запрос.Выполнить().Выгрузить();
    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    ТекущаяСтрока=ЭлементыФормы.Товары.ТекущаяСтрока;

    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущаяСтрока.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор2 = Новый Структура;
    Отбор2.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок2=Выборка.НайтиСтроки(Отбор2);
    Для Каждого Стр Из ИзмененияКоличества Цикл

    ТекущиеДанные = ЭлементыФормы.Товары.ТекущиеДанные;
    Отбор = Новый Структура;
    Отбор.Вставить("НомерСтроки",ТекущиеДанные.НомерСтроки);
    МассивСтрок=ПервоначальныеДанные.НайтиСтроки(Отбор);
    Отбор2 = Новый Структура;
    Отбор2.Вставить("Номенклатура",ТекущиеДанные.Номенклатура);
    МассивСтрок2=Выборка.НайтиСтроки(Отбор2);
    НаборЗаписей = РегистрыСведений.ЛогРедактированияДокументов.СоздатьНаборЗаписей();
    НоваяЗапись = НаборЗаписей.Добавить();
    //ЗаполнитьЗначенияСвойств(НоваяЗапись, Стр);
    НоваяЗапись.Документ = Ссылка;
    НоваяЗапись.Товар = ТекущаяСтрока.Номенклатура;
    НоваяЗапись.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    НоваяЗапись.Резерв = МассивСтрок2[0].Резерв;
    НоваяЗапись.Остаток = МассивСтрок2[0].Остаток;
    НоваяЗапись.Было = МассивСтрок3[0].Количество;
    НоваяЗапись.Стало =0;
    НоваяЗапись.Период=ТекущаяДата();
    НоваяЗапись.ПричинаИзменения=Стр.ПричинаИзменения;
    //НоваяЗапись.Комментарий=Форма.Комментарий;
    КонецЦикла;
    НаборЗаписей.Записать(Ложь);
```
---
спасибо большое
---
.
---
В моём примере ПолучитьФорму это метод прикладного объекта. У вас, скорее всего, вызывается метод глобального контекста. Там другой синтаксис. Попробуйте открывать форму через метадананные.

```1c
    ФормаОбработкиУдаления = РегистрыСведений.ЛогРедактированияДокументов.ПолучитьФорму("РеализацияПриУдалении", Элемент, ТекущаяСтрока);
```
---
на этот код ошибку выдает:

```1c
    ДокументОбъект.Товары.Удалить(КлючУникальности);
    Закрыть();
```

{РегистрСведений.ЛогРедактированияДокументов.Форма.РеализацияПриУдалении.Форма(13)}: Ошибка при вызове метода контекста (Удалить)
ДокументОбъект.Товары.Удалить(КлючУникальности);
по причине:
Несоответствие типов (параметр номер '1')

ДокументОбъект задал тип ДокументСсылка.РеализацияТоваровУслуг

Не знаете почему?
---
Потому что при получении формы не передали ТекущуюСтроку в качестве ключа уникальности. ТекущуюСтроку можно и в реквизит формы передать, просто тогда придётся контролировать уникальность запущенных форм.
---
как передать текущую строку в качестве ключа.можно пример?
---
В (22)
---
странно,выдает такую ошибку:
Форма = Документы.РеализацияТоваровУслуг.ПолучитьФорму("ФормаДокумента",Элемент ,ТекущаяСтрока);

```1c
    Форма = Документы.РеализацияТоваровУслуг.ПолучитьФорму("ФормаДокумента",Элемент ,ТекущаяСтрока);
```

или в вызываемую форму нужно добавить реквизит с типом уникальный идентификатор?
---
Почему "ФормаДокумента"? Вы же используете "РеализацияПриУдалении".
---
таблица в которой удаляем находится же в форме документа реализация товаров и услуг. или не эту форму нужно получить?
---
Вы меня обескуражили. Форма документа у вас уже открыта, вызываете вы форму РС. Это исходя из вашего же описания задачи.
---
да
---
так тоже выдает ту же ошибку:

```1c
    ФормаОбработкиУдаления = РегистрыСведений.ЛогРедактированияДокументов.ПолучитьФорму("РеализацияПриУдалении", Элемент, ТекущаяСтрока);
```

в форме реализация при удалении нету таблицы
---
Ну, ищите ошибки. Что-то пропустили, видимо. Более помочь не могу.
---
```1c
    Процедура ОКНажатие(Элемент)

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

эта процедура находится в вызываемой форме. Не понимаю зачем таким образом получать форму
---
Посмотрите код в "ПриЗакрытии".
Ну и транзакции никто не отменял... :)
---
в форме документа?
---
Документ, и сам регистр сведений.
Можете попробовать использовать отладчик, чтобы пройти по всей цепочке кода вверх, до места удаления.
---
я про текущую строку в качестве ключа уникальности не понимаю. Откуда брать , как брать, как работает
---
Если бы знал написал, я не настолько глубоко знаю 1С. :)
---
как передать текущую строку , как в качестве ключа уникальности.Покажите пожалуйста ,если знаете, никак не могу понять)
---
Добрый день! Есть такая встроенная функция "ПолучитьИдентификатор()". Вот здесь обсуждался этот момент при работе с текущей строкой и ее идентификатором
Ссыль
---
добрый день.я не понимаю, как в вызываемую форму, которая вызывается из регистра сведений передать индекс, и какой вообще индекс передавать
---
как все запущено...

1. Вот есть обработчик "передУдалениемСтроки".

2. Вот есть в ней возможность сделать так, чтобы строка не удалялась, когда юзер жмет ДЕЛ.

3. - И как же это мы можем сделать? - спросил начинающий программист Степашку....

4. - Да как нефиг делать! Просто напиши: "Отказ = Истина;" - сказал Степашка...

На этом спокойной ночи малыши закончились и началась суровая будня жизни, в которой пользователя надо что-то комплексно спросить ю, а не просто на "Да" или "Нет".

5. И как же нам спросить пользователя перед удалением строки?

6. А надо показать ему форму.

7. Круто! У нас есть форма - давайте ее откроем.

8. При этом нам надо результат закрутия формы как-то обработать, ибо в нем у нас ответ, удалять эту чертову строку или нет.

9. Для этого нам надо о крыть форму модал но - что прошлый век, либо о крыть форму и передать пр открытии формы объект оповещения о закрытии, и тогда при закрытии формы вызовется процедура, в которой и определим, что делать со строкой.

10. А как же мы поймем, с какой вообще строкой этот геморрой нас настиг?

11. А это мы можем понять по индексу строки или по ключу записи регистра, информацию о ко орых мы можем передать в о работку оповещения о закрытии в третьем параметре конструктора. А если мы модельно вызываем, что в 2019 году делают только лохи, то нам и этого не надо.

12. После того, как пользовател нажал в форме что-то, отвечающее за ответ ("Ок", например), мы в форме вызываем "закрыть(данныеиззакрываемойформыкоторыемыкактонашаманиливэтупеременн­ую);", после чего она попадает в переменную "Результат" обработки оповещения о закрытии, а данные о строке, с которой приключилась беда, - во второй параметр этой процедуры с каким нибудь названием типа "ДополнительныеПараметры".

13. Если вызывали модельно, то строка у нас и так есть. Мы можем просто проверить результат, вернувшийся из модальной формы и, если строку и правда надо удалить, просто скажем, что Отказ = ложь.

14. Если мы делали все по современным учебникам, то проверять нам придется дважды. Во-первых проверить, что в переменоой результата вообще что-то есть. Если там нихренашеньки - пользовател нажал ЭСК или крест, и ему не надо может быть ничего удалять. Если так - просто выходим. Если же результат есть, то проверим, способствует ли он удалению строки. Если нет - тоже выходим. Если да, то ищем в нашей таблице, из которой мы хотели удалить строку, эту самую строку, данные о которой находятся в дополнительных параметрах, куда мы положили их при открытии формы, и удаляем ее.

15. Ура, победа.
---
xD