zsdr0006
来源:互联网 发布:打击电信网络诈骗 编辑:程序博客网 时间:2024/06/02 01:12
INCLUDE zsdi_0006_top."参数定义
INITIALIZATION.
PERFORM frm_init. "初始化
START-OF-SELECTION.
* PERFORM frm_auth_check.
PERFORM frm_get_data. "获取数据
END-OF-SELECTION.
CALL SCREEN 9000.
INCLUDE zsdi_0006_pbo.
INCLUDE zsdi_0006_pai.
INCLUDE zsdi_0006_forms.
***************************************
*&---------------------------------------------------------------------*
*& 包括 ZSDI_0006_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS:vrm,zzsd1.
INCLUDE <icon>.
TABLES:vbak,vbap.
TYPES:BEGIN OF ty_head,
sel,"选择框
status(200),"状态
zkyed TYPE zzs_sd_003-zkyed,"可用额度
zcqts TYPE zzs_sd_004-zcqts,"超期天数
zhklce TYPE zzs_sd_005-zhklce,"款率差额
vbeln TYPE vbak-vbeln,"销售凭证
lfstk TYPE vbuk-lfstk,"交货状态
auart TYPE vbak-auart,"销售凭证类型
bezei TYPE tvakt-bezei,"凭证类型描述
kunnr TYPE vbak-kunnr,"售达方
kunnr_txt TYPE kna1-name1,"售达方名称
kvgr1 TYPE vbak-kvgr1,"客户分类
kvgr1_txt TYPE tvv1t-bezei,"客户组描述
kunwe TYPE vbak-kunnr,"送达方
kunwe_txt TYPE kna1-name1,"送达方名称
kunn2 TYPE vbak-kunnr,"业务员
kunn2_txt TYPE vbak-kunnr,"业务员
lifnr TYPE lfa1-lifnr,"货运代理
name1 TYPE lfa1-name1,"货运代理描述
lzone TYPE kna1-lzone,"运送区域
lzone_txt TYPE tzont-vtext,"运送区域描述
vkorg TYPE vbak-vkorg,"销售组织
vtweg TYPE vbak-vtweg,"分销渠道
vtext TYPE tvkot-vtext,"销售组织描述
vkgrp TYPE vbak-vkgrp,"销售小组
vkgrp_txt TYPE tvgrt-bezei,"销售小组描述
erdat TYPE vbak-erdat,"创建日期
audat TYPE vbak-audat,"单据日期
vdatu TYPE vbak-vdatu,"请求交货日期
bstnk TYPE vbak-bstnk,"客户采购订单编号
gsber TYPE vbak-gsber,"业务范围
gsber_txt TYPE tgsbt-gtext,"业务范围描述
spart TYPE vbak-spart,"产品组
spart_txt TYPE tspat-vtext,"产品组描述
bukrs_vf TYPE vbak-bukrs_vf,"公司代码
augru TYPE vbak-augru,"订单原因
augru_txt TYPE tvaut-bezei,"订单原因文本
sgtxt TYPE sgtxt,"项目文本
lprio(5),"优先级
cellstyles TYPE lvc_t_styl, "样式
END OF ty_head.
TYPES:BEGIN OF ty_item,
sel,"选择框
zypno(12),"预排号
vbeln_k TYPE likp-vbeln,"交货单
vbeln TYPE vbak-vbeln,"销售凭证
posnr TYPE vbap-posnr,"销售凭证项目
auart TYPE vbak-auart,"销售凭证类型
kunnr TYPE vbak-kunnr,"售达方
kunwe TYPE vbak-kunnr,"送达方
lfsta TYPE vbup-lfsta,"行交货状态
matnr TYPE vbap-matnr,"物料号
werks TYPE vbap-werks,"工厂
werks_txt TYPE t001w-name1,"工厂
lgort TYPE vbap-lgort,"库存地点
lgobe TYPE t001l-lgobe,"库存地点
labst TYPE mard-labst,"非限制使用的估价的库存
maktx TYPE makt-maktx,"物料描述
mvgr1 TYPE mvke-mvgr1, "物料组4 机型定义
mvgr4 TYPE vbap-mvgr4, "物料组4 机型定义
mvgr4_txt TYPE tvm4t-bezei, "物料组4描述
kwmeng TYPE vbap-kwmeng,"数量
vrkme TYPE vbap-vrkme,"单位
menge TYPE vbap-kwmeng,"未清数量
cur_menge TYPE vbap-kwmeng,"本次交货数量
left_menge TYPE vbap-kwmeng,"剩余交货数量
volum TYPE p DECIMALS 6,"vbap-volum,"体积
cur_volum TYPE p DECIMALS 6,"本次交货体积
voleh TYPE vbap-voleh,"体积单位
lifnr TYPE lfa1-lifnr,"货运代理
name1 TYPE lfa1-name1,"名称
lzone TYPE kna1-lzone,"运送区域
lzone_txt TYPE tzont-vtext,"描述
gsber TYPE vbap-gsber,"业务范围
gsber_txt TYPE tgsbt-gtext,"业务范围描述
bukrs_vf TYPE vbak-bukrs_vf,"公司代码
spart_head TYPE vbak-spart,"产品组
spart TYPE vbap-spart,"产品组
spart_txt TYPE tspat-vtext,"产品组描述
vstel TYPE vbap-vstel,"装运点
charg TYPE lips-charg,"交货批次
netpr TYPE vbap-netpr,"产品单价
sum_netpr TYPE vbap-netpr,"交货金额
xchpf TYPE mara-xchpf,"批次管理
sgtxt TYPE sgtxt,"项目文本
kunnr_txt TYPE kna1-name1,"售达方
kunn2 TYPE vbak-kunnr,"业务员
kunn2_txt TYPE vbak-kunnr,"业务员
werks_change,
icon(200),"库存查看
status(200),"状态
message(220),"日志
cellstyles TYPE lvc_t_styl, "样式
rowcolor(4),
END OF ty_item.
TYPES:BEGIN OF ty_mard,
werks TYPE mard-werks,
lgort TYPE mard-lgort,
lgobe TYPE t001l-lgobe,
matnr TYPE mard-matnr,
labst TYPE mard-labst,
lfimg TYPE lips-lfimg,
zkykc TYPE mard-labst,
END OF ty_mard.
TYPES:BEGIN OF ty_mchb,
werks TYPE mchb-werks,
lgort TYPE mchb-lgort,
lgobe TYPE t001l-lgobe,
matnr TYPE mchb-matnr,
charg TYPE mchb-charg,
clabs TYPE mchb-clabs,
END OF ty_mchb.
*ALV变量定义
DATA:
in_wqsl TYPE vbap-kwmeng,"未清数量
in_jhsl TYPE vbap-kwmeng,"交货数量
in_jhtj TYPE p DECIMALS 6,"vbap-volum,"交货体积
ok_code_9000 LIKE sy-ucomm,
save_ok LIKE sy-ucomm,
gs_variant_head TYPE disvariant,
gs_variant_item TYPE disvariant,
gt_alv_head TYPE TABLE OF ty_head WITH HEADER LINE, "ALV头表
gt_alv_item TYPE TABLE OF ty_item WITH HEADER LINE, "ALV行表
gt_alv_item_store TYPE TABLE OF ty_item WITH HEADER LINE, "ALV行表
gt_sort TYPE lvc_t_sort, "ALV排序
gt_fieldcat_head TYPE lvc_t_fcat, "ALV字段目录
gt_fieldcat_item TYPE lvc_t_fcat, "ALV字段目录
gt_fieldcat TYPE lvc_t_fcat, "ALV字段目录
gs_exclude TYPE ui_functions, "ALV排除按钮
gs_layout TYPE lvc_s_layo, "ALV样式
gcl_container_head TYPE REF TO cl_gui_docking_container,"容器类
gcl_container_item TYPE REF TO cl_gui_docking_container,"容器类
gcl_alv_head TYPE REF TO cl_gui_alv_grid, "ALV类
gcl_alv_item TYPE REF TO cl_gui_alv_grid. "ALV类
*----------------------------------------------------------------------*
* CLASS GCL_EVENT_HANDLER_HEAD DEFINITION
*----------------------------------------------------------------------*
* 处理ALV事件类声明
*----------------------------------------------------------------------*
CLASS gcl_event_handler_head DEFINITION.
PUBLIC SECTION.
METHODS:
* 工具栏自定义按钮
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
* 监控按钮
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
* 双击
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no,
* 数据改变
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
ENDCLASS. "GCL_EVENT_HANDLER_HEAD DEFINITION
*----------------------------------------------------------------------*
* CLASS GCL_EVENT_HANDLER_ITEM DEFINITION
*----------------------------------------------------------------------*
* 处理ALV事件类声明
*----------------------------------------------------------------------*
CLASS gcl_event_handler_item DEFINITION.
PUBLIC SECTION.
METHODS:
* 单击事件
handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no,
* 工具栏自定义按钮
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
* 监控按钮
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
* ONF4
handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display,
* 双击
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no,
* 数据改变
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm,
* 数据改变后
handle_data_changed_finished FOR EVENT data_changed_finished OF
cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
ENDCLASS. "GCL_EVENT_HANDLER_ITEM DEFINITION
*----------------------------------------------------------------------*
* CLASS GCL_EVENT_HANDLER_HEAD IMPLEMENTATION
*----------------------------------------------------------------------*
* 处理ALV事件类实现
*----------------------------------------------------------------------*
CLASS gcl_event_handler_head IMPLEMENTATION.
* handle toolbar
METHOD handle_toolbar.
PERFORM handle_toolbar USING e_object e_interactive.
ENDMETHOD. "handle_toolbar
* handler user command
METHOD handle_user_command.
PERFORM handle_user_command USING e_ucomm.
ENDMETHOD. "handle_user_command
* handler double click
METHOD handle_double_click.
PERFORM hande_double_click USING e_row e_column es_row_no.
ENDMETHOD. "handle_double_click
* handler data changed
METHOD handle_data_changed.
PERFORM handle_data_changed USING er_data_changed e_onf4
e_onf4_before e_onf4_after e_ucomm.
ENDMETHOD. "handle_data_changed
ENDCLASS. "GCL_EVENT_HANDLER_HEAD IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS GCL_EVENT_HANDLER_ITEM IMPLEMENTATION
*----------------------------------------------------------------------*
* 处理ALV事件类实现
*----------------------------------------------------------------------*
CLASS gcl_event_handler_item IMPLEMENTATION.
* handle hot spot click
METHOD handle_hotspot_click.
PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no.
ENDMETHOD. "HANDLE_HOTSPOT_CLICK
* handle toolbar
METHOD handle_toolbar.
PERFORM handle_toolbar_item USING e_object e_interactive.
ENDMETHOD. "handle_toolbar
* handler user command
METHOD handle_user_command.
PERFORM handle_user_command_item USING e_ucomm.
ENDMETHOD. "handle_user_command
* handler onf4
METHOD handle_onf4.
PERFORM hande_onf4_item USING e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display.
er_event_data->m_event_handled = 'X'.
ENDMETHOD. "handle_double_click
* handler double click
METHOD handle_double_click.
PERFORM hande_double_click_item USING e_row e_column es_row_no.
ENDMETHOD. "handle_double_click
* handler data changed
METHOD handle_data_changed.
PERFORM handle_data_changed_item USING er_data_changed e_onf4
e_onf4_before e_onf4_after e_ucomm.
ENDMETHOD. "handle_data_changed
* handler data changed finished
METHOD handle_data_changed_finished.
PERFORM handle_data_changed_finished USING e_modified et_good_cells.
ENDMETHOD. "handle_data_changed_finished
ENDCLASS. "GCL_EVENT_HANDLER_ITEM IMPLEMENTATION
RANGES:r_auart FOR vbak-auart.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_vkorg FOR vbak-vkorg OBLIGATORY,"销售组织
s_vkbur FOR vbak-vkbur,"销售部门
s_vkgrp FOR vbak-vkgrp ,"销售组
s_kunnr FOR vbak-kunnr,"售达方
s_kvgr1 FOR vbak-kvgr1 NO-DISPLAY,"客户分类
s_kunwe FOR vbak-kunnr,"送达方
s_auart FOR vbak-auart,"销售订单类型
s_vbeln FOR vbak-vbeln,"销售订单
s_erdat FOR vbak-erdat,"销售订单创建日期
s_vdatu FOR vbak-vdatu,"请求交货日期
s_kunn2 FOR vbak-kunnr,"业务员
s_matnr FOR vbap-matnr."业务员
PARAMETER:
p_filter AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.
*************************************************************
*&---------------------------------------------------------------------*
*& 包括 ZSDI_0006_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* 设置状态和标题
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STAT_9000'.
SET TITLEBAR 'TIT_9000'.
ENDMODULE. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module DISPLAY_ALV_9010 OUTPUT
*&---------------------------------------------------------------------*
* 显示alv
*----------------------------------------------------------------------*
MODULE display_alv_9000 OUTPUT.
IF gcl_container_head IS INITIAL.
PERFORM frm_create_container USING '50' cl_gui_docking_container=>dock_at_top CHANGING gcl_container_head gcl_alv_head.
PERFORM frm_exclude.
PERFORM frm_variant USING '1' CHANGING gs_variant_head.
PERFORM frm_pre_layout USING '销售订单头' space CHANGING gs_layout.
PERFORM frm_pre_fieldcat_head.
PERFORM frm_upload_event_head CHANGING gcl_alv_head.
PERFORM frm_set_tab_display_head.
ELSE.
PERFORM frm_refresh_alv CHANGING gcl_alv_head.
ENDIF.
IF gcl_container_item IS INITIAL.
PERFORM frm_create_container USING '50' cl_gui_docking_container=>dock_at_bottom CHANGING gcl_container_item gcl_alv_item.
PERFORM frm_exclude.
PERFORM frm_variant USING '2' CHANGING gs_variant_item.
PERFORM frm_pre_layout USING '行明细' space CHANGING gs_layout.
PERFORM frm_pre_fieldcat TABLES gt_fieldcat_item.
PERFORM frm_upload_event_item CHANGING gcl_alv_item.
PERFORM frm_set_tab_display_item.
ELSE.
PERFORM frm_refresh_alv CHANGING gcl_alv_item.
ENDIF.
ENDMODULE. " DISPLAY_ALV_9010 OUTPUT
*************************************************************************
*&---------------------------------------------------------------------*
*& 包括 ZSDI_0006_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* 监听
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
save_ok = ok_code_9000.
* PERFORM frm_check_changed_data USING gcl_alv_item.
CASE save_ok.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Module EXIT_9000 INPUT
*&---------------------------------------------------------------------*
* 退出
*----------------------------------------------------------------------*
MODULE exit_9000 INPUT.
LEAVE PROGRAM.
ENDMODULE. " EXIT_9000 INPUT
***************************************************************
*&---------------------------------------------------------------------*
*& 包括 ZSDI_0006_FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_INIT
*&---------------------------------------------------------------------*
* 初始化
*----------------------------------------------------------------------*
FORM frm_init .
* 销售组织
s_vkorg-sign = 'I'.
s_vkorg-option = 'EQ'.
s_vkorg-low = '1311'.
APPEND s_vkorg.
* 销售订单类型
s_auart-sign = 'I'.
s_auart-option = 'EQ'.
s_auart-low = 'ZSOR'.
s_auart-high = 'ZSOR'.
APPEND s_auart.
ENDFORM. " FRM_INIT
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK 权限检查
*&---------------------------------------------------------------------*
FORM frm_auth_check.
DATA lt_tvko LIKE TABLE OF tvko WITH HEADER LINE.
SELECT vkorg
INTO CORRESPONDING FIELDS OF TABLE lt_tvko
FROM tvko
WHERE vkorg IN s_vkorg.
LOOP AT lt_tvko.
AUTHORITY-CHECK OBJECT 'ZZ_SD005'
ID 'VKORG' FIELD lt_tvko-vkorg.
IF sy-subrc <> 0.
MESSAGE e007(zcomm) WITH lt_tvko-vkorg.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* 获取数据
*----------------------------------------------------------------------*
FORM frm_get_data.
CLEAR:
gt_alv_head,gt_alv_head[],
gt_alv_item,gt_alv_item[],
gt_alv_item_store,gt_alv_item_store[].
RANGES r_kunnr FOR vbak-kunnr.
DATA:
l_index LIKE sy-tabix,
lt_sd_01 TYPE TABLE OF zzs_sd_002 WITH HEADER LINE,
lt_sd_02 TYPE TABLE OF zzs_sd_003 WITH HEADER LINE,
lt_sd_03 TYPE TABLE OF zzs_sd_004 WITH HEADER LINE,
lt_sd_04 TYPE TABLE OF zzs_sd_005 WITH HEADER LINE,
lt_mard TYPE TABLE OF mard WITH HEADER LINE,
lt_lips TYPE TABLE OF lips WITH HEADER LINE,
lt_tvaut TYPE TABLE OF tvaut WITH HEADER LINE,
lt_tvv1t TYPE TABLE OF tvv1t WITH HEADER LINE,
lt_kna1 TYPE TABLE OF kna1 WITH HEADER LINE,
lt_tzont TYPE TABLE OF tzont WITH HEADER LINE,
lt_knvp TYPE TABLE OF knvp WITH HEADER LINE,
lt_knvv TYPE TABLE OF knvv WITH HEADER LINE,
lt_lfa1 TYPE TABLE OF lfa1 WITH HEADER LINE,
lt_vbfa TYPE TABLE OF vbfa WITH HEADER LINE,
lt_t001w TYPE TABLE OF t001w WITH HEADER LINE,
lt_t001l TYPE TABLE OF t001l WITH HEADER LINE,
lt_tvkot TYPE TABLE OF tvkot WITH HEADER LINE,
lt_tvgrt TYPE TABLE OF tvgrt WITH HEADER LINE,
lt_tgsbt TYPE TABLE OF tgsbt WITH HEADER LINE,
lt_tspat TYPE TABLE OF tspat WITH HEADER LINE,
* lt_mard TYPE TABLE OF mard WITH HEADER LINE,
lt_makt TYPE TABLE OF makt WITH HEADER LINE,
lt_mara TYPE TABLE OF mara WITH HEADER LINE,
lt_mvke TYPE TABLE OF mvke WITH HEADER LINE.
* 取抬头
SELECT t01~vbeln "销售凭证
t02~lfstk "交货状态
t01~auart "销售凭证类型
t04~bezei "销售凭证类型描述
t01~kunnr "售达方
t01~kvgr1 "客户分类
t03~kunnr AS kunwe "送达方
t01~vkorg "销售组织
t01~vtweg "分销渠道
t01~vkgrp "产品组
t01~erdat "创建日期
t01~audat "单据日期
t01~vdatu "请求交货日期
t01~bstnk "客户采购订单编号
t01~gsber "业务范围
t01~spart "产品组
t01~bukrs_vf "公司代码
t01~augru "订单原因
FROM vbak AS t01
INNER JOIN vbuk AS t02 ON t01~vbeln = t02~vbeln
INNER JOIN vbpa AS t03 ON t01~vbeln = t03~vbeln AND t03~posnr = '' AND t03~parvw = 'WE'
INNER JOIN tvakt AS t04 ON t01~auart = t04~auart AND t04~spras = '1'
* INNER JOIN jest AS t05 ON t01~objnr = t05~objnr
INTO CORRESPONDING FIELDS OF TABLE gt_alv_head
WHERE t01~vbeln IN s_vbeln "销售订单
AND t01~auart IN s_auart "销售订单类型
AND t01~vkorg IN s_vkorg "销售组织
AND t01~vkbur IN s_vkbur "销售部门
AND t01~vkgrp IN s_vkgrp "销售组
AND t01~kunnr IN s_kunnr "售达方
AND t03~kunnr IN s_kunwe "送达方
AND t01~kvgr1 IN s_kvgr1 "客户分类
* AND t01~erdat IN s_erdat "销售订单创建日期
AND t01~audat IN s_erdat "单据日期
AND t01~vdatu IN s_vdatu"请求交货日期
* AND t01~auart IN ('ZBOR','ZBCE','ZBCR','ZBFR')
AND t01~auart NOT IN ('ZBDE','ZBDR','ZBRE','ZBYR')
AND t02~lfstk <> 'C'"交货状态不为C
AND t02~gbstk <> 'C'
* AND t05~stat = 'E0002'
* AND t05~inact = ''
.
LOOP AT gt_alv_head.
r_kunnr-sign = 'I'.
r_kunnr-option = 'EQ'.
r_kunnr-low = gt_alv_head-kunnr.
APPEND r_kunnr.
ENDLOOP.
* 取客户信用信息
CALL FUNCTION 'ZSDF_016'
* EXPORTING
* I_DATE = SY-DATUM
* I_C1 = 'X'
* I_C2 = 'X'
* i_C3 = 'X'
TABLES
* T_BUKRS =
t_kunnr = r_kunnr
t_vkorg = s_vkorg
* T_VTWEG =
* T_SPART =
t_data1 = lt_sd_01
t_data2 = lt_sd_02
t_data3 = lt_sd_03
t_data4 = lt_sd_04.
*Insert By Ryan Liu In 28.06.2012 16:59:37.
DATA:gt_hkl LIKE TABLE OF zzt_sd_003a WITH HEADER LINE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_hkl FROM zzt_sd_003a WHERE vkorg IN s_vkorg.
SORT gt_hkl BY vkorg.
LOOP AT lt_sd_01.
READ TABLE gt_hkl WITH KEY vkorg = lt_sd_01-vkorg BINARY SEARCH.
IF sy-subrc = 0.
IF gt_hkl-zhkl = 'X'.
* 如果为空设置灰色灯 ICON_LED_INACTIVE
IF lt_sd_01-status_2 IS INITIAL.
lt_sd_01-status_2 = icon_led_inactive.
ENDIF.
IF lt_sd_01-status_3 IS INITIAL.
lt_sd_01-status_3 = icon_led_inactive.
ENDIF.
IF lt_sd_01-status_4 IS INITIAL.
lt_sd_01-status_4 = icon_led_inactive.
ENDIF.
* 为启用回款率的销售组织重置总状态灯
* 设置总状态灯
CLEAR lt_sd_01-status.
IF lt_sd_01-status_2 <> icon_led_green.
lt_sd_01-status = icon_led_red.
MODIFY lt_sd_01.
CONTINUE.
ENDIF.
IF lt_sd_01-status_3 <> icon_led_green.
lt_sd_01-status = icon_led_red.
MODIFY lt_sd_01.
CONTINUE.
ENDIF.
IF lt_sd_01-status_4 <> icon_led_green.
lt_sd_01-status = icon_led_red.
MODIFY lt_sd_01.
CONTINUE.
ENDIF.
lt_sd_01-status = icon_led_green.
MODIFY lt_sd_01.
ENDIF.
ENDIF.
ENDLOOP.
*End Of Insert.
IF gt_alv_head[] IS NOT INITIAL.
* 取行项目
SELECT *
FROM vbap AS t01
INNER JOIN vbup AS t02 ON t01~vbeln = t02~vbeln AND t01~posnr = t02~posnr
INNER JOIN mara AS t03 ON t01~matnr = t03~matnr
INTO CORRESPONDING FIELDS OF TABLE gt_alv_item_store
FOR ALL ENTRIES IN gt_alv_head
WHERE t01~vbeln = gt_alv_head-vbeln
AND t02~lfsta <> 'C'"交货状态不为C
AND t01~abgru = ''
AND t01~matnr IN s_matnr.
* 删除行不存在的头数据
LOOP AT gt_alv_head.
l_index = sy-tabix.
READ TABLE gt_alv_item_store WITH KEY vbeln = gt_alv_head-vbeln.
IF sy-subrc <> 0.
DELETE gt_alv_head INDEX l_index.
ENDIF.
ENDLOOP.
* 凭证流取对应交货单
IF gt_alv_item_store[] IS NOT INITIAL.
SELECT *
FROM vbfa
INTO TABLE lt_vbfa
FOR ALL ENTRIES IN gt_alv_item_store
WHERE vbelv = gt_alv_item_store-vbeln"先前的销售和分销凭证
AND posnv = gt_alv_item_store-posnr"凭证的先前项目
AND vbtyp_n = 'J'."后继凭证的凭证类别
ENDIF.
* 订单原因文本
SELECT *
FROM tvaut
INTO TABLE lt_tvaut
FOR ALL ENTRIES IN gt_alv_head
WHERE spras = '1'
AND augru = gt_alv_head-augru.
* 客户组
SELECT *
FROM tvv1t
INTO TABLE lt_tvv1t
FOR ALL ENTRIES IN gt_alv_head
WHERE kvgr1 = gt_alv_head-kvgr1
AND spras = sy-langu.
* 查询供货运代理应商
SELECT *
FROM knvp
INTO TABLE lt_knvp
FOR ALL ENTRIES IN gt_alv_head
WHERE kunnr = gt_alv_head-kunwe
AND vkorg = gt_alv_head-vkorg
AND vtweg = gt_alv_head-vtweg
* AND spart = '00'"gt_alv_head-spart
AND parvw = 'SP'.
* 取客户对应的业务员数据
SELECT *
FROM knvp
APPENDING TABLE lt_knvp
FOR ALL ENTRIES IN gt_alv_head
WHERE kunnr = gt_alv_head-kunnr"客户编号
AND vkorg = gt_alv_head-vkorg"销售组织
AND vtweg = gt_alv_head-vtweg"分销渠道
AND spart = gt_alv_head-spart"产品组
AND parvw = 'ZY'."合作伙伴功能
IF lt_knvp[] IS NOT INITIAL.
SELECT *
FROM lfa1
INTO TABLE lt_lfa1
FOR ALL ENTRIES IN lt_knvp
WHERE lifnr = lt_knvp-lifnr.
ENDIF.
* 送达方
SELECT *
FROM kna1
APPENDING TABLE lt_kna1
FOR ALL ENTRIES IN gt_alv_head
WHERE kunnr = gt_alv_head-kunwe.
* 送达方运送区域
IF lt_kna1[] IS NOT INITIAL.
SELECT *
FROM tzont
INTO TABLE lt_tzont
FOR ALL ENTRIES IN lt_kna1
WHERE spras = sy-langu
AND land1 = lt_kna1-land1
AND zone1 = lt_kna1-lzone.
ENDIF.
* 售达方
SELECT *
FROM kna1
APPENDING TABLE lt_kna1
* FOR ALL ENTRIES IN gt_alv_head
* WHERE kunnr = gt_alv_head-kunnr
.
* 销售组织
SELECT *
FROM tvkot
INTO TABLE lt_tvkot
FOR ALL ENTRIES IN gt_alv_head
WHERE spras = sy-langu
AND vkorg = gt_alv_head-vkorg.
* 销售视图
SELECT *
FROM knvv
INTO TABLE lt_knvv
FOR ALL ENTRIES IN gt_alv_head
WHERE kunnr = gt_alv_head-kunnr
AND vkorg = gt_alv_head-vkorg"销售组织
AND vtweg = gt_alv_head-vtweg"分销渠道
AND spart = gt_alv_head-spart."产品组
* 销售小组
SELECT *
FROM tvgrt
INTO TABLE lt_tvgrt
FOR ALL ENTRIES IN gt_alv_head
WHERE spras = sy-langu
AND vkgrp = gt_alv_head-vkgrp.
* 业务范围
SELECT *
FROM tgsbt
INTO TABLE lt_tgsbt
FOR ALL ENTRIES IN gt_alv_head
WHERE spras = sy-langu
AND gsber = gt_alv_head-gsber.
* 产品组
SELECT *
FROM tspat
INTO TABLE lt_tspat
FOR ALL ENTRIES IN gt_alv_head
WHERE spras = sy-langu
AND spart = gt_alv_head-spart.
* 取行项目描述
IF gt_alv_item_store[] IS NOT INITIAL.
* 取物料描述
SELECT *
FROM makt
INTO TABLE lt_makt
FOR ALL ENTRIES IN gt_alv_item_store
WHERE spras = sy-langu
AND matnr = gt_alv_item_store-matnr.
* 取工厂描述
SELECT *
FROM t001w
INTO TABLE lt_t001w
FOR ALL ENTRIES IN gt_alv_item_store
WHERE werks = gt_alv_item_store-werks
AND spras = sy-langu.
* 取库存地点描述
SELECT *
FROM t001l
INTO TABLE lt_t001l
FOR ALL ENTRIES IN gt_alv_item_store
WHERE werks = gt_alv_item_store-werks
AND lgort = gt_alv_item_store-lgort.
* 业务范围
SELECT *
FROM tgsbt
APPENDING TABLE lt_tgsbt
FOR ALL ENTRIES IN gt_alv_item_store
WHERE spras = sy-langu
AND gsber = gt_alv_item_store-gsber.
* 产品组
SELECT *
FROM tspat
APPENDING TABLE lt_tspat
FOR ALL ENTRIES IN gt_alv_item_store
WHERE spras = sy-langu
AND spart = gt_alv_item_store-spart.
* 非限制库存
SELECT *
FROM mard
APPENDING TABLE lt_mard
FOR ALL ENTRIES IN gt_alv_item_store
WHERE matnr = gt_alv_item_store-matnr
* AND werks = gt_alv_item_store-werks
* AND lgort = gt_alv_item_store-lgort
.
* 取出交货计划数
SELECT *
FROM lips AS t01
INNER JOIN vbup AS t02 ON t01~vbeln = t02~vbeln AND t01~posnr = t02~posnr AND t02~wbsta <> 'C'
INNER JOIN likp AS t03 ON t01~vbeln = t03~vbeln
INTO CORRESPONDING FIELDS OF TABLE lt_lips
FOR ALL ENTRIES IN gt_alv_item_store
WHERE t01~matnr = gt_alv_item_store-matnr
AND t01~werks = gt_alv_item_store-werks
AND t03~lfart <> 'LR'."排除退货
* 单位体积
SELECT *
FROM mara
APPENDING TABLE lt_mara
FOR ALL ENTRIES IN gt_alv_item_store
WHERE matnr = gt_alv_item_store-matnr.
* 取品牌
SELECT *
FROM mvke
APPENDING TABLE lt_mvke
FOR ALL ENTRIES IN gt_alv_item_store
WHERE matnr = gt_alv_item_store-matnr.
SORT lt_mvke BY matnr mvgr1 DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_mvke COMPARING matnr.
ENDIF.
ENDIF.
* 填充描述字段
LOOP AT gt_alv_head.
* 读取长文本信息
PERFORM frm_read_text USING gt_alv_head-vbeln CHANGING gt_alv_head-sgtxt.
* 取信用信息
READ TABLE lt_sd_01 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-status = lt_sd_01-status.
ELSE.
gt_alv_head-status = icon_led_inactive.
ENDIF.
READ TABLE lt_sd_02 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-zkyed = lt_sd_02-zkyed.
ENDIF.
READ TABLE lt_sd_03 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-zcqts = lt_sd_03-zcqts.
ENDIF.
READ TABLE lt_sd_04 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-zhklce = lt_sd_04-zhklce.
ENDIF.
* 订单原因描述
READ TABLE lt_tvaut WITH KEY augru = gt_alv_head-augru.
IF sy-subrc = 0.
gt_alv_head-augru_txt = lt_tvaut-bezei."订单原因文本
ENDIF.
* 售达方名称
READ TABLE lt_kna1 WITH KEY kunnr = gt_alv_head-kunnr.
IF sy-subrc = 0.
gt_alv_head-kunnr_txt = lt_kna1-name1.
ENDIF.
* 优先级
READ TABLE lt_knvv WITH KEY kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0 AND lt_knvv-lprio IS NOT INITIAL.
gt_alv_head-lprio = '优先'.
ENDIF.
* 送达方名称
READ TABLE lt_kna1 WITH KEY kunnr = gt_alv_head-kunwe.
IF sy-subrc = 0.
gt_alv_head-kunwe_txt = lt_kna1-name1.
gt_alv_head-lzone = lt_kna1-lzone."运送区域
* 运送区域描述
READ TABLE lt_tzont WITH KEY land1 = lt_kna1-land1
zone1 = lt_kna1-lzone.
IF sy-subrc = 0.
gt_alv_head-lzone_txt = lt_tzont-vtext.
ENDIF.
ENDIF.
* 货运代理
READ TABLE lt_knvp WITH KEY kunnr = gt_alv_head-kunwe
vkorg = gt_alv_head-vkorg
vtweg = gt_alv_head-vtweg
parvw = 'SP'.
IF sy-subrc = 0.
gt_alv_head-lifnr = lt_knvp-lifnr.
READ TABLE lt_lfa1 WITH KEY lifnr = lt_knvp-lifnr."供应商名称
IF sy-subrc = 0.
gt_alv_head-name1 = lt_lfa1-name1.
ENDIF.
ENDIF.
* 读取业务员
READ TABLE lt_knvp WITH KEY kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg
vtweg = gt_alv_head-vtweg
parvw = 'ZY'.
IF sy-subrc = 0.
gt_alv_head-kunn2 = lt_knvp-kunn2.
READ TABLE lt_kna1 WITH KEY kunnr = gt_alv_head-kunn2.
IF sy-subrc = 0.
gt_alv_head-kunn2_txt = lt_kna1-name1.
ENDIF.
ENDIF.
* 客户组1描述
READ TABLE lt_tvv1t WITH KEY kvgr1 = gt_alv_head-kvgr1.
IF sy-subrc = 0.
gt_alv_head-kvgr1_txt = lt_tvv1t-bezei.
ENDIF.
* 销售组织描述
READ TABLE lt_tvkot WITH KEY vkorg = gt_alv_head-vkorg.
IF sy-subrc = 0.
gt_alv_head-vtext = lt_tvkot-vtext.
ENDIF.
* 销售小组描述
READ TABLE lt_tvgrt WITH KEY vkgrp = gt_alv_head-vkgrp.
IF sy-subrc = 0.
gt_alv_head-vkgrp_txt = lt_tvgrt-bezei.
ENDIF.
* 业务范围描述
READ TABLE lt_tgsbt WITH KEY gsber = gt_alv_head-gsber.
IF sy-subrc = 0.
gt_alv_head-gsber_txt = lt_tgsbt-gtext.
ENDIF.
* 产品组描述
READ TABLE lt_tspat WITH KEY spart = gt_alv_head-spart.
IF sy-subrc = 0.
gt_alv_head-spart_txt = lt_tspat-vtext.
ENDIF.
* 循环行
LOOP AT gt_alv_item_store WHERE vbeln = gt_alv_head-vbeln.
* 行文本
PERFORM frm_read_item_text USING gt_alv_item_store-vbeln gt_alv_item_store-posnr CHANGING gt_alv_item_store-sgtxt.
* 物料描述
READ TABLE lt_makt WITH KEY matnr = gt_alv_item_store-matnr.
IF sy-subrc = 0.
gt_alv_item_store-maktx = lt_makt-maktx.
ENDIF.
* 工厂描述
READ TABLE lt_t001w WITH KEY werks = gt_alv_item_store-werks.
IF sy-subrc = 0.
gt_alv_item_store-werks_txt = lt_t001w-name1.
ENDIF.
* 库存地点描述
READ TABLE lt_t001l WITH KEY werks = gt_alv_item_store-werks
lgort = gt_alv_item_store-lgort.
IF sy-subrc = 0.
gt_alv_item_store-lgobe = lt_t001l-lgobe.
ENDIF.
* 业务范围描述
READ TABLE lt_tgsbt WITH KEY gsber = gt_alv_item_store-gsber.
IF sy-subrc = 0.
gt_alv_item_store-gsber_txt = lt_tgsbt-gtext.
ENDIF.
* 产品组描述
READ TABLE lt_tspat WITH KEY spart = gt_alv_item_store-spart.
IF sy-subrc = 0.
gt_alv_item_store-spart_txt = lt_tspat-vtext.
ENDIF.
** 非限制库存
* READ TABLE lt_mard WITH KEY matnr = gt_alv_item_store-matnr
* werks = gt_alv_item_store-werks
* lgort = gt_alv_item_store-lgort.
* IF sy-subrc = 0.
* gt_alv_item_store-labst = lt_mard-labst.
* ENDIF.
* 读取物料主数据上的体积
READ TABLE lt_mara WITH KEY matnr = gt_alv_item_store-matnr.
IF sy-subrc = 0.
gt_alv_item_store-voleh = lt_mara-voleh.
gt_alv_item_store-volum = lt_mara-volum.
ENDIF.
* 读取物料组1(品牌)数据
READ TABLE lt_mvke WITH KEY matnr = gt_alv_item_store-matnr.
IF sy-subrc = 0.
gt_alv_item_store-mvgr1 = lt_mvke-mvgr1.
ENDIF.
* 头数据存储行上
gt_alv_item_store-icon = icon_protocol.
gt_alv_item_store-kunnr = gt_alv_head-kunnr."客户
gt_alv_item_store-kunnr_txt = gt_alv_head-kunnr_txt."客户名称
gt_alv_item_store-kunn2 = gt_alv_head-kunn2."业务员
gt_alv_item_store-kunn2_txt = gt_alv_head-kunn2_txt."业务员名称
gt_alv_item_store-lifnr = gt_alv_head-lifnr."货运代理
gt_alv_item_store-name1 = gt_alv_head-name1."货运代理名称
gt_alv_item_store-lzone = gt_alv_head-lzone."货运区域
gt_alv_item_store-lzone_txt = gt_alv_head-lzone_txt."货运区域描述
gt_alv_item_store-bukrs_vf = gt_alv_head-bukrs_vf."公司代码
gt_alv_item_store-auart = gt_alv_head-auart."销售凭证类型
gt_alv_item_store-kunnr = gt_alv_head-kunnr."售达方
gt_alv_item_store-kunwe = gt_alv_head-kunwe."送达方
gt_alv_item_store-spart_head = gt_alv_head-spart."头产品组
* 凭证流
gt_alv_item_store-menge = gt_alv_item_store-kwmeng."未清数量 = 数量
LOOP AT lt_vbfa WHERE vbelv = gt_alv_item_store-vbeln"先前的销售和分销凭证
AND posnv = gt_alv_item_store-posnr."凭证的先前项目
gt_alv_item_store-menge = gt_alv_item_store-menge - lt_vbfa-rfmng.
ENDLOOP.
gt_alv_item_store-cur_menge = gt_alv_item_store-menge."本次交货数量 = 未清数量
gt_alv_item_store-sum_netpr = gt_alv_item_store-netpr * gt_alv_item_store-cur_menge / 1000."交货金额 = 产品单价 * 本次交货数量
* 非限制数量
LOOP AT lt_mard WHERE matnr = gt_alv_item_store-matnr.
* AND werks = gt_alv_item_store-werks.
IF lt_mard-werks = '1000'.
CASE lt_mard-lgort.
WHEN '1001' OR '1004' OR '1007' OR '1010' OR '1012' OR '1014' OR '1015'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ELSEIF lt_mard-werks = '1010'.
CASE lt_mard-lgort.
WHEN '1001' OR '1004' OR '1005' OR '1010' OR '1012' OR '1015'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ELSEIF lt_mard-werks = '1020'.
CASE lt_mard-lgort.
WHEN '1001' OR '1004' OR '1007' OR '1010' OR '1012' OR '1015'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ELSEIF lt_mard-werks = '1030'.
CASE lt_mard-lgort.
WHEN '1001' OR '1004' OR '1005' OR '1007' OR '1010' OR '1013' OR '1015'.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ELSE."1300,1310,1320,1330,1340,1350
ENDIF.
ADD lt_mard-labst TO gt_alv_item_store-labst.
ENDLOOP.
* 交货计划数
LOOP AT lt_lips WHERE matnr = gt_alv_item_store-matnr.
* AND werks = gt_alv_item_store-werks.
gt_alv_item_store-labst = gt_alv_item_store-labst - lt_lips-lfimg.
ENDLOOP.
* CASE gt_alv_item_store-voleh.
* WHEN 'CCM'.
* gt_alv_item_store-volum = gt_alv_item_store-volum / 1000000.
* WHEN 'CDM'.
* gt_alv_item_store-volum = gt_alv_item_store-volum / 1000.
* ENDCASE.
* gt_alv_item_store-voleh = 'M3'.
* gt_alv_item_store-cur_volum = gt_alv_item_store-volum * gt_alv_item_store-cur_menge."交货体积 = 单位体积*交货数量
gt_alv_item_store-status = icon_yellow_light.
IF gt_alv_item_store-xchpf = ''.
PERFORM frm_set_edit USING 'CHARG' 'DISABLE' CHANGING gt_alv_item_store-cellstyles.
ENDIF.
MODIFY gt_alv_item_store.
ENDLOOP.
MODIFY gt_alv_head.
ENDLOOP.
DELETE gt_alv_head WHERE kunn2 NOT IN s_kunn2."筛选业务员
IF p_filter = 'X'.
DELETE gt_alv_head WHERE status <> icon_led_green."筛选绿灯
ENDIF.
* gt_alv_item[] = gt_alv_item_store[].
ENDFORM. "FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form frm_create_container
*&---------------------------------------------------------------------*
* 创建ALV容器,并将类添加到容器
*----------------------------------------------------------------------*
FORM frm_create_container USING p_ratio p_side
CHANGING pcl_container TYPE REF TO cl_gui_docking_container
pcl_alv TYPE REF TO cl_gui_alv_grid.
CREATE OBJECT pcl_container
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
ratio = p_ratio
side = p_side."cl_gui_docking_container=>dock_at_top.
CREATE OBJECT pcl_alv
EXPORTING
i_parent = pcl_container.
ENDFORM. " frm_create_container
*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE
*&---------------------------------------------------------------------*
* 排除按钮
*----------------------------------------------------------------------*
FORM frm_exclude.
DATA ls_exclude TYPE ui_func.
CLEAR gs_exclude.
*排除打印按钮
ls_exclude = cl_gui_alv_grid=>mc_fc_print .
APPEND ls_exclude TO gs_exclude.
*排除添加、删除、插入、复制按钮
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row .
APPEND ls_exclude TO gs_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo .
APPEND ls_exclude TO gs_exclude.
ENDFORM. " FRM_EXCLUDE
*&---------------------------------------------------------------------*
*& Form frm_pre_layout
*&---------------------------------------------------------------------*
* 设置ALV样式
*----------------------------------------------------------------------*
FORM frm_pre_layout USING p_title p_tool CHANGING ps_layout TYPE lvc_s_layo.
ps_layout-zebra = 'X'.
ps_layout-no_toolbar = p_tool.
ps_layout-sel_mode = 'C'.
ps_layout-cwidth_opt = 'X'.
ps_layout-smalltitle = 'X'.
ps_layout-stylefname = 'CELLSTYLES'.
ps_layout-info_fname = 'ROWCOLOR'.
ps_layout-grid_title = p_title.
ENDFORM. " frm_pre_layout
*&---------------------------------------------------------------------*
*& Form frm_pre_fieldcat
*&---------------------------------------------------------------------*
* 设置字段目录属性
*----------------------------------------------------------------------*
FORM frm_pre_fieldcat_head.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'SEL' '' 'X' 'X' 'X' 'X' space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'STATUS' '额度' 'X' space space space 'X' space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'VBELN' '销售凭证' 'X' space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'LFSTK' '交货状态' 'X' space 'X' space space space space space 'X' 'VBUK' 'LFSTK' space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'LPRIO' '发货等级' 'X' space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KUNNR' '售达方' 'X' space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KUNNR_TXT' '售达方名称' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KVGR1_TXT' '客户分类' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'AUART' '凭证类型' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'BEZEI' '凭证类型名称' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'AUGRU_TXT' '订单原因' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KUNWE' '送达方' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KUNWE_TXT' '送达方名称' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KUNN2' '业务员' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'KUNN2_TXT' '业务员名称' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'LIFNR' '货运代理' space space space space space space space space 'X' 'LFB1' 'LIFNR' 'LFA1'.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'NAME1' '名称' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'LZONE_TXT' '运送区域' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'ERDAT' '创建日期' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'AUDAT' '创建日期' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'VDATU' '请求交货日期' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'BSTNK' '客户采购订单号' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'VTEXT' '销售组织' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'VKGRP_TXT' '销售小组' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'GSBER_TXT' '业务范围' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'SPART_TXT' '产品组' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'ZKYED' '可用额度' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'ZCQTS' '超期天数' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'ZHKLCE' '回款率差额' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES gt_fieldcat_head USING 'SGTXT' '备注' space space space space space space space space space space space space.
ENDFORM. " frm_pre_fieldcat
*&---------------------------------------------------------------------*
*& Form frm_pre_fieldcat_it
*&---------------------------------------------------------------------*
* 设置字段目录属性
*----------------------------------------------------------------------*
FORM frm_pre_fieldcat TABLES pt_fieldcat STRUCTURE lvc_s_fcat.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'SEL' '' 'X' 'X' 'X' 'X' space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'ZYPNO' '预排号' 'X' space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'VBELN_K' '交货单' 'X' space 'X' space space space space 'X' space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'STATUS' '状态' 'X' space 'X' space 'X' space space 'X' space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'VBELN' '销售凭证' 'X' space 'X' space space space space 'X' space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'POSNR' '项目' 'X' space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LFSTA' '行交货状态' 'X' space 'X' space space space space space 'X' 'VBUP' 'LFSTK' space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'MATNR' '物料号' 'X' space 'X' space space space space 'X' space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'MAKTX' '物料描述' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'WERKS' '交货工厂' space 'X' 'X' space space space space space 'X' 'LIPS' 'WERKS' space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'WERKS_TXT' '工厂名称' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LGORT' '交货库位' space 'X' 'X' space space space space space 'X' 'LIPS' 'LGORT' space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LGOBE' '库存地点' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'KWMENG' '数量' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'MENGE' '未清数量' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'CUR_MENGE' '本次交货数量' space 'X' space space space 3 space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LEFT_MENGE' '剩余交货数量' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'VOLUM' '体积' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'CUR_VOLUM' '本次交货体积' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'VOLEH' '体积单位' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LIFNR' '货运代理' space 'X' 'X' space space space space space 'X' 'LFA1' 'LIFNR' 'LFA1'.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'NAME1' '名称' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LZONE_TXT' '运送区域' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'GSBER_TXT' '业务范围线' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'SPART_TXT' '产品类别线' space space space space space space space space space space space space.
* PERFORM frm_fieldcat TABLES pt_fieldcat USING 'CHARG' '交货批次' space 'X' space space space space space space 'X' 'LIPS' 'CHARG' space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'NETPR' '产品单价' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'SUM_NETPR' '交货金额' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'KUNNR' '售达方' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'KUNNR_TXT' '售达方名称' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'KUNN2' '业务员' space space 'X' space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'KUNN2_TXT' '业务员名称' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'LABST' '可用库存' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'ICON' '库存查看' space space space space 'X' space space 'X' space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'SGTXT' '备注' space space space space space space space space space space space space.
PERFORM frm_fieldcat TABLES pt_fieldcat USING 'MESSAGE' '日志' space space space space space space space space space space space space.
ENDFORM. " frm_pre_fieldcat_it
*&---------------------------------------------------------------------*
*& Form frm_fieldcat
*&---------------------------------------------------------------------*
* 设置字段目录
*----------------------------------------------------------------------*
FORM frm_fieldcat TABLES pt_fieldcat USING p_field p_text p_key p_edit p_nozero p_checkbox p_icon p_decimals p_just p_hotspot p_f4 p_ref_tab p_ref_field p_checktable.
DATA lw_fcat TYPE lvc_s_fcat.
lw_fcat-fieldname = p_field.
lw_fcat-coltext = p_text.
lw_fcat-key = p_key.
lw_fcat-edit = p_edit.
lw_fcat-no_zero = p_nozero.
lw_fcat-checkbox = p_checkbox.
lw_fcat-icon = p_icon.
lw_fcat-decimals = p_decimals.
lw_fcat-just = p_just.
lw_fcat-hotspot = p_hotspot.
lw_fcat-f4availabl = p_f4.
lw_fcat-ref_table = p_ref_tab.
lw_fcat-ref_field = p_ref_field.
lw_fcat-checktable = p_checktable.
APPEND lw_fcat TO pt_fieldcat.
ENDFORM. " frm_fieldcat
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_EVENT_HEAD
*&---------------------------------------------------------------------*
* 注册事件
*----------------------------------------------------------------------*
FORM frm_upload_event_head CHANGING pcl_alv TYPE REF TO cl_gui_alv_grid.
DATA
lr_event_handler TYPE REF TO gcl_event_handler_head.
CREATE OBJECT lr_event_handler.
SET HANDLER lr_event_handler->handle_toolbar FOR pcl_alv.
SET HANDLER lr_event_handler->handle_user_command FOR pcl_alv.
SET HANDLER lr_event_handler->handle_double_click FOR pcl_alv.
CALL METHOD pcl_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
SET HANDLER lr_event_handler->handle_data_changed FOR pcl_alv.
ENDFORM. " FRM_UPLOAD_EVENT_HEAD
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_EVENT_ITEM
*&---------------------------------------------------------------------*
* 注册事件
*----------------------------------------------------------------------*
FORM frm_upload_event_item CHANGING pcl_alv TYPE REF TO cl_gui_alv_grid.
DATA
lr_event_handler TYPE REF TO gcl_event_handler_item.
CREATE OBJECT lr_event_handler.
SET HANDLER lr_event_handler->handle_hotspot_click FOR pcl_alv.
SET HANDLER lr_event_handler->handle_toolbar FOR pcl_alv.
SET HANDLER lr_event_handler->handle_user_command FOR pcl_alv.
SET HANDLER lr_event_handler->handle_onf4 FOR pcl_alv.
SET HANDLER lr_event_handler->handle_double_click FOR pcl_alv.
CALL METHOD pcl_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
SET HANDLER lr_event_handler->handle_data_changed FOR pcl_alv.
SET HANDLER lr_event_handler->handle_data_changed_finished FOR pcl_alv.
DATA lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.
lt_f4-fieldname = 'LGORT'.
lt_f4-register = 'X'.
lt_f4-getbefore = 'X'.
lt_f4-chngeafter = 'X'.
INSERT lt_f4 INTO TABLE lt_f4.
lt_f4-fieldname = 'CHARG'.
INSERT lt_f4 INTO TABLE lt_f4.
CALL METHOD pcl_alv->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
ENDFORM. " FRM_UPLOAD_EVENT_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_SET_TAB_DISPLAY_HEAD
*&---------------------------------------------------------------------*
* 显示ALV
*----------------------------------------------------------------------*
FORM frm_set_tab_display_head.
CALL METHOD gcl_alv_head->set_table_for_first_display
EXPORTING
is_variant = gs_variant_head
i_save = 'A'
i_default = 'X'
is_layout = gs_layout
it_toolbar_excluding = gs_exclude
CHANGING
it_outtab = gt_alv_head[]
it_fieldcatalog = gt_fieldcat_head
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_SET_TAB_DISPLAY_HEAD
*&---------------------------------------------------------------------*
*& Form FRM_SET_TAB_DISPLAY_ITEM
*&---------------------------------------------------------------------*
* 显示ALV
*----------------------------------------------------------------------*
FORM frm_set_tab_display_item.
CALL METHOD gcl_alv_item->set_table_for_first_display
EXPORTING
is_variant = gs_variant_item
i_save = 'A'
i_default = 'X'
is_layout = gs_layout
it_toolbar_excluding = gs_exclude
CHANGING
it_outtab = gt_alv_item[]
it_fieldcatalog = gt_fieldcat_item
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_SET_TAB_DISPLAY_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
* 刷新ALV
*----------------------------------------------------------------------*
FORM frm_refresh_alv CHANGING pcl_alv TYPE REF TO cl_gui_alv_grid.
*刷新稳定性
DATA: lw_stbl TYPE lvc_s_stbl.
lw_stbl-row = 'X'.
lw_stbl-col = 'X'.
CALL METHOD pcl_alv->refresh_table_display
EXPORTING
is_stable = lw_stbl
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& Form HANDE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW text
* -->P_E_COLUMN text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM hande_double_click USING ps_row TYPE lvc_s_row
ps_column TYPE lvc_s_col
ps_row_no TYPE lvc_s_roid.
CLEAR:gt_alv_item,gt_alv_item[].
* 双击获取明细
READ TABLE gt_alv_head INDEX ps_row-index.
IF sy-subrc = 0.
LOOP AT gt_alv_item_store WHERE vbeln = gt_alv_head-vbeln.
MOVE-CORRESPONDING gt_alv_item_store TO gt_alv_item.
APPEND gt_alv_item.
CLEAR gt_alv_item.
ENDLOOP.
ENDIF.
PERFORM frm_refresh_alv CHANGING gcl_alv_item.
ENDFORM. " HANDE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& Form HANDE_DOUBLE_CLICK_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW text
* -->P_E_COLUMN text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM hande_double_click_item USING ps_row TYPE lvc_s_row
ps_column TYPE lvc_s_col
ps_row_no TYPE lvc_s_roid.
READ TABLE gt_alv_item INDEX ps_row-index.
IF sy-subrc = 0.
SET PARAMETER ID: 'AUN' FIELD gt_alv_item-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
ENDFORM. " HANDE_DOUBLE_CLICK_ITEM
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
* -->P_E_INTERACTIVE text
*----------------------------------------------------------------------*
FORM handle_toolbar USING
p_e_object TYPE REF TO cl_alv_event_toolbar_set
p_e_interactive.
DATA: ls_toolbar TYPE stb_button.
* 添加分隔符
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 全选按钮
CLEAR ls_toolbar.
MOVE 'ALLSEL' TO ls_toolbar-function.
MOVE '全选' TO ls_toolbar-quickinfo.
MOVE icon_select_all TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 取消全选按钮
CLEAR ls_toolbar.
MOVE 'DESEL' TO ls_toolbar-function.
MOVE '取消全选' TO ls_toolbar-quickinfo.
MOVE icon_deselect_all TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 添加显示行项目按钮
CLEAR ls_toolbar.
MOVE 'DETAIL' TO ls_toolbar-function.
MOVE '显示行项目' TO ls_toolbar-text.
MOVE '显示行项目' TO ls_toolbar-quickinfo.
MOVE icon_select_detail TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
ENDFORM. " HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
*& Form HANDLE_HOTSPOT_CLICK
*&---------------------------------------------------------------------*
* 单击事件
*----------------------------------------------------------------------*
FORM handle_hotspot_click USING p_row_id TYPE lvc_s_row
p_column_id TYPE lvc_s_col
p_row_no TYPE lvc_s_roid.
CASE p_column_id-fieldname.
WHEN 'VBELN_K'.
READ TABLE gt_alv_item INDEX p_row_id-index.
IF sy-subrc = 0 AND gt_alv_item-vbeln_k <> ''.
SET PARAMETER ID: 'VL' FIELD gt_alv_item-vbeln_k.
CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
ENDIF.
WHEN 'VBELN'.
READ TABLE gt_alv_item INDEX p_row_id-index.
IF sy-subrc = 0 AND gt_alv_item-vbeln <> ''.
SET PARAMETER ID: 'AUN' FIELD gt_alv_item-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
WHEN 'MATNR'.
READ TABLE gt_alv_item INDEX p_row_id-index.
IF sy-subrc = 0 AND gt_alv_item-matnr <> ''.
SET PARAMETER ID: 'MAT' FIELD gt_alv_item-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDIF.
WHEN 'ICON'.
READ TABLE gt_alv_item INDEX p_row_id-index.
IF sy-subrc = 0.
DATA:
lt_rspar TYPE TABLE OF rsparams,
lw_line LIKE LINE OF lt_rspar.
lw_line-selname = 'S_WERKS'.
lw_line-kind = 'S'.
lw_line-sign = 'I'.
lw_line-option = 'CP'.
lw_line-low = '*'.
APPEND lw_line TO lt_rspar.
lw_line-selname = 'S_MATNR'.
lw_line-kind = 'S'.
lw_line-sign = 'I'.
lw_line-option = 'EQ'.
lw_line-low = gt_alv_item-matnr.
APPEND lw_line TO lt_rspar.
lw_line-selname = 'S_MVGR1'.
lw_line-kind = 'S'.
lw_line-sign = 'I'.
lw_line-option = 'EQ'.
lw_line-low = gt_alv_item-mvgr1.
APPEND lw_line TO lt_rspar.
SUBMIT zsdr_0012
WITH SELECTION-TABLE lt_rspar
AND RETURN.
ENDIF.
ENDCASE.
ENDFORM. " HANDLE_HOTSPOT_CLICK
*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
* -->P_E_INTERACTIVE text
*----------------------------------------------------------------------*
FORM handle_toolbar_item USING
p_e_object TYPE REF TO cl_alv_event_toolbar_set
p_e_interactive.
DATA: ls_toolbar TYPE stb_button.
* 添加分隔符
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 全选按钮
CLEAR ls_toolbar.
MOVE 'ALLSELI' TO ls_toolbar-function.
MOVE '全选' TO ls_toolbar-quickinfo.
MOVE icon_select_all TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 取消全选按钮
CLEAR ls_toolbar.
MOVE 'DESELI' TO ls_toolbar-function.
MOVE '取消全选' TO ls_toolbar-quickinfo.
MOVE icon_deselect_all TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 取消保存按钮
CLEAR ls_toolbar.
MOVE 'ZSAVE' TO ls_toolbar-function.
MOVE '保存' TO ls_toolbar-quickinfo.
MOVE icon_system_save TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
* 添加生成提单按钮
CLEAR ls_toolbar.
MOVE 'CREATE' TO ls_toolbar-function.
MOVE '生成提单' TO ls_toolbar-text.
MOVE '生成提单' TO ls_toolbar-quickinfo.
MOVE icon_allow TO ls_toolbar-icon.
APPEND ls_toolbar TO p_e_object->mt_toolbar.
ENDFORM. " HANDLE_TOOLBAR_ITEM
*&---------------------------------------------------------------------*
*& Form handle_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_user_command USING p_e_ucomm.
PERFORM frm_check_changed_data USING gcl_alv_head.
CASE p_e_ucomm.
WHEN 'ALLSEL'.
LOOP AT gt_alv_head.
gt_alv_head-sel = 'X'.
MODIFY gt_alv_head TRANSPORTING sel.
ENDLOOP.
WHEN 'DESEL'.
LOOP AT gt_alv_head.
gt_alv_head-sel = ''.
MODIFY gt_alv_head TRANSPORTING sel.
ENDLOOP.
WHEN 'DETAIL'.
PERFORM frm_show_detail.
ENDCASE.
PERFORM frm_refresh_alv CHANGING gcl_alv_head.
PERFORM frm_refresh_alv CHANGING gcl_alv_item.
ENDFORM. " handle_user_command
*&---------------------------------------------------------------------*
*& Form handle_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_user_command_item USING p_e_ucomm.
PERFORM frm_check_changed_data USING gcl_alv_item.
CASE p_e_ucomm.
WHEN 'ALLSELI'.
LOOP AT gt_alv_item WHERE vbeln_k IS INITIAL.
gt_alv_item-sel = 'X'.
MODIFY gt_alv_item TRANSPORTING sel.
ENDLOOP.
WHEN 'DESELI'.
LOOP AT gt_alv_item.
gt_alv_item-sel = ''.
MODIFY gt_alv_item TRANSPORTING sel.
ENDLOOP.
WHEN 'ZSAVE'.
PERFORM frm_save_item.
WHEN 'CREATE'.
PERFORM frm_create.
* PERFORM frm_update_lgort.
* PERFORM frm_do_bdc.
* PERFORM frm_change_lgort.
PERFORM frm_set_disable.
ENDCASE.
PERFORM frm_store_item."存储ITEM
* PERFORM frm_sum."累计体积
* PERFORM frm_refresh_screen."刷新SCREEN,ALV
*Inserted By Ryan Liu In 05.07.2012 10:12:00.
PERFORM frm_refresh_alv CHANGING gcl_alv_head.
*End Of Insert.
PERFORM frm_refresh_alv CHANGING gcl_alv_item."刷新ALV
ENDFORM. " handle_user_command
*&---------------------------------------------------------------------*
*& Form HANDE_ONF4_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_FIELDNAME text
* -->P_E_FIELDVALUE text
* -->P_ES_ROW_NO text
* -->P_ER_EVENT_DATA text
* -->P_ET_BAD_CELLS text
* -->P_E_DISPLAY text
*----------------------------------------------------------------------*
FORM hande_onf4_item USING e_fieldname TYPE lvc_fname
e_fieldvalue TYPE lvc_value
es_row_no TYPE lvc_s_roid
er_event_data TYPE REF TO cl_alv_event_data
et_bad_cells TYPE lvc_t_modi
e_display TYPE char01.
DATA:
lt_lips TYPE TABLE OF lips WITH HEADER LINE,
lt_mard TYPE TABLE OF ty_mard WITH HEADER LINE,
lt_mchb TYPE TABLE OF ty_mchb WITH HEADER LINE,
lt_ddshretval TYPE STANDARD TABLE OF ddshretval WITH HEADER LINE,
lt_cells TYPE lvc_t_cell WITH HEADER LINE.
READ TABLE gt_alv_item INDEX es_row_no-row_id.
IF sy-subrc = 0.
* IF gt_alv_item-xchpf = ''."是否启用批次管理
* 取库存数量
SELECT *
FROM mard AS t01
INNER JOIN t001l AS t02 ON t01~werks = t02~werks AND t01~lgort = t02~lgort
INTO CORRESPONDING FIELDS OF TABLE lt_mard
WHERE t01~matnr = gt_alv_item-matnr
AND t01~werks = gt_alv_item-werks.
SELECT matnr"物料
werks"工厂
lgort"库存地点
lfimg"交货数量
FROM lips AS t01
INNER JOIN vbup AS t02 ON t01~vbeln = t02~vbeln AND t01~posnr = t02~posnr AND t02~wbsta <> 'C'
INTO CORRESPONDING FIELDS OF TABLE lt_lips
WHERE t01~matnr = gt_alv_item-matnr
AND t01~werks = gt_alv_item-werks.
LOOP AT lt_mard.
LOOP AT lt_lips WHERE matnr = lt_mard-matnr
AND werks = lt_mard-werks
AND lgort = lt_mard-lgort.
ADD lt_lips-lfimg TO lt_mard-lfimg.
ENDLOOP.
lt_mard-zkykc = lt_mard-labst - lt_mard-lfimg.
MODIFY lt_mard.
CLEAR lt_mard.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'LGORT' "指定ALV用F4的字段
dynpprog = sy-repid
value_org = 'S'
callback_program = sy-repid
callback_form = 'FRM_F4_CB_1'
TABLES
value_tab = lt_mard[]
return_tab = lt_ddshretval[]
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
LOOP AT lt_ddshretval.
CASE lt_ddshretval-fieldname.
WHEN 'F0002'.
gt_alv_item-lgort = lt_ddshretval-fieldval.
WHEN 'F0003'.
gt_alv_item-lgobe = lt_ddshretval-fieldval.
WHEN 'F0005'.
gt_alv_item-charg = lt_ddshretval-fieldval.
ENDCASE.
ENDLOOP.
MODIFY gt_alv_item INDEX es_row_no-row_id.
* ELSE.
** 去批次库存
* SELECT *
* FROM mchb AS t01
* INNER JOIN t001l AS t02 ON t01~werks = t02~werks AND t01~lgort = t02~lgort
* INTO CORRESPONDING FIELDS OF TABLE lt_mchb
* WHERE t01~werks = gt_alv_item-werks
* AND t01~matnr = gt_alv_item-matnr.
*
* CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
* EXPORTING
* retfield = 'LGORT' "指定ALV用F4的字段
* dynpprog = sy-repid
* value_org = 'S'
* callback_program = sy-repid
* callback_form = 'FRM_F4_CB'
* TABLES
* value_tab = lt_mchb[]
* return_tab = lt_ddshretval[]
* EXCEPTIONS
* parameter_error = 1
* no_values_found = 2
* OTHERS = 3.
*
* LOOP AT lt_ddshretval.
* CASE lt_ddshretval-fieldname.
* WHEN 'F0002'.
* gt_alv_item-lgort = lt_ddshretval-fieldval.
* WHEN 'F0003'.
* gt_alv_item-lgobe = lt_ddshretval-fieldval.
* WHEN 'F0005'.
* gt_alv_item-charg = lt_ddshretval-fieldval.
* ENDCASE.
* ENDLOOP.
* MODIFY gt_alv_item INDEX es_row_no-row_id.
* ENDIF.
ENDIF.
PERFORM frm_refresh_alv CHANGING gcl_alv_item.
lt_cells-row_id-index = es_row_no-row_id.
lt_cells-col_id = e_fieldname.
APPEND lt_cells.
CALL METHOD gcl_alv_item->set_selected_cells
EXPORTING
it_cells = lt_cells[].
ENDFORM. " HANDE_ONF4_ITEM
*&---------------------------------------------------------------------*
*& Form HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ER_DATA_CHANGED text
* -->P_E_ONF4 text
* -->P_E_ONF4_BEFORE text
* -->P_E_ONF4_AFTER text
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_data_changed USING
p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol
p_e_onf4
p_e_onf4_before
p_e_onf4_after
p_e_ucomm TYPE sy-ucomm.
ENDFORM. " HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
*& Form HANDLE_DATA_CHANGED_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ER_DATA_CHANGED text
* -->P_E_ONF4 text
* -->P_E_ONF4_BEFORE text
* -->P_E_ONF4_AFTER text
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_data_changed_item USING
p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol
p_e_onf4
p_e_onf4_before
p_e_onf4_after
p_e_ucomm TYPE sy-ucomm.
DATA:
l_lifnr TYPE lfa1-lifnr,"供应商编号
l_name TYPE lfa1-name1."供应商名称
FIELD-SYMBOLS: <lfs_mod_rows> TYPE STANDARD TABLE,
<lfs_cells> TYPE lvc_t_modi ,
<lfs_cell_wa> TYPE lvc_s_modi ,
<lfs_itab_wa> LIKE LINE OF gt_alv_item,
<lfs_wa> TYPE any.
CHECK NOT p_er_data_changed->mp_mod_rows IS INITIAL.
CHECK NOT p_er_data_changed->mt_mod_cells IS INITIAL.
ASSIGN p_er_data_changed->mt_mod_cells TO <lfs_cells>.
ASSIGN p_er_data_changed->mp_mod_rows->* TO <lfs_mod_rows>.
LOOP AT <lfs_cells> ASSIGNING <lfs_cell_wa> .
READ TABLE gt_alv_item INDEX <lfs_cell_wa>-row_id.
IF sy-subrc = 0.
* 如果是交货数量,判断其有效性
IF <lfs_cell_wa>-fieldname = 'CUR_MENGE' .
CATCH SYSTEM-EXCEPTIONS convt_no_number = 1.
PERFORM frm_zero_input USING 3 CHANGING <lfs_cell_wa>-value.
gt_alv_item-cur_menge = <lfs_cell_wa>-value.
ENDCATCH.
IF sy-subrc = 0.
IF gt_alv_item-menge < gt_alv_item-cur_menge.
CALL METHOD p_er_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'ZSD_001'
i_msgty = 'E'
i_msgno = '008'
i_fieldname = 'CUR_MENGE'
i_row_id = <lfs_cell_wa>-row_id.
ELSE.
gt_alv_item-left_menge = gt_alv_item-menge - gt_alv_item-cur_menge."剩余交货数量 = 未清数量 -本次交货数量
gt_alv_item-sum_netpr = gt_alv_item-netpr * gt_alv_item-cur_menge / 1000."交货金额 = 产品单价 * 本次交货数量
gt_alv_item-cur_volum = gt_alv_item-volum * gt_alv_item-cur_menge."本次交货体积 = 体积 * 本次交货数量
MODIFY gt_alv_item INDEX <lfs_cell_wa>-row_id.
ENDIF.
ENDIF.
ENDIF.
* 如果勾选,提前更新内表
IF <lfs_cell_wa>-fieldname = 'SEL' .
gt_alv_item-sel = <lfs_cell_wa>-value.
MODIFY gt_alv_item INDEX <lfs_cell_wa>-row_id.
ENDIF.
ENDIF.
ENDLOOP.
PERFORM frm_store_item."存储ITEM
* PERFORM frm_sum."累计
* PERFORM frm_refresh_screen."刷新SCREEN,ALV
PERFORM frm_refresh_alv CHANGING gcl_alv_item.
ENDFORM. " HANDLE_DATA_CHANGED_ITEM
*&---------------------------------------------------------------------*
*& Form handle_data_changed_finished
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_MODIFIED text
* -->P_ET_GOOD_CELLS text
*----------------------------------------------------------------------*
FORM handle_data_changed_finished USING p_e_modified
p_et_good_cells TYPE lvc_t_modi.
DATA:ls_good_cells TYPE lvc_s_modi.
LOOP AT p_et_good_cells INTO ls_good_cells .
READ TABLE gt_alv_item INDEX ls_good_cells-row_id.
IF sy-subrc = 0.
CASE ls_good_cells-fieldname.
WHEN 'WERKS'.
* 读取对应描述字段
gt_alv_item-werks_change = 'X'.
* 取工厂描述
SELECT SINGLE name1
FROM t001w
INTO gt_alv_item-werks_txt
WHERE werks = gt_alv_item-werks
AND spras = sy-langu.
WHEN 'LGORT'.
* 取库存地点描述
SELECT SINGLE lgobe
FROM t001l
INTO gt_alv_item-lgobe
WHERE werks = gt_alv_item-werks
AND lgort = gt_alv_item-lgort.
ENDCASE.
MODIFY gt_alv_item INDEX ls_good_cells-row_id.
ENDIF.
ENDLOOP.
PERFORM frm_refresh_alv CHANGING gcl_alv_item.
ENDFORM. " handle_data_changed_finished
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_CHANGED_DATA
*&---------------------------------------------------------------------*
* 获取改变数据
*----------------------------------------------------------------------*
FORM frm_check_changed_data USING pcl_alv TYPE REF TO cl_gui_alv_grid.
DATA:
l_valid.
CALL METHOD pcl_alv->check_changed_data
IMPORTING
e_valid = l_valid.
ENDFORM. "FRM_CHECK_CHANGED_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DETAIL
*&---------------------------------------------------------------------*
* 获取明细
*----------------------------------------------------------------------*
FORM frm_show_detail .
CLEAR:gt_alv_item,gt_alv_item[].
PERFORM frm_check_changed_data USING gcl_alv_head.
* 获取明细
LOOP AT gt_alv_head WHERE sel = 'X'.
LOOP AT gt_alv_item_store WHERE vbeln = gt_alv_head-vbeln.
MOVE-CORRESPONDING gt_alv_item_store TO gt_alv_item.
APPEND gt_alv_item.
CLEAR gt_alv_item.
ENDLOOP.
ENDLOOP.
ENDFORM. " FRM_SHOW_DETAIL
*&---------------------------------------------------------------------*
*& Form FRM_FILL_MSG
*&---------------------------------------------------------------------*
* 填充信息
*----------------------------------------------------------------------*
* <-- P_MESSAGE 消息
*----------------------------------------------------------------------*
FORM frm_fill_msg TABLES pt_mtab STRUCTURE bapiret2
CHANGING p_message.
DATA:
l_i(10),
l_message(220).
CLEAR p_message.
LOOP AT pt_mtab.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = pt_mtab-id
msgnr = pt_mtab-number
msgv1 = pt_mtab-message_v1
msgv2 = pt_mtab-message_v2
msgv3 = pt_mtab-message_v3
msgv4 = pt_mtab-message_v4
IMPORTING
message_text_output = l_message.
CONDENSE p_message.
CONCATENATE p_message l_message INTO p_message SEPARATED BY ' '.
ENDLOOP.
ENDFORM. " FRM_FILL_MESSAGE
*&--------------------------------------------------------------------*
*& Form FRM_HINTMSGTXT
*&--------------------------------------------------------------------*
* 显示状态栏信息
*---------------------------------------------------------------------*
FORM frm_hintmsgtxt USING p_per p_msg.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = p_per
text = p_msg
EXCEPTIONS
OTHERS = 1.
ENDFORM. "FRM_HINTMSGTXT
*&---------------------------------------------------------------------*
*& Form FRM_CREATE
*&---------------------------------------------------------------------*
* 创建提单
*----------------------------------------------------------------------*
FORM frm_create .
DATA:
l_continue,
l_message(220),
l_labst TYPE mard-labst,
l_lfimg TYPE lips-lfimg,
l_c_menge(20),
l_matnr TYPE matnr,
l_sum_netpr LIKE gt_alv_head-zkyed,
lt_alv_item LIKE TABLE OF gt_alv_item WITH HEADER LINE,
l_delevery TYPE bapishpdelivnumb-deliv_numb,
lt_vbap TYPE TABLE OF vbap WITH HEADER LINE,
lt_item TYPE TABLE OF bapidlvreftosalesorder WITH HEADER LINE,
lt_serial TYPE TABLE OF bapidlvserialnumber WITH HEADER LINE,
lt_ex1 TYPE TABLE OF bapiparex WITH HEADER LINE,
lt_delnum TYPE TABLE OF bapishpdelivnumb WITH HEADER LINE,
lt_create TYPE TABLE OF bapidlvitemcreated WITH HEADER LINE,
lt_ex2 TYPE TABLE OF bapiparex WITH HEADER LINE,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
*Changed By Ryan Liu In 04.07.2012 16:45:26."每次提单创建的时候都对该客户授信进行重新读取
lt_sd_01 TYPE TABLE OF zzs_sd_002 WITH HEADER LINE,
lt_sd_02 TYPE TABLE OF zzs_sd_003 WITH HEADER LINE,
lt_sd_03 TYPE TABLE OF zzs_sd_004 WITH HEADER LINE,
lt_sd_04 TYPE TABLE OF zzs_sd_005 WITH HEADER LINE.
*End Of Change.
*退货率
DATA L_T_SD023 LIKE ZZT_SD_023.
DATA L_V_GJAHR LIKE ZZT_SD_023-GJAHR.
L_V_GJAHR = SY-DATUM+0(4).
L_V_GJAHR = L_V_GJAHR - 1 .
lt_alv_item[] = gt_alv_item[].
DELETE lt_alv_item WHERE sel = ''.
SORT lt_alv_item BY vbeln lifnr.
DELETE ADJACENT DUPLICATES FROM lt_alv_item COMPARING vbeln lifnr.
LOOP AT lt_alv_item.
l_continue = ''.
* 判断交货工厂是否修改
LOOP AT gt_alv_item WHERE sel = 'X'
AND vbeln = lt_alv_item-vbeln.
IF gt_alv_item-werks_change = 'X'.
gt_alv_item-message = '交货工厂已修改,请先保存'.
gt_alv_item-status = icon_red_light.
l_continue = 'X'.
MODIFY gt_alv_item.
ENDIF.
* 检查库存地点一致性
IF gt_alv_item-lgort <> lt_alv_item-lgort.
gt_alv_item-message = '库存地点不一致'.
gt_alv_item-status = icon_red_light.
l_continue = 'X'.
MODIFY gt_alv_item.
ENDIF.
* 交货库存地点必输
IF gt_alv_item-lgort = ''.
gt_alv_item-message = '请输入库存地点'.
gt_alv_item-status = icon_red_light.
l_continue = 'X'.
MODIFY gt_alv_item.
ENDIF.
* 库存数量
SELECT SINGLE labst
FROM mard INTO l_labst
WHERE matnr = gt_alv_item-matnr
AND werks = gt_alv_item-werks
AND lgort = gt_alv_item-lgort.
* 交货计划数量
SELECT SUM( lfimg )
FROM lips AS t01
INNER JOIN vbup AS t02 ON t01~vbeln = t02~vbeln AND t01~posnr = t02~posnr AND t02~wbsta <> 'C'
INTO l_lfimg
WHERE matnr = gt_alv_item-matnr
AND werks = gt_alv_item-werks
AND lgort = gt_alv_item-lgort.
l_labst = l_labst - l_lfimg.
IF l_labst < gt_alv_item-cur_menge.
l_c_menge = l_labst.
CONDENSE l_c_menge.
l_matnr = gt_alv_item-matnr.
PERFORM frm_alpha_output CHANGING l_matnr.
gt_alv_item-message = '仅物料 ' && l_c_menge && '的' && l_matnr && ' 可用'.
gt_alv_item-status = icon_red_light.
l_continue = 'X'.
MODIFY gt_alv_item.
ENDIF.
READ TABLE gt_alv_head WITH KEY vbeln = lt_alv_item-vbeln.
IF sy-subrc = 0.
SELECT SINGLE * INTO L_T_SD023 FROM ZZT_SD_023
WHERE KUNNR = gt_alv_head-KUNNR AND VKORG = gt_alv_head-VKORG AND MATNR = gt_alv_item-matnr AND GJAHR = L_V_GJAHR.
IF SY-SUBRC = 0.
IF L_T_SD023-ZCHEC NE 'X'.
gt_alv_item-message = '客户该物料退货率过高'.
gt_alv_item-status = icon_red_light.
l_continue = 'X'.
MODIFY gt_alv_item.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF l_continue = 'X'.
CONTINUE.
ENDIF.
* 判断授信额度
READ TABLE gt_alv_head WITH KEY vbeln = lt_alv_item-vbeln.
IF sy-subrc = 0.
IF NOT ( gt_alv_head-auart = 'ZBCE' OR gt_alv_head-auart = 'ZBDE' OR gt_alv_head-auart = 'ZBRE')."排除三种订单类型
l_sum_netpr = 0.
*Changed By Ryan Liu
LOOP AT gt_alv_item WHERE sel = 'X' AND kunnr = lt_alv_item-kunnr."AND vbeln = lt_alv_item-vbeln.
l_sum_netpr = l_sum_netpr + gt_alv_item-sum_netpr."交货总金额
ENDLOOP.
IF l_sum_netpr > gt_alv_head-zkyed."交货总金额 > 可用额度
LOOP AT gt_alv_item WHERE sel = 'X' AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = '可用授信额度不足'.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
CONTINUE.
ENDIF.
IF gt_alv_head-zcqts > 0. "超期天数小于0
LOOP AT gt_alv_item WHERE sel = 'X' AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = '超期天数大于0'.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
CONTINUE.
ENDIF.
*inserted by pym 20121231
IF SY-DATUM+0(4) >= 2013.
DATA L_T_SD019 LIKE ZZT_SD_019.
SELECT SINGLE * INTO L_T_SD019 FROM ZZT_SD_019
WHERE KUNNR = gt_alv_head-KUNNR AND VKORG = gt_alv_head-VKORG AND ZCHEC = 'X' AND GJAHR = SY-DATUM+0(4).
IF SY-SUBRC NE 0.
LOOP AT gt_alv_item WHERE sel = 'X' AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = '客户合同未启用'.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
CONTINUE.
ENDIF.
DATA L_T_SD018 LIKE ZZT_SD_018.
*DATA L_V_GJAHR LIKE ZZT_SD_018-GJAHR.
*L_V_GJAHR = SY-DATUM+0(4).
*L_V_GJAHR = L_V_GJAHR - 1 .
SELECT SINGLE * INTO L_T_SD018 FROM ZZT_SD_018 WHERE KUNNR = gt_alv_head-KUNNR AND VKORG = gt_alv_head-VKORG AND GJAHR = SY-DATUM+0(4).
IF SY-SUBRC = 0.
IF L_T_SD018-WRBTR > 0 AND L_T_SD018-ZCHEC NE 'X'.
LOOP AT gt_alv_item WHERE sel = 'X' AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = '客户上年欠款'.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
CONTINUE.
ENDIF.
ENDIF.
SELECT SINGLE * INTO L_T_SD023 FROM ZZT_SD_023
WHERE KUNNR = gt_alv_head-KUNNR AND VKORG = gt_alv_head-VKORG AND MATNR = '' AND GJAHR = L_V_GJAHR.
IF SY-SUBRC = 0.
IF L_T_SD023-ZCHEC NE 'X'.
LOOP AT gt_alv_item WHERE sel = 'X' AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = '客户退货率过高'.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
*endofinstert
*Insert By Ryan Liu In 28.06.2012 15:15:17.
DATA:ty_hkl TYPE zzt_sd_003a.
SELECT SINGLE * INTO ty_hkl FROM zzt_sd_003a WHERE vkorg = gt_alv_head-vkorg.
IF ty_hkl-zhkl = 'X'.
IF gt_alv_head-zhklce < 0.
LOOP AT gt_alv_item WHERE sel = 'X' AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = '回款率未达标准'.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
CONTINUE.
ENDIF.
ENDIF.
*End Of Insert.
ENDIF.
ENDIF.
* 相同销售订单同一交货单
LOOP AT gt_alv_item WHERE sel = 'X'
AND vbeln = lt_alv_item-vbeln.
lt_item-ref_doc = gt_alv_item-vbeln."参考凭证
lt_item-ref_item = gt_alv_item-posnr."参考项
lt_item-dlv_qty = gt_alv_item-cur_menge."实际已交货量(按销售单位)
lt_item-sales_unit = gt_alv_item-vrkme."销售单位
APPEND lt_item.
lt_vbap-vbeln = gt_alv_item-vbeln."销售凭证
lt_vbap-posnr = gt_alv_item-posnr."销售凭证行
lt_vbap-lgort = gt_alv_item-lgort."库存地点
APPEND lt_vbap.
ENDLOOP.
EXPORT lt_vbap TO MEMORY ID 'LT_VBAP'.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
* EXPORTING
* ship_point = gt_alv_item-werks
IMPORTING
delivery = l_delevery
TABLES
sales_order_items = lt_item
* serial_numbers = lt_serial
* extension_in = lt_ex1
* deliveries = lt_delnu
* created_items = lt_create
* extension_out = lt_ex2
return = lt_return.
IF l_delevery IS NOT INITIAL.
COMMIT WORK AND WAIT.
* 写提单号和日志消息
LOOP AT gt_alv_item WHERE sel = 'X'
AND vbeln = lt_alv_item-vbeln.
gt_alv_item-vbeln_k = l_delevery.
CONCATENATE '交货单' l_delevery '成功创建;' INTO gt_alv_item-message.
gt_alv_item-status = icon_green_light.
* 更新行交货状态
SELECT SINGLE lfsta
FROM vbup
INTO gt_alv_item-lfsta
WHERE vbeln = gt_alv_item-vbeln
AND posnr = gt_alv_item-posnr.
MODIFY gt_alv_item.
ENDLOOP.
* 更新头交货状态
READ TABLE gt_alv_head WITH KEY vbeln = lt_alv_item-vbeln.
IF sy-subrc = 0.
SELECT SINGLE lfstk
FROM vbuk
INTO gt_alv_head-lfstk
WHERE vbeln = gt_alv_head-vbeln.
MODIFY gt_alv_head INDEX sy-tabix.
ENDIF.
*Inserted By Ryan Liu In 05.07.2012 10:42:25.
LOOP AT gt_alv_head WHERE kunnr = lt_alv_item-kunnr.
* 每次提单成功后都重新获取该客户授信信息
RANGES:r_kunnr FOR vbak-kunnr,
r_vkorg FOR vbak-vkorg.
r_kunnr-sign = 'I'.
r_kunnr-option = 'EQ'.
r_kunnr-low = gt_alv_head-kunnr.
APPEND r_kunnr.
r_vkorg-sign = 'I'.
r_vkorg-option = 'EQ'.
r_vkorg-low = gt_alv_head-vkorg.
APPEND r_vkorg.
CLEAR:lt_sd_01[],lt_sd_02[],lt_sd_03[],lt_sd_04[].
CALL FUNCTION 'ZSDF_016'
* EXPORTING
* I_DATE = SY-DATUM
* I_C1 = 'X'
* I_C2 = 'X'
* i_C3 = 'X'
TABLES
* T_BUKRS =
t_kunnr = r_kunnr
t_vkorg = r_vkorg
* T_VTWEG =
* T_SPART =
t_data1 = lt_sd_01
t_data2 = lt_sd_02
t_data3 = lt_sd_03
t_data4 = lt_sd_04.
READ TABLE lt_sd_02 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-zkyed = lt_sd_02-zkyed.
ENDIF.
READ TABLE lt_sd_03 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-zcqts = lt_sd_03-zcqts.
ENDIF.
READ TABLE lt_sd_04 WITH KEY bukrs = gt_alv_head-bukrs_vf
kunnr = gt_alv_head-kunnr
vkorg = gt_alv_head-vkorg"销售组织
vtweg = gt_alv_head-vtweg"分销渠道
spart = gt_alv_head-spart."产品组
IF sy-subrc = 0.
gt_alv_head-zhklce = lt_sd_04-zhklce.
ENDIF.
MODIFY gt_alv_head.
CLEAR gt_alv_head.
ENDLOOP.
*End Of Insert.
ELSE.
LOOP AT lt_return WHERE type = 'E' OR type = 'A'.
CONCATENATE l_message lt_return-message INTO l_message.
ENDLOOP.
LOOP AT gt_alv_item WHERE sel = 'X'
AND vbeln = lt_alv_item-vbeln.
gt_alv_item-message = l_message.
gt_alv_item-status = icon_red_light.
MODIFY gt_alv_item.
ENDLOOP.
ENDIF.
CLEAR:
l_delevery,l_message,
lt_item,lt_item[],
lt_return,lt_return[].
ENDLOOP.
ENDFORM. " FRM_CREATE
*&---------------------------------------------------------------------*
*& Form frm_update_lgort
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_update_lgort.
DATA:
l_message(220),
l_mode(2),
lt_alv_item LIKE TABLE OF gt_alv_item WITH HEADER LINE,
lt_lips TYPE TABLE OF lips WITH HEADER LINE,
l_vbeln LIKE likp-vbeln,
ls_head TYPE vbkok,
lt_prott TYPE TABLE OF prott WITH HEADER LINE,
lt_item TYPE TABLE OF vbpok WITH HEADER LINE.
lt_alv_item[] = gt_alv_item[].
DELETE lt_alv_item WHERE sel = ''
OR vbeln_k = ''.
SORT lt_alv_item BY vbeln_k.
DELETE ADJACENT DUPLICATES FROM lt_alv_item COMPARING vbeln_k.
LOOP AT lt_alv_item.
* 头数据
ls_head-vbeln_vl = lt_alv_item-vbeln_k.
ls_head-vbeln = lt_alv_item-vbeln_k.
ls_head-stge_loc_change = 'X'.
* 查询对应交货单行数据
SELECT *
INTO TABLE lt_lips
FROM lips
WHERE vbeln = lt_alv_item-vbeln_k.
LOOP AT gt_alv_item WHERE vbeln_k = lt_alv_item-vbeln_k.
READ TABLE lt_lips WITH KEY vgbel = gt_alv_item-vbeln
vgpos = gt_alv_item-posnr.
IF sy-subrc = 0.
IF lt_lips-lgort <> gt_alv_item-lgort."如果交货库存地点不同,以内表数据为准
lt_item-vbeln = lt_lips-vbeln.
lt_item-posnn = lt_lips-posnr.
lt_item-vbeln_vl = lt_lips-vbeln.
lt_item-posnr_vl = lt_lips-posnr.
lt_item-matnr = lt_lips-matnr.
lt_item-werks = lt_lips-werks.
lt_item-lgort = gt_alv_item-lgort.
lt_item-mdiff_lgort = gt_alv_item-lgort.
lt_item-taqui = 'X'.
* lt_item-meins = lt_lips-meins.
* lt_item-lianp = 'X'.
lt_item-kzpod = ' '.
APPEND lt_item.
CLEAR lt_item.
ENDIF.
ENDIF.
ENDLOOP.
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = ls_head
synchron = 'X'
no_messages_update_1 = 'X'
commit = 'X'
delivery = ls_head-vbeln_vl
update_picking = 'X'
* NICHT_SPERREN_1 = ' '
* IF_CONFIRM_CENTRAL = ' '
* IF_WMPP = ' '
* IF_GET_DELIVERY_BUFFERED = ' '
* IF_NO_GENERIC_SYSTEM_SERVICE = ' '
* IF_DATABASE_UPDATE_1 = '1'
* IF_NO_INIT_1 = ' '
* IF_NO_READ_1 = ' '
* IF_ERROR_MESSAGES_SEND = 'X'
* IF_NO_BUFFER_REFRESH = ' '
* IT_PARTNER_UPDATE =
* IT_SERNR_UPDATE =
* IF_NO_REMOTE_CHG_1 = ' '
* IF_NO_MES_UPD_PACK = ' '
* IF_LATE_DELIVERY_UPD = ' '
* IF_TXT_REINITIALIZE =
* IF_BOR_INIT = ' '
* SPE_MES_NO_SEND_NODIAL =
* IT_LECOMP_1 =
TABLES
vbpok_tab = lt_item
prot = lt_prott.
* CALL FUNCTION ' WS_DELIVERY_UPDATE_2'
* EXPORTING
* vbkok_wa = ls_head
* synchron = 'X'
* commit = 'X'
* update_picking = 'X'
* delivery = ls_head-vbeln_vl
* TABLES
** it_packing = lt_item
* vbpok_tab = lt_item
* prot = lt_prott
* EXCEPTIONS
* error_message = 1.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
CONCATENATE '交货单'
lt_alv_item-vbeln_k '库存地点更改成功;'
INTO l_message.
ELSE.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = sy-msgid
msgnr = sy-msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
message_text_output = l_message.
gt_alv_item-status = icon_red_light.
ENDIF.
* 更新日志信息
LOOP AT gt_alv_item WHERE vbeln_k = lt_alv_item-vbeln_k.
CONCATENATE gt_alv_item-message l_message INTO gt_alv_item-message.
MODIFY gt_alv_item TRANSPORTING message.
ENDLOOP.
CLEAR:ls_head,lt_item,lt_item[].
ENDLOOP.
ENDFORM. "frm_update_lgort
*&---------------------------------------------------------------------*
*& Form frm_change_lgort
*&---------------------------------------------------------------------*
* 更改交货单库存地点
*----------------------------------------------------------------------*
FORM frm_change_lgort .
DATA:
l_message(220),
l_mode(2),
lt_alv_item LIKE TABLE OF gt_alv_item WITH HEADER LINE,
lt_lips TYPE TABLE OF lips WITH HEADER LINE,
ls_vbpa TYPE vbpa,
ls_header_data TYPE bapiobdlvhdrchg,
ls_header_control TYPE bapiobdlvhdrctrlchg,
ls_techn_control TYPE bapidlvcontrol,
lt_header_partner TYPE TABLE OF bapidlvpartnerchg WITH HEADER LINE,
lt_item_data TYPE TABLE OF bapiobdlvitemchg WITH HEADER LINE,
lt_item_control TYPE TABLE OF bapiobdlvitemctrlchg WITH HEADER LINE,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
lt_alv_item[] = gt_alv_item[].
DELETE lt_alv_item WHERE sel = ''
OR vbeln_k = ''.
SORT lt_alv_item BY vbeln_k.
DELETE ADJACENT DUPLICATES FROM lt_alv_item COMPARING vbeln_k.
LOOP AT lt_alv_item.
ls_header_data-deliv_numb = lt_alv_item-vbeln_k.
ls_header_control-deliv_numb = lt_alv_item-vbeln_k.
* 查询对应交货单行数据
SELECT *
INTO TABLE lt_lips
FROM lips
WHERE vbeln = lt_alv_item-vbeln_k.
LOOP AT gt_alv_item WHERE vbeln_k = lt_alv_item-vbeln_k.
READ TABLE lt_lips WITH KEY vgbel = gt_alv_item-vbeln
vgpos = gt_alv_item-posnr.
IF sy-subrc = 0.
IF lt_lips-lfimg <> gt_alv_item-cur_menge."如果交货单数量不同,以内表数据为准
lt_item_data-deliv_numb = lt_alv_item-vbeln_k.
lt_item_data-deliv_item = lt_lips-posnr.
lt_item_data-material = lt_lips-matnr.
lt_item_data-dlv_qty = gt_alv_item-cur_menge.
lt_item_data-fact_unit_nom = 1.
lt_item_data-fact_unit_denom = 1.
APPEND lt_item_data.
CLEAR lt_item_data.
lt_item_control-deliv_numb = lt_alv_item-vbeln_k.
lt_item_control-deliv_item = lt_lips-posnr.
lt_item_control-chg_delqty = 'X'.
APPEND lt_item_control.
CLEAR lt_item_control.
ENDIF.
ENDIF.
ENDLOOP.
* 行项目,修改交货数量
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = lt_alv_item-vbeln_k
techn_control = ls_techn_control
TABLES
header_partner = lt_header_partner
item_data = lt_item_data
item_control = lt_item_control
return = lt_return.
IF lt_return[] IS INITIAL.
COMMIT WORK AND WAIT.
IF l_mode = 'X'.
CONCATENATE '交货单'
lt_alv_item-vbeln_k '库存地点'
lt_alv_item-lifnr '更改成功;'
INTO l_message.
ENDIF.
ELSE.
PERFORM frm_fill_msg TABLES lt_return CHANGING l_message.
ENDIF.
* 更新日志信息
LOOP AT gt_alv_item WHERE vbeln_k = lt_alv_item-vbeln_k.
CONCATENATE gt_alv_item-message l_message INTO gt_alv_item-message.
MODIFY gt_alv_item TRANSPORTING message.
ENDLOOP.
CLEAR:
l_mode,
ls_header_data,ls_header_control,ls_techn_control,
lt_header_partner,lt_header_partner[],
lt_item_data,lt_item_data[],
lt_item_control,lt_item_control[],
lt_return,lt_return[].
ENDLOOP.
ENDFORM. " frm_change_lgort
*&---------------------------------------------------------------------*
*& Form FRM_ALPHA_INPUT
*&---------------------------------------------------------------------*
* 补前置0
*----------------------------------------------------------------------*
FORM frm_alpha_input CHANGING p_input.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = p_input
IMPORTING
output = p_input.
ENDFORM. " FRM_ALPHA_INPUT
*&---------------------------------------------------------------------*
*& Form FRM_GET_LIFNR_NAME
*&---------------------------------------------------------------------*
* 获取供应商名称
*----------------------------------------------------------------------*
* -->P_LIFNR 供应商
* <--P_NAME 供应商名称
*----------------------------------------------------------------------*
FORM frm_get_lifnr_name USING p_lifnr
CHANGING p_name.
SELECT SINGLE name1
INTO p_name
FROM lfa1
WHERE lifnr = p_lifnr.
ENDFORM. " FRM_GET_LIFNR_NAME
*&---------------------------------------------------------------------*
*& Form FRM_STORE_ITEM
*&---------------------------------------------------------------------*
* 存储item
*----------------------------------------------------------------------*
FORM frm_store_item .
LOOP AT gt_alv_item.
READ TABLE gt_alv_item_store WITH KEY vbeln = gt_alv_item-vbeln
posnr = gt_alv_item-posnr.
IF sy-subrc = 0.
MOVE-CORRESPONDING gt_alv_item TO gt_alv_item_store.
MODIFY gt_alv_item_store INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_STORE_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_SCREEN
*&---------------------------------------------------------------------*
* 刷新ALV Container所在屏幕,触发PAI
*----------------------------------------------------------------------*
FORM frm_refresh_screen .
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = '\00'.
CALL METHOD cl_gui_cfw=>flush.
ENDFORM. " FRM_REFRESH_SCREEN
*&---------------------------------------------------------------------*
*& Form FRM_SUM
*&---------------------------------------------------------------------*
* 累计
*----------------------------------------------------------------------*
FORM frm_sum .
CLEAR:in_wqsl,in_jhsl,in_jhtj.
LOOP AT gt_alv_item WHERE sel = 'X'.
in_wqsl = in_wqsl + gt_alv_item-menge.
in_jhsl = in_jhsl + gt_alv_item-cur_menge.
in_jhtj = in_jhtj + gt_alv_item-cur_menge * gt_alv_item-volum.
ENDLOOP.
ENDFORM. " FRM_SUM
*&---------------------------------------------------------------------*
*& Form FRM_SET_DISABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_set_disable .
LOOP AT gt_alv_item WHERE vbeln_k IS NOT INITIAL.
CLEAR gt_alv_item-cellstyles[].
gt_alv_item-sel = ''.
PERFORM frm_set_edit USING 'SEL' 'DISABLE' CHANGING gt_alv_item-cellstyles.
PERFORM frm_set_edit USING 'CUR_MENGE' 'DISABLE' CHANGING gt_alv_item-cellstyles.
PERFORM frm_set_edit USING 'WERKS' 'DISABLE' CHANGING gt_alv_item-cellstyles.
* PERFORM frm_set_edit USING 'LGORT' 'DISABLE' CHANGING gt_alv_item-cellstyles.
* PERFORM frm_set_edit USING 'CHARG' 'DISABLE' CHANGING gt_alv_item-cellstyles.
MODIFY gt_alv_item.
ENDLOOP.
ENDFORM. " FRM_SET_DISABLE
*&---------------------------------------------------------------------*
*& Form frm_set_edit
*&---------------------------------------------------------------------*
* 设置字段是否可编辑
*----------------------------------------------------------------------*
* -->P_FIELDNAME 字段名
* -->P_ENABLE 是否可用
* <--P_T_STYLE 样式表
*----------------------------------------------------------------------*
FORM frm_set_edit USING p_fieldname
p_enable
CHANGING pt_style TYPE lvc_t_styl.
DATA lw_style TYPE lvc_s_styl.
lw_style-fieldname = p_fieldname.
IF p_enable = 'DISABLE'.
lw_style-style = cl_gui_alv_grid=>mc_style_disabled.
ELSE.
lw_style-style = cl_gui_alv_grid=>mc_style_enabled.
ENDIF.
INSERT lw_style INTO TABLE pt_style.
ENDFORM. " frm_set_edit
*&---------------------------------------------------------------------*
*& Form FRM_DO_BDC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_do_bdc .
DATA:
l_mode VALUE 'N',
l_type,
l_message(220),
l_delivery TYPE likp-vbeln,
lt_bdc LIKE TABLE OF bdcdata WITH HEADER LINE,
lt_mtab LIKE TABLE OF bdcmsgcoll WITH HEADER LINE,
lt_alv_item LIKE TABLE OF gt_alv_item WITH HEADER LINE.
LOOP AT gt_alv_item WHERE sel = 'X'.
MOVE-CORRESPONDING gt_alv_item TO lt_alv_item.
APPEND lt_alv_item.
CLEAR lt_alv_item.
ENDLOOP.
*销售凭证类型,售达方,送达方,货运代理,装运点,头产品组
SORT lt_alv_item BY auart kunnr kunwe lifnr vstel spart_head.
DELETE ADJACENT DUPLICATES FROM lt_alv_item COMPARING auart kunnr kunwe lifnr vstel spart_head.
LOOP AT lt_alv_item.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING 'X' 'SAPMV50A' '4001'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'BDC_OKCODE' '/00'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LIKP-VSTEL' lt_alv_item-vstel.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-DATBI' '99991231'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-VBELN' lt_alv_item-vbeln.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-ABPOS' lt_alv_item-posnr.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-BIPOS' lt_alv_item-posnr.
LOOP AT gt_alv_item WHERE auart = lt_alv_item-auart
AND kunnr = lt_alv_item-kunnr
AND kunwe = lt_alv_item-kunwe
AND lifnr = lt_alv_item-lifnr
AND vstel = lt_alv_item-vstel
AND sel = 'X'.
IF gt_alv_item-vbeln = lt_alv_item-vbeln
AND gt_alv_item-posnr = lt_alv_item-posnr.
CONTINUE.
ENDIF.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING 'X' 'SAPMV50A' '1000'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'BDC_OKCODE' '=RAUF_T'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING 'X' 'SAPMV50A' '0105'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'BDC_OKCODE' '=ENT1'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-DATBI' '99991231'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-VBELN' gt_alv_item-vbeln.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-ABPOS' gt_alv_item-posnr.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'LV50C-BIPOS' gt_alv_item-posnr.
ENDLOOP.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING 'X' 'SAPMV50A' '1000'.
PERFORM frm_fill_bdc_table TABLES lt_bdc USING '' 'BDC_OKCODE' '=SICH_T'.
CALL TRANSACTION 'VL01N' USING lt_bdc
MESSAGES INTO lt_mtab
MODE l_mode.
PERFORM frm_fill_bdc_msg TABLES lt_mtab CHANGING l_message.
READ TABLE lt_mtab WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
l_type = 'E'.
ENDIF.
* 写交货单
READ TABLE lt_mtab WITH KEY msgid = 'VL'
msgnr = '311'.
IF sy-subrc = 0.
l_delivery = lt_mtab-msgv2.
CONCATENATE '交货单'l_delivery '已保存;' INTO l_message.
PERFORM frm_alpha_input CHANGING l_delivery.
COMMIT WORK AND WAIT.
ENDIF.
* 写日志信息
LOOP AT gt_alv_item WHERE auart = lt_alv_item-auart
AND kunnr = lt_alv_item-kunnr
AND kunwe = lt_alv_item-kunwe
AND lifnr = lt_alv_item-lifnr
AND vstel = lt_alv_item-vstel
AND sel = 'X'.
gt_alv_item-vbeln_k = l_delivery.
gt_alv_item-message = l_message.
IF l_type = 'E'.
gt_alv_item-status = icon_red_light.
ELSE.
gt_alv_item-status = icon_green_light.
ENDIF.
MODIFY gt_alv_item.
* 更新头交货状态
READ TABLE gt_alv_head WITH KEY vbeln = gt_alv_item-vbeln.
IF sy-subrc = 0.
SELECT SINGLE lfstk
FROM vbuk
INTO gt_alv_head-lfstk
WHERE vbeln = gt_alv_head-vbeln.
MODIFY gt_alv_head INDEX sy-tabix.
ENDIF.
ENDLOOP.
CLEAR:l_delivery,l_message,
lt_mtab,lt_mtab[],lt_bdc,lt_bdc[].
ENDLOOP.
WAIT UP TO 1 SECONDS.
ENDFORM. " FRM_DO_BDC
*&---------------------------------------------------------------------*
*& Form fill_bdc_table
*&---------------------------------------------------------------------*
* BDC填充数据
*----------------------------------------------------------------------*
FORM frm_fill_bdc_table TABLES pt_bdc STRUCTURE bdcdata
USING:p_flag p_var1 p_var2.
CLEAR pt_bdc.
IF p_flag = 'X'.
pt_bdc-program = p_var1.
pt_bdc-dynpro = p_var2.
pt_bdc-dynbegin = 'X'.
ELSE.
pt_bdc-fnam = p_var1.
pt_bdc-fval = p_var2.
ENDIF.
APPEND pt_bdc.
ENDFORM. " fill_bdc_table
*&---------------------------------------------------------------------*
*& Form FRM_FILL_BDCMSG
*&---------------------------------------------------------------------*
* 填充信息
*----------------------------------------------------------------------*
* <-- P_MESSAGE 消息
*----------------------------------------------------------------------*
FORM frm_fill_bdc_msg TABLES pt_mtab STRUCTURE bdcmsgcoll
CHANGING p_message.
DATA:
l_message(220).
LOOP AT pt_mtab.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = pt_mtab-msgid
msgnr = pt_mtab-msgnr
msgv1 = pt_mtab-msgv1
msgv2 = pt_mtab-msgv2
msgv3 = pt_mtab-msgv3
msgv4 = pt_mtab-msgv4
IMPORTING
message_text_output = l_message.
CONDENSE p_message.
CONCATENATE p_message l_message INTO p_message SEPARATED BY ' '.
ENDLOOP.
ENDFORM. " FRM_FILL_MESSAGE
*&---------------------------------------------------------------------*
*& Form FRM_VARIANT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PS_VARIANT text
*----------------------------------------------------------------------*
FORM frm_variant USING mode CHANGING ps_variant TYPE disvariant.
ps_variant-report = sy-repid."ABAP 程序名称
ps_variant-handle = mode."从相同程序重复调用管理标识
ps_variant-log_group = ''."逻辑组名
ps_variant-username = sy-uname."特定用户存储的用户名称
ps_variant-variant = ''."格式
ps_variant-text = ''."布局的描述
ps_variant-dependvars = '' ."相关变式条目向量
ENDFORM. " FRM_VARIANT
*&---------------------------------------------------------------------*
*& Form frm_f4_cb
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RECORD_TAB text
* -->SHLP text
* -->CALLCONTROL text
*----------------------------------------------------------------------*
FORM frm_f4_cb TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr_t
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '5'.
interface-valfield = 'CHARG'.
APPEND interface TO shlp-interface.
interface-shlpfield+4(1) = '3'.
interface-valfield = 'LGOBE'.
APPEND interface TO shlp-interface.
ENDFORM. "frm_f4_cb
*&---------------------------------------------------------------------*
*& Form frm_f4_cb_1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RECORD_TAB text
* -->SHLP text
* -->CALLCONTROL text
*----------------------------------------------------------------------*
FORM frm_f4_cb_1 TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr_t
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '3'.
interface-valfield = 'LGOBE'.
APPEND interface TO shlp-interface.
ENDFORM. "frm_f4_cb_1
*&---------------------------------------------------------------------*
*& Form FRM_SAVE_ITEM
*&---------------------------------------------------------------------*
* 仅更新销售订单行交货工厂
*----------------------------------------------------------------------*
FORM frm_save_item .
DATA:
l_count TYPE int4,
ls_header TYPE zzs_005,
lt_item TYPE TABLE OF zzs_003 WITH HEADER LINE,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
LOOP AT gt_alv_item WHERE sel = 'X'
AND werks_change = 'X'.
CLEAR:ls_header,
lt_item,lt_item[],
lt_return,lt_return[].
ADD 1 TO l_count.
* 头数据
ls_header-vbeln = gt_alv_item-vbeln.
* 行数据
lt_item-posnr = gt_alv_item-posnr.
lt_item-matnr = gt_alv_item-matnr.
lt_item-werks = gt_alv_item-werks.
APPEND lt_item.
CALL FUNCTION 'ZSDF_015'
EXPORTING
i_header = ls_header
TABLES
t_item = lt_item[]
t_return = lt_return[].
READ TABLE lt_return WITH KEY type = 'E'.
IF sy-subrc = 0.
gt_alv_item-message = gt_alv_item-message && lt_return-message.
ELSE.
gt_alv_item-message = gt_alv_item-message && '交货工厂已成功更改。'.
gt_alv_item-werks_change = ''.
ENDIF.
MODIFY gt_alv_item.
ENDLOOP.
IF l_count = 0.
* 007 销售订单没有做任何更改
MESSAGE s007.
ENDIF.
ENDFORM. " FRM_SAVE_ITEM
*&---------------------------------------------------------------------*
*& Form FRM_ZERO_INPUT
*&---------------------------------------------------------------------*
* 补齐小数点后的零
*----------------------------------------------------------------------*
* >--P_DIGIT text
* <--P_INPUT text
*----------------------------------------------------------------------*
FORM frm_zero_input USING p_digit CHANGING p_input.
DATA:
l_len TYPE i,
l_circle TYPE i,
l_str1 TYPE string,
l_str2 TYPE string.
SPLIT p_input AT '.'
INTO l_str1 l_str2.
CONDENSE:l_str1,l_str2 NO-GAPS.
l_len = strlen( l_str2 ).
l_circle = p_digit - l_len.
DO l_circle TIMES.
CONCATENATE l_str2 '0' INTO l_str2.
ENDDO.
CONCATENATE l_str1 '.'
l_str2 INTO p_input.
CONDENSE p_input.
ENDFORM. " FRM_ZERO_INPUT
*&---------------------------------------------------------------------*
*& Form FRM_ALPHA_OUTPUT
*&---------------------------------------------------------------------*
* 去前置0
*----------------------------------------------------------------------*
FORM frm_alpha_output CHANGING p_output.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = p_output
IMPORTING
output = p_output.
ENDFORM. " FRM_ALPHA_OUTPUT
*&---------------------------------------------------------------------*
*& Form frm_read_text
*&---------------------------------------------------------------------*
* 读取文本
*----------------------------------------------------------------------*
FORM frm_read_text USING p_vbeln
CHANGING p_sgtxt.
DATA:
l_tdname TYPE thead-tdname,
lt_line TYPE TABLE OF tline WITH HEADER LINE.
CLEAR:lt_line,lt_line[].
l_tdname = p_vbeln.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = '0001'
language = '1'
name = l_tdname
object = 'VBBK'
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
LOOP AT lt_line.
CONCATENATE p_sgtxt lt_line-tdline INTO p_sgtxt.
ENDLOOP.
ENDIF.
ENDFORM. " frm_read_text
*&---------------------------------------------------------------------*
*& Form frm_read_text
*&---------------------------------------------------------------------*
* 读取文本
*----------------------------------------------------------------------*
FORM frm_read_item_text USING p_vbeln
p_posnr
CHANGING p_sgtxt.
DATA:
l_tdname TYPE thead-tdname,
lt_line TYPE TABLE OF tline WITH HEADER LINE.
CLEAR:lt_line,lt_line[].
CONCATENATE p_vbeln p_posnr INTO l_tdname.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = '0001'
language = '1'
name = l_tdname
object = 'VBBP'
TABLES
lines = lt_line
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc = 0.
LOOP AT lt_line.
CONCATENATE p_sgtxt lt_line-tdline INTO p_sgtxt.
ENDLOOP.
ENDIF.
ENDFORM. " frm_read_text
- zsdr0006
- SQL存储过程
- only available on JDK 1.5 and higher at * org.springframework.beans.factory.
- YARN NM与RM通信
- JS+JSON字符转义(escape)的几种方案
- Maximum Depth of Binary Tree
- zsdr0006
- android解析php输出的json格式字符串实例
- 同步逻辑和异步逻辑
- Android 完美实现图片圆角和圆形(对实现进行分析)
- 多线程之Semaphore实现线程同步
- Android Java执行Shell命令
- Oracle 系统管理员密码忘记解决办法
- delphi 中 virtual、reintroduce、override关键词的使用
- Ubuntu 14.04.1 installed on Dell Inspiron 1420