Добрый день, создаю внешнюю обработку с реквизитом "Объект1" (тип.составной, справочник СправочникСсылкаКлиенты, СправочникСсылкаСотрудники)
Создаю форму этой обработки, получается закидываю на нее этот Объект1. Создаю также кнопку, по нажатии которой, после выбора объекта, будут выводиться данные в табличный документ по типу печатной форму об этом объекте. Кнопку называю Печать, создаю Действие, на клиенте. И выношу тоже кнопку на форму.
Также нужно создать макет, который и будет заполняться данными об объекте (тип макета - табличный документ). Допустим в макете я обозначаю Область "данныеосотрудниках" куда хочу занести его наименование и должность. То есть по нажатию кнопки должен открываться макет, заполненный данными о сотруднике
Вот что у меня есть:

```1c
    &НаКлиенте
    Процедура Печать(Команда) Экспорт
    Макет = ПолучитьМакетНаСервере();
    КонецПроцедуры

    &НаСервере
    Процедура ПечатьНаСервере(ТабДок) Экспорт
    ТабДок = Новый ТабличныйДокумент;
    Макет = Обработки.ВнешняяОбработка1.ПолучитьМакет("Макет1");

    Область = Макет.ПолучитьОбласть("данныеосотрудниках");
    Область.Параметры.сотрудник = Справочники.Сотрудники.Наименование;
    Область.Параметры.должность = Справочники.Сотрудники.ТрудоваяДеятельность.Должность;

    ТабДок.Вывести(Область);

    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    | Сотрудники.Наименование КАК Наименование,
    | Сотрудники.ТрудоваяДеятельность.(
    | Должность КАК Должность
    | ) КАК ТрудоваяДеятельность
    |ИЗ
    | Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    | Сотрудники.Ссылка = &Ссылка";

    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

    &НаСервере
    Функция ПолучитьМакетНаСервере()
    Возврат РеквизитФормыВЗначение("Объект1").ПолучитьМакет("Макет1");
    КонецФункции
```

Пишет: Недопустимое значение параметра (параметр номер '1')
и не выводится ничего в макет. Я начинающий
---
Вот, только что для тебя сделал:
---
Макет внешней обработки доступен через модуль объекта.

```1c
    ПолучитьМакет("Макет1");
```

Если код на форме, то надо сначала получить модуль объекта.

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

Если Объект1 это основной реквизит, иначе поменять на основной.
---
он у меня единственный реквизит
тогда код модуля объекта внешней обработки :

```1c
    &НаКлиенте
    Процедура Печать(Команда) Экспорт
    ПолучитьМакет("Макет1");
    КонецПроцедуры

    &НаСервере
    Процедура ПечатьНаСервере(ТабДок) Экспорт
    ТабДок = Новый ТабличныйДокумент;
    Макет = Обработки.ВнешняяОбработка1.ПолучитьМакет("Макет1");

    Область = Макет.ПолучитьОбласть("данныеосотрудниках");
    Область.Параметры.сотрудник = Справочники.Сотрудники.Наименование;
    Область.Параметры.должность = Справочники.Сотрудники.ТрудоваяДеятельность.Должность;

    ТабДок.Вывести(Область);

    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    | Сотрудники.Наименование КАК Наименование,
    | Сотрудники.ТрудоваяДеятельность.(
    | Должность КАК Должность
    | ) КАК ТрудоваяДеятельность
    |ИЗ
    | Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    | Сотрудники.Ссылка = &Ссылка";

    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

    &НаСервере
    Функция ПолучитьМакетНаСервере()
    Возврат РеквизитФормыВЗначение("Объект1").ПолучитьМакет("Макет1");
    КонецФункции
```

а код формы оставляю пустым?

если в модуле пишу:

```1c
    &НаСервере
    Функция ПолучитьМакетНаСервере()
    ПолучитьМакет("Макет1");
    КонецФункции
```

а в коде формы:

```1c
    &НаСервере
    Процедура ПечатьНаСервере(ТабДок) Экспорт
    ТабДок = Новый ТабличныйДокумент;
    Макет = Обработки.ВнешняяОбработка1.ПолучитьМакет("Макет1");

    Область = Макет.ПолучитьОбласть("данныеосотрудниках");
    Область.Параметры.сотрудник = Справочники.Сотрудники.Наименование;
    Область.Параметры.должность = Справочники.Сотрудники.ТрудоваяДеятельность.Должность;

    ТабДок.Вывести(Область);

    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    | Сотрудники.Наименование КАК Наименование,
    | Сотрудники.ТрудоваяДеятельность.(
    | Должность КАК Должность
    | ) КАК ТрудоваяДеятельность
    |ИЗ
    | Справочник.Сотрудники КАК Сотрудники
    |ГДЕ
    | Сотрудники.Ссылка = &Ссылка";

    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

    &НаСервере
    Функция ПолучитьМакетНаСервере()
    ОбъектВЗначении = РеквизитФормыВЗначение("Объект1");
    Макет = ОбъектВЗначении.ПолучитьМакет("Макет1");
    КонецФункции
```

всё равно недопустимое значение параметра (параметр номер '1')
---
Вот, только что для тебя сделал:
---
Спасибо вам большое
---
Там только надо заменить Справочник.Номенклатура на свои переменные.
И макет на свой исправить. :)
Пиши, ежели чего.
---
Еще вопросик, у меня вот в табличной части Трудовая деятельность есть реквизит Должность, который я тоже хочу вывести в макет

```1c
    Запрос.Текст ="ВЫБРАТЬ
    | Сотрудники.Наименование КАК Наименование,
    | Сотрудники.ТрудоваяДеятельность.(
    | Должность КАК Должность
    | ) КАК ТрудоваяДеятельность
    |ИЗ
    | Справочник.Сотрудники КАК Сотрудники";
```

такой запрос мне выводит только наименование сотрудника, а должность оставляет пустой.

```1c
    ОбластьСотрудник.Параметры.Наименование = ВыборкаДетальныеЗаписи.Наименование;
    ОбластьСотрудник.Параметры.Должность = ВыборкаДетальныеЗаписи.ТрудоваяДеятельность;
```

А если вместо ТрудоваяДеятельность в запросе выше написать Должность, то пишет что поле такое не найдено
---
Запрос.Текст ="ВЫБРАТЬ
                  | Сотрудники.Наименование КАК Наименование,
                  | Сотрудники.ТрудоваяДеятельность.(
                  | Должность КАК Должность
                  | ) КАК ТрудоваяДеятельность
                  |ИЗ
                  | Справочник.Сотрудники КАК Сотрудники";
Вот так нужно:

```1c
    Запрос.Текст ="ВЫБРАТЬ
    | Т.Ссылка.Наименование КАК Наименование,
    | Т.Должность КАК Должность
    |ИЗ
    | Справочник.Сотрудники.ТрудоваяДеятельность КАК Т";
```
---
неловко спрашивать, а если наименование не в табличной части, а должность в табличной части "ТрудДеят"?
---
неловко спрашивать Неловко - это когда программист 1С рассказывает С-нику про ООП.
конфигурация какая?
А что, так не получается, как я в последнем посте (11) предложил?
---
нет
учебная, 8.3.
---
учебная, 8.3. это платформа.
Конфа, я так понимаю, самописная. Посмотреть можно?
---
Да я решил уже проблему, теперь всё выводится) Спасибо вам огромное
---
так в (11) и берется Наименование не в табличной части через Ссылка. Это обращение к реквизитам самого документа.
---
Не в этом проблема была) уже решил, всё работает
---
иногда бывает глюк в такой конструкции:

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

Возможно из-за корявой конфы или контекста.
Поэтому лучше сначала получить в переменную, а потом вызывать методы. Отлаживать легче!
---
РеквизитФормыВЗначение("Объект1").ПолучитьМакет("Макет1");
Вот это совсем не правильно.
Нужно получить не реквизит формы Объект1, а объект самой внешней обработки. Он по-умолчанию называется Объект. И судя по названию реквизита формы Объект1, он так остался по-умолчанию.
Следовательно нужно так:

```1c
    &НаСервере
    Функция ПолучитьМакетНаСервере()
    Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет1");
    КонецФункции
```
---
Спасибо, понял
---
Если кому интересно, то макет заполняется следующим образом:

```1c
    &НаКлиенте
    Процедура Печать(Команда) Экспорт
    ТабДок = Новый ТабличныйДокумент;
    ПечатьНаСервере(ТабДок);
    ТабДок.Показать("Список сотрудников");
    КонецПроцедуры

    &НаСервере
    Процедура ПечатьНаСервере(ТабДок) Экспорт

    Макет = ПолучитьМакетНаСервере();

    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    | Сотрудники.Ссылка.Наименование КАК Наименование,
    | Сотрудники.Должность КАК Должность
    |ИЗ
    | Справочник.Сотрудники.ТрудоваяДеятельность КАК Сотрудники";

    ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();

    Область = Макет.ПолучитьОбласть("Шапка");
    ОбластьСотрудник = Макет.ПолучитьОбласть("данныеосотрудниках");

    Область.Параметры.ДатаОтчета = Формат(ТекущаяДата(), "ДЛФ=DD");

    ТабДок.Вывести(Область);

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбластьСотрудник.Параметры.Наименование = ВыборкаДетальныеЗаписи.Наименование;
    ОбластьСотрудник.Параметры.Должность = ВыборкаДетальныеЗаписи.Должность;

    ТабДок.Вывести(ОбластьСотрудник);
    КонецЦикла;

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

    &НаСервере
    Функция ПолучитьМакетНаСервере()
    Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    КонецФункции
```

Только в него выводятся все сотрудники и их должности, а не того которого я выбираю, реквизитом "Объект"