Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.79 KB | None | 0 0
  1. -- DECLARE @trip_id int = 113063;
  2. -- DECLARE @trip_id int = 167358;
  3. -- DECLARE @trip_id int = 113063;
  4. -- DECLARE @trip_id int = 166082;
  5. DECLARE @last_import_date datetime = (select max(date_create)
  6. from warehouse_expiring_material);
  7.  
  8. DECLARE @info_xml table(zakaz_id int, NAK_ID varchar(max), waybill_1c_id varchar(max));
  9. INSERT INTO @info_xml
  10.  
  11. Select distinct isnull(o.ZAKAZ_ID, cs.zakaz_hat_id) zakaz_id,
  12. isnull(o.NAK_ID, cs.waybill_number) as waybill_number,
  13. cs.waybill_1c_id
  14. from (select o.ZAKAZ_ID, o.NAK_ID
  15. FROM tc_trip_zakaz tcz
  16. LEFT JOIN zakaz_order_id_arc o ON o.ZAKAZ_ID = Tcz.zakaz_hat_id
  17. where tcz.tc_trip_id = @trip_id) o FULL
  18. OUTER JOIN (select cs.zakaz_hat_id, cs.waybill_number, cs.waybill_1c_id
  19. from tc_trip_zakaz tcz
  20. LEFT JOIN co_shipping cs ON cs.zakaz_hat_id = tcz.zakaz_hat_id
  21. WHERE tcz.tc_trip_id = @trip_id) cs ON cs.zakaz_hat_id = o.ZAKAZ_ID and cs.waybill_number = o.NAK_ID
  22.  
  23.  
  24. If (OBJECT_ID('tempdb..#for_sort') IS NOT NULL)
  25. Drop Table #for_sort
  26. select row_number() over (order by consignee_id, np) rn, -- для сортировки по накладным смотри ниже
  27. p.*
  28. INTO #for_sort
  29. from (select dense_rank() over (order by consignee_id) as np,
  30. p.*
  31. from (Select p.tc_trip_id,
  32. CASE WHEN p.saleman_id in ('РФМОСКМЕТ', 'РФСПБЛЕНТ') THEN p.saleman_id else p.consignee_id end as consignee_id, -- Грузополучателей Лента и Metro C&C группировать по zakaz_hat.saleman_id
  33. cc.name as consignee_name,
  34. /*case when max(case when p.original_warehouse_id = 4 THEN 999 ELSE -1 END) over () = 999 THEN 4 ELSE*/ p.original_warehouse_id /*END*/ as warehouse_id, -- если в рейсе есть 4-ый Логистический склад, то все склады логистические -- REDMINE #6046
  35. p.p_brut,
  36. p.p_net,
  37. p.shipping_id,
  38. korob,
  39. p.material_name
  40. from (select o.ID,
  41. tcz.tc_trip_id,
  42. h.id as zakaz_id,
  43. h.num,
  44. h.adress_d,
  45. pz.pallet_zakaz_id,
  46. case
  47. when tct.factory_id = 1 THEN CASE
  48. WHEN zlw.contractor_id is not null
  49. then 4 -- Логистический
  50. WHEN cmap.warehouse_id in (14327)
  51. THEN 0 -- ЖМС
  52. WHEN cmap.warehouse_id in (14329)
  53. THEN 1 -- СЧС
  54. WHEN cmap.warehouse_id in (14326)
  55. THEN 2 -- СМС
  56. WHEN cmap.warehouse_id in (14328)
  57. THEN 3 -- ТМ
  58. WHEN cmap.warehouse_id in (19533)
  59. THEN 5 -- Aromat
  60. else lcw.warehouse_id
  61. end
  62. else 6
  63. END original_warehouse_id,
  64. case when zlw.contractor_id is not null THEN -1 ELSE h.address_id END city_order,
  65. lm.kor * cmap.box_gross as p_brut,
  66. lm.kor * cmap.box_net as p_net,
  67. lm.kor as korob,
  68. cmap.shipping_id,
  69. m.name as material_name,
  70. m.id as material_id,
  71. box.box_name,
  72. lpp.pallet_id,
  73. dbo.generateSSCC(isnull((select top 1 gln
  74. from co_factory_gln
  75. where id_factory = tct.factory_id
  76. order by dt_st desc), '000000000'), lpp.pallet_id, 1) sscc,
  77. lp.num as loading_pallet_num,
  78. h.consignee_id,
  79. o.NAK_ID as ttn,
  80. h.buyer_num,
  81. h.saleman_id,
  82. pogrt.descr,
  83. ptt.name as packing_name
  84. from tc_trip_zakaz tcz
  85. join tc_trip tct ON tct.id = tcz.tc_trip_id
  86. join zakaz_hat h on h.id = tcz.zakaz_hat_id
  87. join loading_palletz_zakaz_hat pz on pz.zakaz_id = h.id
  88. join loading_palletz_pallet lpp on pz.pallet_zakaz_id = lpp.pallet_zakaz_id
  89. join loading_pallet lp on lpp.pallet_id = lp.id
  90. join loading_pallet_material lm on lm.pallet_id = lp.id
  91. left join pogruz_type pogrt On pogrt.id = lp.pogruz_type_id
  92. join co_material AS m ON m.id = lm.material_id
  93. join co_material_attr_prod cmap on lm.material_id = cmap.material_id
  94. join co_material_attr_details det
  95. ON det.id = cmap.category and det.material_attr_id = 21 and det.factory_id IN (1, 2)
  96. left join loading_category_warehouse lcw ON lcw.category_id = det.id
  97. join loading_palletz_transport pt on pz.pallet_zakaz_id = pt.id
  98. join dbo.co_contractor_attr_customer ca ON h.saleman_id = ca.distr_id
  99. left join zakaz_logistic_warehouse zlw ON zlw.contractor_id = ca.contractor_id
  100. join ver_zaivka_prod vzp
  101. ON vzp.ver_id = h.ver_id and vzp.zaivka_id = h.zaivka_id and vzp.material_id = m.id
  102. join prod_pogruz pp ON pp.ver_id = vzp.ver_id and pp.zaivka_id = vzp.zaivka_id and
  103. pp.material_id = vzp.material_id
  104. join pogruz ON pogruz.pogruz_id = pp.pogruz_id
  105. join box ON box.box_id = pogruz.box_id
  106. left join packing_type ptt on ptt.id = pogruz.packing_id
  107. left join zakaz_order_id_arc o ON o.ZAKAZ_ID = h.id and (case
  108. when zlw.contractor_id is not null
  109. THEN 18784
  110. ELSE cmap.warehouse_id END) =
  111. o.warehouse_id
  112. where tcz.tc_trip_id = @trip_id) p
  113. JOIN co_contractor_attr_customer ccac ON ccac.distr_id = p.saleman_id
  114. JOIN co_contractor cc ON cc.id = ccac.contractor_id) p
  115. left join loading_points lp ON lp.id = p.warehouse_id) p
  116.  
  117.  
  118. -- сортируем паллеты
  119. -- сначала накладные
  120. DECLARE @row_numbers int = (select count(*)
  121. from #for_sort)
  122. DECLARE @tbl table(original int, new int)
  123.  
  124. DECLARE @rn int, @np int, @new int, @i int = 0
  125. declare params cursor for
  126. SELECT rn, np
  127. FROM #for_sort
  128.  
  129. open params;
  130. fetch next from params
  131. into @rn, @np;
  132. while @@fetch_status = 0
  133. BEGIN
  134. set @new = (select new from @tbl where original = @np);
  135. IF @new > 0
  136. UPDATE #for_sort set np = @new where rn = @rn
  137. ELSE
  138. BEGIN
  139. set @i = @i + 1
  140. UPDATE #for_sort set np = @i where rn = @rn
  141. INSERT INTO @tbl VALUES (@np, @i)
  142. END
  143. fetch next from params
  144. into @rn, @np;
  145. END
  146.  
  147. close params;
  148. deallocate params;
  149.  
  150. --select * from #for_sort
  151.  
  152. Select min(rn) rn,
  153. min(np) np,
  154. consignee_id,
  155. consignee_name,
  156. shipping_id,
  157. material_name,
  158. sum(korob) as korob,
  159. sum(p_brut) as p_brut,
  160. sum(p_net) as p_net
  161. from #for_sort fs
  162. group by tc_trip_id, consignee_id, shipping_id, consignee_name, material_name
  163.  
  164. If (OBJECT_ID('tempdb..#for_sort') IS NOT NULL)
  165. Drop Table #for_sort
  166. --select * from @tbl
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement