Здравствуйте! Есть задача сделать для ЗУП 3.1 ВПФ Справка о доходах за определенный период. Для этого необходимо передать в форму период за который идет отбор. Я сделал обработку в тестовом режиме через ссылку и все работает как нужно, но при подключении выдает ошибку.

```1c
    Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;

    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Справочник.Сотрудники");

    ПараметрыРегистрации.Вставить("Вид","ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Справка о доходах с периодом");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма");

    //Команды
    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "Справка о доходах с периодом";
    НоваяКоманда.Идентификатор = "Справка о доходах с периодом";
    НоваяКоманда.Использование = "ВызовКлиентскогометода";
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации

    КонецФункции

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

Так как НоваяКоманда.Использование = "ВызовКлиентскогометода";
из Модуля обработки подключаюсь к экспортной процедуре модуля Формы Печать()

```1c
    ////Для теста через ссылку
    &НаКлиенте
    Процедура КомандаПечать(Команда)

    Если НЕ ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
    Сообщить("Не указан сотрудник");
    Возврат;
    КонецЕсли;

    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);

    ИдентификаторКоманды = "Справка о доходах с периодом";

    Печать(ИдентификаторКоманды, МассивОбъектов);
    КонецПроцедуры

    //Для вызова механизмом печатных форм
    &НаКлиенте
    Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт

    СтрПараметры = Новый Структура;
    СтрПараметры.Вставить("ИдентификаторКоманды", ИдентификаторКоманды);
    СтрПараметры.Вставить("МассивОбъектов", Объект.СсылкаНаОбъект);

    ОткрытьФорму("ВнешняяОбработка.СправкаОДоходах.Форма.ФормаПараметров", СтрПараметры);

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

Оттуда открываю вторую форму в обработке, для записи параметров (ФормаПараметров) где идет дальнейшая обработка

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

    ТабДок = Новый ТабличныйДокумент;

    ////Для теста обработки через ссылку
    //ТабДок = ПечатьНаСервере(ЭтотОбъект.Параметры.МассивОбъектов, ТабДок);

    ТекущийВладелец = ЭтаФорма.ВладелецФормы;

    УправляемаяФормаДетектед = Ложь;

    Пока НЕ УправляемаяФормаДетектед Цикл

    Если ТипЗнч(ТекущийВладелец) = Тип("УправляемаяФорма") Тогда
    УправляемаяФормаДетектед = Истина;
    Иначе
    ТекущийВладелец = ТекущийВладелец.Родитель;
    КонецЕсли;

    КонецЦикла;

    Ссылка = ТекущийВладелец.Объект.Ссылка;

    ТабДок = ПечатьНаСервере(Ссылка, ТабДок);

    ТабДок.Показать("Печать документа");

    Закрыть();

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

    &НаСервере
    Функция ПечатьНаСервере(МассивОбъектов, ТабДок)

    Результат = Новый Структура("НачалоПериода, КонецПериода", Объект.НачалоПериода, Объект.КонецПериода);

    ТЗДляЗаполнения = ЗапросНаСервере(МассивОбъектов, Результат);

    МакетОбработки = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");

    ///////////Обработка заполнения ТабДок
```

И вот тут кроется засада. Если вызываю обработку через Файл-Открыть и передаю ссылку на элемент справочника таким образом:
ТабДок = ПечатьНаСервере(ЭтотОбъект.Параметры.МассивОбъектов, ТабДок);
Все работает отлично

А если подключаю обработку, уже не могу передать ссылку на элемент справочника и уже не могу посмотреть под отладчиком что внутри.

```1c
    ТекущийВладелец = ЭтаФорма.ВладелецФормы;

    УправляемаяФормаДетектед = Ложь;

    Пока НЕ УправляемаяФормаДетектед Цикл

    Если ТипЗнч(ТекущийВладелец) = Тип("УправляемаяФорма") Тогда
    УправляемаяФормаДетектед = Истина;
    Иначе
    ТекущийВладелец = ТекущийВладелец.Родитель;
    КонецЕсли;

    КонецЦикла;

    Ссылка = ТекущийВладелец.Объект.Ссылка;

    ТабДок = ПечатьНаСервере(Ссылка, ТабДок);
```

Выдает ошибку:
 {ВнешняяОбработка.СправкаОДоходах.Форма.ФормаПараметров.Форма(18)}: Значение не является значением объектного типа (Родитель)
   ТекущийВладелец = ТекущийВладелец.Родитель;
---
Я нашел решение сам. Для кого интересно со справочником Сотрудники в ЗУП и в Бухгалтерии 3.0 (проверял специально) для подключения внешних обработок не работает метод ВладелецФормы.Объект. Там нет объекта ни в Форме элемента ни в ФормеСписка мне помог следующий код

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

    //Экспортная процедура. Может вызываться модуля объекта ("ВызовКлиентскогоМетода") или из тестовой команды ВыполнитьЗаполнение
    &НаКлиенте
    Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

    ЗакрытиеФормы = Новый ОписаниеОповещения
    ("ПослеЗакрытияФормы", ЭтаФорма); // Название процедуры, которая будет выполняться после закрытия формы "ФормаПараметров"

    ФормаПараметров = ОткрытьФорму("ВнешняяОбработка.СправкаОДоходахСПериодом.Форма.ФормаПараметров", , ,,,,ЗакрытиеФормы);
    КонецПроцедуры

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

    Если НЕ ЗначениеЗаполнено(Результат) Тогда
    Сообщить("Не указан период!");
    Возврат; // Пользователь не стал указывать параметры, останавливаем работу
    КонецЕсли;

    ТабДок = Новый ТабличныйДокумент;

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

    // Результат содержит структуру, полученную из формы "ЗапросПараметров"
    //ОбъектЗаполнения - Ссылка на элемент справочника
    ТабДок = ПечатьНаСервере(ОбъектЗаполнения, ТабДок, Результат);

    ТабДок.Показать("Печать документа");

    КонецПроцедуры
```
---
Вы путаете разные понятия владелец формы (т.е это элементы управления) и владелец элемента справочника, а это не одно и то же. Поэтому у Вас возникает такая ошибка.
---
А как тогда передать дальше ссылку на элемент справочника и откуда ее получить? Я открываю обработку из элемента справочника, поэтом,у по идее есть, возможность получить ссылку на этот элемент
---
Я нашел решение сам. Для кого интересно со справочником Сотрудники в ЗУП и в Бухгалтерии 3.0 (проверял специально) для подключения внешних обработок не работает метод ВладелецФормы.Объект. Там нет объекта ни в Форме элемента ни в ФормеСписка мне помог следующий код

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

    //Экспортная процедура. Может вызываться модуля объекта ("ВызовКлиентскогоМетода") или из тестовой команды ВыполнитьЗаполнение
    &НаКлиенте
    Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

    ЗакрытиеФормы = Новый ОписаниеОповещения
    ("ПослеЗакрытияФормы", ЭтаФорма); // Название процедуры, которая будет выполняться после закрытия формы "ФормаПараметров"

    ФормаПараметров = ОткрытьФорму("ВнешняяОбработка.СправкаОДоходахСПериодом.Форма.ФормаПараметров", , ,,,,ЗакрытиеФормы);
    КонецПроцедуры

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

    Если НЕ ЗначениеЗаполнено(Результат) Тогда
    Сообщить("Не указан период!");
    Возврат; // Пользователь не стал указывать параметры, останавливаем работу
    КонецЕсли;

    ТабДок = Новый ТабличныйДокумент;

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

    // Результат содержит структуру, полученную из формы "ЗапросПараметров"
    //ОбъектЗаполнения - Ссылка на элемент справочника
    ТабДок = ПечатьНаСервере(ОбъектЗаполнения, ТабДок, Результат);

    ТабДок.Показать("Печать документа");

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