Ребят помогите разобраться. Нужно сделать внешнюю печатную форму к счету покупателя, создал внешнюю обработку макет, данные из счета приходят.
Но мне необходимо подтянуть еще Дополнительные сведения по документу - которые я для него создал. Лежат они в РегистрСведений.ДополнительныеСведения
Я в функции СформироватьПечатнуюФорму сделал Запрос, но никак не могу вытянуть данные из него на форму. Ниже пример кода, Запрос в общем модуле.

```1c
    Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати) Экспорт

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

    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет1");

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

    Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

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

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

    ТабДок.Очистить();

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

    ОбластьШапки.Параметры.Номер = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
    ОбластьШапки.Параметры.Дата = Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата,"ДЛФ=DD");

    Пока ВыборкаДетЗап.Следующий() Цикл

    ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;

    КонецЦикла;

    // Маркировка = РезультатЗапроса.Наименование;

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

    ОбластьДанные.Параметры.ДатаДокумента = Формат(СсылкаНаОбъект.Дата,"ДЛФ=DD");
    ОбластьДанные.Параметры.НомерСчета = СсылкаНаОбъект.Номер;
    ОбластьДанные.Параметры.Клиент = СсылкаНаОбъект.Контрагент;
    ОбластьДанные.Параметры.ИНН = СсылкаНаОбъект.Контрагент.ИНН;
    ОбластьДанные.Параметры.КПП = СсылкаНаОбъект.Контрагент.КПП;
    ОбластьДанные.Параметры.АдресДоставки = СсылкаНаОбъект.АдресДоставки;
    ОбластьДанные.Параметры.Исполнитель = СсылкаНаОбъект.Организация;
    ОбластьДанные.Параметры.ИННОрг = СсылкаНаОбъект.Организация.ИНН;
    ОбластьДанные.Параметры.КППОрг = СсылкаНаОбъект.Организация.КПП;
    ОбластьДанные.Параметры.АдресОрг = СсылкаНаОбъект.Организация;
    //ОбластьДанные.Параметры.Маркировка = Маркировка;

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

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

    Возврат ТабДок;

    КонецФункции // Печать()
```
---
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;

А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.

Как вариант можно попробовать следующее:

```1c
    // ошибки не смотрим, пишу в блокноте
    ДопПоля = новый Структура;
    Пока ВыборкаДетЗап.Следующий() Цикл

    ДоПоля.Вставить(ВыборкаДетЗап.Наименование, ВыборкаДетЗап.Значение);

    КонецЦикла;

    ОбластьДанные.Параметры.Заполнить(ДопПоля);
```
---
Здесь я для примера взял маркировку, есть еще товарный код, вид упаковки, вес и т.д. - это мне дали задание прикрутить к счету документ Экспедиторская расписка
---
Переделайте запрос так, чтобы в нём формировались нужные поля. Потом всего 1 строчкой кода:

```1c
    ОбластьДанные.Параметры.Заполнить(ВыборкаДетЗап);
```
---
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;

А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.

Как вариант можно попробовать следующее:

```1c
    // ошибки не смотрим, пишу в блокноте
    ДопПоля = новый Структура;
    Пока ВыборкаДетЗап.Следующий() Цикл

    ДоПоля.Вставить(ВыборкаДетЗап.Наименование, ВыборкаДетЗап.Значение);

    КонецЦикла;

    ОбластьДанные.Параметры.Заполнить(ДопПоля);
```
---
Спасибо, разобрался что нужно сопоставить наименование колонки и если совпадаает, беру оттуда значение.
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДополнительныеСведения.Объект,
    | ДополнительныеСведения.Значение,
    | ДополнительныеСведения.Свойство КАК Наименование,
    | СчетНаОплатуПокупателюТовары.Ссылка,
    | СчетНаОплатуПокупателюТовары.Номенклатура,
    | СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Дата,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо
    |ИЗ
    | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    | ПО ДополнительныеСведения.Объект = СчетНаОплатуПокупателюТовары.Ссылка
    |ГДЕ
    | ДополнительныеСведения.Объект.Ссылка = &СсылкаНаОбъект";

    Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

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

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

    ТабДок.Очистить();

    Пока ВыборкаДетЗап.Следующий() Цикл

    Если СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда

    ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Значение;
```
---
Плохой запрос. Нелогичный. Зачем объединять ДопСведения со счетом ? Правильней будет одним запросом выбрать поля счета, вторым доп сведения. И во вторых если у счета не будет указано ни одного доп сведения он и печататься не будет.
---
ДополнительныеСведения.Объект.Ссылка = &СсылкаНаОбъект

Не надо так делать. ДополнительныеСведения.Объект - это УЖЕ ссылка. Если тащить из него еще реквизит "ссылка" - будет неявное лишнее соединение таблиц.
---
в итоге сделал вот так, запрос изменил

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
    // | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
    | СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо,
    | ДополнительныеСведения.Свойство КАК Наименование,
    | ДополнительныеСведения.Значение КАК Значение
    |ИЗ
    | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    //| ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    | ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
    | ПО (СчетНаОплатуПокупателюТовары.Ссылка = ДополнительныеСведения.Объект)
    |ГДЕ
    | СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект";

    Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

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

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

    ТабДок.Очистить();

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

    ОбластьШапки.Параметры.Номер = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
    ОбластьШапки.Параметры.Дата = Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата,"ДЛФ=DD");

    Пока ВыборкаДетЗап.Следующий() Цикл

    СведенияОГрузоотправитель = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДетЗап.Грузоотправитель, ВыборкаДетЗап.Дата);
    СведенияОГрузополучателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДетЗап.Грузополучатель, ВыборкаДетЗап.Дата);

    Если СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда

    ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Значение;
```
---
Мда, А почему основная таблица у тебя ДополнительныеСведения, а не счет на оплату??? Ты же печатаешь счет и если у него указаны доп сведения их надо вывести.... Логично что основная таблица должна быть счет на оплату, а к ней уже левым соединением дополнительные сведения???

Но опять же это не лучший вариант.... Попробуй в консоли запросов выполнить свой код, и тот что ниже

```1c
    "ВЫБРАТЬ
    | СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
    // | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
    | СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо
    |ИЗ
    | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
    |ГДЕ
    | СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект;
    |///////////////////////////////////////////
    |Выбрать
    | ДополнительныеСведения.Свойство КАК Наименование,
    | ДополнительныеСведения.Значение КАК Значение
    |ИЗ
    | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    |ГДЕ
    | ДополнительныеСведения.Объект = &СсылкаНаОбъект";
```

Какой быстрее???
---
В итоге вышло вот так

```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
    // | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
    | СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
    | СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
    | СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо,
    | ДополнительныеСведения.Свойство КАК Наименование,
    | ДополнительныеСведения.Значение КАК Значение
    |ИЗ
    | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    //| ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    | ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
    | ПО (СчетНаОплатуПокупателюТовары.Ссылка = ДополнительныеСведения.Объект)
    |ГДЕ
    | СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект";

    Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);

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

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

    ТабДок.Очистить();

    Если СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда

    ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Значение;

    ИначеЕсли СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Товарный") Тогда

    ОбластьДанные.Параметры.ТоварныйКод = ВыборкаДетЗап.Значение;
```

Я после запроса решил делать поиск по наименованию, доп сведений не так много. Получилось все на ура, уже сдал