Задача такая. В обработке делается обход таблицы и для каждой строки с пустой номенклатурой нужно открыть форму из которой выбрать номенклатуру и подставить в текущую строку.

```1c
    &НаКлиенте
    Процедура МояПроцедура(Команда)
    Для каждого стр из ТаблицаДанных Цикл
    Если стр.Номенклатура.Пустая() Тогда
    Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, стр);
    ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", стр.Наименование), ЭтаФорма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры

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

Значение выбирается и подставляется, но из-за отсутствия модальности цикл не останавливается при открытии формы. Форма открывается лишь раз и выбранное значение подставляется в последнюю строку.
Подскажи, как решить эту проблему?
---
или делаете модальные окна или убираете цикл и пишите какую-нибудь такую конструкцию:

```1c
    &НаКлиенте
    Процедура МояПроцедура(Команда)

    Массив= ТаблицаДанных.НайтиСтроки(Новый Структура("Номенклатура", Справочники.Номенклатура.ПустаяСсылка()));
    Если Массив.Количество() Тогда
    Параметры = Новый Структура("Массив,Индекс", Массив, 0);
    Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, Параметры);
    ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", Массив[0].Наименование), ЭтаФорма,,,, Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    КонецЕсли;

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

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

    Если ЗначениеЗаполнено(Результат) Тогда
    СтокаТаблицы = Параметры.Массив[Параметры.Индекс];
    СтокаТаблицы.Номенклатура = Результат;
    КонецЕсли;

    Параметры.Индекс = Параметры.Индекс + 1;

    Если Параметры.Массив.Количество() -1 >= Параметры.Индекс Тогда
    Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, Параметры);
    ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", Параметры.Массив[Параметры.Индекс].Наименование), ЭтаФорма,,,, Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    КонецЕсли;

    КонецПроцедуры
```
---
или делаете модальные окна или убираете цикл и пишите какую-нибудь такую конструкцию:

```1c
    &НаКлиенте
    Процедура МояПроцедура(Команда)

    Массив= ТаблицаДанных.НайтиСтроки(Новый Структура("Номенклатура", Справочники.Номенклатура.ПустаяСсылка()));
    Если Массив.Количество() Тогда
    Параметры = Новый Структура("Массив,Индекс", Массив, 0);
    Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, Параметры);
    ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", Массив[0].Наименование), ЭтаФорма,,,, Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    КонецЕсли;

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

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

    Если ЗначениеЗаполнено(Результат) Тогда
    СтокаТаблицы = Параметры.Массив[Параметры.Индекс];
    СтокаТаблицы.Номенклатура = Результат;
    КонецЕсли;

    Параметры.Индекс = Параметры.Индекс + 1;

    Если Параметры.Массив.Количество() -1 >= Параметры.Индекс Тогда
    Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, Параметры);
    ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", Параметры.Массив[Параметры.Индекс].Наименование), ЭтаФорма,,,, Оповещение,
    РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    КонецЕсли;

    КонецПроцедуры
```
---
Благодарю. Именно к такому решению пришел.
---
Завершать цикл и запускать его снова. Можно с начала, можно запоминать индекс и продолжать с него

```1c
    КолВо= ТаблицаДанных.Количество()-1;
    Для сч = 0 По КолВо Цикл
    стр = ТаблицаДанных[0];
    Если стр.Номенклатура.Пустая() Тогда
    Оповещение = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтотОбъект, Новый Структура("сч, стр ", сч , стр));
    ОткрытьФорму("Обработка.МояОбработка.Форма.ВыборНоменклатуры", Новый Структура("Наименование", стр.Наименование), ЭтаФорма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    Прервать;
    КонецЕсли;
    КонецЦикла;

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

что-то такое. Получается нечто похожее на рекурсию на оповещениях