|
Запрос: группировочные суммы выводить в каждую строку | ☑ | ||
---|---|---|---|---|
0
Adgjj
12.07.12
✎
11:16
|
Здравствуйте!
В большом запросе (приведу в следующем посте) во все строки с одинаковыми значениями полей ДатаВыписки, ЕО, СменаXY, надо добавить поля с суммами по полям ВыдатьГорючего, СпидометрВыезда, СпидометрВозвращения и еще 5 полей. Нужно, чтоб в ТЗ не были добавлены группировочные строки, поэтому надо добавить поля. Скажите, пжл, как это написать? |
|||
1
Adgjj
12.07.12
✎
11:18
|
Запрос.Текст = "ВЫБРАТЬ //Путевой лист и Простои из него
//1) ОбщиеДанные | ВыработкаТС_Лес.ПутЛист.ДатаВыписки КАК ДатаВыписки, //| ВыработкаТС_Лес.Период КАК ДатаДок, //это дата закрытия ДатаВыезда | ВыработкаТС_Лес.ПутЛист КАК ДОКУМЕНТ, //для определения того, что ездки относятся к одному ПутЛист | ВыработкаТС_Лес.ПутЛист.ВидПЛ КАК ВидДок, //для проверки в сообщении ниже запроса | ВЫБОР | КОГДА ВыработкаТС_Лес.ПутЛист.ВидПЛ = ЗНАЧЕНИЕ(Перечисление.уатВидыПЛ._4С) ТОГДА | ВЫБОР | КОГДА (ВыработкаТС_Лес.ПутЛист.Режим_Лес = ЗНАЧЕНИЕ(Перечисление.РежимыРаботы_Лес.Режим_67)) ТОГДА | ВЫБОР КОГДА 7<=ЧАС(ВыработкаТС_Лес.ДатаВыезда) и ЧАС(ВыработкаТС_Лес.ДатаВыезда)<19 ТОГДА | ""X"" | ИНАЧЕ | ""Y"" | КОНЕЦ | КОГДА (ВыработкаТС_Лес.ПутЛист.Режим_Лес = ЗНАЧЕНИЕ(Перечисление.РежимыРаботы_Лес.Режим_19)) ТОГДА | ВЫБОР КОГДА 8<=ЧАС(ВыработкаТС_Лес.ДатаВыезда) и ЧАС(ВыработкаТС_Лес.ДатаВыезда)<20 ТОГДА | ""X"" | ИНАЧЕ | ""Y"" | КОНЕЦ | КОНЕЦ | КОГДА ВыработкаТС_Лес.ПутЛист.ВидПЛ = ЗНАЧЕНИЕ(Перечисление.уатВидыПЛ._4П) ТОГДА | ""X"" | КОНЕЦ КАК СменаXY, | уатПервоначальныеСведенияТС.КодСАП КАК ЕО, //д. б. заполнено, иначе сразу после запроса сообщение | уатПервоначальныеСведенияТС.РабочееМесто КАК РабМесто, //д. б. заполнено, иначе сразу после запроса сообщение | ""60"" + ВыработкаТС_Лес.ПутЛист.ВыпустилМеханик.Код КАК ТаноМеханика, | ВыработкаТС_Лес.ПутЛист.Номер КАК НомерДок, //2) ПоказателиРаботы | ВыработкаТС_Лес.КоличествоКмГруз + ВыработкаТС_Лес.КоличествоКмПорожний КАК ОбщПробег, | ВыработкаТС_Лес.КоличествоКмГруз КАК ГрПробег, //| КоэфУвелНормы | уатСчетчикиТС.СпНач КАК СпидометрВыезда, | уатСчетчикиТС.Значение КАК СпидометрВозвращения, | уатРасходГСМнаТС.ОстатокТопливаВыезд КАК ОстатокВыезда, | уатРасходГСМнаТС.ОстатокТопливаВозврат КАК ОстатокВозвращения, | СУММА(уатОстаткиГСМнаТС.Количество) КАК ВыдатьГорючего, //3) Операции //| ЕСТЬNULL(ВыработкаТС_Лес.ВидРаботы.КодСАП,уатПростои.ВидПростоя.КодСАП) КАК КодОперации, //д. б. заполнено, иначе сразу после запроса сообщение //| ЕСТЬNULL(ВыработкаТС_Лес.ДатаВыезда ,уатПростои.Период) КАК ДатаВремяНачала, //| ЕСТЬNULL(ВыработкаТС_Лес.ДатаВозвращения ,уатПростои.ДатаОкончПростоя) КАК ДатаВремяОкончания, | ВыработкаТС_Лес.ВидРаботы.КодСАП КАК КодОперации, //д. б. заполнено, иначе сразу после запроса сообщение | ВыработкаТС_Лес.ДатаВыезда КАК ДатаВремяНачала, | ВыработкаТС_Лес.ДатаВозвращения КАК ДатаВремяОкончания, | ВыработкаТС_Лес.Водитель.Код КАК ТаноВодителя, //| ВыработкаТС_Лес.КоличествоКмГруз + ВыработкаТС_Лес.КоличествоКмПорожний КАК ОбщПробег, //есть выше // | ВыработкаТС_Лес.КоличествоКмГруз КАК ГрПробегОп, //ГрПробегОп !!! //4) Материалы | уатРасходГСМнаТС.РасходПоФакту КАК РасходТоплива, | уатПервоначальныеСведенияТС.МВЗ, //д. б. заполнено, иначе сразу после запроса сообщение //5) Моё | ВыработкаТС_Лес.Организация, //НУЖНО ОБЯЗАТЕЛЬНО ДЛЯ СОРТИРОВКИ | уатПервоначальныеСведенияТС.ОсновноеСредство КАК ОсновноеСредство, //для вывода сообщения о незаполненности КодСАП для авто | ВыработкаТС_Лес.Водитель КАК Водитель, //для вывода сообщения о незаполненности ВидРабот путевки | ВыработкаТС_Лес.ВидРаботы КАК ВидРаботы, //для вывода сообщения | NULL КАК ВидПростоя, //уатПростои.ВидПростоя, //для вывода сообщения | ВыработкаТС_Лес.ВидРаботы.КодСАП КАК ВидРаботыКодСАП, //для вывода сообщения | NULL КАК ВидПростояКодСАП //для вывода сообщения уатПростои.ВидПростоя.КодСАП //| NULL //ПростоиТС.Стажировка //| ВыработкаТС_Лес.НомерШтатного КАК РабМесто, //| уатПростои.НомерШтатного КАК РабМестоПростоя //| СУММА(ВыработкаТС_Лес.КоличествоЧасов) КАК КоличествоЧасов, //| уатПростои.Время КАК ВремяПростоя, |ИЗ | РегистрНакопления.ВыработкаТС_Лес КАК ВыработкаТС_Лес | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатОстаткиГСМнаТС КАК уатОстаткиГСМнаТС | ПО ВыработкаТС_Лес.ПутЛист = уатОстаткиГСМнаТС.ПутевойЛист //ВыдатьГорючего получим не из уатОстаткиГСМнаТС, а из путевки непосредственно, //чтоб количество строк в ТЗ не множилось по кол-ву документов-заправок //Пример: ПЛ KOT00000121 от 02.12.2011 - 3 документа заправки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатРасходГСМнаТС КАК уатРасходГСМнаТС | ПО ВыработкаТС_Лес.ПутЛист = уатРасходГСМнаТС.Регистратор | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС | ПО ВыработкаТС_Лес.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС | ПО ВыработкаТС_Лес.ПутЛист = уатСчетчикиТС.Регистратор //| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.уатПростои КАК уатПростои //Простои из путевых листов //| ПО ВыработкаТС_Лес.ПутЛист = уатПростои.Регистратор |ГДЕ //| ВыработкаТС_Лес.Период МЕЖДУ &ДатаС И &ДатаПо | ВыработкаТС_Лес.ПутЛист.ДатаВыписки МЕЖДУ &ДатаС И &ДатаПо //ОТНОСИТЬ К ПЕРИОДУ ПО ДАТЕ ВЫПИСКИ(!!!) ПУТЕВОГО ЛИСТА | И ВыработкаТС_Лес.Активность //| наложить ограничение на ВидПЛ? |"; Если Организация <> Справочники.Организации.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + " | И ВыработкаТС_Лес.Организация = &Организация "; КонецЕсли; Запрос.Текст = Запрос.Текст + " |"; Если НомерТранспортноеСредство <> "" Тогда Запрос.Текст = Запрос.Текст + " | И ВыработкаТС_Лес.ТС = &ТС"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |"; Если ВидТС_Лес <> Перечисления.ВидыАвтотранспорта.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + " | И уатПервоначальныеСведенияТС.ВидТС_Лес = &ВидТС_Лес"; //Грузовой КонецЕсли; Запрос.Текст = Запрос.Текст + " | |СГРУППИРОВАТЬ ПО | ВыработкаТС_Лес.ПутЛист.ДатаВыписки, | ВыработкаТС_Лес.ПутЛист, | ВыработкаТС_Лес.ДатаВыезда, | ВыработкаТС_Лес.ДатаВозвращения, | ВыработкаТС_Лес.ПутЛист.ДатаВыезда, | ВыработкаТС_Лес.ПутЛист.ДатаВозвращения, | ВыработкаТС_Лес.КоличествоКмГруз, | ВыработкаТС_Лес.КоличествоКмПорожний, | ВыработкаТС_Лес.Период, //| уатОстаткиГСМнаТС.Количество, // | уатРасходГСМнаТС.РасходПоФакту, | уатРасходГСМнаТС.ОстатокТопливаВыезд, | уатРасходГСМнаТС.ОстатокТопливаВозврат, | ВыработкаТС_Лес.ПутЛист.Номер, | уатСчетчикиТС.СпНач, | уатСчетчикиТС.Значение, | уатПервоначальныеСведенияТС.МВЗ, | уатПервоначальныеСведенияТС.РабочееМесто, | ВыработкаТС_Лес.Водитель.Код, | уатПервоначальныеСведенияТС.КодСАП, | ВыработкаТС_Лес.ПутЛист.ВыпустилМеханик, | ВыработкаТС_Лес.ВидРаботы, | уатПервоначальныеСведенияТС.ОсновноеСредство, | ВыработкаТС_Лес.Водитель, | ВыработкаТС_Лес.ПутЛист.ВидПЛ, | | ВыработкаТС_Лес.Период , | ВыработкаТС_Лес.ПутЛист.ВидПЛ, | ВыработкаТС_Лес.ПутЛист.Режим_Лес, | ВыработкаТС_Лес.ПутЛист.Номер, | уатСчетчикиТС.СпНач , | уатСчетчикиТС.Значение , | ВыработкаТС_Лес.ВидРаботы.КодСАП, | ВыработкаТС_Лес.Организация | |ОБЪЕДИНИТЬ | | ВЫБРАТЬ //Простои путевого листа //1) ОбщиеДанные | уатПростои.Регистратор.ДатаВыписки, ////////| уатПростои.Регистратор.Дата КАК ДатаДок, //это дата закрытия | уатПростои.Регистратор КАК ДОКУМЕНТ, //для определения того, что простои относятся к этому ПутЛист | уатПростои.Регистратор.ВидПЛ КАК ВидДок, //для проверки в сообщении ниже запроса | ""Простой"" КАК СменаXY, //""Простой"" - исп-ется для наглядности. не надо: возьмется из путевого листа по его дате, номеру, ВидПЛ<>""Ремонтный лист"" | уатПервоначальныеСведенияТС.КодСАП КАК ЕО, //надо для УПОРЯДОЧИТЬ //не надо:... д. б. заполнено, иначе сразу после запроса сообщение | NULL КАК РабМесто, //не надо:... д. б. заполнено, иначе сразу после запроса сообщение | NULL КАК ТаноМеханика, //не надо:... | уатПростои.Регистратор.Номер КАК НомерДок, //2) ПоказателиРаботы | NULL КАК ОбщПробег, //здесь нет | NULL КАК ГрПробег, //здесь нет //| КоэфУвелНормы | NULL КАК СпидометрВыезда, //не надо:... | NULL КАК СпидометрВозвращения, //не надо:... | NULL КАК ОстатокВыезда, //не надо:... | NULL КАК ОстатокВозвращения, //не надо:... | NULL КАК ВыдатьГорючего, //не надо:... //3) Операции ЗДЕСЬ НАДО ТОЛЬКО ЭТО | уатПростои.ВидПростоя.КодСАП КАК КодОперации, //д. б. заполнено, иначе сразу после запроса сообщение | уатПростои.Период КАК ДатаВремяНачала, | уатПростои.ДатаОкончПростоя КАК ДатаВремяОкончания, | уатПростои.Водитель.Код КАК ТаноВодителя, //| ВыработкаТС_Лес.КоличествоКмГруз + ВыработкаТС_Лес.КоличествоКмПорожний КАК ОбщПробег, //есть выше // | ВыработкаТС_Лес.КоличествоКмГруз КАК ГрПробегОп, //ГрПробегОп !!! //4) Материалы //не надо:... | NULL КАК РасходТоплива, | NULL КАК МВЗ, //д. б. заполнено, иначе сразу после запроса сообщение //5) Моё | уатПростои.Организация, //НУЖНО ОБЯЗАТЕЛЬНО ДЛЯ СОРТИРОВКИ | NULL КАК ОсновноеСредство, //для вывода сообщения о незаполненности КодСАП для авто | уатПростои.Водитель КАК Водитель, //для вывода сообщения о незаполненности ВидПростоя | NULL КАК ВидРаботы, //для вывода сообщения | уатПростои.ВидПростоя, //для вывода сообщения | NULL КАК ВидРаботыКодСАП, //для вывода сообщения | уатПростои.ВидПростоя.КодСАП КАК ВидПростояКодСАП //для вывода сообщения //| NULL //ПростоиТС.Стажировка //| ВыработкаТС_Лес.НомерШтатного КАК РабМесто, //| уатПростои.НомерШтатного КАК РабМестоПростоя //| СУММА(ВыработкаТС_Лес.КоличествоЧасов) КАК КоличествоЧасов, //| уатПростои.Время КАК ВремяПростоя, |ИЗ //Простои путевого листа | РегистрНакопления.уатПростои КАК уатПростои //Простои из путевых листов | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС | ПО уатПростои.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство |ГДЕ //| уатПростои.Регистратор.Дата МЕЖДУ &ДатаС И &ДатаПо //это дата закрытия | уатПростои.Регистратор.ДатаВыписки МЕЖДУ &ДатаС И &ДатаПо //ОТНОСИТЬ К ПЕРИОДУ ПО ДАТЕ ВЫПИСКИ(!!!) ПУТЕВОГО ЛИСТА | И уатПростои.Активность //| наложить ограничение на ВидПЛ - только сдельный или повременный? |"; Если Организация <> Справочники.Организации.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + " | И уатПростои.Организация = &Организация "; КонецЕсли; Запрос.Текст = Запрос.Текст + " |"; Если НомерТранспортноеСредство <> "" Тогда Запрос.Текст = Запрос.Текст + " | И уатПростои.ТС = &ТС"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |"; Если ВидТС_Лес <> Перечисления.ВидыАвтотранспорта.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + " | И уатПервоначальныеСведенияТС.ВидТС_Лес = &ВидТС_Лес"; //грузовой КонецЕсли; Запрос.Текст = Запрос.Текст + " | |СГРУППИРОВАТЬ ПО | уатПростои.Регистратор.ДатаВыписки, | уатПростои.Регистратор, | уатПростои.Регистратор.Дата, | уатПростои.Регистратор.ВидПЛ, | уатПростои.Регистратор.Номер, | уатПростои.Водитель.Код, | уатПростои.Водитель, | уатПростои.Организация, | уатПервоначальныеСведенияТС.МВЗ, | уатПервоначальныеСведенияТС.РабочееМесто, | уатПервоначальныеСведенияТС.КодСАП, | уатПростои.Период, | уатПростои.ДатаОкончПростоя, | уатПростои.ВидПростоя, | уатПростои.Время, | уатПростои.НомерШтатного, | уатПервоначальныеСведенияТС.ОсновноеСредство, | уатПростои.ВидПростоя.КодСАП | |ОБЪЕДИНИТЬ | | ВЫБРАТЬ //Ремонтный лист //1) ОбщиеДанные | ПростоиТС.Период КАК ДатаВыписки, | ПростоиТС.Регистратор КАК ДОКУМЕНТ, //для верхней части запроса, здесь тоже придется писать за компанию | ""Ремонтный лист"" КАК ВидДок, //для проверки в сообщении ниже запроса | ""X"" КАК СменаXY, | уатПервоначальныеСведенияТС.КодСАП КАК ЕО, //д. б. заполнено, иначе сразу после запроса сообщение | уатПервоначальныеСведенияТС.РабочееМесто КАК РабМесто, //д. б. заполнено, иначе сразу после запроса сообщение | NULL КАК ТаноМеханика, | ПростоиТС.Регистратор.Номер КАК НомерДок, //2) ПоказателиРаботы | 0 КАК ОбщПробег, | 0 КАК ГрПробег, //| КоэфУвелНормы | 0 КАК СпидометрВыезда, | 0 КАК СпидометрВозвращения, | 0 КАК ОстатокВыезда, | 0 КАК ОстатокВозвращения, | NULL КАК ВыдатьГорючего, //0 //3) Операции | ПростоиТС.ВидОбслуживания.КодСАП КАК КодОперации, //д. б. заполнено, иначе сразу после запроса сообщение | ПростоиТС.ДатаНачала КАК ДатаВремяНачала, | ПростоиТС.ДатаОкончания КАК ДатаВремяОкончания, | ПростоиТС.Водитель.Код КАК ТаноВодителя, //| ПростоиТС.КоличествоКмГруз + ПростоиТС.КоличествоКмПорожний КАК ОбщПробег, //есть выше // | ПростоиТС.КоличествоКмГруз КАК ГрПробегОп, //ГрПробегОп !!! //4) Материалы | 0 КАК РасходТоплива, | уатПервоначальныеСведенияТС.МВЗ, //д. б. заполнено, иначе сразу после запроса сообщение //5) Моё | ПростоиТС.Организация, //НУЖНО ОБЯЗАТЕЛЬНО ДЛЯ СОРТИРОВКИ | уатПервоначальныеСведенияТС.ОсновноеСредство КАК ОсновноеСредство, //для вывода сообщения о незаполненности КодСАП для авто | ПростоиТС.Водитель КАК Водитель, //для вывода сообщения о незаполненности ВидРабот путевки | ПростоиТС.ВидОбслуживания КАК ВидРаботы, //для вывода сообщения | NULL, //для вывода сообщения | ПростоиТС.ВидОбслуживания.КодСАП КАК ВидРаботыКодСАП, //для вывода сообщения | NULL КАК ВидПростояКодСАП //для вывода сообщения //| ПростоиТС.Стажировка |ИЗ | РегистрНакопления.ПростоиТС КАК ПростоиТС //Ремонтный лист | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатПервоначальныеСведенияТС КАК уатПервоначальныеСведенияТС | ПО ПростоиТС.ТС = уатПервоначальныеСведенияТС.ОсновноеСредство |ГДЕ | ПростоиТС.Период МЕЖДУ &ДатаС И &ДатаПо | И ПростоиТС.Активность | И НЕ ПростоиТС.Стажировка //стажировка используется только для оплаты 8-ми часов водителю, к-рый стажируется; на топливо не должно влиять → ч/з рем.лист |"; Если Организация <> Справочники.Организации.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + " | И ПростоиТС.Организация = &Организация "; КонецЕсли; Запрос.Текст = Запрос.Текст + " |"; Если НомерТранспортноеСредство <> "" Тогда Запрос.Текст = Запрос.Текст + " | И ПростоиТС.ТС = &ТС"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |"; Если ВидТС_Лес <> Перечисления.ВидыАвтотранспорта.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + " | И уатПервоначальныеСведенияТС.ВидТС_Лес = &ВидТС_Лес"; //грузовой КонецЕсли; Запрос.Текст = Запрос.Текст + " | |СГРУППИРОВАТЬ ПО | ПростоиТС.Период, | ПростоиТС.Регистратор, | ПростоиТС.ДатаНачала, | ПростоиТС.ДатаОкончания, | ПростоиТС.ВидОбслуживания, | ПростоиТС.Регистратор.Дата, | ПростоиТС.Регистратор.Номер, | ПростоиТС.Водитель.Код, | ПростоиТС.Водитель, | ПростоиТС.Организация, | ПростоиТС.ВидОбслуживания.КодСАП, | уатПервоначальныеСведенияТС.МВЗ, | уатПервоначальныеСведенияТС.РабочееМесто, | уатПервоначальныеСведенияТС.КодСАП, | ПростоиТС.Период, | уатПервоначальныеСведенияТС.ОсновноеСредство //| ПростоиТС.Стажировка | |УПОРЯДОЧИТЬ ПО //| НомерДок, СменаXY, ДатаДок //СменаXY перед ДатаДок, //т.к. нужно, чтобы сначала шла строка по ездкам путевого листа, а потом по простоям(погрузка/разгрузка) для вывода секций макета. | Организация, ЕО, ДОКУМЕНТ, ДатаВремяНачала, СменаXY АВТОУПОРЯДОЧИВАНИЕ |"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ДатаС" , НачалоДня(ДатаС)); Запрос.УстановитьПараметр("ДатаПо" , КонецДня(ДатаПо)); Запрос.УстановитьПараметр("ТС" , ТранспортноеСредство); //НомерТранспортноеСредство Запрос.УстановитьПараметр("ВидТС_Лес" , ВидТС_Лес); //Перечисления.ВидыАвтотранспорта.Грузовой ТЗ = Запрос.Выполнить().Выгрузить(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |