Доброго дня!

Есть форма списка, на которой находится список задач (как в системе учета заявок).
Реализовано это все через таблицу значений.
По нажатию на какую-либо задачу из списка открывается форма документа "Заявка" и на этой форме есть кнопки "Вперед" и "Назад".
Необходимо запрограммировать кнопки так, чтобы по их нажатию заявки переключались по таблице значений.

Да данный момент реализовала так : в модуле формы списка подключаю обработчик оповещения на событие "ПослеЗакрытияФормы", а к кнопкам привязываю параметры закрытия "Вперед" и "Назад"..Далее когда кнопка срабатывает и передает параметр, и уже в процедуре "ПослеЗакрытияФормы" должен быть алгоритм, только вот какой?? Отталкивалась от ТекущейСтроки, затем получала индекс и его увеличивала или уменьшала в зависимости от выбранной кнопки, а затем открывала форму, передавая ссылку, найденную по индексу, но не выходит так....

Вот код :

Обработчик при выборе задачи из формы списка:

```1c
    &НаКлиенте
    Процедура СписокТЗВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    ФормаДокумента = ПолучитьФорму("Документ.Заявка.Форма.ФормаДокументаСПереключателями", Новый Структура("Ключ", Элементы.СписокТЗ.ТекущиеДанные.Ссылка));
    ОткрытьФорму("Документ.Заявка.Форма.ФормаДокументаСПереключателями",Новый Структура("Ключ", СписокТЗ[ВыбраннаяСтрока].Ссылка),,,,,Новый ОписаниеОповещения("ПослеЗакрытияФормы", ЭтаФорма), РежимОткрытияОкнаФормы.Независимый);

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

    &НаКлиенте
    Процедура ПослеЗакрытияФормы(ПараметрЗакрытия, ДополнительныеПараметры) Экспорт

    Если ПараметрЗакрытия = Неопределено Тогда
    Возврат;
    КонецЕсли;

    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(Элементы.СписокТЗ.ТекущаяСтрока);//();
    Индекс = СписокТЗ.Индекс(ТекущаяСтрока);

    Если ПараметрЗакрытия = "Вперед" Тогда
    Для н = Индекс + 1 По СписокТЗ.Количество()-1 Цикл
    Строка = СписокТЗ[н];
    Идентификатор = Строка.ПолучитьИдентификатор();

    Если Элементы.СписокТЗ.ПроверитьСтроку(Идентификатор) Тогда
    СледующаяСтрока = СписокТЗ[н];
    Прервать;
    Иначе
    //СледующаяСТрока = СписокТЗ[Индекс+1]
    КонецЕсли;

    КонецЦикла;

    ОткрытьФорму("Документ.Заявка.Форма.ФормаДокументаСПереключателями", Новый Структура("Ключ", СледующаяСтрока.Ссылка),,,,,Новый ОписаниеОповещения("ПослеЗакрытияФормы", ЭтаФорма), РежимОткрытияОкнаФормы.Независимый);
    ТекущаяСтрока = СледующаяСтрока;
    КонецЕсли;

    //Если ПараметрЗакрытия = "Назад" Тогда
    //Элементы.СписокТЗ.ТекущаяСтрока = Элементы.СписокТЗ.ТекущаяСтрока - 1;
    //ОткрытьФорму("Документ.Заявка.Форма.ФормаДокументаСПереключателями", Новый Структура("Ключ", СписокТЗ[Элементы.СписокТЗ.ТекущаяСтрока - 1].Ссылка),,,,,Новый ОписаниеОповещения("ПослеЗакрытияФормы",ЭтаФорма), РежимОткрытияОкнаФормы.Независимый);
    //КонецЕсли;

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

А это действия кнопок "Вперед - Назад" на форме элемента Задачи

```1c
    &НаКлиенте
    Процедура ПерейтиВперед(Команда)
    ЭтаФорма.Закрыть("Вперед");
    КонецПроцедуры

    &НаКлиенте
    Процедура ПерейтиНазад(Команда)
    ЭтаФорма.Закрыть("Назад");
    КонецПроцедуры
```

Подскажите, пожалуйста, что и каким образом доработать? Вроде бы просто, но что-то лыжи не едут..😁
---
Вместо ТекущаяСтрока = СледующаяСтрока, надо Элементы.СписокТЗ.ТекущаяСтрока = СледующаяСтрока.
И СледующаяСтрока перед поиском надо инициализировать: СледующаяСтрока = Неопределено, потому что может оказаться, что она не будет найдена. Кстати, поэтому лучше следующую/предыдущую ссылку искать в процедуре формы задачи, так как возможно и не нужно закрывать форму, если следующая ссылка не может быть определена.
---
Работает!
Пока остановилась на этом:

```1c
    &НаКлиенте
    Процедура ПослеЗакрытияФормы(ПараметрЗакрытия, ДополнительныеПараметры) Экспорт

    Если ПараметрЗакрытия = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Если Не Элементы.СписокТЗ.ТекущаяСтрока = Неопределено Тогда
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(Элементы.СписокТЗ.ТекущаяСтрока);//();
    Индекс = СписокТЗ.Индекс(ТекущаяСтрока);
    КонецЕсли;

    Если ПараметрЗакрытия = "Вперед" Тогда

    Для н = Индекс + 1 По СписокТЗ.Количество()-1 Цикл
    Строка = СписокТЗ[н];
    Идентификатор = Строка.ПолучитьИдентификатор();

    Если Элементы.СписокТЗ.ПроверитьСтроку(Идентификатор) Тогда
    СледующаяСтрока = СписокТЗ[н];
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(н);
    Прервать;
    КонецЕсли;

    КонецЦикла;

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

    КонецЕсли;

    Если ПараметрЗакрытия = "Назад" Тогда

    Для н = - Индекс + 1 По 0 Цикл
    Строка = СписокТЗ[-н];
    Идентификатор = Строка.ПолучитьИдентификатор();

    Если Элементы.СписокТЗ.ПроверитьСтроку(Идентификатор) Тогда
    СледующаяСтрока = СписокТЗ[-н];
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(-н);
    Прервать;
    КонецЕсли;

    КонецЦикла;

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

    КонецЕсли;

    КонецПроцедуры
```
---
Это можно реализовать без закрытия формы задачи. Используйте ЗначениеВРеквизитФормы(ПрикладнойОбъект, "Объект").
---
в процедуре команды использовать?
---
Да, форму списка берете из Владельца формы задачи. Получаете новую ссылку. На сервере получаете из ссылки прикладной объект задачи и копируете его в данные формы. Но еще придется продублировать код в ПриСозданииНаСервере, если есть необходимость.
---
Не совсем понятно как форму списка из Владельца формы задачи взять?
---
Свойство формы на клиенте ВладелецФормы. Но знаете, сейчас подумал – ваш вариант с закрытием будет лучше.
---
А что думаете на счет алгоритма переключения? Есть идеи как ссылку следующей/предыдущей задачи получить?
---
А что конкретно не получается? По коду вроде бы все нормально.
---
а вот переключение срабатывает один раз. Нажав переключение два раза подряд получается, что значение ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(Элементы.СписокТЗ.ТекущаяСтрока) не меняется и соответственно не переключается..
---
Вместо ТекущаяСтрока = СледующаяСтрока, надо Элементы.СписокТЗ.ТекущаяСтрока = СледующаяСтрока.
И СледующаяСтрока перед поиском надо инициализировать: СледующаяСтрока = Неопределено, потому что может оказаться, что она не будет найдена. Кстати, поэтому лучше следующую/предыдущую ссылку искать в процедуре формы задачи, так как возможно и не нужно закрывать форму, если следующая ссылка не может быть определена.
---
Вот так? Ошибку выдает:
Несоответствие типов (параметр номер '1')
{ВнешняяОбработка.УчетЗадач_Вариант.Форма.ФормаСписка.Форма(918)}: ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(Элементы.СписокТЗ.ТекущаяСтрока);
{Документ.Заявка.Форма.ФормаДокументаСПереключателями.Форма(881)}: ЭтаФорма.Закрыть("Вперед");

по причине:
Несоответствие типов (параметр номер '1')

```1c
    Если ПараметрЗакрытия = Неопределено Тогда
    Возврат;
    КонецЕсли;

    СледующаяСтрока = Неопределено;
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(Элементы.СписокТЗ.ТекущаяСтрока);
    Индекс = СписокТЗ.Индекс(ТекущаяСтрока);

    Если ПараметрЗакрытия = "Вперед" Тогда
    Для н = Индекс + 1 По СписокТЗ.Количество()-1 Цикл
    Строка = СписокТЗ[н];
    Идентификатор = Строка.ПолучитьИдентификатор();

    Если Элементы.СписокТЗ.ПроверитьСтроку(Идентификатор) Тогда
    СледующаяСтрока = СписокТЗ[н];
    Прервать;
    Иначе
    //СледующаяСТрока = СписокТЗ[Индекс+1]
    КонецЕсли;

    КонецЦикла;

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

```1c
    &НаКлиенте
    Процедура ПослеЗакрытияФормы(ПараметрЗакрытия, ДополнительныеПараметры) Экспорт

    Если ПараметрЗакрытия = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Если Не Элементы.СписокТЗ.ТекущаяСтрока = Неопределено Тогда
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(Элементы.СписокТЗ.ТекущаяСтрока);//();
    Индекс = СписокТЗ.Индекс(ТекущаяСтрока);
    КонецЕсли;

    Если ПараметрЗакрытия = "Вперед" Тогда

    Для н = Индекс + 1 По СписокТЗ.Количество()-1 Цикл
    Строка = СписокТЗ[н];
    Идентификатор = Строка.ПолучитьИдентификатор();

    Если Элементы.СписокТЗ.ПроверитьСтроку(Идентификатор) Тогда
    СледующаяСтрока = СписокТЗ[н];
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(н);
    Прервать;
    КонецЕсли;

    КонецЦикла;

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

    КонецЕсли;

    Если ПараметрЗакрытия = "Назад" Тогда

    Для н = - Индекс + 1 По 0 Цикл
    Строка = СписокТЗ[-н];
    Идентификатор = Строка.ПолучитьИдентификатор();

    Если Элементы.СписокТЗ.ПроверитьСтроку(Идентификатор) Тогда
    СледующаяСтрока = СписокТЗ[-н];
    ТекущаяСтрока = СписокТЗ.НайтиПоИдентификатору(-н);
    Прервать;
    КонецЕсли;

    КонецЦикла;

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

    КонецЕсли;

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