************************************************************************
* Program Title:
*
* Created by:
*
* Description:
* Module name: 无
* Type: REPORT
* Special note: None
**----------------------------------------------------------------------
* Associated program: No programs are associated
*-----------------------------------------------------------------------
* Restriction: No restriction
************************************************************************
************************************************************************
REPORT ZPP_ISSUE NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* TABLE DECLARATION
*----------------------------------------------------------------------*
TYPE-POOLS:SLIS.
*INCLUDE <ICON>.
TYPE-POOLS VRM.
TABLES :
SSCRFIELDS,
MARA,
ZZTPP_ZSTZ_HEAD,
ZSCRAP,
MKPF.
*&---------------------------------------------------------------------*
* STRUCTURE DECLARATION
*&---------------------------------------------------------------------*
TYPES :
BEGIN OF T_SCRAP.
INCLUDE STRUCTURE ZSCRAP.
TYPES : MAKTX TYPE MAKTX,
AMOUNT TYPE ZLABST,
NAME1 TYPE NAME1_GP,"供应商名称
TEXT TYPE CHAR50,
MARK TYPE C.
TYPES :END OF T_SCRAP.
*货币码F4帮助
TYPES : BEGIN OF T_TCURT,
WAERS TYPE WAERS_CURC ,
LTEXT TYPE LTEXT,
KTEXT TYPE KTEXT_CURT,
END OF T_TCURT.
*批次号F4帮助
TYPES : BEGIN OF T_CHARG,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
CHARG TYPE CHARG_D,
LABST TYPE ZLABST,
END OF T_CHARG.
* Type for Search help
TYPES: BEGIN OF T_SHLP_MATNR,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
WERKS TYPE WERKS_D,
END OF T_SHLP_MATNR.
TYPES:BEGIN OF TY_MESSAGE,
MESSAGE(500) TYPE C,
END OF TY_MESSAGE.
*&---------------------------------------------------------------------*
* INTERNAL TABLE DECLARATION
*&---------------------------------------------------------------------*
DATA :
*物料号F4帮助
I_SEARCH_M TYPE STANDARD TABLE OF T_SHLP_MATNR,
*批次号F4帮助
I_CHARG TYPE STANDARD TABLE OF T_CHARG,
*货币代码F4帮助
I_SEARCH TYPE STANDARD TABLE OF T_TCURT,
*确认收货
I_RECEIVE TYPE STANDARD TABLE OF T_SCRAP,
*输入发货
I_ISSUE TYPE STANDARD TABLE OF T_SCRAP,
*历史收货
I_IN TYPE STANDARD TABLE OF T_SCRAP,
*历史售出
I_OUT TYPE STANDARD TABLE OF T_SCRAP,
*历史余留
I_LEFT TYPE STANDARD TABLE OF T_SCRAP,
*当前库存
I_STOCK TYPE STANDARD TABLE OF T_SCRAP,
*冲销内表
I_WF TYPE STANDARD TABLE OF T_SCRAP.
*&---------------------------------------------------------------------*
* WORK AREA DECLARATION
*&---------------------------------------------------------------------*
DATA :
*确认收货
WA_RECEIVE TYPE T_SCRAP,
*输入发货
WA_ISSUE TYPE T_SCRAP,
WA_FCAT TYPE LVC_S_FCAT,
WA_WF TYPE T_SCRAP.
**** Object variable for ALV Container
DATA:
GV_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GV_CONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GV_CONTAINER3 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GV_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
GV_GRID2 TYPE REF TO CL_GUI_ALV_GRID,
GV_GRID3 TYPE REF TO CL_GUI_ALV_GRID,
I_FCAT1 TYPE LVC_T_FCAT,
I_FCAT2 TYPE LVC_T_FCAT,
I_FCAT3 TYPE LVC_T_FCAT,
I_SORT1 TYPE LVC_T_SORT,
I_SORT2 TYPE LVC_T_SORT,
I_SORT3 TYPE LVC_T_SORT,
GV_LAYOUT1 TYPE LVC_S_LAYO,
GV_LAYOUT2 TYPE LVC_S_LAYO,
GV_LAYOUT3 TYPE LVC_S_LAYO.
**** ALV
DATA :
*ALV Fieldcat
I_FIELDCATS TYPE SLIS_T_FIELDCAT_ALV,
*排序条件
I_SORT TYPE SLIS_T_SORTINFO_ALV,
*Event
I_EVENT TYPE SLIS_T_EVENT,
*ALV头信息
I_TITLE TYPE SLIS_T_LISTHEADER,
*ALV布局
GV_LAYOUT TYPE SLIS_LAYOUT_ALV,
*ALV头
T_HEADER TYPE SLIS_T_LISTHEADER,
*ALV头工作区
WA_HEADER TYPE SLIS_LISTHEADER.
*&---------------------------------------------------------------------*
* VARIANT DECLARATION
*&---------------------------------------------------------------------*
DATA :
OK_CODE1 TYPE SY-UCOMM,
OK_CODE2 TYPE SY-UCOMM,
OK_CODE3 TYPE SY-UCOMM,
OK_CODE4 TYPE SY-UCOMM,
OK_CODE5 TYPE SY-UCOMM,
OK_CODE6 TYPE SY-UCOMM,
OK_CODE7 TYPE SY-UCOMM,
*选择屏幕校验
GV_CFLAG TYPE C,
*------Screen 9000
GV_RECDATE TYPE D,
GV_INFLAG1 TYPE C,
GV_REMARK1 TYPE ZREMARK,
*------Screen 9001
GV_ISSDATE TYPE MKPF-BUDAT,
GV_INFLAG2 TYPE C,
GV_REMARK2 TYPE ZREMARK,
GV_TOTAL TYPE ZVMSAL,
GV_SABST TYPE ZSABST,
GV_LABST TYPE ZLABST,
*------Screen 9003
GV_MONTH TYPE CHAR50,
GV_START TYPE D,
GV_FINISH TYPE D,
GV_NAME TYPE BUTXT,
*------Screen 9008
GV_WFMESSAGE TYPE CHAR255,
*消息Bapi
GW_MESSAGE TYPE TY_MESSAGE.
*&---------------------------------------------------------------------*
* Constant DECLARATION
*&---------------------------------------------------------------------*
CONSTANTS :
C_RATE(16) TYPE P DECIMALS 2 VALUE '0.93',
C_PLANT TYPE WERKS_D VALUE '1201',
C_RECEIVE TYPE C VALUE 'I',
C_ISSUE TYPE C VALUE 'O'.
*&---------------------------------------------------------------------*
* SELECTION SCREEN DECLARATION
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-T01.
SELECTION-SCREEN FUNCTION KEY 1.
* Receive - 收货
SELECTION-SCREEN COMMENT /1(30) TEXT-001 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R1 RADIOBUTTON GROUP RAD1 USER-COMMAND UC DEFAULT 'X'.
SELECTION-SCREEN COMMENT 6(30) TEXT-004 FOR FIELD P_R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-007.
SELECT-OPTIONS: S_BTBHA FOR ZZTPP_ZSTZ_HEAD-BTBHA NO INTERVALS
MATCHCODE OBJECT ZBTBHA MODIF ID M1 NO-EXTENSION .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Issue - 售出
SELECTION-SCREEN COMMENT /1(30) TEXT-002 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R2 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-005 FOR FIELD P_R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Subcontract - 委外
SELECTION-SCREEN COMMENT /1(30) TEXT-016 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R5 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-017 FOR FIELD P_R5.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Stock - 存货
SELECTION-SCREEN COMMENT /1(30) TEXT-003 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R3 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-006 FOR FIELD P_R3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
*选择条件行次
*年月
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-009.
SELECT-OPTIONS: S_MONTH FOR ZSCRAP-ERDAT+0(6) MODIF ID M2 NO-EXTENSION
DEFAULT SY-DATUM+0(6).
SELECTION-SCREEN END OF LINE.
*物料号
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-008.
SELECT-OPTIONS: S_MATNR FOR ZSCRAP-MATNR MODIF ID M2 NO-EXTENSION.
SELECTION-SCREEN END OF LINE.
*批次
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-022.
SELECT-OPTIONS: S_CHARG FOR ZSCRAP-CHARG MODIF ID M3 NO-EXTENSION.
SELECTION-SCREEN END OF LINE.
*库位
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-031.
SELECT-OPTIONS: S_LGORT FOR ZSCRAP-LGORT
MATCHCODE OBJECT H_T001L MODIF ID M3 NO-EXTENSION.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
*当前库存
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R4 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-015 FOR FIELD P_R4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Merge - 批次合并
SELECTION-SCREEN COMMENT /1(30) TEXT-027 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R7 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(50) TEXT-028 FOR FIELD P_R7.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Write-off - 冲销
SELECTION-SCREEN COMMENT /1(30) TEXT-020 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R6 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-021 FOR FIELD P_R6.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 5(24) BUT USER-COMMAND CLI.
SELECTION-SCREEN END OF BLOCK BK1 .
SELECTION-SCREEN COMMENT 1(82) TEXT-029.
SELECTION-SCREEN SKIP 1.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
"按钮文本
BUT = TEXT-019.
CLEAR : GV_CFLAG.
REFRESH :
*确认收货
I_RECEIVE,
*输入发货
I_ISSUE ,
*历史收货
I_IN ,
*历史售出
I_OUT,
*历史余留
I_LEFT,
*当前库存
I_STOCK.
SSCRFIELDS-FUNCTXT_01 = TEXT-032.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*屏幕初始化
PERFORM FRM_SET_SCREEN.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
DATA:
LT_RSPAR TYPE TABLE OF RSPARAMS,
LW_LINE LIKE LINE OF LT_RSPAR.
IF SSCRFIELDS-UCOMM = 'FC01'.
REFRESH LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003010300000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003010400000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003100100000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003100300000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003100900000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'WERKS'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '1201'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'PA_SOND'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = 'X'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'NEGATIV'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = ''.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'XMCHB'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = 'X'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'NOZERO'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = 'X'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'NOVALUES'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = ''.
APPEND LW_LINE TO LT_RSPAR.
SUBMIT RM07MLBS VIA SELECTION-SCREEN WITH SELECTION-TABLE LT_RSPAR AND RETURN.
ENDIF.
IF SY-UCOMM = 'CLI'.
CALL SCREEN 9002 STARTING AT 20 5 ENDING AT 100 12.
ENDIF.
*选择屏幕校验
PERFORM FRM_CHECK_SCREEN.
* search help for material number
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.
PERFORM FRM_F4_HELP.
* search help for material number
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-HIGH.
PERFORM FRM_F4_HELP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MONTH-LOW.
PERFORM FRM_F4_DATE1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MONTH-HIGH.
PERFORM FRM_F4_DATE2.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA :
LV_ANSWER TYPE C.
SELECT SINGLE BUTXT
INTO GV_NAME
FROM T001
WHERE BUKRS = '1200'.
CHECK GV_CFLAG = ''.
IF P_R1 = 'X'.
PERFORM FRM_GET_DATA.
IF I_RECEIVE IS NOT INITIAL.
CALL SCREEN 9000.
ELSE.
MESSAGE '没有需要确认的收货!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ELSEIF P_R2 = 'X'.
CALL SCREEN 9001. "售出废料
ELSEIF P_R5 = 'X'.
CALL SCREEN 9007. "委外加工
ELSEIF P_R3 = 'X'.
* show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在处理,请稍等......'. "Preparing list output
*取’年月‘选择条件
PERFORM FRM_GET_DATE CHANGING GV_START GV_FINISH.
CALL SCREEN 9003.
ELSEIF P_R4 = 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
* DEFAULTOPTION = 'Y'
DIAGNOSETEXT1 = '此操作为查看现有废铜棉的数量'
DIAGNOSETEXT2 = '可能会存在大量记录,请确认是否查看!'
* DIAGNOSETEXT3 = ' '
TEXTLINE1 = '确认查看,请点击<是>,返回点击<取消>!'
* TEXTLINE2 = ' '
TITEL = '友情提示'
* START_COLUMN = 25
* START_ROW = 6
* CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = LV_ANSWER
.
IF LV_ANSWER = 'J'.
* show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在处理,请稍等......'. "Preparing list output
PERFORM GET_CURRENT_STOCK.
IF I_STOCK IS INITIAL.
MESSAGE '此刻没有废铜棉库存!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
PERFORM FRM_SHOW_STOCK.
ENDIF.
ENDIF.
ELSEIF P_R6 = 'X'.
PERFORM FRM_WRITEOFF_RECEIVE.
IF I_WF IS NOT INITIAL.
CALL SCREEN 9008.
ELSE.
MESSAGE GV_WFMESSAGE TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ELSEIF P_R7 = 'X'.
PERFORM FRM_GET_MERGE_INFO.
IF I_STOCK IS INITIAL.
MESSAGE '没有查询到您所输入的物料库存,请核实!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
PERFORM FRM_SHOW_STOCK.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
* END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATE
*&---------------------------------------------------------------------*
* 选择屏幕上的年月条件
*----------------------------------------------------------------------*
* <--P_LV_START text
* <--P_LV_FINISH text
*----------------------------------------------------------------------*
FORM FRM_GET_DATE CHANGING P_START TYPE D
P_FINISH TYPE D.
DATA :
LV_STR1 TYPE CHAR10,
LV_STR2 TYPE CHAR10.
IF S_MONTH-LOW IS NOT INITIAL AND S_MONTH-HIGH IS INITIAL.
CONCATENATE S_MONTH-LOW '01' INTO P_START.
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = P_START
* I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
I_MONTHS = 0
* I_DAYS = 0
* I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = P_FINISH
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
CONCATENATE S_MONTH-LOW+0(4) '/' S_MONTH-LOW+4(2)
INTO LV_STR1.
GV_MONTH = LV_STR1.
ELSEIF S_MONTH-LOW IS NOT INITIAL AND S_MONTH-HIGH IS NOT INITIAL.
CONCATENATE S_MONTH-LOW '01' INTO P_START.
CONCATENATE S_MONTH-HIGH '01' INTO P_FINISH.
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = P_FINISH
* I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
I_MONTHS = 0
* I_DAYS = 0
* I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = P_FINISH
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
CONCATENATE S_MONTH-LOW+0(4) '/' S_MONTH-LOW+4(2)
INTO LV_STR1.
CONCATENATE S_MONTH-HIGH+0(4) '/' S_MONTH-HIGH+4(2)
INTO LV_STR2.
CONCATENATE LV_STR1 '~' LV_STR2
INTO GV_MONTH SEPARATED BY SPACE.
ENDIF.
ENDFORM. " FRM_GET_DATE
*&---------------------------------------------------------------------*
*& Form FRM_SET_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_SCREEN .
LOOP AT SCREEN.
IF P_R1 = 'X'.
IF SCREEN-GROUP1 = 'M2' OR SCREEN-GROUP1 = 'M3'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R2 = 'X' OR P_R4 = 'X' OR P_R5 = 'X'.
IF SCREEN-GROUP1 = 'M2' OR SCREEN-GROUP1 = 'M1' OR SCREEN-GROUP1 = 'M3'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R3 = 'X'.
IF SCREEN-GROUP1 = 'M1' OR SCREEN-GROUP1 = 'M3'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R6 = 'X'.
IF SCREEN-NAME = 'S_BTBHA-LOW'
OR SCREEN-NAME = 'S_MONTH-LOW'
OR SCREEN-NAME = 'S_MONTH-HIGH'
OR SCREEN-NAME = 'S_LGORT-LOW'
OR SCREEN-NAME = 'S_LGORT-HIGH'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R7 = 'X'.
IF SCREEN-NAME = 'S_BTBHA-LOW'
OR SCREEN-NAME = 'S_MONTH-LOW'
OR SCREEN-NAME = 'S_MONTH-HIGH'
OR SCREEN-NAME = 'S_CHARG-HIGH'
OR SCREEN-NAME = 'S_CHARG-LOW'
OR SCREEN-NAME = 'S_MATNR-HIGH'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'SC1'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_SET_SCREEN
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_SCREEN .
GV_CFLAG = ''.
IF P_R1 = 'X'.
IF S_BTBHA IS INITIAL.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_BTBHA-LOW'.
MESSAGE '请输入需要确认的台班编号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
SELECT SINGLE *
FROM ZZTPP_ZSTZ_HEAD
WHERE BTBHA IN S_BTBHA.
IF SY-SUBRC <> 0.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_BTBHA-LOW'.
MESSAGE '请输入正确的台班编号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ELSEIF P_R3 = 'X'.
IF S_MONTH IS INITIAL.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_MONTH-LOW'.
MESSAGE '请输入查询年月!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
IF S_MATNR IS NOT INITIAL.
SELECT SINGLE *
FROM MARA
WHERE MATNR IN S_MATNR.
IF SY-SUBRC <> 0.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_MATNR-LOW'.
MESSAGE '请输入正确的物料编号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ELSEIF P_R6 = 'X'.
IF S_MATNR IS INITIAL OR S_CHARG IS INITIAL.
GV_CFLAG = 'X'.
MESSAGE '请输入冲销条件:物料号跟批次号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ELSEIF P_R7 = 'X'.
IF S_MATNR IS INITIAL.
GV_CFLAG = 'X'.
MESSAGE '请输入需要批次合并的物料代码!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ENDFORM. " FRM_CHECK_SCREEN
*&SPWizard: Data incl. inserted by SP Wizard. DO NOT CHANGE THIS LINE!
INCLUDE ZPP_ISSUE_TBL4 .
INCLUDE ZPP_SUBCONTRACT_TBL .
INCLUDE ZPP_ISSUE_SCRIP .
INCLUDE ZPP_ISSUE_TBL .
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS '9000'.
SET TITLEBAR 'TITLE' WITH '确认收货'.
*初始化
IF GV_INFLAG1 = ''.
CLEAR ZZTPP_ZSTZ_HEAD.
SELECT SINGLE *
FROM ZZTPP_ZSTZ_HEAD
WHERE BTBHA IN S_BTBHA.
* GV_RECDATE = SY-DATUM.
GV_RECDATE = ZZTPP_ZSTZ_HEAD-BUDAT.
GV_INFLAG1 = 'X'.
ENDIF.
ENDMODULE. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
CASE OK_CODE1.
WHEN 'BACK' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'CONFIRM'.
*确认收货
PERFORM FRM_CONFIRM_RECEIVE.
WHEN 'GIVEUP'.
LEAVE TO SCREEN 0.
ENDCASE.
CLEAR : OK_CODE1.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* 取台班中待确认的废铜棉信息
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
IF S_BTBHA IS NOT INITIAL.
SELECT YLDM AS MATNR
YLPH AS CHARG
LGORT AS LGORT
YLMS AS MAKTX
YLZL AS LABST
FROM ZZTPP_ZSTZ_BODY4
INTO CORRESPONDING FIELDS OF TABLE I_RECEIVE
WHERE BTBHA IN S_BTBHA
AND GZ = ''
.
LOOP AT I_RECEIVE INTO WA_RECEIVE.
WA_RECEIVE-MEINS = 'KG'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WA_RECEIVE-MATNR
IMPORTING
OUTPUT = WA_RECEIVE-MATNR.
MODIFY I_RECEIVE FROM WA_RECEIVE.
ENDLOOP.
ENDIF.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
DATA :
LV_LINE TYPE I.
SET PF-STATUS '9001'.
SET TITLEBAR 'TITLE' WITH '输入发货'.
PERFORM FRM_SET_LISTBOX.
*初始化
IF GV_INFLAG2 = ''.
GV_ISSDATE = SY-DATUM.
GV_REMARK2 = '直接销售废铜棉......'.
GV_INFLAG2 = 'X'.
ENDIF.
*输入一行确认后定位到下一行
IF GV_ISSDATE IS NOT INITIAL.
LV_LINE = LINES( I_ISSUE ).
LV_LINE = LV_LINE + 1.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_LINE.
ENDIF.
ENDMODULE. " STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
DATA :
*函数返回标记
LV_RETURN TYPE C.
CASE OK_CODE2.
*返回屏幕
WHEN 'BACK' OR 'EXIT'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
*退出程序
WHEN 'CANCEL'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE PROGRAM.
ENDIF.
ELSE.
LEAVE PROGRAM.
ENDIF.
*确认售出
WHEN 'SAVE' OR 'VERIFY'.
PERFORM FRM_SELL_OUT.
*清空项目
WHEN 'EMPTY'.
PERFORM FRM_CLEAR_ITEMS.
*取消发货
WHEN 'ABOLISH'.
PERFORM FRM_CANCEL_ISSUE.
ENDCASE.
CLEAR : OK_CODE2.
ENDMODULE. " USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
*& Form CHECK_TBL_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_TBL_INPUT .
DATA:
LV_CURRLINE TYPE I,
WA_TEMP LIKE LINE OF I_ISSUE,
LV_LINES TYPE I,
LV_MATNR TYPE MATNR.
*光标位置
LV_LINES = TBL2-CURRENT_LINE - TBL2-TOP_LINE + 1.
LV_CURRLINE = TBL2-CURRENT_LINE - 1.
LOOP AT I_ISSUE INTO WA_TEMP FROM TBL2-TOP_LINE TO LV_CURRLINE.
IF WA_TEMP-MATNR = WA_ISSUE-MATNR AND WA_TEMP-CHARG = WA_ISSUE-CHARG.
SET CURSOR FIELD 'WA_ISSUE-CHARG' LINE LV_LINES.
MESSAGE '此记录已经存在表格中!' TYPE 'E'.
ENDIF.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE *
FROM ZSCRAP
WHERE MATNR = LV_MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE
AND SFLAG = ''.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_LINES.
MESSAGE '该项目不存在!' TYPE 'E'.
ELSE.
SELECT SINGLE MAKTX
FROM MAKT
INTO WA_ISSUE-MAKTX
WHERE MATNR = LV_MATNR
AND SPRAS = SY-LANGU.
WA_ISSUE-LGORT = ZSCRAP-LGORT.
WA_ISSUE-AMOUNT = ZSCRAP-LABST.
* WA_ISSUE-LABST = ZSCRAP-LABST.
WA_ISSUE-MEINS = 'KG'.
*校验售出废铜棉数量
IF WA_ISSUE-LABST IS INITIAL.
* SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
* MESSAGE '请输入需售出的废铜棉数量!' TYPE 'E'.
WA_ISSUE-LABST = WA_ISSUE-AMOUNT.
ELSEIF WA_ISSUE-LABST < 0 OR WA_ISSUE-LABST > WA_ISSUE-AMOUNT .
SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
MESSAGE '请输入合理的售出数量!' TYPE 'E'.
ENDIF.
IF WA_ISSUE-STPRS IS INITIAL.
SET CURSOR FIELD 'WA_ISSUE-STPRS' LINE LV_LINES.
MESSAGE '请输入单位标准价格!' TYPE 'E'.
ELSE.
WA_ISSUE-PEINH = 1.
WA_ISSUE-TOTAL = WA_ISSUE-STPRS * WA_ISSUE-LABST * WA_ISSUE-PEINH.
WA_ISSUE-WAERS = 'CNY'.
ENDIF.
ENDIF.
ENDFORM. " CHECK_TBL_INPUT
*&---------------------------------------------------------------------*
*& Module F4_HELP INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_WAERS INPUT.
IF I_SEARCH IS INITIAL.
SELECT DISTINCT *
FROM TCURT
INTO CORRESPONDING FIELDS OF TABLE I_SEARCH
WHERE SPRAS = SY-LANGU.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'WAERS'
* PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'WA_ISSUE-WAERS'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
VALUE_TAB = I_SEARCH
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP INPUT
*&---------------------------------------------------------------------*
*& Module F4_HELP_CHARG INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_CHARG INPUT.
DATA :
LV_MATNR TYPE MATNR,
LV_WA_CHARG TYPE T_CHARG.
* IF I_CHARG IS INITIAL.
DATA: DYNPFIELDS TYPE TABLE OF DYNPREAD WITH HEADER LINE.
CLEAR: DYNPFIELDS, DYNPFIELDS[].
DYNPFIELDS-FIELDNAME = 'WA_ISSUE-MATNR'. "填入需要读值的字段名
APPEND DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPFIELDS
EXCEPTIONS
OTHERS = 9.
IF SY-SUBRC = 0.
READ TABLE DYNPFIELDS WITH KEY FIELDNAME = 'WA_ISSUE-MATNR'.
LV_MATNR = DYNPFIELDS-FIELDVALUE. "备注
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT MATNR CHARG LABST
INTO CORRESPONDING FIELDS OF TABLE I_CHARG
FROM ZSCRAP
WHERE FLAG = C_RECEIVE
AND MATNR = LV_MATNR
AND SFLAG <> 'X'
.
LOOP AT I_CHARG INTO LV_WA_CHARG.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_CHARG-MAKTX
WHERE MATNR = LV_WA_CHARG-MATNR
AND SPRAS = SY-LANGU.
MODIFY I_CHARG FROM LV_WA_CHARG.
ENDLOOP.
* ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'CHARG'
* PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'WA_ISSUE-CHARG'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
VALUE_TAB = I_CHARG
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP_CHARG INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_9003 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9003 OUTPUT.
SET PF-STATUS '9003'.
SET TITLEBAR 'TITLE' WITH '显示库存'.
ENDMODULE. " STATUS_9003 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9003 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9003 INPUT.
CASE OK_CODE3.
WHEN 'BACK' OR 'EXIT'.
PERFORM FRM_FREE_CONTAINER.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
PERFORM FRM_FREE_CONTAINER.
LEAVE PROGRAM.
ENDCASE.
CLEAR : OK_CODE3.
ENDMODULE. " USER_COMMAND_9003 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_CONFIRM_RECEIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CONFIRM_RECEIVE .
DATA :
LV_MATNR TYPE MATNR,
LV_CHARG TYPE CHARG_D,
LV_RETURN TYPE C,
LV_WA_BTBHA TYPE ZZTPP_ZSTZ_BODY4,
LV_I_BTBHA TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY4,
LV_WA_INSERT TYPE ZSCRAP,
LV_I_INSERT TYPE STANDARD TABLE OF ZSCRAP.
*Bapi参数
DATA:LW_P3_GOODSMVT_HEADER TYPE BAPI2017_GM_HEAD_01,
LW_P3_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
LW_P3_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
LW_P3_MATDOCUMENTYEAR TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
LT_P3_GOODSMVT_ITEM TYPE STANDARD TABLE OF BAPI2017_GM_ITEM_CREATE,
LW_P3_GOODSMVT_ITEM TYPE BAPI2017_GM_ITEM_CREATE,
LT_P3_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LW_P3_RETURN TYPE BAPIRET2.
*取成品信息
DATA :GW_BODY3_SUM TYPE ZZTPP_ZSTZ_BODY3-YLCCHJ,
GT_BODY3 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY3,
LW_P3_BODY3 TYPE ZZTPP_ZSTZ_BODY3.
*校验一下批次
LOOP AT I_RECEIVE INTO WA_RECEIVE.
CLEAR : LV_MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_RECEIVE-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE CHARG
FROM ZSCRAP
INTO LV_CHARG
WHERE MATNR = LV_MATNR
AND CHARG = WA_RECEIVE-CHARG.
IF SY-SUBRC = 0 OR LV_CHARG IS NOT INITIAL.
MESSAGE '该物料的批次已经存在,请告知生产部相关人员确认!' TYPE 'E'.
ENDIF.
ENDLOOP.
PERFORM FRM_POPUP_INFO USING TEXT-010 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*收货到系统--------------------- 1、
*Bapi抬头参数
CLEAR ZZTPP_ZSTZ_HEAD.
SELECT SINGLE *
FROM ZZTPP_ZSTZ_HEAD
INTO ZZTPP_ZSTZ_HEAD
WHERE BTBHA IN S_BTBHA.
CLEAR LW_P3_GOODSMVT_HEADER.
IF ZZTPP_ZSTZ_HEAD-BUDAT IS NOT INITIAL.
LW_P3_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
LW_P3_GOODSMVT_HEADER-DOC_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
ELSE.
LW_P3_GOODSMVT_HEADER-PSTNG_DATE = SY-DATUM.
LW_P3_GOODSMVT_HEADER-DOC_DATE = SY-DATUM.
ENDIF.
LW_P3_GOODSMVT_HEADER-PR_UNAME = SY-UNAME.
LW_P3_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号
REFRESH LT_P3_GOODSMVT_ITEM.
REFRESH LT_P3_RETURN.
CLEAR :
LW_P3_RETURN,
LW_P3_GOODSMVT_HEADRET,
LW_P3_MATERIALDOCUMENT,
LW_P3_MATDOCUMENTYEAR,
LW_P3_GOODSMVT_ITEM.
SELECT *
FROM ZZTPP_ZSTZ_BODY3
INTO CORRESPONDING FIELDS OF TABLE GT_BODY3
WHERE BTBHA IN S_BTBHA.
* 原料产出合计
CLEAR: LW_P3_BODY3,GW_BODY3_SUM.
LOOP AT GT_BODY3 INTO LW_P3_BODY3.
GW_BODY3_SUM = GW_BODY3_SUM + LW_P3_BODY3-YLCCHJ.
ENDLOOP.
LOOP AT I_RECEIVE INTO WA_RECEIVE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_RECEIVE-MATNR
IMPORTING
OUTPUT = WA_RECEIVE-MATNR.
"低值废铜棉不过账到系统
IF WA_RECEIVE-MATNR+8 = '3100900000'.
CONTINUE.
ENDIF.
LOOP AT GT_BODY3 INTO LW_P3_BODY3.
IF LW_P3_BODY3-YLCCHJ = 0 OR LW_P3_BODY3-YLCCHJ IS INITIAL.
CONTINUE.
ENDIF.
LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
LW_P3_GOODSMVT_ITEM-STGE_LOC = WA_RECEIVE-LGORT."库存地点
LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
* LW_P3_GOODSMVT_ITEM-ENTRY_QNT = WA_RECEIVE-LABST.
LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
WA_RECEIVE-LABST * ( LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
LW_P3_GOODSMVT_ITEM-ORDERID = LW_P3_BODY3-CPDDH."订单号
LW_P3_GOODSMVT_ITEM-MATERIAL = WA_RECEIVE-MATNR."物料代码
LW_P3_GOODSMVT_ITEM-BATCH = WA_RECEIVE-CHARG."批号
SELECT SINGLE RSNUM RSPOS " 预留编号,预留项目编号
INTO (LW_P3_GOODSMVT_ITEM-RESERV_NO,LW_P3_GOODSMVT_ITEM-RES_ITEM)
FROM RESB
WHERE AUFNR = LW_P3_BODY3-CPDDH
AND MATNR = WA_RECEIVE-MATNR.
IF SY-SUBRC <> 0.
CLEAR : LW_P3_GOODSMVT_ITEM-RESERV_NO,
LW_P3_GOODSMVT_ITEM-RES_ITEM.
ENDIF.
APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
ENDLOOP.
ENDLOOP.
IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
"分摊数量为0的行次
DELETE LT_P3_GOODSMVT_ITEM WHERE ENTRY_QNT = 0.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = LW_P3_GOODSMVT_HEADER
GOODSMVT_CODE = '05' "MB1C
IMPORTING
GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
MATDOCUMENTYEAR = LW_P3_MATDOCUMENTYEAR
TABLES
GOODSMVT_ITEM = LT_P3_GOODSMVT_ITEM
RETURN = LT_P3_RETURN.
IF LW_P3_MATERIALDOCUMENT IS INITIAL.
ROLLBACK WORK.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
SORT LT_P3_RETURN BY TYPE ID NUMBER.
DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
CLEAR LW_P3_RETURN.
LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
IF GW_MESSAGE IS INITIAL.
GW_MESSAGE-MESSAGE = LW_P3_RETURN-MESSAGE.
ELSE.
CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
INTO GW_MESSAGE-MESSAGE .
ENDIF.
ENDLOOP.
MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
EXIT.
ENDIF.
ENDIF.
*保存记录到数据库---------------- 2、
REFRESH LV_I_INSERT.
LOOP AT I_RECEIVE INTO WA_RECEIVE.
CLEAR : LV_WA_INSERT.
MOVE-CORRESPONDING WA_RECEIVE TO LV_WA_INSERT.
LV_WA_INSERT-BUDAT = GV_RECDATE.
LV_WA_INSERT-WERKS = C_PLANT.
LV_WA_INSERT-FLAG = C_RECEIVE.
LV_WA_INSERT-REMARK = GV_REMARK1.
LV_WA_INSERT-OABST = WA_RECEIVE-LABST. " 原始入库数量
LV_WA_INSERT-ERDAT = SY-DATUM.
LV_WA_INSERT-ERZET = SY-UZEIT.
LV_WA_INSERT-ERNAM = SY-UNAME.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_INSERT-MATNR
IMPORTING
OUTPUT = LV_WA_INSERT-MATNR.
APPEND LV_WA_INSERT TO LV_I_INSERT.
ENDLOOP.
INSERT ZSCRAP FROM TABLE LV_I_INSERT.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
EXIT.
ENDIF.
*更新台班中的废铜棉的状态----------- 3、
SELECT *
FROM ZZTPP_ZSTZ_BODY4
INTO CORRESPONDING FIELDS OF TABLE LV_I_BTBHA
WHERE BTBHA IN S_BTBHA
AND GZ = ''
.
DATA : LV_FLG TYPE C.
CLEAR LV_FLG.
LOOP AT LV_I_BTBHA INTO LV_WA_BTBHA.
LV_WA_BTBHA-GZ = 'Y'.
LV_WA_BTBHA-ROWCOLOR = 'C410'.
"物料凭证
IF LV_WA_BTBHA-YLDM+8 <> '3100900000'.
LV_WA_BTBHA-MBLNR = LW_P3_MATERIALDOCUMENT.
ENDIF.
* MODIFY LV_I_BTBHA FROM LV_WA_BTBHA.
UPDATE ZZTPP_ZSTZ_BODY4
SET GZ = LV_WA_BTBHA-GZ
ROWCOLOR = LV_WA_BTBHA-ROWCOLOR
MBLNR = LV_WA_BTBHA-MBLNR
WHERE YLDM = LV_WA_BTBHA-YLDM
AND YLPH = LV_WA_BTBHA-YLPH
AND LGORT = LV_WA_BTBHA-LGORT.
IF SY-SUBRC <> 0.
LV_FLG = 'X'.
ROLLBACK WORK.
ENDIF.
ENDLOOP.
IF LV_FLG = 'X'.
EXIT.
ENDIF.
* MODIFY ZZTPP_ZSTZ_BODY4 FROM TABLE LV_I_BTBHA.
* IF SY-SUBRC <> 0.
* ROLLBACK WORK.
* EXIT.
* ENDIF.
COMMIT WORK.
MESSAGE '项目已成功确认,请告知台账录入人员!' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDIF.
ENDFORM. " FRM_CONFIRM_RECEIVE
*&---------------------------------------------------------------------*
*& Form frm_popup_info
*&---------------------------------------------------------------------*
* 弹出框信息
*----------------------------------------------------------------------*
* -->P_TEXT1 text
* -->P_TEXT2 text
* -->P_RETURN text
*----------------------------------------------------------------------*
FORM FRM_POPUP_INFO USING P_TEXT1 P_TEXT2
CHANGING P_RETURN.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' "#EC *
EXPORTING
DEFAULTOPTION = 'Y'
TEXTLINE1 = P_TEXT1
TITEL = P_TEXT2
CANCEL_DISPLAY = ''
IMPORTING
ANSWER = P_RETURN.
ENDFORM. "FRM_POPUP_INFO
*&---------------------------------------------------------------------*
*& Form FRM_CLEAR_ITEMS
*&---------------------------------------------------------------------*
* 清空所有行项目
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CLEAR_ITEMS .
DATA :
LV_RETURN TYPE C.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-012 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
REFRESH I_ISSUE.
CLEAR :
GV_LABST,
GV_TOTAL,
GV_REMARK2.
ENDIF.
ENDIF.
ENDFORM. " FRM_CLEAR_ITEMS
*&---------------------------------------------------------------------*
*& Form FRM_CANCEL_ISSUE
*&---------------------------------------------------------------------*
* 取消操作,返回
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CANCEL_ISSUE .
DATA :
LV_RETURN TYPE C.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-013 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
ENDFORM. " FRM_CANCEL_ISSUE
*&---------------------------------------------------------------------*
*& Form FRM_SELL_OUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SELL_OUT .
DATA :
*函数返回标记
LV_RETURN TYPE C,
*更新出错标记
LV_FLAG TYPE C,
*剩余数量
LV_LEFT TYPE ZLABST,
*插入行次
LV_LINE TYPE ZLINES,
*处理工作区
LV_WA_RECEIVE TYPE ZSCRAP.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-014 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*售出纪录保存到数据库中----- 1、
LOOP AT I_ISSUE INTO WA_ISSUE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = WA_ISSUE-MATNR.
"查看是否已经有售出或者委外记录
CLEAR : LV_LINE.
SELECT MAX( LINE )
FROM ZSCRAP
INTO LV_LINE
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_ISSUE .
IF SY-SUBRC <> 0 .
WA_ISSUE-LINE = '01'.
ELSE.
WA_ISSUE-LINE = LV_LINE + 1.
ENDIF.
WA_ISSUE-BUDAT = GV_ISSDATE.
WA_ISSUE-WERKS = C_PLANT.
WA_ISSUE-FLAG = C_ISSUE. " O 发
WA_ISSUE-REMARK = GV_REMARK2.
WA_ISSUE-ERDAT = SY-DATUM.
WA_ISSUE-ERZET = SY-UZEIT.
WA_ISSUE-ERNAM = SY-UNAME.
WA_ISSUE-SORT = '1'. " 直接售出
MODIFY I_ISSUE FROM WA_ISSUE.
ENDLOOP.
INSERT ZSCRAP FROM TABLE I_ISSUE.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
EXIT.
ENDIF.
CLEAR : LV_FLAG.
*更新库存标示或扣减更新---------------- 2、
LOOP AT I_ISSUE INTO WA_ISSUE.
"库存已售出
IF WA_ISSUE-AMOUNT = WA_ISSUE-LABST.
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = 'X' "已售出
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ELSE.
"库存依旧有剩余
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = ''
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF LV_FLAG = ''.
COMMIT WORK.
MESSAGE '已成功发货,操作完成!' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FRM_SELL_OUT
*&---------------------------------------------------------------------*
*& Module INIT_CONTAINER OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE INIT_CONTAINER OUTPUT.
IF GV_GRID1 IS INITIAL.
* Object for container1
CREATE OBJECT GV_CONTAINER1
EXPORTING
CONTAINER_NAME = 'CONTAINER1'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Object for Alv grid1
CREATE OBJECT GV_GRID1
EXPORTING
I_PARENT = GV_CONTAINER1
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF GV_GRID2 IS INITIAL.
* Object for container1
CREATE OBJECT GV_CONTAINER2
EXPORTING
CONTAINER_NAME = 'CONTAINER2'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Object for Alv grid1
CREATE OBJECT GV_GRID2
EXPORTING
I_PARENT = GV_CONTAINER2
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF GV_GRID3 IS INITIAL.
* Object for container1
CREATE OBJECT GV_CONTAINER3
EXPORTING
CONTAINER_NAME = 'CONTAINER3'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Object for Alv grid1
CREATE OBJECT GV_GRID3
EXPORTING
I_PARENT = GV_CONTAINER3
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDMODULE. " INIT_CONTAINER OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_FREE_CONTAINER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_FREE_CONTAINER .
* Free the object of container
IF NOT GV_CONTAINER1 IS INITIAL
OR NOT GV_CONTAINER2 IS INITIAL
OR NOT GV_CONTAINER3 IS INITIAL.
CALL METHOD GV_CONTAINER1->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
CALL METHOD GV_CONTAINER2->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
CALL METHOD GV_CONTAINER3->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
CLEAR:
GV_CONTAINER1,
GV_CONTAINER2,
GV_CONTAINER3,
GV_GRID1,
GV_GRID2,
GV_GRID3.
ENDIF.
ENDFORM. " FRM_FREE_CONTAINER
*&---------------------------------------------------------------------*
*& Module STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0110 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_RECEIVE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_RECEIVE OUTPUT.
DATA : LV_WA_IN TYPE T_SCRAP.
DATA : LS_SORT1 TYPE LVC_S_SORT .
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_IN
WHERE BUDAT BETWEEN GV_START AND GV_FINISH
AND MATNR IN S_MATNR
AND FLAG = C_RECEIVE.
LOOP AT I_IN INTO LV_WA_IN.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_IN-MAKTX
WHERE MATNR = LV_WA_IN-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_IN-MATNR
IMPORTING
OUTPUT = LV_WA_IN-MATNR.
MODIFY I_IN FROM LV_WA_IN.
ENDLOOP.
REFRESH I_FCAT1.
PERFORM FRM_ALV_FIELD USING 1 'MATNR' '废铜棉代码' 'C411' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 2 'MAKTX' '描述' '' 20 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 3 'CHARG' '批号' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 4 'BUDAT' '收货日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 5 'WERKS' '工厂' '' 4 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 6 'LGORT' '库存地点' '' 8 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 7 'OABST' '收获数量' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 8 'MEINS' '单位' '' 4 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 9 'ERNAM' '责任人' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 10 'ERDAT' '处理日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 11 'ERZET' '处理时间' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
LOOP AT I_FCAT1 INTO WA_FCAT.
IF WA_FCAT-FIELDNAME = 'MEINS'.
WA_FCAT-REF_FIELD = 'MEINS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'OABST'.
WA_FCAT-QFIELDNAME = 'MEINS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
MODIFY I_FCAT1 FROM WA_FCAT.
ENDLOOP.
CLEAR : GV_LAYOUT1.
GV_LAYOUT1-SEL_MODE = 'D'.
GV_LAYOUT1-ZEBRA = 'X' .
* GV_LAYOUT1-CTAB_FNAME = 'CELLCOLORS'.
* GV_LAYOUT1-INFO_FNAME = 'ROWCOLOR'.
GV_LAYOUT1-GRID_TITLE = '期间确认收货' .
GV_LAYOUT1-SMALLTITLE = 'X' .
CLEAR : LS_SORT1.
LS_SORT1-SPOS = '1' .
LS_SORT1-FIELDNAME = 'MATNR' .
LS_SORT1-UP = 'X' .
LS_SORT1-DOWN = SPACE .
APPEND LS_SORT1 TO I_SORT1 .
CLEAR : LS_SORT1.
LS_SORT1-SPOS = '2' .
LS_SORT1-FIELDNAME = 'MAKTX' .
LS_SORT1-UP = 'X' .
LS_SORT1-DOWN = SPACE .
LS_SORT1-SUBTOT = 'X'.
APPEND LS_SORT1 TO I_SORT1 .
*AVL的显示
CALL METHOD GV_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GV_LAYOUT1
I_SAVE = 'A'
CHANGING
IT_OUTTAB = I_IN
IT_FIELDCATALOG = I_FCAT1
IT_SORT = I_SORT1
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDMODULE. " GET_RECEIVE OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_ISSUE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_ISSUE OUTPUT.
DATA : LV_WA_OUT TYPE T_SCRAP.
DATA : LS_SORT2 TYPE LVC_S_SORT .
DATA :
LV_I_VALUE TYPE STANDARD TABLE OF DD07V,
LV_WA_DOMTAB TYPE DD07V.
*出库区分域
CALL FUNCTION 'DD_DOMVALUES_GET'
EXPORTING
DOMNAME = 'ZSORT'
TEXT = 'X'
LANGU = SY-LANGU
TABLES
DD07V_TAB = LV_I_VALUE
EXCEPTIONS "#EC FB_RC
WRONG_TEXTFLAG = 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.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_OUT
WHERE BUDAT BETWEEN GV_START AND GV_FINISH
AND MATNR IN S_MATNR
AND FLAG = C_ISSUE.
LOOP AT I_OUT INTO LV_WA_OUT.
CLEAR LV_WA_DOMTAB.
READ TABLE LV_I_VALUE INTO LV_WA_DOMTAB
WITH KEY DOMVALUE_L = LV_WA_OUT-SORT.
IF SY-SUBRC = 0.
LV_WA_OUT-TEXT = LV_WA_DOMTAB-DDTEXT.
ENDIF.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_OUT-MAKTX
WHERE MATNR = LV_WA_OUT-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_OUT-MATNR
IMPORTING
OUTPUT = LV_WA_OUT-MATNR.
IF LV_WA_OUT-LIFNR IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_OUT-LIFNR
IMPORTING
OUTPUT = LV_WA_OUT-LIFNR.
SELECT SINGLE NAME1
FROM LFA1
INTO LV_WA_OUT-NAME1
WHERE LIFNR = LV_WA_OUT-LIFNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_OUT-LIFNR
IMPORTING
OUTPUT = LV_WA_OUT-LIFNR.
ENDIF.
MODIFY I_OUT FROM LV_WA_OUT.
ENDLOOP.
REFRESH I_FCAT2.
PERFORM FRM_ALV_FIELD USING 1 'MATNR' '废铜棉代码' 'C411' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 2 'MAKTX' '描述' '' 20 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 3 'CHARG' '批号' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 4 'BUDAT' '出库日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 5 'TEXT' '出库区分' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 6 'WERKS' '工厂' '' 4 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 7 'LGORT' '库存地点' '' 8 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 8 'LABST' '出库数量' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 9 'SABST' '预计收货' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 10 'MEINS' '单位' '' 4 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 11 'STPRS' '标准价格' '' 10 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 12 'PEINH' '价格单位' '' 6 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 13 'TOTAL' '金额' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 14 'WAERS' '货币' '' 4 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 15 'NAME1' '供应商' '' 30 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 16 'ERNAM' '责任人' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 17 'ERDAT' '处理日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 18 'ERZET' '处理时间' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
LOOP AT I_FCAT2 INTO WA_FCAT.
IF WA_FCAT-FIELDNAME = 'MEINS'.
WA_FCAT-REF_FIELD = 'MEINS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'LABST'
OR WA_FCAT-FIELDNAME = 'SABST'.
WA_FCAT-QFIELDNAME = 'MEINS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'WAERS'.
WA_FCAT-REF_FIELD = 'WAERS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'TOTAL'.
WA_FCAT-QFIELDNAME = 'WAERS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'LABST'
OR WA_FCAT-FIELDNAME = 'SABST'
OR WA_FCAT-FIELDNAME = 'TOTAL'
OR WA_FCAT-FIELDNAME = 'STPRS'
OR WA_FCAT-FIELDNAME = 'PEINH'.
WA_FCAT-NO_ZERO = 'X'.
ENDIF.
MODIFY I_FCAT2 FROM WA_FCAT.
ENDLOOP.
CLEAR : GV_LAYOUT2.
GV_LAYOUT2-SEL_MODE = 'D'.
GV_LAYOUT2-ZEBRA = 'X' .
GV_LAYOUT2-GRID_TITLE = '期间售出库存' .
GV_LAYOUT2-SMALLTITLE = 'X' .
CLEAR : LS_SORT2.
LS_SORT2-SPOS = '1' .
LS_SORT2-FIELDNAME = 'MATNR' .
LS_SORT2-UP = 'X' .
LS_SORT2-DOWN = SPACE .
APPEND LS_SORT2 TO I_SORT2 .
CLEAR : LS_SORT2.
LS_SORT2-SPOS = '2' .
LS_SORT2-FIELDNAME = 'MAKTX' .
LS_SORT2-UP = 'X' .
LS_SORT2-DOWN = SPACE .
LS_SORT2-SUBTOT = 'X'.
APPEND LS_SORT2 TO I_SORT2 .
*AVL的显示
CALL METHOD GV_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GV_LAYOUT2
I_SAVE = 'A'
CHANGING
IT_OUTTAB = I_OUT
IT_FIELDCATALOG = I_FCAT2
IT_SORT = I_SORT2
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDMODULE. " GET_ISSUE OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_LEFT OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_LEFT OUTPUT.
DATA : LV_WA_LEFT TYPE T_SCRAP.
DATA : LS_SORT3 TYPE LVC_S_SORT .
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_LEFT
WHERE BUDAT BETWEEN GV_START AND GV_FINISH
AND MATNR IN S_MATNR
AND FLAG = C_RECEIVE
AND SFLAG = ''.
LOOP AT I_LEFT INTO LV_WA_LEFT.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_LEFT-MAKTX
WHERE MATNR = LV_WA_LEFT-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_LEFT-MATNR
IMPORTING
OUTPUT = LV_WA_LEFT-MATNR.
MODIFY I_LEFT FROM LV_WA_LEFT.
ENDLOOP.
REFRESH I_FCAT3.
PERFORM FRM_ALV_FIELD USING 1 'MATNR' '废铜棉代码' 'C411' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 2 'MAKTX' '描述' '' 20 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 3 'CHARG' '批号' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 4 'BUDAT' '收货日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 5 'WERKS' '工厂' '' 4 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 6 'LGORT' '库存地点' '' 8 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 7 'LABST' '数量' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 8 'MEINS' '单位' '' 4 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 9 'ERNAM' '责任人' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 10 'ERDAT' '处理日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 11 'ERZET' '处理时间' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
LOOP AT I_FCAT3 INTO WA_FCAT.
IF WA_FCAT-FIELDNAME = 'MEINS'.
WA_FCAT-REF_FIELD = 'MEINS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'LABST'.
WA_FCAT-QFIELDNAME = 'MEINS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
MODIFY I_FCAT3 FROM WA_FCAT.
ENDLOOP.
CLEAR : GV_LAYOUT3.
GV_LAYOUT3-SEL_MODE = 'D'.
GV_LAYOUT3-ZEBRA = 'X' .
GV_LAYOUT3-GRID_TITLE = '期间结余存货' .
GV_LAYOUT3-SMALLTITLE = 'X' .
CLEAR : LS_SORT3.
LS_SORT3-SPOS = '1' .
LS_SORT3-FIELDNAME = 'MATNR' .
LS_SORT3-UP = 'X' .
LS_SORT3-DOWN = SPACE .
APPEND LS_SORT3 TO I_SORT3 .
CLEAR : LS_SORT3.
LS_SORT3-SPOS = '2' .
LS_SORT3-FIELDNAME = 'MAKTX' .
LS_SORT3-UP = 'X' .
LS_SORT3-DOWN = SPACE .
LS_SORT3-SUBTOT = 'X'.
APPEND LS_SORT3 TO I_SORT3 .
*AVL的显示
CALL METHOD GV_GRID3->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GV_LAYOUT3
I_SAVE = 'A'
CHANGING
IT_OUTTAB = I_LEFT
IT_FIELDCATALOG = I_FCAT3
IT_SORT = I_SORT3
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDMODULE. " GET_LEFT OUTPUT
*&---------------------------------------------------------------------*
*& Form alv_field
*&---------------------------------------------------------------------*
* 设置ALV显示属性
*----------------------------------------------------------------------*
* -->COL_POS text
* -->FIELDNAME text
* -->COLTEXT text
* -->SELTEXT text
* -->EMPHASIZE text
*----------------------------------------------------------------------*
FORM FRM_ALV_FIELD USING COL_POS
FIELDNAME
COLTEXT
EMPHASIZE
LENGTH
JUST.
CLEAR WA_FCAT.
WA_FCAT-COL_POS = COL_POS.
WA_FCAT-FIELDNAME = FIELDNAME.
WA_FCAT-COLTEXT = COLTEXT.
WA_FCAT-EMPHASIZE = EMPHASIZE.
WA_FCAT-OUTPUTLEN = LENGTH.
WA_FCAT-JUST = JUST.
ENDFORM. " frm_alv_field
*&---------------------------------------------------------------------*
*& Form GET_CURRENT_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_CURRENT_STOCK .
DATA : LV_WA_STOCK TYPE T_SCRAP.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_STOCK
WHERE FLAG = C_RECEIVE
AND SFLAG = ''.
LOOP AT I_STOCK INTO LV_WA_STOCK.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_STOCK-MAKTX
WHERE MATNR = LV_WA_STOCK-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
MODIFY I_STOCK FROM LV_WA_STOCK.
ENDLOOP.
SORT I_STOCK BY MATNR CHARG.
DELETE I_STOCK WHERE LABST = 0.
ENDFORM. " GET_CURRENT_STOCK
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SHOW_STOCK .
DATA:
L_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
L_COL_POS TYPE I,
L_SORT TYPE SLIS_SORTINFO_ALV,
LV_REPID LIKE SY-REPID.
IF P_R7 = 'X'.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MARK'.
L_FIELDCAT-SELTEXT_M = '选择'.
L_FIELDCAT-OUTPUTLEN = 8.
L_FIELDCAT-CHECKBOX = 'X'.
APPEND L_FIELDCAT TO I_FIELDCATS.
ENDIF.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MAKTX'.
L_FIELDCAT-SELTEXT_M = '废铜棉'.
L_FIELDCAT-OUTPUTLEN = 20.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MATNR'.
L_FIELDCAT-SELTEXT_M = '物料代码'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'CHARG'.
L_FIELDCAT-SELTEXT_M = '批号'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'BUDAT'.
L_FIELDCAT-SELTEXT_M = '收货日期'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'WERKS'.
L_FIELDCAT-SELTEXT_M = '工厂'.
L_FIELDCAT-OUTPUTLEN = 4.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'LGORT'.
L_FIELDCAT-SELTEXT_M = '库存地点'.
L_FIELDCAT-OUTPUTLEN = 8.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'LABST'.
L_FIELDCAT-SELTEXT_M = '数量'.
L_FIELDCAT-OUTPUTLEN = 15.
L_FIELDCAT-JUST = 'R'.
L_FIELDCAT-DO_SUM = 'X'.
L_FIELDCAT-QFIELDNAME = 'MEINS'.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MEINS'.
L_FIELDCAT-SELTEXT_M = '单位'.
L_FIELDCAT-OUTPUTLEN = 4.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'REMARK'.
L_FIELDCAT-SELTEXT_M = '备注'.
L_FIELDCAT-OUTPUTLEN = 30.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'ERNAM'.
L_FIELDCAT-SELTEXT_M = '责任人'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'ERDAT'.
L_FIELDCAT-SELTEXT_M = '处理日期'.
L_FIELDCAT-OUTPUTLEN = 12.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'ERZET'.
L_FIELDCAT-SELTEXT_M = '处理时间'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
GV_LAYOUT-GET_SELINFOS = 'X'.
GV_LAYOUT-F2CODE = '&ETA'.
GV_LAYOUT-EDIT_MODE = 'D'.
GV_LAYOUT-DETAIL_POPUP = 'X'.
GV_LAYOUT-DETAIL_TITLEBAR = '详细内容' .
IF P_R4 = 'X'.
GV_LAYOUT-WINDOW_TITLEBAR = '当前库存'.
ELSEIF P_R7 = 'X'.
GV_LAYOUT-WINDOW_TITLEBAR = '物料批次合并'.
ENDIF.
IF P_R4 = 'X'.
L_SORT-FIELDNAME = 'MAKTX'.
L_SORT-SPOS = 1.
L_SORT-UP = 'X'.
L_SORT-DOWN = ''.
L_SORT-SUBTOT = 'X'.
L_SORT-EXPA = 'X'.
APPEND L_SORT TO I_SORT.
ENDIF.
*Display
LV_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* i_interface_check = 'X'
I_CALLBACK_PROGRAM = LV_REPID
I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
* I_STRUCTURE_NAME =
IS_LAYOUT = GV_LAYOUT
IT_FIELDCAT = I_FIELDCATS
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = I_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT = IS_VARIANT
IT_EVENTS = I_EVENT
TABLES
T_OUTTAB = I_STOCK
EXCEPTIONS
PROGRAM_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.
ENDFORM. " FRM_SHOW_STOCK
*---------------------------------------------------------------------*
* FORM ALV_PF_STATUS_SET
*---------------------------------------------------------------------*
FORM ALV_PF_STATUS_SET
USING RT_EXTAB TYPE SLIS_T_EXTAB.
IF P_R4 = 'X'.
APPEND 'COMBIN' TO RT_EXTAB.
APPEND 'REFRESH' TO RT_EXTAB.
SET PF-STATUS 'STANDARD_TOOLS' EXCLUDING RT_EXTAB.
ELSEIF P_R7 = 'X'.
SET PF-STATUS 'STANDARD_TOOLS'." EXCLUDING RT_EXTAB.
ENDIF.
ENDFORM. "alv_pf_status_set
*---------------------------------------------------------------------*
* FORM ALV_USER_COMMAND
*---------------------------------------------------------------------*
FORM ALV_USER_COMMAND
USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA : LV_NUM TYPE I.
IF R_UCOMM = 'COMBIN'.
CLEAR LV_NUM.
DESCRIBE TABLE I_STOCK LINES LV_NUM.
IF LV_NUM <= 1.
MESSAGE '记录数小于等于1条,无需合并批次!' TYPE 'I'.
ELSE.
CLEAR : ZSCRAP.
CALL SCREEN 9009 STARTING AT 20 15 ENDING AT 100 25.
ENDIF.
ELSEIF R_UCOMM = 'REFRESH'.
PERFORM FRM_GET_MERGE_INFO.
RS_SELFIELD-REFRESH = 'X'. "设置刷新标记
ENDIF.
ENDFORM. "alv_user_command
*&---------------------------------------------------------------------*
*& Form TOP-OF-PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM TOP-OF-PAGE.
CLEAR: T_HEADER, WA_HEADER.
WA_HEADER-TYP = 'H'.
IF P_R4 = 'X'.
WA_HEADER-INFO = '废铜棉库存一览'.
ELSEIF P_R7 = 'X'.
WA_HEADER-INFO = '待批次合并的物料库存一览'.
ENDIF.
APPEND WA_HEADER TO T_HEADER.
CLEAR: WA_HEADER.
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = '公司:'.
WA_HEADER-INFO = GV_NAME.
APPEND WA_HEADER TO T_HEADER.
CLEAR: WA_HEADER.
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = '单位:'.
WA_HEADER-INFO = 'KG'.
APPEND WA_HEADER TO T_HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = T_HEADER
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. "TOP-OF-PAGE
*&---------------------------------------------------------------------*
*& Form FRM_SET_LISTBOX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_LISTBOX .
DATA :
LV_I_LIST TYPE VRM_VALUES,
LV_WA_LIST LIKE LINE OF LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010300000'.
LV_WA_LIST-TEXT = '粉碎黄铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010400000'.
LV_WA_LIST-TEXT = '粉碎紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100100000'.
LV_WA_LIST-TEXT = '振切紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100300000'.
LV_WA_LIST-TEXT = '振切青铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100900000'.
LV_WA_LIST-TEXT = '低值废铜棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'WA_ISSUE-MATNR'
VALUES = LV_I_LIST
EXCEPTIONS
ID_ILLEGAL_NAME = 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_SET_LISTBOX
*&---------------------------------------------------------------------*
*& Form FRM_F4_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_F4_HELP .
DATA :
WA_SEARCH TYPE T_SHLP_MATNR.
IF I_SEARCH_M IS INITIAL.
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3010300000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3010400000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3100100000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3100300000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3100900000'.
APPEND WA_SEARCH TO I_SEARCH_M .
LOOP AT I_SEARCH_M INTO WA_SEARCH.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_SEARCH-MATNR
IMPORTING
OUTPUT = WA_SEARCH-MATNR.
SELECT SINGLE MAKTX
FROM MAKT
INTO WA_SEARCH-MAKTX
WHERE MATNR = WA_SEARCH-MATNR
AND SPRAS = SY-LANGU.
SELECT SINGLE WERKS
FROM MARD
INTO WA_SEARCH-WERKS
WHERE MATNR = WA_SEARCH-MATNR.
MODIFY I_SEARCH_M FROM WA_SEARCH.
ENDLOOP.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'MATNR'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_MATNR-LOW'
VALUE_ORG = 'S'
CALLBACK_PROGRAM = SY-REPID
* CALLBACK_FORM = 'FRM_BO_CALLBACK1'
TABLES
VALUE_TAB = I_SEARCH_M
* RETURN_TAB = IL_RETURN_TAB
EXCEPTIONS "#EC FB_RC
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
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_F4_HELP
*&---------------------------------------------------------------------*
*& Module STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9002 OUTPUT.
SET PF-STATUS '9002'.
SET TITLEBAR 'TITLE' WITH '月末低值废铜棉的录入'.
PERFORM FRM_SET_LISTBOX_MATNR.
ZSCRAP-REMARK = '月末低值废铜棉的录入'.
ZSCRAP-BUDAT = SY-DATUM.
ENDMODULE. " STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
CASE OK_CODE4.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'ADD'.
PERFORM FRM_ADD_RECORD.
WHEN OTHERS.
ENDCASE.
CLEAR : OK_CODE4.
ENDMODULE. " USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_ADD_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ADD_RECORD .
DATA :
LV_WA_INSERT TYPE ZSCRAP.
CLEAR LV_WA_INSERT.
MOVE-CORRESPONDING ZSCRAP TO LV_WA_INSERT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_INSERT-MATNR
IMPORTING
OUTPUT = LV_WA_INSERT-MATNR.
LV_WA_INSERT-FLAG = C_RECEIVE.
LV_WA_INSERT-OABST = LV_WA_INSERT-LABST. " 原始数量
LV_WA_INSERT-WERKS = '1201'.
LV_WA_INSERT-MEINS = 'KG'.
LV_WA_INSERT-ERDAT = SY-DATUM.
LV_WA_INSERT-ERZET = SY-UZEIT.
LV_WA_INSERT-ERNAM = SY-UNAME.
LV_WA_INSERT-SFLAG = ''.
LV_WA_INSERT-WAERS = ''.
LV_WA_INSERT-TOTAL = ''.
LV_WA_INSERT-PEINH = ''.
LV_WA_INSERT-STPRS = ''.
INSERT ZSCRAP FROM LV_WA_INSERT.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
MESSAGE '记录插入失败!' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
COMMIT WORK.
CLEAR : ZSCRAP.
CLEAR LV_WA_INSERT.
MESSAGE '记录插入成功!' TYPE 'S'.
ENDIF.
ENDFORM. " FRM_ADD_RECORD
*&---------------------------------------------------------------------*
*& Form FRM_SET_LISTBOX_matnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_SET_LISTBOX_MATNR .
DATA :
LV_I_LIST TYPE VRM_VALUES,
LV_WA_LIST LIKE LINE OF LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010300000'.
LV_WA_LIST-TEXT = '粉碎黄铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010400000'.
LV_WA_LIST-TEXT = '粉碎紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100100000'.
LV_WA_LIST-TEXT = '振切紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100300000'.
LV_WA_LIST-TEXT = '振切青铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100900000'.
LV_WA_LIST-TEXT = '低值废铜棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'ZSCRAP-MATNR'
VALUES = LV_I_LIST
EXCEPTIONS
ID_ILLEGAL_NAME = 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_SET_LISTBOX
*&---------------------------------------------------------------------*
*& Module STATUS_9007 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9007 OUTPUT.
DATA :
LV_INDEX TYPE I.
SET PF-STATUS '9001'.
SET TITLEBAR 'TITLE' WITH '外协加工'.
PERFORM FRM_SET_LISTBOX.
*初始化
IF GV_INFLAG2 = ''.
GV_ISSDATE = SY-DATUM.
GV_REMARK2 = '委外加工成原材料......'.
GV_INFLAG2 = 'X'.
ENDIF.
*输入一行确认后定位到下一行
IF GV_ISSDATE IS NOT INITIAL.
LV_INDEX = LINES( I_ISSUE ).
LV_INDEX = LV_INDEX + 1.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_INDEX.
ENDIF.
ENDMODULE. " STATUS_9007 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9007 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9007 INPUT.
CASE OK_CODE5.
*返回屏幕
WHEN 'BACK' OR 'EXIT'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
*退出程序
WHEN 'CANCEL'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE PROGRAM.
ENDIF.
ELSE.
LEAVE PROGRAM.
ENDIF.
*确认委外
WHEN 'SAVE' OR 'VERIFY'.
PERFORM FRM_SUBCONTRACT.
*清空项目
WHEN 'EMPTY'.
PERFORM FRM_CLEAR_ITEMS.
*取消发货
WHEN 'ABOLISH'.
PERFORM FRM_CANCEL_ISSUE.
ENDCASE.
CLEAR : OK_CODE5.
ENDMODULE. " USER_COMMAND_9007 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_SUBCONTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SUBCONTRACT .
DATA :
*函数返回标记
LV_RETURN TYPE C,
*更新出错标记
LV_FLAG TYPE C,
*剩余数量
LV_LEFT TYPE ZLABST,
*插入行次
LV_LINE TYPE ZLINES,
*处理工作区
LV_WA_RECEIVE TYPE ZSCRAP.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-014 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*售出纪录保存到数据库中----- 1、
LOOP AT I_ISSUE INTO WA_ISSUE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = WA_ISSUE-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WA_ISSUE-LIFNR
IMPORTING
OUTPUT = WA_ISSUE-LIFNR.
"查看是否已经有售出或者委外记录
CLEAR : LV_LINE.
SELECT MAX( LINE )
FROM ZSCRAP
INTO LV_LINE
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_ISSUE .
IF SY-SUBRC <> 0 .
WA_ISSUE-LINE = '01'.
ELSE.
WA_ISSUE-LINE = LV_LINE + 1.
ENDIF.
WA_ISSUE-BUDAT = GV_ISSDATE.
WA_ISSUE-WERKS = C_PLANT.
WA_ISSUE-FLAG = C_ISSUE.
WA_ISSUE-REMARK = GV_REMARK2.
WA_ISSUE-ERDAT = SY-DATUM.
WA_ISSUE-ERZET = SY-UZEIT.
WA_ISSUE-ERNAM = SY-UNAME.
"出库区分
WA_ISSUE-SORT = '2'.
MODIFY I_ISSUE FROM WA_ISSUE.
ENDLOOP.
INSERT ZSCRAP FROM TABLE I_ISSUE.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
EXIT.
ENDIF.
CLEAR : LV_FLAG.
*更新库存标示---------------- 2、
LOOP AT I_ISSUE INTO WA_ISSUE.
"库存已售出
IF WA_ISSUE-AMOUNT = WA_ISSUE-LABST.
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = 'X'
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ELSE.
"库存依旧有剩余
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = ''
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF LV_FLAG = ''.
COMMIT WORK.
MESSAGE '已成功发货,操作完成!' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FRM_SUBCONTRACT
*&---------------------------------------------------------------------*
*& Form CHECK_TBL3_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_TBL3_INPUT .
DATA:
LV_CURRLINE TYPE I,
WA_TEMP LIKE LINE OF I_ISSUE,
LV_LINES TYPE I,
LV_LIFNR TYPE LIFNR,
LV_MATNR TYPE MATNR.
*光标位置
LV_LINES = TBL3-CURRENT_LINE - TBL3-TOP_LINE + 1.
LV_CURRLINE = TBL3-CURRENT_LINE - 1.
LOOP AT I_ISSUE INTO WA_TEMP FROM TBL3-TOP_LINE TO LV_CURRLINE.
IF WA_TEMP-MATNR = WA_ISSUE-MATNR AND WA_TEMP-CHARG = WA_ISSUE-CHARG.
SET CURSOR FIELD 'WA_ISSUE-CHARG' LINE LV_LINES.
MESSAGE '此记录已经存在表格中!' TYPE 'E'.
ENDIF.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE *
FROM ZSCRAP
WHERE MATNR = LV_MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE
AND SFLAG = ''.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_LINES.
MESSAGE '该项目不存在!' TYPE 'E'.
ELSE.
SELECT SINGLE MAKTX
FROM MAKT
INTO WA_ISSUE-MAKTX
WHERE MATNR = LV_MATNR
AND SPRAS = SY-LANGU.
WA_ISSUE-LGORT = ZSCRAP-LGORT.
WA_ISSUE-AMOUNT = ZSCRAP-LABST.
* WA_ISSUE-LABST = ZSCRAP-LABST.
* WA_ISSUE-SABST = WA_ISSUE-LABST * C_RATE.
WA_ISSUE-MEINS = 'KG'.
IF WA_ISSUE-LABST IS INITIAL.
SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
MESSAGE '请输入委外加工数量!' TYPE 'E'.
ELSE.
IF WA_ISSUE-LABST < 0 OR WA_ISSUE-LABST > WA_ISSUE-AMOUNT.
SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
MESSAGE '请输入合理的委外加工数量!' TYPE 'E'.
ELSE.
WA_ISSUE-SABST = WA_ISSUE-LABST * C_RATE. " 0.93
ENDIF.
ENDIF.
IF WA_ISSUE-LIFNR IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-LIFNR
IMPORTING
OUTPUT = LV_LIFNR.
SELECT SINGLE NAME1
FROM LFA1
INTO WA_ISSUE-NAME1
WHERE LIFNR = LV_LIFNR
AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'WA_ISSUE-LIFNR' LINE LV_LINES.
MESSAGE '请输入正确的外委供应商代码!' TYPE 'E'.
ENDIF.
ELSE.
SET CURSOR FIELD 'WA_ISSUE-LIFNR' LINE LV_LINES.
MESSAGE '请输入外委供应商代码!' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM. " CHECK_TBL3_INPUT
*&---------------------------------------------------------------------*
*& Module F4_HELP_DATE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_DATE INPUT.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
* DISPLAY = ' '
* FACTORY_CALENDAR_ID = ' '
* GREGORIAN_CALENDAR_FLAG = ' '
* HOLIDAY_CALENDAR_ID = ' '
* PROGNAME_FOR_FIRST_MONTH = ' '
IMPORTING
SELECT_DATE = GV_ISSDATE
* SELECT_WEEK =
* SELECT_WEEK_BEGIN =
* SELECT_WEEK_END =
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP_DATE INPUT
*&---------------------------------------------------------------------*
*& Form FRM_F4_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_F4_DATE1 .
*年月的搜索帮助
DATA:L_DATE TYPE SY-DATUM.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
IMPORTING
SELECT_DATE = L_DATE
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8.
IF SY-SUBRC = 0.
S_MONTH-LOW = L_DATE+0(6).
ENDIF.
ENDFORM. " FRM_F4_DATE
*&---------------------------------------------------------------------*
*& Form FRM_F4_DATE2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_F4_DATE2 .
*年月的搜索帮助
DATA:L_DATE TYPE SY-DATUM.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
IMPORTING
SELECT_DATE = L_DATE
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8.
IF SY-SUBRC = 0.
S_MONTH-HIGH = L_DATE+0(6).
ENDIF.
ENDFORM. " FRM_F4_DATE2
*&---------------------------------------------------------------------*
*& Module F4_HELP_DATE1 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_DATE1 INPUT.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
* DISPLAY = ' '
* FACTORY_CALENDAR_ID = ' '
* GREGORIAN_CALENDAR_FLAG = ' '
* HOLIDAY_CALENDAR_ID = ' '
* PROGNAME_FOR_FIRST_MONTH = ' '
IMPORTING
SELECT_DATE = GV_RECDATE
* SELECT_WEEK =
* SELECT_WEEK_BEGIN =
* SELECT_WEEK_END =
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP_DATE1 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_WRITEOFF_RECEIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_WRITEOFF_RECEIVE .
DATA : LV_WA_WF TYPE T_SCRAP.
CLEAR : GV_WFMESSAGE.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_WF
WHERE MATNR IN S_MATNR
AND CHARG IN S_CHARG.
IF SY-SUBRC <> 0.
REFRESH I_WF.
GV_WFMESSAGE = TEXT-023.
EXIT.
ELSE.
READ TABLE I_WF INTO LV_WA_WF WITH KEY FLAG = 'O'.
IF SY-SUBRC = 0.
REFRESH I_WF.
GV_WFMESSAGE = TEXT-024.
EXIT.
ENDIF.
ENDIF.
LOOP AT I_WF INTO LV_WA_WF.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_WF-MAKTX
WHERE MATNR = LV_WA_WF-MATNR
AND SPRAS = SY-LANGU.
MODIFY I_WF FROM LV_WA_WF.
ENDLOOP.
ENDFORM. " FRM_WRITEOFF_RECEIVE
*&---------------------------------------------------------------------*
*& Module STATUS_9008 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9008 OUTPUT.
SET PF-STATUS '9008'.
SET TITLEBAR 'TITLE' WITH TEXT-025.
ENDMODULE. " STATUS_9008 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9008 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9008 INPUT.
CASE OK_CODE6.
WHEN 'SAVE' OR 'WF'.
PERFORM FRM_CONFIRM_WRITEOFF.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN OTHERS .
ENDCASE.
CLEAR OK_CODE6.
ENDMODULE. " USER_COMMAND_9008 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_CONFIRM_WRITEOFF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CONFIRM_WRITEOFF .
DATA : LV_RETURN TYPE C.
READ TABLE I_WF INTO WA_WF WITH KEY MARK = 'X'.
IF SY-SUBRC <> 0.
MESSAGE '请选中需要冲销的行项目!' TYPE 'I'.
EXIT.
ELSE.
ENDIF.
PERFORM FRM_POPUP_INFO USING TEXT-026 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
"从数据库中删除此条记录
DELETE FROM ZSCRAP WHERE MATNR = WA_WF-MATNR
AND CHARG = WA_WF-CHARG
AND BUDAT = WA_WF-BUDAT
AND FLAG = 'I'.
IF SY-SUBRC = 0.
COMMIT WORK .
MESSAGE '冲销成功!' TYPE 'S'.
LEAVE TO SCREEN 0.
ELSE.
ROLLBACK WORK .
MESSAGE '冲销失败!' TYPE 'I'.
ENDIF.
ENDIF.
ENDFORM. " FRM_CONFIRM_WRITEOFF
*&---------------------------------------------------------------------*
*& Form FRM_GET_MERGE_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_MERGE_INFO .
DATA : LV_WA_STOCK TYPE T_SCRAP.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_STOCK
WHERE FLAG = C_RECEIVE
AND SFLAG = ''
AND MATNR IN S_MATNR
AND LGORT IN S_LGORT.
LOOP AT I_STOCK INTO LV_WA_STOCK.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_STOCK-MAKTX
WHERE MATNR = LV_WA_STOCK-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
LV_WA_STOCK-MARK = 'X'.
MODIFY I_STOCK FROM LV_WA_STOCK.
ENDLOOP.
SORT I_STOCK BY MATNR CHARG.
DELETE I_STOCK WHERE LABST = 0.
ENDFORM. " FRM_GET_MERGE_INFO
*&---------------------------------------------------------------------*
*& Module STATUS_9009 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9009 OUTPUT.
DATA : LV_WA_STOCK TYPE T_SCRAP.
DATA : LV_LABST TYPE ZLABST.
SET PF-STATUS '9009'.
SET TITLEBAR 'TITLE' WITH '物料批次的合并'.
* CLEAR : ZSCRAP.
ZSCRAP-ERDAT = SY-DATUM.
ZSCRAP-ERZET = SY-UZEIT.
ZSCRAP-ERNAM = SY-UNAME.
ZSCRAP-REMARK = '物料批次合并行记录'.
READ TABLE I_STOCK INTO LV_WA_STOCK INDEX 1.
ZSCRAP-MATNR = LV_WA_STOCK-MATNR.
CLEAR LV_LABST.
LOOP AT I_STOCK INTO LV_WA_STOCK.
LV_LABST = LV_LABST + LV_WA_STOCK-LABST.
ENDLOOP.
ZSCRAP-LABST = LV_LABST.
ENDMODULE. " STATUS_9009 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9009 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9009 INPUT.
CASE OK_CODE7.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN 'NOMERGE'.
LEAVE TO SCREEN 0.
WHEN 'MERGE'.
PERFORM FRM_MATERIAL_MERGE.
WHEN OTHERS.
ENDCASE.
CLEAR : OK_CODE7.
ENDMODULE. " USER_COMMAND_9009 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_MATERIAL_MERGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_MATERIAL_MERGE .
DATA :
*函数返回标记
LV_RETURN TYPE C,
*更新出错标记
LV_FLAG TYPE C,
*剩余数量
LV_LEFT TYPE ZLABST,
*插入行次
LV_LINE TYPE ZLINES,
*处理工作区
LV_WA_STOCK TYPE T_SCRAP.
DATA : I_MERGE TYPE STANDARD TABLE OF ZSCRAP.
DATA : WA_MERGE TYPE ZSCRAP.
IF I_STOCK IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-030 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*1\---------------------合并纪录保存到数据库中
CLEAR : LV_FLAG.
REFRESH I_MERGE.
LOOP AT I_STOCK INTO LV_WA_STOCK.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
MOVE-CORRESPONDING LV_WA_STOCK TO WA_MERGE.
"查看是否已经有售出或者委外记录
CLEAR : LV_LINE.
SELECT MAX( LINE )
FROM ZSCRAP
INTO LV_LINE
WHERE MATNR = LV_WA_STOCK-MATNR
AND CHARG = LV_WA_STOCK-CHARG
AND FLAG = 'O' .
IF SY-SUBRC <> 0 .
WA_MERGE-LINE = '01'.
ELSE.
WA_MERGE-LINE = LV_LINE + 1.
ENDIF.
WA_MERGE-BUDAT = ZSCRAP-BUDAT.
WA_MERGE-WERKS = C_PLANT.
WA_MERGE-FLAG = C_ISSUE. " O 发
WA_MERGE-REMARK = '合并批次的出库记录'.
WA_MERGE-ERDAT = SY-DATUM.
WA_MERGE-ERZET = SY-UZEIT.
WA_MERGE-ERNAM = SY-UNAME.
WA_MERGE-OABST = 0.
WA_MERGE-SABST = 0.
WA_MERGE-SORT = '3'. " 直接售出
APPEND WA_MERGE TO I_MERGE.
ENDLOOP.
INSERT ZSCRAP FROM TABLE I_MERGE.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK.
MESSAGE '操作失败,请联系管理员!' TYPE 'I'.
EXIT.
ENDIF.
*2\--------------------------更新库存标示
LOOP AT I_STOCK INTO LV_WA_STOCK.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
"库存已全部合并
UPDATE ZSCRAP
SET SFLAG = 'X' "已售出
LABST = 0
WHERE MATNR = LV_WA_STOCK-MATNR
AND CHARG = LV_WA_STOCK-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
MESSAGE '操作失败,请联系管理员!' TYPE 'I'.
EXIT.
ENDIF.
ENDLOOP.
*3\---------------------------插入合并后的记录
ZSCRAP-FLAG = C_RECEIVE.
ZSCRAP-WERKS = C_PLANT.
ZSCRAP-MEINS = 'KG'.
ZSCRAP-OABST = ZSCRAP-LABST.
ZSCRAP-SABST = 0.
CLEAR WA_MERGE .
MOVE-CORRESPONDING ZSCRAP TO WA_MERGE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_MERGE-MATNR
IMPORTING
OUTPUT = WA_MERGE-MATNR.
INSERT ZSCRAP FROM WA_MERGE.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK.
MESSAGE '操作失败,请联系管理员!' TYPE 'I'.
EXIT.
ENDIF.
IF LV_FLAG = ''.
COMMIT WORK.
MESSAGE '物料批次已成功合并,操作完成!' TYPE 'S'.
PERFORM FRM_GET_MERGE_INFO.
LEAVE TO SCREEN 0.
ELSE.
ROLLBACK WORK.
MESSAGE '操作失败,请联系管理员!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FRM_MATERIAL_MERGE
*&---------------------------------------------------------------------*
*& Module FRM_CHECK_9002BATCH INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE FRM_CHECK_9002BATCH INPUT.
DATA : LV_CHARG1 TYPE CHARG_D.
IF ZSCRAP-MATNR IS NOT INITIAL AND ZSCRAP-CHARG IS NOT INITIAL.
CLEAR LV_CHARG1 .
SELECT SINGLE CHARG
FROM ZSCRAP
INTO LV_CHARG1
WHERE MATNR = ZSCRAP-MATNR
AND CHARG = ZSCRAP-CHARG.
IF SY-SUBRC = 0 OR LV_CHARG1 IS NOT INITIAL.
MESSAGE '该物料的批次已经存在,请重新录入!' TYPE 'E'.
ENDIF.
ENDIF.
ENDMODULE. " FRM_CHECK_9002BATCH INPUT
*&---------------------------------------------------------------------*
*& Module FRM_CHECK_9009BATCH INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE FRM_CHECK_9009BATCH INPUT.
DATA : LV_CHARG2 TYPE CHARG_D.
DATA : LV_MATNR1 TYPE MATNR.
IF ZSCRAP-MATNR IS NOT INITIAL AND ZSCRAP-CHARG IS NOT INITIAL.
CLEAR LV_CHARG2.
CLEAR LV_MATNR1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = ZSCRAP-MATNR
IMPORTING
OUTPUT = LV_MATNR1.
SELECT SINGLE CHARG
FROM ZSCRAP
INTO LV_CHARG2
WHERE MATNR = LV_MATNR1
AND CHARG = ZSCRAP-CHARG.
IF SY-SUBRC = 0 OR LV_CHARG2 IS NOT INITIAL.
MESSAGE '该物料的批次已经存在,请重新录入!' TYPE 'E'.
ENDIF.
ENDIF.
ENDMODULE. " FRM_CHECK_9009BATCH INPUT
* Program Title:
*
* Created by:
*
* Description:
* Module name: 无
* Type: REPORT
* Special note: None
**----------------------------------------------------------------------
* Associated program: No programs are associated
*-----------------------------------------------------------------------
* Restriction: No restriction
************************************************************************
************************************************************************
REPORT ZPP_ISSUE NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* TABLE DECLARATION
*----------------------------------------------------------------------*
TYPE-POOLS:SLIS.
*INCLUDE <ICON>.
TYPE-POOLS VRM.
TABLES :
SSCRFIELDS,
MARA,
ZZTPP_ZSTZ_HEAD,
ZSCRAP,
MKPF.
*&---------------------------------------------------------------------*
* STRUCTURE DECLARATION
*&---------------------------------------------------------------------*
TYPES :
BEGIN OF T_SCRAP.
INCLUDE STRUCTURE ZSCRAP.
TYPES : MAKTX TYPE MAKTX,
AMOUNT TYPE ZLABST,
NAME1 TYPE NAME1_GP,"供应商名称
TEXT TYPE CHAR50,
MARK TYPE C.
TYPES :END OF T_SCRAP.
*货币码F4帮助
TYPES : BEGIN OF T_TCURT,
WAERS TYPE WAERS_CURC ,
LTEXT TYPE LTEXT,
KTEXT TYPE KTEXT_CURT,
END OF T_TCURT.
*批次号F4帮助
TYPES : BEGIN OF T_CHARG,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
CHARG TYPE CHARG_D,
LABST TYPE ZLABST,
END OF T_CHARG.
* Type for Search help
TYPES: BEGIN OF T_SHLP_MATNR,
MATNR TYPE MATNR,
MAKTX TYPE MAKTX,
WERKS TYPE WERKS_D,
END OF T_SHLP_MATNR.
TYPES:BEGIN OF TY_MESSAGE,
MESSAGE(500) TYPE C,
END OF TY_MESSAGE.
*&---------------------------------------------------------------------*
* INTERNAL TABLE DECLARATION
*&---------------------------------------------------------------------*
DATA :
*物料号F4帮助
I_SEARCH_M TYPE STANDARD TABLE OF T_SHLP_MATNR,
*批次号F4帮助
I_CHARG TYPE STANDARD TABLE OF T_CHARG,
*货币代码F4帮助
I_SEARCH TYPE STANDARD TABLE OF T_TCURT,
*确认收货
I_RECEIVE TYPE STANDARD TABLE OF T_SCRAP,
*输入发货
I_ISSUE TYPE STANDARD TABLE OF T_SCRAP,
*历史收货
I_IN TYPE STANDARD TABLE OF T_SCRAP,
*历史售出
I_OUT TYPE STANDARD TABLE OF T_SCRAP,
*历史余留
I_LEFT TYPE STANDARD TABLE OF T_SCRAP,
*当前库存
I_STOCK TYPE STANDARD TABLE OF T_SCRAP,
*冲销内表
I_WF TYPE STANDARD TABLE OF T_SCRAP.
*&---------------------------------------------------------------------*
* WORK AREA DECLARATION
*&---------------------------------------------------------------------*
DATA :
*确认收货
WA_RECEIVE TYPE T_SCRAP,
*输入发货
WA_ISSUE TYPE T_SCRAP,
WA_FCAT TYPE LVC_S_FCAT,
WA_WF TYPE T_SCRAP.
**** Object variable for ALV Container
DATA:
GV_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GV_CONTAINER2 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GV_CONTAINER3 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GV_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
GV_GRID2 TYPE REF TO CL_GUI_ALV_GRID,
GV_GRID3 TYPE REF TO CL_GUI_ALV_GRID,
I_FCAT1 TYPE LVC_T_FCAT,
I_FCAT2 TYPE LVC_T_FCAT,
I_FCAT3 TYPE LVC_T_FCAT,
I_SORT1 TYPE LVC_T_SORT,
I_SORT2 TYPE LVC_T_SORT,
I_SORT3 TYPE LVC_T_SORT,
GV_LAYOUT1 TYPE LVC_S_LAYO,
GV_LAYOUT2 TYPE LVC_S_LAYO,
GV_LAYOUT3 TYPE LVC_S_LAYO.
**** ALV
DATA :
*ALV Fieldcat
I_FIELDCATS TYPE SLIS_T_FIELDCAT_ALV,
*排序条件
I_SORT TYPE SLIS_T_SORTINFO_ALV,
*Event
I_EVENT TYPE SLIS_T_EVENT,
*ALV头信息
I_TITLE TYPE SLIS_T_LISTHEADER,
*ALV布局
GV_LAYOUT TYPE SLIS_LAYOUT_ALV,
*ALV头
T_HEADER TYPE SLIS_T_LISTHEADER,
*ALV头工作区
WA_HEADER TYPE SLIS_LISTHEADER.
*&---------------------------------------------------------------------*
* VARIANT DECLARATION
*&---------------------------------------------------------------------*
DATA :
OK_CODE1 TYPE SY-UCOMM,
OK_CODE2 TYPE SY-UCOMM,
OK_CODE3 TYPE SY-UCOMM,
OK_CODE4 TYPE SY-UCOMM,
OK_CODE5 TYPE SY-UCOMM,
OK_CODE6 TYPE SY-UCOMM,
OK_CODE7 TYPE SY-UCOMM,
*选择屏幕校验
GV_CFLAG TYPE C,
*------Screen 9000
GV_RECDATE TYPE D,
GV_INFLAG1 TYPE C,
GV_REMARK1 TYPE ZREMARK,
*------Screen 9001
GV_ISSDATE TYPE MKPF-BUDAT,
GV_INFLAG2 TYPE C,
GV_REMARK2 TYPE ZREMARK,
GV_TOTAL TYPE ZVMSAL,
GV_SABST TYPE ZSABST,
GV_LABST TYPE ZLABST,
*------Screen 9003
GV_MONTH TYPE CHAR50,
GV_START TYPE D,
GV_FINISH TYPE D,
GV_NAME TYPE BUTXT,
*------Screen 9008
GV_WFMESSAGE TYPE CHAR255,
*消息Bapi
GW_MESSAGE TYPE TY_MESSAGE.
*&---------------------------------------------------------------------*
* Constant DECLARATION
*&---------------------------------------------------------------------*
CONSTANTS :
C_RATE(16) TYPE P DECIMALS 2 VALUE '0.93',
C_PLANT TYPE WERKS_D VALUE '1201',
C_RECEIVE TYPE C VALUE 'I',
C_ISSUE TYPE C VALUE 'O'.
*&---------------------------------------------------------------------*
* SELECTION SCREEN DECLARATION
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-T01.
SELECTION-SCREEN FUNCTION KEY 1.
* Receive - 收货
SELECTION-SCREEN COMMENT /1(30) TEXT-001 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R1 RADIOBUTTON GROUP RAD1 USER-COMMAND UC DEFAULT 'X'.
SELECTION-SCREEN COMMENT 6(30) TEXT-004 FOR FIELD P_R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-007.
SELECT-OPTIONS: S_BTBHA FOR ZZTPP_ZSTZ_HEAD-BTBHA NO INTERVALS
MATCHCODE OBJECT ZBTBHA MODIF ID M1 NO-EXTENSION .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Issue - 售出
SELECTION-SCREEN COMMENT /1(30) TEXT-002 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R2 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-005 FOR FIELD P_R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Subcontract - 委外
SELECTION-SCREEN COMMENT /1(30) TEXT-016 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R5 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-017 FOR FIELD P_R5.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Stock - 存货
SELECTION-SCREEN COMMENT /1(30) TEXT-003 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R3 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-006 FOR FIELD P_R3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
*选择条件行次
*年月
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-009.
SELECT-OPTIONS: S_MONTH FOR ZSCRAP-ERDAT+0(6) MODIF ID M2 NO-EXTENSION
DEFAULT SY-DATUM+0(6).
SELECTION-SCREEN END OF LINE.
*物料号
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-008.
SELECT-OPTIONS: S_MATNR FOR ZSCRAP-MATNR MODIF ID M2 NO-EXTENSION.
SELECTION-SCREEN END OF LINE.
*批次
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-022.
SELECT-OPTIONS: S_CHARG FOR ZSCRAP-CHARG MODIF ID M3 NO-EXTENSION.
SELECTION-SCREEN END OF LINE.
*库位
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(12) TEXT-031.
SELECT-OPTIONS: S_LGORT FOR ZSCRAP-LGORT
MATCHCODE OBJECT H_T001L MODIF ID M3 NO-EXTENSION.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
*当前库存
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R4 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-015 FOR FIELD P_R4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Merge - 批次合并
SELECTION-SCREEN COMMENT /1(30) TEXT-027 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R7 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(50) TEXT-028 FOR FIELD P_R7.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
* Write-off - 冲销
SELECTION-SCREEN COMMENT /1(30) TEXT-020 MODIF ID SC1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 5.
PARAMETERS P_R6 RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN COMMENT 6(30) TEXT-021 FOR FIELD P_R6.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN PUSHBUTTON 5(24) BUT USER-COMMAND CLI.
SELECTION-SCREEN END OF BLOCK BK1 .
SELECTION-SCREEN COMMENT 1(82) TEXT-029.
SELECTION-SCREEN SKIP 1.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
"按钮文本
BUT = TEXT-019.
CLEAR : GV_CFLAG.
REFRESH :
*确认收货
I_RECEIVE,
*输入发货
I_ISSUE ,
*历史收货
I_IN ,
*历史售出
I_OUT,
*历史余留
I_LEFT,
*当前库存
I_STOCK.
SSCRFIELDS-FUNCTXT_01 = TEXT-032.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*屏幕初始化
PERFORM FRM_SET_SCREEN.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
DATA:
LT_RSPAR TYPE TABLE OF RSPARAMS,
LW_LINE LIKE LINE OF LT_RSPAR.
IF SSCRFIELDS-UCOMM = 'FC01'.
REFRESH LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003010300000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003010400000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003100100000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003100300000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'MATNR'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '000000003100900000'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'WERKS'.
LW_LINE-KIND = 'S'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = '1201'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'PA_SOND'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = 'X'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'NEGATIV'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = ''.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'XMCHB'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = 'X'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'NOZERO'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = 'X'.
APPEND LW_LINE TO LT_RSPAR.
LW_LINE-SELNAME = 'NOVALUES'.
LW_LINE-KIND = 'P'.
LW_LINE-SIGN = 'I'.
LW_LINE-OPTION = 'EQ'.
LW_LINE-LOW = ''.
APPEND LW_LINE TO LT_RSPAR.
SUBMIT RM07MLBS VIA SELECTION-SCREEN WITH SELECTION-TABLE LT_RSPAR AND RETURN.
ENDIF.
IF SY-UCOMM = 'CLI'.
CALL SCREEN 9002 STARTING AT 20 5 ENDING AT 100 12.
ENDIF.
*选择屏幕校验
PERFORM FRM_CHECK_SCREEN.
* search help for material number
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-LOW.
PERFORM FRM_F4_HELP.
* search help for material number
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MATNR-HIGH.
PERFORM FRM_F4_HELP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MONTH-LOW.
PERFORM FRM_F4_DATE1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MONTH-HIGH.
PERFORM FRM_F4_DATE2.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA :
LV_ANSWER TYPE C.
SELECT SINGLE BUTXT
INTO GV_NAME
FROM T001
WHERE BUKRS = '1200'.
CHECK GV_CFLAG = ''.
IF P_R1 = 'X'.
PERFORM FRM_GET_DATA.
IF I_RECEIVE IS NOT INITIAL.
CALL SCREEN 9000.
ELSE.
MESSAGE '没有需要确认的收货!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ELSEIF P_R2 = 'X'.
CALL SCREEN 9001. "售出废料
ELSEIF P_R5 = 'X'.
CALL SCREEN 9007. "委外加工
ELSEIF P_R3 = 'X'.
* show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在处理,请稍等......'. "Preparing list output
*取’年月‘选择条件
PERFORM FRM_GET_DATE CHANGING GV_START GV_FINISH.
CALL SCREEN 9003.
ELSEIF P_R4 = 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
* DEFAULTOPTION = 'Y'
DIAGNOSETEXT1 = '此操作为查看现有废铜棉的数量'
DIAGNOSETEXT2 = '可能会存在大量记录,请确认是否查看!'
* DIAGNOSETEXT3 = ' '
TEXTLINE1 = '确认查看,请点击<是>,返回点击<取消>!'
* TEXTLINE2 = ' '
TITEL = '友情提示'
* START_COLUMN = 25
* START_ROW = 6
* CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = LV_ANSWER
.
IF LV_ANSWER = 'J'.
* show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在处理,请稍等......'. "Preparing list output
PERFORM GET_CURRENT_STOCK.
IF I_STOCK IS INITIAL.
MESSAGE '此刻没有废铜棉库存!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
PERFORM FRM_SHOW_STOCK.
ENDIF.
ENDIF.
ELSEIF P_R6 = 'X'.
PERFORM FRM_WRITEOFF_RECEIVE.
IF I_WF IS NOT INITIAL.
CALL SCREEN 9008.
ELSE.
MESSAGE GV_WFMESSAGE TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ELSEIF P_R7 = 'X'.
PERFORM FRM_GET_MERGE_INFO.
IF I_STOCK IS INITIAL.
MESSAGE '没有查询到您所输入的物料库存,请核实!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
PERFORM FRM_SHOW_STOCK.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
* END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATE
*&---------------------------------------------------------------------*
* 选择屏幕上的年月条件
*----------------------------------------------------------------------*
* <--P_LV_START text
* <--P_LV_FINISH text
*----------------------------------------------------------------------*
FORM FRM_GET_DATE CHANGING P_START TYPE D
P_FINISH TYPE D.
DATA :
LV_STR1 TYPE CHAR10,
LV_STR2 TYPE CHAR10.
IF S_MONTH-LOW IS NOT INITIAL AND S_MONTH-HIGH IS INITIAL.
CONCATENATE S_MONTH-LOW '01' INTO P_START.
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = P_START
* I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
I_MONTHS = 0
* I_DAYS = 0
* I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = P_FINISH
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
CONCATENATE S_MONTH-LOW+0(4) '/' S_MONTH-LOW+4(2)
INTO LV_STR1.
GV_MONTH = LV_STR1.
ELSEIF S_MONTH-LOW IS NOT INITIAL AND S_MONTH-HIGH IS NOT INITIAL.
CONCATENATE S_MONTH-LOW '01' INTO P_START.
CONCATENATE S_MONTH-HIGH '01' INTO P_FINISH.
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = P_FINISH
* I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
I_MONTHS = 0
* I_DAYS = 0
* I_CALENDAR_DAYS = 0
I_SET_LAST_DAY_OF_MONTH = 'X'
IMPORTING
E_DATE = P_FINISH
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
CONCATENATE S_MONTH-LOW+0(4) '/' S_MONTH-LOW+4(2)
INTO LV_STR1.
CONCATENATE S_MONTH-HIGH+0(4) '/' S_MONTH-HIGH+4(2)
INTO LV_STR2.
CONCATENATE LV_STR1 '~' LV_STR2
INTO GV_MONTH SEPARATED BY SPACE.
ENDIF.
ENDFORM. " FRM_GET_DATE
*&---------------------------------------------------------------------*
*& Form FRM_SET_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_SCREEN .
LOOP AT SCREEN.
IF P_R1 = 'X'.
IF SCREEN-GROUP1 = 'M2' OR SCREEN-GROUP1 = 'M3'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R2 = 'X' OR P_R4 = 'X' OR P_R5 = 'X'.
IF SCREEN-GROUP1 = 'M2' OR SCREEN-GROUP1 = 'M1' OR SCREEN-GROUP1 = 'M3'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R3 = 'X'.
IF SCREEN-GROUP1 = 'M1' OR SCREEN-GROUP1 = 'M3'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R6 = 'X'.
IF SCREEN-NAME = 'S_BTBHA-LOW'
OR SCREEN-NAME = 'S_MONTH-LOW'
OR SCREEN-NAME = 'S_MONTH-HIGH'
OR SCREEN-NAME = 'S_LGORT-LOW'
OR SCREEN-NAME = 'S_LGORT-HIGH'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ELSEIF P_R7 = 'X'.
IF SCREEN-NAME = 'S_BTBHA-LOW'
OR SCREEN-NAME = 'S_MONTH-LOW'
OR SCREEN-NAME = 'S_MONTH-HIGH'
OR SCREEN-NAME = 'S_CHARG-HIGH'
OR SCREEN-NAME = 'S_CHARG-LOW'
OR SCREEN-NAME = 'S_MATNR-HIGH'.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDIF.
IF SCREEN-GROUP1 = 'SC1'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_SET_SCREEN
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_SCREEN .
GV_CFLAG = ''.
IF P_R1 = 'X'.
IF S_BTBHA IS INITIAL.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_BTBHA-LOW'.
MESSAGE '请输入需要确认的台班编号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
SELECT SINGLE *
FROM ZZTPP_ZSTZ_HEAD
WHERE BTBHA IN S_BTBHA.
IF SY-SUBRC <> 0.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_BTBHA-LOW'.
MESSAGE '请输入正确的台班编号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ELSEIF P_R3 = 'X'.
IF S_MONTH IS INITIAL.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_MONTH-LOW'.
MESSAGE '请输入查询年月!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
IF S_MATNR IS NOT INITIAL.
SELECT SINGLE *
FROM MARA
WHERE MATNR IN S_MATNR.
IF SY-SUBRC <> 0.
GV_CFLAG = 'X'.
SET CURSOR FIELD 'S_MATNR-LOW'.
MESSAGE '请输入正确的物料编号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ELSEIF P_R6 = 'X'.
IF S_MATNR IS INITIAL OR S_CHARG IS INITIAL.
GV_CFLAG = 'X'.
MESSAGE '请输入冲销条件:物料号跟批次号!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ELSEIF P_R7 = 'X'.
IF S_MATNR IS INITIAL.
GV_CFLAG = 'X'.
MESSAGE '请输入需要批次合并的物料代码!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ENDFORM. " FRM_CHECK_SCREEN
*&SPWizard: Data incl. inserted by SP Wizard. DO NOT CHANGE THIS LINE!
INCLUDE ZPP_ISSUE_TBL4 .
INCLUDE ZPP_SUBCONTRACT_TBL .
INCLUDE ZPP_ISSUE_SCRIP .
INCLUDE ZPP_ISSUE_TBL .
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS '9000'.
SET TITLEBAR 'TITLE' WITH '确认收货'.
*初始化
IF GV_INFLAG1 = ''.
CLEAR ZZTPP_ZSTZ_HEAD.
SELECT SINGLE *
FROM ZZTPP_ZSTZ_HEAD
WHERE BTBHA IN S_BTBHA.
* GV_RECDATE = SY-DATUM.
GV_RECDATE = ZZTPP_ZSTZ_HEAD-BUDAT.
GV_INFLAG1 = 'X'.
ENDIF.
ENDMODULE. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
CASE OK_CODE1.
WHEN 'BACK' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'CONFIRM'.
*确认收货
PERFORM FRM_CONFIRM_RECEIVE.
WHEN 'GIVEUP'.
LEAVE TO SCREEN 0.
ENDCASE.
CLEAR : OK_CODE1.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* 取台班中待确认的废铜棉信息
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
IF S_BTBHA IS NOT INITIAL.
SELECT YLDM AS MATNR
YLPH AS CHARG
LGORT AS LGORT
YLMS AS MAKTX
YLZL AS LABST
FROM ZZTPP_ZSTZ_BODY4
INTO CORRESPONDING FIELDS OF TABLE I_RECEIVE
WHERE BTBHA IN S_BTBHA
AND GZ = ''
.
LOOP AT I_RECEIVE INTO WA_RECEIVE.
WA_RECEIVE-MEINS = 'KG'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WA_RECEIVE-MATNR
IMPORTING
OUTPUT = WA_RECEIVE-MATNR.
MODIFY I_RECEIVE FROM WA_RECEIVE.
ENDLOOP.
ENDIF.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
DATA :
LV_LINE TYPE I.
SET PF-STATUS '9001'.
SET TITLEBAR 'TITLE' WITH '输入发货'.
PERFORM FRM_SET_LISTBOX.
*初始化
IF GV_INFLAG2 = ''.
GV_ISSDATE = SY-DATUM.
GV_REMARK2 = '直接销售废铜棉......'.
GV_INFLAG2 = 'X'.
ENDIF.
*输入一行确认后定位到下一行
IF GV_ISSDATE IS NOT INITIAL.
LV_LINE = LINES( I_ISSUE ).
LV_LINE = LV_LINE + 1.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_LINE.
ENDIF.
ENDMODULE. " STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
DATA :
*函数返回标记
LV_RETURN TYPE C.
CASE OK_CODE2.
*返回屏幕
WHEN 'BACK' OR 'EXIT'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
*退出程序
WHEN 'CANCEL'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE PROGRAM.
ENDIF.
ELSE.
LEAVE PROGRAM.
ENDIF.
*确认售出
WHEN 'SAVE' OR 'VERIFY'.
PERFORM FRM_SELL_OUT.
*清空项目
WHEN 'EMPTY'.
PERFORM FRM_CLEAR_ITEMS.
*取消发货
WHEN 'ABOLISH'.
PERFORM FRM_CANCEL_ISSUE.
ENDCASE.
CLEAR : OK_CODE2.
ENDMODULE. " USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
*& Form CHECK_TBL_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_TBL_INPUT .
DATA:
LV_CURRLINE TYPE I,
WA_TEMP LIKE LINE OF I_ISSUE,
LV_LINES TYPE I,
LV_MATNR TYPE MATNR.
*光标位置
LV_LINES = TBL2-CURRENT_LINE - TBL2-TOP_LINE + 1.
LV_CURRLINE = TBL2-CURRENT_LINE - 1.
LOOP AT I_ISSUE INTO WA_TEMP FROM TBL2-TOP_LINE TO LV_CURRLINE.
IF WA_TEMP-MATNR = WA_ISSUE-MATNR AND WA_TEMP-CHARG = WA_ISSUE-CHARG.
SET CURSOR FIELD 'WA_ISSUE-CHARG' LINE LV_LINES.
MESSAGE '此记录已经存在表格中!' TYPE 'E'.
ENDIF.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE *
FROM ZSCRAP
WHERE MATNR = LV_MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE
AND SFLAG = ''.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_LINES.
MESSAGE '该项目不存在!' TYPE 'E'.
ELSE.
SELECT SINGLE MAKTX
FROM MAKT
INTO WA_ISSUE-MAKTX
WHERE MATNR = LV_MATNR
AND SPRAS = SY-LANGU.
WA_ISSUE-LGORT = ZSCRAP-LGORT.
WA_ISSUE-AMOUNT = ZSCRAP-LABST.
* WA_ISSUE-LABST = ZSCRAP-LABST.
WA_ISSUE-MEINS = 'KG'.
*校验售出废铜棉数量
IF WA_ISSUE-LABST IS INITIAL.
* SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
* MESSAGE '请输入需售出的废铜棉数量!' TYPE 'E'.
WA_ISSUE-LABST = WA_ISSUE-AMOUNT.
ELSEIF WA_ISSUE-LABST < 0 OR WA_ISSUE-LABST > WA_ISSUE-AMOUNT .
SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
MESSAGE '请输入合理的售出数量!' TYPE 'E'.
ENDIF.
IF WA_ISSUE-STPRS IS INITIAL.
SET CURSOR FIELD 'WA_ISSUE-STPRS' LINE LV_LINES.
MESSAGE '请输入单位标准价格!' TYPE 'E'.
ELSE.
WA_ISSUE-PEINH = 1.
WA_ISSUE-TOTAL = WA_ISSUE-STPRS * WA_ISSUE-LABST * WA_ISSUE-PEINH.
WA_ISSUE-WAERS = 'CNY'.
ENDIF.
ENDIF.
ENDFORM. " CHECK_TBL_INPUT
*&---------------------------------------------------------------------*
*& Module F4_HELP INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_WAERS INPUT.
IF I_SEARCH IS INITIAL.
SELECT DISTINCT *
FROM TCURT
INTO CORRESPONDING FIELDS OF TABLE I_SEARCH
WHERE SPRAS = SY-LANGU.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'WAERS'
* PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'WA_ISSUE-WAERS'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
VALUE_TAB = I_SEARCH
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP INPUT
*&---------------------------------------------------------------------*
*& Module F4_HELP_CHARG INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_CHARG INPUT.
DATA :
LV_MATNR TYPE MATNR,
LV_WA_CHARG TYPE T_CHARG.
* IF I_CHARG IS INITIAL.
DATA: DYNPFIELDS TYPE TABLE OF DYNPREAD WITH HEADER LINE.
CLEAR: DYNPFIELDS, DYNPFIELDS[].
DYNPFIELDS-FIELDNAME = 'WA_ISSUE-MATNR'. "填入需要读值的字段名
APPEND DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPFIELDS
EXCEPTIONS
OTHERS = 9.
IF SY-SUBRC = 0.
READ TABLE DYNPFIELDS WITH KEY FIELDNAME = 'WA_ISSUE-MATNR'.
LV_MATNR = DYNPFIELDS-FIELDVALUE. "备注
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT MATNR CHARG LABST
INTO CORRESPONDING FIELDS OF TABLE I_CHARG
FROM ZSCRAP
WHERE FLAG = C_RECEIVE
AND MATNR = LV_MATNR
AND SFLAG <> 'X'
.
LOOP AT I_CHARG INTO LV_WA_CHARG.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_CHARG-MAKTX
WHERE MATNR = LV_WA_CHARG-MATNR
AND SPRAS = SY-LANGU.
MODIFY I_CHARG FROM LV_WA_CHARG.
ENDLOOP.
* ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
RETFIELD = 'CHARG'
* PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'WA_ISSUE-CHARG'
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
VALUE_TAB = I_CHARG
* FIELD_TAB =
* RETURN_TAB =
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP_CHARG INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_9003 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9003 OUTPUT.
SET PF-STATUS '9003'.
SET TITLEBAR 'TITLE' WITH '显示库存'.
ENDMODULE. " STATUS_9003 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9003 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9003 INPUT.
CASE OK_CODE3.
WHEN 'BACK' OR 'EXIT'.
PERFORM FRM_FREE_CONTAINER.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
PERFORM FRM_FREE_CONTAINER.
LEAVE PROGRAM.
ENDCASE.
CLEAR : OK_CODE3.
ENDMODULE. " USER_COMMAND_9003 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_CONFIRM_RECEIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CONFIRM_RECEIVE .
DATA :
LV_MATNR TYPE MATNR,
LV_CHARG TYPE CHARG_D,
LV_RETURN TYPE C,
LV_WA_BTBHA TYPE ZZTPP_ZSTZ_BODY4,
LV_I_BTBHA TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY4,
LV_WA_INSERT TYPE ZSCRAP,
LV_I_INSERT TYPE STANDARD TABLE OF ZSCRAP.
*Bapi参数
DATA:LW_P3_GOODSMVT_HEADER TYPE BAPI2017_GM_HEAD_01,
LW_P3_GOODSMVT_HEADRET TYPE BAPI2017_GM_HEAD_RET,
LW_P3_MATERIALDOCUMENT TYPE BAPI2017_GM_HEAD_RET-MAT_DOC,
LW_P3_MATDOCUMENTYEAR TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
LT_P3_GOODSMVT_ITEM TYPE STANDARD TABLE OF BAPI2017_GM_ITEM_CREATE,
LW_P3_GOODSMVT_ITEM TYPE BAPI2017_GM_ITEM_CREATE,
LT_P3_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LW_P3_RETURN TYPE BAPIRET2.
*取成品信息
DATA :GW_BODY3_SUM TYPE ZZTPP_ZSTZ_BODY3-YLCCHJ,
GT_BODY3 TYPE STANDARD TABLE OF ZZTPP_ZSTZ_BODY3,
LW_P3_BODY3 TYPE ZZTPP_ZSTZ_BODY3.
*校验一下批次
LOOP AT I_RECEIVE INTO WA_RECEIVE.
CLEAR : LV_MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_RECEIVE-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE CHARG
FROM ZSCRAP
INTO LV_CHARG
WHERE MATNR = LV_MATNR
AND CHARG = WA_RECEIVE-CHARG.
IF SY-SUBRC = 0 OR LV_CHARG IS NOT INITIAL.
MESSAGE '该物料的批次已经存在,请告知生产部相关人员确认!' TYPE 'E'.
ENDIF.
ENDLOOP.
PERFORM FRM_POPUP_INFO USING TEXT-010 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*收货到系统--------------------- 1、
*Bapi抬头参数
CLEAR ZZTPP_ZSTZ_HEAD.
SELECT SINGLE *
FROM ZZTPP_ZSTZ_HEAD
INTO ZZTPP_ZSTZ_HEAD
WHERE BTBHA IN S_BTBHA.
CLEAR LW_P3_GOODSMVT_HEADER.
IF ZZTPP_ZSTZ_HEAD-BUDAT IS NOT INITIAL.
LW_P3_GOODSMVT_HEADER-PSTNG_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
LW_P3_GOODSMVT_HEADER-DOC_DATE = ZZTPP_ZSTZ_HEAD-BUDAT.
ELSE.
LW_P3_GOODSMVT_HEADER-PSTNG_DATE = SY-DATUM.
LW_P3_GOODSMVT_HEADER-DOC_DATE = SY-DATUM.
ENDIF.
LW_P3_GOODSMVT_HEADER-PR_UNAME = SY-UNAME.
LW_P3_GOODSMVT_HEADER-HEADER_TXT = ZZTPP_ZSTZ_HEAD-BTBHA."台班编号
REFRESH LT_P3_GOODSMVT_ITEM.
REFRESH LT_P3_RETURN.
CLEAR :
LW_P3_RETURN,
LW_P3_GOODSMVT_HEADRET,
LW_P3_MATERIALDOCUMENT,
LW_P3_MATDOCUMENTYEAR,
LW_P3_GOODSMVT_ITEM.
SELECT *
FROM ZZTPP_ZSTZ_BODY3
INTO CORRESPONDING FIELDS OF TABLE GT_BODY3
WHERE BTBHA IN S_BTBHA.
* 原料产出合计
CLEAR: LW_P3_BODY3,GW_BODY3_SUM.
LOOP AT GT_BODY3 INTO LW_P3_BODY3.
GW_BODY3_SUM = GW_BODY3_SUM + LW_P3_BODY3-YLCCHJ.
ENDLOOP.
LOOP AT I_RECEIVE INTO WA_RECEIVE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_RECEIVE-MATNR
IMPORTING
OUTPUT = WA_RECEIVE-MATNR.
"低值废铜棉不过账到系统
IF WA_RECEIVE-MATNR+8 = '3100900000'.
CONTINUE.
ENDIF.
LOOP AT GT_BODY3 INTO LW_P3_BODY3.
IF LW_P3_BODY3-YLCCHJ = 0 OR LW_P3_BODY3-YLCCHJ IS INITIAL.
CONTINUE.
ENDIF.
LW_P3_GOODSMVT_ITEM-PLANT = '1201'."工厂
LW_P3_GOODSMVT_ITEM-STGE_LOC = WA_RECEIVE-LGORT."库存地点
LW_P3_GOODSMVT_ITEM-MOVE_TYPE = '531'."移动类型
* LW_P3_GOODSMVT_ITEM-ENTRY_QNT = WA_RECEIVE-LABST.
LW_P3_GOODSMVT_ITEM-ENTRY_QNT =
WA_RECEIVE-LABST * ( LW_P3_BODY3-YLCCHJ / GW_BODY3_SUM ).
LW_P3_GOODSMVT_ITEM-ENTRY_UOM = 'KG'."单位
LW_P3_GOODSMVT_ITEM-ORDERID = LW_P3_BODY3-CPDDH."订单号
LW_P3_GOODSMVT_ITEM-MATERIAL = WA_RECEIVE-MATNR."物料代码
LW_P3_GOODSMVT_ITEM-BATCH = WA_RECEIVE-CHARG."批号
SELECT SINGLE RSNUM RSPOS " 预留编号,预留项目编号
INTO (LW_P3_GOODSMVT_ITEM-RESERV_NO,LW_P3_GOODSMVT_ITEM-RES_ITEM)
FROM RESB
WHERE AUFNR = LW_P3_BODY3-CPDDH
AND MATNR = WA_RECEIVE-MATNR.
IF SY-SUBRC <> 0.
CLEAR : LW_P3_GOODSMVT_ITEM-RESERV_NO,
LW_P3_GOODSMVT_ITEM-RES_ITEM.
ENDIF.
APPEND LW_P3_GOODSMVT_ITEM TO LT_P3_GOODSMVT_ITEM.
ENDLOOP.
ENDLOOP.
IF LT_P3_GOODSMVT_ITEM IS NOT INITIAL.
"分摊数量为0的行次
DELETE LT_P3_GOODSMVT_ITEM WHERE ENTRY_QNT = 0.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = LW_P3_GOODSMVT_HEADER
GOODSMVT_CODE = '05' "MB1C
IMPORTING
GOODSMVT_HEADRET = LW_P3_GOODSMVT_HEADRET
MATERIALDOCUMENT = LW_P3_MATERIALDOCUMENT
MATDOCUMENTYEAR = LW_P3_MATDOCUMENTYEAR
TABLES
GOODSMVT_ITEM = LT_P3_GOODSMVT_ITEM
RETURN = LT_P3_RETURN.
IF LW_P3_MATERIALDOCUMENT IS INITIAL.
ROLLBACK WORK.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
SORT LT_P3_RETURN BY TYPE ID NUMBER.
DELETE ADJACENT DUPLICATES FROM LT_P3_RETURN COMPARING TYPE ID NUMBER.
CLEAR LW_P3_RETURN.
LOOP AT LT_P3_RETURN INTO LW_P3_RETURN .
IF GW_MESSAGE IS INITIAL.
GW_MESSAGE-MESSAGE = LW_P3_RETURN-MESSAGE.
ELSE.
CONCATENATE GW_MESSAGE-MESSAGE ';' LW_P3_RETURN-MESSAGE
INTO GW_MESSAGE-MESSAGE .
ENDIF.
ENDLOOP.
MESSAGE GW_MESSAGE-MESSAGE TYPE 'I'.
EXIT.
ENDIF.
ENDIF.
*保存记录到数据库---------------- 2、
REFRESH LV_I_INSERT.
LOOP AT I_RECEIVE INTO WA_RECEIVE.
CLEAR : LV_WA_INSERT.
MOVE-CORRESPONDING WA_RECEIVE TO LV_WA_INSERT.
LV_WA_INSERT-BUDAT = GV_RECDATE.
LV_WA_INSERT-WERKS = C_PLANT.
LV_WA_INSERT-FLAG = C_RECEIVE.
LV_WA_INSERT-REMARK = GV_REMARK1.
LV_WA_INSERT-OABST = WA_RECEIVE-LABST. " 原始入库数量
LV_WA_INSERT-ERDAT = SY-DATUM.
LV_WA_INSERT-ERZET = SY-UZEIT.
LV_WA_INSERT-ERNAM = SY-UNAME.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_INSERT-MATNR
IMPORTING
OUTPUT = LV_WA_INSERT-MATNR.
APPEND LV_WA_INSERT TO LV_I_INSERT.
ENDLOOP.
INSERT ZSCRAP FROM TABLE LV_I_INSERT.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
EXIT.
ENDIF.
*更新台班中的废铜棉的状态----------- 3、
SELECT *
FROM ZZTPP_ZSTZ_BODY4
INTO CORRESPONDING FIELDS OF TABLE LV_I_BTBHA
WHERE BTBHA IN S_BTBHA
AND GZ = ''
.
DATA : LV_FLG TYPE C.
CLEAR LV_FLG.
LOOP AT LV_I_BTBHA INTO LV_WA_BTBHA.
LV_WA_BTBHA-GZ = 'Y'.
LV_WA_BTBHA-ROWCOLOR = 'C410'.
"物料凭证
IF LV_WA_BTBHA-YLDM+8 <> '3100900000'.
LV_WA_BTBHA-MBLNR = LW_P3_MATERIALDOCUMENT.
ENDIF.
* MODIFY LV_I_BTBHA FROM LV_WA_BTBHA.
UPDATE ZZTPP_ZSTZ_BODY4
SET GZ = LV_WA_BTBHA-GZ
ROWCOLOR = LV_WA_BTBHA-ROWCOLOR
MBLNR = LV_WA_BTBHA-MBLNR
WHERE YLDM = LV_WA_BTBHA-YLDM
AND YLPH = LV_WA_BTBHA-YLPH
AND LGORT = LV_WA_BTBHA-LGORT.
IF SY-SUBRC <> 0.
LV_FLG = 'X'.
ROLLBACK WORK.
ENDIF.
ENDLOOP.
IF LV_FLG = 'X'.
EXIT.
ENDIF.
* MODIFY ZZTPP_ZSTZ_BODY4 FROM TABLE LV_I_BTBHA.
* IF SY-SUBRC <> 0.
* ROLLBACK WORK.
* EXIT.
* ENDIF.
COMMIT WORK.
MESSAGE '项目已成功确认,请告知台账录入人员!' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDIF.
ENDFORM. " FRM_CONFIRM_RECEIVE
*&---------------------------------------------------------------------*
*& Form frm_popup_info
*&---------------------------------------------------------------------*
* 弹出框信息
*----------------------------------------------------------------------*
* -->P_TEXT1 text
* -->P_TEXT2 text
* -->P_RETURN text
*----------------------------------------------------------------------*
FORM FRM_POPUP_INFO USING P_TEXT1 P_TEXT2
CHANGING P_RETURN.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' "#EC *
EXPORTING
DEFAULTOPTION = 'Y'
TEXTLINE1 = P_TEXT1
TITEL = P_TEXT2
CANCEL_DISPLAY = ''
IMPORTING
ANSWER = P_RETURN.
ENDFORM. "FRM_POPUP_INFO
*&---------------------------------------------------------------------*
*& Form FRM_CLEAR_ITEMS
*&---------------------------------------------------------------------*
* 清空所有行项目
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CLEAR_ITEMS .
DATA :
LV_RETURN TYPE C.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-012 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
REFRESH I_ISSUE.
CLEAR :
GV_LABST,
GV_TOTAL,
GV_REMARK2.
ENDIF.
ENDIF.
ENDFORM. " FRM_CLEAR_ITEMS
*&---------------------------------------------------------------------*
*& Form FRM_CANCEL_ISSUE
*&---------------------------------------------------------------------*
* 取消操作,返回
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CANCEL_ISSUE .
DATA :
LV_RETURN TYPE C.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-013 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
ENDFORM. " FRM_CANCEL_ISSUE
*&---------------------------------------------------------------------*
*& Form FRM_SELL_OUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SELL_OUT .
DATA :
*函数返回标记
LV_RETURN TYPE C,
*更新出错标记
LV_FLAG TYPE C,
*剩余数量
LV_LEFT TYPE ZLABST,
*插入行次
LV_LINE TYPE ZLINES,
*处理工作区
LV_WA_RECEIVE TYPE ZSCRAP.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-014 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*售出纪录保存到数据库中----- 1、
LOOP AT I_ISSUE INTO WA_ISSUE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = WA_ISSUE-MATNR.
"查看是否已经有售出或者委外记录
CLEAR : LV_LINE.
SELECT MAX( LINE )
FROM ZSCRAP
INTO LV_LINE
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_ISSUE .
IF SY-SUBRC <> 0 .
WA_ISSUE-LINE = '01'.
ELSE.
WA_ISSUE-LINE = LV_LINE + 1.
ENDIF.
WA_ISSUE-BUDAT = GV_ISSDATE.
WA_ISSUE-WERKS = C_PLANT.
WA_ISSUE-FLAG = C_ISSUE. " O 发
WA_ISSUE-REMARK = GV_REMARK2.
WA_ISSUE-ERDAT = SY-DATUM.
WA_ISSUE-ERZET = SY-UZEIT.
WA_ISSUE-ERNAM = SY-UNAME.
WA_ISSUE-SORT = '1'. " 直接售出
MODIFY I_ISSUE FROM WA_ISSUE.
ENDLOOP.
INSERT ZSCRAP FROM TABLE I_ISSUE.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
EXIT.
ENDIF.
CLEAR : LV_FLAG.
*更新库存标示或扣减更新---------------- 2、
LOOP AT I_ISSUE INTO WA_ISSUE.
"库存已售出
IF WA_ISSUE-AMOUNT = WA_ISSUE-LABST.
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = 'X' "已售出
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ELSE.
"库存依旧有剩余
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = ''
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF LV_FLAG = ''.
COMMIT WORK.
MESSAGE '已成功发货,操作完成!' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FRM_SELL_OUT
*&---------------------------------------------------------------------*
*& Module INIT_CONTAINER OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE INIT_CONTAINER OUTPUT.
IF GV_GRID1 IS INITIAL.
* Object for container1
CREATE OBJECT GV_CONTAINER1
EXPORTING
CONTAINER_NAME = 'CONTAINER1'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Object for Alv grid1
CREATE OBJECT GV_GRID1
EXPORTING
I_PARENT = GV_CONTAINER1
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF GV_GRID2 IS INITIAL.
* Object for container1
CREATE OBJECT GV_CONTAINER2
EXPORTING
CONTAINER_NAME = 'CONTAINER2'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Object for Alv grid1
CREATE OBJECT GV_GRID2
EXPORTING
I_PARENT = GV_CONTAINER2
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF GV_GRID3 IS INITIAL.
* Object for container1
CREATE OBJECT GV_CONTAINER3
EXPORTING
CONTAINER_NAME = 'CONTAINER3'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Object for Alv grid1
CREATE OBJECT GV_GRID3
EXPORTING
I_PARENT = GV_CONTAINER3
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDMODULE. " INIT_CONTAINER OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_FREE_CONTAINER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_FREE_CONTAINER .
* Free the object of container
IF NOT GV_CONTAINER1 IS INITIAL
OR NOT GV_CONTAINER2 IS INITIAL
OR NOT GV_CONTAINER3 IS INITIAL.
CALL METHOD GV_CONTAINER1->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
CALL METHOD GV_CONTAINER2->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
CALL METHOD GV_CONTAINER3->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
CLEAR:
GV_CONTAINER1,
GV_CONTAINER2,
GV_CONTAINER3,
GV_GRID1,
GV_GRID2,
GV_GRID3.
ENDIF.
ENDFORM. " FRM_FREE_CONTAINER
*&---------------------------------------------------------------------*
*& Module STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0110 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0110 OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_RECEIVE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_RECEIVE OUTPUT.
DATA : LV_WA_IN TYPE T_SCRAP.
DATA : LS_SORT1 TYPE LVC_S_SORT .
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_IN
WHERE BUDAT BETWEEN GV_START AND GV_FINISH
AND MATNR IN S_MATNR
AND FLAG = C_RECEIVE.
LOOP AT I_IN INTO LV_WA_IN.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_IN-MAKTX
WHERE MATNR = LV_WA_IN-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_IN-MATNR
IMPORTING
OUTPUT = LV_WA_IN-MATNR.
MODIFY I_IN FROM LV_WA_IN.
ENDLOOP.
REFRESH I_FCAT1.
PERFORM FRM_ALV_FIELD USING 1 'MATNR' '废铜棉代码' 'C411' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 2 'MAKTX' '描述' '' 20 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 3 'CHARG' '批号' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 4 'BUDAT' '收货日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 5 'WERKS' '工厂' '' 4 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 6 'LGORT' '库存地点' '' 8 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 7 'OABST' '收获数量' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 8 'MEINS' '单位' '' 4 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 9 'ERNAM' '责任人' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 10 'ERDAT' '处理日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
PERFORM FRM_ALV_FIELD USING 11 'ERZET' '处理时间' '' 10 ''.
APPEND WA_FCAT TO I_FCAT1.
LOOP AT I_FCAT1 INTO WA_FCAT.
IF WA_FCAT-FIELDNAME = 'MEINS'.
WA_FCAT-REF_FIELD = 'MEINS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'OABST'.
WA_FCAT-QFIELDNAME = 'MEINS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
MODIFY I_FCAT1 FROM WA_FCAT.
ENDLOOP.
CLEAR : GV_LAYOUT1.
GV_LAYOUT1-SEL_MODE = 'D'.
GV_LAYOUT1-ZEBRA = 'X' .
* GV_LAYOUT1-CTAB_FNAME = 'CELLCOLORS'.
* GV_LAYOUT1-INFO_FNAME = 'ROWCOLOR'.
GV_LAYOUT1-GRID_TITLE = '期间确认收货' .
GV_LAYOUT1-SMALLTITLE = 'X' .
CLEAR : LS_SORT1.
LS_SORT1-SPOS = '1' .
LS_SORT1-FIELDNAME = 'MATNR' .
LS_SORT1-UP = 'X' .
LS_SORT1-DOWN = SPACE .
APPEND LS_SORT1 TO I_SORT1 .
CLEAR : LS_SORT1.
LS_SORT1-SPOS = '2' .
LS_SORT1-FIELDNAME = 'MAKTX' .
LS_SORT1-UP = 'X' .
LS_SORT1-DOWN = SPACE .
LS_SORT1-SUBTOT = 'X'.
APPEND LS_SORT1 TO I_SORT1 .
*AVL的显示
CALL METHOD GV_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GV_LAYOUT1
I_SAVE = 'A'
CHANGING
IT_OUTTAB = I_IN
IT_FIELDCATALOG = I_FCAT1
IT_SORT = I_SORT1
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDMODULE. " GET_RECEIVE OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_ISSUE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_ISSUE OUTPUT.
DATA : LV_WA_OUT TYPE T_SCRAP.
DATA : LS_SORT2 TYPE LVC_S_SORT .
DATA :
LV_I_VALUE TYPE STANDARD TABLE OF DD07V,
LV_WA_DOMTAB TYPE DD07V.
*出库区分域
CALL FUNCTION 'DD_DOMVALUES_GET'
EXPORTING
DOMNAME = 'ZSORT'
TEXT = 'X'
LANGU = SY-LANGU
TABLES
DD07V_TAB = LV_I_VALUE
EXCEPTIONS "#EC FB_RC
WRONG_TEXTFLAG = 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.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_OUT
WHERE BUDAT BETWEEN GV_START AND GV_FINISH
AND MATNR IN S_MATNR
AND FLAG = C_ISSUE.
LOOP AT I_OUT INTO LV_WA_OUT.
CLEAR LV_WA_DOMTAB.
READ TABLE LV_I_VALUE INTO LV_WA_DOMTAB
WITH KEY DOMVALUE_L = LV_WA_OUT-SORT.
IF SY-SUBRC = 0.
LV_WA_OUT-TEXT = LV_WA_DOMTAB-DDTEXT.
ENDIF.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_OUT-MAKTX
WHERE MATNR = LV_WA_OUT-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_OUT-MATNR
IMPORTING
OUTPUT = LV_WA_OUT-MATNR.
IF LV_WA_OUT-LIFNR IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_OUT-LIFNR
IMPORTING
OUTPUT = LV_WA_OUT-LIFNR.
SELECT SINGLE NAME1
FROM LFA1
INTO LV_WA_OUT-NAME1
WHERE LIFNR = LV_WA_OUT-LIFNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_OUT-LIFNR
IMPORTING
OUTPUT = LV_WA_OUT-LIFNR.
ENDIF.
MODIFY I_OUT FROM LV_WA_OUT.
ENDLOOP.
REFRESH I_FCAT2.
PERFORM FRM_ALV_FIELD USING 1 'MATNR' '废铜棉代码' 'C411' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 2 'MAKTX' '描述' '' 20 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 3 'CHARG' '批号' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 4 'BUDAT' '出库日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 5 'TEXT' '出库区分' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 6 'WERKS' '工厂' '' 4 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 7 'LGORT' '库存地点' '' 8 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 8 'LABST' '出库数量' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 9 'SABST' '预计收货' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 10 'MEINS' '单位' '' 4 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 11 'STPRS' '标准价格' '' 10 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 12 'PEINH' '价格单位' '' 6 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 13 'TOTAL' '金额' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 14 'WAERS' '货币' '' 4 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 15 'NAME1' '供应商' '' 30 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 16 'ERNAM' '责任人' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 17 'ERDAT' '处理日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
PERFORM FRM_ALV_FIELD USING 18 'ERZET' '处理时间' '' 10 ''.
APPEND WA_FCAT TO I_FCAT2.
LOOP AT I_FCAT2 INTO WA_FCAT.
IF WA_FCAT-FIELDNAME = 'MEINS'.
WA_FCAT-REF_FIELD = 'MEINS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'LABST'
OR WA_FCAT-FIELDNAME = 'SABST'.
WA_FCAT-QFIELDNAME = 'MEINS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'WAERS'.
WA_FCAT-REF_FIELD = 'WAERS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'TOTAL'.
WA_FCAT-QFIELDNAME = 'WAERS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'LABST'
OR WA_FCAT-FIELDNAME = 'SABST'
OR WA_FCAT-FIELDNAME = 'TOTAL'
OR WA_FCAT-FIELDNAME = 'STPRS'
OR WA_FCAT-FIELDNAME = 'PEINH'.
WA_FCAT-NO_ZERO = 'X'.
ENDIF.
MODIFY I_FCAT2 FROM WA_FCAT.
ENDLOOP.
CLEAR : GV_LAYOUT2.
GV_LAYOUT2-SEL_MODE = 'D'.
GV_LAYOUT2-ZEBRA = 'X' .
GV_LAYOUT2-GRID_TITLE = '期间售出库存' .
GV_LAYOUT2-SMALLTITLE = 'X' .
CLEAR : LS_SORT2.
LS_SORT2-SPOS = '1' .
LS_SORT2-FIELDNAME = 'MATNR' .
LS_SORT2-UP = 'X' .
LS_SORT2-DOWN = SPACE .
APPEND LS_SORT2 TO I_SORT2 .
CLEAR : LS_SORT2.
LS_SORT2-SPOS = '2' .
LS_SORT2-FIELDNAME = 'MAKTX' .
LS_SORT2-UP = 'X' .
LS_SORT2-DOWN = SPACE .
LS_SORT2-SUBTOT = 'X'.
APPEND LS_SORT2 TO I_SORT2 .
*AVL的显示
CALL METHOD GV_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GV_LAYOUT2
I_SAVE = 'A'
CHANGING
IT_OUTTAB = I_OUT
IT_FIELDCATALOG = I_FCAT2
IT_SORT = I_SORT2
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDMODULE. " GET_ISSUE OUTPUT
*&---------------------------------------------------------------------*
*& Module GET_LEFT OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE GET_LEFT OUTPUT.
DATA : LV_WA_LEFT TYPE T_SCRAP.
DATA : LS_SORT3 TYPE LVC_S_SORT .
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_LEFT
WHERE BUDAT BETWEEN GV_START AND GV_FINISH
AND MATNR IN S_MATNR
AND FLAG = C_RECEIVE
AND SFLAG = ''.
LOOP AT I_LEFT INTO LV_WA_LEFT.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_LEFT-MAKTX
WHERE MATNR = LV_WA_LEFT-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_LEFT-MATNR
IMPORTING
OUTPUT = LV_WA_LEFT-MATNR.
MODIFY I_LEFT FROM LV_WA_LEFT.
ENDLOOP.
REFRESH I_FCAT3.
PERFORM FRM_ALV_FIELD USING 1 'MATNR' '废铜棉代码' 'C411' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 2 'MAKTX' '描述' '' 20 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 3 'CHARG' '批号' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 4 'BUDAT' '收货日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 5 'WERKS' '工厂' '' 4 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 6 'LGORT' '库存地点' '' 8 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 7 'LABST' '数量' '' 15 'R'.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 8 'MEINS' '单位' '' 4 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 9 'ERNAM' '责任人' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 10 'ERDAT' '处理日期' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
PERFORM FRM_ALV_FIELD USING 11 'ERZET' '处理时间' '' 10 ''.
APPEND WA_FCAT TO I_FCAT3.
LOOP AT I_FCAT3 INTO WA_FCAT.
IF WA_FCAT-FIELDNAME = 'MEINS'.
WA_FCAT-REF_FIELD = 'MEINS'.
WA_FCAT-REF_TABLE = 'ZSCRAP'.
ENDIF.
IF WA_FCAT-FIELDNAME = 'LABST'.
WA_FCAT-QFIELDNAME = 'MEINS'.
WA_FCAT-DO_SUM = 'X'.
ENDIF.
MODIFY I_FCAT3 FROM WA_FCAT.
ENDLOOP.
CLEAR : GV_LAYOUT3.
GV_LAYOUT3-SEL_MODE = 'D'.
GV_LAYOUT3-ZEBRA = 'X' .
GV_LAYOUT3-GRID_TITLE = '期间结余存货' .
GV_LAYOUT3-SMALLTITLE = 'X' .
CLEAR : LS_SORT3.
LS_SORT3-SPOS = '1' .
LS_SORT3-FIELDNAME = 'MATNR' .
LS_SORT3-UP = 'X' .
LS_SORT3-DOWN = SPACE .
APPEND LS_SORT3 TO I_SORT3 .
CLEAR : LS_SORT3.
LS_SORT3-SPOS = '2' .
LS_SORT3-FIELDNAME = 'MAKTX' .
LS_SORT3-UP = 'X' .
LS_SORT3-DOWN = SPACE .
LS_SORT3-SUBTOT = 'X'.
APPEND LS_SORT3 TO I_SORT3 .
*AVL的显示
CALL METHOD GV_GRID3->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GV_LAYOUT3
I_SAVE = 'A'
CHANGING
IT_OUTTAB = I_LEFT
IT_FIELDCATALOG = I_FCAT3
IT_SORT = I_SORT3
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
ENDMODULE. " GET_LEFT OUTPUT
*&---------------------------------------------------------------------*
*& Form alv_field
*&---------------------------------------------------------------------*
* 设置ALV显示属性
*----------------------------------------------------------------------*
* -->COL_POS text
* -->FIELDNAME text
* -->COLTEXT text
* -->SELTEXT text
* -->EMPHASIZE text
*----------------------------------------------------------------------*
FORM FRM_ALV_FIELD USING COL_POS
FIELDNAME
COLTEXT
EMPHASIZE
LENGTH
JUST.
CLEAR WA_FCAT.
WA_FCAT-COL_POS = COL_POS.
WA_FCAT-FIELDNAME = FIELDNAME.
WA_FCAT-COLTEXT = COLTEXT.
WA_FCAT-EMPHASIZE = EMPHASIZE.
WA_FCAT-OUTPUTLEN = LENGTH.
WA_FCAT-JUST = JUST.
ENDFORM. " frm_alv_field
*&---------------------------------------------------------------------*
*& Form GET_CURRENT_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_CURRENT_STOCK .
DATA : LV_WA_STOCK TYPE T_SCRAP.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_STOCK
WHERE FLAG = C_RECEIVE
AND SFLAG = ''.
LOOP AT I_STOCK INTO LV_WA_STOCK.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_STOCK-MAKTX
WHERE MATNR = LV_WA_STOCK-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
MODIFY I_STOCK FROM LV_WA_STOCK.
ENDLOOP.
SORT I_STOCK BY MATNR CHARG.
DELETE I_STOCK WHERE LABST = 0.
ENDFORM. " GET_CURRENT_STOCK
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_STOCK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SHOW_STOCK .
DATA:
L_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
L_COL_POS TYPE I,
L_SORT TYPE SLIS_SORTINFO_ALV,
LV_REPID LIKE SY-REPID.
IF P_R7 = 'X'.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MARK'.
L_FIELDCAT-SELTEXT_M = '选择'.
L_FIELDCAT-OUTPUTLEN = 8.
L_FIELDCAT-CHECKBOX = 'X'.
APPEND L_FIELDCAT TO I_FIELDCATS.
ENDIF.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MAKTX'.
L_FIELDCAT-SELTEXT_M = '废铜棉'.
L_FIELDCAT-OUTPUTLEN = 20.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MATNR'.
L_FIELDCAT-SELTEXT_M = '物料代码'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'CHARG'.
L_FIELDCAT-SELTEXT_M = '批号'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'BUDAT'.
L_FIELDCAT-SELTEXT_M = '收货日期'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'WERKS'.
L_FIELDCAT-SELTEXT_M = '工厂'.
L_FIELDCAT-OUTPUTLEN = 4.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'LGORT'.
L_FIELDCAT-SELTEXT_M = '库存地点'.
L_FIELDCAT-OUTPUTLEN = 8.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'LABST'.
L_FIELDCAT-SELTEXT_M = '数量'.
L_FIELDCAT-OUTPUTLEN = 15.
L_FIELDCAT-JUST = 'R'.
L_FIELDCAT-DO_SUM = 'X'.
L_FIELDCAT-QFIELDNAME = 'MEINS'.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'MEINS'.
L_FIELDCAT-SELTEXT_M = '单位'.
L_FIELDCAT-OUTPUTLEN = 4.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'REMARK'.
L_FIELDCAT-SELTEXT_M = '备注'.
L_FIELDCAT-OUTPUTLEN = 30.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'ERNAM'.
L_FIELDCAT-SELTEXT_M = '责任人'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'ERDAT'.
L_FIELDCAT-SELTEXT_M = '处理日期'.
L_FIELDCAT-OUTPUTLEN = 12.
APPEND L_FIELDCAT TO I_FIELDCATS.
CLEAR L_FIELDCAT.
L_COL_POS = L_FIELDCAT-COL_POS + 1.
L_FIELDCAT-FIELDNAME = 'ERZET'.
L_FIELDCAT-SELTEXT_M = '处理时间'.
L_FIELDCAT-OUTPUTLEN = 10.
APPEND L_FIELDCAT TO I_FIELDCATS.
GV_LAYOUT-GET_SELINFOS = 'X'.
GV_LAYOUT-F2CODE = '&ETA'.
GV_LAYOUT-EDIT_MODE = 'D'.
GV_LAYOUT-DETAIL_POPUP = 'X'.
GV_LAYOUT-DETAIL_TITLEBAR = '详细内容' .
IF P_R4 = 'X'.
GV_LAYOUT-WINDOW_TITLEBAR = '当前库存'.
ELSEIF P_R7 = 'X'.
GV_LAYOUT-WINDOW_TITLEBAR = '物料批次合并'.
ENDIF.
IF P_R4 = 'X'.
L_SORT-FIELDNAME = 'MAKTX'.
L_SORT-SPOS = 1.
L_SORT-UP = 'X'.
L_SORT-DOWN = ''.
L_SORT-SUBTOT = 'X'.
L_SORT-EXPA = 'X'.
APPEND L_SORT TO I_SORT.
ENDIF.
*Display
LV_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* i_interface_check = 'X'
I_CALLBACK_PROGRAM = LV_REPID
I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE'
* I_STRUCTURE_NAME =
IS_LAYOUT = GV_LAYOUT
IT_FIELDCAT = I_FIELDCATS
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = I_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A'
* IS_VARIANT = IS_VARIANT
IT_EVENTS = I_EVENT
TABLES
T_OUTTAB = I_STOCK
EXCEPTIONS
PROGRAM_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.
ENDFORM. " FRM_SHOW_STOCK
*---------------------------------------------------------------------*
* FORM ALV_PF_STATUS_SET
*---------------------------------------------------------------------*
FORM ALV_PF_STATUS_SET
USING RT_EXTAB TYPE SLIS_T_EXTAB.
IF P_R4 = 'X'.
APPEND 'COMBIN' TO RT_EXTAB.
APPEND 'REFRESH' TO RT_EXTAB.
SET PF-STATUS 'STANDARD_TOOLS' EXCLUDING RT_EXTAB.
ELSEIF P_R7 = 'X'.
SET PF-STATUS 'STANDARD_TOOLS'." EXCLUDING RT_EXTAB.
ENDIF.
ENDFORM. "alv_pf_status_set
*---------------------------------------------------------------------*
* FORM ALV_USER_COMMAND
*---------------------------------------------------------------------*
FORM ALV_USER_COMMAND
USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA : LV_NUM TYPE I.
IF R_UCOMM = 'COMBIN'.
CLEAR LV_NUM.
DESCRIBE TABLE I_STOCK LINES LV_NUM.
IF LV_NUM <= 1.
MESSAGE '记录数小于等于1条,无需合并批次!' TYPE 'I'.
ELSE.
CLEAR : ZSCRAP.
CALL SCREEN 9009 STARTING AT 20 15 ENDING AT 100 25.
ENDIF.
ELSEIF R_UCOMM = 'REFRESH'.
PERFORM FRM_GET_MERGE_INFO.
RS_SELFIELD-REFRESH = 'X'. "设置刷新标记
ENDIF.
ENDFORM. "alv_user_command
*&---------------------------------------------------------------------*
*& Form TOP-OF-PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM TOP-OF-PAGE.
CLEAR: T_HEADER, WA_HEADER.
WA_HEADER-TYP = 'H'.
IF P_R4 = 'X'.
WA_HEADER-INFO = '废铜棉库存一览'.
ELSEIF P_R7 = 'X'.
WA_HEADER-INFO = '待批次合并的物料库存一览'.
ENDIF.
APPEND WA_HEADER TO T_HEADER.
CLEAR: WA_HEADER.
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = '公司:'.
WA_HEADER-INFO = GV_NAME.
APPEND WA_HEADER TO T_HEADER.
CLEAR: WA_HEADER.
WA_HEADER-TYP = 'S'.
WA_HEADER-KEY = '单位:'.
WA_HEADER-INFO = 'KG'.
APPEND WA_HEADER TO T_HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = T_HEADER
* I_LOGO =
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. "TOP-OF-PAGE
*&---------------------------------------------------------------------*
*& Form FRM_SET_LISTBOX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_LISTBOX .
DATA :
LV_I_LIST TYPE VRM_VALUES,
LV_WA_LIST LIKE LINE OF LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010300000'.
LV_WA_LIST-TEXT = '粉碎黄铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010400000'.
LV_WA_LIST-TEXT = '粉碎紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100100000'.
LV_WA_LIST-TEXT = '振切紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100300000'.
LV_WA_LIST-TEXT = '振切青铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100900000'.
LV_WA_LIST-TEXT = '低值废铜棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'WA_ISSUE-MATNR'
VALUES = LV_I_LIST
EXCEPTIONS
ID_ILLEGAL_NAME = 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_SET_LISTBOX
*&---------------------------------------------------------------------*
*& Form FRM_F4_HELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_F4_HELP .
DATA :
WA_SEARCH TYPE T_SHLP_MATNR.
IF I_SEARCH_M IS INITIAL.
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3010300000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3010400000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3100100000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3100300000'.
APPEND WA_SEARCH TO I_SEARCH_M .
CLEAR : WA_SEARCH.
WA_SEARCH-MATNR = '3100900000'.
APPEND WA_SEARCH TO I_SEARCH_M .
LOOP AT I_SEARCH_M INTO WA_SEARCH.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_SEARCH-MATNR
IMPORTING
OUTPUT = WA_SEARCH-MATNR.
SELECT SINGLE MAKTX
FROM MAKT
INTO WA_SEARCH-MAKTX
WHERE MATNR = WA_SEARCH-MATNR
AND SPRAS = SY-LANGU.
SELECT SINGLE WERKS
FROM MARD
INTO WA_SEARCH-WERKS
WHERE MATNR = WA_SEARCH-MATNR.
MODIFY I_SEARCH_M FROM WA_SEARCH.
ENDLOOP.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'MATNR'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_MATNR-LOW'
VALUE_ORG = 'S'
CALLBACK_PROGRAM = SY-REPID
* CALLBACK_FORM = 'FRM_BO_CALLBACK1'
TABLES
VALUE_TAB = I_SEARCH_M
* RETURN_TAB = IL_RETURN_TAB
EXCEPTIONS "#EC FB_RC
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
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_F4_HELP
*&---------------------------------------------------------------------*
*& Module STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9002 OUTPUT.
SET PF-STATUS '9002'.
SET TITLEBAR 'TITLE' WITH '月末低值废铜棉的录入'.
PERFORM FRM_SET_LISTBOX_MATNR.
ZSCRAP-REMARK = '月末低值废铜棉的录入'.
ZSCRAP-BUDAT = SY-DATUM.
ENDMODULE. " STATUS_9002 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002 INPUT.
CASE OK_CODE4.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'ADD'.
PERFORM FRM_ADD_RECORD.
WHEN OTHERS.
ENDCASE.
CLEAR : OK_CODE4.
ENDMODULE. " USER_COMMAND_9002 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_ADD_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ADD_RECORD .
DATA :
LV_WA_INSERT TYPE ZSCRAP.
CLEAR LV_WA_INSERT.
MOVE-CORRESPONDING ZSCRAP TO LV_WA_INSERT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_INSERT-MATNR
IMPORTING
OUTPUT = LV_WA_INSERT-MATNR.
LV_WA_INSERT-FLAG = C_RECEIVE.
LV_WA_INSERT-OABST = LV_WA_INSERT-LABST. " 原始数量
LV_WA_INSERT-WERKS = '1201'.
LV_WA_INSERT-MEINS = 'KG'.
LV_WA_INSERT-ERDAT = SY-DATUM.
LV_WA_INSERT-ERZET = SY-UZEIT.
LV_WA_INSERT-ERNAM = SY-UNAME.
LV_WA_INSERT-SFLAG = ''.
LV_WA_INSERT-WAERS = ''.
LV_WA_INSERT-TOTAL = ''.
LV_WA_INSERT-PEINH = ''.
LV_WA_INSERT-STPRS = ''.
INSERT ZSCRAP FROM LV_WA_INSERT.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
MESSAGE '记录插入失败!' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
COMMIT WORK.
CLEAR : ZSCRAP.
CLEAR LV_WA_INSERT.
MESSAGE '记录插入成功!' TYPE 'S'.
ENDIF.
ENDFORM. " FRM_ADD_RECORD
*&---------------------------------------------------------------------*
*& Form FRM_SET_LISTBOX_matnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_SET_LISTBOX_MATNR .
DATA :
LV_I_LIST TYPE VRM_VALUES,
LV_WA_LIST LIKE LINE OF LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010300000'.
LV_WA_LIST-TEXT = '粉碎黄铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3010400000'.
LV_WA_LIST-TEXT = '粉碎紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100100000'.
LV_WA_LIST-TEXT = '振切紫铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100300000'.
LV_WA_LIST-TEXT = '振切青铜废棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CLEAR : LV_WA_LIST.
LV_WA_LIST-KEY = '3100900000'.
LV_WA_LIST-TEXT = '低值废铜棉'.
APPEND LV_WA_LIST TO LV_I_LIST.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'ZSCRAP-MATNR'
VALUES = LV_I_LIST
EXCEPTIONS
ID_ILLEGAL_NAME = 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_SET_LISTBOX
*&---------------------------------------------------------------------*
*& Module STATUS_9007 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9007 OUTPUT.
DATA :
LV_INDEX TYPE I.
SET PF-STATUS '9001'.
SET TITLEBAR 'TITLE' WITH '外协加工'.
PERFORM FRM_SET_LISTBOX.
*初始化
IF GV_INFLAG2 = ''.
GV_ISSDATE = SY-DATUM.
GV_REMARK2 = '委外加工成原材料......'.
GV_INFLAG2 = 'X'.
ENDIF.
*输入一行确认后定位到下一行
IF GV_ISSDATE IS NOT INITIAL.
LV_INDEX = LINES( I_ISSUE ).
LV_INDEX = LV_INDEX + 1.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_INDEX.
ENDIF.
ENDMODULE. " STATUS_9007 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9007 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9007 INPUT.
CASE OK_CODE5.
*返回屏幕
WHEN 'BACK' OR 'EXIT'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
*退出程序
WHEN 'CANCEL'.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-018 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
LEAVE PROGRAM.
ENDIF.
ELSE.
LEAVE PROGRAM.
ENDIF.
*确认委外
WHEN 'SAVE' OR 'VERIFY'.
PERFORM FRM_SUBCONTRACT.
*清空项目
WHEN 'EMPTY'.
PERFORM FRM_CLEAR_ITEMS.
*取消发货
WHEN 'ABOLISH'.
PERFORM FRM_CANCEL_ISSUE.
ENDCASE.
CLEAR : OK_CODE5.
ENDMODULE. " USER_COMMAND_9007 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_SUBCONTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SUBCONTRACT .
DATA :
*函数返回标记
LV_RETURN TYPE C,
*更新出错标记
LV_FLAG TYPE C,
*剩余数量
LV_LEFT TYPE ZLABST,
*插入行次
LV_LINE TYPE ZLINES,
*处理工作区
LV_WA_RECEIVE TYPE ZSCRAP.
IF I_ISSUE IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-014 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*售出纪录保存到数据库中----- 1、
LOOP AT I_ISSUE INTO WA_ISSUE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = WA_ISSUE-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WA_ISSUE-LIFNR
IMPORTING
OUTPUT = WA_ISSUE-LIFNR.
"查看是否已经有售出或者委外记录
CLEAR : LV_LINE.
SELECT MAX( LINE )
FROM ZSCRAP
INTO LV_LINE
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_ISSUE .
IF SY-SUBRC <> 0 .
WA_ISSUE-LINE = '01'.
ELSE.
WA_ISSUE-LINE = LV_LINE + 1.
ENDIF.
WA_ISSUE-BUDAT = GV_ISSDATE.
WA_ISSUE-WERKS = C_PLANT.
WA_ISSUE-FLAG = C_ISSUE.
WA_ISSUE-REMARK = GV_REMARK2.
WA_ISSUE-ERDAT = SY-DATUM.
WA_ISSUE-ERZET = SY-UZEIT.
WA_ISSUE-ERNAM = SY-UNAME.
"出库区分
WA_ISSUE-SORT = '2'.
MODIFY I_ISSUE FROM WA_ISSUE.
ENDLOOP.
INSERT ZSCRAP FROM TABLE I_ISSUE.
IF SY-SUBRC <> 0.
ROLLBACK WORK.
EXIT.
ENDIF.
CLEAR : LV_FLAG.
*更新库存标示---------------- 2、
LOOP AT I_ISSUE INTO WA_ISSUE.
"库存已售出
IF WA_ISSUE-AMOUNT = WA_ISSUE-LABST.
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = 'X'
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ELSE.
"库存依旧有剩余
CLEAR : LV_LEFT.
LV_LEFT = WA_ISSUE-AMOUNT - WA_ISSUE-LABST.
UPDATE ZSCRAP
SET SFLAG = ''
LABST = LV_LEFT
WHERE MATNR = WA_ISSUE-MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF LV_FLAG = ''.
COMMIT WORK.
MESSAGE '已成功发货,操作完成!' TYPE 'S'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FRM_SUBCONTRACT
*&---------------------------------------------------------------------*
*& Form CHECK_TBL3_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_TBL3_INPUT .
DATA:
LV_CURRLINE TYPE I,
WA_TEMP LIKE LINE OF I_ISSUE,
LV_LINES TYPE I,
LV_LIFNR TYPE LIFNR,
LV_MATNR TYPE MATNR.
*光标位置
LV_LINES = TBL3-CURRENT_LINE - TBL3-TOP_LINE + 1.
LV_CURRLINE = TBL3-CURRENT_LINE - 1.
LOOP AT I_ISSUE INTO WA_TEMP FROM TBL3-TOP_LINE TO LV_CURRLINE.
IF WA_TEMP-MATNR = WA_ISSUE-MATNR AND WA_TEMP-CHARG = WA_ISSUE-CHARG.
SET CURSOR FIELD 'WA_ISSUE-CHARG' LINE LV_LINES.
MESSAGE '此记录已经存在表格中!' TYPE 'E'.
ENDIF.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE *
FROM ZSCRAP
WHERE MATNR = LV_MATNR
AND CHARG = WA_ISSUE-CHARG
AND FLAG = C_RECEIVE
AND SFLAG = ''.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'WA_ISSUE-MATNR' LINE LV_LINES.
MESSAGE '该项目不存在!' TYPE 'E'.
ELSE.
SELECT SINGLE MAKTX
FROM MAKT
INTO WA_ISSUE-MAKTX
WHERE MATNR = LV_MATNR
AND SPRAS = SY-LANGU.
WA_ISSUE-LGORT = ZSCRAP-LGORT.
WA_ISSUE-AMOUNT = ZSCRAP-LABST.
* WA_ISSUE-LABST = ZSCRAP-LABST.
* WA_ISSUE-SABST = WA_ISSUE-LABST * C_RATE.
WA_ISSUE-MEINS = 'KG'.
IF WA_ISSUE-LABST IS INITIAL.
SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
MESSAGE '请输入委外加工数量!' TYPE 'E'.
ELSE.
IF WA_ISSUE-LABST < 0 OR WA_ISSUE-LABST > WA_ISSUE-AMOUNT.
SET CURSOR FIELD 'WA_ISSUE-LABST' LINE LV_LINES.
MESSAGE '请输入合理的委外加工数量!' TYPE 'E'.
ELSE.
WA_ISSUE-SABST = WA_ISSUE-LABST * C_RATE. " 0.93
ENDIF.
ENDIF.
IF WA_ISSUE-LIFNR IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_ISSUE-LIFNR
IMPORTING
OUTPUT = LV_LIFNR.
SELECT SINGLE NAME1
FROM LFA1
INTO WA_ISSUE-NAME1
WHERE LIFNR = LV_LIFNR
AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'WA_ISSUE-LIFNR' LINE LV_LINES.
MESSAGE '请输入正确的外委供应商代码!' TYPE 'E'.
ENDIF.
ELSE.
SET CURSOR FIELD 'WA_ISSUE-LIFNR' LINE LV_LINES.
MESSAGE '请输入外委供应商代码!' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM. " CHECK_TBL3_INPUT
*&---------------------------------------------------------------------*
*& Module F4_HELP_DATE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_DATE INPUT.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
* DISPLAY = ' '
* FACTORY_CALENDAR_ID = ' '
* GREGORIAN_CALENDAR_FLAG = ' '
* HOLIDAY_CALENDAR_ID = ' '
* PROGNAME_FOR_FIRST_MONTH = ' '
IMPORTING
SELECT_DATE = GV_ISSDATE
* SELECT_WEEK =
* SELECT_WEEK_BEGIN =
* SELECT_WEEK_END =
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP_DATE INPUT
*&---------------------------------------------------------------------*
*& Form FRM_F4_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_F4_DATE1 .
*年月的搜索帮助
DATA:L_DATE TYPE SY-DATUM.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
IMPORTING
SELECT_DATE = L_DATE
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8.
IF SY-SUBRC = 0.
S_MONTH-LOW = L_DATE+0(6).
ENDIF.
ENDFORM. " FRM_F4_DATE
*&---------------------------------------------------------------------*
*& Form FRM_F4_DATE2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_F4_DATE2 .
*年月的搜索帮助
DATA:L_DATE TYPE SY-DATUM.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
IMPORTING
SELECT_DATE = L_DATE
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8.
IF SY-SUBRC = 0.
S_MONTH-HIGH = L_DATE+0(6).
ENDIF.
ENDFORM. " FRM_F4_DATE2
*&---------------------------------------------------------------------*
*& Module F4_HELP_DATE1 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE F4_HELP_DATE1 INPUT.
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
* DISPLAY = ' '
* FACTORY_CALENDAR_ID = ' '
* GREGORIAN_CALENDAR_FLAG = ' '
* HOLIDAY_CALENDAR_ID = ' '
* PROGNAME_FOR_FIRST_MONTH = ' '
IMPORTING
SELECT_DATE = GV_RECDATE
* SELECT_WEEK =
* SELECT_WEEK_BEGIN =
* SELECT_WEEK_END =
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " F4_HELP_DATE1 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_WRITEOFF_RECEIVE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_WRITEOFF_RECEIVE .
DATA : LV_WA_WF TYPE T_SCRAP.
CLEAR : GV_WFMESSAGE.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_WF
WHERE MATNR IN S_MATNR
AND CHARG IN S_CHARG.
IF SY-SUBRC <> 0.
REFRESH I_WF.
GV_WFMESSAGE = TEXT-023.
EXIT.
ELSE.
READ TABLE I_WF INTO LV_WA_WF WITH KEY FLAG = 'O'.
IF SY-SUBRC = 0.
REFRESH I_WF.
GV_WFMESSAGE = TEXT-024.
EXIT.
ENDIF.
ENDIF.
LOOP AT I_WF INTO LV_WA_WF.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_WF-MAKTX
WHERE MATNR = LV_WA_WF-MATNR
AND SPRAS = SY-LANGU.
MODIFY I_WF FROM LV_WA_WF.
ENDLOOP.
ENDFORM. " FRM_WRITEOFF_RECEIVE
*&---------------------------------------------------------------------*
*& Module STATUS_9008 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9008 OUTPUT.
SET PF-STATUS '9008'.
SET TITLEBAR 'TITLE' WITH TEXT-025.
ENDMODULE. " STATUS_9008 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9008 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9008 INPUT.
CASE OK_CODE6.
WHEN 'SAVE' OR 'WF'.
PERFORM FRM_CONFIRM_WRITEOFF.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN OTHERS .
ENDCASE.
CLEAR OK_CODE6.
ENDMODULE. " USER_COMMAND_9008 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_CONFIRM_WRITEOFF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CONFIRM_WRITEOFF .
DATA : LV_RETURN TYPE C.
READ TABLE I_WF INTO WA_WF WITH KEY MARK = 'X'.
IF SY-SUBRC <> 0.
MESSAGE '请选中需要冲销的行项目!' TYPE 'I'.
EXIT.
ELSE.
ENDIF.
PERFORM FRM_POPUP_INFO USING TEXT-026 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
"从数据库中删除此条记录
DELETE FROM ZSCRAP WHERE MATNR = WA_WF-MATNR
AND CHARG = WA_WF-CHARG
AND BUDAT = WA_WF-BUDAT
AND FLAG = 'I'.
IF SY-SUBRC = 0.
COMMIT WORK .
MESSAGE '冲销成功!' TYPE 'S'.
LEAVE TO SCREEN 0.
ELSE.
ROLLBACK WORK .
MESSAGE '冲销失败!' TYPE 'I'.
ENDIF.
ENDIF.
ENDFORM. " FRM_CONFIRM_WRITEOFF
*&---------------------------------------------------------------------*
*& Form FRM_GET_MERGE_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_MERGE_INFO .
DATA : LV_WA_STOCK TYPE T_SCRAP.
SELECT *
FROM ZSCRAP
INTO CORRESPONDING FIELDS OF TABLE I_STOCK
WHERE FLAG = C_RECEIVE
AND SFLAG = ''
AND MATNR IN S_MATNR
AND LGORT IN S_LGORT.
LOOP AT I_STOCK INTO LV_WA_STOCK.
SELECT SINGLE MAKTX
FROM MAKT
INTO LV_WA_STOCK-MAKTX
WHERE MATNR = LV_WA_STOCK-MATNR
AND SPRAS = SY-LANGU.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
LV_WA_STOCK-MARK = 'X'.
MODIFY I_STOCK FROM LV_WA_STOCK.
ENDLOOP.
SORT I_STOCK BY MATNR CHARG.
DELETE I_STOCK WHERE LABST = 0.
ENDFORM. " FRM_GET_MERGE_INFO
*&---------------------------------------------------------------------*
*& Module STATUS_9009 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9009 OUTPUT.
DATA : LV_WA_STOCK TYPE T_SCRAP.
DATA : LV_LABST TYPE ZLABST.
SET PF-STATUS '9009'.
SET TITLEBAR 'TITLE' WITH '物料批次的合并'.
* CLEAR : ZSCRAP.
ZSCRAP-ERDAT = SY-DATUM.
ZSCRAP-ERZET = SY-UZEIT.
ZSCRAP-ERNAM = SY-UNAME.
ZSCRAP-REMARK = '物料批次合并行记录'.
READ TABLE I_STOCK INTO LV_WA_STOCK INDEX 1.
ZSCRAP-MATNR = LV_WA_STOCK-MATNR.
CLEAR LV_LABST.
LOOP AT I_STOCK INTO LV_WA_STOCK.
LV_LABST = LV_LABST + LV_WA_STOCK-LABST.
ENDLOOP.
ZSCRAP-LABST = LV_LABST.
ENDMODULE. " STATUS_9009 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9009 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9009 INPUT.
CASE OK_CODE7.
WHEN 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN 'NOMERGE'.
LEAVE TO SCREEN 0.
WHEN 'MERGE'.
PERFORM FRM_MATERIAL_MERGE.
WHEN OTHERS.
ENDCASE.
CLEAR : OK_CODE7.
ENDMODULE. " USER_COMMAND_9009 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_MATERIAL_MERGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_MATERIAL_MERGE .
DATA :
*函数返回标记
LV_RETURN TYPE C,
*更新出错标记
LV_FLAG TYPE C,
*剩余数量
LV_LEFT TYPE ZLABST,
*插入行次
LV_LINE TYPE ZLINES,
*处理工作区
LV_WA_STOCK TYPE T_SCRAP.
DATA : I_MERGE TYPE STANDARD TABLE OF ZSCRAP.
DATA : WA_MERGE TYPE ZSCRAP.
IF I_STOCK IS NOT INITIAL.
PERFORM FRM_POPUP_INFO USING TEXT-030 TEXT-011 CHANGING LV_RETURN.
IF LV_RETURN = 'J'.
*1\---------------------合并纪录保存到数据库中
CLEAR : LV_FLAG.
REFRESH I_MERGE.
LOOP AT I_STOCK INTO LV_WA_STOCK.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
MOVE-CORRESPONDING LV_WA_STOCK TO WA_MERGE.
"查看是否已经有售出或者委外记录
CLEAR : LV_LINE.
SELECT MAX( LINE )
FROM ZSCRAP
INTO LV_LINE
WHERE MATNR = LV_WA_STOCK-MATNR
AND CHARG = LV_WA_STOCK-CHARG
AND FLAG = 'O' .
IF SY-SUBRC <> 0 .
WA_MERGE-LINE = '01'.
ELSE.
WA_MERGE-LINE = LV_LINE + 1.
ENDIF.
WA_MERGE-BUDAT = ZSCRAP-BUDAT.
WA_MERGE-WERKS = C_PLANT.
WA_MERGE-FLAG = C_ISSUE. " O 发
WA_MERGE-REMARK = '合并批次的出库记录'.
WA_MERGE-ERDAT = SY-DATUM.
WA_MERGE-ERZET = SY-UZEIT.
WA_MERGE-ERNAM = SY-UNAME.
WA_MERGE-OABST = 0.
WA_MERGE-SABST = 0.
WA_MERGE-SORT = '3'. " 直接售出
APPEND WA_MERGE TO I_MERGE.
ENDLOOP.
INSERT ZSCRAP FROM TABLE I_MERGE.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK.
MESSAGE '操作失败,请联系管理员!' TYPE 'I'.
EXIT.
ENDIF.
*2\--------------------------更新库存标示
LOOP AT I_STOCK INTO LV_WA_STOCK.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_WA_STOCK-MATNR
IMPORTING
OUTPUT = LV_WA_STOCK-MATNR.
"库存已全部合并
UPDATE ZSCRAP
SET SFLAG = 'X' "已售出
LABST = 0
WHERE MATNR = LV_WA_STOCK-MATNR
AND CHARG = LV_WA_STOCK-CHARG
AND FLAG = C_RECEIVE " I
.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK .
MESSAGE '操作失败,请联系管理员!' TYPE 'I'.
EXIT.
ENDIF.
ENDLOOP.
*3\---------------------------插入合并后的记录
ZSCRAP-FLAG = C_RECEIVE.
ZSCRAP-WERKS = C_PLANT.
ZSCRAP-MEINS = 'KG'.
ZSCRAP-OABST = ZSCRAP-LABST.
ZSCRAP-SABST = 0.
CLEAR WA_MERGE .
MOVE-CORRESPONDING ZSCRAP TO WA_MERGE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_MERGE-MATNR
IMPORTING
OUTPUT = WA_MERGE-MATNR.
INSERT ZSCRAP FROM WA_MERGE.
IF SY-SUBRC <> 0.
LV_FLAG = 'X'.
ROLLBACK WORK.
MESSAGE '操作失败,请联系管理员!' TYPE 'I'.
EXIT.
ENDIF.
IF LV_FLAG = ''.
COMMIT WORK.
MESSAGE '物料批次已成功合并,操作完成!' TYPE 'S'.
PERFORM FRM_GET_MERGE_INFO.
LEAVE TO SCREEN 0.
ELSE.
ROLLBACK WORK.
MESSAGE '操作失败,请联系管理员!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 0.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " FRM_MATERIAL_MERGE
*&---------------------------------------------------------------------*
*& Module FRM_CHECK_9002BATCH INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE FRM_CHECK_9002BATCH INPUT.
DATA : LV_CHARG1 TYPE CHARG_D.
IF ZSCRAP-MATNR IS NOT INITIAL AND ZSCRAP-CHARG IS NOT INITIAL.
CLEAR LV_CHARG1 .
SELECT SINGLE CHARG
FROM ZSCRAP
INTO LV_CHARG1
WHERE MATNR = ZSCRAP-MATNR
AND CHARG = ZSCRAP-CHARG.
IF SY-SUBRC = 0 OR LV_CHARG1 IS NOT INITIAL.
MESSAGE '该物料的批次已经存在,请重新录入!' TYPE 'E'.
ENDIF.
ENDIF.
ENDMODULE. " FRM_CHECK_9002BATCH INPUT
*&---------------------------------------------------------------------*
*& Module FRM_CHECK_9009BATCH INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE FRM_CHECK_9009BATCH INPUT.
DATA : LV_CHARG2 TYPE CHARG_D.
DATA : LV_MATNR1 TYPE MATNR.
IF ZSCRAP-MATNR IS NOT INITIAL AND ZSCRAP-CHARG IS NOT INITIAL.
CLEAR LV_CHARG2.
CLEAR LV_MATNR1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = ZSCRAP-MATNR
IMPORTING
OUTPUT = LV_MATNR1.
SELECT SINGLE CHARG
FROM ZSCRAP
INTO LV_CHARG2
WHERE MATNR = LV_MATNR1
AND CHARG = ZSCRAP-CHARG.
IF SY-SUBRC = 0 OR LV_CHARG2 IS NOT INITIAL.
MESSAGE '该物料的批次已经存在,请重新录入!' TYPE 'E'.
ENDIF.
ENDIF.
ENDMODULE. " FRM_CHECK_9009BATCH INPUT