Доброго времени суток! Столкнулся с проблемой: не могу передать данные из документа в документ, который создаётся на его основании. Суть вот такая: есть документ (назовём его Первый) на его основании создаётся другой документ (Второй), а потом на основании Второго создаётся документ Третий. Так вот в Третий документ мне нужно передать значение реквизита Источник из Первого документа. Не могу понять как это сделать. Я сначала передавал значение из Первого во Второй, а потом в Третий и работало, но так делать не стоит, поэтому теперь пытаюсь передать напрямую из Первого в Третий.
Не подскажите, как можно реализовать?
P.S.
Вот код, который работал, когда я передавал последовательно
Документом основанием для ТелефонныйЗвонок является Справочник.Запросы и вот оттуда мне и надо передать реквизит Источник в Справочник.СделкиСКлиентами
Не подскажите, как можно реализовать?
P.S.
Вот код, который работал, когда я передавал последовательно
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда
ЗаполнитьПоЗапросу(
ДанныеЗаполнения,
ДанныеЗаполнения);
КонецЕсли;
//Конец доработки
КонецПроцедуры
//Новый код
Процедура ЗаполнитьПоЗапросу(Знач Основание, ДанныеЗаполнения)
Запрос = Новый Запрос("ВЫБРАТЬ
| ТелефонныйЗвонок.Источник КАК Источник
|ИЗ
| Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок
|ГДЕ
| ТелефонныйЗвонок.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Основание);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Источник = Выборка.Источник;
КонецЕсли;
КонецПроцедуры
ПоказатьДокументом основанием для ТелефонныйЗвонок является Справочник.Запросы и вот оттуда мне и надо передать реквизит Источник в Справочник.СделкиСКлиентами
По теме из базы знаний
- Перенос документов из УТ 11 в БП 3.0
- Обмен документами Поступления-Реализации и Счетами-фактурами в базах 1С Бухгалтерия 8.2, 8.3 с возможностью преобразования
- Формирование цепочки документов (Реализация - Поступление - Реализация ..... - Поступление)
- Переход с УПП на ERP с сохранением документов. Фантастика или реальность?
- Интеграция Честный Знак и 1C: обмен и синхронизация с маркировками для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
Найденные решения
(53) ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Если да, тогда мы можем получить отсюда поле "ВзаимодействиеОснование". Далее определяем его тип, и если "ВзаимодействиеОснование" является ссылкой на справочник "Запросы", тогда можем заполнить поле "Источник" напрямую из ссылки на элемент справочника "Запросы".
UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) А что делать? Хотелки заказчика бывают разные...) Я сам столкнулся с подобной задачей, где может быть неопределенное количество посредников, только это происходит ещё и на СКД. Я плакал, пока писал, но выхода другого просто нет.
UPD. Кстати говоря, условие задачи то неполное. Нам всегда нужно поле "Источник" именно из первого документа в цепочке?
UPD. Кстати говоря, условие задачи то неполное. Нам всегда нужно поле "Источник" именно из первого документа в цепочке?
(7) Я бы это делал так (ВНИМАНИЕ! Рекурсия! Предупреждаю, что при большом количестве записей быстродействие не гарантировано!)
Работоспособность кода не проверял, будут ошибки, присылайте, исправлю.
//Новый код
Функция ЗаполнитьПоЗапросуРекурсивно(Знач Основание)
Запрос = Новый Запрос("ВЫБРАТЬ
| ТелефонныйЗвонок.ДокументОснование КАК Родитель
|ИЗ
| Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок
|ГДЕ
| ТелефонныйЗвонок.Ссылка = &Ссылка");
// Передаём в запрос найденный нами родительский документ и выполняем запрос
Запрос.УстановитьПараметр("Ссылка", Основание);
Результат = Запрос.Выполнить();
// Проверяем результат запроса на наличие данных, если их нет, возвращаем "Неопределено"
Если Результат.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
// Формируем выборку и обходим её.
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НайденныйРодитель = ЗаполнитьПоЗапросуРекурсивно(Выборка.Родитель) ;
КонецЦикла;
// Возвращаем значение поля "Источник" у найденного первого (корневого) родительского документа
Возврат НайденныйРодитель.Источник;
КонецФункции
ПоказатьРаботоспособность кода не проверял, будут ошибки, присылайте, исправлю.
(11) Вот такая ошибка вылезает
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
{(2, 22)}: Поле не найдено "ТелефонныйЗвонок.ДокументОснование"
ТелефонныйЗвонок.<<?>>ДокументОснование КАК Родитель
{Справочник.СделкиСКлиентами.МодульОбъекта(212)}: Результат = Запрос.Выполнить();
{Справочник.СделкиСКлиентами.МодульОбъекта(176)}: ЗаполнитьПоЗапросуРекурсивно("Основание");
по причине:
{(2, 22)}: Поле не найдено "ТелефонныйЗвонок.ДокументОснование"
ТелефонныйЗвонок.<<?>>ДокументОснование КАК Родитель
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
{(2, 22)}: Поле не найдено "ТелефонныйЗвонок.ДокументОснование"
ТелефонныйЗвонок.<<?>>ДокументОснование КАК Родитель
{Справочник.СделкиСКлиентами.МодульОбъекта(212)}: Результат = Запрос.Выполнить();
{Справочник.СделкиСКлиентами.МодульОбъекта(176)}: ЗаполнитьПоЗапросуРекурсивно("Основание");
по причине:
{(2, 22)}: Поле не найдено "ТелефонныйЗвонок.ДокументОснование"
ТелефонныйЗвонок.<<?>>ДокументОснование КАК Родитель
(13) Ну так я же не знаю, в каком поле у Вас лежит родительски документ.) Отредактируйте запрос так, чтобы получать родителя и всё.
UPD. Кстати, а в каком модуле выполняется код? Если в модуле объекта, то родителя можно передавать в запрос напрямую для первой итерации.
UPD. Кстати, а в каком модуле выполняется код? Если в модуле объекта, то родителя можно передавать в запрос напрямую для первой итерации.
(16)
Функция "ЗаполнитьПоЗапросуРекурсивно" вызывает сама себя, а в неё мы передаём найденного родителя во время обхода выборки.
// Выше какой-то код
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда
// Вот тут мы вызываем нашу рекурсивную функцию. В неё передаём ссылку на документ-основание
ИсточникИзРодителя = ЗаполнитьПоЗапросу(ДокументОснование);
КонецЕсли;
//Конец доработки
КонецПроцедуры
//Вот наша рекурсивная функция, сюда передали документ основание из последнего дочернего документа,
//а на следующих итерациях будем передавать найденного родителя
Функция ЗаполнитьПоЗапросуРекурсивно(Основание)
Запрос = Новый Запрос("ВЫБРАТЬ
| ТелефонныйЗвонок.ДокументОснование КАК Родитель
|ИЗ
| Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок
|ГДЕ
| ТелефонныйЗвонок.Ссылка = &Ссылка");
// Передаём в запрос найденный нами родительский документ и выполняем запрос
Запрос.УстановитьПараметр("Ссылка", Основание);
Результат = Запрос.Выполнить();
// Проверяем результат запроса на наличие данных, если их нет, возвращаем "Неопределено"
Если Результат.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
// Формируем выборку и обходим её.
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не Выборка.Родитель = Неопределено Тогда
// Вот тут мы вызываем эту же функцию и передаём в неё найденного нами РОДИТЕЛЯ для того документа основания,
// который мы передавали в запрос
НайденныйРодитель = ЗаполнитьПоЗапросуРекурсивно(Выборка.Родитель) ;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецЦикла;
// Возвращаем значение поля "Источник" у найденного первого (корневого) родительского документа
Возврат НайденныйРодитель.Источник;
КонецФункции
ПоказатьФункция "ЗаполнитьПоЗапросуРекурсивно" вызывает сама себя, а в неё мы передаём найденного родителя во время обхода выборки.
(18) Поле "Источник" лежит в каком документе? "ДокументСсылка.ТелефонныйЗвонок"? Мы именно его уже и передаём в запрос. Если хотите перебдеть, и 1000% передать именно его, тогда
Так мы железобетонно передаём в запрос ссылку на нужный нам документ.
Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда
Если ТипЗнч(ВзаимодействиеОснование) = Тип("ДокументСсылка.ТелефонныйЗвонок")
// Вот тут мы вызываем нашу рекурсивную функцию. В неё передаём ссылку на документ-основание
ИсточникИзРодителя = ЗаполнитьПоЗапросу(ВзаимодействиеОснование);
КонецЕсли;
КонецЕсли;
ПоказатьТак мы железобетонно передаём в запрос ссылку на нужный нам документ.
(19) Поле источник лежит в Справочник.Запросы. Получается так: В справочник.Запросы есть "Источник", на основании этого справочника создаётся Документ.ТелефонныйЗвонок (в этом документе нет "Источника") и на основании Документ.ТелефонныйЗвонок создаётся Справочник.СделкиСКлиентами в котором уже есть "источник" и значение должно быть таким же, как и в первом справочнике
(26) Так. У Вас, получается, данные лежат и не в документе вовсе, а в справочнике! Это же совершенно другая степь, условие задачи поставлено некорректно. Тут не нужна рекурсия в таком случае. Сделайте, пожалуйста, скрины справочника "Запросы" (реквизитный состав), документа "ТелефонныеЗвонки" и справочника "СделкиСКлиентами".
(31)
Так получается, что может быть несколько?)
Короче, в любом случае в документе "ТелефонныйЗвонок" будет ссылка на элемент справочника "Запросы"?
UPD. Ситуация, как на рисунке допустима?
ТелефонныйЗвонок может быть создан на основании ТелефонныйЗвонок.
Так получается, что может быть несколько?)
Короче, в любом случае в документе "ТелефонныйЗвонок" будет ссылка на элемент справочника "Запросы"?
UPD. Ситуация, как на рисунке допустима?
Прикрепленные файлы:
Напишите ваше сообщение
(32)
Я имею ввиду, что когда я нахожусь в Справочник.Запросы я могу создать на его основании Документ.ТелефонныйЗвонок, далее в Документ.ТелефонныйЗвонок я могу создать на его основании только Справочник.СделкиСКлиентами (на этом этапе я не могу снова создать телефонный звонок)
(32)
Короче, в любом случае в документе "ТелефонныйЗвонок" будет ссылка на элемент справочника "Запросы"?
Я имею ввиду, что когда я нахожусь в Справочник.Запросы я могу создать на его основании Документ.ТелефонныйЗвонок, далее в Документ.ТелефонныйЗвонок я могу создать на его основании только Справочник.СделкиСКлиентами (на этом этапе я не могу снова создать телефонный звонок)
(34) Ну так а в чём проблема то тогда? На основании "ТелефонныйЗвонок" создаёте сделку, ставите следующее условие
Всё. Всё это делается в процедуре, обрабатывающей заполнение элемента справочника на основании данных из документа.
Если ТипЗнч(ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявка") Тогда
Источник = ВзаимодействиеОснование.Источник;
Иначе
// Вот сюда исключительный случай, если в основании лежит не элемент справочника "Заявка"
КонецЕсли;
Всё. Всё это делается в процедуре, обрабатывающей заполнение элемента справочника на основании данных из документа.
(40)
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
ДанныеЗаполнения.Закрыта = Ложь;
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Статус = Перечисления.СтатусыСделок.ВРаботе;
ДатаНачала = ТекущаяДата();
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
//сделка на основании партнера
Партнер = ДанныеЗаполнения;
ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
Иначе
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Партнеры.Клиент,
| Партнеры.Ссылка
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Ссылка В
| (ВЫБРАТЬ
| КонтактныеЛицаПартнеров.Владелец
| ИЗ
| Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
| ГДЕ
| КонтактныеЛицаПартнеров.Ссылка = &КонтактноеЛицо)";
Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если НЕ Выборка.Клиент Тогда
ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);
ВызватьИсключение ТекстОшибки;
Иначе
Партнер = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродаж();
КонецЕсли;
ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
//выше код ОбработкаЗаполнения
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда
ЗаполнитьПоЗапросуРекурсивно("Основание");
КонецЕсли;
//Конец доработки
КонецПроцедуры
Показать
(41)
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
ДанныеЗаполнения.Закрыта = Ложь;
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Статус = Перечисления.СтатусыСделок.ВРаботе;
ДатаНачала = ТекущаяДата();
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
//сделка на основании партнера
Партнер = ДанныеЗаполнения;
ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
Иначе
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Партнеры.Клиент,
| Партнеры.Ссылка
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Ссылка В
| (ВЫБРАТЬ
| КонтактныеЛицаПартнеров.Владелец
| ИЗ
| Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
| ГДЕ
| КонтактныеЛицаПартнеров.Ссылка = &КонтактноеЛицо)";
Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если НЕ Выборка.Клиент Тогда
ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);
ВызватьИсключение ТекстОшибки;
Иначе
Партнер = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродаж();
КонецЕсли;
ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
//выше код ОбработкаЗаполнения
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
// Если создаём "Сделку" на основании документа "ТелефонныйЗвонок"
//и в основании телефонного звонка ссылка на справочник "Заявки" тогда вытаскиваем "Источник" из справочника напрямую
Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и
ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявки") Тогда
Источник = ТипДанныхЗаполнения.ВзаимодействиеОснование.Источник;
Иначе
// Реализуем заполнение в исключительных случаях по другой необходимой логике
КонецЕсли;
//Конец доработки
КонецПроцедуры
Показать
(42) Вот такая ошибка
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявки") Тогда
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявки") Тогда
(45) Я нашёл свою ошибку.) Невнимательность-с.))
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
ДанныеЗаполнения.Закрыта = Ложь;
КонецЕсли;
КонецЕсли;
Ответственный = Пользователи.ТекущийПользователь();
Статус = Перечисления.СтатусыСделок.ВРаботе;
ДатаНачала = ТекущаяДата();
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
//сделка на основании партнера
Партнер = ДанныеЗаполнения;
ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
Иначе
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Партнеры.Клиент,
| Партнеры.Ссылка
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Ссылка В
| (ВЫБРАТЬ
| КонтактныеЛицаПартнеров.Владелец
| ИЗ
| Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
| ГДЕ
| КонтактныеЛицаПартнеров.Ссылка = &КонтактноеЛицо)";
Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если НЕ Выборка.Клиент Тогда
ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);
ВызватьИсключение ТекстОшибки;
Иначе
Партнер = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
ЗаполнитьУсловияПродаж();
КонецЕсли;
ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
//выше код ОбработкаЗаполнения
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
// Если создаём "Сделку" на основании документа "ТелефонныйЗвонок"
//и в основании телефонного звонка ссылка на справочник "Заявки" тогда вытаскиваем "Источник" из справочника напрямую
Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и
ТипЗнч(ДанныеЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
Источник = ДанныеЗаполнения.ВзаимодействиеОснование.Источник;
Иначе
// Реализуем заполнение в исключительных случаях по другой необходимой логике
КонецЕсли;
//Конец доработки
КонецПроцедуры
Показать
(46) Если быть точнее то
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
(53) ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Если да, тогда мы можем получить отсюда поле "ВзаимодействиеОснование". Далее определяем его тип, и если "ВзаимодействиеОснование" является ссылкой на справочник "Запросы", тогда можем заполнить поле "Источник" напрямую из ссылки на элемент справочника "Запросы".
UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
(7) Вообще, рекурсивная функция, это функция, которая вызывает сама себя до момента, пока не будет прерван цикл (то бишь рекурсия). Логика такова, что мы запросом ищем родителя, и передаём найденного родителя в эту же функцию, где для уже найденного родителя будет искаться родитель. Поиск будет осуществляться до тех пор, пока мы не дойдём до первого документа в цепочке (в поле "ДокументОснование" у такого документа будет NULL, Неопределено или ПустаяСсылка()).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот