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
-
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,Name50Regarding 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> -
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 -
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.
a®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. -
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,
GauravHi 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
-
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
-
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