1 "表:TABLES:MSEG,LFA1,MARA,EKPO,EKKO,MARD,EKBE,EKET.
   2 
   3 ************************************************************************
   4 * Modification Log
   5 ************************************************************************
   6 * Date Ver. Programmer Descriptions
   7 * -------- ---- ------------ -------------------------------------------
   8 * 201 1.0 Original Create
   9 *
  10 ************************************************************************
  11 
  12 REPORT ZCOR004 NO STANDARD PAGE HEADING
  13 MESSAGE-ID 00 LINE-SIZE 177 LINE-COUNT 200.
  14 ***********************************************************************
  15 * Tables Definitions
  16 ************************************************************************
  17 *TABLES:.
  18 DATA: layout TYPE slis_layout_alv,
  19 events TYPE slis_t_event.
  20 DATA: wa_structure TYPE lvc_s_fcat,
  21 wa_structure1 TYPE lvc_s_fcat,
  22 wa_structure2 TYPE lvc_s_fcat,
  23 wa_structure3 TYPE lvc_s_fcat,
  24 
  25 set_wa_structure TYPE lvc_s_fcat,
  26 set_wa_structure1 TYPE lvc_s_fcat,
  27 set_wa_structure2 TYPE lvc_s_fcat,
  28 set_wa_structure3 TYPE lvc_s_fcat.
  29 * wa_fieldcat TYPE slis_fieldcat_alv.
  30 TABLES:zmmr01_stok,zmmr02_stok,zmmr03_stok,
  31             bickey,t001,marc,ebew,mkol,mard,
  32             ekpo,t134m,ska1,marv,t030r,t030,skat,
  33             acdoca_m_extract, matdoc .
  34 
  35 ************************************************************************
  36 * Data Definitions
  37 ************************************************************************
  38 DATA:BEGIN OF GT_MB52_1 OCCURS 0,
  39     lgort like mardh-lgort,"存储地点
  40     werks like t001w-werks," 工厂
  41     mtart like mara-mtart,"物料类型
  42     matkl like mara-matkl,"物料群组
  43     matnr like mara-matnr ,"料号
  44     maktx like makt-maktx,"物料说明
  45     lgobe like t001l-lgobe,"储存位置说明
  46     lgpbe like mard-lgpbe, "储格
  47     labst like mardh-labst,"未限制
  48     salk3 type p decimals 3," mbewh-salk3,"值未限制
  49     sobkz like mkol-sobkz,"特别库存
  50     insme like mardh-insme,"品质检验中
  51     einme like mardh-einme,"限制使用库存
  52     salk3_1 like mbewh-salk3,"值已限制
  53     speme like mardh-speme,"已冻结
  54     salk3_2 like mbewh-salk3,"冻结库存值
  55     retme like mardh-retme,"退货
  56     salk3_3 like mbewh-salk3,"冻结退货值
  57     dispo like marc-dispo, "mrp控制员
  58     labst_insme like mardh-labst,"未限制 & 品质检验中
  59     salk3_4 like mbewh-salk3,"评估gr冻结库存
  60     bwesb like marc-bwesb,"已评估的收货冻结库存
  61     ssnum like bickey-ssnum,"特殊库存号码
  62     meins like mara-meins,"单位
  63     waers like t001-waers,"币别
  64     lbkum_e like ebewh-lbkum, " 销售库存
  65     lbkum_m like mbewh-lbkum, " 评估库存
  66     price like ebewh-verpr, " 异动平均价额
  67     stprs like mbewh-stprs, " 标准价格
  68     verpr like ebewh-verpr, " 异动平均价格
  69     peinh like ebewh-peinh, "
  70     vprsv like ebewh-vprsv, " 价格控制
  71     vbeln like mskah-vbeln, " sd文件
  72     posnr like mskah-posnr, " 项次
  73     kunnr like mskuh-kunnr, " 客户
  74     lifnr like mslbh-lifnr,"供应商
  75 END OF GT_MB52_1.
  76 
  77 data:begin of g_mslb1 occurs 0, " 特别库存 O
  78     lgort like mardh-lgort,"存储地点
  79     werks like t001w-werks," 工厂
  80     mtart like mara-mtart,"物料类型
  81     matkl like mara-matkl,"物料群组
  82     matnr like mslbh-matnr ,"料号
  83     maktx like makt-maktx,"物料说明
  84     lgobe like t001l-lgobe,"储存位置说明
  85     lgpbe like mard-lgpbe, "储格
  86     labst like mslbh-lblab,"未限制
  87     salk3 type p decimals 3," mbewh-salk3,"值未限制
  88     sobkz like mkol-sobkz,"特别库存
  89     insme like mardh-insme,"品质检验中
  90     einme like mardh-einme,"限制使用库存
  91     salk3_1 like mbewh-salk3,"值已限制
  92     speme like mardh-speme,"已冻结
  93     salk3_2 like mbewh-salk3,"冻结库存值
  94     retme like mardh-retme,"退货
  95     salk3_3 like mbewh-salk3,"冻结退货值
  96     dispo like marc-dispo, "mrp控制员
  97     labst_insme like mardh-labst,"未限制 & 品质检验中
  98     salk3_4 like mbewh-salk3,"评估gr冻结库存
  99     bwesb like marc-bwesb,"已评估的收货冻结库存
 100     ssnum like bickey-ssnum,"特殊库存号码
 101     meins like mara-meins,"单位
 102     waers like t001-waers,"币别
 103     lbkum_e like ebewh-lbkum, " 销售库存
 104     lbkum_m like mbewh-lbkum, " 评估库存
 105     price like ebewh-verpr, " 异动平均价额
 106     stprs like mbewh-stprs, " 标准价格
 107     verpr LIKE ebewh-verpr, " 异动平均价格
 108     peinh LIKE ebewh-peinh, "
 109     vprsv LIKE ebewh-vprsv, " 价格控制
 110     vbeln LIKE mskah-vbeln, " sd文件
 111     posnr like mskah-posnr, " 项次
 112     kunnr like mskuh-kunnr, " 客户
 113     lifnr like mslbh-lifnr,"供应商
 114 end of g_mslb1.
 115 
 116 data:begin of g_msku1 occurs 0, " 特别库存为 W
 117     lgort like mardh-lgort,"存储地点
 118     werks like t001w-werks," 工厂
 119     mtart like mara-mtart,"物料类型
 120     matkl like mara-matkl,"物料群组
 121     matnr like mara-matnr ,"料号
 122     maktx like makt-maktx,"物料说明
 123     lgobe like t001l-lgobe,"储存位置说明
 124     lgpbe like mard-lgpbe, "储格
 125     labst like mardh-labst,"未限制
 126     salk3 type p decimals 3," mbewh-salk3,"值未限制
 127     sobkz like mkol-sobkz,"特别库存
 128     insme like mardh-insme,"品质检验中
 129     einme like mardh-einme,"限制使用库存
 130     salk3_1 like mbewh-salk3,"值已限制
 131     speme like mardh-speme,"已冻结
 132     salk3_2 like mbewh-salk3,"冻结库存值
 133     retme like mardh-retme,"退货
 134     salk3_3 like mbewh-salk3,"冻结退货值
 135     dispo like marc-dispo, "mrp控制员
 136     labst_insme like mardh-labst,"未限制 & 品质检验中
 137     salk3_4 like mbewh-salk3,"评估gr冻结库存
 138     bwesb like marc-bwesb,"已评估的收货冻结库存
 139     ssnum like bickey-ssnum,"特殊库存号码
 140     meins like mara-meins,"单位
 141     waers like t001-waers,"币别
 142     lbkum_e like ebewh-lbkum, " 销售库存
 143     lbkum_m like mbewh-lbkum, " 评估库存
 144     price like ebewh-verpr, " 异动平均价额
 145     stprs like mbewh-stprs, " 标准价格
 146     verpr like ebewh-verpr, " 异动平均价格
 147     peinh like ebewh-peinh, "
 148     vprsv like ebewh-vprsv, " 价格控制
 149     kunnr like mskuh-kunnr, " 客户号码
 150 end of g_msku1.
 151 
 152 data:begin of g_ebew1 occurs 0, " 特别库存为 e
 153     lgort like mardh-lgort,"存储地点
 154     werks like t001w-werks," 工厂
 155     mtart like mara-mtart,"物料类型
 156     matkl like mara-matkl,"物料群组
 157     matnr like mara-matnr ,"料号
 158     maktx like makt-maktx,"物料说明
 159     lgobe like t001l-lgobe,"储存位置说明
 160     lgpbe like mard-lgpbe, "储格
 161     labst like mardh-labst,"未限制
 162     salk3 type p decimals 3,"mbewh-salk3,"值未限制
 163     sobkz like mkol-sobkz,"特别库存
 164     insme like mardh-insme,"品质检验中
 165     einme like mardh-einme,"限制使用库存
 166     salk3_1 like mbewh-salk3,"值已限制
 167     speme like mardh-speme,"已冻结
 168     salk3_2 like mbewh-salk3,"冻结库存值
 169     retme like mardh-retme,"退货
 170     salk3_3 like mbewh-salk3,"冻结退货值
 171     dispo like marc-dispo, "mrp控制员
 172     labst_insme like mardh-labst,"未限制 & 品质检验中
 173     salk3_4 like mbewh-salk3,"评估gr冻结库存
 174     bwesb like marc-bwesb,"已评估的收货冻结库存
 175     ssnum like bickey-ssnum,"特殊库存号码
 176     meins like mara-meins,"单位
 177     waers like t001-waers,"币别
 178     lbkum_e like ebewh-lbkum, " 销售库存
 179     lbkum_m like mbewh-lbkum, " 评估库存
 180     price like ebewh-verpr, " 异动平均价额
 181     stprs like mbewh-stprs, " 标准价格
 182     verpr like ebewh-verpr, " 异动平均价格
 183     peinh like ebewh-peinh, "
 184     vprsv like ebewh-vprsv, " 价格控制
 185     vbeln like mskah-vbeln, " sd文件
 186     posnr like mskah-posnr, " 项次
 187     lifnr like mslbh-lifnr,"供应商
 188 end of g_ebew1.
 189 
 190 data:begin of g_mslb2 occurs 0, " 特别库存 O
 191     lgort2(8),"存储地点 ii
 192     text(40) type c, "呆滞期
 193     werks like t001w-werks," 工厂
 194     mtart like mara-mtart,"物料类型
 195     matkl like mara-matkl,"物料群组
 196     matnr like mara-matnr ,"料号
 197     maktx like makt-maktx,"物料说明
 198     lgort like mardh-lgort,"存储地点
 199     lgobe like t001l-lgobe,"储存位置说明
 200     lgpbe like mard-lgpbe, "储格
 201     salk3 like mbewh-salk3,"值未限制
 202     sobkz like mkol-sobkz,"特别库存
 203     einme like mardh-einme,"限制使用库存
 204     salk3_1 like mbewh-salk3,"值已限制
 205     speme like mardh-speme,"已冻结
 206     salk3_2 like mbewh-salk3,"冻结库存值
 207     retme like mardh-retme,"退货
 208     salk3_3 like mbewh-salk3,"冻结退货值
 209     salk3_4 like mbewh-salk3,"评估gr冻结库存
 210     bwesb like marc-bwesb,"已评估的收货冻结库存
 211     ssnum like bickey-ssnum,"特殊库存号码
 212     lvorm like mard-lvorm," sloc level df存储位置等级
 213     meins like mara-meins,"单位
 214     waers like t001-waers,"币别
 215     labst like mardh-labst,"未限制
 216     insme like mardh-insme,"品质检验中
 217     dispo like marc-dispo, "mrp控制员
 218     labst_insme like mardh-labst,"未限制 & 品质检验中
 219     price type p decimals 5, "单价
 220     hsl type p length 16 decimals 5, " 金额
 221 *    text(40) type c, "呆滞期
 222     price1 like ebewh-verpr, " 异动平均价额
 223     stprs like mbewh-stprs, " 标准价格
 224     verpr like ebewh-verpr, " 异动平均价格
 225     peinh like ebewh-peinh, "
 226     vprsv like ebewh-vprsv, " 价格控制
 227     vbeln like mskah-vbeln, " sd文件
 228     posnr like mskah-posnr, " 项次
 229     lifnr like mslbh-lifnr,"供应商
 230 end of g_mslb2.
 231 
 232 data:begin of g_msku2 occurs 0, " 特别库存为 W
 233     lgort2(8),"存储地点 ii
 234     text(40) type c, "呆滞期
 235     werks like t001w-werks," 工厂
 236     mtart like mara-mtart,"物料类型
 237     matkl like mara-matkl,"物料群组
 238     matnr like mara-matnr ,"料号
 239     maktx like makt-maktx,"物料说明
 240     lgort like mardh-lgort,"存储地点
 241     lgobe like t001l-lgobe,"储存位置说明
 242     lgpbe like mard-lgpbe, "储格
 243     salk3 like mbewh-salk3,"值未限制
 244     sobkz like mkol-sobkz,"特别库存
 245     einme like mardh-einme,"限制使用库存
 246     salk3_1 like mbewh-salk3,"值已限制
 247     speme like mardh-speme,"已冻结
 248     salk3_2 like mbewh-salk3,"冻结库存值
 249     retme like mardh-retme,"退货
 250     salk3_3 like mbewh-salk3,"冻结退货值
 251     salk3_4 like mbewh-salk3,"评估gr冻结库存
 252     bwesb like marc-bwesb,"已评估的收货冻结库存
 253     ssnum like bickey-ssnum,"特殊库存号码
 254     lvorm like mard-lvorm," sloc level df存储位置等级
 255     meins like mara-meins,"单位
 256     waers like t001-waers,"币别
 257     labst like mardh-labst,"未限制
 258     insme like mardh-insme,"品质检验中
 259     dispo like marc-dispo, "mrp控制员
 260     labst_insme like mardh-labst,"未限制 & 品质检验中
 261     price type p decimals 5, "单价
 262     hsl type p length 16 decimals 5, " 金额
 263 *    text(40) type c, "呆滞期
 264     price1 like ebewh-verpr, " 异动平均价额
 265     stprs like mbewh-stprs, " 标准价格
 266     verpr like ebewh-verpr, " 异动平均价格
 267     peinh like ebewh-peinh, "
 268     vprsv like ebewh-vprsv, " 价格控制
 269     vbeln like mskah-vbeln, " sd文件
 270     posnr like mskah-posnr, " 项次
 271     kunnr like mskuh-kunnr, " 客户
 272 end of g_msku2.
 273 
 274 data:begin of g_ebew2 occurs 0, " 特别库存为 e
 275     lgort2(8),"存储地点 ii
 276     text(40) type c, "呆滞期
 277     werks like t001w-werks," 工厂
 278     mtart like mara-mtart,"物料类型
 279     matkl like mara-matkl,"物料群组
 280     matnr like mara-matnr ,"料号
 281     maktx like makt-maktx,"物料说明
 282     lgort like mardh-lgort,"存储地点
 283     lgobe like t001l-lgobe,"储存位置说明
 284     lgpbe like mard-lgpbe, "储格
 285     salk3 like mbewh-salk3,"值未限制
 286     sobkz like mkol-sobkz,"特别库存
 287     einme like mardh-einme,"限制使用库存
 288     salk3_1 like mbewh-salk3,"值已限制
 289     speme like mardh-speme,"已冻结
 290     salk3_2 like mbewh-salk3,"冻结库存值
 291     retme like mardh-retme,"退货
 292     salk3_3 like mbewh-salk3,"冻结退货值
 293     salk3_4 like mbewh-salk3,"评估gr冻结库存
 294     bwesb like marc-bwesb,"已评估的收货冻结库存
 295     ssnum like bickey-ssnum,"特殊库存号码
 296     LVORM LIKE mard-lvorm," sloc level DF存储位置等级
 297     meins like mara-meins,"单位
 298     waers like t001-waers,"币别
 299     labst like mardh-labst,"未限制
 300     insme like mardh-insme,"品质检验中
 301     dispo like marc-dispo, "mrp控制员
 302     labst_insme like mardh-labst,"未限制 & 品质检验中
 303     price type p decimals 5, "单价
 304     hsl type p LENGTH 16 decimals 5, " 金额
 305     price1 like ebewh-verpr, " 异动平均价额
 306     stprs like mbewh-stprs, " 标准价格
 307     verpr like ebewh-verpr, " 异动平均价格
 308     peinh like ebewh-peinh, "
 309     vprsv like ebewh-vprsv, " 价格控制
 310     vbeln like mskah-vbeln, " sd文件
 311     posnr like mskah-posnr, " 项次
 312 end of g_ebew2.
 313 
 314 DATA: factor TYPE f .
 315 
 316 DATA:BEGIN OF g_mslb3 occurs 0, " O 特别库存
 317     zwhcode like mara-zwhcode,"wh code
 318     werks like t001w-werks," 工厂
 319     mtart like mara-mtart,"物料类型
 320     matkl like mara-matkl,"物料群组
 321     matnr like mara-matnr ,"料号
 322     mb_zwhcode like mara-zwhcode," mbs 库存
 323     s_zwhcode like mara-zwhcode," wh code & mbs 库存
 324     maktx like makt-maktx,"物料说明
 325     lgort like mardh-lgort,"存储地点
 326     lgobe like t001l-lgobe,"储存位置说明
 327     lgpbe like mard-lgpbe, "储格
 328     labst like mardh-labst,"未限制
 329     salk3 type p decimals 4,"值未限制
 330     sobkz like mkol-sobkz,"特别库存
 331     insme like mardh-insme,"品质检验中
 332     einme like mardh-einme,"限制使用库存
 333     salk3_1 like mbewh-salk3,"值已限制
 334     speme like mardh-speme,"已冻结
 335     salk3_2 like mbewh-salk3,"冻结库存值
 336     retme like mardh-retme,"退货
 337     salk3_3 like mbewh-salk3,"冻结退货值
 338     dispo like marc-dispo, "mrp控制员
 339     salk3_4 like mbewh-salk3,"评估gr冻结库存
 340     bwesb like marc-bwesb,"已评估的收货冻结库存
 341     ssnum like bickey-ssnum,"特殊库存号码
 342     meins like mara-meins,"单位
 343     waers like t001-waers,"币别
 344     price like ebewh-verpr, " 异动平均价额
 345     stprs like mbewh-stprs, " 标准价格
 346     verpr like ebewh-verpr, " 异动平均价格
 347     peinh like ebewh-peinh, "
 348     vprsv like ebewh-vprsv, " 价格控制
 349     lifnr like mslbh-lifnr,"供应商
 350 END OF g_mslb3.
 351 
 352 DATA:BEGIN OF g_msku3 occurs 0, " 特别库存为 O
 353     zwhcode like mara-zwhcode,"wh code
 354     werks like t001w-werks," 工厂
 355     mtart like mara-mtart,"物料类型
 356     matkl like mara-matkl,"物料群组
 357     matnr like mara-matnr ,"料号
 358     mb_zwhcode like mara-zwhcode," mbs 库存
 359     s_zwhcode like mara-zwhcode," wh code & mbs 库存
 360     maktx like makt-maktx,"物料说明
 361     lgort like mardh-lgort,"存储地点
 362     lgobe like t001l-lgobe,"储存位置说明
 363     lgpbe like mard-lgpbe, "储格
 364     labst like mardh-labst,"未限制
 365     salk3 type p decimals 4,"值未限制
 366     sobkz like mkol-sobkz,"特别库存
 367     insme like mardh-insme,"品质检验中
 368     einme like mardh-einme,"限制使用库存
 369     salk3_1 like mbewh-salk3,"值已限制
 370     speme like mardh-speme,"已冻结
 371     salk3_2 like mbewh-salk3,"冻结库存值
 372     retme like mardh-retme,"退货
 373     salk3_3 like mbewh-salk3,"冻结退货值
 374     dispo like marc-dispo, "mrp控制员
 375     salk3_4 like mbewh-salk3,"评估gr冻结库存
 376     bwesb like marc-bwesb,"已评估的收货冻结库存
 377     ssnum like bickey-ssnum,"特殊库存号码
 378     meins like mara-meins,"单位
 379     waers like t001-waers,"币别
 380     price like ebewh-verpr, " 异动平均价额
 381     stprs like mbewh-stprs, " 标准价格
 382     verpr like ebewh-verpr, " 异动平均价格
 383     peinh like ebewh-peinh, "
 384     vprsv like ebewh-vprsv, " 价格控制
 385     kunnr like mskuh-kunnr, " 客户
 386 
 387 END OF g_msku3.
 388 
 389 DATA:BEGIN OF g_ebew3 occurs 0, " 特别库存为 E
 390     zwhcode like mara-zwhcode,"wh code
 391     werks like t001w-werks," 工厂
 392     mtart like mara-mtart,"物料类型
 393     matkl like mara-matkl,"物料群组
 394     matnr like mara-matnr ,"料号
 395     mb_zwhcode like mara-zwhcode," mbs 库存
 396     s_zwhcode like mara-zwhcode," wh code & mbs 库存
 397     maktx like makt-maktx,"物料说明
 398     lgort like mardh-lgort,"存储地点
 399     lgobe like t001l-lgobe,"储存位置说明
 400     lgpbe like mard-lgpbe, "储格
 401     labst like mardh-labst,"未限制
 402     salk3 type p decimals 4,"值未限制
 403     sobkz like mkol-sobkz,"特别库存
 404     insme like mardh-insme,"品质检验中
 405     einme like mardh-einme,"限制使用库存
 406     salk3_1 like mbewh-salk3,"值已限制
 407     speme like mardh-speme,"已冻结
 408     salk3_2 like mbewh-salk3,"冻结库存值
 409     retme like mardh-retme,"退货
 410     salk3_3 like mbewh-salk3,"冻结退货值
 411     dispo like marc-dispo, "mrp控制员
 412     salk3_4 like mbewh-salk3,"评估gr冻结库存
 413     bwesb like marc-bwesb,"已评估的收货冻结库存
 414     ssnum like bickey-ssnum,"特殊库存号码
 415     meins like mara-meins,"单位
 416     waers like t001-waers,"币别
 417     price like ebewh-verpr, " 异动平均价额
 418     stprs like mbewh-stprs, " 标准价格
 419     verpr like ebewh-verpr, " 异动平均价格
 420     peinh like ebewh-peinh, "
 421     vprsv like ebewh-vprsv, " 价格控制
 422     vbeln like mskah-vbeln, " sd文件
 423     posnr like mskah-posnr, " 项次
 424 END OF g_ebew3.
 425 
 426 DATA:l_lbkum LIKE mbewh-lbkum,
 427 l_verpr LIKE mbewh-verpr,
 428 l_salk3 LIKE mbewh-salk3,
 429 l_peinh LIKE mbewh-peinh.
 430 
 431 DATA:l_existed TYPE i, " 已存在前期值
 432 l_existed1 TYPE i," 已存在前期值
 433 l_existed2 TYPE i," 已存在前期值
 434 l_existed3 TYPE i, " 已存在前期值
 435 l_existed_turr TYPE i. " 已存在前期值
 436 
 437 *定义变量参数用于下载路径和文件名
 438 DATA: L_PATH TYPE STRING.
 439 
 440 DATA:BEGIN OF GT_MB52_2 OCCURS 0,
 441     lgort2(8),"存储地点 ii
 442     text(40) type c, "呆滞期
 443     werks like t001w-werks," 工厂
 444     mtart like mara-mtart,"物料类型
 445     matkl like mara-matkl,"物料群组
 446     matnr like mara-matnr ,"料号
 447     maktx like makt-maktx,"物料说明
 448     lgort like mardh-lgort,"存储地点
 449     lgobe like t001l-lgobe,"储存位置说明
 450     lgpbe like mard-lgpbe, "储格
 451     salk3 like mbewh-salk3,"值未限制
 452     sobkz like mkol-sobkz,"特别库存
 453     einme like mardh-einme,"限制使用库存
 454     salk3_1 like mbewh-salk3,"值已限制
 455     speme like mardh-speme,"已冻结
 456     salk3_2 like mbewh-salk3,"冻结库存值
 457     retme like mardh-retme,"退货
 458     salk3_3 like mbewh-salk3,"冻结退货值
 459     salk3_4 like mbewh-salk3,"评估gr冻结库存
 460     bwesb like marc-bwesb,"已评估的收货冻结库存
 461     ssnum like bickey-ssnum,"特殊库存号码
 462     lvorm like mard-lvorm," sloc level df存储位置等级
 463     meins like mara-meins,"单位
 464     waers like t001-waers,"币别
 465     labst like mardh-labst,"未限制
 466     insme like mardh-insme,"品质检验中
 467     dispo like marc-dispo, "mrp控制员
 468     labst_insme like mardh-labst,"未限制 & 品质检验中
 469     price type p decimals 5, "单价
 470     hsl type p length 16 decimals 5, " 金额
 471 *    text(40) type c, "呆滞期
 472     price1 like ebewh-verpr, " 异动平均价额
 473     stprs like mbewh-stprs, " 标准价格
 474     verpr like ebewh-verpr, " 异动平均价格
 475     peinh like ebewh-peinh, "
 476     vprsv like ebewh-vprsv, " 价格控制
 477     vbeln like mskah-vbeln, " sd文件
 478     posnr like mskah-posnr, " 项次
 479     kunnr like mskuh-kunnr, " 客户
 480     lifnr like mslbh-lifnr,"供应商
 481 END OF GT_MB52_2.
 482 
 483 DATA:BEGIN OF gt_t001l occurs 0,
 484 lgort2 like zmmr02_stok-lgort2,"存储地点 ii
 485 END OF gt_t001l.
 486 
 487 DATA:BEGIN OF GT_MB52_3 OCCURS 0,
 488     zwhcode like mara-zwhcode,"wh code
 489     werks like t001w-werks," 工厂
 490     mtart like mara-mtart,"物料类型
 491     matkl like mara-matkl,"物料群组
 492     matnr like mara-matnr ,"料号
 493     mb_zwhcode like mara-zwhcode," mbs 库存
 494     s_zwhcode like mara-zwhcode," wh code & mbs 库存
 495     maktx like makt-maktx,"物料说明
 496     lgort like mardh-lgort,"存储地点
 497     lgobe like t001l-lgobe,"储存位置说明
 498     lgpbe like mard-lgpbe, "储格
 499     labst like mardh-labst,"未限制
 500     salk3 type p decimals 4,"值未限制
 501     sobkz like mkol-sobkz,"特别库存
 502     insme like mardh-insme,"品质检验中
 503     einme like mardh-einme,"限制使用库存
 504     salk3_1 like mbewh-salk3,"值已限制
 505     speme like mardh-speme,"已冻结
 506     salk3_2 like mbewh-salk3,"冻结库存值
 507     retme like mardh-retme,"退货
 508     salk3_3 like mbewh-salk3,"冻结退货值
 509     dispo like marc-dispo, "mrp控制员
 510     salk3_4 like mbewh-salk3,"评估gr冻结库存
 511     bwesb like marc-bwesb,"已评估的收货冻结库存
 512     ssnum like bickey-ssnum,"特殊库存号码
 513     meins like mara-meins,"单位
 514     waers like t001-waers,"币别
 515     price like ebewh-verpr, " 异动平均价额
 516     stprs like mbewh-stprs, " 标准价格
 517     verpr like ebewh-verpr, " 异动平均价格
 518     peinh like ebewh-peinh, "
 519     vprsv like ebewh-vprsv, " 价格控制
 520     vbeln like mskah-vbeln, " sd文件
 521     posnr like mskah-posnr, " 项次
 522     kunnr like mskuh-kunnr, " 客户
 523     lifnr like mslbh-lifnr,"供应商
 524     labst_insme like mardh-labst,
 525 END OF GT_MB52_3.
 526 
 527 DATA: BEGIN OF gt_period OCCURS 0,
 528   seqno(2) TYPE n,
 529   datum LIKE sy-datum,
 530   sdate LIKE sy-datum,
 531   tdate LIKE sy-datum,
 532   ptext(20) TYPE c,
 533 END OF gt_period.
 534 
 535 DATA:gt_period1 LIKE gt_period occurs 0 WITH HEADER LINE,
 536     gt_period2 LIKE gt_period occurs 0 WITH HEADER LINE,
 537     gt_period3 LIKE gt_period occurs 0 WITH HEADER LINE.
 538 
 539 DATA: BEGIN OF set_mb52_2 OCCURS 0,
 540     lgort2 LIKE zmmr02_stok-LGORT2, " 储存地点 II
 541     lgobe2 LIKE T001L-LGOBE," 存储地说明
 542     sum3 TYPE P DECIMALS 2, " 0-3个月
 543     sum04_06 TYPE P DECIMALS 2, " 4-6个月
 544     sum07_12 TYPE P DECIMALS 2, " 7-12 个月
 545     sum12_24 TYPE P DECIMALS 2, " 1-2 年
 546     sum24 TYPE P DECIMALS 2, " 24 个月
 547     sum TYPE P DECIMALS 2, " 总计
 548 END OF set_mb52_2.
 549 "呆滞期金额汇总
 550 
 551 *----动态alv说明
 552 DATA: BEGIN OF GT_DTYPE OCCURS 0,
 553     dtype(2) TYPE C ,
 554     dtext(20) TYPE C,
 555 END OF GT_DTYPE.
 556 
 557 
 558 DATA:BEGIN OF SUM_300 OCCURS 0,
 559     zwhcode like mara-zwhcode,"wh code
 560     salk3 like mbew-salk3,"值未限制
 561     remarks(30) type c,"wh code 备注
 562 END OF SUM_300.
 563 
 564 DATA:BEGIN OF SUM_100 OCCURS 0,
 565     lgort like mard-lgort,"存储地点
 566     lgobe like t001l-lgobe,"储存位置说明
 567     salk3 like mbew-salk3,"值未限制
 568 END OF SUM_100.
 569 
 570 DATA:BEGIN OF sum_200 OCCURS 0,
 571     lgort2(8),"存储地点
 572     lgobe2 like t001l-lgobe,"储存位置说明
 573     salk3 type p decimals 2, "like mbew-salk3,"值未限制
 574 END OF sum_200.
 575 
 576 DATA: sum_200_1 LIKE sum_200 occurs 0 WITH HEADER LINE,
 577           sum_100_1 LIKE sum_100 occurs 0 WITH HEADER LINE,
 578           sum_300_1 LIKE sum_300 occurs 0 WITH HEADER LINE.
 579 
 580 DATA:l2_kunnr like msku-kunnr, " 供应商
 581         l2_lifnr like mslb-lifnr, " 客户编号
 582         l2_vbeln like mska-vbeln , "采购单号
 583         l2_posnr like mska-posnr, "采购单项次
 584         l1_kunnr like msku-kunnr," 供应商
 585         l1_lifnr like mslb-lifnr, " 客户编号
 586         l1_vbeln like mska-vbeln , "采购单号
 587         l1_posnr like mska-posnr,"采购单项次
 588         l3_kunnr like msku-kunnr," 供应商
 589         l3_lifnr like mslb-lifnr, " 客户编号
 590         l3_vbeln like mska-vbeln , "采购单号
 591         l3_posnr like mska-posnr."采购单项次
 592 
 593 DATA:l2_index1 type sy-tabix,
 594         l1_index1 type sy-tabix,
 595         l3_index1 type sy-tabix.
 596 DATA: g_sdate LIKE sy-datum.
 597 
 598 DATA: colname(10),
 599 index(2).
 600 
 601 DATA: wa_fcat TYPE lvc_s_fcat,
 602 wa_fcat1 TYPE lvc_s_fcat,
 603 wa_fcat2 TYPE lvc_s_fcat,
 604 wa_fcat3 TYPE lvc_s_fcat,
 605 
 606 set_wa_fcat TYPE lvc_s_fcat,
 607 set_wa_fcat1 TYPE lvc_s_fcat,
 608 set_wa_fcat2 TYPE lvc_s_fcat,
 609 set_wa_fcat3 TYPE lvc_s_fcat.
 610 DATA: ne_col1 LIKE ALSMEX_TABLINE-col VALUE 1,
 611 ne_col2 LIKE ALSMEX_TABLINE-col VALUE 2.
 612 
 613 
 614 DATA: BEGIN OF upload1 OCCURS 0.
 615 INCLUDE STRUCTURE ALSMEX_TABLINE.
 616 DATA:END OF upload1.
 617 
 618 DATA: BEGIN OF upload2 OCCURS 0.
 619 INCLUDE STRUCTURE ALSMEX_TABLINE.
 620 DATA:END OF upload2.
 621 
 622 DATA: BEGIN OF upload3 OCCURS 0.
 623 INCLUDE STRUCTURE ALSMEX_TABLINE.
 624 DATA:END OF upload3.
 625 
 626 DATA: BEGIN OF upload4 OCCURS 0.
 627 INCLUDE STRUCTURE ALSMEX_TABLINE.
 628 DATA:END OF upload4.
 629 DATA: G_FIYEAR4(4) TYPE N. "
 630 DATA: G_FIYEAR3(3) TYPE N. "
 631 DATA: G_FIYEAR(7) TYPE N. "前三月
 632 DATA: DATE TYPE D. "当月第一天
 633 DATA: GET_DATE TYPE D. "当月最后一天
 634 DATA: N1(4) TYPE N. "获取前三月年
 635 DATA: N2(2) TYPE N. "前三月
 636 DATA: DATE1 TYPE D. " 三月第一天
 637 DATA: GET_DATE1 TYPE D. "前三月最后一天
 638 DATA: G_MBLNR(3) TYPE C. "单据单头 20181008 LZW ADD
 639 DATA: G_MBLNR1(3) TYPE C. "单据单头 20181008 LZW ADD
 640 
 641 DATA: G_HIGH TYPE SY-DATUM. " 最后一天
 642 DATA: G_LOW TYPE SY-DATUM. " 第一天
 643 DATA: L_N(7) TYPE P . " 天数
 644 DATA: L_N_ALL(7) TYPE P . " 当月总天数
 645 
 646 DATA: L_MONTH1(7) TYPE P . " 月数
 647 DATA: L_MONTH2(7) TYPE P . " 月数
 648 
 649 DATA: E_DAYS LIKE VTBBEWE-ATAGE . " 天数
 650 DATA: E_MONTHS LIKE VTBBEWE-ATAGE . " 月数
 651 DATA: E_YEARS LIKE VTBBEWE-ATAGE . " 年数
 652 DATA: DEAD_MONTH1 TYPE P DECIMALS 2 . " 呆滯期(月)
 653 
 654 
 655 DATA:BEGIN OF GT_DATA OCCURS 0,
 656     matnr like mara-matnr,
 657     gt_dmbtr like bseg-dmbtr, "本国货币金额
 658     h_budat like bseg-h_budat, " 过账日期
 659 END OF GT_DATA.
 660 
 661 *----ZCOR002------
 662 
 663 *ALV自定义按钮
 664 CONSTANTS ALV_PF_STATUS TYPE SLIS_FORMNAME VALUE 'ALV_PF_STATUS'.
 665 *ALV自定义按钮事件
 666 CONSTANTS ALV_USER_COMMAND TYPE SLIS_FORMNAME
 667 VALUE 'ALV_USER_COMMAND'.
 668 
 669 "FOR ALV报表
 670 TYPE-POOLS SLIS.
 671 DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
 672           gt_fieldcat type slis_t_fieldcat_alv with header line,
 673           gt_fieldcats type slis_t_fieldcat_alv with header line,
 674           wa_fieldcat type slis_fieldcat_alv,
 675           gs_layout1 type slis_layout_alv,
 676           gt_fieldcat1 type slis_t_fieldcat_alv with header line,
 677           wa_fieldcat1 type slis_fieldcat_alv,
 678           gs_layout2 type slis_layout_alv,
 679           gt_fieldcat2 type slis_t_fieldcat_alv with header line,
 680           wa_fieldcat2 type slis_fieldcat_alv,
 681           gs_layout3 type slis_layout_alv,
 682           gt_fieldcat3 type slis_t_fieldcat_alv with header line,
 683           wa_fieldcat3 type slis_fieldcat_alv,
 684 
 685           set_wa_fieldcat1 type slis_fieldcat_alv,
 686           set_wa_fieldcat2 type slis_fieldcat_alv,
 687           set_wa_fieldcat3 type slis_fieldcat_alv,
 688           set_wa_fieldcat type slis_fieldcat_alv,
 689           set_fieldcat type slis_t_fieldcat_alv with header line,
 690           set_fieldcat1 type slis_t_fieldcat_alv with header line,
 691           set_fieldcat2 type slis_t_fieldcat_alv with header line,
 692           set_fieldcat3 type slis_t_fieldcat_alv with header line.
 693 
 694 DATA: L_number LIKE sy-tabix.
 695 DATA: LASTDAY TYPE SY-DATUM,
 696 date4 TYPE sy-datum,
 697 date4_day TYPE sy-datum, " 下限日期的第一天
 698 date4_s TYPE sy-datum. "上线日期日期第一天
 699 
 700 *-----> 判断选择屏明细日期后是否需要下载
 701 DATA: Have_data TYPE c,
 702 p_return TYPE i. " 下载变量
 703 
 704 DATA: MANDT TYPE SY-MANDT. " 用户端
 705 
 706 DATA: date3 TYPE vtbbewe-dvalut. " 上个月最后一天
 707 DATA: date3_1 TYPE vtbbewe-dvalut. " 上 5个月最后一天
 708 
 709 DATA:P_WERKS1 LIKE T001W-WERKS VALUE '100',
 710 P_WERKS2 LIKE T001W-WERKS VALUE '200',
 711 P_WERKS3 LIKE T001W-WERKS VALUE '300'.
 712 * flag TYPE trff_flg,
 713 * days TYPE trff_type_n_2.
 714 FIELD-SYMBOLS:<gt_table> TYPE STANDARD TABLE,
 715 <g_wa>,
 716 <g_comp>,
 717 <g_field>.
 718 
 719 FIELD-SYMBOLS:<gt_table1> TYPE STANDARD TABLE,
 720 <g_wa1>,
 721 <g_comp1>,
 722 <g_field1>.
 723 
 724 FIELD-SYMBOLS:<gt_table2> TYPE STANDARD TABLE,
 725 <g_wa2>,
 726 <g_comp2>,
 727 <g_field2>.
 728 
 729 FIELD-SYMBOLS:<gt_table3> TYPE STANDARD TABLE,
 730 <g_wa3>,
 731 <g_comp3>,
 732 <g_field3>.
 733 
 734 DATA: gt_table TYPE REF TO data,
 735           gt_structure TYPE lvc_t_fcat,
 736           gt_table1 TYPE REF TO data,
 737           gt_structure1 TYPE lvc_t_fcat,
 738           gt_table2 TYPE REF TO data,
 739           gt_structure2 TYPE lvc_t_fcat,
 740           gt_table3 TYPE REF TO data,
 741           gt_structure3 TYPE lvc_t_fcat,
 742 
 743           create_table TYPE REF TO data,
 744           set_structure TYPE lvc_t_fcat,
 745           create_table1 TYPE REF TO data,
 746           set_structure1 TYPE lvc_t_fcat,
 747           create_table2 TYPE REF TO data,
 748           set_structure2 TYPE lvc_t_fcat,
 749           create_table3 TYPE REF TO data,
 750           set_structure3 TYPE lvc_t_fcat.
 751 
 752 
 753 " 下载资料明细
 754 "MB52_100 明细
 755 DATA: BEGIN OF down_mb52_1 OCCURS 0,
 756 C1(100) TYPE C,
 757 C2(100) TYPE C,
 758 C3(100) TYPE C,
 759 C4(100) TYPE C,
 760 C5(100) TYPE C,
 761 C6(100) TYPE C,
 762 C7(100) TYPE C,
 763 C8(100) TYPE C,
 764 C9(100) TYPE C,
 765 C10(100) TYPE C,
 766 C11(100) TYPE C,
 767 C12(100) TYPE C,
 768 C13(100) TYPE C,
 769 C14(100) TYPE C,
 770 C15(100) TYPE C,
 771 C16(100) TYPE C,
 772 C17(100) TYPE C,
 773 C18(100) TYPE C,
 774 C19(100) TYPE C,
 775 C20(100) TYPE C,
 776 C21(100) TYPE C,
 777 C22(100) TYPE C,
 778 C23(100) TYPE C,
 779 C24(100) TYPE C,
 780 C25(100) TYPE C,
 781 C26(100) TYPE C,
 782 C27(100) TYPE C,
 783 C28(100) TYPE C,
 784 C29(100) TYPE C,
 785 C30(100) TYPE C,
 786 C31(100) TYPE C,
 787 C32(100) TYPE C,
 788 C33(100) TYPE C,
 789 C34(100) TYPE C,
 790 
 791 END OF down_mb52_1.
 792 
 793 
 794 DATA: down_mb52_2 LIKE down_mb52_1 occurs 0 WITH HEADER LINE,
 795 *DATA: down_mb52_2 LIKE down_mb52_1 occurs 0 WITH HEADER LINE, " MB52_200 明细
 796 down_mb52_3 LIKE down_mb52_1 occurs 0 WITH HEADER LINE. " MB52_300 明细
 797 
 798 " 下载变量
 799 DATA: L_FINIT TYPE STRING, " default file path
 800 L_FPATH TYPE STRING, " file path
 801 P_FPATH2 TYPE STRING, " file path
 802 L_LEN TYPE I. " file path length
 803 
 804 " 汇总 邮件变量
 805 DATA: g_string_1 TYPE string,
 806           g_string_2 TYPE string,
 807           g_string_3 TYPE string,
 808           g_string_4 TYPE string,
 809           g_mail_address TYPE ad_smtpadr.
 810 
 811 DATA: g_datel_1 TYPE string,
 812           g_datel_2 TYPE string,
 813           g_datel_3 TYPE string,
 814           g_datel_4 TYPE string.
 815 
 816 CONSTANTS: gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab,
 817 gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf.
 818 
 819 *数据往期数据 table
 820 DATA: BEGIN OF gt_tcurr occurs 0 ,
 821     kurst LIKE tcurr-kurst,"汇率类型
 822     fcurr LIKE tcurr-fcurr," 来源货币
 823     tcurr LIKE tcurr-tcurr,"目标货币
 824     gdatu LIKE tcurr-gdatu,"生效日期
 825     ukurs LIKE tcurr-ukurs,"汇率
 826     ffact LIKE tcurr-ffact,"比率来源
 827     tfact LIKE tcurr-tfact,"比率目标
 828 END OF gt_tcurr.
 829 
 830 "获取往期库存值
 831 DATA:BEGIN OF gt_zmmr01_stok occurs 0,
 832     lgort2 like zmmr01_stok-lgort2,
 833     werks like zmmr01_stok-werks,
 834     znum like zmmr01_stok-znum,
 835     datum like zmmr01_stok-datum,
 836     lifab like zmmr01_stok-lifab,
 837     shkzg like zmmr01_stok-shkzg,
 838     salk3 like zmmr01_stok-salk3,
 839     text like zmmr01_stok-text,
 840 END OF gt_zmmr01_stok.
 841 
 842 DATA:BEGIN OF gt_zmmr02_stok occurs 0,
 843     lgort2 like zmmr02_stok-lgort2,
 844     werks like zmmr02_stok-werks,
 845     znum like zmmr02_stok-znum,
 846     datum like zmmr02_stok-datum,
 847     lifab like zmmr02_stok-lifab,
 848     shkzg like zmmr02_stok-shkzg,
 849     salk3 like zmmr02_stok-salk3,
 850     text like zmmr02_stok-text,
 851 END OF gt_zmmr02_stok.
 852 
 853 
 854 DATA:BEGIN OF gt_zmmr02_year occurs 0, " 年度标准成本
 855     znum LIKE zmmr02_year-znum,
 856     werks LIKE zmmr02_year-werks,
 857     datum LIKE zmmr02_year-datum,
 858     lifab LIKE zmmr02_year-lifab,
 859     lfgja LIKE zmmr02_year-lfgja,
 860     shkzg LIKE zmmr02_year-shkzg,
 861     annual LIKE zmmr02_year-annual,
 862     taxt LIKE zmmr02_year-text,
 863 END OF gt_zmmr02_year.
 864 
 865 DATA:BEGIN OF gt_zmmr03_stok occurs 0,
 866    zwhcode like zmmr03_stok-zwhcode,
 867    werks like zmmr03_stok-werks,
 868    znum like zmmr03_stok-znum,
 869    datum like zmmr03_stok-datum,
 870    lifab like zmmr03_stok-lifab,
 871    shkzg like zmmr03_stok-shkzg,
 872    salk3 like zmmr03_stok-salk3,
 873    text like zmmr03_stok-text,
 874 END OF gt_zmmr03_stok.
 875 
 876 DATA:BEGIN OF gt_zmmr00_example occurs 0,
 877     znum like zmmr00_example-znum,
 878     lgort like zmmr00_example-lgort,
 879 *     werks like zmmr00_example-werks,
 880     datum like zmmr00_example-datum,
 881     lifab like zmmr00_example-lifab,
 882     shkzg like zmmr00_example-shkzg,
 883     salk3 like zmmr00_example-salk3,
 884     text like zmmr00_example-text,
 885 END OF gt_zmmr00_example.
 886 
 887 DATA:BEGIN OF gt_zmmr00_aims occurs 0,
 888     znum LIKE zmmr00_aims-znum,
 889     datum LIKE zmmr00_aims-datum,
 890     lifab LIKE zmmr00_aims-lifab,
 891     lfgja LIKE zmmr00_aims-lfgja,
 892     shkzg_y LIKE zmmr00_aims-shkzg_y,
 893     turnover LIKE zmmr00_aims-turnover,
 894     shkzg_m LIKE zmmr00_aims-shkzg_m,
 895     zaims LIKE zmmr00_aims-zaims,
 896     text LIKE zmmr00_aims-text,
 897 END OF gt_zmmr00_aims.
 898 
 899 " 前期汇率
 900 DATA:BEGIN OF gt_zmmr00_turr occurs 0,
 901     znum LIKE zmmr00_turr-znum,
 902     datum LIKE zmmr00_turr-datum,
 903     lifab LIKE zmmr00_turr-lifab,
 904     cny_twd LIKE zmmr00_turr-cny_twd,
 905     usd_twd LIKE zmmr00_turr-usd_twd,
 906     cny_twd1 LIKE zmmr00_turr-cny_twd1,
 907     usd_twd1 LIKE zmmr00_turr-usd_twd1,
 908     text LIKE zmmr00_aims-text,
 909 END OF gt_zmmr00_turr.
 910 
 911 *数据往期数据 table end
 912 
 913 
 914 *写入table
 915 DATA: write_zmmr01_stok LIKE zmmr01_stok occurs 0 WITH HEADER LINE," 100前期值
 916         write_zmmr02_stok LIKE zmmr02_stok occurs 0 WITH HEADER LINE," 200前期值
 917         write_zmmr03_stok LIKE zmmr03_stok occurs 0 WITH HEADER LINE," 300前期值
 918         write_zmmr00_turr LIKE zmmr00_turr occurs 0 WITH HEADER LINE,"前期汇率
 919 *         write_zmmr00_aims LIKE zmmr00_aims occurs 0 WITH HEADER LINE, " 公司年度目标
 920         write_zmmr00_example LIKE zmmr00_example occurs 0 WITH HEADER LINE. " 库存范例
 921 
 922 DATA:id_1 TYPE i VALUE '0',"1000 ID
 923         id_2 TYPE i VALUE '0',"2000 ID
 924         id_0_2 TYPE i VALUE '0', "年度标本 ID
 925         id_3 TYPE i VALUE '0', " 300 ID
 926         id_00_1 TYPE i VALUE '0', " 年度目标 ID
 927         id_00_2 TYPE i VALUE '0'," 范例 ID
 928         max_01_date LIKE sy-datum, " maxdate
 929         max_02_date LIKE sy-datum," maxdate
 930         max_02y_date LIKE zmmr02_year-lfgja," maxyear
 931         max_03_date LIKE sy-datum," maxdate
 932         max_00a_date LIKE zmmr00_aims-lfgja," maxyear
 933         max_00e_date LIKE sy-datum." maxdate
 934 
 935 "获取周期数
 936 DATA: BEGIN OF gt_num occurs 0 ,
 937     lifab LIKE sy-datum,
 938     l_num TYPE i,
 939 END OF gt_num.
 940 
 941 DATA: gt_num1 LIKE gt_num occurs 0 WITH HEADER LINE,
 942           gt_num2 LIKE gt_num occurs 0 WITH HEADER LINE,
 943           gt_num3 LIKE gt_num occurs 0 WITH HEADER LINE,
 944           gt_num4 LIKE gt_num occurs 0 WITH HEADER LINE." 汇率
 945 DATA: l_sdate TYPE sy-datum, " max tate
 946           l_endate TYPE sy-datum, " min tate
 947           lv_date type i. " 接收变量
 948 
 949 DATA:lv_num type i ,
 950         lv_num1 type i,
 951         lv_num2 type i,
 952         lv_num3 type i.
 953 "2000
 954 DATA:g_sum_new like acdoca_m_extract-hsl VALUE '0', " 按库别新值汇总
 955         g_sum_sum TYPE p DECIMALS 2 VALUE '0'," sum 按库别新值汇总
 956         g_sum3 like acdoca_m_extract-hsl VALUE '0'," 呆滞
 957         g_sum04_06 like acdoca_m_extract-hsl VALUE '0',
 958         g_sum07_12 like acdoca_m_extract-hsl VALUE '0',
 959         g_sum12_24 like acdoca_m_extract-hsl VALUE '0',
 960         g_sum24 like acdoca_m_extract-hsl VALUE '0',
 961         g_sum like acdoca_m_extract-hsl VALUE '0'.
 962 
 963 "1000 3000
 964 DATA: g1_sum_1 like acdoca_m_extract-hsl VALUE '0', " 新值 sum 1000
 965         g1_sum_2 like acdoca_m_extract-hsl VALUE '0', " HB-台湾
 966         g2_sum_1 like acdoca_m_extract-hsl VALUE '0', " 小计
 967         g2_sum_2 like acdoca_m_extract-hsl VALUE '0', " 总计
 968         g3_sum_1 like acdoca_m_extract-hsl VALUE '0'," 新值 sum 3000
 969         g3_sum_2 like acdoca_m_extract-hsl VALUE '0'. " 不含淘汰产品 及 mbs 库存
 970 
 971 DATA: L_FIYEAR TYPE SY-DATUM.
 972 
 973 DATA:BEGIN OF gt_datum occurs 0,"明细周期
 974     text1(10),"选项
 975     text2(10),"选项
 976     opedatem LIKE sy-datum," 开始日期
 977     enddatem LIKE sy-datum," 结束日期
 978 END OF gt_datum.
 979 
 980 DATA:gt_datum1 LIKE gt_datum occurs 0 WITH HEADER LINE. "选择屏周期
 981 
 982 *---> 明细数据选择屏工厂条件
 983 DATA:BEGIN OF gt_bukrs occurs 0,
 984     text1(10),"选项
 985     text2(10),"选项
 986     opewerks like matdoc-bukrs," 开始日期
 987     endwerks like matdoc-bukrs," 结束日期
 988 END OF gt_bukrs.
 989 
 990 
 991 ************************************************************************
 992 * Includes Module
 993 ************************************************************************
 994 
 995 ************************************************************************
 996 * Selection Screen
 997 ************************************************************************
 998 *--->选择屏
 999 SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-B01.
1000 PARAMETERS: P_Start LIKE ACDOCA_M_EXTRACT-FISCYEARPER . "起始期间.
1001 PARAMETERS: P_FIYEAR LIKE ACDOCA_M_EXTRACT-FISCYEARPER OBLIGATORY . " 年度期别
1002 SELECT-OPTIONS: s_matnr FOR marc-matnr.
1003 PARAMETERS: P_FPATH1 TYPE STRING DEFAULT 'Z:\' . "OBLIGATORY.
1004 
1005 SELECT-OPTIONS:bklas for ebew-bklas no-display, " bewertungsklasse
1006                         matnr for ebew-matnr matchcode object mat1 no-display,
1007                         skont for ska1-saknr no-display, " bestandskonto
1008                         bwtar for ebew-bwtar memory id bwt no-display. " bewertungsart
1009 PARAMETERS:nullb like am07m-senul no-display, " materialien mit nullbestand
1010                     keinzel like am07m-kgebe no-display, " bewertungskreisebene
1011                     pruef like am07m-erwpr no-display, " erweiterte prüfung bei
1012                     matlines no-display ."as checkbox .
1013 PARAMETERS: summen like am07m-xsums NO-DISPLAY, " nur Summen ausgegeben
1014 NEGATIV LIKE AM07M-SENEG NO-DISPLAY. " Negative Bestände anzeigen
1015 
1016 
1017 SELECTION-SCREEN END OF BLOCK B1.
1018 
1019 SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-B02.
1020 SELECT-OPTIONS: fiyear for acdoca_m_extract-fiscyearper , " 年度期别
1021                            p_werks for matdoc-bukrs no-display.
1022 SELECTION-SCREEN END OF BLOCK B2.
1023 
1024 RANGES: BERMON FOR MARD-LFMON ,
1025               IBWKEY FOR MBEW-BWKEY ,
1026               IBKLAS FOR MBEW-BKLAS.
1027 
1028 SELECTION-SCREEN BEGIN OF LINE.
1029 PARAMETERS: vmsaldo LIKE AM07M-XSALD NO-DISPLAY ."RADIOBUTTON GROUP LIST.
1030 SELECTION-SCREEN END OF LINE.
1031 
1032 SELECTION-SCREEN BEGIN OF LINE.
1033 PARAMETERS: AKSALDO LIKE AM07M-XSALD NO-DISPLAY DEFAULT 'X'."RADIOBUTTON GROUP LIST DEFAULT 'X' .
1034 SELECTION-SCREEN END OF LINE.
1035 
1036 SELECTION-SCREEN BEGIN OF LINE.
1037 PARAMETERS: VJSALDO LIKE AM07M-XSALD NO-DISPLAY ."RADIOBUTTON GROUP LIST.
1038 SELECTION-SCREEN END OF LINE.
1039 
1040 SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-b03.
1041 PARAMETER: p_title TYPE so_obj_des DEFAULT 'XX报表'.
1042 SELECT-OPTIONS: s_addr FOR g_mail_address NO INTERVALS DEFAULT'taoyuexiang5@163.com'.
1043 PARAMETERS:s_send AS CHECKBOX DEFAULT 'X'. " mail
1044 SELECTION-SCREEN END OF BLOCK b3.
1045 
1046 ************************************************************************
1047 * Initialization
1048 ************************************************************************
1049 INITIALIZATION.
1050 
1051 " 获取系统年月方法二
1052 *-->本月最后一天
1053 CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
1054 EXPORTING
1055 I_DATE = SY-DATUM
1056 IMPORTING
1057 E_DATE = LASTDAY.
1058 
1059 
1060 *----获取上月最后一天
1061 CALL FUNCTION 'FIMA_DATE_CREATE'
1062   EXPORTING
1063     i_date = LASTDAY "'20140101' "输入日期
1064     i_flg_end_of_month = ' '
1065     i_months = -1 "表示当前月的前一个月
1066     i_set_last_day_of_month = 'X' "返回的日期为当前月份的最后一天
1067   IMPORTING
1068     e_date = date3 . "返回的日期为当前月份的最后一天
1069 
1070 *----获取上5个月最后一天
1071 CALL FUNCTION 'FIMA_DATE_CREATE'
1072   EXPORTING
1073   i_date = LASTDAY "'20140101' "输入日期
1074   i_flg_end_of_month = ' '
1075   i_months = -5 "表示当前月的前一个月
1076   i_set_last_day_of_month = 'X' "返回的日期为当前月份的最后一天
1077   IMPORTING
1078   e_date = date3_1 . "返回的日期为当前月份的最后一天
1079 
1080 
1081 P_START = date3_1(4) && '0' && date3_1+4(2).
1082 P_FIYEAR = date3+0(4) && '0' && date3+4(2).
1083 
1084 * p_endate = date3_1.
1085 PERFORM FRM_SET_NEDIT." 设置选择屏元素不能编辑
1086 ************************************************************************
1087 * At Selection Screen
1088 ************************************************************************
1089 AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FPATH1. " 获取档案路径
1090 PERFORM GET_FPATH.
1091 
1092 
1093 ************************************************************************
1094 * At Selection Screen Output
1095 ************************************************************************
1096 AT SELECTION-SCREEN OUTPUT.
1097 
1098 ************************************************************************
1099 * Report Format
1100 ************************************************************************
1101 TOP-OF-PAGE.
1102 
1103 END-OF-PAGE.
1104 ************************************************************************
1105 * Main Process
1106 ************************************************************************
1107 START-OF-SELECTION.
1108     PERFORM set_fiyear. " 获获取日期
1109     PERFORM gt_detail." 往期明细数据.
1110     PERFORM get_col.
1111     PERFORM alv_show.
1112 END-OF-SELECTION.
1113 
1114 *----> 自定义按钮
1115 FORM ALV_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
1116 SET PF-STATUS 'STATUS_PRINT' .
1117 ENDFORM.
1118 
1119 *--->选择屏上部分的值不能修改
1120 FORM FRM_SET_NEDIT.
1121 LOOP AT SCREEN .
1122     IF "SCREEN-NAME EQ 'P_FIYEAR' OR
1123     SCREEN-NAME EQ 'P_ENDATE'. "and sy-uname co 'IT'.
1124     SCREEN-INPUT = '0' .
1125     MODIFY SCREEN .
1126     ENDIF .
1127     IF screen-name EQ 'BKLAS' OR
1128         screen-name EQ 'MATLINES' OR
1129         screen-name EQ 'IBWKEY' OR
1130         screen-name EQ 'IBKLAS' OR
1131         screen-name EQ 'VMSALDO' OR
1132         screen-name EQ 'AKSALDO' OR
1133         screen-name EQ 'VJSALDO'." OR
1134         screen-invisible = '1'.
1135         MODIFY SCREEN.
1136     ENDIF.
1137 ENDLOOP .
1138 ENDFORM .
1139 
1140 
1141 
1142 *&---------------------------------------------------------------------*
1143 *& Form GET_FPATH
1144 *&---------------------------------------------------------------------*
1145 *& text
1146 *&---------------------------------------------------------------------*
1147 *& --> p1 text
1148 *& <-- p2 text
1149 *&---------------------------------------------------------------------*
1150 FORM GET_FPATH .
1151 * -選擇檔案路徑-
1152 L_FINIT = 'E:\'. " default
1153 
1154 CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
1155       EXPORTING
1156       WINDOW_TITLE = 'Find Output Path'
1157       INITIAL_FOLDER = L_FINIT
1158       CHANGING
1159       SELECTED_FOLDER = L_FPATH
1160       EXCEPTIONS
1161       CNTL_ERROR = 1
1162       ERROR_NO_GUI = 2
1163       NOT_SUPPORTED_BY_GUI = 3
1164       OTHERS = 4.
1165 
1166 * -最後一個字元不為'\',補上'\'-
1167 IF L_FPATH IS NOT INITIAL.
1168     L_LEN = STRLEN( L_FPATH ) - 1.
1169 
1170     IF L_FPATH+L_LEN(1) NE '\'.
1171        P_FPATH1 = L_FPATH && |\\|.
1172     ELSE.
1173         P_FPATH1 = L_FPATH.
1174     ENDIF.
1175 ENDIF.
1176 
1177 ENDFORM.
1178 
1179 *&---------------------------------------------------------------------*
1180 *& Form ALV_SHOW
1181 *&---------------------------------------------------------------------*
1182 *& text
1183 *&---------------------------------------------------------------------*
1184 *& --> p1 text
1185 *& <-- p2 text
1186 *&---------------------------------------------------------------------*
1187 FORM ALV_SHOW .
1188 
1189 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
1190   EXPORTING
1191     I_CALLBACK_PROGRAM = SY-REPID
1192     IS_LAYOUT = GS_LAYOUT2
1193 *     IT_FIELDCAT = GT_FIELDCAT2[]
1194     IT_FIELDCAT = GT_FIELDCATS[]
1195     I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS' "触发事件调用子程序
1196     I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND'
1197     I_SAVE = 'A'
1198     TABLES
1199     T_OUTTAB = GT_MB52_2[]"<gt_table2>"GT_MB52_2
1200     EXCEPTIONS
1201     PROGRAM_ERROR = 1
1202     OTHERS = 2.
1203 
1204 ENDFORM.
1205 
1206 
1207 
1208 *&---------------------------------------------------------------------*
1209 *& Form BSEG
1210 *&---------------------------------------------------------------------*
1211 *& text 获取线上在制金额
1212 *&---------------------------------------------------------------------*
1213 *& --> p1 text
1214 *& <-- p2 text
1215 *&---------------------------------------------------------------------*
1216 FORM get_BSEG USING in_datum.
1217 DATA: gt_dmbtr_h like bseg-dmbtr,
1218           gt_dmbtr_s like bseg-dmbtr.
1219 DATA: en_datum LIKE sy-datum.
1220 
1221 CALL FUNCTION 'FIMA_DATE_CREATE'
1222     EXPORTING
1223     i_date = in_datum "'20140101' "输入日期
1224     i_flg_end_of_month = ' '
1225     i_months = 0 "表示当前月的前一个月
1226     i_set_last_day_of_month = 'X' "返回的日期为当前月份的最后一天
1227     IMPORTING
1228     e_date = en_datum . "返回的日期为当前月份的最后一天
1229 
1230 
1231 SELECT SUM( DMBTR ) INTO GT_DMBTR_H
1232     FROM BSEG
1233     WHERE BUKRS = p_werks2
1234     AND HKONT IN ( '1314000000','1314000001' )
1235     AND SHKZG EQ 'H'
1236     AND H_BUDAT <= en_datum.
1237 
1238 SELECT SUM( DMBTR ) INTO GT_DMBTR_S
1239     FROM BSEG
1240     WHERE BUKRS = p_werks2
1241     AND HKONT IN ( '1314000000','1314000001' )
1242     AND SHKZG EQ 'S'
1243     AND H_BUDAT <= en_datum.
1244 *-->线上在制金额
1245     gt_data-gt_dmbtr = gt_dmbtr_s - gt_dmbtr_h.
1246     APPEND gt_data .
1247 ENDFORM.
1248 
1249 
1250 *&---------------------------------------------------------------------*
1251 *& Form GET_COL
1252 *&---------------------------------------------------------------------*
1253 *& text
1254 *&---------------------------------------------------------------------*
1255 *& --> p1 text
1256 *& <-- p2 text
1257 *&---------------------------------------------------------------------*
1258 FORM GET_COL.
1259     DEFINE FILEDCAT.
1260     GT_FIELDCATS-FIELDNAME = &1. "对应内表的字段名
1261     GT_FIELDCATS-SELTEXT_L = &2. "输出列文本
1262     APPEND GT_FIELDCATS.
1263     END-OF-DEFINITION.
1264     FILEDCAT 'WERKS' '工厂'.
1265     FILEDCAT 'MTART' '物料类型'.
1266     FILEDCAT 'MATKL' '物料群组'.
1267     FILEDCAT 'MATNR' '料号'.
1268     FILEDCAT 'MAKTX' '物料说明'.
1269     FILEDCAT 'LGORT' '存储地点'.
1270     FILEDCAT 'LGORT2' '存储地点 II'.
1271     FILEDCAT 'LGOBE' '储存位置说明'.
1272     FILEDCAT 'LGPBE' '储格'.
1273     FILEDCAT 'SALK3' '值未限制'.
1274     FILEDCAT 'SOBKZ' '特别库存'.
1275     FILEDCAT 'EINME' '限制使用库存'.
1276     FILEDCAT 'SALK3_1' '值已限制'.
1277     FILEDCAT 'SPEME' '已冻结'.
1278     FILEDCAT 'SALK3_2' '冻结库存值'.
1279     FILEDCAT 'RETME' '退货'.
1280     FILEDCAT 'SALK3_3' '冻结退货值'.
1281     FILEDCAT 'SALK3_4' '评估GR冻结库存'.
1282     FILEDCAT 'BWESB' '已评估的收货冻结库存'.
1283     FILEDCAT 'SSNUM' '特殊库存号码'.
1284     FILEDCAT 'MEINS' '单位'.
1285     FILEDCAT 'WAERS' '币别'.
1286     FILEDCAT 'LABST' '未限制'.
1287     FILEDCAT 'LBKUM_E' '销售库存'.
1288     FILEDCAT 'LBKUM_M' '物料评价库存'.
1289     FILEDCAT 'INSME' '品质检验中'.
1290     FILEDCAT 'DISPO' 'MRP控制员'.
1291     FILEDCAT 'LABST_INSME' '未限制 & 品质检验中'.
1292     FILEDCAT 'PRICE' '单价'.
1293     FILEDCAT 'HSL' '金额'.
1294     FILEDCAT 'TEXT' '呆滞期'.
1295 ENDFORM.
1296 
1297 
1298 
1299 *&---------------------------------------------------------------------*
1300 *& Form SET_100
1301 *&---------------------------------------------------------------------*
1302 *& text
1303 *&---------------------------------------------------------------------*
1304 *& --> p1 text
1305 *& <-- p2 text
1306 *&---------------------------------------------------------------------*
1307 FORM SET_100 USING in_datum .
1308 
1309 DATA: l_lbkum2 LIKE mbewh-lbkum,
1310 l_salk32 LIKE mbewh-salk3,
1311 l_fiscye LIKE acdoca_m_extract-fiscyearper.
1312 
1313 APPEND LINES OF g_ebew1[] to gt_mb52_1[].
1314 APPEND LINES OF g_mslb1[] to gt_mb52_1[].
1315 APPEND LINES OF g_msku1[] to gt_mb52_1[].
1316 
1317   LOOP AT GT_MB52_1.
1318 
1319   CLEAR :l_lbkum,l_salk3,l_peinh.
1320   CLEAR:l1_kunnr,l1_lifnr,l1_vbeln ,l1_posnr.
1321       l1_index1 = sy-tabix.
1322 
1323 *----->存储地点说明
1324       SELECT SINGLE lgobe FROM t001l INTO gt_mb52_1-lgobe
1325       WHERE lgort EQ gt_mb52_1-lgort .
1326 
1327 *----->储格 、DF 存储位置等级
1328       SELECT SINGLE lgpbe from mard INTO
1329       (gt_mb52_1-lgpbe)
1330       WHERE matnr EQ gt_mb52_1-matnr AND
1331       WERKS EQ P_WERKS1.
1332 
1333 *-----> MRP控制员
1334     SELECT SINGLE dispo FROM marc INTO gt_mb52_1-dispo
1335     WHERE matnr EQ gt_mb52_1-matnr AND
1336     WERKS EQ P_WERKS1.
1337 
1338 *---->物料说明
1339     SELECT single maktx FROM makt
1340     INTO GT_MB52_1-maktx
1341     WHERE makt~matnr eq GT_MB52_1-matnr
1342     AND spras = sy-langu .
1343 
1344 *--->币别
1345       SELECT SINGLE WAERS INTO GT_MB52_1-WAERS
1346       FROM MSEG
1347       WHERE MATNR EQ GT_MB52_1-MATNR AND
1348       WERKS EQ P_WERKS1.
1349 
1350       CLEAR:factor.
1351       CLEAR: l_lbkum2,l_salk32.
1352 
1353     CONCATENATE in_datum(4) '0' in_datum+4(2) INTO l_fiscye.
1354     SELECT SUM( vmsl ) SUM( hsl ) INTO ( l_lbkum2,l_salk32 )
1355     FROM acdoca_m_extract
1356     WHERE fiscyearper LE l_fiscye
1357     AND bwkey EQ p_werks1
1358     AND matnr EQ gt_mb52_1-matnr.
1359 
1360     IF l_lbkum2 EQ '0'.
1361     factor = '0'.
1362     ELSE.
1363     factor = l_salk32 / l_lbkum2 * 100.
1364     ENDIF.
1365     gt_mb52_1-labst_insme = gt_mb52_1-labst + gt_mb52_1-insme.
1366 
1367     gt_mb52_1-price = factor .
1368     gt_mb52_1-salk3 = gt_mb52_1-labst_insme * factor.
1369 
1370     MODIFY GT_MB52_1 INDEX L1_INDEX1.
1371   ENDLOOP.
1372 ENDFORM.
1373 
1374 *&---------------------------------------------------------------------*
1375 *& Form SET_200
1376 *&---------------------------------------------------------------------*
1377 *& text
1378 *&---------------------------------------------------------------------*
1379 *& --> p1 text
1380 *& <-- p2 text
1381 *&---------------------------------------------------------------------*
1382 FORM SET_200 USING in_datum .
1383 DATA: l_lbkum1 LIKE mbewh-lbkum,
1384           l_lbkum2 LIKE mbewh-lbkum,
1385           l_matnr1 LIKE mbewh-matnr,
1386           l_matnr2 LIKE mbewh-matnr,
1387           l_salk31 LIKE mbewh-salk3,
1388           l_salk32 LIKE mbewh-salk3,
1389           l_vprsv LIKE mbewh-vprsv,
1390           l_verpr LIKE mbewh-verpr,
1391           l_stprs LIKE mbewh-stprs,
1392           l_peinh LIKE mbewh-peinh,
1393           id_price TYPE n.
1394 
1395 DATA: l_fiscye LIKE acdoca_m_extract-fiscyearper.
1396 
1397 
1398 
1399 APPEND LINES OF g_ebew2[] to gt_mb52_2[].
1400 APPEND LINES OF g_mslb2[] to gt_mb52_2[].
1401 APPEND LINES OF g_msku2[] to gt_mb52_2[].
1402 
1403    LOOP AT GT_MB52_2.
1404       CLEAR:l2_kunnr,l2_lifnr,l2_vbeln ,l2_posnr.
1405       L2_INDEX1 = SY-TABIX.
1406 
1407 *  ----->存储地点说明
1408       SELECT SINGLE lgobe FROM t001l INTO gt_mb52_2-lgobe
1409       WHERE lgort EQ gt_mb52_2-lgort .
1410 
1411 * ----->储格 、DF 存储位置等级
1412       SELECT SINGLE lgpbe from mard INTO
1413       (gt_mb52_2-lgpbe)
1414       WHERE matnr EQ gt_mb52_2-matnr AND
1415       WERKS EQ P_WERKS2.
1416 
1417 *-----> MRP控制员
1418       SELECT SINGLE dispo FROM marc INTO gt_mb52_2-dispo
1419       WHERE matnr EQ gt_mb52_2-matnr AND
1420       WERKS EQ P_WERKS2.
1421 
1422 *---->物料说明
1423       SELECT single maktx FROM makt
1424       INTO GT_MB52_2-maktx
1425       WHERE makt~matnr eq GT_MB52_2-matnr and
1426       spras = sy-langu .
1427 *      --->币别
1428       SELECT SINGLE WAERS INTO GT_MB52_2-WAERS
1429       FROM MSEG
1430       WHERE MATNR EQ GT_MB52_2-MATNR AND
1431       WERKS EQ P_WERKS2.
1432 
1433 *--->储存地 2
1434 *       1.特别库存 O W
1435 *       2. 消耗品昌 217G-B (三角采购在途仓)
1436 *       3. 原材料 217G-B (三角采购在途仓)
1437       IF GT_MB52_2-SOBKZ EQ 'W'.
1438 
1439           GT_MB52_2-LGORT2 = '210G'.
1440           gt_mb52_2-ssnum = gt_mb52_2-kunnr.
1441       ELSEIF GT_MB52_2-SOBKZ EQ 'O'.
1442           gt_mb52_2-lgort2 = 'WIP-OUT'.
1443           gt_mb52_2-ssnum = gt_mb52_2-lifnr.
1444       ENDIF.
1445 
1446       IF ( gt_mb52_2-sobkz(1) NE 'W'
1447       AND NOT ( gt_mb52_2-sobkz(1) EQ 'O' ) )
1448       AND ( gt_mb52_2-lgort CS '2W'
1449       OR gt_mb52_2-lgort EQ '217G' ).
1450 
1451          IF gt_mb52_2-matnr+0(1) EQ 'Z'. "料号开头是 Z
1452            gt_mb52_2-lgort2 = '217G-B'.
1453          ELSE.
1454             gt_mb52_2-lgort2 ='217G-A'.
1455          ENDIF.
1456       ELSEIF gt_mb52_2-sobkz(1) NE 'W'
1457       AND NOT ( gt_mb52_2-sobkz(1) EQ 'O').
1458           gt_mb52_2-lgort2 = gt_mb52_2-lgort.
1459       ENDIF.
1460 
1461 
1462 *       求平均值
1463       CLEAR:factor.
1464       CLEAR: l_lbkum2,l_salk32,l_matnr2.
1465 
1466       CONCATENATE in_datum(4) '0' in_datum+4(2) INTO l_fiscye.
1467       SELECT SUM( vmsl ) SUM( hsl ) INTO ( l_lbkum2,l_salk32 )
1468                 FROM acdoca_m_extract
1469                 WHERE fiscyearper LE l_fiscye
1470                 AND bwkey EQ p_werks2
1471                 AND matnr EQ gt_mb52_2-matnr.
1472 
1473       IF l_lbkum2 EQ '0' .
1474            factor = '0'.
1475       ELSE.
1476           factor = l_salk32 / l_lbkum2.
1477       ENDIF.
1478 
1479       gt_mb52_2-price = factor .
1480 
1481 *      --->未限制 & 品质检验中
1482       GT_MB52_2-LABST_INSME = GT_MB52_2-LABST + GT_MB52_2-INSME .
1483 
1484 *      --->金额
1485       gt_mb52_2-hsl = gt_mb52_2-labst_insme * factor.
1486 
1487       CLEAR: gt_t001l.
1488       gt_t001l-lgort2 = gt_mb52_2-lgort2.
1489       APPEND gt_t001l.
1490 
1491       MODIFY GT_MB52_2 INDEX L2_INDEX1.
1492     ENDLOOP.
1493 ENDFORM.
1494 
1495 *&---------------------------------------------------------------------*
1496 *& Form SET_300
1497 *&---------------------------------------------------------------------*
1498 *& text
1499 *&---------------------------------------------------------------------*
1500 *& --> p1 text
1501 *& <-- p2 text
1502 *&---------------------------------------------------------------------*
1503 FORM SET_300 USING in_datum.
1504 DATA: l_fiscye LIKE acdoca_m_extract-fiscyearper,
1505           l_lbkum2 LIKE mbewh-lbkum,
1506           l_salk32 LIKE mbewh-salk3.
1507 
1508 DATA:l_MBS LIKE mara-matnr.
1509 
1510 APPEND LINES OF g_ebew3[] to gt_mb52_3[].
1511 APPEND LINES OF g_mslb3[] to gt_mb52_3[].
1512 APPEND LINES OF g_msku3[] to gt_mb52_3[].
1513 
1514 LOOP AT GT_MB52_3.
1515 CLEAR:l3_kunnr,l3_lifnr,l3_vbeln ,l3_posnr.
1516           l3_index1 = sy-tabix.
1517 
1518 *---->物料说明
1519       SELECT single maktx FROM makt
1520       INTO GT_MB52_3-maktx
1521       WHERE makt~matnr eq GT_MB52_3-matnr and
1522       spras = sy-langu .
1523 
1524 
1525 *----->存储地点说明
1526         SELECT SINGLE lgobe FROM t001l INTO gt_mb52_3-lgobe
1527         WHERE lgort EQ gt_mb52_3-lgort .
1528 
1529 *-----> 储格
1530         SELECT SINGLE lgpbe FROM mard INTO
1531         ( gt_mb52_3-lgpbe )
1532         WHERE matnr EQ gt_mb52_3-matnr
1533         and WERKS EQ P_WERKS3.
1534 
1535 *-----> MRP控制员
1536         SELECT SINGLE dispo FROM marc INTO gt_mb52_3-dispo
1537                    WHERE matnr EQ gt_mb52_3-matnr
1538                    AND werks EQ p_werks2.
1539 
1540 *--->MBS 库存
1541         CLEAR:l_MBS.
1542         SELECT SINGLE matnr FROM zmmr03_mbs
1543                     INTO l_MBS
1544                     WHERE matnr EQ gt_mb52_3-matnr.
1545         IF l_mbs IS NOT INITIAL.
1546             gt_mb52_3-mb_zwhcode = 'MBS库存'.
1547         ENDIF.
1548 
1549 
1550 *--->WH CODE & MBS 库存
1551         IF gt_mb52_3-mb_zwhcode EQ 'MBS库存'.
1552             gt_mb52_3-zwhcode = 'MBS库存'.
1553         ELSE.
1554           gt_mb52_3-zwhcode = gt_mb52_3-s_zwhcode.
1555         ENDIF.
1556 
1557 *--->币别
1558         SELECT SINGLE WAERS INTO GT_MB52_3-WAERS
1559                     FROM mseg
1560                     WHERE matnr EQ gt_mb52_3-matnr
1561                     AND   werks EQ p_werks3.
1562 *--->值未限制
1563 
1564         CLEAR: factor,l_salk32.
1565 
1566         CONCATENATE in_datum(4) '0' in_datum+4(2) INTO l_fiscye.
1567         SELECT SUM( vmsl ) SUM( hsl ) INTO ( l_lbkum2,l_salk32 )
1568                   FROM acdoca_m_extract
1569                   WHERE fiscyearper LE l_fiscye
1570                   AND bwkey EQ p_werks3
1571                   AND matnr EQ gt_mb52_3-matnr.
1572 
1573         IF l_lbkum2 EQ '0' .
1574              factor = '0'.
1575         ELSE.
1576               factor = l_salk32 / l_lbkum2.
1577         ENDIF.
1578 
1579           gt_mb52_3-price = factor .
1580           gt_mb52_3-labst_insme = gt_mb52_3-labst + gt_mb52_3-insme.
1581           gt_mb52_3-salk3 = gt_mb52_3-labst_insme * factor.
1582 
1583         MODIFY GT_MB52_3 INDEX L3_INDEX1.
1584 ENDLOOP.
1585 ENDFORM.
1586 
1587 
1588 *&---------------------------------------------------------------------*
1589 *& Form SET_PERIOD
1590 *&---------------------------------------------------------------------*
1591 *& text 动态获取周期
1592 *&---------------------------------------------------------------------*
1593 *& --> p1 text
1594 *& <-- p2 text
1595 *&---------------------------------------------------------------------*
1596 FORM set_period .
1597 DATA: l_tdate LIKE sy-datum,
1598           l_tatum LIKE sy-datum,
1599           l_datum LIKE sy-datum,
1600           l_week LIKE scal-week,
1601           l_seqno LIKE gt_period-seqno,
1602           l_berid LIKE mdlg-berid,
1603           l_months TYPE i VALUE 0.
1604 
1605 CLEAR:gt_period,gt_period[].
1606 *describe table gt_num2 lines lv_num2." 获取内表数据有多少条数
1607 
1608       LOOP AT gt_num1.
1609           l_endate = gt_num1-lifab.
1610           exit.
1611       ENDLOOP.
1612       SORT gt_num1 by lifab ASCENDING.
1613 
1614       LOOP AT gt_num1.
1615           l_sdate = gt_num1-lifab(6) && '01'.
1616           exit.
1617       ENDLOOP.
1618           PERFORM set_date
1619                 USING l_sdate l_endate
1620                CHANGING lv_date." 计算两端时间相差 个月
1621           lv_num1 = lv_date .
1622 
1623       LOOP AT gt_num2.
1624           l_endate = gt_num2-lifab.
1625           exit.
1626       ENDLOOP.
1627       SORT gt_num2 by lifab ASCENDING.
1628 
1629       LOOP AT gt_num2.
1630           l_sdate = gt_num2-lifab(6) && '01'.
1631           exit.
1632       ENDLOOP.
1633       PERFORM set_date
1634             USING l_sdate l_endate
1635             CHANGING lv_date." 计算两端时间相差 个月
1636       lv_num2 = lv_date .
1637 
1638       LOOP AT gt_num3.
1639           l_endate = gt_num3-lifab.
1640           exit.
1641       ENDLOOP.
1642       SORT gt_num3 by lifab ASCENDING.
1643       LOOP AT gt_num3.
1644           l_sdate = gt_num3-lifab(6) && '01'.
1645           exit.
1646       ENDLOOP.
1647       PERFORM set_date
1648             USING l_sdate l_endate
1649             CHANGING lv_date." 计算两端时间相差 个月
1650       lv_num3 = lv_date .
1651 
1652       LOOP AT gt_num.
1653         l_endate = gt_num-lifab.
1654         exit.
1655       ENDLOOP.
1656       SORT gt_num by lifab ASCENDING.
1657       LOOP AT gt_num.
1658           l_sdate = gt_num-lifab(6) && '01'.
1659           exit.
1660       ENDLOOP.
1661       PERFORM set_date
1662             USING l_sdate l_endate
1663             CHANGING lv_date." 计算两端时间相差 个月
1664       lv_num = lv_date .
1665 
1666 *      p_sdate = p_sdate+0(6) && '01'.
1667 *      PERFORM set_date." 计算两端时间相差 个月
1668       "库存范例周期
1669       IF l_existed NE '1'.
1670         lv_num = lv_num + 1.
1671         l_tatum = date3.
1672       ELSE.
1673           l_tatum = date4.
1674       ENDIF.
1675       DO lv_num TIMES.
1676       add 1 TO l_seqno.
1677           PERFORM get_first_few_months
1678               USING l_tatum l_months
1679               CHANGING l_tdate. " 获取前几个月的日期
1680           l_sdate = l_tdate(6) && '01'. " 第一天
1681 
1682           PERFORM get_lastdate_of_month
1683               USING l_sdate " 日期最后一天
1684               CHANGING l_tdate.
1685 
1686       MOVE:l_tdate TO gt_period-datum,
1687                 l_seqno TO gt_period-seqno,
1688                 l_sdate TO gt_period-sdate,
1689                 l_tdate TO gt_period-tdate.
1690 
1691           CONCATENATE l_tdate(4) '/' l_tdate+4(2) INTO gt_period-ptext.
1692           CONCATENATE 'M' gt_period-ptext
1693           INTO gt_period-ptext SEPARATED BY space.
1694           APPEND gt_period. CLEAR: gt_period.
1695           l_months = l_months + 1.
1696       ENDDO.
1697 
1698       " 100 动态日期
1699       CLEAR:l_seqno,l_tdate,l_sdate,l_tdate,l_months.
1700       IF l_existed1 NE '1'.
1701           lv_num1 = lv_num1 + 1.
1702           l_tatum = date3.
1703       ELSE.
1704           l_tatum = date4.
1705       ENDIF.
1706 
1707       DO lv_num1 TIMES.
1708           add 1 TO l_seqno.
1709           PERFORM get_first_few_months
1710                 USING l_tatum l_months
1711                 CHANGING l_tdate. " 获取前几个月的日期
1712 
1713           l_sdate = l_tdate(6) && '01'. " 第一天
1714 
1715           PERFORM get_lastdate_of_month
1716                   USING l_sdate " 日期最后一天
1717                   CHANGING l_tdate.
1718           MOVE:l_tdate TO gt_period1-datum,
1719                    l_seqno TO gt_period1-seqno,
1720                    l_sdate TO gt_period1-sdate,
1721                    l_tdate TO gt_period1-tdate.
1722           CONCATENATE l_tdate(4) '/' l_tdate+4(2) INTO gt_period1-ptext.
1723           CONCATENATE 'M' gt_period1-ptext
1724           INTO gt_period1-ptext SEPARATED BY space.
1725           APPEND gt_period1. CLEAR: gt_period1.
1726           l_months = l_months + 1.
1727       ENDDO.
1728 
1729 
1730       " 200 动态日期
1731       CLEAR:l_seqno,l_tdate,l_sdate,l_tdate,l_months.
1732       IF l_existed2 NE '1'.
1733           lv_num2 = lv_num2 + 1.
1734           l_tatum = date3.
1735       ELSE.
1736           l_tatum = date4.
1737       ENDIF.
1738 
1739              DO lv_num2 TIMES.
1740              add 1 TO l_seqno.
1741              PERFORM get_first_few_months
1742                   USING l_tatum l_months
1743                   CHANGING l_tdate. " 获取前几个月的日期
1744 
1745              l_sdate = l_tdate(6) && '01'. " 第一天
1746 
1747              PERFORM get_lastdate_of_month
1748                     USING l_sdate " 日期最后一天
1749                     CHANGING l_tdate.
1750              MOVE:l_tdate TO gt_period2-datum,
1751                        l_seqno TO gt_period2-seqno,
1752                        l_sdate TO gt_period2-sdate,
1753                        l_tdate TO gt_period2-tdate.
1754              CONCATENATE l_tdate(4) '/' l_tdate+4(2) INTO gt_period2-ptext.
1755              CONCATENATE 'M' gt_period2-ptext
1756              INTO gt_period2-ptext SEPARATED BY space.
1757              APPEND gt_period2. CLEAR: gt_period2.
1758              l_months = l_months + 1.
1759          ENDDO.
1760 
1761 
1762       " 300 动态日期
1763       CLEAR:l_seqno,l_tdate,l_sdate,l_tdate,l_months.
1764       IF l_existed2 NE '1'.
1765           lv_num3 = lv_num3 + 1.
1766           l_tatum = date3.
1767       ELSE.
1768           l_tatum = date4.
1769       ENDIF.
1770 
1771             DO lv_num3 TIMES.
1772             add 1 TO l_seqno.
1773             PERFORM get_first_few_months
1774                     USING l_tatum l_months
1775                     CHANGING l_tdate. " 获取前几个月的日期
1776             l_sdate = l_tdate(6) && '01'. " 第一天
1777 
1778             PERFORM get_lastdate_of_month
1779                       USING l_sdate " 日期最后一天
1780                       CHANGING l_tdate.
1781 
1782             MOVE:l_tdate TO gt_period3-datum,
1783                        l_seqno TO gt_period3-seqno,
1784                        l_sdate TO gt_period3-sdate,
1785                        l_tdate TO gt_period3-tdate.
1786             CONCATENATE l_tdate(4) '/' l_tdate+4(2) INTO gt_period3-ptext.
1787             CONCATENATE 'M' gt_period3-ptext
1788             INTO gt_period3-ptext SEPARATED BY space.
1789 
1790             APPEND gt_period3. CLEAR: gt_period3.
1791             l_months = l_months + 1.
1792          ENDDO.
1793 
1794       SORT gt_period by seqno datum.
1795       SORT gt_period1 by seqno datum.
1796       SORT gt_period2 by seqno datum.
1797       SORT gt_period3 by seqno datum.
1798 *      ---设置数据类型
1799       CLEAR:gt_dtype,gt_dtype[].
1800       MOVE:'01' TO gt_dtype-dtype,
1801               '库存金额' TO gt_dtype-dtext.
1802       APPEND gt_dtype.CLEAR:gt_dtype.
1803 
1804       MOVE:'02' TO gt_dtype-dtype,
1805               '库存金额' TO gt_dtype-dtext.
1806       APPEND gt_dtype.CLEAR:gt_dtype.
1807 
1808       MOVE:'03' TO gt_dtype-dtype,
1809                 '库存金额' TO gt_dtype-dtext.
1810       APPEND gt_dtype.CLEAR:gt_dtype.
1811 
1812 
1813       MOVE:'04' TO gt_dtype-dtype,
1814                 '库存金额' TO gt_dtype-dtext.
1815       APPEND gt_dtype.CLEAR:gt_dtype.
1816 
1817       MOVE:'05' TO gt_dtype-dtype,
1818               '库存金额' TO gt_dtype-dtext.
1819       APPEND gt_dtype.CLEAR:gt_dtype.
1820 
1821 ENDFORM.
1822 
1823 
1824 *&---------------------------------------------------------------------*
1825 *& Form GET_LASTDATE_OF_MONTH
1826 *&---------------------------------------------------------------------*
1827 *& text 获取月份的最后一天
1828 *&---------------------------------------------------------------------*
1829 *& --> L_SDATE
1830 *& <-- L_TDATE
1831 *&---------------------------------------------------------------------*
1832 FORM get_lastdate_of_month
1833         USING in_sdate ex_tdate.
1834 
1835 CALL FUNCTION 'LAST_DAY_OF_MONTHS'
1836     EXPORTING
1837     day_in = in_sdate
1838     IMPORTING
1839     last_day_of_month = ex_tdate
1840     EXCEPTIONS
1841     day_in_no_date = 1
1842     OTHERS = 2.
1843 
1844 ENDFORM.
1845 
1846 *&---------------------------------------------------------------------*
1847 *& Form set_date
1848 *&---------------------------------------------------------------------*
1849 *& text 两个时间段相差多少个月
1850 *&---------------------------------------------------------------------*
1851 *& --> L_SDATE
1852 *& <-- L_TDATE
1853 *&--------------------------------------------------------------------*
1854 FORM set_date USING min_sdate max_endate ex_tdate.
1855 CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
1856     EXPORTING
1857     i_date_from = min_sdate
1858     i_date_to = max_endate
1859     i_flg_separate = ' ' "是否单独计算 若有标识,则返回两日期相差的天数
1860     IMPORTING
1861 *     e_days = days "返回天数:638
1862     e_months = ex_tdate. "返回月数:21
1863 *     e_years = years. "返回年数:2
1864 ENDFORM.
1865 
1866 *&---------------------------------------------------------------------*
1867 *& Form Get_first_few_months
1868 *&---------------------------------------------------------------------*
1869 *& text 获取前几个月的日期
1870 *&---------------------------------------------------------------------*
1871 *& --> L_SDATE
1872 *& <-- L_TDAT
1873 *&---------------------------------------------------------------------*
1874 FORM get_first_few_months USING in_sdate in_months
1875 ex_tdate.
1876 
1877 CALL FUNCTION 'RSARCH_DATE_SHIFT'
1878     EXPORTING
1879     I_DATE = in_sdate"P_SY_DATUM
1880     I_SHIFT = in_months "月份数
1881     I_SHIFT_UNIT = 'MON'
1882     I_OPTION = 'LT'
1883     IMPORTING
1884     E_DATE = ex_tdate"P_SY_DATUM
1885     EXCEPTIONS
1886     ILLEGAL_SHIFT_UNIT = 1
1887     OUT_OF_BOUNDS = 2
1888     ILLEGAL_OPTION = 3
1889     OTHERS = 4.
1890   IF SY-SUBRC <> 0.
1891       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
1892       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
1893   ENDIF.
1894 
1895 ENDFORM.
1896 
1897 
1898 
1899 *&---------------------------------------------------------------------*
1900 *& Form ROUND
1901 *&---------------------------------------------------------------------*
1902 *& text
1903 *&---------------------------------------------------------------------*
1904 *& --> L_SALK3
1905 *&---------------------------------------------------------------------*
1906 FORM ROUND USING L_SALK3 TYPE f.
1907 
1908 CALL FUNCTION 'ROUND'
1909     EXPORTING
1910     decimals = 14 " 保留多少位小数
1911     input = l_salk3
1912     sign = '-' " + 向上取舍 - 向下取舍 (负数也一样)
1913     IMPORTING
1914     output = l_salk3 " 输出返回结果
1915     EXCEPTIONS
1916     input_invalid = 1
1917     overflow = 2
1918     type_invalid = 3
1919     OTHERS = 4.
1920 
1921 ENDFORM.
1922 
1923 FORM download_successful_1.
1924 
1925 CALL FUNCTION 'GUI_DOWNLOAD'
1926     EXPORTING
1927     FILENAME = P_FPATH2
1928     FILETYPE = 'DAT'
1929     CODEPAGE = '8404' "中文乱码
1930     WRITE_FIELD_SEPARATOR = 'X'
1931     TABLES
1932     DATA_TAB = down_mb52_1 " 下载的内容
1933     EXCEPTIONS
1934     FILE_WRITE_ERROR = 1
1935     NO_BATCH = 2
1936     GUI_REFUSE_FILETRANSFER = 3
1937     INVALID_TYPE = 4
1938     NO_AUTHORITY = 5
1939     UNKNOWN_ERROR = 6
1940     HEADER_NOT_ALLOWED = 7
1941     SEPARATOR_NOT_ALLOWED = 8
1942     FILESIZE_NOT_ALLOWED = 9
1943     HEADER_TOO_LONG = 10
1944     DP_ERROR_CREATE = 11
1945     DP_ERROR_SEND = 12
1946     DP_ERROR_WRITE = 13
1947     UNKNOWN_DP_ERROR = 14
1948     ACCESS_DENIED = 15
1949     DP_OUT_OF_MEMORY = 16
1950     DISK_FULL = 17
1951     DP_TIMEOUT = 18
1952     FILE_NOT_FOUND = 19
1953     DATAPROVIDER_EXCEPTION = 20
1954     CONTROL_FLUSH_ERROR = 21
1955     OTHERS = 22.
1956 
1957   IF SY-SUBRC = 0.
1958     MESSAGE S001 WITH '下载成功'.
1959   ELSE.
1960       MESSAGE S001 WITH '下载失败'.
1961   ENDIF.
1962 
1963 ENDFORM.
1964 
1965 "下载成功
1966 FORM download_successful_2.
1967 
1968 CALL FUNCTION 'GUI_DOWNLOAD'
1969     EXPORTING
1970     FILENAME = P_FPATH2
1971     FILETYPE = 'DAT'
1972     CODEPAGE = '8404' "中文乱码
1973     WRITE_FIELD_SEPARATOR = 'X'
1974     TABLES
1975     DATA_TAB = down_mb52_2 " 下载的内容
1976     EXCEPTIONS
1977     FILE_WRITE_ERROR = 1
1978     NO_BATCH = 2
1979     GUI_REFUSE_FILETRANSFER = 3
1980     INVALID_TYPE = 4
1981     NO_AUTHORITY = 5
1982     UNKNOWN_ERROR = 6
1983     HEADER_NOT_ALLOWED = 7
1984     SEPARATOR_NOT_ALLOWED = 8
1985     FILESIZE_NOT_ALLOWED = 9
1986     HEADER_TOO_LONG = 10
1987     DP_ERROR_CREATE = 11
1988     DP_ERROR_SEND = 12
1989     DP_ERROR_WRITE = 13
1990     UNKNOWN_DP_ERROR = 14
1991     ACCESS_DENIED = 15
1992     DP_OUT_OF_MEMORY = 16
1993     DISK_FULL = 17
1994     DP_TIMEOUT = 18
1995     FILE_NOT_FOUND = 19
1996     DATAPROVIDER_EXCEPTION = 20
1997     CONTROL_FLUSH_ERROR = 21
1998     OTHERS = 22.
1999 
2000   IF SY-SUBRC = 0.
2001     MESSAGE S001 WITH '下载成功'.
2002   ELSE.
2003     MESSAGE S001 WITH '下载失败'.
2004   ENDIF.
2005 
2006 ENDFORM.
2007 
2008 FORM download_successful_3.
2009 
2010 CALL FUNCTION 'GUI_DOWNLOAD'
2011     EXPORTING
2012     FILENAME = P_FPATH2
2013     FILETYPE = 'DAT'
2014     CODEPAGE = '8404' "中文乱码
2015     WRITE_FIELD_SEPARATOR = 'X'
2016     TABLES
2017     DATA_TAB = down_mb52_3 " 下载的内容
2018     EXCEPTIONS
2019     FILE_WRITE_ERROR = 1
2020     NO_BATCH = 2
2021     GUI_REFUSE_FILETRANSFER = 3
2022     INVALID_TYPE = 4
2023     NO_AUTHORITY = 5
2024     UNKNOWN_ERROR = 6
2025     HEADER_NOT_ALLOWED = 7
2026     SEPARATOR_NOT_ALLOWED = 8
2027     FILESIZE_NOT_ALLOWED = 9
2028     HEADER_TOO_LONG = 10
2029     DP_ERROR_CREATE = 11
2030     DP_ERROR_SEND = 12
2031     DP_ERROR_WRITE = 13
2032     UNKNOWN_DP_ERROR = 14
2033     ACCESS_DENIED = 15
2034     DP_OUT_OF_MEMORY = 16
2035     DISK_FULL = 17
2036     DP_TIMEOUT = 18
2037     FILE_NOT_FOUND = 19
2038     DATAPROVIDER_EXCEPTION = 20
2039     CONTROL_FLUSH_ERROR = 21
2040     OTHERS = 22.
2041 
2042   IF SY-SUBRC = 0.
2043     MESSAGE S001 WITH '下载成功'.
2044   ELSE.
2045     MESSAGE S001 WITH '下载失败'.
2046   ENDIF.
2047 
2048 ENDFORM.
2049 
2050 *&---------------------------------------------------------------------*
2051 *& Form WRITE_MAIL_BODY
2052 *&---------------------------------------------------------------------*
2053 *& text
2054 *&---------------------------------------------------------------------*
2055 *& --> GT_OBJTXT
2056 *& --> P_
2057 *&---------------------------------------------------------------------*
2058 FORM WRITE_MAIL_BODY TABLES I_OBJTXT USING IN_TXT.
2059 
2060 I_OBJTXT = IN_TXT. "標題
2061 APPEND I_OBJTXT.
2062 CLEAR I_OBJTXT.
2063 
2064 ENDFORM.
2065 
2066 
2067 *&---------------------------------------------------------------------*
2068 *& Form DAOWN_MB52
2069 *&---------------------------------------------------------------------*
2070 *& text
2071 *&---------------------------------------------------------------------*
2072 *& --> p1 text
2073 *& <-- p2 text
2074 *&---------------------------------------------------------------------*
2075 FORM donw_mb52 USING lv_datum .
2076 
2077 IF gt_mb52_1[] is not INITIAL.
2078 CLEAR:down_mb52_1.
2079 *-->标题
2080 down_mb52_1-C1 = '存储地点'.
2081 down_mb52_1-C2 = '工厂'.
2082 down_mb52_1-C3 = '物料类型'.
2083 down_mb52_1-C4 = '物料群组'.
2084 down_mb52_1-C5 = '料号'.
2085 down_mb52_1-C6 = '料号说明'.
2086 down_mb52_1-C7 = '存储位置说明'.
2087 down_mb52_1-C8 = '储格'.
2088 down_mb52_1-C9 = '未限制'.
2089 down_mb52_1-C10 = '值未限制'.
2090 down_mb52_1-C11 = '特别库存'.
2091 down_mb52_1-C12 = '品质检验中'.
2092 down_mb52_1-C13 = '限制使用库存'.
2093 down_mb52_1-C14 = '值已限制'.
2094 down_mb52_1-C15 = '已冻结'.
2095 down_mb52_1-C16 = '冻结库存值'.
2096 down_mb52_1-C17 = '退货'.
2097 down_mb52_1-C18 = '冻结退货值'.
2098 down_mb52_1-C19 = 'MRP控制员'.
2099 down_mb52_1-C20 = '评估GR冻结库存值'.
2100 down_mb52_1-C21 = '已评估的收货冻结库储'.
2101 down_mb52_1-C23 = '特殊库存号码'.
2102 down_mb52_1-C24 = '单位'.
2103 down_mb52_1-C25 = '币别'.
2104 * down_mb52_1-C26 = '销售库存'.
2105 * down_mb52_1-C27 = '评估库存'.
2106 * down_mb52_1-C28 = '异动平均价格'.
2107 * down_mb52_1-C29 = '标准价格'.
2108 
2109 APPEND down_mb52_1.
2110 CLEAR down_mb52_1.
2111 *-->表内容
2112 LOOP AT gt_mb52_1 WHERE
2113 ( labst > 0 OR insme > 0 OR retme > 0 OR speme > 0 OR einme > 0 ).
2114 move:
2115 gt_mb52_1-lgort to down_mb52_1-c1,
2116 gt_mb52_1-werks to down_mb52_1-c2,
2117 gt_mb52_1-mtart to down_mb52_1-c3,
2118 gt_mb52_1-matkl to down_mb52_1-c4,
2119 gt_mb52_1-matnr to down_mb52_1-c5,
2120 gt_mb52_1-maktx to down_mb52_1-c6,
2121 gt_mb52_1-lgobe to down_mb52_1-c7,
2122 gt_mb52_1-lgpbe to down_mb52_1-c8,
2123 gt_mb52_1-labst to down_mb52_1-c9,
2124 gt_mb52_1-salk3 to down_mb52_1-c10,
2125 gt_mb52_1-sobkz to down_mb52_1-c11,
2126 gt_mb52_1-insme to down_mb52_1-c12,
2127 gt_mb52_1-retme to down_mb52_1-c13,
2128 gt_mb52_1-einme to down_mb52_1-c14,
2129 gt_mb52_1-salk3_1 to down_mb52_1-c15,
2130 gt_mb52_1-speme to down_mb52_1-c16,
2131 gt_mb52_1-salk3_2 to down_mb52_1-c17,
2132 gt_mb52_1-retme to down_mb52_1-c18,
2133 gt_mb52_1-salk3_3 to down_mb52_1-c19,
2134 gt_mb52_1-dispo to down_mb52_1-c20,
2135 gt_mb52_1-salk3_4 to down_mb52_1-c21,
2136 gt_mb52_1-bwesb to down_mb52_1-c22,
2137 gt_mb52_1-ssnum to down_mb52_1-c23,
2138 gt_mb52_1-meins to down_mb52_1-c24,
2139 gt_mb52_1-waers to down_mb52_1-c25.
2140 * gt_mb52_1-lbkum_e to down_mb52_1-c26,
2141 * gt_mb52_1-lbkum_m to down_mb52_1-c27,
2142 * gt_mb52_1-price to down_mb52_1-c28,
2143 * gt_mb52_1-stprs to down_mb52_1-c29.
2144 APPEND down_mb52_1.
2145 CLEAR: down_mb52_1.
2146 ENDLOOP.
2147 
2148 * CONCATENATE L_PATH '2000公司厂商明细.xls' INTO L_PATH.
2149 CONCATENATE P_FPATH1 sy-datum '_100_' lv_datum '期物料明细.xls' INTO P_FPATH2.
2150 PERFORM download_successful_1." 下载
2151 ENDIF.
2152 IF gt_mb52_2[] is not INITIAL.
2153 CLEAR:down_mb52_2 .
2154 *-->标题
2155 down_mb52_2-C1 = '存储地点II'.
2156 down_mb52_2-C2 = '呆滞期'.
2157 down_mb52_2-C3 = '工厂'.
2158 down_mb52_2-C4 = '物料类型'.
2159 down_mb52_2-C5 = '物料群组'.
2160 down_mb52_2-C6 = '料号'.
2161 down_mb52_2-C7 = '物料说明'.
2162 down_mb52_2-C8 = '存储地点'.
2163 down_mb52_2-C9 = '存储位置说明'.
2164 down_mb52_2-C10 = '储格'.
2165 down_mb52_2-C11 = '值未限制'.
2166 down_mb52_2-C12 = '特别库存'.
2167 down_mb52_2-C13 = '限制使用库存'.
2168 down_mb52_2-C14 = '值已限制'.
2169 down_mb52_2-C15 = '已冻结'.
2170 down_mb52_2-C16 = '冻结库存值'.
2171 down_mb52_2-C17 = '退货'.
2172 down_mb52_2-C18 = '冻结退货值'.
2173 down_mb52_2-C19 = '评估GR冻结库存'.
2174 down_mb52_2-C20 = '已评估的收货冻结库存值'.
2175 down_mb52_2-C21 = '特殊库存号码'.
2176 down_mb52_2-C22 = 'DF 存储位置等级'.
2177 down_mb52_2-C23 = '单位'.
2178 down_mb52_2-C24 = '币别'.
2179 down_mb52_2-C25 = '未限制' .
2180 down_mb52_2-C26 = '品质检验中' .
2181 down_mb52_2-C27 = 'MRP控制员' .
2182 down_mb52_2-C28 = '未限制 + 品质检验中' .
2183 down_mb52_2-C29 = '单价' .
2184 down_mb52_2-C30 = '金额' .
2185 * down_mb52_2-C31 = '异动平均价格' .
2186 * down_mb52_2-C32 = '标准价格' .
2187 APPEND down_mb52_2.
2188 CLEAR down_mb52_2.
2189 *-->表内容
2190 LOOP AT gt_mb52_2 WHERE labst_insme > 0.
2191 move:
2192 gt_mb52_2-lgort2 to down_mb52_2-c1,
2193 gt_mb52_2-text to down_mb52_2-c2,
2194 gt_mb52_2-werks to down_mb52_2-c3,
2195 gt_mb52_2-mtart to down_mb52_2-c4,
2196 gt_mb52_2-matkl to down_mb52_2-c5,
2197 
2198 gt_mb52_2-matnr to down_mb52_2-c6,
2199 gt_mb52_2-maktx to down_mb52_2-c7,
2200 gt_mb52_2-lgort to down_mb52_2-c8,
2201 gt_mb52_2-lgobe to down_mb52_2-c9,
2202 gt_mb52_2-lgpbe to down_mb52_2-c10,
2203 
2204 gt_mb52_2-salk3 to down_mb52_2-c11,
2205 gt_mb52_2-sobkz to down_mb52_2-c12,
2206 gt_mb52_2-einme to down_mb52_2-c13,
2207 gt_mb52_2-salk3_1 to down_mb52_2-c14,
2208 gt_mb52_2-speme to down_mb52_2-c15,
2209 
2210 gt_mb52_2-salk3_2 to down_mb52_2-c16,
2211 gt_mb52_2-retme to down_mb52_2-c17,
2212 gt_mb52_2-salk3_3 to down_mb52_2-c18,
2213 gt_mb52_2-salk3_4 to down_mb52_2-c19,
2214 gt_mb52_2-bwesb to down_mb52_2-c20,
2215 
2216 gt_mb52_2-ssnum to down_mb52_2-c21,
2217 gt_mb52_2-lvorm to down_mb52_2-c22,
2218 gt_mb52_2-meins to down_mb52_2-c23,
2219 gt_mb52_2-waers to down_mb52_2-c24,
2220 gt_mb52_2-labst to down_mb52_2-c25,
2221 
2222 gt_mb52_2-insme to down_mb52_2-c26,
2223 gt_mb52_2-einme to down_mb52_2-c27,
2224 gt_mb52_2-labst_insme to down_mb52_2-c28,
2225 gt_mb52_2-price to down_mb52_2-c29,
2226 gt_mb52_2-hsl to down_mb52_2-c30.
2227 
2228 * gt_mb52_2-price1 to down_mb52_2-c31,
2229 * gt_mb52_2-stprs to down_mb52_2-c32.
2230 APPEND down_mb52_2.
2231 CLEAR: down_mb52_2.
2232 ENDLOOP.
2233 CONCATENATE P_FPATH1 sy-datum '_200_' lv_datum '期物料明细.xls' INTO P_FPATH2.
2234 PERFORM download_successful_2." 下载
2235 ENDIF.
2236 
2237 IF gt_mb52_3[] is not INITIAL.
2238 CLEAR:down_mb52_3.
2239 *-->标题
2240 down_mb52_3-C1 = 'WH CODE'.
2241 down_mb52_3-C2 = '工厂'.
2242 down_mb52_3-C3 = '物料类型'.
2243 down_mb52_3-C4 = '物料群组'.
2244 down_mb52_3-C5 = '物料'.
2245 down_mb52_3-C6 = 'MBS库存'.
2246 down_mb52_3-C7 = 'WH code + MBS库存'.
2247 down_mb52_3-C8 = '物料说明'.
2248 down_mb52_3-C9 = '存储地点'.
2249 down_mb52_3-C10 = '存储位置说明'.
2250 down_mb52_3-C11 = '储格'.
2251 down_mb52_3-C12 = '未限制'.
2252 down_mb52_3-C13 = '值未限制'.
2253 down_mb52_3-C14 = '特别库存'.
2254 down_mb52_3-C15 = '品质检验中'.
2255 down_mb52_3-C16 = '限制使用的库存'.
2256 down_mb52_3-C17 = '值已限制'.
2257 down_mb52_3-C18 = '已冻结'.
2258 down_mb52_3-C19 = '冻结库存值'.
2259 down_mb52_3-C20 = '退货'.
2260 down_mb52_3-C21 = '冻结退货值'.
2261 down_mb52_3-C22 = 'MRP控制员'.
2262 down_mb52_3-C23 = '评估GR冻结库存值'.
2263 down_mb52_3-C24 = '已评估的收货冻结库存'.
2264 down_mb52_3-C25 = '特殊库存号码'.
2265 down_mb52_3-C26 = '单位'.
2266 down_mb52_3-C27 = '币别'.
2267 * down_mb52_3-C28 = '异动平均价格'.
2268 * down_mb52_3-C29 = '标准价格'.
2269 APPEND down_mb52_3.
2270 CLEAR down_mb52_3.
2271 *-->表内容
2272 LOOP AT gt_mb52_3 WHERE
2273 ( labst > 0 OR insme > 0 OR retme > 0 OR speme > 0 OR einme > 0 ).
2274 move:
2275 gt_mb52_3-zwhcode to down_mb52_3-c1,
2276 gt_mb52_3-werks to down_mb52_3-c2,
2277 gt_mb52_3-mtart to down_mb52_3-c3,
2278 gt_mb52_3-matkl to down_mb52_3-c4,
2279 gt_mb52_3-matnr to down_mb52_3-c5,
2280 gt_mb52_3-mb_zwhcode to down_mb52_3-c6,
2281 gt_mb52_3-s_zwhcode to down_mb52_3-c7,
2282 gt_mb52_3-maktx to down_mb52_3-c8,
2283 gt_mb52_3-lgort to down_mb52_3-c9,
2284 gt_mb52_3-lgobe to down_mb52_3-c10,
2285 gt_mb52_3-lgpbe to down_mb52_3-c11,
2286 gt_mb52_3-labst to down_mb52_3-c12,
2287 gt_mb52_3-salk3 to down_mb52_3-c13,
2288 gt_mb52_3-sobkz to down_mb52_3-c14,
2289 gt_mb52_3-insme to down_mb52_3-c15,
2290 gt_mb52_3-einme to down_mb52_3-c16,
2291 gt_mb52_3-salk3_1 to down_mb52_3-c17,
2292 gt_mb52_3-speme to down_mb52_3-c18,
2293 gt_mb52_3-salk3_2 to down_mb52_3-c19,
2294 gt_mb52_3-retme to down_mb52_3-c20,
2295 gt_mb52_3-salk3_3 to down_mb52_3-c21,
2296 gt_mb52_3-dispo to down_mb52_3-c22,
2297 gt_mb52_3-salk3_4 to down_mb52_3-c23,
2298 gt_mb52_3-bwesb to down_mb52_3-c24,
2299 gt_mb52_3-ssnum to down_mb52_3-c25,
2300 gt_mb52_3-meins to down_mb52_3-c26,
2301 gt_mb52_3-waers to down_mb52_3-c27.
2302 * gt_mb52_3-price to down_mb52_3-c28,
2303 * gt_mb52_3-stprs to down_mb52_3-c29.
2304 
2305 APPEND down_mb52_3.
2306 CLEAR: down_mb52_3.
2307 ENDLOOP.
2308 CONCATENATE P_FPATH1 sy-datum '_300_' lv_datum '期物料明细.xls' INTO P_FPATH2.
2309 PERFORM download_successful_3." 下载
2310 ENDIF.
2311 
2312 ENDFORM.
2313 
2314 
2315 
2316 *&---------------------------------------------------------------------*
2317 *& Form NEW_AREA3_MAIL
2318 *&---------------------------------------------------------------------*
2319 *& text
2320 *&---------------------------------------------------------------------*
2321 *& --> ID_3
2322 *& --> LV_NULL
2323 *&---------------------------------------------------------------------*
2324 FORM NEW_AREA3_MAIL USING in_ID_3
2325 in_NULL.
2326 DATA: l_past_field(50). "往期栏位
2327 DATA: l_whcode(50),
2328           l_value(50),
2329           l_value1(50),
2330           l_line TYPE string.
2331 DATA: l_num TYPE i,
2332         do_num TYPE i.
2333 *上传 excel 中没有储存地
2334     IF sum_300[] is not INITIAL.
2335       LOOP AT sum_300 WHERE zwhcode NE 'MBS库存'.
2336          in_ID_3 = in_ID_3 + 1.
2337          l_num = '88'.
2338          l_line = l_whcode = sum_300-zwhcode.
2339             LOOP AT write_zmmr03_stok WHERE zwhcode EQ l_whcode.
2340                 l_value = write_zmmr03_stok-salk3.
2341                 l_value1 = write_zmmr03_stok-text.
2342             ENDLOOP.
2343 *             l_seqno = gt_period3-seqno.
2344             CONCATENATE l_line l_value l_value1 INTO l_line SEPARATED BY gc_tab.
2345 *            --> 斷行
2346             CONCATENATE g_string_3 l_line gc_crlf INTO g_string_3.
2347       ENDLOOP.
2348 
2349         IF in_null NE '1' AND l_num EQ '88'.
2350 
2351         DO 3 TIMES.
2352         do_num = do_num + 1.
2353             IF do_num EQ '1'.
2354                 ASSIGN COMPONENT 'LGORT2' OF STRUCTURE <g_wa3> TO <g_field3>.
2355                 l_line = '合计'.
2356                 l_whcode = '3_sum1'.
2357                 LOOP AT write_zmmr03_stok WHERE zwhcode EQ l_whcode.
2358                      l_value = write_zmmr03_stok-salk3.
2359                      l_value1 = write_zmmr03_stok-text.
2360                 ENDLOOP.
2361                 CONCATENATE l_line l_value l_value1 INTO l_line SEPARATED BY gc_tab.
2362 *                --> 斷行
2363                 CONCATENATE g_string_3 l_line gc_crlf INTO g_string_3.
2364             ELSEIF do_num EQ '2'.
2365                 LOOP AT write_zmmr03_stok WHERE zwhcode EQ l_whcode.
2366                      l_value = write_zmmr03_stok-salk3.
2367                      l_value1 = write_zmmr03_stok-text.
2368                 ENDLOOP.
2369                 CONCATENATE l_line l_value l_value1 INTO l_line SEPARATED BY gc_tab.
2370 *                --> 斷行
2371                 CONCATENATE g_string_3 l_line gc_crlf INTO g_string_3.
2372             ELSE.
2373                  l_line = ''.
2374                  l_whcode = '3_sum2'.
2375                  LOOP AT write_zmmr03_stok WHERE zwhcode EQ l_whcode.
2376                       l_value = write_zmmr03_stok-salk3.
2377                       l_value1 = write_zmmr03_stok-text.
2378                  ENDLOOP.
2379                  CONCATENATE l_line l_value l_value1 INTO l_line SEPARATED BY gc_tab.
2380 *                 --> 斷行
2381                  CONCATENATE g_string_3 l_line gc_crlf INTO g_string_3.
2382             ENDIF.
2383         ENDDO.
2384       ENDIF.
2385     ENDIF.
2386 ENDFORM.
2387 
2388 *&---------------------------------------------------------------------*
2389 *& Form SET_FIYEAR
2390 *&---------------------------------------------------------------------*
2391 *& text
2392 *&---------------------------------------------------------------------*
2393 *& --> p1 text
2394 *& <-- p2 text
2395 *&---------------------------------------------------------------------*
2396 FORM SET_FIYEAR .
2397 DATA: l_sdate LIKE sy-datum,
2398           l_endate LIKE sy-datum,
2399           l_tdate LIKE sy-datum, " 前几个月的日期
2400           lv_date TYPE i,
2401           l_months TYPE i,
2402           l_index TYPE sy-tabix,
2403           l_seqno LIKE gt_period-seqno.
2404 
2405 *-->获取选择屏期间获取最后一天
2406 DATA: L_FIYEAR TYPE SY-DATUM.
2407 DATA: L_Start TYPE SY-DATUM.
2408 
2409           L_Start = P_Start+0(4) && P_Start+5(2) && '01'.
2410           IF L_Start LE '00000001'.
2411               L_Start = '20180101'.
2412           ENDIF.
2413 
2414        date4_s = L_Start.
2415        date4_day = L_FIYEAR = P_FIYEAR+0(4) && P_FIYEAR+5(2) && '01'.
2416     CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
2417         EXPORTING
2418         day_in = L_FIYEAR "输入日期
2419         IMPORTING
2420         last_day_of_month = date4 "返回日期:20140131
2421         EXCEPTIONS
2422         day_in_no_date = 1
2423         OTHERS = 2.
2424 
2425     PERFORM set_date
2426             USING L_Start L_FIYEAR
2427             CHANGING lv_date." 计算两端时间相差 个月
2428        lv_date = lv_date + 1.
2429         DO lv_date TIMES.
2430             PERFORM get_first_few_months
2431                 USING L_FIYEAR l_months
2432                 CHANGING l_tdate. " 获取前几个月的日期
2433             l_sdate = l_tdate(6) && '01'. " 第一天
2434             PERFORM get_lastdate_of_month
2435                   USING l_sdate " 日期最后一天
2436                   CHANGING l_tdate.
2437             gt_datum1-opedatem = l_sdate.
2438             gt_datum1-enddatem = l_tdate.
2439             APPEND gt_datum1. CLEAR: gt_datum1.
2440             l_months = l_months + 1.
2441         ENDDO.
2442 
2443     " 获取数据周期
2444     LOOP AT FIYEAR.
2445       Have_data = 'Y'. " 弹框是否下载明细
2446 *    FIYEAR-sign I 包含 E 排除
2447 *    FIYEAR-option BT 范围之间 EQ 等于 NB 范围以外 GE 大于等于 GT 大于 LT 小于 LE 小于等于 NE 不等于
2448           IF FIYEAR-low+4(1) NE '0' OR FIYEAR-high+4(1) NE '0'
2449               OR FIYEAR-low+5(2) > '12' OR FIYEAR-high+5(2) > '12'
2450               OR ( FIYEAR-low+5(2) EQ '00' AND FIYEAR-low NE '0000000' )
2451               OR ( FIYEAR-high+5(2) EQ '00' AND FIYEAR-high NE '0000000').
2452 
2453                 MESSAGE S001 WITH '明细周期输入有误,提示:_ _ _ _ 001~ _ _ _ _ 012之间' DISPLAY LIKE 'E'.
2454                 Stop.
2455           ENDIF.
2456           IF FIYEAR-option EQ 'BT'.
2457           l_sdate = FIYEAR-low(4) && FIYEAR-low+5(2) && '01' ." 底
2458           l_endate = FIYEAR-high(4) && FIYEAR-high+5(2) && '01' ." 高
2459           PERFORM set_date
2460                 USING l_sdate l_endate
2461                 CHANGING lv_date." 计算两端时间相差 个月
2462 
2463 *           ---> 获取需要明细的日期
2464           CLEAR: l_seqno,l_months.
2465           lv_date = lv_date + 1 .
2466           DO lv_date TIMES.
2467               add 1 TO l_seqno.
2468               PERFORM get_first_few_months
2469                       USING l_endate l_months
2470                       CHANGING l_tdate. " 获取前几个月的日期
2471               l_sdate = l_tdate(6) && '01'. " 第一天
2472               PERFORM get_lastdate_of_month
2473                     USING l_sdate " 日期最后一天
2474                     CHANGING l_tdate.
2475 
2476               gt_datum-text1 = fiyear-sign."标志
2477               gt_datum-text2 = 'EQ'."fiyear-option."选项
2478               gt_datum-opedatem = l_sdate. " 开始日期
2479               gt_datum-enddatem = l_tdate. " 结束日期
2480 
2481               APPEND gt_datum.
2482               l_months = l_months + 1.
2483           ENDDO.
2484           ELSEIF FIYEAR-option EQ 'NB'.
2485                l_sdate = FIYEAR-low(4) && FIYEAR-low+5(2) && '01' ." 底
2486                l_endate = FIYEAR-high(4) && FIYEAR-high+5(2) && '01' ." 高
2487                PERFORM set_date
2488                      USING l_sdate l_endate
2489                      CHANGING lv_date." 计算两端时间相差 个月
2490 
2491 *                ---> 获取需要明细的日期
2492                CLEAR:l_seqno.
2493                lv_date = lv_date + 1 .
2494                DO lv_date TIMES.
2495                     add 1 TO l_seqno.
2496                     PERFORM get_first_few_months
2497                           USING l_endate l_months
2498                           CHANGING l_tdate. " 获取前几个月的日期
2499                     l_sdate = l_tdate(6) && '01'. " 第一天
2500                     PERFORM get_lastdate_of_month
2501                           USING l_sdate " 日期最后一天
2502                           CHANGING l_tdate.
2503 
2504                     gt_datum-text1 = fiyear-sign."标志
2505                     gt_datum-text2 = 'NE'."fiyear-option."选项
2506                     gt_datum-opedatem = l_sdate. " 开始日期
2507                     gt_datum-enddatem = l_tdate. " 结束日期
2508 
2509                     APPEND gt_datum.
2510                     l_months = l_months + 1.
2511                ENDDO.
2512           ELSE.
2513               gt_datum-text1 = fiyear-sign."标志
2514               gt_datum-text2 = fiyear-option."选项
2515               gt_datum-opedatem = fiyear-low+0(4) && fiyear-low+5(2) && '01'. " 开始日期
2516               gt_datum-enddatem = fiyear-low+0(4) && fiyear-low+5(2) && '01'. " 结束日期
2517               APPEND gt_datum.
2518           ENDIF.
2519     ENDLOOP.
2520 
2521     IF Have_data EQ 'Y'.
2522         PERFORM Have_data CHANGING p_return." 选择屏弹框
2523         CLEAR: Have_data.
2524     ENDIF.
2525 
2526 *     IF i_elikz EQ 'X'. " 下限日期决定是否跑最新呆滞期
2527     " 最后一期需要跑名细资料
2528     LOOP AT gt_datum WHERE opedatem EQ L_FIYEAR.
2529         l_index = '1'.
2530     ENDLOOP.
2531     IF l_index NE '1'.
2532         gt_datum-text1 = 'I'."标志
2533         gt_datum-text2 = 'EQ'."选项
2534         gt_datum-opedatem = date4(6) && '01'. " 开始日期
2535         gt_datum-enddatem = date4. " 结束日期
2536 
2537         APPEND gt_datum.
2538     ENDIF.
2539 
2540     SORT gt_datum by opedatem ASCENDING.
2541     PERFORM set_period1." 动态获取周期
2542 ENDFORM.
2543 
2544 *&---------------------------------------------------------------------*
2545 *& Form GT_DETAIL
2546 *&---------------------------------------------------------------------*
2547 *& text
2548 *&---------------------------------------------------------------------*
2549 *& --> p1 text
2550 *& <-- p2 text
2551 *&---------------------------------------------------------------------*
2552 FORM gt_Detail .
2553 DATA:b_wersks1(4),
2554         b_wersks2(4),
2555         b_wersks3(4),
2556         l_index1 LIKE sy-tabix.
2557 
2558 
2559 DATA: lv_datum LIKE sy-datum," 明细周期变量
2560           lv_datum1 LIKE sy-datum. " 选择屏周期变量
2561     IF gt_bukrs[] is INITIAL.
2562         b_wersks1 = '100'.
2563         b_wersks2 = '200'.
2564         b_wersks3 = '300'.
2565     ENDIF.
2566 
2567       LOOP AT gt_datum WHERE text2 NE 'NE'.
2568 
2569 *       选择屏期间
2570             IF gt_datum-text1 EQ 'E' AND
2571             ( gt_datum-text2 EQ 'LE'
2572             OR gt_datum-text2 EQ 'LT' ). " 小于 或 小于等于
2573 
2574                 lv_datum = gt_datum-opedatem .
2575              IF gt_datum-text2 EQ 'LE' .
2576                 LOOP AT gt_datum1 WHERE opedatem > lv_datum.
2577                     lv_datum1 = gt_datum1-opedatem.
2578 *                     循环获取往期数据
2579                     LOOP AT gt_datum WHERE text2 NE 'NE'
2580                                   AND opedatem EQ lv_datum1.
2581 
2582                           PERFORM text_script USING
2583                                          b_wersks1 b_wersks2
2584                                          b_wersks3 gt_datum-opedatem.
2585 
2586                           " 下载明细
2587                           IF p_return EQ '1'.
2588                           PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2589                           ENDIF.
2590                           "mail 明细
2591                            IF s_send EQ 'X'. "发送 mail
2592                            PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2593                            ENDIF.
2594                           IF gt_datum-opedatem NE date4_day.
2595                                 CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2596                                 sum_100[],sum_200[],sum_300[],
2597                                 sum_100_1[],sum_200_1[],sum_300_1[],
2598                                 g_mslb1[],g_mslb2[],g_mslb3[],
2599                                 g_msku1[],g_msku2[],g_msku3[],
2600                                 g_ebew1[],g_ebew2[],g_ebew3[].
2601                           ENDIF.
2602                       ENDLOOP.
2603                 ENDLOOP.
2604             ELSE.
2605                 LOOP AT gt_datum1 WHERE opedatem >= lv_datum.
2606                   lv_datum1 = gt_datum1-opedatem.
2607 *                 循环获取往期数据
2608                     LOOP AT gt_datum WHERE text2 NE 'NE' AND opedatem EQ lv_datum1.
2609                         PERFORM text_script USING
2610                                b_wersks1 b_wersks2
2611                                b_wersks3 gt_datum-opedatem.
2612                         " 下载明细
2613                         IF p_return EQ '1'.
2614                               PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2615                         ENDIF.
2616 
2617                         "mail 明细
2618                         IF s_send EQ 'X'. "发送 mail
2619                             PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2620                         ENDIF.
2621                         IF gt_datum-opedatem NE date4_day.
2622                                CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2623                                sum_100[],sum_200[],sum_300[],
2624                                sum_100_1[],sum_200_1[],sum_300_1[],
2625                                g_mslb1[],g_mslb2[],g_mslb3[],
2626                                g_msku1[],g_msku2[],g_msku3[],
2627                                g_ebew1[],g_ebew2[],g_ebew3[].
2628                         ENDIF.
2629                     ENDLOOP.
2630                 ENDLOOP.
2631             ENDIF.
2632 
2633             ELSEIF gt_datum-text1 EQ 'E'
2634                     AND ( gt_datum-text2 EQ 'GE'
2635                     OR gt_datum-text2 EQ 'GT' ).
2636 
2637                  lv_datum = gt_datum-opedatem .
2638                   IF gt_datum-text2 EQ 'GE' .
2639                         LOOP AT gt_datum1 WHERE opedatem < lv_datum.
2640                           lv_datum1 = gt_datum1-opedatem.
2641 *                           循环获取往期数据
2642                               LOOP AT gt_datum WHERE text2 NE 'NE'
2643                                       AND opedatem EQ lv_datum1.
2644 
2645                                   PERFORM text_script USING
2646                                       b_wersks1 b_wersks2
2647                                       b_wersks3 gt_datum-opedatem.
2648                                   " 下载明细
2649                                   IF p_return EQ '1'.
2650                                       PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2651                                   ENDIF.
2652 
2653                                   "mail 明细
2654                                   IF s_send EQ 'X'. "发送 mail
2655                                       PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2656                                   ENDIF.
2657 
2658                                   IF gt_datum-opedatem NE date4_day.
2659                                         CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2660                                         sum_100[],sum_200[],sum_300[],
2661                                         sum_100_1[],sum_200_1[],sum_300_1[],
2662                                         g_mslb1[],g_mslb2[],g_mslb3[],
2663                                         g_msku1[],g_msku2[],g_msku3[],
2664                                         g_ebew1[],g_ebew2[],g_ebew3[].
2665                                   ENDIF.
2666                               ENDLOOP.
2667                           ENDLOOP.
2668                 ELSE.
2669                    LOOP AT gt_datum1 WHERE opedatem <= lv_datum.
2670                    lv_datum1 = gt_datum1-opedatem.
2671 *                    循环获取往期数据
2672                          LOOP AT gt_datum WHERE text2 NE 'NE'
2673                                      AND opedatem EQ lv_datum1.
2674 
2675                                PERFORM text_script USING
2676                                    b_wersks1 b_wersks2
2677                                    b_wersks3 gt_datum-opedatem.
2678 
2679                                " 下载明细
2680                                IF p_return EQ '1'.
2681                                    PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2682                                ENDIF.
2683                                "mail 明细
2684                                IF s_send EQ 'X'. "发送 mail
2685                                    PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2686                                ENDIF.
2687                                IF gt_datum-opedatem NE date4_day.
2688                                    CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2689                                    sum_100[],sum_200[],sum_300[],
2690                                    sum_100_1[],sum_200_1[],sum_300_1[],
2691                                    g_mslb1[],g_mslb2[],g_mslb3[],
2692                                    g_msku1[],g_msku2[],g_msku3[],
2693                                    g_ebew1[],g_ebew2[],g_ebew3[].
2694                                ENDIF.
2695                          ENDLOOP.
2696                    ENDLOOP.
2697                 ENDIF.
2698             ELSEIF gt_datum-text1 EQ 'I' AND
2699                     ( gt_datum-text2 EQ 'LE'
2700                     OR gt_datum-text2 EQ 'LT' ). " 小于 或 小于等于.
2701 
2702             lv_datum = gt_datum-opedatem .
2703                IF gt_datum-text2 EQ 'LE' .
2704                      LOOP AT gt_datum1 WHERE opedatem <= lv_datum.
2705                            lv_datum1 = gt_datum1-opedatem.
2706 *                            循环获取往期数据
2707                            LOOP AT gt_datum WHERE text2 NE 'NE'
2708                                  AND opedatem EQ lv_datum1.
2709 
2710                                  PERFORM text_script USING
2711                                          b_wersks1 b_wersks2
2712                                          b_wersks3 gt_datum-opedatem.
2713 
2714                                  " 下载明细
2715                                  IF p_return EQ '1'.
2716                                      PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2717                                  ENDIF.
2718                                  "mail 明细
2719                                  IF s_send EQ 'X'. "发送 mail
2720                                      PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2721                                  ENDIF.
2722                                  IF gt_datum-opedatem NE date4_day.
2723                                      CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2724                                      sum_100[],sum_200[],sum_300[],
2725                                      sum_100_1[],sum_200_1[],sum_300_1[],
2726                                      g_mslb1[],g_mslb2[],g_mslb3[],
2727                                      g_msku1[],g_msku2[],g_msku3[],
2728                                      g_ebew1[],g_ebew2[],g_ebew3[].
2729                                  ENDIF.
2730                            ENDLOOP.
2731                      ENDLOOP.
2732                ELSE.
2733                      LOOP AT gt_datum1 WHERE opedatem < lv_datum.
2734                      lv_datum1 = gt_datum1-opedatem.
2735 *                      循环获取往期数据
2736                            LOOP AT gt_datum WHERE text2 NE 'NE'
2737                                  AND opedatem EQ lv_datum1.
2738 
2739                                PERFORM text_script USING
2740                                     b_wersks1 b_wersks2
2741                                     b_wersks3 gt_datum-opedatem.
2742                                " 下载明细
2743                                IF p_return EQ '1'.
2744                                    PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2745                                ENDIF.
2746                                "mail 明细
2747                                IF s_send EQ 'X'. "发送 mail
2748                                     PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2749                                ENDIF.
2750                                IF gt_datum-opedatem NE date4_day.
2751                                    CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2752                                    sum_100[],sum_200[],sum_300[],
2753                                    sum_100_1[],sum_200_1[],sum_300_1[],
2754                                    g_mslb1[],g_mslb2[],g_mslb3[],
2755                                    g_msku1[],g_msku2[],g_msku3[],
2756                                    g_ebew1[],g_ebew2[],g_ebew3[].
2757                                ENDIF.
2758                            ENDLOOP.
2759                      ENDLOOP.
2760                ENDIF.
2761             ELSEIF gt_datum-text1 EQ 'I'
2762                 AND ( gt_datum-text2 EQ 'GE'
2763                 OR gt_datum-text2 EQ 'GT' ).
2764 
2765             lv_datum = gt_datum-opedatem .
2766                 IF gt_datum-text2 EQ 'GE' .
2767                       LOOP AT gt_datum1 WHERE opedatem >= lv_datum.
2768                              lv_datum1 = gt_datum1-opedatem.
2769 *                             循环获取往期数据
2770                                 LOOP AT gt_datum WHERE text2 NE 'NE'
2771                                         AND opedatem EQ lv_datum1.
2772 
2773                                       PERFORM text_script USING
2774                                                 b_wersks1 b_wersks2
2775                                                 b_wersks3 gt_datum-opedatem.
2776                                       " 下载明细
2777                                       IF p_return EQ '1'.
2778                                             PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2779                                       ENDIF.
2780                                       "mail 明细
2781                                       IF s_send EQ 'X'. "发送 mail
2782                                             PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2783                                       ENDIF.
2784                                       IF gt_datum-opedatem NE date4_day.
2785                                           CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2786                                           sum_100[],sum_200[],sum_300[],
2787                                           sum_100_1[],sum_200_1[],sum_300_1[],
2788                                           g_mslb1[],g_mslb2[],g_mslb3[],
2789                                           g_msku1[],g_msku2[],g_msku3[],
2790                                           g_ebew1[],g_ebew2[],g_ebew3[].
2791                                       ENDIF.
2792                                 ENDLOOP.
2793                       ENDLOOP.
2794                 ELSE.
2795                        LOOP AT gt_datum1 WHERE opedatem > lv_datum.
2796                            lv_datum1 = gt_datum1-opedatem.
2797 *                            循环获取往期数据
2798                             LOOP AT gt_datum WHERE text2 NE 'NE'
2799                                   AND opedatem EQ lv_datum1.
2800 
2801                                 PERFORM text_script USING
2802                                         b_wersks1 b_wersks2
2803                                         b_wersks3 gt_datum-opedatem.
2804                                 " 下载明细
2805                                 IF p_return EQ '1'.
2806                                     PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2807                                 ENDIF.
2808                                 "mail 明细
2809                                 IF s_send EQ 'X'. "发送 mail
2810                                      PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2811                                 ENDIF.
2812                                 IF gt_datum-opedatem NE date4_day.
2813                                     CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2814                                     sum_100[],sum_200[],sum_300[],
2815                                     sum_100_1[],sum_200_1[],sum_300_1[],
2816                                     g_mslb1[],g_mslb2[],g_mslb3[],
2817                                     g_msku1[],g_msku2[],g_msku3[],
2818                                     g_ebew1[],g_ebew2[],g_ebew3[].
2819                                 ENDIF.
2820                             ENDLOOP.
2821                        ENDLOOP.
2822                 ENDIF.
2823             ELSEIF gt_datum-text1 EQ 'I' AND gt_datum-text2 EQ 'EQ' .
2824 
2825                 lv_datum = gt_datum-opedatem .
2826                 LOOP AT gt_datum1 WHERE opedatem = lv_datum.
2827                     lv_datum1 = gt_datum1-opedatem.
2828 *                     循环获取往期数据
2829                     LOOP AT gt_datum WHERE text2 NE 'NE'
2830                           AND opedatem EQ lv_datum1.
2831 
2832                           PERFORM text_script USING
2833                                b_wersks1 b_wersks2
2834                                b_wersks3 gt_datum-opedatem.
2835                           " 下载明细
2836                           IF p_return EQ '1'.
2837                                PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2838                           ENDIF.
2839                           "mail 明细
2840                           IF s_send EQ 'X'. "发送 mail
2841                                 PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2842                           ENDIF.
2843                           IF gt_datum-opedatem NE date4_day.
2844                                 CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2845                                 sum_100[],sum_200[],sum_300[],
2846                                 sum_100_1[],sum_200_1[],sum_300_1[],
2847                                 g_mslb1[],g_mslb2[],g_mslb3[],
2848                                 g_msku1[],g_msku2[],g_msku3[],
2849                                 g_ebew1[],g_ebew2[],g_ebew3[].
2850                           ENDIF.
2851                     ENDLOOP.
2852                 ENDLOOP.
2853             ELSEIF gt_datum-text1 EQ 'I' AND gt_datum-text2 EQ 'NE' .
2854                 lv_datum = gt_datum-opedatem .
2855                 LOOP AT gt_datum1 WHERE opedatem NE lv_datum.
2856                        lv_datum1 = gt_datum1-opedatem.
2857 *                        循环获取往期数据
2858                        LOOP AT gt_datum WHERE text2 NE 'NE'
2859                             AND opedatem EQ lv_datum1.
2860 
2861                             PERFORM text_script USING
2862                                   b_wersks1 b_wersks2
2863                                   b_wersks3 gt_datum-opedatem.
2864                             " 下载明细
2865                             IF p_return EQ '1'.
2866                                 PERFORM donw_mb52 USING gt_datum-opedatem. " 下载数据
2867                             ENDIF.
2868                             "mail 明细
2869                             IF s_send EQ 'X'. "发送 mail
2870                                 PERFORM mail_detail USING gt_datum-opedatem. " 明细发 mail
2871                             ENDIF.
2872                             IF gt_datum-opedatem NE date4_day.
2873                                 CLEAR:gt_mb52_1[],gt_mb52_2[],gt_mb52_3[],
2874                                 sum_100[],sum_200[],sum_300[],
2875                                 sum_100_1[],sum_200_1[],sum_300_1[],
2876                                 g_mslb1[],g_mslb2[],g_mslb3[],
2877                                 g_msku1[],g_msku2[],g_msku3[],
2878                                 g_ebew1[],g_ebew2[],g_ebew3[].
2879                             ENDIF.
2880                        ENDLOOP.
2881                 ENDLOOP.
2882            ENDIF.
2883       ENDLOOP.
2884 ENDFORM.
2885 
2886 *&---------------------------------------------------------------------*
2887 *& Form INT_WERKS
2888 *&---------------------------------------------------------------------*
2889 *& text
2890 *&---------------------------------------------------------------------*
2891 *& --> L_WERKS
2892 *&---------------------------------------------------------------------*
2893 FORM INT_WERKS USING in_sign in_option in_werks.
2894 
2895     gt_bukrs-text1 = p_werks-sign.
2896     gt_bukrs-text2 = p_werks-option.
2897     gt_bukrs-opewerks = in_werks.
2898     gt_bukrs-endwerks = in_werks.
2899     APPEND gt_bukrs.
2900     CLEAR: gt_bukrs.
2901 ENDFORM.
2902 *&---------------------------------------------------------------------*
2903 *& Form TEXT_SCRIPT
2904 *&---------------------------------------------------------------------*
2905 *& text 脚本
2906 *&---------------------------------------------------------------------*
2907 *& --> B_WERKS1
2908 *& --> B_WERKS2
2909 *& --> B_WERKS3
2910 *& --> GT_DATUM
2911 *&---------------------------------------------------------------------*
2912 FORM TEXT_SCRIPT USING b_wersks1 b_wersks2 b_wersks3 in_datum.
2913 *--->等于下限日期时跑全部明细资料 (新资料写入SAP)
2914 DATA:en_datum LIKE sy-datum.
2915 
2916 DATA: lv1_labst LIKE mardh-labst,
2917           lv2_labst LIKE mardh-labst,
2918           lv3_labst LIKE mardh-labst.
2919 
2920 DATA:gr_data1 TYPE REF TO data,
2921         gr_data2 TYPE REF TO data,
2922         gr_data3 TYPE REF TO data.
2923 
2924 IF in_datum EQ date4_day .
2925     b_wersks1 = '100'.
2926     b_wersks2 = '200'.
2927     b_wersks3 = '300'.
2928 ENDIF.
2929 
2930 CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
2931     EXPORTING
2932     day_in = in_datum "输入日期
2933     IMPORTING
2934     last_day_of_month = en_datum "返回日期:20140131
2935     EXCEPTIONS
2936     day_in_no_date = 1
2937     OTHERS = 2.
2938 
2939 *----->1000
2940     SELECT * FROM MARDH
2941         INNER JOIN mara ON mara~matnr EQ mardh~matnr
2942         INTO CORRESPONDING FIELDS OF table gt_mb52_1 "一般
2943         WHERE mardh~werks EQ b_wersks1
2944         AND mardh~lfgja EQ gt_datum-opedatem(4)
2945         AND mardh~lfmon EQ gt_datum-opedatem+4(2)
2946         AND ( mardh~labst > 0 OR mardh~umlme > 0
2947         OR mardh~insme > 0 OR mardh~einme > 0
2948         OR mardh~speme > 0 OR mardh~retme > 0
2949         OR mardh~vklab > 0 OR mardh~vkuml > 0 )
2950         AND mardh~matnr in s_matnr.
2951 
2952     SELECT mslbh~matnr mslbh~werks
2953           mslbh~sobkz mslbh~lifnr
2954           lblab as labst lbins as insme
2955           lbein as einme lbuml as bwesb
2956           mara~mtart mara~matkl
2957           mara~meins
2958           FROM mslbh
2959           INNER JOIN mara ON mara~matnr EQ mslbh~matnr
2960           INTO CORRESPONDING FIELDS OF table g_mslb1 " O
2961           WHERE werks EQ b_wersks1 AND
2962           lfgja EQ gt_datum-opedatem(4) AND
2963           lfmon EQ gt_datum-opedatem+4(2) AND
2964           ( lblab > 0 OR lbins > 0
2965           OR lbein > 0 OR lbuml > 0 )
2966           AND mslbh~matnr in s_matnr.
2967 
2968     SELECT mskuh~matnr mskuh~werks
2969           mskuh~sobkz mskuh~kunnr
2970           kulab as labst kuins as insme
2971           kuein as einme kuuml as bwesb
2972           mara~mtart mara~matkl
2973           mara~meins
2974           FROM mskuh
2975           INNER JOIN mara ON mara~matnr EQ mskuh~matnr
2976           INTO CORRESPONDING FIELDS OF table g_msku1 " W
2977           WHERE werks EQ b_wersks1 AND
2978           lfgja EQ gt_datum-opedatem(4) AND
2979           lfmon EQ gt_datum-opedatem+4(2) AND
2980           ( kulab > 0 OR kuins > 0
2981           OR kuein > 0 OR kuuml > 0 )
2982           AND mskuh~matnr in s_matnr.
2983 
2984     SELECT mskah~matnr mskah~werks
2985           mskah~sobkz mskah~vbeln
2986           mskah~posnr
2987           kalab as labst kains as insme
2988           kaein as einme kaspe as speme
2989           lgort as lgort
2990           mara~mtart mara~matkl
2991           mara~meins
2992           FROM mskah
2993           INNER JOIN mara ON mara~matnr EQ mskah~matnr
2994           INTO CORRESPONDING FIELDS OF table g_ebew1 " E
2995           WHERE werks EQ b_wersks1 AND
2996           lfgja EQ gt_datum-opedatem(4) AND
2997           lfmon EQ gt_datum-opedatem+4(2) AND
2998           ( kalab > 0 OR kains > 0 OR kaein > 0 )
2999           AND mskah~matnr in s_matnr.
3000 
3001 * -----> 2000
3002       SELECT * FROM MARDH
3003             INNER JOIN mara ON mara~matnr EQ mardh~matnr
3004             INTO CORRESPONDING FIELDS OF table gt_mb52_2 "一般
3005             WHERE mardh~werks EQ b_wersks2
3006             AND mardh~lfgja EQ gt_datum-opedatem(4)
3007             AND mardh~lfmon EQ gt_datum-opedatem+4(2)
3008             AND ( mardh~labst > 0 OR mardh~umlme > 0
3009             OR mardh~insme > 0 OR mardh~einme > 0
3010             OR mardh~speme > 0 OR mardh~retme > 0
3011             OR mardh~vklab > 0 OR mardh~vkuml > 0 )
3012             AND mardh~matnr in s_matnr.
3013 *             AND makt~spras = @sy-langu.
3014 
3015       SELECT mslbh~matnr mslbh~werks
3016           mslbh~sobkz mslbh~lifnr
3017           lblab as labst lbins as insme
3018           lbein as einme lbuml as bwesb
3019           mara~mtart mara~matkl
3020           mara~meins
3021           FROM mslbh
3022           INNER JOIN mara ON mara~matnr EQ mslbh~matnr
3023           INTO CORRESPONDING FIELDS OF table g_mslb2 " O
3024           WHERE werks EQ b_wersks2 AND
3025           lfgja EQ gt_datum-opedatem(4) AND
3026           lfmon EQ gt_datum-opedatem+4(2) AND
3027           ( lblab > 0 OR lbins > 0
3028           OR lbein > 0 OR lbuml > 0 )
3029           AND mslbh~matnr in s_matnr.
3030 
3031       SELECT mskuh~matnr mskuh~werks
3032          mskuh~sobkz mskuh~kunnr
3033          kulab as labst kuins as insme
3034          kuein as einme kuuml as bwesb
3035          mara~mtart mara~matkl
3036          mara~meins
3037          FROM mskuh
3038          INNER JOIN mara ON mara~matnr EQ mskuh~matnr
3039          INTO CORRESPONDING FIELDS OF table g_msku2 " W
3040          WHERE werks EQ b_wersks2 AND
3041          lfgja EQ gt_datum-opedatem(4) AND
3042          lfmon EQ gt_datum-opedatem+4(2) AND
3043          ( kulab > 0 OR kuins > 0
3044          OR kuein > 0 OR kuuml > 0 )
3045          AND mskuh~matnr in s_matnr.
3046 
3047       SELECT mskah~matnr mskah~werks
3048             mskah~sobkz mskah~vbeln
3049             mskah~posnr
3050             kalab as labst kains as insme
3051             kaein as einme kaspe as speme
3052             lgort as lgort
3053             mara~mtart mara~matkl
3054             mara~meins
3055             FROM mskah
3056             INNER JOIN mara ON mara~matnr EQ mskah~matnr
3057             INTO CORRESPONDING FIELDS OF table g_ebew2 " E
3058             WHERE werks EQ b_wersks2 AND
3059             lfgja EQ gt_datum-opedatem(4) AND
3060             lfmon EQ gt_datum-opedatem+4(2) AND
3061             ( kalab > 0 OR kains > 0 OR kaein > 0 )
3062             AND mskah~matnr in s_matnr.
3063 
3064 *       -----> 3000
3065       SELECT mardh~matnr mardh~werks
3066           mardh~lgort mardh~insme
3067           mardh~einme mardh~speme
3068           mardh~retme "mardh~vklab
3069           mardh~labst mara~mtart
3070           mara~matkl mara~zwhcode as s_zwhcode
3071           mara~meins
3072           FROM MARDH
3073           INNER JOIN mara ON mara~matnr EQ mardh~matnr
3074           INTO CORRESPONDING FIELDS OF table gt_mb52_3 "一般
3075           WHERE mardh~werks EQ b_wersks3
3076           AND mardh~lfgja EQ gt_datum-opedatem(4)
3077           AND mardh~lfmon EQ gt_datum-opedatem+4(2)
3078           AND ( mardh~labst > 0 OR mardh~umlme > 0
3079           OR mardh~insme > 0 OR mardh~einme > 0
3080           OR mardh~speme > 0 OR mardh~retme > 0
3081           OR mardh~vklab > 0 OR mardh~vkuml > 0 )
3082           AND mardh~matnr in s_matnr.
3083 *           AND makt~spras = sy-langu.
3084 
3085       SELECT mslbh~matnr mslbh~werks
3086            mslbh~sobkz mslbh~lifnr
3087            lblab as labst lbins as insme
3088            lbein as einme lbuml as bwesb
3089            mara~mtart mara~matkl
3090            mara~zwhcode as s_zwhcode
3091            mara~meins
3092            FROM mslbh
3093            INNER JOIN mara ON mara~matnr EQ mslbh~matnr
3094            INTO CORRESPONDING FIELDS OF table g_mslb3 " O
3095            WHERE mslbh~werks EQ b_wersks3 AND
3096            mslbh~lfgja EQ gt_datum-opedatem(4) AND
3097            mslbh~lfmon EQ gt_datum-opedatem+4(2) AND
3098            ( lblab > 0 OR lbins > 0
3099            OR lbein > 0 OR lbuml > 0 )
3100            AND mslbh~matnr in s_matnr.
3101 
3102       SELECT mskuh~matnr mskuh~werks
3103          mskuh~sobkz mskuh~kunnr
3104          kulab as labst kuins as insme
3105          kuein as einme kuuml as bwesb
3106          mara~mtart mara~matkl
3107          mara~zwhcode as s_zwhcode
3108          mara~meins
3109          FROM mskuh
3110          INNER JOIN mara ON mara~matnr EQ mskuh~matnr
3111          INTO CORRESPONDING FIELDS OF table g_msku3 " W
3112          WHERE werks EQ b_wersks3 AND
3113          lfgja EQ gt_datum-opedatem(4) AND
3114          lfmon EQ gt_datum-opedatem+4(2) AND
3115          ( kulab > 0 OR kuins > 0
3116          OR kuein > 0 OR kuuml > 0 )
3117          AND mskuh~matnr in s_matnr.
3118 
3119       SELECT mskah~matnr mskah~werks
3120             mskah~sobkz mskah~vbeln
3121             mskah~posnr
3122             kalab as labst kains as insme
3123             kaein as einme kaspe as speme
3124             lgort as lgort
3125             mara~mtart mara~matkl
3126             mara~zwhcode as s_zwhcode
3127             mara~meins
3128             FROM mskah
3129             INNER JOIN mara ON mara~matnr EQ mskah~matnr
3130             INTO CORRESPONDING FIELDS OF table g_ebew3 " E
3131             WHERE werks EQ b_wersks3 AND
3132             lfgja EQ gt_datum-opedatem(4) AND
3133             lfmon EQ gt_datum-opedatem+4(2) AND
3134             ( kalab > 0 OR kains > 0 OR kaein > 0 )
3135             AND mskah~matnr in s_matnr.
3136 
3137 
3138       PERFORM set_100 USING in_datum.
3139       PERFORM set_200 USING in_datum.
3140       PERFORM set_300 USING in_datum.
3141 ENDFORM.
3142 
3143 
3144 
3145 *&---------------------------------------------------------------------*
3146 *& Form HAVE_DATA
3147 *&---------------------------------------------------------------------*
3148 *& text 选择屏弹框
3149 *&---------------------------------------------------------------------*
3150 *& --> HAVE_DATA
3151 *&---------------------------------------------------------------------*
3152 FORM HAVE_DATA CHANGING in_return.
3153 DATA: G_RETURN TYPE C .
3154 
3155 CALL FUNCTION 'POPUP_TO_CONFIRM'
3156     EXPORTING
3157 *     TITLEBAR = '是需要这几个月资料明细'
3158 *     DIAGNOSE_OBJECT = ' '
3159     TEXT_QUESTION = '明细是否需要下载Web或本端档案'
3160 *     TEXT_BUTTON_1 = 'Ja'(001)
3161     ICON_BUTTON_1 = '下载'
3162 *     TEXT_BUTTON_2 = 'Nein'(002)
3163     ICON_BUTTON_2 = '不需要下载 '
3164     DEFAULT_BUTTON = '1'
3165     DISPLAY_CANCEL_BUTTON = 'X'
3166 *     USERDEFINED_F1_HELP = ' '
3167     START_COLUMN = 25
3168     START_ROW = 6
3169 *     POPUP_TYPE =
3170 *     IV_QUICKINFO_BUTTON_1 = ' '
3171 *     IV_QUICKINFO_BUTTON_2 = ' '
3172     IMPORTING
3173     ANSWER = G_RETURN
3174 *     TABLES
3175 *     PARAMETER =
3176     EXCEPTIONS
3177     TEXT_NOT_FOUND = 1
3178     OTHERS = 2 .
3179     IF G_RETURN EQ 'A'.
3180         stop.
3181     ENDIF.
3182     in_return = G_RETURN.
3183 ENDFORM.
3184 
3185 *&---------------------------------------------------------------------*
3186 *& Form SET_PERIOD1
3187 *&---------------------------------------------------------------------*
3188 *& text
3189 *&---------------------------------------------------------------------*
3190 *& --> p1 text
3191 *& <-- p2 text
3192 *&---------------------------------------------------------------------*
3193 FORM SET_PERIOD1 .
3194 DATA:l_tdate LIKE sy-datum,
3195 l_months TYPE i,
3196 lv_date2 TYPE i,
3197 l_seqno LIKE gt_period-seqno.
3198 
3199 *-->获取选择屏期间获取最后一天
3200 DATA: L_Start TYPE SY-DATUM.
3201 
3202     L_Start = P_Start+0(4) && P_Start+5(2) && '01'.
3203     L_FIYEAR = P_FIYEAR+0(4) && P_FIYEAR+5(2) && '01'.
3204 
3205     PERFORM set_date USING L_Start L_FIYEAR
3206     CHANGING lv_date2." 计算两端时间相差 个月
3207 
3208     CLEAR:l_seqno.
3209     lv_date2 = lv_date2 + 1.
3210     DO lv_date2 TIMES.
3211          add 1 TO l_seqno.
3212          PERFORM get_first_few_months
3213               USING L_FIYEAR l_months
3214               CHANGING l_tdate. " 获取前几个月的日期
3215          l_sdate = l_tdate(6) && '01'. " 第一天
3216 
3217          PERFORM get_lastdate_of_month
3218             USING l_sdate " 日期最后一天
3219             CHANGING l_tdate.
3220          MOVE:l_tdate TO gt_period2-datum,
3221                   l_seqno TO gt_period2-seqno,
3222                   l_sdate TO gt_period2-sdate,
3223                   l_tdate TO gt_period2-tdate.
3224          CONCATENATE l_tdate(4) '/' l_tdate+4(2) INTO gt_period2-ptext.
3225          CONCATENATE 'M' gt_period2-ptext
3226                   INTO gt_period2-ptext SEPARATED BY space.
3227          APPEND gt_period2. CLEAR: gt_period2.
3228          l_months = l_months + 1.
3229     ENDDO.
3230 
3231     gt_period[] = gt_period1[] = gt_period3[] = gt_period2[].
3232 ENDFORM.
3233 
3234 *&---------------------------------------------------------------------*
3235 *& Form MAIL_DETAIL
3236 *&---------------------------------------------------------------------*
3237 *& text 明细发 mail
3238 *&---------------------------------------------------------------------*
3239 *& --> p1 text
3240 *& <-- p2 text
3241 *&---------------------------------------------------------------------*
3242 FORM MAIL_DETAIL USING in_datum.
3243 DATA: l_title TYPE so_obj_des,
3244           l_file_name(50) TYPE c.
3245 
3246 PERFORM detail_data_1.
3247 PERFORM detail_data_2.
3248 PERFORM detail_data_3.
3249 *---> 信件主旨
3250 CONCATENATE p_title in_datum(6) '期明细' INTO l_title.
3251 l_file_name = l_title.
3252 
3253 PERFORM send_mail2 TABLES s_addr
3254       USING l_title l_file_name in_datum.
3255 
3256 
3257 ENDFORM.
3258 
3259 *&---------------------------------------------------------------------*
3260 *& Form DETAIL_DATA_1
3261 *&---------------------------------------------------------------------*
3262 *& text
3263 *&---------------------------------------------------------------------*
3264 *& --> p1 text
3265 *& <-- p2 text
3266 *&---------------------------------------------------------------------*
3267 FORM DETAIL_DATA_1 .
3268 CLEAR: g_datel_1.
3269 DATA: l_line TYPE string.
3270 DATA:lv_text1(50),
3271 lv_text2(50),
3272 lv_text3(50),
3273 lv_text4(50),
3274 lv_text5(50).
3275 
3276 *--> column header
3277 CONCATENATE '存储地点' '工厂' '物料类型' '物料群组' '料号'
3278 '物料说明' '存储位置说明' '储格' '未限制' '未限制值' '特别库存'
3279 '品质检验中' '限制使用库存' '值已限制' '已冻结' '冻结库存值' '退货'
3280 '冻结退货值' 'MRP控制员' '评估GR冻结库存' '已评估的收货冻结库存'
3281 '特殊库存号码' '单位' '币别' '销售库存' '评估库存'
3282 INTO l_line SEPARATED BY gc_tab.
3283 *--> 斷行
3284 CONCATENATE g_datel_1 l_line gc_crlf INTO g_datel_1.
3285     LOOP AT gt_mb52_1 WHERE
3286         ( labst > 0 OR insme > 0 OR retme > 0 OR speme > 0 OR einme > 0 ).
3287 
3288           lv_text1 = gt_mb52_1-lgort .
3289           lv_text2 = gt_mb52_1-werks .
3290           lv_text3 = gt_mb52_1-mtart .
3291           lv_text4 = gt_mb52_1-matkl .
3292           lv_text5 = gt_mb52_1-matnr .
3293 
3294           CONCATENATE lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3295           INTO l_line SEPARATED BY gc_tab.
3296 
3297           lv_text1 = gt_mb52_1-maktx .
3298           lv_text2 = gt_mb52_1-lgobe .
3299           lv_text3 = gt_mb52_1-lgpbe .
3300           lv_text4 = gt_mb52_1-labst .
3301           lv_text5 = gt_mb52_1-salk3 .
3302 
3303           CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3304           INTO l_line SEPARATED BY gc_tab.
3305 
3306           lv_text1 = gt_mb52_1-sobkz .
3307           lv_text2 = gt_mb52_1-insme .
3308           lv_text3 = gt_mb52_1-einme .
3309           lv_text4 = gt_mb52_1-salk3_1 .
3310           lv_text5 = gt_mb52_1-speme .
3311 
3312           CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3313           INTO l_line SEPARATED BY gc_tab.
3314 
3315           lv_text1 = gt_mb52_1-salk3_2.
3316           lv_text2 = gt_mb52_1-retme.
3317           lv_text3 = gt_mb52_1-salk3_3.
3318           lv_text4 = gt_mb52_1-dispo.
3319           lv_text5 = gt_mb52_1-salk3_4.
3320 
3321           CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3322           INTO l_line SEPARATED BY gc_tab.
3323 
3324           lv_text1 = gt_mb52_1-bwesb .
3325           lv_text2 = gt_mb52_1-ssnum .
3326           lv_text3 = gt_mb52_1-meins .
3327           lv_text4 = gt_mb52_1-waers .
3328           lv_text5 = gt_mb52_1-lbkum_e .
3329 
3330           CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3331           INTO l_line SEPARATED BY gc_tab.
3332 
3333           lv_text1 = gt_mb52_1-lbkum_m .
3334 *           lv_text2 = gt_mb52_1-price .
3335 *           lv_text3 = gt_mb52_1-stprs .
3336 
3337           CONCATENATE l_line lv_text1 "lv_text2 lv_text3
3338           INTO l_line SEPARATED BY gc_tab.
3339 *          --> 斷行
3340           CONCATENATE g_datel_1 l_line gc_crlf INTO g_datel_1.
3341     ENDLOOP.
3342 
3343 ENDFORM.
3344 
3345 *&---------------------------------------------------------------------*
3346 *& Form DETAIL_DATA_2
3347 *&---------------------------------------------------------------------*
3348 *& text
3349 *&---------------------------------------------------------------------*
3350 *& --> p1 text
3351 *& <-- p2 text
3352 *&---------------------------------------------------------------------*
3353 FORM DETAIL_DATA_2 .
3354 CLEAR: g_datel_2.
3355 DATA: l_line TYPE string.
3356 DATA:lv_text1(50),
3357 lv_text2(50),
3358 lv_text3(50),
3359 lv_text4(50),
3360 lv_text5(50),
3361 lv_text6(50).
3362 
3363 *--> column header
3364 CONCATENATE '存储地点II' '呆滞期' '工厂' '物料类型' '物料群组' '料号'
3365 '物料说明' '存储地点' '储格地点说明' '储格' '值未限制' '特别库存' '限制使用库存'
3366 '值已限制' '已冻结' '冻结库存值' '退货' '冻结退货值' '评估GR冻结库存'
3367 '已评估的收货冻结库存' '特殊库存号码' 'DF存储位置等级' '单位' '币别'
3368 '未限制' '品质检验中' 'MRP控制员' '未限制值 + 品质检验中' '单价' '金额'
3369 "'异动平均价格' '标准价格'
3370 INTO l_line SEPARATED BY gc_tab.
3371 *--> 斷行
3372 CONCATENATE g_datel_2 l_line gc_crlf INTO g_datel_2.
3373 
3374       LOOP AT gt_mb52_2 WHERE labst_insme > 0.
3375 
3376             lv_text1 = gt_mb52_2-lgort2.
3377             lv_text2 = gt_mb52_2-text.
3378             lv_text3 = gt_mb52_2-werks .
3379             lv_text4 = gt_mb52_2-mtart .
3380             lv_text5 = gt_mb52_2-matkl .
3381 
3382 
3383             CONCATENATE lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3384             INTO l_line SEPARATED BY gc_tab.
3385 
3386             lv_text1 = gt_mb52_2-matnr.
3387             lv_text2 = gt_mb52_2-maktx .
3388             lv_text3 = gt_mb52_2-lgort .
3389             lv_text4 = gt_mb52_2-lgobe .
3390             lv_text5 = gt_mb52_2-lgpbe .
3391 
3392             lv_text6 = gt_mb52_2-salk3 .
3393 
3394             CONCATENATE l_line lv_text1 lv_text2 lv_text3
3395             lv_text4 lv_text5 lv_text6
3396             INTO l_line SEPARATED BY gc_tab.
3397 
3398             lv_text1 = gt_mb52_2-sobkz .
3399             lv_text2 = gt_mb52_2-einme .
3400             lv_text3 = gt_mb52_2-salk3_1 .
3401             lv_text4 = gt_mb52_2-speme .
3402             lv_text5 = gt_mb52_2-salk3_2 .
3403 
3404             CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3405             INTO l_line SEPARATED BY gc_tab.
3406 
3407             lv_text1 = gt_mb52_2-retme .
3408             lv_text2 = gt_mb52_2-salk3_3 .
3409             lv_text3 = gt_mb52_2-salk3_4 .
3410             lv_text4 = gt_mb52_2-bwesb .
3411             lv_text5 = gt_mb52_2-ssnum .
3412 
3413             CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3414             INTO l_line SEPARATED BY gc_tab.
3415 
3416             lv_text1 = gt_mb52_2-lvorm .
3417             lv_text2 = gt_mb52_2-meins .
3418             lv_text3 = gt_mb52_2-waers .
3419             lv_text4 = gt_mb52_2-labst .
3420             lv_text5 = gt_mb52_2-insme .
3421 
3422             CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3423             INTO l_line SEPARATED BY gc_tab.
3424 
3425             lv_text1 = gt_mb52_2-dispo .
3426             lv_text2 = gt_mb52_2-labst_insme .
3427             lv_text3 = gt_mb52_2-price.
3428             lv_text4 = gt_mb52_2-hsl.
3429 *             lv_text5 = gt_mb52_2-price1.
3430 
3431 *             lv_text6 = gt_mb52_2-stprs.
3432 
3433             CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4
3434             "lv_text5 lv_text6
3435             INTO l_line SEPARATED BY gc_tab.
3436 *            --> 斷行
3437             CONCATENATE g_datel_2 l_line gc_crlf INTO g_datel_2.
3438       ENDLOOP.
3439 ENDFORM.
3440 
3441 *&---------------------------------------------------------------------*
3442 *& Form DETAIL_DATA_3
3443 *&---------------------------------------------------------------------*
3444 *& text
3445 *&---------------------------------------------------------------------*
3446 *& --> p1 text
3447 *& <-- p2 text
3448 *&---------------------------------------------------------------------*
3449 FORM DETAIL_DATA_3 .
3450 CLEAR: g_datel_3.
3451 DATA: l_line TYPE string.
3452 DATA:lv_text1(50),
3453 lv_text2(50),
3454 lv_text3(50),
3455 lv_text4(50),
3456 lv_text5(50),
3457 lv_text6(50).
3458 
3459 *--> column header
3460 CONCATENATE 'WH CODE & MBS库存' '工厂' '物料类型' '物料群组' '料号' 'MBS库存' 'WH CODE'
3461 '物料说明' '存储地点' '储格地点说明' '储格' '未限制' '值未限制' '特别库存' '品质检验中'
3462 '限制使用库存' '值已限制' '已冻结' '冻结库存值' '退货' '冻结退货值' 'MRP控制员' '评估GR冻结库存'
3463 '已评估的收货冻结库存' '特殊库存号码' '单位' '币别' "'异动平均价格' '标准价格'
3464 INTO l_line SEPARATED BY gc_tab.
3465 *--> 斷行
3466 CONCATENATE g_datel_3 l_line gc_crlf INTO g_datel_3.
3467 
3468   LOOP AT gt_mb52_3 WHERE
3469       ( labst > 0 OR insme > 0 OR retme > 0
3470       OR speme > 0 OR einme > 0 ).
3471 
3472         lv_text1 = gt_mb52_3-zwhcode.
3473         lv_text2 = gt_mb52_3-werks.
3474         lv_text3 = gt_mb52_3-mtart .
3475         lv_text4 = gt_mb52_3-matkl .
3476         lv_text5 = gt_mb52_3-matnr .
3477 
3478 
3479         CONCATENATE lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3480         INTO l_line SEPARATED BY gc_tab.
3481 
3482         lv_text1 = gt_mb52_3-mb_zwhcode.
3483         lv_text2 = gt_mb52_3-s_zwhcode.
3484         lv_text3 = gt_mb52_3-maktx .
3485         lv_text4 = gt_mb52_3-lgort .
3486         lv_text5 = gt_mb52_3-lgobe .
3487 
3488 
3489         CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3490         INTO l_line SEPARATED BY gc_tab.
3491 
3492         lv_text1 = gt_mb52_3-lgpbe .
3493         lv_text2 = gt_mb52_3-labst .
3494         lv_text3 = gt_mb52_3-salk3.
3495         lv_text4 = gt_mb52_3-sobkz .
3496         lv_text5 = gt_mb52_3-insme .
3497 
3498         CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3499         INTO l_line SEPARATED BY gc_tab.
3500 
3501         lv_text1 = gt_mb52_3-einme .
3502         lv_text2 = gt_mb52_3-salk3_1 .
3503         lv_text3 = gt_mb52_3-speme .
3504         lv_text4 = gt_mb52_3-salk3_2 .
3505         lv_text5 = gt_mb52_3-retme.
3506 
3507         CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3508         INTO l_line SEPARATED BY gc_tab.
3509 
3510         lv_text1 = gt_mb52_3-salk3_3 .
3511         lv_text2 = gt_mb52_3-dispo.
3512         lv_text3 = gt_mb52_3-salk3_4 .
3513         lv_text4 = gt_mb52_3-bwesb.
3514         lv_text5 = gt_mb52_3-ssnum .
3515 
3516         CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4 lv_text5
3517         INTO l_line SEPARATED BY gc_tab.
3518 
3519         lv_text1 = gt_mb52_3-meins .
3520         lv_text2 = gt_mb52_3-waers .
3521 *         lv_text3 = gt_mb52_3-price.
3522 *         lv_text4 = gt_mb52_3-stprs.
3523 
3524         CONCATENATE l_line lv_text1 lv_text2 lv_text3 lv_text4
3525         INTO l_line SEPARATED BY gc_tab.
3526 *        --> 斷行
3527         CONCATENATE g_datel_3 l_line gc_crlf INTO g_datel_3.
3528     ENDLOOP.
3529 ENDFORM.
3530 
3531 FORM send_mail2 TABLES lt_mail_addr STRUCTURE s_addr
3532                             USING in_subject in_filename in_datum.
3533 TYPES: BEGIN OF bin_file,
3534       name TYPE string,
3535       size TYPE i,
3536       data TYPE solix_tab,
3537 END OF bin_file.
3538 
3539 DATA:name1 TYPE string,
3540         name2 TYPE string,
3541         name3 TYPE string.
3542 
3543 DATA: wa_bindata TYPE bin_file,
3544           it_bindata TYPE standard TABLE OF bin_file.
3545 
3546 DATA: lv1_xstring TYPE xstring,
3547           lv2_xstring TYPE xstring,
3548           lv3_xstring TYPE xstring.
3549 
3550 DATA: l_send_request TYPE REF TO cl_bcs,
3551           l_zip TYPE REF TO cl_abap_zip,
3552           l_sender TYPE REF TO cl_sapuser_bcs,
3553           l_recipient TYPE REF TO cl_cam_address_bcs,
3554           l_body_text TYPE bcsy_text,
3555           l_obj_len TYPE so_obj_len,
3556           l_subject TYPE so_obj_des,
3557           l_exception TYPE REF TO cx_bcs,
3558           l_message TYPE string,
3559           l_content TYPE solix_tab,
3560           l_html_xstr TYPE xstring,
3561           l_zip_xstr TYPE xstring,
3562           l_len TYPE i,
3563           l_document TYPE REF TO cl_document_bcs.
3564 
3565 DATA: l_c_detal_1 TYPE solix_tab,
3566           l_c_detal_2 TYPE solix_tab,
3567           l_c_detal_3 TYPE solix_tab,
3568           l_detal_1 TYPE so_obj_len,
3569           l_detal_2 TYPE so_obj_len,
3570           l_detal_3 TYPE so_obj_len,
3571           l_filename_detal_1 TYPE sood-objdes,
3572           l_filename_detal_2 TYPE sood-objdes,
3573           l_filename_detal_3 TYPE sood-objdes.
3574 
3575 * --------------------------------------------------------------
3576 * convert the text string into UTF-16LE binary data including
3577 * byte-order-mark. Mircosoft Excel prefers these settings
3578 * all this is done by new class cl_bcs_convert (see note 1151257)
3579 
3580 CONCATENATE in_filename '_100_' sy-datum INTO l_filename_detal_1.
3581 
3582     TRY.
3583         cl_bcs_convert=>string_to_solix(
3584     EXPORTING
3585         iv_string = g_datel_1
3586         iv_codepage = '4103' "suitable for MS Excel, leave empty
3587         iv_add_bom = 'X' "for other doc types
3588     IMPORTING
3589        et_solix = l_c_detal_1
3590        ev_size = l_detal_1 ).
3591     CATCH cx_bcs.
3592          MESSAGE e445(so).
3593     ENDTRY.
3594 
3595 CONCATENATE in_filename '_200_' sy-datum INTO l_filename_detal_2.
3596 
3597       TRY.
3598           cl_bcs_convert=>string_to_solix(
3599       EXPORTING
3600           iv_string = g_datel_2
3601           iv_codepage = '4103' "suitable for MS Excel, leave empty
3602           iv_add_bom = 'X' "for other doc types
3603       IMPORTING
3604           et_solix = l_c_detal_2
3605           ev_size = l_detal_2 ).
3606       CATCH cx_bcs.
3607           MESSAGE e445(so).
3608       ENDTRY.
3609 
3610 CONCATENATE in_filename '_300_' sy-datum INTO l_filename_detal_3.
3611 
3612     TRY.
3613           cl_bcs_convert=>string_to_solix(
3614     EXPORTING
3615         iv_string = g_datel_3
3616         iv_codepage = '4103' "suitable for MS Excel, leave empty
3617         iv_add_bom = 'X' "for other doc types
3618     IMPORTING
3619          et_solix = l_c_detal_3
3620          ev_size = l_detal_3 ).
3621     CATCH cx_bcs.
3622         MESSAGE e445(so).
3623     ENDTRY.
3624 
3625     wa_bindata-data = l_c_detal_1.
3626     wa_bindata-size = l_detal_1.
3627 *     wa_bindata-name = 'aa.xls'.
3628     APPEND wa_bindata TO it_bindata.
3629 
3630 CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
3631     EXPORTING
3632     input_length = wa_bindata-size
3633     IMPORTING
3634     buffer = lv1_xstring
3635     TABLES
3636     binary_tab = wa_bindata-data.
3637 
3638    wa_bindata-data = l_c_detal_2.
3639    wa_bindata-size = l_detal_2.
3640 *    wa_bindata-name = 'aa.xls'.
3641    APPEND wa_bindata TO it_bindata.
3642 
3643 CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
3644     EXPORTING
3645     input_length = wa_bindata-size
3646     IMPORTING
3647     buffer = lv2_xstring
3648     TABLES
3649     binary_tab = wa_bindata-data.
3650 
3651     wa_bindata-data = l_c_detal_3.
3652     wa_bindata-size = l_detal_3.
3653 *     wa_bindata-name = 'aa.xls'.
3654     APPEND wa_bindata TO it_bindata.
3655 
3656 CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
3657     EXPORTING
3658     input_length = wa_bindata-size
3659     IMPORTING
3660     buffer = lv3_xstring
3661     TABLES
3662     binary_tab = wa_bindata-data.
3663 
3664       TRY.
3665             l_send_request = cl_bcs=>create_persistent( ).
3666             l_subject = in_subject.
3667             APPEND:
3668             '<HTML><BODY>' TO l_body_text,
3669             'Hello, everyone!,' TO l_body_text,
3670             '<p>This mail system is automatically issued,</br> ' TO l_body_text,
3671             '<B> jingyinghuiyi</B>' TO l_body_text,
3672             'detailed information for reference,</br>' TO l_body_text,
3673             '&nbsp;&nbsp;disturb you, please understand.' TO l_body_text,
3674             '<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thank you!.' TO l_body_text,
3675             '</BODY><HTML>' TO l_body_text.
3676             l_document = cl_document_bcs=>create_document(
3677             i_type = 'HTM'
3678             i_text = l_body_text
3679             i_subject = l_subject
3680             ).
3681 
3682             CREATE OBJECT l_zip.
3683 
3684             CONCATENATE in_datum(6) '_jingyi_100_Detail.xls' INTO name1.
3685             CONCATENATE in_datum(6) '_jingyi_200_Detail.xls' INTO name2.
3686             CONCATENATE in_datum(6) '_jingyi_300_Detail.xls' INTO name3.
3687 
3688 
3689             CALL METHOD l_zip->add
3690                 EXPORTING
3691                 name = name1
3692                 content = lv1_xstring."l_html_xstr.
3693 
3694             CALL METHOD l_zip->add
3695                EXPORTING
3696                name = name2
3697                content = lv2_xstring.
3698 
3699             CALL METHOD l_zip->add
3700                 EXPORTING
3701                 name = name3
3702                 content = lv3_xstring.
3703 
3704             CALL METHOD l_zip->save
3705                 RECEIVING
3706                 zip = l_zip_xstr.
3707 
3708             CALL METHOD cl_bcs_convert=>xstring_to_solix
3709               EXPORTING
3710               iv_xstring = l_zip_xstr "lv_xstring
3711               RECEIVING
3712               et_solix = l_content.
3713 
3714             l_obj_len = XSTRLEN( l_zip_xstr ) ."lv_xstring ).
3715 
3716             CALL METHOD l_document->add_attachment
3717                  EXPORTING
3718                  i_attachment_size = l_obj_len
3719                  i_attachment_type = 'ZIP'
3720                  i_attachment_subject = l_subject
3721                  i_att_content_hex = l_content.
3722                  l_send_request->set_document( l_document ).
3723                  l_sender = cl_sapuser_bcs=>create( sy-uname ).
3724                  LOOP AT s_addr.
3725                  l_recipient = cl_cam_address_bcs=>create_internet_address( s_addr-low ).
3726                  CALL METHOD l_send_request->add_recipient
3727                  EXPORTING
3728                  i_recipient = l_recipient.
3729                  ENDLOOP.
3730                  CALL METHOD l_send_request->set_send_immediately( 'X' ).
3731                  CALL METHOD l_send_request->send(
3732                  EXPORTING
3733                  i_with_error_screen = 'X'
3734                  ).
3735                  COMMIT WORK.
3736       CATCH cx_bcs INTO l_exception.
3737              l_message = l_exception->get_text( ).
3738              MESSAGE l_message TYPE 'E'.
3739       ENDTRY.
3740 ENDFORM.

 

 

posted on 2019-09-17 11:31  淡淡-祥  阅读(2424)  评论(0编辑  收藏  举报