Проблема связать документ с основанием

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

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


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

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


Документом основанием для ТелефонныйЗвонок является Справочник.Запросы и вот оттуда мне и надо передать реквизит Источник в Справочник.СделкиСКлиентами
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
54. BuryMeInVegas 01.04.21 12:06 Сейчас в теме +0.19 $m
(53) ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Если да, тогда мы можем получить отсюда поле "ВзаимодействиеОснование". Далее определяем его тип, и если "ВзаимодействиеОснование" является ссылкой на справочник "Запросы", тогда можем заполнить поле "Источник" напрямую из ссылки на элемент справочника "Запросы".

UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. DenisCh 01.04.21 09:31 Сейчас в теме
А если брать в третьем основание из второго, и потом уже из основания брать первый?
3. BuryMeInVegas 01.04.21 09:32 Сейчас в теме
(2) А если там цепочка из 10 документов? Или из 50? Нужна рекурсия.

UPD. Т.е. искать родителя до тех пор, пока мы не найдём первый документ в цепочке.
4. DenisCh 01.04.21 09:34 Сейчас в теме
(3) А если 10 000? То рекурсия завалит 1с...

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

UPD. Кстати говоря, условие задачи то неполное. Нам всегда нужно поле "Источник" именно из первого документа в цепочке?
9. user1500067 01.04.21 09:41 Сейчас в теме
(6)Поле Источник из Первого документа должно передаться в последний. Во втором документе этого поля может и не быть
10. user1500067 01.04.21 09:41 Сейчас в теме
Напишите ваше сообщение
(9)Но я его создал во втором документе, когда писал первый вариант кода
7. user1500067 01.04.21 09:38 Сейчас в теме
(3)А как это можно сделать? Раньше с рекурсией не сталкивался
11. BuryMeInVegas 01.04.21 09:44 Сейчас в теме
(7) Я бы это делал так (ВНИМАНИЕ! Рекурсия! Предупреждаю, что при большом количестве записей быстродействие не гарантировано!)

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

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

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

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

КонецФункции
Показать


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

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

UPD. Кстати, а в каком модуле выполняется код? Если в модуле объекта, то родителя можно передавать в запрос напрямую для первой итерации.
15. user1500067 01.04.21 10:04 Сейчас в теме
16. user1500067 01.04.21 10:05 Сейчас в теме
(14) А вот как передать родителя в запрос не понимаю
17. BuryMeInVegas 01.04.21 10:13 Сейчас в теме
(16)
// Выше какой-то код

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

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

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

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

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

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

КонецФункции
Показать


Функция "ЗаполнитьПоЗапросуРекурсивно" вызывает сама себя, а в неё мы передаём найденного родителя во время обхода выборки.
18. user1500067 01.04.21 10:24 Сейчас в теме
(17) ТелефонныйЗвонок.ДокументОснование поле в котором лежит родительскиий документ называется ВзаимодействиеОснование и является составным типом, как тогда его в запрос добавить?
19. BuryMeInVegas 01.04.21 10:28 Сейчас в теме
(18) Поле "Источник" лежит в каком документе? "ДокументСсылка.ТелефонныйЗвонок"? Мы именно его уже и передаём в запрос. Если хотите перебдеть, и 1000% передать именно его, тогда

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

Так мы железобетонно передаём в запрос ссылку на нужный нам документ.
23. user1500067 01.04.21 10:35 Сейчас в теме
(19) Поле источник лежит в Справочник.Запросы. Получается так: В справочник.Запросы есть "Источник", на основании этого справочника создаётся Документ.ТелефонныйЗвонок (в этом документе нет "Источника") и на основании Документ.ТелефонныйЗвонок создаётся Справочник.СделкиСКлиентами в котором уже есть "источник" и значение должно быть таким же, как и в первом справочнике
25. BuryMeInVegas 01.04.21 10:36 Сейчас в теме
26. user1500067 01.04.21 10:38 Сейчас в теме
(25) 1С:Предприятие 8.3
Управление торговлей, редакция 11.2 (11.2.3.199)
27. BuryMeInVegas 01.04.21 10:42 Сейчас в теме
(26) Так. У Вас, получается, данные лежат и не в документе вовсе, а в справочнике! Это же совершенно другая степь, условие задачи поставлено некорректно. Тут не нужна рекурсия в таком случае. Сделайте, пожалуйста, скрины справочника "Запросы" (реквизитный состав), документа "ТелефонныеЗвонки" и справочника "СделкиСКлиентами".
28. user1500067 01.04.21 10:48 Сейчас в теме
(27)
Прикрепленные файлы:
29. user1500067 01.04.21 10:50 Сейчас в теме
(27)В Документ.ТелефонныйЗвонок есть "Источник", но я его удалю, так как его изначально та мне было, так что можно считать, что его нет
30. BuryMeInVegas 01.04.21 10:52 Сейчас в теме
(29) Сколько может быть документов "ТелефонныйЗвонок" между "Заявка" и "СделкаСКлиентом"? И может ли быть создан документ "ТелефонныйЗвонок" на основании другого документа "ТелефонныйЗвонок"?
31. user1500067 01.04.21 10:57 Сейчас в теме
(30) Между Справочник.Запросы и Справочник.СделкаСКлиентом только один ТелефонныйЗвонок. ТелефонныйЗвонок может быть создан на основании ТелефонныйЗвонок
32. BuryMeInVegas 01.04.21 11:01 Сейчас в теме
(31)
ТелефонныйЗвонок может быть создан на основании ТелефонныйЗвонок.


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

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

UPD. Ситуация, как на рисунке допустима?
Прикрепленные файлы:
33. user1500067 01.04.21 11:03 Сейчас в теме
(32) "Короче, в любом случае в документе "ТелефонныйЗвонок" будет ссылка на элемент справочника "Запросы"? " Да, именно так.
35. BuryMeInVegas 01.04.21 11:07 Сейчас в теме
(33) Тогда никаких проблем. При создании элемента справочника "СделкиСКлиентами" при заполнении его полей, можно по ссылке напрямую обратиться к элементу справочника "Заявки" и передать значение любого поля этого элемента в "Сделки".
37. user1500067 01.04.21 11:10 Сейчас в теме
(35)Вот я и не понимаю, как это сделать. И "Источник" в конечном Справочник.СделкиСКлиентами должен быть такой же как и в Справочник.Запросы (на основании которого был создан ТелефонныйЗвонок и из которого потом получился Справочник.СделкиСКлиентами)
34. user1500067 01.04.21 11:05 Сейчас в теме
Напишите ваше сообщение
(32)
Короче, в любом случае в документе "ТелефонныйЗвонок" будет ссылка на элемент справочника "Запросы"?


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

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


Всё. Всё это делается в процедуре, обрабатывающей заполнение элемента справочника на основании данных из документа.
39. user1500067 01.04.21 11:22 Сейчас в теме
(38) Что-то я уже окончательно запутался в коде. Не могли бы Вы дать пример полного кода как оно должно быть всё в месте?
40. BuryMeInVegas 01.04.21 11:23 Сейчас в теме
(39) Скиньте сюда всю процедуру заполнения элемента справочника "СделкиСКлиентами" на основании документа "ТелефонныйЗвонок".
41. user1500067 01.04.21 11:29 Сейчас в теме
(40)
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
			ДанныеЗаполнения.Закрыта = Ложь;
		КонецЕсли;
	КонецЕсли;
	
	Ответственный = Пользователи.ТекущийПользователь();
	Статус        = Перечисления.СтатусыСделок.ВРаботе;
	ДатаНачала    = ТекущаяДата();
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
		//сделка на основании партнера
		Партнер = ДанныеЗаполнения;
		ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
		
	Иначе
		
		Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
			
			Запрос = Новый Запрос;
			Запрос.Текст = "
			|ВЫБРАТЬ
			|	Партнеры.Клиент,
			|	Партнеры.Ссылка
			|ИЗ
			|	Справочник.Партнеры КАК Партнеры
			|ГДЕ
			|	Партнеры.Ссылка В
			|			(ВЫБРАТЬ
			|				КонтактныеЛицаПартнеров.Владелец
			|			ИЗ
			|				Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
			|			ГДЕ
			|				КонтактныеЛицаПартнеров.Ссылка = &КонтактноеЛицо)";
			
			Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);
			
			Выборка = Запрос.Выполнить().Выбрать();
			
			Если Выборка.Следующий() Тогда
				
				Если НЕ Выборка.Клиент Тогда
					
					ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
					ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);
					
					ВызватьИсключение ТекстОшибки;
					
				Иначе
					
					Партнер = Выборка.Ссылка;
					
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЕсли;
		
		Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);
		
	КонецЕсли;
	
	Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
		
		ЗаполнитьУсловияПродаж();
		
	КонецЕсли;
	
	ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
	        //выше код ОбработкаЗаполнения
			ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
         

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

	    
	  ЗаполнитьПоЗапросуРекурсивно("Основание");
	        
	КонецЕсли;
    
	
	
	
	
	
	//Конец доработки
    
КонецПроцедуры
Показать
42. BuryMeInVegas 01.04.21 11:34 Сейчас в теме
(41)
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    
    Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
        Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
            ДанныеЗаполнения.Закрыта = Ложь;
        КонецЕсли;
    КонецЕсли;
    
    Ответственный = Пользователи.ТекущийПользователь();
    Статус        = Перечисления.СтатусыСделок.ВРаботе;
    ДатаНачала    = ТекущаяДата();
    
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
        //сделка на основании партнера
        Партнер = ДанныеЗаполнения;
        ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
        
    Иначе
        
        Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
            
            Запрос = Новый Запрос;
            Запрос.Текст = "
            |ВЫБРАТЬ
            |    Партнеры.Клиент,
            |    Партнеры.Ссылка
            |ИЗ
            |    Справочник.Партнеры КАК Партнеры
            |ГДЕ
            |    Партнеры.Ссылка В
            |            (ВЫБРАТЬ
            |                КонтактныеЛицаПартнеров.Владелец
            |            ИЗ
            |                Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
            |            ГДЕ
            |                КонтактныеЛицаПартнеров.Ссылка = &КонтактноеЛицо)";
            
            Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);
            
            Выборка = Запрос.Выполнить().Выбрать();
            
            Если Выборка.Следующий() Тогда
                
                Если НЕ Выборка.Клиент Тогда
                    
                    ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
                    ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);
                    
                    ВызватьИсключение ТекстОшибки;
                    
                Иначе
                    
                    Партнер = Выборка.Ссылка;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЕсли;
        
        Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);
        
    КонецЕсли;
    
    Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
        
        ЗаполнитьУсловияПродаж();
        
    КонецЕсли;
    
    ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
            //выше код ОбработкаЗаполнения
            ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
         
    // Если создаём "Сделку" на основании документа "ТелефонныйЗвонок" 
    //и в основании телефонного звонка ссылка на справочник "Заявки" тогда вытаскиваем "Источник" из справочника напрямую
    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и
           ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Заявки") Тогда
         Источник = ТипДанныхЗаполнения.ВзаимодействиеОснование.Источник;
    Иначе
         // Реализуем заполнение в исключительных случаях по другой необходимой логике         
    КонецЕсли;
    

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    
    Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
        Если ДанныеЗаполнения.Свойство("Закрыта") Тогда
            ДанныеЗаполнения.Закрыта = Ложь;
        КонецЕсли;
    КонецЕсли;
    
    Ответственный = Пользователи.ТекущийПользователь();
    Статус        = Перечисления.СтатусыСделок.ВРаботе;
    ДатаНачала    = ТекущаяДата();
    
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Партнеры") Тогда
        //сделка на основании партнера
        Партнер = ДанныеЗаполнения;
        ПродажиСервер.ПроверитьВозможностьВводаНаОснованииПартнераКлиента(Партнер);
        
    Иначе
        
        Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
            
            Запрос = Новый Запрос;
            Запрос.Текст = "
            |ВЫБРАТЬ
            |    Партнеры.Клиент,
            |    Партнеры.Ссылка
            |ИЗ
            |    Справочник.Партнеры КАК Партнеры
            |ГДЕ
            |    Партнеры.Ссылка В
            |            (ВЫБРАТЬ
            |                КонтактныеЛицаПартнеров.Владелец
            |            ИЗ
            |                Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
            |            ГДЕ
            |                КонтактныеЛицаПартнеров.Ссылка = &КонтактноеЛицо)";
            
            Запрос.УстановитьПараметр("КонтактноеЛицо", ДанныеЗаполнения);
            
            Выборка = Запрос.Выполнить().Выбрать();
            
            Если Выборка.Следующий() Тогда
                
                Если НЕ Выборка.Клиент Тогда
                    
                    ТекстОшибки = НСтр("ru='%КонтактноеЛицо% не является контактным лицом партнера - клиента. Вввод сделки на основании доступен только для клиента.'");
                    ТекстОшибки = СтрЗаменить(ТекстОшибки, "%КонтактноеЛицо%", ДанныеЗаполнения);
                    
                    ВызватьИсключение ТекстОшибки;
                    
                Иначе
                    
                    Партнер = Выборка.Ссылка;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЕсли;
        
        Взаимодействия.ЗаполнитьРеквизитыПоУмолчанию(ЭтотОбъект, ДанныеЗаполнения);
        
    КонецЕсли;
    
    Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами") Тогда
        
        ЗаполнитьУсловияПродаж();
        
    КонецЕсли;
    
    ВалютаПервичногоСпроса = ДоходыИРасходыСервер.ПолучитьВалютуУправленческогоУчета(ВалютаПервичногоСпроса);
            //выше код ОбработкаЗаполнения
            ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
         
    // Если создаём "Сделку" на основании документа "ТелефонныйЗвонок" 
    //и в основании телефонного звонка ссылка на справочник "Заявки" тогда вытаскиваем "Источник" из справочника напрямую
    Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и
           ТипЗнч(ДанныеЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
         Источник = ДанныеЗаполнения.ВзаимодействиеОснование.Источник;
    Иначе
         // Реализуем заполнение в исключительных случаях по другой необходимой логике         
    КонецЕсли;
    

    //Конец доработки
    
КонецПроцедуры
Показать
47. user1500067 01.04.21 11:54 Сейчас в теме
(46) Я уже исправил это, но ошибка та же самая
48. user1500067 01.04.21 11:55 Сейчас в теме
(46) Если быть точнее то
Ошибка при выполнении обработчика - 'ОбработкаЗаполнения'
по причине:
Значение не является значением объектного типа (ВзаимодействиеОснование)
{Справочник.СделкиСКлиентами.МодульОбъекта(172)}: Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ТелефонныйЗвонок") и ТипЗнч(ТипДанныхЗаполнения.ВзаимодействиеОснование) = Тип("СправочникСсылка.Запросы") Тогда
49. BuryMeInVegas 01.04.21 11:56 Сейчас в теме
(47) У Вас есть Anydesk? Проще будет сделать таким образом.)
50. user1500067 01.04.21 11:59 Сейчас в теме
51. user1500067 01.04.21 12:00 Сейчас в теме
(49) Да и не смогу я его по объективным причинам поставить на рабочий компьютер
52. BuryMeInVegas 01.04.21 12:01 Сейчас в теме
(51) Я Вас понял. В режиме отладки посмотрите, каким образом можно через "ДанныеЗаполнения" обратиться к "ВзаимодействиеОснование". Всё, что выше - это всё предположения, пока мы не увидим реальной картины в режиме отладки, ничего не получиться сделать.
53. user1500067 01.04.21 12:03 Сейчас в теме
(44) Я не туда посмотрел! ТипДанныхЗаполнения написано "Тип", значение "Телефонный звонок"
54. BuryMeInVegas 01.04.21 12:06 Сейчас в теме +0.19 $m
(53) ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Если да, тогда мы можем получить отсюда поле "ВзаимодействиеОснование". Далее определяем его тип, и если "ВзаимодействиеОснование" является ссылкой на справочник "Запросы", тогда можем заполнить поле "Источник" напрямую из ссылки на элемент справочника "Запросы".

UPD. В режиме отладки остановитесь перед нашим условием и вычислите выражение из "ДанныеЗаполнения". Посмотрите, какие поля доступны.
55. user1500067 01.04.21 12:11 Сейчас в теме
(54) ДанныеЗаполнения - тип данных "ДокументСсылка.ТелефонныйЗвонок"? Да именно так
56. user1500067 01.04.21 12:12 Сейчас в теме
(54) ВзаимодействиеОснование является СправочникСсылка.Запросы
57. BuryMeInVegas 01.04.21 12:14 Сейчас в теме
(56)
ВзаимодействиеОснование является СправочникСсылка.Запросы


Это не имеет особого значения. Вы можете сделать вот так: ДанныеЗаполнения.ВзаимодействиеОснование? Поле доступно? Проверьте в режиме отладки.
58. user1500067 01.04.21 12:23 Сейчас в теме
(57)Всё заработало.
Вот так
 ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
         
         Источник = ДанныеЗаполнения.ВзаимодействиеОснование.Источник;

Спасибо Вам большое!
59. BuryMeInVegas 01.04.21 12:24 Сейчас в теме
36. user1500067 01.04.21 11:07 Сейчас в теме
(32)Как я уже описал ниже, так не получится
12. BuryMeInVegas 01.04.21 09:48 Сейчас в теме
(7) Вообще, рекурсивная функция, это функция, которая вызывает сама себя до момента, пока не будет прерван цикл (то бишь рекурсия). Логика такова, что мы запросом ищем родителя, и передаём найденного родителя в эту же функцию, где для уже найденного родителя будет искаться родитель. Поиск будет осуществляться до тех пор, пока мы не дойдём до первого документа в цепочке (в поле "ДокументОснование" у такого документа будет NULL, Неопределено или ПустаяСсылка()).
5. user1500067 01.04.21 09:35 Сейчас в теме
(2)А как это реализовать?
8. DenisCh 01.04.21 09:39 Сейчас в теме
(5)
выбрать док2.ДокументОснование.Источник
ИЗ Документ.Документ2 КАК док2
ГДЕ док2.Ссылка = &текДокОснование

(это если док2.ДокументОснование - реквизит несоставной. если составной, то лучше явно левосоединять)
20. glek 119 01.04.21 10:28 Сейчас в теме
А про регистр сведений никто не думал?
21. BuryMeInVegas 01.04.21 10:29 Сейчас в теме
(20) А в нём есть связь "Первый" - "Последний" по цепочке документов? Или только "Первый" - "Второй", "Второй" - "Третий" и так далее?
22. glek 119 01.04.21 10:33 Сейчас в теме
(21) Как построите. Я бы делал РС вида ДокументN - Документ1.
Тогда по одной цепочке будет
Документ1 - Документ1
При записи документN, у нас по основанию документ(n-1), который мы ищем в измерении регистра, находим, и делаем запись, как указал выше.
24. BuryMeInVegas 01.04.21 10:35 Сейчас в теме
(22) Ну строю не я.) Я не в курсе, какова структура хранения связей документов у ТС. Предлагаю то решение, которое будет работать 100%, вне зависимости от наличия регистра. Решение не супер оптимальное, в плане производительности, но точно эффективное.)
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)