Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Создание подчиненных документов на основании документа "Счет на оплату покупателю"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
PavlovaYA
Добрый день. Помогите пожалуйста новичку в программировании.
Создаю внешнюю обработку, по которой на основании документа "Счет на оплату покупателю" можно создать подчиненные документы "Реализация товаров и услуг" и "Платежное поручение".
Проблема в том, что по "Счету на оплату покупателю" №В0000000313 по документу "Платежное поручение" дублируетя в три строки хоть документ "Реализация товаров и услуг" всего один.
Скриншоты прилагаю:




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


podcast
PavlovaYA @ Сегодня, 15:57 необходимо зарегистрироваться для просмотра ссылки ,
Я конечно не уверен, но у вас в запросе что то не так мне кажется.
ВЫБРАТЬ
    СчетНаОплатуПокупателю.Ссылка,
    СчетНаОплатуПокупателю.Проведен,
    СчетНаОплатуПокупателю.Дата,
    СчетНаОплатуПокупателю.Организация,
    СчетНаОплатуПокупателю.Контрагент,
    СчетНаОплатуПокупателю.СуммаДокумента КАК СуммаДокумента,
    ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка КАК СсылкаПлатежноеПоручение,
    ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка.Проведен КАК ПроведенПоручение
ПОМЕСТИТЬ ВТ_Счет
ИЗ
    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа
        ПО (ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Сделка = СчетНаОплатуПокупателю.Ссылка)
ГДЕ
    СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
    И СчетНаОплатуПокупателю.Контрагент = &Контраген
    И СчетНаОплатуПокупателю.Организация = &Организация
    И СчетНаОплатуПокупателю.ДоговорКонтрагента = &ДоговорКонтрагента
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Счет.Ссылка,
    ВТ_Счет.Проведен,
    ВТ_Счет.Дата,
    ВТ_Счет.Организация,
    ВТ_Счет.Контрагент,
    ВТ_Счет.СуммаДокумента,
    ВТ_Счет.СсылкаПлатежноеПоручение,
    ВТ_Счет.ПроведенПоручение
ИЗ
    ВТ_Счет КАК ВТ_Счет
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ВТ_Счет.Ссылка = РеализацияТоваровУслуг.Сделка

Попробуйте так.
logist
Ваш запрос так построен. Левое соединение работает для каждого правого, поэтому будет столько строк сколько найдется соединений. В данном случае у вас в платежке вероятно по три строки, поэтому такую таблицу надо брать вложенным запросом что бы свернуть, и в итоге вышла одна ссылка.
PavlovaYA
logist @ Сегодня, 15:16 необходимо зарегистрироваться для просмотра ссылки ,

Вот таким образом?

ВЫБРАТЬ
    СчетНаОплатуПокупателю.Ссылка,
    СчетНаОплатуПокупателю.Проведен,
    СчетНаОплатуПокупателю.Дата,
    СчетНаОплатуПокупателю.Организация,
    СчетНаОплатуПокупателю.Контрагент,
    СчетНаОплатуПокупателю.СуммаДокумента,
    ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка КАК СсылкаПлатежноеПоручение,
    ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Ссылка.Проведен КАК ПроведенПоручение,
    ВложенныйЗапрос.СсылкаРеализации,
    ВложенныйЗапрос.ПроведенРеализации
ИЗ
    Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            РеализацияТоваровУслуг.Ссылка КАК СсылкаРеализации,
            РеализацияТоваровУслуг.Проведен КАК ПроведенРеализации
        ИЗ
            Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ГДЕ
            РеализацияТоваровУслуг.Проведен = ИСТИНА) КАК ВложенныйЗапрос
        ПО СчетНаОплатуПокупателю.Ссылка = ВложенныйЗапрос.СсылкаРеализации.Сделка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеВходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеВходящееРасшифровкаПлатежа
        ПО (ПлатежноеПоручениеВходящееРасшифровкаПлатежа.Сделка = СчетНаОплатуПокупателю.Ссылка)
ГДЕ
    СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
logist
Цитата(PavlovaYA @ 28.10.16, 16:54) необходимо зарегистрироваться для просмотра ссылки
Вот таким образом?

Да только вложенный запрос не по РТУ а по Платежкам.
PavlovaYA
logist @ Сегодня, 15:56 необходимо зарегистрироваться для просмотра ссылки ,
Спасибо, но все-таки по РТУ получается нужный результат.

Я указываю что "РеализацияТоваровУслуг.Проведен = ИСТИНА" и этих строк не нужных нет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.