Добрый день. Помогите пожалуйста новичку в программировании. Создаю внешнюю обработку, по которой на основании документа "Счет на оплату покупателю" можно создать подчиненные документы "Реализация товаров и услуг" и "Платежное поручение". Проблема в том, что по "Счету на оплату покупателю" №В0000000313 по документу "Платежное поручение" дублируетя в три строки хоть документ "Реализация товаров и услуг" всего один. Скриншоты прилагаю:
Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | СчетНаОплатуПокупателю.Ссылка, | СчетНаОплатуПокупателю.Проведен, | СчетНаОплатуПокупателю.Дата, | СчетНаОплатуПокупателю.Организация, | СчетНаОплатуПокупателю.Контрагент, | СчетНаОплатуПокупателю.СуммаДокумента КАК СуммаДокумента, | РеализацияТоваровУслуг.Ссылка КАК СсылкаРеализации, | РеализацияТоваровУслуг.Проведен КАК ПроведенРеализации, | ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка КАК СсылкаПлатежноеПоручение, | ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка.Проведен КАК ПроведенПоручение |ИЗ | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ПО (РеализацияТоваровУслуг.Сделка = СчетНаОплатуПокупателю.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа | ПО (ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Сделка = СчетНаОплатуПокупателю.Ссылка) |ГДЕ | СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2"+ ?(ЗначениеЗаполнено(Контрагент)," И СчетНаОплатуПокупателю.Контрагент = &Контрагент","")+ ?(ЗначениеЗаполнено(Организация)," И СчетНаОплатуПокупателю.Организация = &Организация" ,"")+ ?(ЗначениеЗаполнено(Договор)," И СчетНаОплатуПокупателю.ДоговорКонтрагента = &ДоговорКонтрагента","")+""; КонецЕсли;
Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("Контрагент",Контрагент); Запрос.УстановитьПараметр("ДоговорКонтрагента",Договор); Запрос.УстановитьПараметр("Дата1",ДатаНач); Запрос.УстановитьПараметр("Дата2",КонецДня(ДатаКон)); Результат = Запрос.Выполнить().Выгрузить();
Таблица.Очистить(); Для Каждого Стр из Результат Цикл НоваяСтрока = Таблица.Добавить(); Если Стр.Проведен = Истина Тогда НоваяСтрока.Состояние = "Проведен"; Иначе НоваяСтрока.Состояние = ""; КонецЕсли; НоваяСтрока.Документ = Стр.Ссылка; Если Стр.ПроведенРеализации = Истина Тогда НоваяСтрока.ДокументРеализации = Стр.СсылкаРеализации; КонецЕсли; Если Стр.ПроведенПоручение = Истина Тогда НоваяСтрока.ДокументПлатежноеПоручение = Стр.СсылкаПлатежноеПоручение; КонецЕсли; НоваяСтрока.Контрагент = Стр.Контрагент; НоваяСтрока.Сумма = Стр.СуммаДокумента; КонецЦикла;
PavlovaYA @ Сегодня, 15:57
, Я конечно не уверен, но у вас в запросе что то не так мне кажется.
ВЫБРАТЬ СчетНаОплатуПокупателю.Ссылка, СчетНаОплатуПокупателю.Проведен, СчетНаОплатуПокупателю.Дата, СчетНаОплатуПокупателю.Организация, СчетНаОплатуПокупателю.Контрагент, СчетНаОплатуПокупателю.СуммаДокумента КАК СуммаДокумента, ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка КАК СсылкаПлатежноеПоручение, ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка.Проведен КАК ПроведенПоручение ПОМЕСТИТЬ ВТ_Счет ИЗ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа ПО (ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Сделка = СчетНаОплатуПокупателю.Ссылка) ГДЕ СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2 И СчетНаОплатуПокупателю.Контрагент = &Контраген И СчетНаОплатуПокупателю.Организация = &Организация И СчетНаОплатуПокупателю.ДоговорКонтрагента = &ДоговорКонтрагента ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Счет.Ссылка, ВТ_Счет.Проведен, ВТ_Счет.Дата, ВТ_Счет.Организация, ВТ_Счет.Контрагент, ВТ_Счет.СуммаДокумента, ВТ_Счет.СсылкаПлатежноеПоручение, ВТ_Счет.ПроведенПоручение ИЗ ВТ_Счет КАК ВТ_Счет ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО ВТ_Счет.Ссылка = РеализацияТоваровУслуг.Сделка
Про1С-ник
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0
Ваш запрос так построен. Левое соединение работает для каждого правого, поэтому будет столько строк сколько найдется соединений. В данном случае у вас в платежке вероятно по три строки, поэтому такую таблицу надо брать вложенным запросом что бы свернуть, и в итоге вышла одна ссылка.
Личные бесплатные консультации не даю, для этого есть форум!
ВЫБРАТЬ СчетНаОплатуПокупателю.Ссылка, СчетНаОплатуПокупателю.Проведен, СчетНаОплатуПокупателю.Дата, СчетНаОплатуПокупателю.Организация, СчетНаОплатуПокупателю.Контрагент, СчетНаОплатуПокупателю.СуммаДокумента, ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка КАК СсылкаПлатежноеПоручение, ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка.Проведен КАК ПроведенПоручение, ВложенныйЗапрос.СсылкаРеализации, ВложенныйЗапрос.ПроведенРеализации ИЗ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка КАК СсылкаРеализации, РеализацияТоваровУслуг.Проведен КАК ПроведенРеализации ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Проведен = ИСТИНА) КАК ВложенныйЗапрос ПО СчетНаОплатуПокупателю.Ссылка = ВложенныйЗапрос.СсылкаРеализации.Сделка ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа ПО (ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Сделка = СчетНаОплатуПокупателю.Ссылка) ГДЕ СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!