Advertisement
Guest User

Untitled

a guest
Apr 24th, 2014
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.01 KB | None | 0 0
  1. Индивидуальные отчеты: _Тестовый EXCEL
  2. .Шаблон = КаталогОтчетов() + "SHABLON_CLIENT\\KVPLATA\\Отчет_Распределение_ОДН_2.xlsx";
  3. .ЗакрытьОкно = 1;
  4. Начало таблицы
  5. {
  6.  
  7. out_file = "Отчет_по_распределение_ОДН2_";
  8.  
  9. Excel_Create( Шаблон );
  10. НачатьС = 7;
  11.  
  12. ИмяОтчета = "Отчет по распределению ОДН";
  13.  
  14. пДатНач = пДатКнц = РабМес()
  15.  
  16. пДатаО = РабМес();
  17.  
  18. Если(!Спросить("Укажите дату построения отчета: ", пДатаО))
  19. Ошибка("Построение отчета преравно!");
  20.  
  21. пДатНач = НачалоМесяца(пДатаО)
  22. пДатКнц = ПоследнееЧисло(пДатаО)
  23.  
  24. пДатаСледМесяц = СледующийМесяц(пДатаО,1);
  25.  
  26. Очистить(мЭксельШапка);
  27. мЭксельШапка["ИмяОтчета"] = ИмяОтчета;
  28. мЭксельШапка["Месяц"] = пДатаО;
  29. мЭксельШапка["ДатаВыгрузки"] = Текст(ТекДат(), "10(дд.мм.гггг)") + " " + Текст(ТекВремя(), "5(чч:мм)");
  30. Excel_Cells( 1, мЭксельШапка );
  31.  
  32. пМнквдом = ДанныеПараметра("МНКВДОМ");
  33.  
  34.  
  35. # Только многоквартирные дома
  36.  
  37. Перем запрос_домов = Query(`
  38. declare @cid int;
  39. set @cid = :1;
  40.  
  41. declare @mnk int;
  42. set @mnk = :2;
  43.  
  44. declare @curmonth datetime;
  45. set @curmonth = :3;
  46.  
  47. with child as
  48. (
  49. select ls.ROW_ID, ls.Счета, ls.Тип, ls.Номер
  50. from stack.[Лицевые счета] ls
  51. where row_id= @cid
  52.  
  53. union all
  54.  
  55. select parent.ROW_ID, parent.Счета, parent.Тип, parent.Номер
  56. from stack.[Лицевые счета] parent
  57. join child on parent.[Счета] = child.ROW_ID
  58.  
  59. )
  60. select child.ROW_ID, child.Номер, child.Тип
  61. from child
  62. inner join [stack].[Свойства] as sv on sv.[Счет-Параметры] = child.ROW_ID and sv.[Виды-Параметры] = @mnk
  63.  
  64. where child.Тип = 3 and sv.Значение = 1 and
  65. ((1 = case
  66. when sv.[ДатНач] is null then 1
  67. when sv.[ДатНач] <= @curmonth then 1
  68. else 0
  69. end)
  70. and (1 = case
  71. when sv.[ДатКнц] is null then 1
  72. when sv.[ДатКнц] >= @curmonth then 1
  73. else 0
  74. end)
  75. or (1 = case
  76. when MONTH(sv.[ДатНач]) = MONTH(@curmonth) and YEAR(sv.[ДатНач]) = YEAR(@curmonth) then 1
  77. else 0
  78. end))
  79. `, 500, "cid,S,mnk,S,curmonth,D");
  80.  
  81. Перем запрос_лицевых_по_дому = Query(
  82. `
  83. declare @cid int;
  84. set @cid = :1;
  85.  
  86. with child as
  87. (
  88. select ls.ROW_ID, ls.Счета, ls.Тип, ls.Номер
  89. from stack.[Лицевые счета] ls
  90. where row_id= @cid
  91.  
  92. union all
  93.  
  94. select parent.ROW_ID, parent.Счета, parent.Тип, parent.Номер
  95. from stack.[Лицевые счета] parent
  96. join child on parent.[Счета] = child.ROW_ID
  97.  
  98. )
  99. select child.ROW_ID, child.Номер, child.Тип
  100. from child
  101. where child.Тип = 5
  102. `
  103. , 500, "cid,S");
  104. Перем запрос_расхода_лс = Query(`
  105. declare @dom_id int;
  106. set @dom_id = :1;
  107.  
  108. declare @curdate datetime;
  109. set @curdate = :2;
  110.  
  111. select sum(ps.[Итоговый расход]) as LS_Counter
  112. from stack.[Показания счетчиков] ps
  113. where
  114. (ps.[Показания-Счет] = @dom_id )
  115. and (ps.[Тип] = 1)
  116. and (MONTH(ps.[Дата]) = MONTH(@curdate) )
  117. and (YEAR(ps.[Дата]) = YEAR(@curdate) )
  118.  
  119. `,100,"ls_id,S,curdate,D");
  120.  
  121. Перем запрос_одн_лс = Query(`
  122. declare @dom_id int;
  123. set @dom_id = :1;
  124.  
  125. declare @curdate datetime;
  126. set @curdate = :2;
  127. ;
  128. select sum(nt.[Объем]) as odn, nt.[Номер услуги] as ny
  129. from stack.[НТариф] nt
  130. where
  131. (nt.[Счет] = @dom_id)
  132. and
  133. (MONTH(nt.[Месяц расчета]) = MONTH(@curdate) )
  134. and (YEAR(nt.[Месяц расчета]) = YEAR(@curdate) )
  135. and (nt.[Номер услуги] in (148, 181))
  136. group by nt.[Номер услуги]
  137. `,100,"ls_id,S,curdate,D");
  138.  
  139. Очистить(мЭксель);
  140.  
  141.  
  142. i = 0;
  143. инд = 0;
  144.  
  145. tmp = "";
  146. }
  147. Построитель отчета
  148. {
  149.  
  150. запрос_домов.УстановитьПараметры('Список лицевых', пМнквдом, пДатаО);
  151.  
  152. Пока(запрос_домов.Следующий()){
  153. идтиДальше = 0;
  154. ВывестиСтатус( "Обработано домов всего: "+ i++ );
  155.  
  156. пДом_ИД = запрос_домов.ROW_ID;
  157.  
  158. Если( ПараметрНаДату( пДом_ИД, "ЛИФТ", пДатКнц ) == 0 )
  159. пНормОДН = ПрочитатьКонстанту( пДатКнц, "НОРМ_ОДН");
  160. иначе
  161. пНормОДН = ПрочитатьКонстанту( пДатКнц, "НОРМ_ОДН_Л");
  162.  
  163.  
  164. # Пока разбреу с непосредсветнным управлением
  165. Если (ПараметрНаДату(пДом_ИД, "Н_УПР", пДатКнц ) == 1 )
  166. {
  167. мЭксель[инд, 0] = "Непосредственное управление";
  168. идтиДальше = 1;
  169. }
  170.  
  171. Иначе Если(ПараметрНаДату(пДом_ИД, "РАСЧЕТ_УК", пДатКнц ) == 1 ){
  172. названиеУК = "";
  173. ПараметрНаДатуЛС(пДом_ИД, "ТСЖ", пДатКнц, "tmp", "tmp", "tmp", "названиеУК" );
  174. мЭксель[инд, 0] = названиеУК;
  175. идтиДальше = 1;
  176. }
  177. Если(идтиДальше){
  178. мЭксель[инд, 1] = "";
  179. мЭксель[инд, 2] = АдресЛицевогоSQL(пДом_ИД);
  180. пПлощадьМОП = ПараметрНаДату( пДом_ИД, "ОБЩДОМИМУЩ", пДатКнц );
  181. мЭксель[инд, 3] = пПлощадьМОП;
  182.  
  183. # Далее операции с лицевыми для этого дома
  184. запрос_лицевых_по_дому.УстановитьПараметры(пДом_ИД);
  185.  
  186. суммПлощадь = 0;
  187. жилПлощадь = 0;
  188. нежилПлощадь = 0;
  189.  
  190. отсчитЮр = 0;
  191. отсчитФиз = 0;
  192.  
  193. однФиз148 = 0;
  194. однЮр148 = 0;
  195. однФиз181 = 0;
  196. однЮр181 = 0;
  197.  
  198. Пока(запрос_лицевых_по_дому.Следующий()){
  199. _площ = ПараметрНаДату(запрос_лицевых_по_дому.ROW_ID, "ОБЩПЛОЩАДЬ", пДатКнц );
  200. _юл = ПараметрНаДату(запрос_лицевых_по_дому.ROW_ID, "ЮЛ", пДатКнц );
  201. запрос_расхода_лс.УстановитьПараметры(запрос_лицевых_по_дому.ROW_ID, пДатКнц);
  202. _расходПоЛС = 0;
  203. Пока(запрос_расхода_лс.Следующий())
  204. {
  205. _расходПоЛС += запрос_расхода_лс.LS_Counter;
  206. }
  207.  
  208. _объемОДН181ПоЛС = 0;
  209. _объемОДН148ПоЛС = 0;
  210. запрос_одн_лс.УстановитьПараметры(запрос_лицевых_по_дому.ROW_ID, пДатКнц);
  211. Пока(запрос_одн_лс.Следующий())
  212. {
  213. Если(запрос_одн_лс.ny == 148)
  214. _объемОДН148ПоЛС += запрос_одн_лс.odn;
  215. Иначе
  216. _объемОДН181ПоЛС += запрос_одн_лс.odn;
  217. }
  218.  
  219. Если(_юл == 1)
  220. {
  221. нежилПлощадь += _площ;
  222. отсчитЮр += _расходПоЛС;
  223. однЮр181 += _объемОДН181ПоЛС;
  224. однЮр148 += _объемОДН148ПоЛС;
  225. }
  226. Иначе
  227. {
  228. жилПлощадь += _площ;
  229. отсчитФиз += _расходПоЛС;
  230. однФиз181 += _объемОДН181ПоЛС;
  231. однФиз148 += _объемОДН148ПоЛС;
  232. }
  233. суммПлощадь += _площ
  234.  
  235.  
  236.  
  237. }
  238.  
  239. мЭксель[инд, 4] = суммПлощадь;
  240. мЭксель[инд, 5] = жилПлощадь;
  241. мЭксель[инд, 6] = нежилПлощадь;
  242. мЭксель[инд, 7] = "";
  243. мЭксель[инд, 8] = отсчитФиз;
  244. мЭксель[инд, 9] = отсчитЮр;
  245. мЭксель[инд, 10] = однФиз181;
  246. мЭксель[инд, 11] = однЮр181;
  247. мЭксель[инд, 12] = однФиз148;
  248. мЭксель[инд, 13] = однЮр148;
  249.  
  250. инд++;
  251. }
  252.  
  253.  
  254.  
  255. }
  256. Если(i == 0) Ошибка("Минимальный уровень - ДОМ!");
  257.  
  258. }
  259.  
  260. Конец таблицы
  261. {
  262. Excel_Data (1, НачатьС, 1, мЭксель);
  263. Excel_Close(1);
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement