BDC_table

hi
how to handel TABLE CONTROL in BDC can ive me one progra with table control

Hi Raj,
   You can also check this program too...
SAP FI, CO, MM, PP, SD, PM, PS, QM, SM, HR, WF, BW, APO, Basis,  ABAP/4, Certification, Books
Handling Table Control in BDC
An example abap program of handling Table Control during bdc programming.
REPORT zmm_bdcp_purchaseorderkb02
       NO STANDARD PAGE HEADING LINE-SIZE 255.
                Declaring internal tables                            *
*-----Declaring line structure
DATA : BEGIN OF it_dummy OCCURS 0,
         dummy(255) TYPE c,
       END OF it_dummy.
*-----Internal table for line items
DATA :  BEGIN OF it_idata OCCURS 0,
          ematn(18),      "Material Number.
          menge(13),      "Qyantity.
          netpr(11),      "Net Price.
          werks(4),       "Plant.
          ebelp(5),       "Item Number.
        END OF it_idata.
*-----Deep structure for header data and line items
DATA  :  BEGIN OF it_me21 OCCURS 0,
           lifnr(10),      "Vendor A/c No.
           bsart(4),       "A/c Type.
           bedat(8),       "Date of creation of PO.
           ekorg(4),       "Purchasing Organisation.
           ekgrp(3),       "Purchasing Group.
           x_data LIKE TABLE OF it_idata,
         END OF it_me21.
DATA  :  x_idata LIKE LINE OF it_idata.
DATA  :  v_delimit VALUE ','.
DATA  :  v_indx(3) TYPE n.
DATA  :  v_fnam(30) TYPE c.
DATA  :  v_count TYPE n.
DATA  :  v_ne TYPE i.
DATA  :  v_ns TYPE i.
*include bdcrecx1.
INCLUDE zmm_incl_purchaseorderkb01.
                Search help for file                                 *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
    IMPORTING
      file_name     = p_file.
START-OF-SELECTION.
       To upload the data into line structure                        *
  CALL FUNCTION 'WS_UPLOAD'
    EXPORTING
      filename = p_file
      filetype = 'DAT'
    TABLES
      data_tab = it_dummy.
    Processing the data from line structure to internal tables       *
  REFRESH:it_me21.
  CLEAR  :it_me21.
  LOOP AT it_dummy.
    IF it_dummy-dummy+0(01) = 'H'.
      v_indx = v_indx + 1.
      CLEAR   it_idata.
      REFRESH it_idata.
      CLEAR   it_me21-x_data.
      REFRESH it_me21-x_data.
      SHIFT it_dummy.
      SPLIT it_dummy AT v_delimit INTO it_me21-lifnr
                                       it_me21-bsart
                                       it_me21-bedat
                                       it_me21-ekorg
                                       it_me21-ekgrp.
      APPEND it_me21.
    ELSEIF it_dummy-dummy+0(01) = 'L'.
      SHIFT it_dummy.
      SPLIT it_dummy AT v_delimit INTO it_idata-ematn
                                       it_idata-menge
                                       it_idata-netpr
                                       it_idata-werks
                                       it_idata-ebelp.
      APPEND it_idata TO it_me21-x_data.
      MODIFY it_me21 INDEX v_indx.
    ENDIF.
  ENDLOOP.
                To open the group                                    *
  PERFORM open_group.
        To populate the bdcdata table for header data                *
  LOOP AT it_me21.
    v_count = v_count + 1.
    REFRESH it_bdcdata.
    PERFORM subr_bdc_table USING:   'X' 'SAPMM06E'    '0100',
                                    ' ' 'BDC_CURSOR'  'EKKO-LIFNR',
                                    ' ' 'BDC_OKCODE'  '/00',
                                    ' ' 'EKKO-LIFNR'  it_me21-lifnr,
                                    ' ' 'RM06E-BSART' it_me21-bsart,
                                    ' ' 'RM06E-BEDAT' it_me21-bedat,
                                    ' ' 'EKKO-EKORG'  it_me21-ekorg,
                                    ' ' 'EKKO-EKGRP'  it_me21-ekgrp,
                                    ' ' 'RM06E-LPEIN' 'T'.
    PERFORM subr_bdc_table USING:   'X' 'SAPMM06E'    '0120',
                                    ' ' 'BDC_CURSOR'  'RM06E-EBELP',
                                    ' ' 'BDC_OKCODE'  '/00'.
    MOVE 1 TO v_indx.
*-----To populate the bdcdata table for line item data
    LOOP AT it_me21-x_data INTO x_idata.
      CONCATENATE 'EKPO-EMATN(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-ematn.
      CONCATENATE 'EKPO-MENGE(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-menge.
      CONCATENATE 'EKPO-NETPR(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-netpr.
      CONCATENATE 'EKPO-WERKS(' v_indx ')'  INTO v_fnam.
      PERFORM  subr_bdc_table USING ' ' v_fnam x_idata-werks.
      v_indx = v_indx + 1.
      PERFORM subr_bdc_table USING:  'X' 'SAPMM06E'    '0120',
                                     ' ' 'BDC_CURSOR'  'RM06E-EBELP',
                                     ' ' 'BDC_OKCODE'  '/00'.
    ENDLOOP.
    PERFORM subr_bdc_table USING:    'X' 'SAPMM06E'    '0120',
                                     ' ' 'BDC_CURSOR'  'RM06E-EBELP',
                                     ' ' 'BDC_OKCODE'  '=BU'.
    PERFORM bdc_transaction USING 'ME21'.
  ENDLOOP.
  PERFORM close_group.
                  End of selection event                             *
END-OF-SELECTION.
  IF session NE 'X'.
*-----To display the successful records
    WRITE :/10  text-001.          "Sucess records
    WRITE :/10  SY-ULINE(20).
    SKIP.
    IF it_sucess IS INITIAL.
      WRITE :/  text-002.
    ELSE.
      WRITE :/   text-008,          "Total number of Succesful records
              35 v_ns.
      SKIP.
      WRITE:/   text-003,          "Vendor Number
             17 text-004,          "Record number
             30 text-005.          "Message
    ENDIF.
    LOOP AT it_sucess.
      WRITE:/4  it_sucess-lifnr,
             17 it_sucess-tabix CENTERED,
             30 it_sucess-sucess_rec.
    ENDLOOP.
    SKIP.
*-----To display the erroneous records
    WRITE:/10   text-006.          "Error Records
    WRITE:/10   SY-ULINE(17).
    SKIP.
    IF it_error IS INITIAL.
      WRITE:/   text-007.          "No error records
    ELSE.
      WRITE:/   text-009,          "Total number of erroneous records
             35 v_ne.
      SKIP.
      WRITE:/   text-003,          "Vendor Number
             17 text-004,          "Record number
             30 text-005.          "Message
    ENDIF.
    LOOP AT it_error.
      WRITE:/4  it_error-lifnr,
             17 it_error-tabix CENTERED,
             30 it_error-error_rec.
    ENDLOOP.
    REFRESH it_sucess.
    REFRESH it_error.
  ENDIF.
CODE IN INCLUDE.
Include           ZMM_INCL_PURCHASEORDERKB01
DATA:   it_BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
DATA:   it_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA:   E_GROUP_OPENED.
*-----Internal table to store sucess records
DATA:BEGIN OF it_sucess OCCURS 0,
       msgtyp(1)   TYPE c,
       lifnr  LIKE  ekko-lifnr,
       tabix  LIKE  sy-tabix,
       sucess_rec(125),
     END OF it_sucess.
DATA: g_mess(125) type c.
*-----Internal table to store error records
DATA:BEGIN OF it_error OCCURS 0,
       msgtyp(1)   TYPE c,
       lifnr  LIKE  ekko-lifnr,
       tabix  LIKE  sy-tabix,
       error_rec(125),
     END OF it_error.
       Selection screen
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS session RADIOBUTTON GROUP ctu.  "create session
SELECTION-SCREEN COMMENT 3(20) text-s07 FOR FIELD session.
SELECTION-SCREEN POSITION 45.
PARAMETERS ctu RADIOBUTTON GROUP ctu.     "call transaction
SELECTION-SCREEN COMMENT 48(20) text-s08 FOR FIELD ctu.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(20) text-s01 FOR FIELD group.
SELECTION-SCREEN POSITION 25.
PARAMETERS group(12).                      "group name of session
SELECTION-SCREEN COMMENT 48(20) text-s05 FOR FIELD ctumode.
SELECTION-SCREEN POSITION 70.
PARAMETERS ctumode LIKE ctu_params-dismode DEFAULT 'N'.
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 48(20) text-s06 FOR FIELD cupdate.
SELECTION-SCREEN POSITION 70.
PARAMETERS cupdate LIKE ctu_params-updmode DEFAULT 'L'.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(20) text-s03 FOR FIELD keep.
SELECTION-SCREEN POSITION 25.
PARAMETERS: keep AS CHECKBOX.       "' ' = delete session if finished
"'X' = keep   session if finished
SELECTION-SCREEN COMMENT 48(20) text-s09 FOR FIELD e_group.
SELECTION-SCREEN POSITION 70.
PARAMETERS e_group(12).             "group name of error-session
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 51(17) text-s03 FOR FIELD e_keep.
SELECTION-SCREEN POSITION 70.
PARAMETERS: e_keep AS CHECKBOX.     "' ' = delete session if finished
"'X' = keep   session if finished
SELECTION-SCREEN END OF LINE.
PARAMETERS:p_file LIKE rlgrap-filename.
  at selection screen                                                *
AT SELECTION-SCREEN.
group and user must be filled for create session
  IF SESSION = 'X' AND
     GROUP = SPACE. "OR USER = SPACE.
    MESSAGE E613(MS).
  ENDIF.
  create batchinput session                                          *
FORM OPEN_GROUP.
  IF SESSION = 'X'.
    SKIP.
    WRITE: /(20) 'Create group'(I01), GROUP.
    SKIP.
*----open batchinput group
    CALL FUNCTION 'BDC_OPEN_GROUP'
      EXPORTING
        CLIENT = SY-MANDT
        GROUP  = GROUP
        USER   = sy-uname.
    WRITE:/(30) 'BDC_OPEN_GROUP'(I02),
            (12) 'returncode:'(I05),
                 SY-SUBRC.
  ENDIF.
ENDFORM.                    "OPEN_GROUP
  end batchinput session                                             *
FORM CLOSE_GROUP.
  IF SESSION = 'X'.
*------close batchinput group
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),
            (12) 'returncode:'(I05),
                 SY-SUBRC.
  ELSE.
    IF E_GROUP_OPENED = 'X'.
      CALL FUNCTION 'BDC_CLOSE_GROUP'.
      WRITE: /.
      WRITE: /(30) 'Fehlermappe wurde erzeugt'(I06).
    ENDIF.
  ENDIF.
ENDFORM.                    "CLOSE_GROUP
       Start new transaction according to parameters                 *
FORM BDC_TRANSACTION USING TCODE TYPE ANY.
  DATA: L_SUBRC LIKE SY-SUBRC.
*------batch input session
  IF SESSION = 'X'.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE     = TCODE
      TABLES
        DYNPROTAB = it_BDCDATA.
    WRITE: / 'BDC_INSERT'(I03),
             TCODE,
             'returncode:'(I05),
             SY-SUBRC,
             'RECORD:',
             SY-INDEX.
  ELSE.
    REFRESH it_MESSTAB.
    CALL TRANSACTION TCODE USING it_BDCDATA
                     MODE   CTUMODE
                     UPDATE CUPDATE
                     MESSAGES INTO it_MESSTAB.
    L_SUBRC = SY-SUBRC.
    WRITE: / 'CALL_TRANSACTION',
             TCODE,
             'returncode:'(I05),
             L_SUBRC,
             'RECORD:',
             SY-INDEX.
  ENDIF.
  Message handling for Call Transaction                              *
  perform subr_mess_hand using g_mess.
*-----Erzeugen fehlermappe
  IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
    IF E_GROUP_OPENED = ' '.
      CALL FUNCTION 'BDC_OPEN_GROUP'
        EXPORTING
          CLIENT = SY-MANDT
          GROUP  = E_GROUP
          USER   = sy-uname
          KEEP   = E_KEEP.
      E_GROUP_OPENED = 'X'.
    ENDIF.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        TCODE     = TCODE
      TABLES
        DYNPROTAB = it_BDCDATA.
  ENDIF.
  REFRESH it_BDCDATA.
ENDFORM.                    "BDC_TRANSACTION
     Form  subr_bdc_table                                            *
      text
     -->P_0220   text                                                *
     -->P_0221   text                                                *
     -->P_0222   text                                                *
FORM subr_bdc_table  USING      VALUE(P_0220) TYPE ANY
                                VALUE(P_0221) TYPE ANY
                                VALUE(P_0222) TYPE ANY.
  CLEAR it_bdcdata.
  IF P_0220 = ' '.
    CLEAR it_bdcdata.
    it_bdcdata-fnam     = P_0221.
    it_bdcdata-fval     = P_0222.
    APPEND it_bdcdata.
  ELSE.
    it_bdcdata-dynbegin = P_0220.
    it_bdcdata-program  = P_0221.
    it_bdcdata-dynpro   = P_0222.
    APPEND it_bdcdata.
  ENDIF.
ENDFORM.                    " subr_bdc_table
     Form  subr_mess_hand                                            *
      text                                                           *
     -->P_G_MESS  text                                               *
FORM subr_mess_hand USING  P_G_MESS TYPE ANY.
  LOOP AT IT_MESSTAB.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID     = it_messtab-msgid
        LANG   = it_messtab-msgspra
        NO     = it_messtab-msgnr
        v1     = it_messtab-msgv1
        v2     = it_messtab-msgv2
      IMPORTING
        MSG    = P_G_MESS
      EXCEPTIONS
        OTHERS = 0.
    CASE it_messtab-msgtyp.
      when 'E'.
        it_error-error_rec   =  P_G_MESS.
        it_error-lifnr       =  it_me21-lifnr.
        it_error-tabix       =  v_count.
        APPEND IT_ERROR.
      when 'S'.
        it_sucess-sucess_rec =  P_G_MESS.
        it_sucess-lifnr      =  it_me21-lifnr.
        it_sucess-tabix      =  v_count.
        APPEND IT_SUCESS.
    endcase.
  ENDLOOP.
  Describe table it_sucess lines v_ns.
  Describe table it_error  lines v_ne.
ENDFORM.                    " subr_mess_hand
<b>Reward pts if usefull:</b>)
Regards
Sathish

Similar Messages

  • Problem in doing BDC for XK01

    Hi all,
    i am doing BDC for XK01 with Line Item for Bank Details(Table Control..)
    With 3 Internal table
    IT_dummy to get the flat file
    IT_vend  for Header details
    IT_bank  for Item Details
    in this there is a Nested loop
    Loop at it_vend.
    perform bdc
    loop at it_bank.
    concatenate................
    endloop.
    endloop.
    because of the above nested loops..it's bit slow..
    & i am trying to do with a single internal table..
    The problem is..
    with the header data it's not picking all the item data(it's picking only one..)..help me in resolving the problem..
    Below the code..
    REPORT  ZMM_BDCTC1 NO STANDARD PAGE HEADING LINE-SIZE 255.
    PARAMETER:P_FILE TYPE RLGRAP-FILENAME.
    DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF IT_DUMMY OCCURS 0,
          TYP,
          DES(255) TYPE C,
          END OF IT_DUMMY.
    DATA:DELIMITER VALUE ',',
         cnt(4) TYPE N,
         L_FNAM(30) TYPE C,
         FILENAME TYPE STRING.
    TYPES:BEGIN OF TY_FINAL,
          N(4) TYPE C,
          LIFNR TYPE RF02K-LIFNR,
          BUKRS TYPE RF02K-BUKRS,
          EKORG TYPE RF02K-EKORG,
          KTOKK TYPE RF02K-KTOKK,
          NAME1 TYPE LFA1-NAME1,
          SORTL TYPE LFA1-SORTL,
          LAND1 TYPE LFA1-LAND1,
          AKONT TYPE LFB1-AKONT,
          FDGRV TYPE LFB1-FDGRV,
          WAERS LIKE LFM1-WAERS,
          M(4) TYPE C,
          BANKS TYPE LFBK-BANKS,
          BANKL TYPE LFBK-BANKL,
          BANKN TYPE LFBK-BANKN,
          KOINH TYPE LFBK-KOINH,
          END OF TY_FINAL.
    DATA: IT_FINAL TYPE TABLE OF TY_FINAL,
          WA_FINAL TYPE TY_FINAL.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
    CALL FUNCTION 'F4_FILENAME'
    EXPORTING
       PROGRAM_NAME        = SYST-CPROG
       DYNPRO_NUMBER       = SYST-DYNNR
    IMPORTING
       FILE_NAME           = P_FILE.
         FILENAME = P_FILE.
         CALL FUNCTION 'GUI_UPLOAD'
           EXPORTING
             filename                      = FILENAME
            FILETYPE                      = 'ASC'
           tables
             data_tab                      = IT_DUMMY.
    START-OF-SELECTION.
    LOOP AT it_dummy.
        IF it_dummy-typ = 'H'.
          SPLIT  it_dummy-des AT delimiter INTO WA_FINAL-lifnr "Populating Header Table
                                                WA_FINAL-bukrs
                                                WA_FINAL-ekorg
                                                WA_FINAL-ktokk
                                                WA_FINAL-name1
                                                WA_FINAL-sortl
                                                WA_FINAL-land1
                                                WA_FINAL-akont
                                                WA_FINAL-fdgrv
                                                WA_FINAL-waers.
          WA_FINAL-N = WA_FINAL-N + 1.
          WA_FINAL-M = WA_FINAL-M + 1.
        ELSEIF it_dummy-typ = 'I'.
          SPLIT it_dummy-des AT delimiter INTO WA_FINAL-BANKS
                                               WA_FINAL-BANKL
                                               WA_FINAL-BANKN
                                               WA_FINAL-KOINH.
          APPEND WA_FINAL TO IT_FINAL.
        ENDIF.
      ENDLOOP.
    LOOP AT IT_FINAL INTO WA_FINAL.
    WRITE:/ WA_FINAL-N,
            WA_FINAL-LIFNR,
            WA_FINAL-BUKRS,
            WA_FINAL-EKORG,
            WA_FINAL-KTOKK,
            WA_FINAL-NAME1,
            WA_FINAL-SORTL,
            WA_FINAL-LAND1,
            WA_FINAL-AKONT,
            WA_FINAL-FDGRV,
            WA_FINAL-WAERS,
            WA_FINAL-M,
            WA_FINAL-BANKS,
            WA_FINAL-BANKL,
            WA_FINAL-BANKN,
            WA_FINAL-KOINH.
    ENDLOOP.
    data: WA_FINAL1 like line of IT_FINAL.
    clear WA_FINAL1.
    ******************BDC STARTS***********************
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT      = SY-MANDT
    GROUP       = 'ZMM_BDCTAB'
    KEEP        = 'X'
    USER        = SY-UNAME.
    Clear wa_final.
    LOOP AT IT_FINAL INTO WA_FINAL.
    WA_FINAL1 = WA_FINAL.
    CLEAR BDCDATA[].
    AT NEW N.
    cnt = 1.
    perform bdc_dynpro      using 'SAPMF02K' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RF02K-KTOKK'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RF02K-LIFNR'
                                  WA_FINAL1-LIFNR.
    perform bdc_field       using 'RF02K-BUKRS'
                                  WA_FINAL1-BUKRS.
    perform bdc_field       using 'RF02K-EKORG'
                                  WA_FINAL1-EKORG.
    perform bdc_field       using 'RF02K-KTOKK'
                                  WA_FINAL1-KTOKK.
    perform bdc_dynpro      using 'SAPMF02K' '0110'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFA1-LAND1'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'LFA1-NAME1'
                                  WA_FINAL1-NAME1.
    perform bdc_field       using 'LFA1-SORTL'
                                  WA_FINAL1-SORTL.
    perform bdc_field       using 'LFA1-LAND1'
                                  WA_FINAL1-LAND1.
    perform bdc_dynpro      using 'SAPMF02K' '0120'. "ERROR CLEARED
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFA1-KUNNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPMF02K' '0130'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFBK-KOINH(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    ENDAT.
    *ENDON.
    IF WA_FINAL1-N = WA_FINAL1-M.
    CONCATENATE  'LFBK-BANKS(' cnt ')'  INTO L_FNAM.
    perform bdc_field       using L_FNAM
                                  WA_FINAL1-BANKS.
    CONCATENATE  'LFBK-BANKL(' cnt ')'  INTO L_FNAM.
    perform bdc_field       using L_FNAM
                                  WA_FINAL1-BANKL.
    CONCATENATE  'LFBK-BANKN(' cnt ')'  INTO L_FNAM.
    perform bdc_field       using L_FNAM
                                  WA_FINAL1-BANKN.
    CONCATENATE  'LFBK-KOINH(' cnt ')'  INTO L_FNAM.
    perform bdc_field       using L_FNAM
                                  WA_FINAL1-KOINH.
    *ENDDO.
    cnt = cnt + 1.
    ENDIF.
    perform bdc_dynpro      using 'SAPMF02K' '0130'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFBK-BANKS(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    perform bdc_dynpro      using 'SAPMF02K' '0210'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB1-FDGRV'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    *AT NEW LIFNR.
    perform bdc_field       using 'LFB1-AKONT'
                                  WA_FINAL1-AKONT.
    perform bdc_field       using 'LFB1-FDGRV'
                                  WA_FINAL1-FDGRV.
    perform bdc_dynpro      using 'SAPMF02K' '0215'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB1-ZTERM'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPMF02K' '0220'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB5-MAHNA'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPMF02K' '0310'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFM1-WAERS'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'LFM1-WAERS'
                                  WA_FINAL1-WAERS.
    perform bdc_dynpro      using 'SAPMF02K' '0320'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RF02K-LIFNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    AT END OF M.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE     = 'XK01'
    TABLES
    DYNPROTAB = BDCDATA.
    ENDAT.
    CLEAR WA_FINAL1.
    CLEAR WA_FINAL.
    ENDLOOP.
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    *********************BDC ENDS***********************
           Start new screen                                              *
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.
           Insert field                                                  *
    FORM BDC_FIELD USING FNAM FVAL.
    IF FVAL <> NODATA.
        CLEAR BDCDATA.
        BDCDATA-FNAM = FNAM.
        BDCDATA-FVAL = FVAL.
        APPEND BDCDATA.
    ENDIF.
    ENDFORM.
    Flat File is..
    HAAA45,1000,1000,0002,NAME45,N,IN,31000,A1,USD
    IIN,1000,1021,Name45
    IIN,1000,1022,Name45
    HAAA50,1000,1000,0002,NAME50,N,IN,31000,A1,USD
    IIN,1000,1023,Name50
    IIN,1000,1024,Name50

    Regarding avoiding the loop I have a suggestion, though I have not tried this .
    SAP help says " Using the internal table bdc_tab, you can provide any number of screens of the called transaction with input and user actions. " .
    Above implies you can load all records in the itab bdc_tab when doing call transaction. Say, your bdc_tabl has 30 records for 1 pass of the transaction. You need to update 10 vendor records. You simply load up all 300 records into bdc_tab. After every 30 record loads, you simulate a 'SAVE' press in your program but do not leave the transaction. Rather you simulate the keystroke that takes you to the first screen of XK01 after the save if not aready there, and start loading up the next transaction.

  • Start a transaction form report with selected user ID

    I would like to know if there is a way to call a transaction in another process in the same system using another user ID.
    Best Regards.

    Check this link
    http://www.sapdevelopment.co.uk/reporting/rep_submit.htm
    http://goldenink.com/abap/call_transaction.html
    Do a F1 in the submit and find the correct syntax.
    <i>How do I go to a transaction by double clicking on a field in the screen?
    Define ok_code for function key <F2>
    In Screen PAI when ok_code has the value defined (user has double clicked on the screen)
    method 1: if parameter id is available for the field(s) to be populated
    set parameter id 'XXX' field field_name_on_screen
    call transaction 'TCODE' and skip first screen.
    method 2:
    1. fill bdc_table (data bdc_table like bdcdata occurs 0 with header line.) with screen info
    2. use command
    call transaction 'XK03' using bdc_table ...</i>

  • BDC Query

    Hello,
    I am having a problem when i execute the foll code:
    DATA : l_trfar TYPE HRP1005-TRFAR,
             l_trfgb TYPE HRP1005-TRFGB.
      SELECT SINGLE trfar trfgb INTO (l_trfar,l_trfgb)
                         FROM hrp1005 WHERE otype = 'S' AND
                                            objid = second_per-plans AND
                                            begda LE second_per-begda AND
                                            endda GE second_per-begda.
      REFRESH: bdc_table.
      PERFORM build_dynpro USING 'X' 'SAPMP50A'    '1000'.
      PERFORM build_dynpro USING ' ' 'RP50G-PERNR' second_per-pernr.
      PERFORM build_dynpro USING ' ' 'RP50G-CHOIC' '0008'.
    PERFORM build_dynpro USING ' ' 'BDC_OKCODE' '=COP'.       "dvhk910657
      PERFORM build_dynpro USING ' ' 'BDC_OKCODE' '=INS'.
      PERFORM build_dynpro USING 'X' 'MP000800'    '2010'.
      PERFORM build_dynpro USING ' ' 'P0008-BEGDA' second_per-begda.
      PERFORM build_dynpro USING ' ' 'P0008-PREAS' second_per-preas.
      PERFORM build_dynpro USING ' ' 'P0008-TRFAR' l_trfar.
      PERFORM build_dynpro USING ' ' 'P0008-TRFGB' l_trfgb.
      PERFORM build_dynpro USING ' ' 'P0008-TRFGR' second_per-trfgr.
      IF second_per-ansal = ' '.                                "CHG20599
    bypass sending the field in the BDC
      ELSE.                                                     "CHG20599
        PERFORM build_dynpro USING ' ' 'Q0008-ANSAL' second_per-ansal.
      ENDIF.                                                    "CHG20599
      PERFORM build_dynpro USING ' ' 'BDC_OKCODE' '/11'.
      PERFORM build_dynpro USING 'X' 'MP000800'    '2010'.
      PERFORM build_dynpro USING ' ' 'BDC_OKCODE' '/11'.
      CALL TRANSACTION 'PA30' USING bdc_table
                              MODE s_view
                              UPDATE 'S'   " Synchronous
                              MESSAGES INTO tran_itab.
      retcode = sy-subrc.
      CLEAR bdc_table.
      REFRESH bdc_table.
      IF retcode <> 0.
        WRITE:/ 'Could not Modify IT0008 for personnel # : ',
                   second_per-pernr.
        end_session = 1.
      ENDIF.
    In this code i am making changes in infotype 0008, its givin error
    wat cud b posss cause of error.
    Answers will be rewarded.

    Hi,
    What is the Error you are getting...u can see the contents of the tran_itab. in debugging to see what are the problems....
    santhosh

  • Creating MIME for XML

    I am reading XML tags from the Spool and converting that into a XML file and displaying in the screen.  But it is not displaying
    I am using the following code for that.,
        p_regex = '.[^.]+$'.
        condense p_regex.
        create object regex
          exporting
            pattern     = p_regex
            ignore_case = ''.
    * For REGEX match
        matcher = cl_abap_matcher=>create(
                       pattern     = p_regex
                       ignore_case = ' '
                       table       = i_files ).
        lt_result = matcher->find_all( ).
        find first occurrence of regex '.[^.]+$' in lt_result match offset v_offset.
        add 1 to v_offset.
        v_extension = v_filename+v_offset.
        call function 'SDOK_MIMETYPE_GET'
          exporting
            extension = v_extension
          importing
            mimetype  = v_mimetype.
        v_mime_string = v_mimetype.
        call method cl_wd_runtime_services=>attach_file_to_response
          exporting
            i_filename      = v_filename
            i_content       = v_xstring
            i_mime_type     = v_mime_string
            i_in_new_window = abap_true
            i_inplace       = abap_true.

    hi check this example .......
    Moises Moreno
    PROGRAMA    : ZHR02597 Batch Input Datos Reloj Checador              *
                           leyendo un archivo XML                        *
    AUTOR       : Moises Moreno De Leon (GALVAK)                         *
    FECHA       : Junio 23, 2004                                         *
    REPORT ZHR02597 MESSAGE-ID ZG LINE-SIZE  80 LINE-COUNT 65
                                                   NO STANDARD PAGE HEADING.
    Tablas                                                               *
    TABLES:
           PA0000,         "HR Master Record: Infotype 0000 (Events)
           PA0001,         "HR Master Record: Infotype 0001 (Org. Assignment
           PA0007,         "HR Master Record: Infotype 0007 (Work Schedule)
           PA0008,         "HR Master Record: Infotype 0008 (Basic Pay)
           PA2003,         "HR Time Record: Infotype 2003 (Substitutions)
           T508A,          "Work Schedule Rules
           T552A,          "Monthly Work Schedules
           T550A,          "Daily Work Schedules
           ZCATEGORIA.     "Pay Scale Groups - Categorias
    Fin de Tablas                                                        *
    Estructura                                                           *
    DATA: BEGIN OF BDC_TABLE OCCURS 100.   "Tabla para BIS
            INCLUDE STRUCTURE BDCDATA.
    DATA: END OF BDC_TABLE.
    DATA BEGIN OF TH_MESSTAB OCCURS 10.
            INCLUDE STRUCTURE BDCMSGCOLL.
    DATA END OF TH_MESSTAB.
    DATA: BEGIN OF TH_ARCHIVO OCCURS 100,
              NUMERO(8),                   "P2011-PERNR  Numero del empleado
              FECHA LIKE SY-DATUM,         "P2011-LDATE  Logical date
              AUSENTISMO(4),               "
              HORA(4),                     "P2011-LTIME  Logical time
              TERMINAL(3),                 "P2011-TERID  Terminal ID
              RAZON(4),                    "P2011-ABWGR  Att/absence reason
              TURNO(2),                    "PA2003-TPROG Daily work schedule
              DEPARTAMENTO(4),             "KOSTL        Cost center
              EMPLEADO2(8),                "PA2003-VPERN Personnel no.to be
              COORDINADOR_AUTORIZA(8),
              IN_OUT(2) TYPE N,
           END OF TH_ARCHIVO.
    DATA: BEGIN OF TH_ERROR OCCURS 100,
              NUMERO(5),                   "P2011-PERNR  Numero del empleado
              FECHA LIKE SY-DATUM,         "P2011-LDATE  Logical date
              AUSENTISMO(4),
              HORA(4),                     "P2011-LTIME  Logical time
              TERMINAL(3),                 "P2011-TERID  Terminal ID
              RAZON(4),                    "P2011-ABWGR  Att/absence reason
              TURNO(2),                    "PA2003-TPROG Daily work schedule
              DEPARTAMENTO(4),             "KOSTL        Cost center
              EMPLEADO2(5),                "PA2003-VPERN Personnel no.to be
           END OF TH_ERROR.
    TYPES: BEGIN OF REG,
              CAMBIO_TURNO,
              DIA(10),
              AUSENTISMO(4),
              TURNO(2),
              HORA(5),
              TIPO,
              INCIDENCIA(3),
              CCOSTOS(4),
              SOCIO_REEMPLAZA(8),
           END   OF REG.
    DATA: REGISTRO TYPE REG OCCURS 0 WITH HEADER LINE.
    TYPES: BEGIN OF EMPLEADO,
              NUMERO(8),
              REGISTRO LIKE REGISTRO OCCURS 0,
           END   OF EMPLEADO.
    DATA: BEGIN OF CIERRE OCCURS 0,
             EMPLEADO TYPE EMPLEADO,
          END   OF CIERRE.
    DATA: CHECADAS TYPE REG OCCURS 0 WITH HEADER LINE.
    Fin de estrucutras                                                   *
    Variables                                                            *
    DATA: SW_ERROR,                          "Swich existencia de empleado
          SW_I2002(1) TYPE C VALUE 'F',
          WC_FECHA(10),                      "Fecha con formato dd.mm.aaaa
          WC_DIA(2),                         "Filtra el día de la fecha
          WC_MES(2),                         "Filtra el mes de la fecha
          WC_YEAR(4),                        "Filtra el año de la fecha
          WC_TIPO(2),                        "Tipo de Substitución
          WC_TPR00(4),                       "Turno del empleado
          WC_TURNO(4),                       "Turno del empleado GK(Turno)
          WC_TURNO_SUST(4),                  "Turno Sustitucion
          WC_TURNO_R(4),                     "Turno del RELOJ GK(Turno)
          WC_TURNO_S(4),                     "Turno del SAP   GK(Turno)
          WC_CATEGORIA(8),                   "Categoria del empleado
          WN_IN_OUT(2)  TYPE N,              "Tipo de evento IN/OUT
          WN_PERNR LIKE PA2003-PERNR,
          WI_BETRG1 LIKE ZCATEGORIA-BETRG,   "Cantidad por turno Emple. 1
          WI_BETRG2 LIKE ZCATEGORIA-BETRG,   "Cantidad por turno Emple. 2
          WT_TIEMPO LIKE P2011-LTIME,        "Hora de chacada
          WT_INICIO(4)   TYPE N,             "Hora de chacada I2002
          WT_FINAL(4)    TYPE N,             "Hora de chacada I2002
          WT_HORA   LIKE P2011-LTIME VALUE '120000',  "Sumar Doce horas
          ARCH1(40) TYPE C VALUE '/users/interf/datos/hr/errores.txt',
          WC_ARCHIVO(40) TYPE C,             "Nombre del archivo
          WI_LC     TYPE I VALUE 0,          "Contador lineas
          WD_FECHA_DESC    LIKE SY-DATUM,    "Fecha de Descanso
          WD_FECHA  LIKE SY-DATUM,
          WI_INDICE LIKE SY-TABIX,           "Indice de la tabla interna
          SW_DELETE(1) TYPE C VALUE 'F',
          WC_REGISTRO1(35) TYPE C,           "Registro de la tabla interna
          WC_REGISTRO2(35) TYPE C.           "Registro de la tabla interna
    DATA: QID LIKE APQI-QID,
          B-NAME LIKE RFPDO-ALLGBINA,
          EXCEPT TYPE I.
    DATA: ME TYPE REF TO CL_XML_DOCUMENT.
    DATA: SUBRC LIKE SY-SUBRC.
    DATA: GVK_MODE.
    Fin de variables                                                     *
    Parámetros de Selección                                              *
    SELECTION-SCREEN BEGIN OF BLOCK BL_01 WITH FRAME TITLE TEXT-001.
       PARAMETERS: ARCHIVO TYPE RLGRAP-FILENAME.
    SELECTION-SCREEN END OF BLOCK BL_01.
    Fin de parametros de sleccion                                        *
    AT SELECTION SCREEN                                                  *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR ARCHIVO.
       PERFORM ESPECIFICA_RUTA USING '0'.
    AT SELECTION SCREEN                                                  *
    Start of selection                                                   *
    START-OF-SELECTION.
       CLEAR GVK_MODE.
       GVK_MODE = 'N'.
       IF SY-UNAME0(6) NE 'GKRHUM' AND SY-UNAME0(6) NE 'GK_961' AND
          SY-UNAME+0(6) NE 'GKSIST' AND SY-UNAME      NE 'EXUANL_MML'.
          WRITE:/ 'Usuario no pertenece a GALVAK, S.A. de C.V.'.
          LEAVE PROGRAM.
       ENDIF.
       PERFORM LEE_ARCHIVO_XML.
       PERFORM LLENA_TH_ARCHIVO.
       SORT TH_ARCHIVO BY NUMERO FECHA HORA.
       PERFORM ELIMINA_DUPLICADOS.
       LOOP AT TH_ARCHIVO.
          PERFORM VALIDA_INFO.
          MOVE ' ' TO : WC_DIA,    WC_MES,   WC_YEAR,   WC_FECHA,
                        WC_TIPO,   WC_TPR00, WC_TURNO,  WC_CATEGORIA,
                        WT_TIEMPO, WN_PERNR, WN_IN_OUT, WT_INICIO,
                        WT_FINAL.
          MOVE 0 TO: WI_LC.
          IF SW_ERROR EQ '0'.
             SELECT *
               FROM PA0001
              WHERE PERNR = TH_ARCHIVO-NUMERO.
             ENDSELECT.
             IF SY-SUBRC EQ 0.
                IF TH_ARCHIVO-DEPARTAMENTO = PA0001-KOSTL+6(4).
                   TH_ARCHIVO-DEPARTAMENTO = ' '.
                ENDIF.
             ENDIF.
             PERFORM FORMATO_FECHA.
             MOVE TH_ARCHIVO-HORA TO WT_TIEMPO.
             IF TH_ARCHIVO-EMPLEADO2 NE ' '.
                WN_PERNR = TH_ARCHIVO-EMPLEADO2.
             ELSE.
                WN_PERNR = TH_ARCHIVO-NUMERO.
             ENDIF.
             IF TH_ARCHIVO-AUSENTISMO = 'DESC'.
                CONCATENATE WD_FECHA6(2) '.' WD_FECHA4(2) '.' WD_FECHA(4)
                       INTO WC_FECHA.
                PERFORM DATOS_DESC.           "Actualiza 2003
             ELSE.
                PERFORM EVENTO_IN_OUT.
                CONCATENATE WD_FECHA6(2) '.' WD_FECHA4(2) '.' WD_FECHA(4)
                       INTO WC_FECHA.
                PERFORM TRANS_PA61.
                CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
                     UPDATE 'S' MESSAGES INTO TH_MESSTAB.
                IF SY-SUBRC EQ 0.
                   IF WC_TURNO <> WC_TPR00      OR
                      WC_TURNO <> WC_TURNO_SUST OR
                      WC_TURNO = 'DESC'         OR
                      WC_TURNO = 'FREE'.
                      IF TH_ARCHIVO-IN_OUT = '01'.
                         PERFORM OTROS_DATOS.           "Actualiza 2003
                      ENDIF.
                   ELSE.
                   ENDIF.
                ELSE.
                   MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
                   APPEND TH_ERROR.
                ENDIF.
             ENDIF.
          ENDIF.
       ENDLOOP.
       DESCRIBE TABLE TH_ERROR LINES WI_LC.
    Fin de start of selection                                            *
    End of selection                                                     *
    END-OF-SELECTION.
       IF WI_LC NE 0.
          PERFORM ARCHIVO_ERROR.
       ENDIF.
       PERFORM BDC_CLOSE USING EXCEPT.
       MESSAGE I100.
      DELETE DATASET ARCHIVO.  "moises 02.06.1999
    Fin de end of slection                                               *
    Funcion  valida_info                                                 *
    FORM VALIDA_INFO.
       MOVE '0' TO SW_ERROR.
       SELECT DISTINCT *
         FROM PA0000
        WHERE PERNR EQ TH_ARCHIVO-NUMERO.
          EXIT.
       ENDSELECT.
       IF SY-SUBRC NE 0.
          FORMAT INTENSIFIED OFF.
          WRITE:/ 'El empleado  ', TH_ARCHIVO-NUMERO,
                  '  no esta dado de alta'.
          FORMAT INTENSIFIED ON.
          MOVE '1' TO SW_ERROR.
       ENDIF.
    ENDFORM.
    Fin de funcion valida_info                                           *
    Funcion formato_fecha                                                *
    FORM FORMATO_FECHA.
       WC_DIA  = TH_ARCHIVO-FECHA(2).
       WC_MES  = TH_ARCHIVO-FECHA+2(2).
       WC_YEAR = TH_ARCHIVO-FECHA+4(4).
       CONCATENATE WC_YEAR WC_MES WC_DIA INTO WD_FECHA.
    ENDFORM.
    Fin de funicon formato_fecha                                         *
    Funcion evento_in_out                                                *
    FORM EVENTO_IN_OUT.
       SELECT *
         FROM PA0007
        WHERE PERNR EQ WN_PERNR
          AND BEGDA <= WD_FECHA
          AND ENDDA >= WD_FECHA.
       ENDSELECT.
       IF SY-SUBRC EQ 0 AND PA0007-SCHKZ NE ' '.
          SELECT *
            FROM T508A
           WHERE MOFID EQ 'GK'
             AND SCHKZ = PA0007-SCHKZ.
          ENDSELECT.
          SELECT *
            FROM T552A
           WHERE SCHKZ EQ PA0007-SCHKZ
             AND   KJAHR EQ WC_YEAR
             AND   MONAT EQ WC_MES.
          ENDSELECT.
          IF SY-SUBRC EQ 0.
             PERFORM BUSCA_DIA.
             WC_TURNO = WC_TPR00.
             PERFORM VERIFICA_P2003.
             IF WC_TURNO_SUST IS INITIAL.
                WC_TURNO_SUST = WC_TURNO.
             ENDIF.
             IF WC_TURNO EQ 'FREE' OR WC_TURNO EQ 'DESC'.
                WC_TIPO = '02'.
                IF TH_ARCHIVO-RAZON NE 'ETI ' AND
                   TH_ARCHIVO-RAZON NE 'EPM ' AND
                   TH_ARCHIVO-RAZON NE 'ERP ' AND
                   TH_ARCHIVO-RAZON NE 'STI ' AND
                   TH_ARCHIVO-RAZON NE 'SPM ' AND
                   TH_ARCHIVO-RAZON NE 'SRP '.
                   PERFORM VALIDA_SIGUIENTE_DIA.
                   IF WC_TPR00 = 'GM11' OR WC_TPR00 = 'GK01'.
                      WC_TURNO = WC_TPR00.
                   ENDIF.
                ENDIF.
             ELSEIF WC_TPR00 = 'DESC' OR WC_TPR00 = 'FREE'.
                WC_TIPO = '02'.
             ELSE.
                WC_TIPO = '01'.
             ENDIF.
          ENDIF.
          PERFORM TIEMPOS_EXTRA.
          WC_TURNO_S = WC_TURNO.
          IF TH_ARCHIVO-TURNO NE ' '.
           IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
              TH_ARCHIVO-TURNO = 'S3'.
              CONCATENATE 'DE' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
              WC_TURNO = WC_TURNO_R.
           ELSEIF TH_ARCHIVO-TURNO = 'T1' OR TH_ARCHIVO-TURNO = 'T2'.
              CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
              WC_TURNO = WC_TURNO_R.
           ELSE.
             IF TH_ARCHIVO-TURNO < 10.
                CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
             ELSEIF TH_ARCHIVO-TURNO > 10.
                CONCATENATE 'GM' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
             ENDIF.
             IF WC_TURNO NE WC_TURNO_R. " and th_archivo-razon = ' '. moises
                WC_TURNO = WC_TURNO_R.
             ENDIF.
           ENDIF.
          ENDIF.
         IF WC_TURNO EQ 'GM11' OR WC_TURNO = 'GK01'.
            WT_TIEMPO = WT_TIEMPO + WT_HORA.
         ENDIF.
          SELECT *
            FROM T550A
           WHERE MOTPR EQ T508A-MOTPR
             AND TPROG EQ WC_TURNO.
             IF ( T550A-BTBEG <= WT_TIEMPO AND T550A-BTEND >= WT_TIEMPO ) OR
                ( TH_ARCHIVO-RAZON = 'IJ  ' OR TH_ARCHIVO-RAZON = 'II  '  OR
                  TH_ARCHIVO-RAZON = 'ESU ' OR TH_ARCHIVO-RAZON = 'EPM '  OR
                  TH_ARCHIVO-RAZON = 'ERP ' OR TH_ARCHIVO-RAZON = 'ETI ' ).
                WN_IN_OUT = '01'.
                IF WC_TURNO EQ 'GM11' OR WC_TURNO = 'GK01'.
                  WD_FECHA = WD_FECHA + 1.
                ENDIF.
             ELSEIF ( T550A-ETBEG <= WT_TIEMPO AND
                      T550A-ETEND >= WT_TIEMPO ) OR
                    ( TH_ARCHIVO-RAZON = 'FJ  '  OR
                      TH_ARCHIVO-RAZON = 'FI  '  OR
                      TH_ARCHIVO-RAZON = 'SSU '  OR
                      TH_ARCHIVO-RAZON = 'SPM '  OR
                      TH_ARCHIVO-RAZON = 'SRP '  OR
                      TH_ARCHIVO-RAZON = 'STI ' ).
                WN_IN_OUT = '02'.
             ELSE.
                WN_IN_OUT = '02'.
             ENDIF.
             IF TH_ARCHIVO-RAZON = 'ETI ' AND
              ( T550A-BTBEG <= WT_TIEMPO AND T550A-BTEND >= WT_TIEMPO ).
                WT_INICIO = WT_TIEMPO(4).
                WT_FINAL  = T550A-SOBEG(4).
                SW_I2002 = 'T'.
             ELSEIF TH_ARCHIVO-RAZON = 'STI ' AND
                  ( T550A-ETBEG <= WT_TIEMPO AND T550A-ETEND >= WT_TIEMPO ).
                WT_INICIO = T550A-SOEND(4).
                WT_FINAL  = WT_TIEMPO(4).
                SW_I2002 = 'T'.
             ENDIF.
          ENDSELECT.
          IF SW_I2002 = 'T'.
             SW_I2002 = 'F'.
             CONCATENATE WD_FECHA6(2) '.' WD_FECHA4(2) '.' WD_FECHA(4)
                    INTO WC_FECHA.
             PERFORM ALTA_I2002.
          ENDIF.
       ENDIF.
    ENDFORM.
    Fin de funcion evento_in_out                                         *
    Funcion busca_dia                                                    *
    FORM BUSCA_DIA.
       CASE WC_DIA.
          WHEN 01.
             MOVE T552A-TPR01 TO WC_TPR00.
          WHEN 02.
             MOVE T552A-TPR02 TO WC_TPR00.
          WHEN 03.
             MOVE T552A-TPR03 TO WC_TPR00.
          WHEN 04.
             MOVE T552A-TPR04 TO WC_TPR00.
          WHEN 05.
             MOVE T552A-TPR05 TO WC_TPR00.
          WHEN 06.
             MOVE T552A-TPR06 TO WC_TPR00.
          WHEN 07.
             MOVE T552A-TPR07 TO WC_TPR00.
          WHEN 08.
             MOVE T552A-TPR08 TO WC_TPR00.
          WHEN 09.
             MOVE T552A-TPR09 TO WC_TPR00.
          WHEN 10.
             MOVE T552A-TPR10 TO WC_TPR00.
          WHEN 11.
             MOVE T552A-TPR11 TO WC_TPR00.
          WHEN 12.
             MOVE T552A-TPR12 TO WC_TPR00.
          WHEN 13.
             MOVE T552A-TPR13 TO WC_TPR00.
          WHEN 14.
             MOVE T552A-TPR14 TO WC_TPR00.
          WHEN 15.
             MOVE T552A-TPR15 TO WC_TPR00.
          WHEN 16.
             MOVE T552A-TPR16 TO WC_TPR00.
          WHEN 17.
             MOVE T552A-TPR17 TO WC_TPR00.
          WHEN 18.
             MOVE T552A-TPR18 TO WC_TPR00.
          WHEN 19.
             MOVE T552A-TPR19 TO WC_TPR00.
          WHEN 20.
             MOVE T552A-TPR20 TO WC_TPR00.
          WHEN 21.
             MOVE T552A-TPR21 TO WC_TPR00.
          WHEN 22.
             MOVE T552A-TPR22 TO WC_TPR00.
          WHEN 23.
             MOVE T552A-TPR23 TO WC_TPR00.
          WHEN 24.
             MOVE T552A-TPR24 TO WC_TPR00.
          WHEN 25.
             MOVE T552A-TPR25 TO WC_TPR00.
          WHEN 26.
             MOVE T552A-TPR26 TO WC_TPR00.
          WHEN 27.
             MOVE T552A-TPR27 TO WC_TPR00.
          WHEN 28.
             MOVE T552A-TPR28 TO WC_TPR00.
          WHEN 29.
             MOVE T552A-TPR29 TO WC_TPR00.
          WHEN 30.
             MOVE T552A-TPR30 TO WC_TPR00.
          WHEN 31.
             MOVE T552A-TPR31 TO WC_TPR00.
       ENDCASE.
    ENDFORM.
    Fin de funcion busca_dia                                             *
    Funcion verifica_p2003                                               *
    FORM VERIFICA_P2003.
       DATA: WFECHA LIKE SY-DATUM.
       CONCATENATE TH_ARCHIVO-FECHA4(4) TH_ARCHIVO-FECHA2(2)
                   TH_ARCHIVO-FECHA(2) INTO WFECHA.
       CLEAR WC_TURNO_SUST.
       SELECT SINGLE *
         FROM PA2003
        WHERE PERNR = WN_PERNR
          AND BEGDA <= WFECHA
          AND ENDDA >= WFECHA.
       CHECK  SY-SUBRC EQ 0.
       IF PA2003-TPROG NE ' ' AND PA2003-TPROG NE WC_TURNO.
          MOVE PA2003-TPROG TO: WC_TURNO, WC_TURNO_SUST.
       ELSEIF PA2003-SCHKZ NE ' '.
          SELECT *
            FROM T552A
           WHERE SCHKZ EQ PA2003-SCHKZ
             AND KJAHR EQ WC_YEAR
             AND MONAT EQ WC_MES.
          ENDSELECT.
          IF SY-SUBRC EQ 0.
             PERFORM BUSCA_DIA.
             IF WC_TPR00 NE WC_TURNO.
                WC_TURNO = WC_TPR00.
             ENDIF.
          ENDIF.
       ENDIF.
    ENDFORM.                    " VERIFICA_P2003
    Fin de funcion verifica_p2003                                        *
    Funion valida_siguiente_dia                                          *
    FORM VALIDA_SIGUIENTE_DIA.
       WD_FECHA_DESC = WD_FECHA + 1.
       WC_DIA = WD_FECHA_DESC+6(2).
       SELECT *
         FROM T552A
        WHERE SCHKZ EQ PA0007-SCHKZ
          AND KJAHR EQ WC_YEAR
          AND MONAT EQ WC_MES.
       ENDSELECT.
       IF SY-SUBRC EQ 0.
          PERFORM BUSCA_DIA.
       ENDIF.
    ENDFORM.                    " VALIDA_SIGUIENTE_DIA
    Fin de funcion valida_siguiente_dia                                  *
    Funcion alta_i2002                                                   *
    FORM ALTA_I2002.
       IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
          TH_ARCHIVO-TURNO = 'S3'.
       ELSE.
          REFRESH BDC_TABLE.
          PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
          PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
          PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2002'.
          PERFORM DYNPRO_FIELD USING 'RP50G-SUBTY' '0020'.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
          PERFORM DYNPRO_START USING 'MP200000' '2050'.
          PERFORM DYNPRO_FIELD USING 'P2002-BEGDA' WC_FECHA.
          PERFORM DYNPRO_FIELD USING 'P2002-ENDDA' WC_FECHA.
          PERFORM DYNPRO_FIELD USING 'P2002-BEGUZ' WT_INICIO.
          PERFORM DYNPRO_FIELD USING 'P2002-ENDUZ' WT_FINAL.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
          CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE UPDATE 'S'
                                               MESSAGES INTO TH_MESSTAB.
          IF SY-SUBRC NE 0.
             MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
             APPEND TH_ERROR.
          ENDIF.
       ENDIF.
    ENDFORM.                    " ALTA_I2002
    Fin de funcion alta_i2002                                            *
    Funcion trnas_pa61                                                   *
    FORM TRANS_PA61.
       REFRESH BDC_TABLE.
       IF TH_ARCHIVO-AUSENTISMO IS INITIAL.
          PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
          PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
          PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2011'.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 20.08.00
          PERFORM DYNPRO_START USING 'MP200000' '2500'.
          PERFORM DYNPRO_FIELD USING 'P2011-LDATE' WC_FECHA.
          PERFORM DYNPRO_FIELD USING 'P2011-LTIME' WT_TIEMPO.
         PERFORM DYNPRO_FIELD USING 'P2011-SATZA' WN_IN_OUT.
          PERFORM DYNPRO_FIELD USING 'P2011-SATZA' TH_ARCHIVO-IN_OUT.
          IF TH_ARCHIVO-RAZON <> 'ARR'.
             PERFORM DYNPRO_FIELD USING 'P2011-ABWGR' TH_ARCHIVO-RAZON.
          ENDIF.
          PERFORM DYNPRO_FIELD USING 'P2011-TERID' TH_ARCHIVO-TERMINAL.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
       ELSE.
          PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
          PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
          PERFORM DYNPRO_FIELD USING 'RP50G-ENDDA' WC_FECHA.
          PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2001'.
          PERFORM DYNPRO_FIELD USING 'RP50G-SUBTY' TH_ARCHIVO-AUSENTISMO..
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 20.08.00
          PERFORM DYNPRO_START USING 'MP200000' '2001'.
          PERFORM DYNPRO_FIELD USING 'P2001-BEGDA' WC_FECHA.
          PERFORM DYNPRO_FIELD USING 'P2001-ENDDA' WC_FECHA.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
       ENDIF.
    ENDFORM.                    " TRANS_PA61
    Fin de funcion trans_pa61                                            *
    Funcion otros_datos                                                  *
    FORM OTROS_DATOS.
       IF WC_TURNO_SUST = 'DESC' OR WC_TURNO_SUST = 'FREE'.
          PERFORM ELIMINA_SUSTITUCION.
       ENDIF.
       IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
          TH_ARCHIVO-TURNO = 'S3'.
          PERFORM GENERA_SUSTITUCION_S.
          CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
               UPDATE 'S' MESSAGES INTO TH_MESSTAB.
          IF SY-SUBRC NE 0.
             MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
             APPEND TH_ERROR.
          ENDIF.
       ELSE.
          IF WN_IN_OUT = '01'. "or wn_in_out = '02'.
             PERFORM GENERATE_BDC_DATA_1.                 "Actualiza 2003
             CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
                  UPDATE 'S' MESSAGES INTO TH_MESSTAB.
             IF SY-SUBRC NE 0.
                MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
                APPEND TH_ERROR.
             ENDIF.
          ENDIF.
          IF WN_IN_OUT = '02'.
            IF TH_ARCHIVO-RAZON = 'SSU'.
                PERFORM GENERATE_BDC_DATA_1.
                CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
                     UPDATE 'S' MESSAGES INTO TH_MESSTAB.
                IF SY-SUBRC NE 0.
                   MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
                   APPEND TH_ERROR.
                ENDIF.
            ELSE.
                PERFORM GENERATE_BDC_DATA_1.
                CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE
                     UPDATE 'S' MESSAGES INTO TH_MESSTAB.
                IF SY-SUBRC NE 0.
                   MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
                   APPEND TH_ERROR.
                ENDIF.
            ENDIF.
          ENDIF.
       ENDIF.
    ENDFORM.                    " OTROS_DATOS
    Fin de funicion ortors_datos                                         *
    Funcion generate_bdc_data_1                                          *
    FORM GENERATE_BDC_DATA_1.
       REFRESH BDC_TABLE.
       PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
       PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
       PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
       PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
       PERFORM DYNPRO_START USING 'MP200000' '2100'.
       PERFORM DYNPRO_FIELD USING 'P2003-BEGDA' WC_FECHA.
       PERFORM DYNPRO_FIELD USING 'P2003-ENDDA' WC_FECHA.
       PERFORM DYNPRO_FIELD USING 'P2003-VTART' WC_TIPO.
       IF TH_ARCHIVO-EMPLEADO2 NE ' '  AND
          TH_ARCHIVO-EMPLEADO2 NE TH_ARCHIVO-NUMERO.
          PERFORM BUSCA_CATEGORIA.
       ENDIF.
       IF WC_TURNO <> WC_TURNO_SUST.
          PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
       ELSE.
          IF TH_ARCHIVO-TURNO NE ' ' AND TH_ARCHIVO-TURNO NE WC_TURNO_S.
             PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
          ENDIF.
          IF WC_TURNO <> WC_TPR00.
             PERFORM DYNPRO_FIELD USING 'P2003-TPROG' WC_TURNO.
          ENDIF.
       ENDIF.
       IF WI_BETRG1 < WI_BETRG2.           "Cambia categoria del Empleado 1
          PERFORM BUSCA_CATEGORIA.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'DIFP'.
          PERFORM DYNPRO_START USING 'MP200000' '2221'.
          PERFORM DYNPRO_FIELD USING 'P2APL-TRFGR' WC_CATEGORIA.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
          PERFORM DYNPRO_START USING 'MP200000' '2100'.
       ENDIF.
       IF TH_ARCHIVO-DEPARTAMENTO NE ' '.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' 'PRIM'.
          PERFORM DYNPRO_START USING 'SAPLHRTV' '0300'.
          PERFORM DYNPRO_FIELD USING 'COBL-KOSTL' TH_ARCHIVO-DEPARTAMENTO.
          PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '/8'.
          PERFORM DYNPRO_START USING 'MP200000' '2100'.
       ENDIF.
       PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
    ENDFORM.                    " GENERATE_BDC_DATA_1
    Fin de funcion generate_bdc_data_1                                   *
    Funcion busca_categoria                                              *
    FORM BUSCA_CATEGORIA.
       SELECT *
         FROM PA0008
        WHERE PERNR EQ TH_ARCHIVO-NUMERO.    "Empleado 1
          IF SY-SUBRC EQ 0.
             SELECT *
               FROM ZCATEGORIA
              WHERE TRFGR EQ PA0008-TRFGR.
                WI_BETRG1    = ZCATEGORIA-BETRG.
             ENDSELECT.
          ENDIF.
       ENDSELECT.
       SELECT *
         FROM PA0008
        WHERE PERNR EQ TH_ARCHIVO-EMPLEADO2. "Empleado 2
          IF SY-SUBRC EQ 0.
             SELECT *
               FROM ZCATEGORIA
              WHERE TRFGR EQ PA0008-TRFGR.
                WI_BETRG2 = ZCATEGORIA-BETRG.
                WC_CATEGORIA = ZCATEGORIA-TRFGR.
             ENDSELECT.
          ENDIF.
       ENDSELECT.
    ENDFORM.
    Fin de funcin busca_categoria                                        *
    Fucion archivo_error                                                 *
    FORM ARCHIVO_ERROR.
       OPEN DATASET ARCH1 FOR OUTPUT IN TEXT MODE.
       IF SY-SUBRC NE 0.
          STOP. EXIT.
       ENDIF.
       LOOP AT TH_ERROR.
          TRANSFER TH_ERROR TO ARCH1.
       ENDLOOP.
       CLOSE DATASET ARCH1.
    ENDFORM.
    Fin de archivo_error                                                 *
    Funcion bdc_close                                                    *
    FORM BDC_CLOSE USING EXCEPT.
       CALL FUNCTION 'BDC_CLOSE_GROUP'
          EXCEPTIONS
             NOT_OPEN    = 1
             QUEUE_ERROR = 2
             OTHERS      = 3.
             EXCEPT = SY-SUBRC.
    ENDFORM.
    Fin de funicon bdc_close                                             *
    Funcion dynpro_start                                                 *
    FORM DYNPRO_START USING PROGRAM DYNPRO.
       CLEAR BDC_TABLE.
       BDC_TABLE-PROGRAM = PROGRAM.
       BDC_TABLE-DYNPRO = DYNPRO.
       BDC_TABLE-DYNBEGIN = 'X'.
       APPEND BDC_TABLE.
    ENDFORM.                    " DYNPRO_START
    Fin de funcion dynpro_start                                          *
    Funion dynpro_field                                                  *
    FORM DYNPRO_FIELD USING FIELD VALUE.
       CLEAR BDC_TABLE.
       BDC_TABLE-FNAM = FIELD.
       BDC_TABLE-FVAL = VALUE.
       APPEND BDC_TABLE.
    ENDFORM.                    " DYNPRO_FIELD
    Fin de funcion dypro_field                                           *
    Fucnion tiempos_extra                                                *
    FORM TIEMPOS_EXTRA.
       IF TH_ARCHIVO-TURNO = 'S1' OR TH_ARCHIVO-TURNO = 'S2' OR
          TH_ARCHIVO-TURNO = 'S3'.
          CONCATENATE 'DE' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
          WC_TURNO = WC_TURNO_R.
       ELSEIF TH_ARCHIVO-TURNO = 'T1' OR TH_ARCHIVO-TURNO = 'T2'.
         CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
         WC_TURNO = WC_TURNO_R.
       ELSE.
          IF ( TH_ARCHIVO-RAZON = 'ETI ' OR TH_ARCHIVO-RAZON = 'EPM ' OR
               TH_ARCHIVO-RAZON = 'ERP ' ) AND TH_ARCHIVO-TURNO NE ' '.
             IF TH_ARCHIVO-TURNO < 10.
                CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
             ELSEIF TH_ARCHIVO-TURNO > 10.
                CONCATENATE 'GM' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
             ENDIF.
             IF ( WC_TURNO = 'FREE' OR WC_TURNO = 'DESC' ).
                IF WC_TURNO_R = 'GM13' OR WC_TURNO_R = 'GK03'.
                   PERFORM VALIDA_SIGUIENTE_DIA.
                   IF WC_TPR00 = 'GM11' OR WC_TPR00 = 'GK01'.
                      IF WC_TPR00 = 'GK01'.
                         WC_TURNO = 'GK01'.
                      ELSEIF WC_TPR00 = 'GM11'.
                         WC_TURNO = 'GM11'.
                      ENDIF.
                   ELSE.
                      WC_TURNO = WC_TURNO_R.
                   ENDIF.
                ELSE.
                   WC_TURNO = WC_TURNO_R.
                ENDIF.
             ENDIF.
             IF ( WC_TURNO NE 'FREE' OR WC_TURNO NE 'DESC' ).
                IF WC_TURNO_R = 'GK02' AND WC_TURNO = 'GK03'.
                   WC_TURNO = 'GK03'.
                ENDIF.
                IF WC_TURNO_R = 'GK03' AND WC_TURNO = 'GK01'.
                   WC_TURNO = 'GK01'.
                ENDIF.
                IF WC_TURNO_R = 'GK01' AND WC_TURNO = 'GK02'.
                   WC_TURNO = 'GK02'.
                ENDIF.
             ENDIF.
          ENDIF.
          IF ( TH_ARCHIVO-RAZON = 'STI ' OR TH_ARCHIVO-RAZON = 'SPM ' OR
               TH_ARCHIVO-RAZON = 'SRP ' ) AND TH_ARCHIVO-TURNO NE ' '.
             IF TH_ARCHIVO-TURNO < 10.
                CONCATENATE 'GK' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
             ELSEIF TH_ARCHIVO-TURNO > 10.
                CONCATENATE 'GM' TH_ARCHIVO-TURNO INTO WC_TURNO_R.
             ENDIF.
             IF ( WC_TURNO = 'FREE' OR WC_TURNO = 'DESC' ).
                IF WC_TURNO_R = 'GM11' OR WC_TURNO_R = 'GK01'.
                   WD_FECHA_DESC = WD_FECHA - 2.
                   PERFORM VALIDA_SIGUIENTE_DIA. "En realidad DIA ANTERIOR
                   IF WC_TPR00 = 'GM13' OR WC_TPR00 = 'GK03'.
                      IF WC_TPR00 = 'GK03'.
                         WC_TURNO = 'GK03'.
                      ELSEIF WC_TPR00 = 'GM13'.
                         WC_TURNO = 'GM13'.
                      ENDIF.
                   ELSE.
                      WC_TURNO = WC_TURNO_R.
                   ENDIF.
                ELSE.
                   WC_TURNO = WC_TURNO_R.
                ENDIF.
             ENDIF.
             IF ( WC_TURNO NE 'FREE' OR WC_TURNO NE 'DESC' ).
                IF WC_TURNO_R = 'GK03' AND WC_TURNO = 'GK02'.
                   WC_TURNO = 'GK02'.
                ENDIF.
                IF WC_TURNO_R = 'GK01' AND WC_TURNO = 'GK03'.
                   WC_TURNO = 'GK03'.
               ENDIF.
                IF WC_TURNO_R = 'GK02' AND WC_TURNO = 'GK01'.
                   WC_TURNO = 'GK01'.
                ENDIF.
             ENDIF.
          ENDIF.
       ENDIF.
    ENDFORM.
    Fin de funicon tiempos_extra                                         *
    Funcion elimina_duplicados                                           *
    FORM ELIMINA_DUPLICADOS.
       DELETE ADJACENT DUPLICATES FROM TH_ARCHIVO.
    ENDFORM.
    Fin de funcion elimina_duplicados                                    *
    Form  LEE_ARCHIVO_XML                                                *
    FORM LEE_ARCHIVO_XML.
       CREATE OBJECT ME.
       REFRESH CIERRE.
       CALL METHOD ME->CREATE_WITH_FILE
          EXPORTING
             FILENAME = ARCHIVO
          RECEIVING
             RETCODE  = SUBRC.
       CALL METHOD ME->GET_DATA
          IMPORTING
             RETCODE    = SUBRC
          CHANGING
             DATAOBJECT = CIERRE[].
    ENDFORM.
    Form  LEE_ARCHIVO_XML                                                *
    FORM ESPECIFICA_RUTA                                                 *
    FORM ESPECIFICA_RUTA USING PAR_VALOR.
       CASE PAR_VALOR.
          WHEN '0'.
             CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
                EXPORTING
                MASK       = 'C:*.xml'
                STATIC     = 'X'
             CHANGING
                FILE_NAME  = ARCHIVO.
          WHEN '1'.
            CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
               EXPORTING
               MASK       = 'C:*.txt'
               STATIC     = 'x'
            CHANGING
               FILE_NAME  = DESCARGA.
       ENDCASE.
    ENDFORM.
    FORM ESPECIFICA_RUTA                                                 *
    Form  LLENA_TH_ARCHIVO                                               *
    FORM LLENA_TH_ARCHIVO.
       CONSTANTS GVK_12HRS LIKE P2011-LTIME VALUE '120000'.
       CONSTANTS GVK_1159  LIKE P2011-LTIME VALUE '115900'.
       CONSTANTS GVK_0630  LIKE P2011-LTIME VALUE '063000'.
       CONSTANTS GVK_0715  LIKE P2011-LTIME VALUE '071500'.
       CONSTANTS GVK_1830  LIKE P2011-LTIME VALUE '183000'.
       CONSTANTS GVK_1915  LIKE P2011-LTIME VALUE '191500'.
       DATA:     GVK_HORA  LIKE P2011-LTIME.
       DATA:     GVK_FECHA LIKE SY-DATUM.
       CLEAR CIERRE.
       REFRESH TH_ARCHIVO.
       LOOP AT CIERRE.
          CLEAR TH_ARCHIVO.
          CHECADAS[] = CIERRE-EMPLEADO-REGISTRO[].
          LOOP AT CHECADAS.
             CLEAR TH_ARCHIVO.
             MOVE: CIERRE-EMPLEADO-NUMERO   TO TH_ARCHIVO-NUMERO,
                   CHECADAS-INCIDENCIA      TO TH_ARCHIVO-RAZON,
                   CHECADAS-CCOSTOS         TO TH_ARCHIVO-DEPARTAMENTO,
                   CHECADAS-SOCIO_REEMPLAZA TO TH_ARCHIVO-EMPLEADO2.
             CONCATENATE CHECADAS-DIA(2)   CHECADAS-DIA+3(2)
                         CHECADAS-DIA+6(4) INTO TH_ARCHIVO-FECHA.
             CONCATENATE CHECADAS-HORA(2) CHECADAS-HORA+3(2)
                    INTO TH_ARCHIVO-HORA.
             IF CHECADAS-TURNO = 'S1' OR CHECADAS-TURNO = 'S2' OR
                CHECADAS-TURNO = 'S3'.
                MOVE CHECADAS-TURNO TO TH_ARCHIVO-TURNO.
                IF CHECADAS-TIPO = 'E'.
                   MOVE 'ETI' TO TH_ARCHIVO-RAZON.
                ELSEIF CHECADAS-TIPO = 'S'.
                   MOVE 'STI' TO TH_ARCHIVO-RAZON.
                ENDIF.
             ELSE.
                MOVE CHECADAS-TURNO TO TH_ARCHIVO-TURNO.
             ENDIF.
             IF CHECADAS-CAMBIO_TURNO = 1.
                MOVE CHECADAS-TURNO TO TH_ARCHIVO-TURNO.
             ENDIF.
             MOVE CHECADAS-AUSENTISMO TO TH_ARCHIVO-AUSENTISMO.
             CASE CHECADAS-TURNO.
                WHEN '01' OR 'S1'.
                   IF CHECADAS-TIPO = 'E'.
                      CLEAR GVK_FECHA.
                      CONCATENATE CHECADAS-DIA6(4) CHECADAS-DIA3(2)
                                  CHECADAS-DIA(2)
                             INTO GVK_FECHA.
                      GVK_FECHA = GVK_FECHA + 1.
                      CONCATENATE GVK_FECHA6(2) GVK_FECHA4(2) GVK_FECHA(4)
                             INTO TH_ARCHIVO-FECHA.
                   ELSEIF CHECADAS-TIPO = 'S'.
                      GVK_HORA = TH_ARCHIVO-HORA.
                      IF GVK_HORA > GVK_1159.
                        CLEAR GVK_FECHA.
                        CONCATENATE CHECADAS-DIA6(4) CHECADAS-DIA3(2)
                                    CHECADAS-DIA(2)
                               INTO GVK_FECHA.
                        GVK_FECHA = GVK_FECHA + 1.
                        CONCATENATE GVK_FECHA6(2) GVK_FECHA4(2)
                                    GVK_FECHA(4)
                               INTO TH_ARCHIVO-FECHA.
                      ENDIF.
                   ENDIF.
                   CLEAR GVK_HORA.
                   GVK_HORA = TH_ARCHIVO-HORA.
                   GVK_HORA = GVK_HORA + GVK_12HRS.
                   CLEAR TH_ARCHIVO-HORA.
                   CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
                          INTO TH_ARCHIVO-HORA.
                WHEN 'T1'.
                   IF CHECADAS-TIPO = 'E'.
                      CLEAR GVK_FECHA.
                      CLEAR GVK_HORA.
                      CONCATENATE CHECADAS-DIA6(4) CHECADAS-DIA3(2)
                                  CHECADAS-DIA(2)
                             INTO GVK_FECHA.
                      GVK_FECHA = GVK_FECHA + 1.
                      CONCATENATE GVK_FECHA6(2) GVK_FECHA4(2) GVK_FECHA(4)
                             INTO TH_ARCHIVO-FECHA.
                      GVK_HORA = TH_ARCHIVO-HORA.
                      GVK_HORA = GVK_HORA + GVK_12HRS.
                      CLEAR TH_ARCHIVO-HORA.
                      CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
                             INTO TH_ARCHIVO-HORA.
                   ELSEIF CHECADAS-TIPO = 'S'.
                      MOVE 'STI' TO TH_ARCHIVO-RAZON.
                      GVK_HORA = TH_ARCHIVO-HORA.
                      IF GVK_HORA > GVK_1159.
                        CLEAR GVK_FECHA.
                        CONCATENATE CHECADAS-DIA6(4) CHECADAS-DIA3(2)
                                    CHECADAS-DIA(2)
                               INTO GVK_FECHA.
                        GVK_FECHA = GVK_FECHA + 1.
                        CONCATENATE GVK_FECHA6(2) GVK_FECHA4(2)
                                    GVK_FECHA(4)
                               INTO TH_ARCHIVO-FECHA.
                      ENDIF.
                      GVK_HORA = TH_ARCHIVO-HORA.
                      IF GVK_HORA BETWEEN GVK_0630 AND GVK_0715.
                         GVK_HORA = GVK_0630.
                      ENDIF.
                      GVK_HORA = GVK_HORA + GVK_12HRS.
                      CLEAR TH_ARCHIVO-HORA.
                      CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
                             INTO TH_ARCHIVO-HORA.
                   ENDIF.
                WHEN 'T2'.
                   IF CHECADAS-TIPO = 'S'.
                      MOVE 'STI' TO TH_ARCHIVO-RAZON.
                      CLEAR GVK_HORA.
                      GVK_HORA = TH_ARCHIVO-HORA.
                      IF GVK_HORA BETWEEN GVK_1830 AND GVK_1915.
                         GVK_HORA = GVK_1830.
                         CONCATENATE GVK_HORA(2) GVK_HORA+2(2)
                                INTO TH_ARCHIVO-HORA.
                      ENDIF.
                   ENDIF.
             ENDCASE.
             IF CHECADAS-TIPO = 'E'.
                TH_ARCHIVO-IN_OUT = '01'.
             ELSEIF CHECADAS-TIPO = 'S'.
                TH_ARCHIVO-IN_OUT = '02'.
             ENDIF.
             APPEND TH_ARCHIVO.
          ENDLOOP.
       ENDLOOP.
    ENDFORM.
    Form  LLENA_TH_ARCHIVO                                               *
    *&      Form  DATOS_DESC
          text
    -->  p1        text
    <--  p2        text
    FORM DATOS_DESC.
       REFRESH BDC_TABLE.
       PERFORM DYNPRO_START USING 'SAPMP50A' '1000'.
       PERFORM DYNPRO_FIELD USING 'RP50G-PERNR' TH_ARCHIVO-NUMERO.
       PERFORM DYNPRO_FIELD USING 'RP50G-CHOIC' '2003'.
       PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=INS'. "MML QA&C 08.02.00
       PERFORM DYNPRO_START USING 'MP200000' '2100'.
       PERFORM DYNPRO_FIELD USING 'P2003-BEGDA' WC_FECHA.
       PERFORM DYNPRO_FIELD USING 'P2003-ENDDA' WC_FECHA.
       PERFORM DYNPRO_FIELD USING 'P2003-VTART' '01'.
       PERFORM DYNPRO_FIELD USING 'P2003-TPROG' 'DESC'.
       PERFORM DYNPRO_FIELD USING 'BDC_OKCODE' '=UPD'. "MML QA&C 08.02.00
       CALL TRANSACTION 'PA61' USING BDC_TABLE MODE GVK_MODE UPDATE 'S'
                                            MESSAGES INTO TH_MESSTAB.
       IF SY-SUBRC NE 0.
          MOVE-CORRESPONDING TH_ARCHIVO TO TH_ERROR.
          APPEND TH_ERROR.

  • FBCJ BDC URGENT!!

    Hi,
    I'm doing BDC of fbcj.
    But one information message comes as soon as i run my BDC.
    S Field ISCJ_E_POSTINGS-H_PAYMENTS (1) input value is longer than screen field.
    and my amount is not coming there due to this msg.
    How to do this??
    Thanks,
    Gaurav

    Hi Sam
    It would be better if we can get the detailed info of the problem. well anyway I will try answering ur Question....
    The bestthing while doing a BDC is as said by others, thats Doing a Recording of the transaction used through TCODE 'SHDB'. here you get all the scrren numbers and source program name.
    and regarding the part of code you mentioned
    '' The below screen is not there for change info record.
    '' But I need to update for changing info record.
    PERFORM bdc_screen USING 'SAPMM06I' '103'.
    PERFORM bdc_table USING 'RM06I-SELKZ(01)' 'X'.
    PERFORM bdc_table USING 'RM06I-LTEX1(01)' int_me12-ztd.
    it all depends on the requirement of the change. we would have not given a field while creating a record but may have to change it if required so is this LTEX1 which you are changing also there while creating? I guess not as the code for the same is missing

Maybe you are looking for

  • Problem in JAVA PL/SQL Block

    Hi all, I am facing a peculiar problem. I have one JAVA PL/SQL code, which runs a shell script, which indeed fire a zipping command remotely. Here I am providing you the code. Actually it zip some files at application server running from Database Ser

  • HT5312 Hi I'm just wondering does any one know why the email to reset ur password hasn't came to my email address its been 2 days and I have been trying since No Emails ?

    Hi I'm just wondering does any one know why the email to reset ur password hasn't came to my email address its been 2 days and I have been trying since No Emails ? anyone know what happening ?

  • Problem while creating the Partner Address in CRM

    Hi,    We are facing one problem while creating the new address for the Business Partner.    When ever customer wants to change the address : we are following one process : where we are          using 'BAPI_BUPA_ADDRESS_ADD' functin module. Becuse of

  • Disabling the Loupe

    I don't know if it's just me but I find the loupe in Bridge pretty annoying. (I can see photographers with masses of photos enjoying it, but I know what's in my images). Is there any way to disable it? Anytime I click on the preview up pops the loupe

  • SAP EP - Windows 7 and IE 8 problem

    Hi all, Sorry to disturb all of you. I'm confronting a ridiculous problem. Some of my clients are using Windows 7 and IE8. The EP is working fine. However, there is somewhat of PCs don't work with Windows 7 and IE8 the browse will hang and became idl