ABAP-供应商主数据创建(检查输入的有效性)

FUNCTION zmm_fm_21_05.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IN) TYPE  ZSLIFNR_SRM
*"  EXPORTING
*"     VALUE(OUT) TYPE  ZSLIFNR_SRM
*"----------------------------------------------------------------------
  CONSTANTS : gc_black  TYPE char04 VALUE '@EB@',
              gc_red    TYPE char04 VALUE '@0A@',
              gc_green  TYPE char04 VALUE '@08@',
              gc_yellow TYPE char04 VALUE '@09@'.
  DATA: lv_msg    TYPE string,
        ls_bnka   TYPE bnka,
        ls_lfa1   TYPE lfa1,
        ls_but000 TYPE but000,
        ls_lfb1   TYPE lfb1,
        ls_lfm1   TYPE lfm1.
  DATA:lv_partner TYPE but000-partner,
       lv_lifnr   TYPE lfa1-lifnr.
  CLEAR lv_msg.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  in-partner
    IMPORTING
      output in-partner.

  IF in-bu_group IS INITIAL.
    lv_msg = lv_msg && '/' && '账户组必填'.
  ENDIF.

  IF in-partner IS INITIAL.
    lv_msg = lv_msg && '/' && '供应商编码必填'.
  ENDIF.
  IF in-title_key IS INITIAL.
    lv_msg = lv_msg && '/' && '关键字必填'.
  ENDIF.

  IF in-name_org1 IS INITIAL.
    lv_msg = lv_msg && '/' && '供应商名称1必填'.
  ELSE.
*      SELECT SINGLE * FROM lfa1 INTO ls_lfa1
*       WHERE lifnr EQ in-partner.
    SELECT SINGLE * FROM but000 INTO ls_but000
     WHERE partner EQ in-partner.
    IF sy-subrc EQ 0.
      lv_msg = lv_msg && '/' && '供应商基本视图已存在' && in-name_org1.
      in-lfa1f 'X'.
    ELSE.
*        IF in-bu_group IN r_bu_group.
      "基本视图
      IF in-bu_sort1 IS INITIAL.
        lv_msg = lv_msg && '/' && '检索项必填'.
      ENDIF.

      IF in-land1 IS INITIAL.
        lv_msg = lv_msg && '/' && '国家必填'.
      ENDIF.

      IF in-regio IS INITIAL .
        lv_msg = lv_msg && '/' && '地区(省)必填'.
      ENDIF.

      IF in-city1 IS INITIAL .
        lv_msg = lv_msg && '/' && '城市必填'.
      ENDIF.

      IF in-street  IS INITIAL.
        lv_msg = lv_msg && '/' && '街道必填'.
      ENDIF.
      IF in-post_code1  IS INITIAL.
        lv_msg = lv_msg && '/' && '邮编必填'.
      ENDIF.
*        IF in-taxnum IS INITIAL .
*          lv_msg = lv_msg && '/' && '税号必填'.
*        ENDIF.
*        ENDIF.

    ENDIF.
  ENDIF.

  IF NOT in-lfa1f IS INITIAL.
    IF NOT in-caigou-ekorg IS INITIAL .
      SELECT SINGLE * FROM lfm1 INTO ls_lfm1
       WHERE lifnr EQ in-partner
         AND ekorg EQ in-caigou-ekorg.
      IF sy-subrc EQ 0.
        lv_msg = lv_msg && '/' && '供应商采购组织视图已存在'.
        in-lfm1f 'X'.
      ENDIF.
    ENDIF.
    IF in-gongsi-bukrs IS NOT INITIAL.
      SELECT SINGLE * FROM lfb1 INTO ls_lfb1
       WHERE lifnr EQ in-partner
         AND bukrs EQ in-gongsi-bukrs.
      IF sy-subrc EQ 0.
        lv_msg = lv_msg && '/' && '供应商公司视图已存在' .
        in-lfb1f 'X'.
      ENDIF.
    ENDIF.
  ENDIF.

*    IF in-bankl IS NOT INITIAL.
*      SELECT SINGLE * FROM bnka INTO ls_bnka
*       WHERE banks EQ in-banks
*         AND bankl EQ in-bankl.
*      IF sy-subrc NE 0.
*        lv_msg = lv_msg && '/' && '银行代码不存在'.
*      ENDIF.
*    ENDIF.

  IF in-lfm1f IS INITIAL AND in-caigou-ekorg IS NOT INITIAL.
    IF in-caigou-ekorg IS INITIAL.
      lv_msg = lv_msg && '/' && '采购组织必填'.
    ENDIF.
    IF in-caigou-waers IS INITIAL.
      lv_msg = lv_msg && '/' && '货币必填'.
    ENDIF.
*      IF in-zterm1 IS INITIAL.
*        lv_msg = lv_msg && '/' && '销售付款条件必填'.
*      ENDIF.
    IF in-caigou-webre IS INITIAL.
      lv_msg = lv_msg && '/' && '基于收货的发票校验必填'.
    ENDIF.
    IF in-caigou-lebre IS INITIAL.
      lv_msg = lv_msg && '/' && '基于服务的发票校验必填'.
    ENDIF.

*      IF in-kalsk IS INITIAL.
*        lv_msg = lv_msg && '/' && '方案组供应商必填'.
*      ENDIF.
*      IF in-verkf IS INITIAL.
*        lv_msg = lv_msg && '/' && '销售人员必填'.
*      ENDIF.
*      IF in-telf1 IS INITIAL.
*        lv_msg = lv_msg && '/' && '销售人员电话必填'.
*      ENDIF.

  ENDIF.

  IF in-lfb1f IS INITIAL AND in-gongsi-bukrs IS NOT INITIAL.
    IF in-gongsi-bukrs IS INITIAL.
      lv_msg = lv_msg && '/' && '公司代码必填'.
    ENDIF.
    IF in-gongsi-akont IS INITIAL.
      lv_msg = lv_msg && '/' && '统驭科目必填'.
    ENDIF.
*      IF in-zterm2 IS INITIAL.
*        lv_msg = lv_msg && '/' && '财务付款条件必填'.
*      ENDIF.
*      IF in-zuawa IS INITIAL.
*        lv_msg = lv_msg && '/' && '排序码必填'.
*      ENDIF.
*      IF in-dzwels IS INITIAL.
*        lv_msg = lv_msg && '/' && '付款方式必填'.
*      ENDIF.
*      IF in-hbkid IS INITIAL.
*        lv_msg = lv_msg && '/' && '开户银行必填'.
*      ENDIF.
    IF in-gongsi-reprf IS INITIAL.
      lv_msg = lv_msg && '/' && '检查重复发票必填'.
    ENDIF.
*      IF in-fdgrv IS INITIAL.
*        lv_msg = lv_msg && '/' && '计划组必填'.
*      ENDIF.

  ENDIF.

  IF NOT lv_msg IS INITIAL.
    IF in-lfa1f IS INITIAL AND in-lfm1f IS INITIAL AND in-lfb1f IS INITIAL.
      in-icon_a = gc_red.
    ELSE.
      in-icon_a = gc_yellow.
    ENDIF.
    in-remark  = lv_msg.
  ENDIF.

* 检查税号是否已经存在
  SELECT SINGLE but000~partner FROM but000         INNER 
JOIN dfkkbptaxnum ON but000~partner = dfkkbptaxnum~partner INTO lv_partner       
WHERE but000~name_org1 <> in-name_org1 AND dfkkbptaxnum~taxnum in-taxnum.   
IF sy-subrc 0." AND in-bu_group IN r_bu_group.     
in-icon_a = gc_red.     
in-remark   in-remark && '/' && '税号与其他供应商税号重复!'.   
ENDIF.
*检查名称是否已经重复   
SELECT SINGLE lifnr FROM lfa1 INTO lv_lifnr       
WHERE name1 <> in-name_org1 AND lifnr in-partner.   
IF sy-subrc EQ 0." AND in-bu_group IN r_bu_group.     
in-icon_a = gc_red.     
in-remark   in-remark && '/' && '供应商编号与其他供应商编号重复!'.   
ENDIF.   out 

in.


ENDFUNCTION.

原文地址:https://www.cnblogs.com/eagle-dtq/p/12848637.html