Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Индивидуальные отчеты: _Тестовый EXCEL
- .Шаблон = КаталогОтчетов() + "SHABLON_CLIENT\\KVPLATA\\Отчет_Распределение_ОДН_2.xlsx";
- .ЗакрытьОкно = 1;
- Начало таблицы
- {
- out_file = "Отчет_по_распределение_ОДН2_";
- Excel_Create( Шаблон );
- НачатьС = 7;
- ИмяОтчета = "Отчет по распределению ОДН";
- пДатНач = пДатКнц = РабМес()
- пДатаО = РабМес();
- Если(!Спросить("Укажите дату построения отчета: ", пДатаО))
- Ошибка("Построение отчета преравно!");
- пДатНач = НачалоМесяца(пДатаО)
- пДатКнц = ПоследнееЧисло(пДатаО)
- пДатаСледМесяц = СледующийМесяц(пДатаО,1);
- Очистить(мЭксельШапка);
- мЭксельШапка["ИмяОтчета"] = ИмяОтчета;
- мЭксельШапка["Месяц"] = пДатаО;
- мЭксельШапка["ДатаВыгрузки"] = Текст(ТекДат(), "10(дд.мм.гггг)") + " " + Текст(ТекВремя(), "5(чч:мм)");
- Excel_Cells( 1, мЭксельШапка );
- пМнквдом = ДанныеПараметра("МНКВДОМ");
- # Только многоквартирные дома
- Перем запрос_домов = Query(`
- declare @cid int;
- set @cid = :1;
- declare @mnk int;
- set @mnk = :2;
- declare @curmonth datetime;
- set @curmonth = :3;
- with child as
- (
- select ls.ROW_ID, ls.Счета, ls.Тип, ls.Номер
- from stack.[Лицевые счета] ls
- where row_id= @cid
- union all
- select parent.ROW_ID, parent.Счета, parent.Тип, parent.Номер
- from stack.[Лицевые счета] parent
- join child on parent.[Счета] = child.ROW_ID
- )
- select child.ROW_ID, child.Номер, child.Тип
- from child
- inner join [stack].[Свойства] as sv on sv.[Счет-Параметры] = child.ROW_ID and sv.[Виды-Параметры] = @mnk
- where child.Тип = 3 and sv.Значение = 1 and
- ((1 = case
- when sv.[ДатНач] is null then 1
- when sv.[ДатНач] <= @curmonth then 1
- else 0
- end)
- and (1 = case
- when sv.[ДатКнц] is null then 1
- when sv.[ДатКнц] >= @curmonth then 1
- else 0
- end)
- or (1 = case
- when MONTH(sv.[ДатНач]) = MONTH(@curmonth) and YEAR(sv.[ДатНач]) = YEAR(@curmonth) then 1
- else 0
- end))
- `, 500, "cid,S,mnk,S,curmonth,D");
- Перем запрос_лицевых_по_дому = Query(
- `
- declare @cid int;
- set @cid = :1;
- with child as
- (
- select ls.ROW_ID, ls.Счета, ls.Тип, ls.Номер
- from stack.[Лицевые счета] ls
- where row_id= @cid
- union all
- select parent.ROW_ID, parent.Счета, parent.Тип, parent.Номер
- from stack.[Лицевые счета] parent
- join child on parent.[Счета] = child.ROW_ID
- )
- select child.ROW_ID, child.Номер, child.Тип
- from child
- where child.Тип = 5
- `
- , 500, "cid,S");
- Перем запрос_расхода_лс = Query(`
- declare @dom_id int;
- set @dom_id = :1;
- declare @curdate datetime;
- set @curdate = :2;
- select sum(ps.[Итоговый расход]) as LS_Counter
- from stack.[Показания счетчиков] ps
- where
- (ps.[Показания-Счет] = @dom_id )
- and (ps.[Тип] = 1)
- and (MONTH(ps.[Дата]) = MONTH(@curdate) )
- and (YEAR(ps.[Дата]) = YEAR(@curdate) )
- `,100,"ls_id,S,curdate,D");
- Перем запрос_одн_лс = Query(`
- declare @dom_id int;
- set @dom_id = :1;
- declare @curdate datetime;
- set @curdate = :2;
- ;
- select sum(nt.[Объем]) as odn, nt.[Номер услуги] as ny
- from stack.[НТариф] nt
- where
- (nt.[Счет] = @dom_id)
- and
- (MONTH(nt.[Месяц расчета]) = MONTH(@curdate) )
- and (YEAR(nt.[Месяц расчета]) = YEAR(@curdate) )
- and (nt.[Номер услуги] in (148, 181))
- group by nt.[Номер услуги]
- `,100,"ls_id,S,curdate,D");
- Очистить(мЭксель);
- i = 0;
- инд = 0;
- tmp = "";
- }
- Построитель отчета
- {
- запрос_домов.УстановитьПараметры('Список лицевых', пМнквдом, пДатаО);
- Пока(запрос_домов.Следующий()){
- идтиДальше = 0;
- ВывестиСтатус( "Обработано домов всего: "+ i++ );
- пДом_ИД = запрос_домов.ROW_ID;
- Если( ПараметрНаДату( пДом_ИД, "ЛИФТ", пДатКнц ) == 0 )
- пНормОДН = ПрочитатьКонстанту( пДатКнц, "НОРМ_ОДН");
- иначе
- пНормОДН = ПрочитатьКонстанту( пДатКнц, "НОРМ_ОДН_Л");
- # Пока разбреу с непосредсветнным управлением
- Если (ПараметрНаДату(пДом_ИД, "Н_УПР", пДатКнц ) == 1 )
- {
- мЭксель[инд, 0] = "Непосредственное управление";
- идтиДальше = 1;
- }
- Иначе Если(ПараметрНаДату(пДом_ИД, "РАСЧЕТ_УК", пДатКнц ) == 1 ){
- названиеУК = "";
- ПараметрНаДатуЛС(пДом_ИД, "ТСЖ", пДатКнц, "tmp", "tmp", "tmp", "названиеУК" );
- мЭксель[инд, 0] = названиеУК;
- идтиДальше = 1;
- }
- Если(идтиДальше){
- мЭксель[инд, 1] = "";
- мЭксель[инд, 2] = АдресЛицевогоSQL(пДом_ИД);
- пПлощадьМОП = ПараметрНаДату( пДом_ИД, "ОБЩДОМИМУЩ", пДатКнц );
- мЭксель[инд, 3] = пПлощадьМОП;
- # Далее операции с лицевыми для этого дома
- запрос_лицевых_по_дому.УстановитьПараметры(пДом_ИД);
- суммПлощадь = 0;
- жилПлощадь = 0;
- нежилПлощадь = 0;
- отсчитЮр = 0;
- отсчитФиз = 0;
- однФиз148 = 0;
- однЮр148 = 0;
- однФиз181 = 0;
- однЮр181 = 0;
- Пока(запрос_лицевых_по_дому.Следующий()){
- _площ = ПараметрНаДату(запрос_лицевых_по_дому.ROW_ID, "ОБЩПЛОЩАДЬ", пДатКнц );
- _юл = ПараметрНаДату(запрос_лицевых_по_дому.ROW_ID, "ЮЛ", пДатКнц );
- запрос_расхода_лс.УстановитьПараметры(запрос_лицевых_по_дому.ROW_ID, пДатКнц);
- _расходПоЛС = 0;
- Пока(запрос_расхода_лс.Следующий())
- {
- _расходПоЛС += запрос_расхода_лс.LS_Counter;
- }
- _объемОДН181ПоЛС = 0;
- _объемОДН148ПоЛС = 0;
- запрос_одн_лс.УстановитьПараметры(запрос_лицевых_по_дому.ROW_ID, пДатКнц);
- Пока(запрос_одн_лс.Следующий())
- {
- Если(запрос_одн_лс.ny == 148)
- _объемОДН148ПоЛС += запрос_одн_лс.odn;
- Иначе
- _объемОДН181ПоЛС += запрос_одн_лс.odn;
- }
- Если(_юл == 1)
- {
- нежилПлощадь += _площ;
- отсчитЮр += _расходПоЛС;
- однЮр181 += _объемОДН181ПоЛС;
- однЮр148 += _объемОДН148ПоЛС;
- }
- Иначе
- {
- жилПлощадь += _площ;
- отсчитФиз += _расходПоЛС;
- однФиз181 += _объемОДН181ПоЛС;
- однФиз148 += _объемОДН148ПоЛС;
- }
- суммПлощадь += _площ
- }
- мЭксель[инд, 4] = суммПлощадь;
- мЭксель[инд, 5] = жилПлощадь;
- мЭксель[инд, 6] = нежилПлощадь;
- мЭксель[инд, 7] = "";
- мЭксель[инд, 8] = отсчитФиз;
- мЭксель[инд, 9] = отсчитЮр;
- мЭксель[инд, 10] = однФиз181;
- мЭксель[инд, 11] = однЮр181;
- мЭксель[инд, 12] = однФиз148;
- мЭксель[инд, 13] = однЮр148;
- инд++;
- }
- }
- Если(i == 0) Ошибка("Минимальный уровень - ДОМ!");
- }
- Конец таблицы
- {
- Excel_Data (1, НачатьС, 1, мЭксель);
- Excel_Close(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement