Как обратиться к данным из запроса?

1. Greamdevil 6 01.08.17 06:41 Сейчас в теме
Ребят помогите разобраться. Нужно сделать внешнюю печатную форму к счету покупателя, создал внешнюю обработку макет, данные из счета приходят.
Но мне необходимо подтянуть еще Дополнительные сведения по документу - которые я для него создал. Лежат они в РегистрСведений.ДополнительныеСведения
Я в функции СформироватьПечатнуюФорму сделал Запрос, но никак не могу вытянуть данные из него на форму. Ниже пример кода, Запрос в общем модуле.
Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати) Экспорт
	
	//Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет1");

	
	ТабДок = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("Макет1");
	
	

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

		Пока ВыборкаДетЗап.Следующий() Цикл
		
		ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;
		
	КонецЦикла;

	
	
//	Маркировка = РезультатЗапроса.Наименование;
	

	
	
	
	ТабДок.Вывести(ОбластьШапки);

		
	ОбластьДанные.Параметры.ДатаДокумента = Формат(СсылкаНаОбъект.Дата,"ДЛФ=DD");
	ОбластьДанные.Параметры.НомерСчета = СсылкаНаОбъект.Номер;
	ОбластьДанные.Параметры.Клиент = СсылкаНаОбъект.Контрагент;
	ОбластьДанные.Параметры.ИНН = СсылкаНаОбъект.Контрагент.ИНН;
	ОбластьДанные.Параметры.КПП = СсылкаНаОбъект.Контрагент.КПП;
	ОбластьДанные.Параметры.АдресДоставки = СсылкаНаОбъект.АдресДоставки;
	ОбластьДанные.Параметры.Исполнитель = СсылкаНаОбъект.Организация;
	ОбластьДанные.Параметры.ИННОрг = СсылкаНаОбъект.Организация.ИНН;
	ОбластьДанные.Параметры.КППОрг = СсылкаНаОбъект.Организация.КПП;
	ОбластьДанные.Параметры.АдресОрг = СсылкаНаОбъект.Организация; 
	//ОбластьДанные.Параметры.Маркировка = Маркировка;
	
	
	
	ТабДок.Вывести(ОбластьДанные);
		
	
	

    	
	ТабДок.Вывести(ОбластьПодвал);
	
	Возврат ТабДок;
	
	
	
	

	

	

КонецФункции // Печать()
Показать
+
По теме из базы знаний
Найденные решения
4. Tigreno 01.08.17 09:31 Сейчас в теме
(1)
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;


А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.

Как вариант можно попробовать следующее:

 // ошибки не смотрим, пишу в блокноте
ДопПоля = новый Структура;
    Пока ВыборкаДетЗап.Следующий() Цикл
        
        ДоПоля.Вставить(ВыборкаДетЗап.Наименование, ВыборкаДетЗап.Значение);
        
    КонецЦикла;

ОбластьДанные.Параметры.Заполнить(ДопПоля);
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Greamdevil 6 01.08.17 06:43 Сейчас в теме
(1) Здесь я для примера взял маркировку, есть еще товарный код, вид упаковки, вес и т.д. - это мне дали задание прикрутить к счету документ Экспедиторская расписка
+
3. japopov 68 01.08.17 07:17 Сейчас в теме
(2)
Переделайте запрос так, чтобы в нём формировались нужные поля. Потом всего 1 строчкой кода:
 ОбластьДанные.Параметры.Заполнить(ВыборкаДетЗап);
+
4. Tigreno 01.08.17 09:31 Сейчас в теме
(1)
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;


А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.

Как вариант можно попробовать следующее:

 // ошибки не смотрим, пишу в блокноте
ДопПоля = новый Структура;
    Пока ВыборкаДетЗап.Следующий() Цикл
        
        ДоПоля.Вставить(ВыборкаДетЗап.Наименование, ВыборкаДетЗап.Значение);
        
    КонецЦикла;

ОбластьДанные.Параметры.Заполнить(ДопПоля);
Показать
+
5. Greamdevil 6 02.08.17 06:20 Сейчас в теме
(4) Спасибо, разобрался что нужно сопоставить наименование колонки и если совпадаает, беру оттуда значение.
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ДополнительныеСведения.Объект,
		|	ДополнительныеСведения.Значение,
		|	ДополнительныеСведения.Свойство КАК Наименование,
		|	СчетНаОплатуПокупателюТовары.Ссылка,
		|	СчетНаОплатуПокупателюТовары.Номенклатура,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Дата,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
		|		ПО ДополнительныеСведения.Объект = СчетНаОплатуПокупателюТовары.Ссылка
		|ГДЕ
		|	ДополнительныеСведения.Объект.Ссылка = &СсылкаНаОбъект";
	
	Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетЗап = РезультатЗапроса.Выбрать();
	
	ТабДок.Очистить();	

		

	Пока ВыборкаДетЗап.Следующий() Цикл
		
	        Если  СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда
			
			ОбластьДанные.Параметры.Маркировка =	  ВыборкаДетЗап.Значение;
Показать
+
6. Tigreno 02.08.17 08:39 Сейчас в теме
(5) Плохой запрос. Нелогичный. Зачем объединять ДопСведения со счетом ? Правильней будет одним запросом выбрать поля счета, вторым доп сведения. И во вторых если у счета не будет указано ни одного доп сведения он и печататься не будет.
+
7. antz 02.08.17 09:59 Сейчас в теме
(5)

ДополнительныеСведения.Объект.Ссылка = &СсылкаНаОбъект

Не надо так делать. ДополнительныеСведения.Объект - это УЖЕ ссылка. Если тащить из него еще реквизит "ссылка" - будет неявное лишнее соединение таблиц.
+
8. Greamdevil 6 04.08.17 08:31 Сейчас в теме
(7) в итоге сделал вот так, запрос изменил
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
	//	|	СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо,
		|	ДополнительныеСведения.Свойство КАК Наименование,
		|	ДополнительныеСведения.Значение КАК Значение
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		//|		ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
		|		ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
		|		ПО (СчетНаОплатуПокупателюТовары.Ссылка = ДополнительныеСведения.Объект)
		|ГДЕ
		|	СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект";
	
	Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетЗап = РезультатЗапроса.Выбрать();
	
	ТабДок.Очистить();
	
	
	
	ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
	ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
	ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");
	
	ОбластьШапки.Параметры.Номер         = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
	ОбластьШапки.Параметры.Дата = Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата,"ДЛФ=DD");
		

	Пока ВыборкаДетЗап.Следующий() Цикл
		
	СведенияОГрузоотправитель = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДетЗап.Грузоотправитель, ВыборкаДетЗап.Дата);
	СведенияОГрузополучателе  = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДетЗап.Грузополучатель,  ВыборкаДетЗап.Дата);

		
	        Если  СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда
			
			ОбластьДанные.Параметры.Маркировка =	  ВыборкаДетЗап.Значение;
			
Показать
+
9. Tigreno 04.08.17 09:34 Сейчас в теме
(8) Мда, А почему основная таблица у тебя ДополнительныеСведения, а не счет на оплату??? Ты же печатаешь счет и если у него указаны доп сведения их надо вывести.... Логично что основная таблица должна быть счет на оплату, а к ней уже левым соединением дополнительные сведения???

Но опять же это не лучший вариант.... Попробуй в консоли запросов выполнить свой код, и тот что ниже

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


Какой быстрее???
+
10. Greamdevil 6 31.08.17 09:38 Сейчас в теме
(9) В итоге вышло вот так
Запрос.Текст = 
		"ВЫБРАТЬ
		|	СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
	//	|	СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
		|	СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо,
		|	ДополнительныеСведения.Свойство КАК Наименование,
		|	ДополнительныеСведения.Значение КАК Значение
		|ИЗ
		|	РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		//|		ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
		|		ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
		|		ПО (СчетНаОплатуПокупателюТовары.Ссылка = ДополнительныеСведения.Объект)
		|ГДЕ
		|	СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект";
	
	Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетЗап = РезультатЗапроса.Выбрать();
	
	ТабДок.Очистить();

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


Показать



Я после запроса решил делать поиск по наименованию, доп сведений не так много. Получилось все на ура, уже сдал
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот