Уважаемые разработчики, прошу вашего совета. Не могу разобраться, как сделать. Есть документ, в котором две табличных части "РаботникиОРганизации" и "Покупки". В первой табличной части список людей (физЛицо - Справочник. ФизЛица), а во второй табличной части каждая строка состоит из ссылки на физЛица и дата покупки (ДатаПокупки). В первой табличной части встаем на человека, во второй таблице отображаются его покупки.

```1c
    Док = Неопределено;
    ДокВыборка = Документы.Наши_Документы.Выбрать(НачДата, КонДата);
    Пока ДокВыборка.Следующий() Цикл
    Если ДокВыборка.Проведен Тогда
    Док = ДокВыборка.ПолучитьОбъект();

    Для Каждого СтрокаТабЧастиФио из Док.РаботникиОрганизации Цикл
    физ = СтрокаТабЧастиФио.ФизЛицо.Ссылка;

    Фамилия = физ.Фамилия;
    Имя = физ.Имя;

    //Покупки
    Запрос = Новый Запрос;
    Запрос.Текст = "Выбрать
    |ДокументЗаписиОПокупки.ДатаПокупки Как ДатаПокупки,
    |ИЗ
    | Документ.Наши_Документы.Покупки Как ДокументЗаписиОПокупки
    |ГДЕ
    | Документ.Наши_Документы.Ссылка = Док
    | И ДокументЗаписиОПокупкие.ФизЛицо = &ФизЛицо";
    Запрос.УстановитьПараметр("ФизЛицо", физ);
    Запрос.УстановитьПараметр("Докум", Док);

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    ДатаПокупки = Формат(Выборка.ДатаПокупки, "ДЛФ=Д");
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```

Ошибку выдает "Поле не найдено "Документ.Наши_Документы.Ссылка"".
---
И чем это я вас оскорбил?

Начнем с того , что изначально - то что вы хотите сделать называется НЕ отчет, а обработка, которая будет выводить информацию по документам.
Отчет формируется 1 раз и не способен активно взаимодействовать с пользователем после вывода информации.

Вам же необходима обработка, которая отбирает данные по физлицам из отобранного списка документов (за период) .

Поэтому и создавать нужно обработку и ФОРМУ обработки, в которой будет отбор документов по периоду и 2 табличных поля - верхнее физ лица, нижнее даты покупки. Данные для верхнего табличного поля - таблица значений из всех физ лиц ВСЕХ отобранных документов.
Заполняется после заполнения условий отбора - дат
Запросом

```1c
    Выбрать РАЗЛИЧНЫЕ
    РаботникиОрганизации.ФизЛицо,
    ИЗ
    Документ.Наши_Документы.РаботникиОрганизации Как РаботникиОрганизации
    ГДЕ
    РаботникиОрганизации.Ссылка.Дата Между &НачДата И &КонДата

    Запрос.УстановитьПараметр("НачДата ", НачДата );
    Запрос.УстановитьПараметр("КонДата", КонДата);
    =====================================================
```

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

```1c
    Выбрать
    ДокументЗаписиОПокупки.ДатаПокупки,
    ИЗ
    Документ.Наши_Документы.Покупки Как ДокументЗаписиОПокупки
    ГДЕ
    ДокументЗаписиОПокупки.Ссылка.Дата Между &НачДата И &КонДата
    И ДокументЗаписиОПокупкие.ФизЛицо = &ФизЛицо

    Запрос.УстановитьПараметр("ФизЛицо", физ);
    Запрос.УстановитьПараметр("НачДата ", НачДата );
```

На этом - ВСЕ
---
Вы должны были в форме использовать обработку событий формы...
И там настраивать факт "встаем на человека" - и этому событию присваивать процедуру обработки...

У вас же вообще непонятно , что да еще с ошибками

| Документ.Наши_Документы.Ссылка = Док
| И ДокументЗаписиОПокупкие.ФизЛицо = &ФизЛицо";
Запрос.УстановитьПараметр("ФизЛицо", физ);
Запрос.УстановитьПараметр("Докум", Док);

Что такое = Док

А вот это по вашему для чего вы сделали
Как ДокументЗаписиОПокупки
Если потом пишете

```1c
    ГДЕ
    | Документ.Наши_Документы.
```

Да еще некрасиво использовать Запросы одновременно с ДокВыборка = Документы.Наши_Документы.Выбрать(НачДата, КонДата);
Просто очень непрофессионально это...

Этот код ВЕСЬ однозначно - в топку
---
У меня выборка используется для выборки документов, потом идет цикл по первой табличной части. А потом использую запрос для выборки записей из второй табличной части. Если подскажите как правильнее и лучше - подскажите. А не ругайте сразу.
---
Ваш код - кошмар, летящий в ночи!
Вы озвучили одну задачу а код , мало того что ужасный, так он еще и совершенно не отсюда, то есть даже не приближается к решению..
---
присоединяюсь, для связи строк между двумя ТЧ можно использовать отбор
вот пример (даже не уверен, сможете ли адаптировать/применить его для своей задачи)

```1c
    //в первой ТЧ там где мышкой тыкаете в Физ.лицо, событие ПриАктивизацииСтроки
    Процедура тзПользователиПриАктивизацииСтроки(Элемент)
    лкСтр = ЭлементыФормы.тзСотрудники.ТекущаяСтрока;
    Если лкСтр = Неопределено Тогда

    Иначе
    УстановитьОтбор(лкСтр.Сотрудник);
    КонецЕсли;
    КонецПроцедуры

    Процедура УстановитьОтбор(лкСотрудник)

    лкОтбор = ЭлементыФормы.тзДокументы.ОтборСтрок;
    лкОтбор.Сотрудник.Использование = Истина;
    лкОтбор.Сотрудник.ВидСравнения = ВидСравнения.Равно;
    лкОтбор.Сотрудник.Значение = лкСотрудник;

    КонецПроцедуры
```
---
Мне не нужна связь между таблицами в документе. Документ работает правильно. Мне в отчете надо вывести список людей с датой и суммой их покупки. Просто документ так устроен, что в нем две табличных части.
---
и что, документ называется "Наши_Документы" ?
Это что за имя такое ? У меня ощущение, что вам дали пример...а вы его как есть использовали, и даже к именам метаданных не переделали
---
В сообщении я заменила настоящее имя документа на Наши_Документы. Это ошибка?
---
В сообщении я заменила настоящее имя документа на Наши_Документы. Это ошибка?
ну выдает то у вас ошибку, что поле не найдено...
откуда нам знать, что у вас там не так, что вы там подменили..и как сделать правильно, если вы кусками еще и предоставленный код видоизменили.

Юзайте конструктор, через него ошибки с отсутсвующими полями - сложно получить
---
Извините, изменила только имя документа
---
Напишите в запросе "где документ записиопокупке.ссылка =док" и ошибка уйдёт
---
Ошибка ушла. Но ко второй табличной части вообще не обращается.
---
Извините, сам документ работает нормально и правильно. Нужно создать отчет: Из документов Наши_документы выбрать людей с их покупками. И извините за не профессионализм - я только учусь
---
```1c
    ДокументЗаписиОПокупки.ДатаПокупки Как ДатаПокупки,
    ИЗ
    Документ.Наши_Документы.Покупки Как ДокументЗаписиОПокупки
    ГДЕ
    ДокументЗаписиОПокупки.Ссылка = &Докум
    И ДокументЗаписиОПокупкие.ФизЛицо = &ФизЛицо
```

Исправьте запрос и все заработает
---
Извините, выдает сообщение " Поле не найдено "ДокументЗаписиОПокупки.Наши_Документы.Ссылка"
ДокументЗаписиОПокупки.<<?>>Наши_Документы.Ссылка = &Докум
---
Исправил 8 сообщение -= скопируйте еще раз
---
Спасибо, ошибку не выдает. Но ко второй табличной части не обращается. Запрос не работает
---
К какой ВТОРОЙ табличной части?
Вам уже разжевали все , что ваш код не предназначен для решения озвученной задачи...
Вы сами сказали, что на самом деле это вообще отчет, а не документ...
Вы просто поймите - вы занимаетесь НЕ ТЕМ!
---
Как вы суровы. Вроде я никого не оскорбляла, просто попросила совета и разъяснения. Да, я формирую отчет. Я показала как я вижу решение обратиться ко второй табличной части. Если неправильно, дайте наметку как как можно решить этот вопрос, а не оскорбляйте.
---
И чем это я вас оскорбил?

Начнем с того , что изначально - то что вы хотите сделать называется НЕ отчет, а обработка, которая будет выводить информацию по документам.
Отчет формируется 1 раз и не способен активно взаимодействовать с пользователем после вывода информации.

Вам же необходима обработка, которая отбирает данные по физлицам из отобранного списка документов (за период) .

Поэтому и создавать нужно обработку и ФОРМУ обработки, в которой будет отбор документов по периоду и 2 табличных поля - верхнее физ лица, нижнее даты покупки. Данные для верхнего табличного поля - таблица значений из всех физ лиц ВСЕХ отобранных документов.
Заполняется после заполнения условий отбора - дат
Запросом

```1c
    Выбрать РАЗЛИЧНЫЕ
    РаботникиОрганизации.ФизЛицо,
    ИЗ
    Документ.Наши_Документы.РаботникиОрганизации Как РаботникиОрганизации
    ГДЕ
    РаботникиОрганизации.Ссылка.Дата Между &НачДата И &КонДата

    Запрос.УстановитьПараметр("НачДата ", НачДата );
    Запрос.УстановитьПараметр("КонДата", КонДата);
    =====================================================
```

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

```1c
    Выбрать
    ДокументЗаписиОПокупки.ДатаПокупки,
    ИЗ
    Документ.Наши_Документы.Покупки Как ДокументЗаписиОПокупки
    ГДЕ
    ДокументЗаписиОПокупки.Ссылка.Дата Между &НачДата И &КонДата
    И ДокументЗаписиОПокупкие.ФизЛицо = &ФизЛицо

    Запрос.УстановитьПараметр("ФизЛицо", физ);
    Запрос.УстановитьПараметр("НачДата ", НачДата );
```

На этом - ВСЕ
---
Спасибо большое! Буду стараться делать. Завтра отпишусь, что получилось
---
коллега, на уровне форм при активации строки перезаполнять не всегда хорошо. Для связи табличных частей есть замечательная вещь - отборы. Элементы.ТЧ.ОтборСтрок = новый фиксированнаяСтруктура("ПолеОтбора", ЗначениеОтбора)
С динамическим списком несколько иначе, но принцип тот же.
---
Ваш код выбирает ВСЕ документы за период скажем 1000000 документов, потом для КАЖДОГО обращается к его табличной части РаботникиОРганизации и для КАЖДОЙ строчки ФизЛицо выводит все Даты покупки из табличной части Покупки ....
Получите Огромную кучу данных

Это вообще-то не то что вы хотели!

Кроме того вы не понимаете смысл строки
Док = ДокВыборка.ПолучитьОбъект();
Зачем это написали?
---
Именно то что вы написали - я и хочу. А строку ПолучитьОбъект(). Я написала чтоб зафиксировать этот документ. И обращаться ко второй таблице именно этого документа. Я недавно программирую. Если можно как то по-другому - скажите хотя бы направление.
---
Что значат ваши слова зафиксировать этот документ?
Повнимательнее прочтите ЧТО делает функция ПолучитьОбъект()
Она нужна только в одном случае - вы хотите ИЗМЕНИТЬ данные в полученном объекте - другой причины обратиться к ней не существует
---
Спасибо за спокойный тон и за объяснения.
А после выполнения этого запроса:

```1c
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    ФизЛицо= Выборка.Физлицо

    ТекстЗапроса1="Выбрать
    ПокупкиФИО.Дата,
    ИЗ
    Документ.Наши_Документы.Покупки Как ПокупкиФИО
    ГДЕ
    ПокупкиФИО.ФизЛицо = ФИО
    Запрос1.УстановитьПараметр("ФИО ", Физлицо );

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

    КонецЦикла;
```

Так будет правильно?
---
этого вообще не должно быть НИГДЕ!

```1c
    Пока Выборка.Следующий() Цикл
    ФизЛицо= Выборка.Физлицо
```

Вы физлицо -одно выбирать же вручную собираетесь, зачем же ВСЕХ сразу получать в этих строках ...
------------------------------------------------------------

У вашего Объекта долно быть 2 табличных части - ВерхняяТабличнаячасть и НижняяТабличнаячасть
Они будут заполняться запросами

Должно быть заполнение верхней табличной части, источником данных, которой является

```1c
    РезултатЗапроса= Запрос.Выполнить().Выгрузить();
    Объект.ВерхняяТабличнаячасть.Загрузить(РезултатЗапроса);
```

================================================

Во-вторых вы получили уже выборку в верхнее окно?
Вот когда получите - ТОЛЬКО тогда продолжайте!
И как я уже написал - это будет совсем другая процедура... см картинку
В ней должна быть реакция на ваш выбор в нижнем табличном поле :

```1c
    Процедура ПриАктивацииСтроки(Элемент)

    //Сначала надо очистить таблицу от предыдущих данных
    Объект.НижняяТабличнаяЧасть.Очистить();

    Если НЕ ЭтаФорма.Элементы.ВерхняяТаблица.ТекущиеДанные=Неопределено Тогда
    //Получаем значение физлица из строки на котором ткнули мышкой...
    физЛИЦО=ЭтаФорма.Элементы.НижняяТаблица.ТекущиеДанные.ФизЛицо;
    Конецесли;

    Запрос.УстановитьПараметр("ФизЛицо", физЛИЦО);
    Запрос.УстановитьПараметр("НачДата ", НачДата );
    Запрос.Текст=
    "ВЫБРАТЬ
    ДокументЗаписиОПокупки.ДатаПокупки
    ИЗ
    Документ.Наши_Документы.Покупки Как ДокументЗаписиОПокупки
    ГДЕ
    ДокументЗаписиОПокупки.Ссылка.Дата Между &НачДата И &КонДата
    И ДокументЗаписиОПокупкие.ФизЛицо = &ФизЛицо";

    РезултатЗапроса= Запрос.Выполнить().Выгрузить();
    Объект.НижняяТабличнаячасть.Загрузить(РезултатЗапроса);

    КонецПроцедуры // ПриАктивациСтроки
```
---
После того как сделаете Обработку и форму, приведите пожалуйста весь код из вашей формы, что у вас получился, чтобы мы не говорили про Фому и Ерему....
---
Спасибо огромное!!! Ваши объяснения и советы очень помогли! Отчет заработал. Понимаете мне нужен был именно отчет, а не обработка. Надо было выбирать именно всех людей, а не по одному. Результат этих выборок мне надо записать в текстовый файл (физЛицо + данные из 2 регистров по Физлицам + Покупка + данные из регистра по конкретной покупки). Текстовый файл передается в головной офис.
Я раньше программировала на 7.7, а в 8 стала пробовать совсем недавно.
Основная моя ошибка - это то что я по старинке (как в 7.7) начала выборку с документов. А когда вы написали, что надо начинать с табличной части ФизЛиц, а потом объяснили как обратиться к табличной части Покупки. Все заработало. Еще раз огромное спасибо!! И успехов вам!!!