Здравствуйте!
Делаю печатную форму элемента справочника. На форме элемента справочника есть ТЧ1 с реквизитом "Клиент" (справочник Клиенты). Перебираю запросом эту ТЧ1, получаю выборку из, допустим, 6-ти строк. Дальше для каждой из этих 6-строк обращаюсь к ТЧ2. Получаю различное количество результатов. С этим кодом проблем нет.

Но как вывести на печатную форму именно по такой схеме? Причем, например, во 2 столбце может и не быть данных.

ТЧ1.Строка1 ТЧ1.Строка2 ТЧ1.Строка3 ….. ТЧ1.СтрокаN

ТЧ2.Строка1 ТЧ2.Строка1 ТЧ2.Строка1
ТЧ2.Строка2 ТЧ2.Строка2 .....................
ТЧ2.Строка3 ТЧ2.Строка3 ТЧ2.СтрокаN
ТЧ2.Строка4 .....................
ТЧ2.Строка5 ТЧ2.СтрокаN
ТЧ2.Строка6
.....................
ТЧ2.СтрокаN
---
Спасибо всем за участие. Все получилось (помог профи).
Оставлю здесь, может кому-то пригодится.

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

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

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Шапка.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(Шапка);

    ОбластьДети = Макет.ПолучитьОбласть("Дети");
    ОбластьВнуки = Макет.ПолучитьОбласть("Внуки");

    ТЧ1=Выборка.ДетиСупруги.Выбрать();
    МассивТДДетей = Новый Массив;

    Пока ТЧ1.Следующий() Цикл
    ТДДети = Новый ТабличныйДокумент;

    ОбластьДети.Параметры.Ребенок = ТЧ1.Ребенок;
    ТДДети.Вывести(ОбластьДети);

    ТекРебенок=ТЧ1.Ребенок;
    ТЧ2=ТекРебенок.ДетиСупруги;
    НеЗаполнено="нет";

    Если ТЧ2.Количество()=0 Тогда
    ОбластьВнуки.Параметры.внук=Строка(НеЗаполнено);
    ТДДети.Вывести(ОбластьВнуки);
    Иначе
    Для каждого стр из ТЧ2 Цикл
    ОбластьВнуки.Параметры.Внуки = стр.Ребенок;
    ТДДети.Вывести(ОбластьВнуки);
    КонецЦикла;
    КонецЕсли;

    МассивТДДетей.Добавить(ТДДети);
    КонецЦикла;

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

    Для Каждого ТДок ИЗ МассивТДДетей Цикл
    ТДВсеДети.Присоединить(ТДок);
    КонецЦикла;

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

    КонецЦикла;
    Возврат ТабДок;
    КонецФункции
```
---
Делаете 2 цикла, один по строкам (от 0 по таб1.Количество() ) второй по колонкам. В тех местах где нет значения в исходной таблице - выводите пустое значение в параметр "".
---
Зафиксировать количество колонок, потом для каждой строки перебор по колонкам, получение данных. Первая ячейка в строке Вывести(), остальные Присоединить();
---
Екатерина, не поняла. Можно чуть поподробнее.
---
Таб док, в нем две секции: ШапкаКолонки(параметр ИМЯ), СтрокаКолонки(параметр ЗНАЧЕНИЕ). Колонки ТЧ2 должны идентифицироваться по строкам ТЧ1. Код примерный:

```1c
    КоличествоКолонок = ТЧ1.Количество();
    //выведем шапку
    Для ш=1 по КОличествоКОлонок Цикл
    ОбластьШапкаКолонки.Параметры.Имя = ТЧ1[ш-1].Клиент;
    Если ш=1 тогда
    ТабДок.Вывести(ОбластьШапкаКолонки);
    Иначе
    ТабДок.Присоединить(ОбластьШапкаКолонки);
    КонецЕсли;
    КонецЦикла;
    //Выведем строки
    Для каждого стр из ТЧ2 Цикл
    Первая=Истина;
    Для ш=1 по КоличествоКолонок Цикл
    ОбластьСтрокаКолонки.Параметры.Значение = стр[ИдентификаторКолонкиДляИтератораШ];
    Если Первая Тогда
    ТабДок.Вывести(ОбластьСтрокаКолонки);
    Первая=Ложь;
    Иначе
    ТабДок.Присоединить(ОбластьСтрокаКолонки);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
```
---
Екатерина, поскольку я бьюсь над этой задачей уже третьи сутки, заранее приношу извинения за временный тупизм))
ТЧ1 и ТЧ2 связаны между собой. Нужно сначала обращаться в цикле1 к ТЧ1, и внутри этого цикла к ТЧ2.
Я нарисовала уже более конкретную схему, посмотрите прикрепленный файл, пожалуйста.
---
Ну и? Я ж написала даже код, в нужных местах вставляете свои поиски по своим идентификаторам.
---
Спасибо всем за участие. Все получилось (помог профи).
Оставлю здесь, может кому-то пригодится.

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

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

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
    Шапка.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(Шапка);

    ОбластьДети = Макет.ПолучитьОбласть("Дети");
    ОбластьВнуки = Макет.ПолучитьОбласть("Внуки");

    ТЧ1=Выборка.ДетиСупруги.Выбрать();
    МассивТДДетей = Новый Массив;

    Пока ТЧ1.Следующий() Цикл
    ТДДети = Новый ТабличныйДокумент;

    ОбластьДети.Параметры.Ребенок = ТЧ1.Ребенок;
    ТДДети.Вывести(ОбластьДети);

    ТекРебенок=ТЧ1.Ребенок;
    ТЧ2=ТекРебенок.ДетиСупруги;
    НеЗаполнено="нет";

    Если ТЧ2.Количество()=0 Тогда
    ОбластьВнуки.Параметры.внук=Строка(НеЗаполнено);
    ТДДети.Вывести(ОбластьВнуки);
    Иначе
    Для каждого стр из ТЧ2 Цикл
    ОбластьВнуки.Параметры.Внуки = стр.Ребенок;
    ТДДети.Вывести(ОбластьВнуки);
    КонецЦикла;
    КонецЕсли;

    МассивТДДетей.Добавить(ТДДети);
    КонецЦикла;

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

    Для Каждого ТДок ИЗ МассивТДДетей Цикл
    ТДВсеДети.Присоединить(ТДок);
    КонецЦикла;

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

    КонецЦикла;
    Возврат ТабДок;
    КонецФункции
```