как избавиться от дублей в печатной форме при загрузке из тз

1. Geophysic 10.03.23 11:00 Сейчас в теме
Добрый день, при печати документа выходит 2 одинаковых доверенности, подскажите пожалуйста как избавиться от дублей и оставить одну доверенность? Получается что в документе "Счет на оплату покупателю" есть документы "ЗаявкаНаКурс" и в двух из них заполнено поле на основании где прописана доверенность, он оттуда их и подтягивает.

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

		Результат = Запрос.Выполнить();
			
		Выборка = Результат.Выбрать();
		
		Пока Выборка.Следующий() Цикл
		
		Организация             = Выборка.Организация;
		ОрганизацияПодписи      = Выборка.ОрганизацияПодписи;
		Руководитель            = Выборка.Руководитель;
		Сотрудник		        = Выборка.Сотрудник;
		ИВС_Подразделение       = Выборка.ИВС_Подразделение;
		Подразделение	        = Выборка.Подразделение;
		Наименование	        = Выборка.Наименование;
		НомерДоверенности       = Доверенность.Параметры.НомерДоверенности;
		Должность               = Выборка.Должность;
		ДолжностьРуководителя   = Выборка.ДолжностьРуководителя;
		ЗаРуководителяПоПриказу = Выборка.ЗаРуководителяПоПриказу;
		   
		Наименование = Выборка.Наименование;
		
		Доверенность.Параметры.НомерДоверенности = Наименование;
Показать

ТабДок.Вывести(Доверенность);
КонецЦикла;
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DesertPunk 10.03.23 12:44 Сейчас в теме
(1) Ты обращаешься к данным ТЧ. Следовательно данные тянутся из КАЖДОЙ строки ТЧ.
3. Said-We 10.03.23 13:10 Сейчас в теме
(1) У вас декартово произведение с "Справочник.ОснованияПраваПодписи КАК ОснованияПраваПодписи" с условием по ИСТИНА. Т.е. Со всеми.

(2)
Ты обращаешься к данным ТЧ.
В каком месте обращение в запросе к табличной части?
7. DesertPunk 10.03.23 14:06 Сейчас в теме
(3) Ну как я понял в документе "Счет на оплату покупателю" несколько строк ТЧ с "ЗаявкаНаКурс".
8. Said-We 10.03.23 14:16 Сейчас в теме
(7)
Ну как я понял в документе "Счет на оплату покупателю" несколько строк ТЧ с "ЗаявкаНаКурс".


В описании задачи эта табличная часть упоминается, однако в представленном куске кода никакой информации об этой ТЧ я не вижу.
К ней нет обращения. Может быть есть в "ВыборкаДетальныеЗаписи", но это только предположения.
Я смотрел на сам запрос, даже не вникая в структуру данных. Сам запрос необходимо переписать 100%.
9. DesertPunk 10.03.23 14:19 Сейчас в теме
(8) Это и бобрам понятно, что переписать запрос нужно) Вопрос только бы понять, что человек хочет получить в итоге и от этого уже думать про запрос. "ВыборкаДетальныеЗаписи" - это вообще terra incognita.
10. Said-We 10.03.23 14:27 Сейчас в теме
(9)
в итоге и от этого уже думать про запрос

Не важно в каком порядке. Автор не написал что у него за конфигурация. Более того, в заголовке есть информация про ТЗ, которая откуда-то загружается. По факту показал, только кусок кода в конце, который по его мнению не получился. Но есть основания предполагать ("ВыборкаДетальныеЗаписи"), что не получилось ещё в самом начале.
4. Said-We 10.03.23 13:16 Сейчас в теме
(1)
| ОснованияПраваПодписи.Организация = &ОрганизацияПодписи
| И ОснованияПраваПодписи.Сотрудник = &Сотрудник
| И ПодразделенияОрганизаций.Наименование = &Подразделение
| И СчетНаОплатуПокупателю.Руководитель = &Руководитель
| И СчетНаОплатуПокупателю.ИВС_Подразделение = &ИВС_Подразделение
| И СчетНаОплатуПокупателю.Организация = &Организация
| И ОснованияПраваПодписи.Наименование = &Наименование
| И ОснованияПраваПодписи.Сотрудник.Должность = &Должность


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

У вас получается сначала нагенерить миллионы строк, а потом на эти миллионы строк наложить условия и на выходе получить чуть-чуть строк.
Оптимизатор запроса на SQL конечно умный, но не всегда.
5. Said-We 10.03.23 13:19 Сейчас в теме
(1)
Запрос.УстановитьПараметр("Подразделение", ВыборкаДетальныеЗаписи.Подразделение);


Я правильно понимаю, что выше ещё один запрос и выборка результата, т.е. цикл и далее вы выполняете запрос из (1) в цикле?
Если так, то от этого тоже необходимо избавится.
6. Said-We 10.03.23 13:36 Сейчас в теме
(1)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
| ПО СчетНаОплатуПокупателю.ИВС_Подразделение = ПодразделенияОрганизаций.Ссылка,


У Вас левое соединение со справочником только для вытаскивания наименования в печатную форму?
Обычно представление справочника "Подразделение" и так в виде наименования. Если так, то можно напрямую брать ссылку и не лезть в наименование.
11. user1647484 9 10.03.23 15:49 Сейчас в теме
(17) разбейте на пакет запросов. у вас же там огромное количество строк формируется из за того, что справочник никак не связан по полям с документом. ужас
12. user1647484 9 10.03.23 15:50 Сейчас в теме
а лучше выберите данные из справочника отдельным запросом.
Оставьте свое сообщение

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