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



По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7)
В описании задачи эта табличная часть упоминается, однако в представленном куске кода никакой информации об этой ТЧ я не вижу.
К ней нет обращения. Может быть есть в "ВыборкаДетальныеЗаписи", но это только предположения.
Я смотрел на сам запрос, даже не вникая в структуру данных. Сам запрос необходимо переписать 100%.
Ну как я понял в документе "Счет на оплату покупателю" несколько строк ТЧ с "ЗаявкаНаКурс".
В описании задачи эта табличная часть упоминается, однако в представленном куске кода никакой информации об этой ТЧ я не вижу.
К ней нет обращения. Может быть есть в "ВыборкаДетальныеЗаписи", но это только предположения.
Я смотрел на сам запрос, даже не вникая в структуру данных. Сам запрос необходимо переписать 100%.
(9)
Не важно в каком порядке. Автор не написал что у него за конфигурация. Более того, в заголовке есть информация про ТЗ, которая откуда-то загружается. По факту показал, только кусок кода в конце, который по его мнению не получился. Но есть основания предполагать ("ВыборкаДетальныеЗаписи"), что не получилось ещё в самом начале.
в итоге и от этого уже думать про запрос
Не важно в каком порядке. Автор не написал что у него за конфигурация. Более того, в заголовке есть информация про ТЗ, которая откуда-то загружается. По факту показал, только кусок кода в конце, который по его мнению не получился. Но есть основания предполагать ("ВыборкаДетальныеЗаписи"), что не получилось ещё в самом начале.
(1)
В каждом таком условии у вас сравнивается значение поля таблицы с константой, а не со значением поля соединяемой таблицы.
Следовательно перед соединением необходимо поместить в подзапрос с наложением условий, а потом только соединять.
У вас получается сначала нагенерить миллионы строк, а потом на эти миллионы строк наложить условия и на выходе получить чуть-чуть строк.
Оптимизатор запроса на SQL конечно умный, но не всегда.
| ОснованияПраваПодписи.Организация = &ОрганизацияПодписи
| И ОснованияПраваПодписи.Сотрудник = &Сотрудник
| И ПодразделенияОрганизаций.Наименование = &Подразделение
| И СчетНаОплатуПокупателю.Руководитель = &Руководитель
| И СчетНаОплатуПокупателю.ИВС_Подразделение = &ИВС_Подразделение
| И СчетНаОплатуПокупателю.Организация = &Организация
| И ОснованияПраваПодписи.Наименование = &Наименование
| И ОснованияПраваПодписи.Сотрудник.Должность = &Должность
| И ОснованияПраваПодписи.Сотрудник = &Сотрудник
| И ПодразделенияОрганизаций.Наименование = &Подразделение
| И СчетНаОплатуПокупателю.Руководитель = &Руководитель
| И СчетНаОплатуПокупателю.ИВС_Подразделение = &ИВС_Подразделение
| И СчетНаОплатуПокупателю.Организация = &Организация
| И ОснованияПраваПодписи.Наименование = &Наименование
| И ОснованияПраваПодписи.Сотрудник.Должность = &Должность
В каждом таком условии у вас сравнивается значение поля таблицы с константой, а не со значением поля соединяемой таблицы.
Следовательно перед соединением необходимо поместить в подзапрос с наложением условий, а потом только соединять.
У вас получается сначала нагенерить миллионы строк, а потом на эти миллионы строк наложить условия и на выходе получить чуть-чуть строк.
Оптимизатор запроса на SQL конечно умный, но не всегда.
(1)
У Вас левое соединение со справочником только для вытаскивания наименования в печатную форму?
Обычно представление справочника "Подразделение" и так в виде наименования. Если так, то можно напрямую брать ссылку и не лезть в наименование.
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
| ПО СчетНаОплатуПокупателю.ИВС_Подразделение = ПодразделенияОрганизаций.Ссылка,
| ПО СчетНаОплатуПокупателю.ИВС_Подразделение = ПодразделенияОрганизаций.Ссылка,
У Вас левое соединение со справочником только для вытаскивания наименования в печатную форму?
Обычно представление справочника "Подразделение" и так в виде наименования. Если так, то можно напрямую брать ссылку и не лезть в наименование.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот