Доброго времени суток! Столкнулся с проблемой: не могу передать данные из документа в документ, который создаётся на его основании. Суть вот такая: есть документ (назовём его Первый) на его основании создаётся другой документ (Второй), а потом на основании Второго создаётся документ Третий. Так вот в Третий документ мне нужно передать значение реквизита Источник из Первого документа. Не могу понять как это сделать. Я сначала передавал значение из Первого во Второй, а потом в Третий и работало, но так делать не стоит, поэтому теперь пытаюсь передать напрямую из Первого в Третий.
Не подскажите, как можно реализовать?

P.S.
Вот код, который работал, когда я передавал последовательно

```1c
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда
    ЗаполнитьПоЗапросу(
    ДанныеЗаполнения,
    ДанныеЗаполнения);

    КонецЕсли;

    //Конец доработки

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

    //Новый код
    Процедура ЗаполнитьПоЗапросу(Знач Основание, ДанныеЗаполнения)

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

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда

    Источник = Выборка.Источник;

    КонецЕсли;

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

Документом основанием для ТелефонныйЗвонок является Справочник.Запросы и вот оттуда мне и надо передать реквизит Источник в Справочник.СделкиСКлиентами
---
ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Если да, тогда мы можем получить отсюда поле "ВзаимодействиеОснование". Далее определяем его тип, и если "ВзаимодействиеОснование" является ссылкой на справочник "Запросы", тогда можем заполнить поле "Источник" напрямую из ссылки на элемент справочника "Запросы".

UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
---
А если брать в третьем основание из второго, и потом уже из основания брать первый?
---
А если там цепочка из 10 документов? Или из 50? Нужна рекурсия.

UPD. Т.е. искать родителя до тех пор, пока мы не найдём первый документ в цепочке.
---
А если 10 000? То рекурсия завалит 1с...

А если там 100500 миллиардов? Так тут и Cray не поможет...
---
А что делать? Хотелки заказчика бывают разные...) Я сам столкнулся с подобной задачей, где может быть неопределенное количество посредников, только это происходит ещё и на СКД. Я плакал, пока писал, но выхода другого просто нет.

UPD. Кстати говоря, условие задачи то неполное. Нам всегда нужно поле "Источник" именно из первого документа в цепочке?
---
Поле Источник из Первого документа должно передаться в последний. Во втором документе этого поля может и не быть
---
Напишите ваше сообщение
(9)Но я его создал во втором документе, когда писал первый вариант кода
---
А как это можно сделать? Раньше с рекурсией не сталкивался
---
Я бы это делал так (ВНИМАНИЕ! Рекурсия! Предупреждаю, что при большом количестве записей быстродействие не гарантировано!)

```1c
    //Новый код
    Функция ЗаполнитьПоЗапросуРекурсивно(Знач Основание)

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

    // Передаём в запрос найденный нами родительский документ и выполняем запрос
    Запрос.УстановитьПараметр("Ссылка", Основание);
    Результат = Запрос.Выполнить();

    // Проверяем результат запроса на наличие данных, если их нет, возвращаем "Неопределено"
    Если Результат.Пустой() Тогда
    Возврат Неопределено;
    КонецЕсли;

    // Формируем выборку и обходим её.
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл

    НайденныйРодитель = ЗаполнитьПоЗапросуРекурсивно(Выборка.Родитель) ;

    КонецЦикла;

    // Возвращаем значение поля "Источник" у найденного первого (корневого) родительского документа
    Возврат НайденныйРодитель.Источник;

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

Работоспособность кода не проверял, будут ошибки, присылайте, исправлю.
---
Вот такая ошибка вылезает
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
{(2, 22)}: Поле не найдено "ТелефонныйЗвонок.ДокументОснование"
ТелефонныйЗвонок.<<?>>ДокументОснование КАК Родитель
{Справочник.СделкиСКлиентами.МодульОбъекта(212)}: Результат = Запрос.Выполнить();
{Справочник.СделкиСКлиентами.МодульОбъекта(176)}: ЗаполнитьПоЗапросуРекурсивно("Основание");

по причине:
{(2, 22)}: Поле не найдено "ТелефонныйЗвонок.ДокументОснование"
ТелефонныйЗвонок.<<?>>ДокументОснование КАК Родитель
---
Ну так я же не знаю, в каком поле у Вас лежит родительски документ.) Отредактируйте запрос так, чтобы получать родителя и всё.

UPD. Кстати, а в каком модуле выполняется код? Если в модуле объекта, то родителя можно передавать в запрос напрямую для первой итерации.
---
Да, в модуле объекта
---
А вот как передать родителя в запрос не понимаю
---
```1c
    // Выше какой-то код

    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда

    // Вот тут мы вызываем нашу рекурсивную функцию. В неё передаём ссылку на документ-основание
    ИсточникИзРодителя = ЗаполнитьПоЗапросу(ДокументОснование);

    КонецЕсли;

    //Конец доработки

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

    //Вот наша рекурсивная функция, сюда передали документ основание из последнего дочернего документа,
    //а на следующих итерациях будем передавать найденного родителя
    Функция ЗаполнитьПоЗапросуРекурсивно(Основание)

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

    // Передаём в запрос найденный нами родительский документ и выполняем запрос
    Запрос.УстановитьПараметр("Ссылка", Основание);
    Результат = Запрос.Выполнить();

    // Проверяем результат запроса на наличие данных, если их нет, возвращаем "Неопределено"
    Если Результат.Пустой() Тогда
    Возврат Неопределено;
    КонецЕсли;

    // Формируем выборку и обходим её.
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл

    Если Не Выборка.Родитель = Неопределено Тогда
    // Вот тут мы вызываем эту же функцию и передаём в неё найденного нами РОДИТЕЛЯ для того документа основания,
    // который мы передавали в запрос
    НайденныйРодитель = ЗаполнитьПоЗапросуРекурсивно(Выборка.Родитель) ;
    Иначе
    Возврат Неопределено;
    КонецЕсли;

    КонецЦикла;

    // Возвращаем значение поля "Источник" у найденного первого (корневого) родительского документа
    Возврат НайденныйРодитель.Источник;

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

Функция "ЗаполнитьПоЗапросуРекурсивно" вызывает сама себя, а в неё мы передаём найденного родителя во время обхода выборки.
---
ТелефонныйЗвонок.ДокументОснование поле в котором лежит родительскиий документ называется ВзаимодействиеОснование и является составным типом, как тогда его в запрос добавить?
---
Поле "Источник" лежит в каком документе? "ДокументСсылка.ТелефонныйЗвонок"? Мы именно его уже и передаём в запрос. Если хотите перебдеть, и 1000% передать именно его, тогда

```1c
    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда

    Если ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ТелефонныйЗвонок")
    // Вот тут мы вызываем нашу рекурсивную функцию. В неё передаём ссылку на документ-основание
    ИсточникИзРодителя = ЗаполнитьПоЗапросу(ВзаимодействиеОснование);
    КонецЕсли;

    КонецЕсли;
```

Так мы железобетонно передаём в запрос ссылку на нужный нам документ.
---
Поле источник лежит в Справочник.Запросы. Получается так: В справочник.Запросы есть "Источник", на основании этого справочника создаётся Документ.ТелефонныйЗвонок (в этом документе нет "Источника") и на основании Документ.ТелефонныйЗвонок создаётся Справочник.СделкиСКлиентами в котором уже есть "источник" и значение должно быть таким же, как и в первом справочнике
---
Что за конфигурация?
---
1С:Предприятие 8.3
      Управление торговлей, редакция 11.2 (11.2.3.199)
---
Так. У Вас, получается, данные лежат и не в документе вовсе, а в справочнике! Это же совершенно другая степь, условие задачи поставлено некорректно. Тут не нужна рекурсия в таком случае. Сделайте, пожалуйста, скрины справочника "Запросы" (реквизитный состав), документа "ТелефонныеЗвонки" и справочника "СделкиСКлиентами".
---
В Документ.ТелефонныйЗвонок есть "Источник", но я его удалю, так как его изначально та мне было, так что можно считать, что его нет
---
Сколько может быть документов "ТелефонныйЗвонок" между "Заявка" и "СделкаСКлиентом"? И может ли быть создан документ "ТелефонныйЗвонок" на основании другого документа "ТелефонныйЗвонок"?
---
Между Справочник.Запросы и Справочник.СделкаСКлиентом только один ТелефонныйЗвонок. ТелефонныйЗвонок может быть создан на основании ТелефонныйЗвонок
---
ТелефонныйЗвонок может быть создан на основании ТелефонныйЗвонок.

Так получается, что может быть несколько?)

Короче, в любом случае в документе "ТелефонныйЗвонок" будет ссылка на элемент справочника "Запросы"?

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

Я имею ввиду, что когда я нахожусь в Справочник.Запросы я могу создать на его основании Документ.ТелефонныйЗвонок, далее в Документ.ТелефонныйЗвонок я могу создать на его основании только Справочник.СделкиСКлиентами (на этом этапе я не могу снова создать телефонный звонок)
---
Ну так а в чём проблема то тогда? На основании "ТелефонныйЗвонок" создаёте сделку, ставите следующее условие

```1c
    Если ТипЗнч(ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявка") Тогда
    Источник = ВзаимодействиеОснование.Источник;
    Иначе
    // Вот сюда исключительный случай, если в основании лежит не элемент справочника "Заявка"
    КонецЕсли;
```

Всё. Всё это делается в процедуре, обрабатывающей заполнение элемента справочника на основании данных из документа.
---
Что-то я уже окончательно запутался в коде. Не могли бы Вы дать пример полного кода как оно должно быть всё в месте?
---
Скиньте сюда всю процедуру заполнения элемента справочника "СделкиСКлиентами" на основании документа "ТелефонныйЗвонок".
---
```1c
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

    Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
    Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
    ДанныеЗаполнения.Закрыта = Ложь;
    КонецЕсли;
    КонецЕсли;

    Ответственный = Пользователи.ТекущийПользователь();
    Статус = Перечисления.СтатусыСделок.ВРаботе;
    ДатаНачала = ТекущаяДата();

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
    //сделка на основании партнера
    Партнер = ДанныеЗаполнения;
    ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);

    Иначе

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда

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

    Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);

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

    Если Выборка.Следующий() Тогда

    Если НЕ Выборка.Клиент Тогда

    ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
    ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);

    ВызватьИсключение ТекстОшибки;

    Иначе

    Партнер = Выборка.Ссылка;

    КонецЕсли;

    КонецЕсли;

    КонецЕсли;

    Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);

    КонецЕсли;

    Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда

    ЗаполнитьУсловияПродаж();

    КонецЕсли;

    ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
    //выше код ОбработкаЗаполнения
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда

    ЗаполнитьПоЗапросуРекурсивно("Основание");

    КонецЕсли;

    //Конец доработки

    КонецПроцедуры
```
---
```1c
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

    Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
    Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
    ДанныеЗаполнения.Закрыта = Ложь;
    КонецЕсли;
    КонецЕсли;

    Ответственный = Пользователи.ТекущийПользователь();
    Статус = Перечисления.СтатусыСделок.ВРаботе;
    ДатаНачала = ТекущаяДата();

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
    //сделка на основании партнера
    Партнер = ДанныеЗаполнения;
    ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);

    Иначе

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда

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

    Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);

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

    Если Выборка.Следующий() Тогда

    Если НЕ Выборка.Клиент Тогда

    ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
    ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);

    ВызватьИсключение ТекстОшибки;

    Иначе

    Партнер = Выборка.Ссылка;

    КонецЕсли;

    КонецЕсли;

    КонецЕсли;

    Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);

    КонецЕсли;

    Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда

    ЗаполнитьУсловияПродаж();

    КонецЕсли;

    ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
    //выше код ОбработкаЗаполнения
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

    // Если создаём "Сделку" на основании документа "ТелефонныйЗвонок"
    //и в основании телефонного звонка ссылка на справочник "Заявки" тогда вытаскиваем "Источник" из справочника напрямую
    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и
    ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявки") Тогда
    Источник = ТипДанныхЗаполнения.ВзаимодействиеОснование.Источник;
    Иначе
    // Реализуем заполнение в исключительных случаях по другой необходимой логике
    КонецЕсли;

    //Конец доработки

    КонецПроцедуры
```
---
Вот такая ошибка
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявки") Тогда
---
ТипДанныхЗаполнения - какой тип данных?
---
ДокументСсылка.ТелефонныйЗвонок
---
Я нашёл свою ошибку.) Невнимательность-с.))

```1c
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

    Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
    Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
    ДанныеЗаполнения.Закрыта = Ложь;
    КонецЕсли;
    КонецЕсли;

    Ответственный = Пользователи.ТекущийПользователь();
    Статус = Перечисления.СтатусыСделок.ВРаботе;
    ДатаНачала = ТекущаяДата();

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
    //сделка на основании партнера
    Партнер = ДанныеЗаполнения;
    ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);

    Иначе

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда

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

    Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);

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

    Если Выборка.Следующий() Тогда

    Если НЕ Выборка.Клиент Тогда

    ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
    ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);

    ВызватьИсключение ТекстОшибки;

    Иначе

    Партнер = Выборка.Ссылка;

    КонецЕсли;

    КонецЕсли;

    КонецЕсли;

    Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);

    КонецЕсли;

    Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда

    ЗаполнитьУсловияПродаж();

    КонецЕсли;

    ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
    //выше код ОбработкаЗаполнения
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

    // Если создаём "Сделку" на основании документа "ТелефонныйЗвонок"
    //и в основании телефонного звонка ссылка на справочник "Заявки" тогда вытаскиваем "Источник" из справочника напрямую
    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и
    ТипЗнч(ДанныеЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
    Источник = ДанныеЗаполнения.ВзаимодействиеОснование.Источник;
    Иначе
    // Реализуем заполнение в исключительных случаях по другой необходимой логике
    КонецЕсли;

    //Конец доработки

    КонецПроцедуры
```
---
Я уже исправил это, но ошибка та же самая
---
Если быть точнее то
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
---
У Вас есть Anydesk? Проще будет сделать таким образом.)
---
Нет, к сожалению нету
---
Да и не смогу я его по объективным причинам поставить на рабочий компьютер
---
Я Вас понял. В режиме отладки посмотрите, каким образом можно через "ДанныеЗаполнения" обратиться к "ВзаимодействиеОснование". Всё, что выше - это всё предположения, пока мы не увидим реальной картины в режиме отладки, ничего не получиться сделать.
---
Я не туда посмотрел! ТипДанныхЗаполнения написано "Тип", значение "Телефонный звонок"
---
ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Если да, тогда мы можем получить отсюда поле "ВзаимодействиеОснование". Далее определяем его тип, и если "ВзаимодействиеОснование" является ссылкой на справочник "Запросы", тогда можем заполнить поле "Источник" напрямую из ссылки на элемент справочника "Запросы".

UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
---
ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Да именно так
---
ВзаимодействиеОснование является СправочникСсылка.Запросы
---
ВзаимодействиеОснование является СправочникСсылка.Запросы

Это не имеет особого значения. Вы можете сделать вот так: ДанныеЗаполнения.ВзаимодействиеОснование? Поле доступно? Проверьте в режиме отладки.
---
Всё заработало.
Вот так

```1c
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

    Источник = ДанныеЗаполнения.ВзаимодействиеОснование.Источник;
```

Спасибо Вам большое!
---
Нет проблем.)
---
Как я уже описал ниже, так не получится
---
Вообще, рекурсивная функция, это функция, которая вызывает сама себя до момента, пока не будет прерван цикл (то бишь рекурсия). Логика такова, что мы запросом ищем родителя, и передаём найденного родителя в эту же функцию, где для уже найденного родителя будет искаться родитель. Поиск будет осуществляться до тех пор, пока мы не дойдём до первого документа в цепочке (в поле "ДокументОснование" у такого документа будет NULL, Неопределено или ПустаяСсылка()).
---
А как это реализовать?
---
выбрать док2.ДокументОснование.Источник
ИЗ Документ.Документ2 КАК док2
ГДЕ док2.Ссылка = &текДокОснование

(это если док2.ДокументОснование - реквизит несоставной. если составной, то лучше явно левосоединять)
---
А про регистр сведений никто не думал?
---
А в нём есть связь "Первый" - "Последний" по цепочке документов? Или только "Первый" - "Второй", "Второй" - "Третий" и так далее?
---
Как построите. Я бы делал РС вида ДокументN - Документ1.
Тогда по одной цепочке будет
Документ1 - Документ1
При записи документN, у нас по основанию документ(n-1), который мы ищем в измерении регистра, находим, и делаем запись, как указал выше.
---
Ну строю не я.) Я не в курсе, какова структура хранения связей документов у ТС. Предлагаю то решение, которое будет работать 100%, вне зависимости от наличия регистра. Решение не супер оптимальное, в плане производительности, но точно эффективное.)