Имя: Пароль:
1C
1С v8
ВПФ одна строка дублируется при печати
0 nequiza
 
28.06.23
10:40
Всем привет, делаю ВПФ, из запроса в макет выводятся строки из документа, но они дублируются кучу раз, подскажите, как решить эту проблему?


Код модуля:

Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, СсылкаОбъект, ОбъектыПечати) Экспорт
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПереработчику";
    
    Макет = ПолучитьМакет("Макет");
    
    ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
    ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
    ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");
    
    
    ОбластьШапки.Параметры.ТекстЗаголовка        = "Отчет об использовании материалов, переданных заказчиком";
    ОбластьШапки.Параметры.ТекстЗаголовка1        = "по счету №" + ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СсылкаНаОбъект.Договор.Номер, Истина, Ложь) + " от " + Формат(СсылкаНаОбъект.Договор.Дата,"ДФ=dd.MM.yyyy");
    ОбластьШапки.Параметры.ТекстЗаголовка2        = "        Подрядчиком были получены от Заказчика и использованы на выполнение работ по изготовлению изделий материалы в следующем объеме" + Символы.ПС +
                                                  "(количестве):";
     ОбластьДанные.Параметры.НомерДата       = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СсылкаОбъект.Договор.Номер, Истина, Ложь) + " от " + Формат(СсылкаОбъект.Договор.Дата,"ДФ=dd.MM.yyyy");

    ТабДок.Вывести(ОбластьШапки);
    
// ПУНКТ 1 и 3

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

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

     ОбластьДанные.Параметры.НомерДата       = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СсылкаОбъект.Договор.Номер, Истина, Ложь) + " от " + Формат(СсылкаОбъект.Договор.Дата,"ДФ=dd.MM.yyyy");
     //ОбластьДанные.Параметры.НомерДата       = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СсылкаОбъект.Номер, Истина, Ложь) + " от " + Формат(СсылкаОбъект.Дата,"ДФ=dd.MM.yyyy");
    
// ПУНКТ 4          
     ЗапросБ = Новый Запрос;
    
     ЗапросБ.Текст = "ВЫБРАТЬ
                     |    ПередачаТоваровХранителюТовары.Цена КАК ЦенаНоменклатура,
                     |    ПередачаТоваровХранителю.Дата КАК Дата,
                     |    ПередачаТоваровХранителю.Номер КАК Номер,
                     |    ПередачаТоваровХранителюТовары.Количество КАК Количество,
                     |    ПередачаТоваровХранителюТовары.Сумма КАК Сумма
                     |ИЗ
                     |    Документ.ПередачаТоваровХранителю.Товары КАК ПередачаТоваровХранителюТовары
                     |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПередачаТоваровХранителю КАК ПередачаТоваровХранителю
                     |        ПО ПередачаТоваровХранителюТовары.Ссылка = ПередачаТоваровХранителю.Ссылка
                     |ГДЕ
                     |    ПередачаТоваровХранителюТовары.ЗаказКлиента = &Ссылка
                     |    И ПередачаТоваровХранителюТовары.Номенклатура = &НоменклатураЗаказа";                  
                  
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ЗапросБ.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
        ЗапросБ.УстановитьПараметр("НоменклатураЗаказа", Выборка.Номенклатура);
        ВыборкаБ = ЗапросБ.Выполнить().Выбрать();
        Пока ВыборкаБ.Следующий() Цикл
            ОбластьДанные.Параметры.ЦенаНоменклатура = ВыборкаБ.ЦенаНоменклатура;
            ОбластьДанные.Параметры.НомерДата = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ВыборкаБ.Номер)+ " от " +Формат(ВыборкаБ.Дата,"ДФ=dd.MM.yyyy");;
            Сообщить(СсылкаНаОбъект);
        КонецЦикла;
    
    КонецЦикла;
        ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Выборка);
                ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,ВыборкаБ);

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

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

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

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

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

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

    
    
КонецФункции


Проблема в первом запросе. Наименования начинают дублироваться.
1 vicof
 
28.06.23
10:56
Зачем тебе там правые соединения?
2 vicof
 
28.06.23
10:57
И зачем вообще соединения?
3 ColonelAp4u
 
28.06.23
11:16
(0) // ПУНКТ 1 и 3 убери соединения, сделай объединение,  помести в вт, добавь выборку из // ПУНКТ 4, так же в // ПУНКТ 4 убери соединение оно там не нужно, в условии добавь
|    И ПередачаТоваровХранителюТовары.Номенклатура В (Выбрать ВТ.НоменклатураЗаказаИЗВТ КАК НоменклатураЗаказаИЗВТ ИЗ ВТ КАК ВТ"
// ПУНКТ 5 в первом запросе убери соединение оно там не нужно, во втором убери соединение а |    ПередачаТоваровХранителюТовары.Сссылка.Дата/Номер бери вот так.
Не забывай группировать все запросы
4 nequiza
 
28.06.23
11:45
(3) Спасибо за подсказку!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший