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

```1c
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    Если Запрос.Группировка(1) = 1 Тогда
    АктивизироватьОбъект(Запрос.Владелец);
    ПриИзмененииТекущейМодели(); // заполняем здесь таблицу подчиненного справочника

    ТекСтрока = 0;
    Исполнения.НайтиЗначение(Запрос.Ссылка, ТекСтрока, "Ссылка"); // поиск в подчиненном
    Исполнения.ТекущаяСтрока(ТекСтрока);
    КонецЕсли;
```

Вызывается это кнопкой.
Так вот, все это в принципе работает, но! Оно работает с трех нажатий.
Нажимаем первый раз, получаем ошибку
АктивизироватьОбъект(Запрос.Владелец);
{Справочник.МоделиДвигателей.ФормаСписка.ВыборИсполнения.Модуль(76)}: В данной формуле не может быть вызвана эта процедура(функция)
Нажимаем второй раз (ничего не трогаем, кроме кнопки!), программа позиционируется на нужном элементе первого справочника. Нажимаем третий раз - получаем нужную строку и второго списка тоже.
Вопрос - а как сделать так, чтобы она сразу все находила.
---
Короче интернет сила )
а 1с, как всегда, ппц.

```1c
    // это после поиска
    МодельДляФокуса = НужнаяМодель;
    Форма.Закрыть(0);

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

```1c
    Процедура НайтиИсполнениеНажатие()
    Если СтрДлина(СокрЛП(ДляПоиска)) > 0 Тогда
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "//{{ЗАПРОС(ПоискИсполнения)
    |Обрабатывать НеПомеченныеНаУдаление;
    |Ссылка = Справочник.ИсполненияДвигателей.ТекущийЭлемент;
    |Владелец = Справочник.ИсполненияДвигателей.Владелец;
    |Наименование = Справочник.ИсполненияДвигателей.Наименование;
    |Группировка Ссылка;
    |Условие(Наименование = ДляПоиска);
    |"//}}ЗАПРОС
    ;

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;

    Если Запрос.Группировка(1) = 1 Тогда
    НужноеИсполнение = Запрос.Ссылка;
    НужнаяМодель = Запрос.Владелец;

    ЗаполнитьТаблицуИсполнений(НужнаяМодель);

    ТекСтрока = 0;
    Исполнения.НайтиЗначение(НужноеИсполнение, ТекСтрока, "Ссылка");
    Исполнения.ТекущаяСтрока(ТекСтрока);

    АктивизироватьОбъект(НужнаяМодель);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры // НайтиИсполнениеНажатие()
```
---
отладчик, точку останова на строке с ошибкой. Посмотреть, возможно, она вызывается где-то еще, помимо процедуры в кнопке. Например, из формулы в текстовом поле. Которая обсчитывается при обновлении формы. И оттуда-же валится с ошибкой.
---
ну естественно я отладчиком прошелся, он ничего не показывает. Он проходит этот вызов АктивизироватьОбъект(), а потом выводит ошибку.
Буду переделывать на две таблицы значений. "времени на раскачку нет" (с)
---
Короче интернет сила )
а 1с, как всегда, ппц.

```1c
    // это после поиска
    МодельДляФокуса = НужнаяМодель;
    Форма.Закрыть(0);

    Процедура ПриЗакрытии()
    Если ПустоеЗначение(МодельДляФокуса) = 0 тогда
    АктивизироватьОбъект(МодельДляФокуса);
    СтатусВозврата(0);
    МодельДляФокуса = ";
    Возврат;
    КонецЕсли;
    КонецПроцедуры // ПриЗакрытии()
```
---
Нажатие кнопки инициирует двойной обход и перерисовку формы. Делай банально при изменении активной строки основного справочника и не надо тогда этого "финта ушами" с закрытием формы