Есть Управляемая форма. На ней при открытии заполняется ТаблицаЗначений. В обработчике этой таблице "ПриАктивизацииСтроки" заполняется другая таблица значений по отбору строки первой таблицы значений.

```1c
    &НаКлиенте
    Процедура БАПриАктивизацииСтроки(Элемент)
    ТекДанные = Элемент.ТекущиеДанные.БА;
    ЗаполнитьНадои(ТекДанные);
    КонецПроцедуры
```

Сейчас происходит зацыкливание, при открытии формы, срабатывает процедура "БАПриАктивизацииСтроки", которая запускает "ЗапонитьНадои", по завершении я попадаю снова в процедуру "БАПриАктивизацииСтроки" на первую строчку этой процедуры, и потом опять в "ЗапонитьНадои".

Как выйти из этой ситуации???
---
Могу предложить 2 варианта:

1) Получить в процедуре с директивой "&НаСервереБезКонтекста" необходимую таблицу значений и вернуть ее на клиент в виде массив структур:

```1c
    Результат = ОбщегоНазначения.ТаблицаЗначенийВМассив(Таблица);
```
А на основе уже полученных с сервера данных заполнить на клиенте нужную таблицу.

2) Заполнять таблицу формы с использованием контекстного вызова сервера, но не непосредственно при активизации строки, а с помощью обработчика ожидания (будет небольшая задержка):

```1c
    &НаКлиенте
    Процедура БАПриАктивизацииСтроки(Элемент)
    ПодключитьОбработчикОжидания("ЗаполнитьНадоиНаКлиенте", 0.1, Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура ЗаполнитьНадоиНаКлиенте()
    ТекДанные = Элементы.Список.ТекущиеДанные.БА;
    ЗаполнитьНадоиНаСервере(ТекДанные);
    КонецПроцедуры
```
---
Отказаться от контекстного обращения к серверу. Во выдержка из синтакс-помощника:
Описание:
Вызывается при активизации строки таблицы.
Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
---
А если я вторую таблицу значений заполняю с регистра, как мне в таком случае обойтись только клиентом, не используя сервер???
---
&НаСервере отличается от &НаСервереБезКонтекста тем,
что тащит на сервер весь контекст формы, поэтому все эти события заново срабатывают.
А без контекста - в чистом виде, пошла на сервер - взяла там данные и вернула на клиента, никакого обновления контекста формы при этом не произойдет. Вот ей и надо пользоваться.
---
Могу предложить 2 варианта:

1) Получить в процедуре с директивой "&НаСервереБезКонтекста" необходимую таблицу значений и вернуть ее на клиент в виде массив структур:

```1c
    Результат = ОбщегоНазначения.ТаблицаЗначенийВМассив(Таблица);
```
А на основе уже полученных с сервера данных заполнить на клиенте нужную таблицу.

2) Заполнять таблицу формы с использованием контекстного вызова сервера, но не непосредственно при активизации строки, а с помощью обработчика ожидания (будет небольшая задержка):

```1c
    &НаКлиенте
    Процедура БАПриАктивизацииСтроки(Элемент)
    ПодключитьОбработчикОжидания("ЗаполнитьНадоиНаКлиенте", 0.1, Истина);
    КонецПроцедуры

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

```1c
    &НаКлиенте
    Процедура ИмяРеквизитаПриАктивизацииСтроки(Элемент)

    Если ЭтаФорма.ТекущийЭлемент.Имя <> "ИмяРеквизита" Тогда
    Возврат;
    КонецЕсли;

    КонецПроцедуры
```
---
Два года. Два долгих года ждали мы Спасителя. И вот пришел Он и принес нам... туфту какую-то.

Почему текущий элемент должен сменится между двумя активизациями?
---
Немного задумался, тоже попал в такой автозапуск бесконечный.
В динамическом списке по выделенной строке собираю таблицу на форме и вывожу. Таблицы совершенно разные, в зависимости от выделенной строки могут выводиться совершенно разные таблицы и рисовать только программно. В итоге и обработчик ожидания не помог тоже.
В итоге скостылил новый реквизит формы с типом Дкумент.РегламентированныйОтчет и ещё там варианты есть, составной. При создании формы он не заполнен. При первом событии АктивизацииСтроки проверяю этот реквизит на равенство соответствующего реквизита в строке, если не равны, то выполняю заполнение\рисование таблицы на форме и заполняю этот реквизит текущим документом.
По окончании рисования снова отрабатывает событие ПриАктивизацииСтроки и снова проверяю реквизит на равенство с соответствующим реквизитом строки и если равны, то прерываю цепочку на этом месте.
---
Я столкнулся с этой проблемой, вызывая серверную функцию, которая делает НайтиСтроки() по другой ТЧ того же Объекта. Есть предположение, что зацикливание ПриАктивизации - не является зацикливанием: в процессе вызова сервера, текущая ТЧ - теряет фокус, а после вызова - получает его обратно, вот тут и случается следующий вызов ПриАктивизации - по факту получения фокуса.

Асинхронный вызов - не помогает, хотя, по логике - должен бы.

Помогла - ОбработкаОповещения. По сути, то же самое, что и через ОписаниеОповещения. Только, ОписаниеОповещения - предполагает что-то интерактивное - открыть форму, задать вопрос, показать диалог. А через ОбработкаОповещения - управление в другую процедуру передаётся сразу. Минус только один - выдаём лишние оповещения "в эфир", а ведь их обрабатывают все формы, у которых есть ОбработкаОповещения(). И наша форма - ловит все оповещения.

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

    // "Слушаем эфир"

    Если НЕ Источник = ЭтаФорма Тогда // сюда падают все оповещения - кто бы их ни сказал (в пределах видимости), а нам нужно только своё
    Возврат;
    КонецЕсли;

    ЕстьОшибки = НекийСерверныйВызов(Параметр.ИдентификаторСтроки);

    // ... что-то там дальше

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

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