Имя: Пароль:
1C
1С v8
Дублируются строки отчета
0 prilforreal
 
26.06.17
11:24
Добрый день! Помогите найти ошибку в отчете, при формировании дублируются строки отчета. Вот код процедуры с кодом запроса, заранее очень благодарен!


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

    //// Если ошибка в запросе, то выход из процедуры
    //Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    //    Возврат;
    //КонецЕсли;
    Рез=Запрос.Выполнить().Выбрать();
    //СуммаКонОст = 0;
    //КэшФлоНачОст = 0;
    //КэшФлоПриход = 0;
    //КэшФлоРасход = 0;
    //КэшФлоКонОст = 0;
    //ПлощадьРасход = 0;
    //ПериметрРасход = 0;
    СтрИтогов=Новый Структура("СуммаКонОст,КэшФлоНачОст,КэшФлоПриход,КэшФлоРасход,КэшФлоКонОст,ПлощадьРасход,ПериметрРасход",0,0,0,0,0,0,0);
    //// Подготовка к заполнению выходных форм данными запроса
    //Таб = СоздатьОбъект("Таблица");
    Таб=Новый ТабличныйДокумент;
    //Таб.ИсходнаяТаблица("Заказы");
    Макет=ПолучитьМакет("Заказы");
    ОбластьЗаголовок=Макет.ПолучитьОбласть("Заголовок");
    ОбластьЗаказ=Макет.ПолучитьОбласть("Заказ");
    ОбластьИтого=Макет.ПолучитьОбласть("Итого");
    //// Заполнение полей "Заголовок"
    //Таб.ВывестиСекцию("Заголовок");
    Таб.Вывести(ОбластьЗаголовок);
    //Состояние("Заполнение выходной таблицы...");
    //Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    ии=0;
    //док=создатьобъект("Документ");
    //Пока Запрос.Группировка(1) = 1 Цикл
    Пока Рез.Следующий() Цикл
    //    ТДМ="";
    //    ТДДЗ="";
    //    // Заполнение полей Заказ
        Если ((Рез.СуммаКонОст=0 и флусл=1) или (Рез.СуммаКонОст<>0 и флусл=2) или флусл=3)
            //и ((флпер=2 и (Запрос.КэшФлоРасход<>0 или Запрос.КэшФлоПриход<>0)) или флпер<>2)
            Тогда
            ии=ии+1;                  
    //        СуммаКонОст = СуммаКонОст+Запрос.СуммаКонОст;
    //        КэшФлоНачОст =КэшФлоНачОст+Запрос.КэшФлоНачОст;  
    //        КэшФлоПриход =КэшФлоПриход+Запрос.КэшФлоПриход;
    //        КэшФлоРасход =КэшФлоРасход+Запрос.КэшФлоРасход;
    //        КэшФлоКонОст =КэшФлоКонОст+Запрос.КэшФлоКонОст;
    //        ПлощадьРасход =ПлощадьРасход+Запрос.ПлощадьРасход;
    //        ПериметрРасход =ПериметрРасход+Запрос.ПериметрРасход;
    //        СуммаКонОст = СуммаКонОст+Запрос.СуммаКонОст;
            СтрИтогов.КэшФлоНачОст =СтрИтогов.КэшФлоНачОст+Рез.КэшФлоНачОст;  
            СтрИтогов.КэшФлоПриход =СтрИтогов.КэшФлоПриход+Рез.КэшФлоПриход;
            СтрИтогов.КэшФлоРасход =СтрИтогов.КэшФлоРасход+Рез.КэшФлоРасход;
            СтрИтогов.КэшФлоКонОст =СтрИтогов.КэшФлоКонОст+Рез.КэшФлоКонОст;
            СтрИтогов.ПлощадьРасход =СтрИтогов.ПлощадьРасход+Рез.ПлощадьРасход;
            СтрИтогов.ПериметрРасход =СтрИтогов.ПериметрРасход+Рез.ПериметрРасход;
    //        флМонтаж="";
    //        флДилЗаказ="";
    //        Наряд="";
    //        док.ВыбратьПодчиненныеДокументы(Запрос.Заказ.ДатаДок,,Запрос.Заказ);      
    //        Пока док.ПолучитьДокумент()=1 цикл
    //            если док.Вид()="НарядЗаказа" тогда
    //                Наряд=""+док.ДатаДок+" - ("+док.Монтажник1+"; "+док.Монтажник2+")";    
    //            конецесли;
    //                                        
    //        конеццикла;
    //        Пока Запрос.Группировка(2) = 1 Цикл
    //            Если СокрЛП(Запрос.ТекДок.Вид())="Монтаж" Тогда флМонтаж="М";ТДМ=Запрос.ТекДок; КонецЕсли;
    //            Если СокрЛП(Запрос.ТекДок.Вид())="ДилЗаказ" Тогда флДилЗаказ="ДЗ";ТДДЗ=Запрос.ТекДок; КонецЕсли;
    //        КонецЦикла;
    //        Таб.ВывестиСекцию("Заказ");
            ОбластьЗаказ.Параметры.Заполнить(Рез);
            ОбластьЗаказ.Параметры.ии=ии;
            ОбластьЗаказ.Параметры.Наряд=?(ЗначениеЗаполнено(Рез.Наряд),""+Формат(Рез.НарядДата,"ДЛФ=Д")+"- ("+Рез.Наряд+")","");
            Таб.Вывести(ОбластьЗаказ);
        КонецЕсли;
    КонецЦикла;
    //// Заполнение полей "Итого"
    //Таб.ВывестиСекцию("Итого");
    ОбластьИтого.Параметры.Заполнить(СтрИтогов);
    Таб.Вывести(ОбластьИтого);
    //// Вывод заполненной формы
    //Таб.ТолькоПросмотр(1);
    Таб.ТолькоПросмотр=Истина;
    //Таб.Показать("Заказы", "");
    Таб.Показать("Заказы");
КонецПроцедуры
1 Buster007
 
26.06.17
11:27
Сгруппируй строки и уйдут дубли )
2 prilforreal
 
26.06.17
12:46
Buster007 Сделал АвтогруппировкуСтрок, но отчет также формируется  с дубликатами строк..
3 pessok
 
26.06.17
13:08
(2) ну дык ресурсы то надо суммировать, а у тебя и по ним группирвока
4 pessok
 
26.06.17
13:08
+(3) все суммы/количества перетащи в "нижнее окошко" :D