Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. with
  2.  
  3. ws_interval as
  4. ---------
  5. (
  6. select ws.id_paragraph
  7. , min(ws.d_start) as d_start
  8. , max(ws.d_end) as d_end
  9. from working_hours_sheet ws
  10. where ws.id_paragraph = 9824473
  11. group by ws.id_paragraph
  12. )
  13. ---------
  14.  
  15. , whs_whis_edition as
  16. ---------
  17. (
  18. -- график и редакции графика
  19. -- график
  20. select ws.id_working_hours_sheet
  21. from working_hours_sheet ws
  22. where ws.id_paragraph = 9824473
  23. union all
  24. -- редакции графика
  25. select ws.id_working_hours_sheet
  26. from working_hours_sheet ws
  27. where ws.id_whs_changed in
  28. (
  29. select ws.id_working_hours_sheet
  30. from working_hours_sheet ws
  31. where ws.id_paragraph = 9824473
  32. )
  33. )
  34. ---------
  35.  
  36. , workers_this_whs as
  37. ---------
  38. (
  39. -- работники заданного табеля
  40. select ew.id_employees_in_whs
  41. , s.id_worker
  42. , ws.id_d
  43. from working_hours_sheet ws
  44. , employees_in_whs ew
  45. , staff s
  46. where ws.id_paragraph = 9824473
  47. and ew.id_working_hours_sheet = ws.id_working_hours_sheet
  48. and s.id_staff = ew.id_staff
  49. )
  50. ---------
  51.  
  52. , workers_ex as
  53. -- Работники заданного табеля и актуальных редакций предыдущего табеля для учёта переходящих смен (должно ограничиваться датами)
  54. ---------
  55. (
  56. -- работники заданного табеля
  57. select ew.id_employees_in_whs
  58. from workers_this_whs ew
  59. union all
  60.  
  61. -- работники других табелей (с учётом редакций) из состава заданного табеля (для учёта мигрирующих смен)
  62. select ew.id_employees_in_whs
  63. from
  64. (
  65. select ew.id_employees_in_whs
  66. , s.id_worker
  67. , ws.id_d
  68. , row_number() over(partition by nvl(ws.id_whs_changed, ws.id_working_hours_sheet), s.id_worker, ws.id_d order by nvl(ps.hisdate, ps.d_modification) desc) rn
  69. from working_hours_sheet ws
  70. , paragraphs_status ps
  71. , employees_in_whs ew
  72. , staff s
  73. , ws_interval wsi
  74. where
  75. -- исключаем заданный табель и его редакции
  76. ws.id_working_hours_sheet not in
  77. ---
  78. (
  79. select wh2.id_working_hours_sheet
  80. from whs_whis_edition wh2
  81. )
  82. ---
  83. -- берём предыдущий интервал ()
  84. and ws.d_end = wsi.d_start - 1
  85. and ew.id_working_hours_sheet = ws.id_working_hours_sheet
  86. and s.id_staff = ew.id_staff
  87. and ps.id_paragraph = ws.id_paragraph
  88. -- and ps.status_order = 1
  89. and
  90. -- работники рассматриваемого табеля
  91. --(s.id_worker, ws.id_d) in
  92. -- не соединяем по id_worker, так как мог уволиться и в текущем табеле отсутствует
  93. (ws.id_d) in
  94. (
  95. select
  96. --w2.id_worker
  97. --,
  98. w2.id_d
  99. from workers_this_whs w2
  100. )
  101. ) ew
  102. where
  103. -- актуальная редакция
  104. ew.rn = 1
  105. )
  106. ---------
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120. select ws.id_employees_in_whs
  121. , ws.id_e
  122. , ws.surname
  123. , ws.id_paragraph
  124. , ws.id_work_system_interval
  125. , ws.d_work
  126. , ws.id_post_location
  127. , ws.work_shift_number
  128. , ws.hours
  129. , ws.nigth_hours
  130. ,
  131. ---
  132. case
  133. when exists
  134. (
  135. select 1
  136. from holidays_ h
  137. -- , (select to_date('01.01.2019', 'dd.mm.yyyy') as d_work from dual) ws
  138. where ws.d_work between trunc(h.y_start, 'yyyy') and ( add_months(trunc(nvl(h.y_end, ws.d_work), 'yyyy'), 12) - 1 )
  139. and
  140. (
  141. ws.d_work between
  142. to_date(to_char(h.d_start, 'dd.mm') || '.' || to_char(ws.d_work, 'yyyy'), 'dd.mm.yyyy')
  143. and to_date(to_char(h.d_end, 'dd.mm') || '.' || to_char(ws.d_work, 'yyyy'), 'dd.mm.yyyy')
  144. )
  145. )
  146. then 1
  147. else 0
  148. end as is_holiday
  149. ---
  150.  
  151. from
  152. (
  153. select sh.id_employees_in_whs
  154. , sh.id_work_system_interval
  155. , sh.d_work + wsi.ld_num - 1 as d_work
  156. , sh.id_post_location
  157. , wsi.work_shift_number
  158. , wsi.hours
  159. , wsi.nigth_hours
  160. , ws.d_start
  161. , ws.d_end
  162. , ws.id_paragraph
  163. , e.id_e
  164. , e.surname
  165. from worked_shifts sh
  166. , table(cast(pilot.p_hr_worktime.get_work_system_interval() as pilot.pt_work_system_interval_t)) wsi
  167. , employees_in_whs ew
  168. , working_hours_sheet ws
  169. , staff s
  170. , employees e
  171. where sh.id_work_system_interval = wsi.id_work_system_interval
  172. and sh.id_employees_in_whs in
  173. ---
  174. -- По сменному графику работы при восстановлении табеля включаются записи непосредственно табеля,
  175. -- а также записи других табелей по данному человеку с учётом редакций, попадающие в интервал дат рассматриваемого табеля.
  176. (
  177. select ew2.id_employees_in_whs
  178. from workers_ex ew2
  179. )
  180. ---
  181. and sh.id_employees_in_whs = ew.id_employees_in_whs
  182. and ws.id_working_hours_sheet = ew.id_working_hours_sheet
  183. and s.id_staff = ew.id_staff
  184. and e.id_e = s.id_e
  185. ) ws
  186. , ws_interval wsi
  187. where
  188. ws.d_work between wsi.d_start and wsi.d_end
  189. order by
  190. ws.id_e
  191. , ws.d_work
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement