Programma Creazione Cespiti per Copia da un altro mediante BAPI_FIXEDASSET_CREATE1
Questo programma custom legge un file .csv che ha la seguente struttuta:
Societa;Cespite;Secondario;Nuova_Classe_Cespite
SOCIETA;2100000005;0001;N2410000SOCIETA;2100000011;0002;N2410000
SOCIETA;2100000033;0002;N2410000
Per ogni cespite letto, viene creato un nuovo cespite principale (Nr. Sec = 0000), mediante la BAPI_FIXEDASSET_CREATE1, e la particolarità è quella di settare e usare il parametro
di input della Bapi “REFERENCE” con
i valori del vecchio cespite.
*&---------------------------------------------------------------------*
*& Report ZF15_AA_CREA_ANAG_CESPITI
*&---------------------------------------------------------------------*
*& Description Crea Anagrafica cespiti
*&---------------------------------------------------------------------*
REPORT zf15_aa_crea_anag_cespiti LINE-SIZE 181.
*======================================================================*
* INCLUDES *
*======================================================================*
*&---------------------------------------------------------------------*
*& Include ZF15_AA_CREA_ANAG_CESPITI_TOP
*&---------------------------------------------------------------------*
*======================================================================*
* TABLES *
*======================================================================*
TABLES: anla,
anlb,
zaa_terminat_sca,
zaa_proseguiment.
*======================================================================*
* TYPES
*======================================================================*
TYPES: BEGIN OF ty_input,
bukrs TYPE bukrs,
anln1 TYPE anln1,
anln2 TYPE anln2,
anlkl TYPE anlkl,
row TYPE i,
END OF ty_input,
BEGIN OF ty_output,
bukrs TYPE bukrs,
anln1 TYPE anln1,
anln2 TYPE anln2,
anlkl TYPE anlkl,
anln1_new TYPE anln1,
row TYPE i,
descr TYPE char200,
END OF ty_output.
*======================================================================*
* GLOBAL TABLES *
*======================================================================*
DATA: BEGIN OF tabin OCCURS 0,
record TYPE string.
DATA: END OF tabin.
DATA: gt_input TYPE TABLE OF ty_input,
gt_output TYPE TABLE OF ty_output.
*======================================================================*
* CONSTANTS *
*======================================================================*
CONSTANTS: gc_x TYPE char1 VALUE 'X',
gc_soc TYPE char3 VALUE 'SOC',
gc_separatore TYPE c LENGTH 1 VALUE ';'.
*======================================================================*
* GLOBAL DATA *
*======================================================================*
DATA: dir TYPE string,
gv_error TYPE c LENGTH 1,
ls_output TYPE ty_output,
gv_ok TYPE i,
gv_tot TYPE i.
FIELD-SYMBOLS: <fs_input> TYPE ty_input.
*======================================================================*
* ALV GRID *
*======================================================================*
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv.
*&---------------------------------------------------------------------*
*& Include ZF15_AA_CREA_ANAG_CESPITI_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE text-s01. "Percorso file
PARAMETERS: p_ser RADIOBUTTON GROUP a2 USER-COMMAND sele.
PARAMETERS: p_filese LIKE rlgrap-filename DEFAULT '/'.
PARAMETERS: p_loc RADIOBUTTON GROUP a2 DEFAULT 'X'.
PARAMETERS: p_filelo LIKE rlgrap-filename DEFAULT 'C:\'.
SELECTION-SCREEN END OF BLOCK 1.
PARAMETERS: p_test AS CHECKBOX DEFAULT 'X'.
*&---------------------------------------------------------------------*
*& Include ZF15_AA_CREA_ANAG_CESPITI_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form CHECK_RADIO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM check_radio .
IF p_ser IS INITIAL AND NOT
p_loc IS INITIAL.
LOOP AT SCREEN.
IF screen-name CS 'P_FILESE'.
screen-input = 0.
screen-invisible = 1.
screen-output = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF p_loc IS INITIAL AND NOT
p_ser IS INITIAL.
LOOP AT SCREEN.
IF screen-name CS 'P_FILELO'.
screen-input = 0.
screen-invisible = 1.
screen-output = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDFORM. " CHECK_RADIO
*&---------------------------------------------------------------------*
*& Form READ_FILE
*&---------------------------------------------------------------------*
* Legge il file da server o da locale
*----------------------------------------------------------------------*
FORM read_file.
IF p_ser = gc_x.
PERFORM carica_da_server.
ELSEIF p_loc EQ gc_x.
PERFORM carica_da_locale.
ENDIF.
ENDFORM. " read_file
*&---------------------------------------------------------------------*
*& Form CARICA_DA_SERVER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM carica_da_server .
DATA: con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.
DATA: exit TYPE c LENGTH 1,
lv_app TYPE string,
lv_count TYPE i.
IF p_filese IS NOT INITIAL.
* Carico file txt da server
OPEN DATASET p_filese FOR INPUT IN TEXT MODE
ENCODING NON-UNICODE.
* WITH SMART LINEFEED.
IF sy-subrc EQ 0.
WHILE exit IS INITIAL.
READ DATASET p_filese INTO tabin-record.
IF tabin IS INITIAL.
exit = 'X'.
ELSE.
lv_count = strlen( tabin-record ).
lv_count = lv_count - 1.
lv_app = tabin-record(lv_count).
tabin-record = lv_app.
APPEND tabin.
ENDIF.
ENDWHILE.
CLOSE DATASET p_filese.
ELSE.
MESSAGE text-e03 TYPE 'S'. "Errore: Controllare il Naming del File
gv_error = gc_x.
ENDIF.
ELSE.
gv_error = gc_x.
MESSAGE text-e03 TYPE 'S'.
ENDIF.
ENDFORM. " CARICA_DA_SERVER
*&---------------------------------------------------------------------*
*& Form CARICA_DA_LOCALE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM carica_da_locale .
DATA: upload_file TYPE string.
IF NOT p_filelo IS INITIAL.
CLEAR upload_file.
upload_file = p_filelo.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = upload_file
filetype = 'ASC'
TABLES
data_tab = tabin
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
gv_error = gc_x.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
gv_error = gc_x.
MESSAGE text-e04 "Errore: Inserire il File
TYPE 'S'.
ENDIF.
ENDFORM. " CARICA_DA_LOCALE
*&---------------------------------------------------------------------*
*& Form ESTRAI_DATI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM estrai_dati .
FIELD-SYMBOLS: <fs_tabin> LIKE LINE OF tabin.
DATA: num TYPE i,
ls_input TYPE ty_input.
* filler type c LENGTH 50.
CHECK gv_error NE gc_x.
CLEAR num.
LOOP AT tabin ASSIGNING <fs_tabin>.
SPLIT <fs_tabin>-record AT gc_separatore INTO ls_input-bukrs
ls_input-anln1
ls_input-anln2
ls_input-anlkl.
ADD 1 TO num.
MOVE num TO ls_input-row.
APPEND ls_input TO gt_input.
ENDLOOP.
" cancello riga etichette
DELETE gt_input INDEX 1.
REFRESH tabin.
ENDFORM. " ESTRAI_DATI
*&---------------------------------------------------------------------*
*& Form CREA_CESPITI
*&---------------------------------------------------------------------*
* CREAZIONE CESPITI PER COPIA
*----------------------------------------------------------------------*
FORM crea_cespiti .
CHECK gv_error NE gc_x.
LOOP AT gt_input ASSIGNING <fs_input>.
" creazione del cespite nuovo di copia di quello vecchio
PERFORM call_as01 USING <fs_input>.
ENDLOOP.
ENDFORM. " CREA_CESPITI
*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_output .
DATA: lv_repid LIKE sy-repid.
CLEAR lv_repid.
CHECK NOT gv_error EQ gc_x.
lv_repid = sy-repid.
PERFORM: set_layout,
create_fieldcat.
SORT gt_output BY anln1 anln2.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_bypassing_buffer = 'X'
i_callback_program = lv_repid
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = gs_layout
it_fieldcat = gt_fieldcat
TABLES
t_outtab = gt_output
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
*& Form SET_LAYOUT
*&---------------------------------------------------------------------*
FORM set_layout .
CLEAR gs_layout.
gs_layout-colwidth_optimize = gc_x.
ENDFORM. " SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form CREATE_FIELDCAT
*&---------------------------------------------------------------------*
* Creazione lista campi output
*----------------------------------------------------------------------*
FORM create_fieldcat .
DATA: ls_fieldcat LIKE LINE OF gt_fieldcat.
REFRESH gt_fieldcat.
" Num Riga
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ROW'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 1.
ls_fieldcat-seltext_m = 'Num Riga'.
ls_fieldcat-seltext_l = 'Num Riga'.
ls_fieldcat-outputlen = 8.
APPEND ls_fieldcat TO gt_fieldcat.
" Società cespite modello
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BUKRS'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 2.
ls_fieldcat-seltext_m = 'Società'.
ls_fieldcat-seltext_l = 'Società'.
ls_fieldcat-outputlen = 8.
APPEND ls_fieldcat TO gt_fieldcat.
" Numero cespite modello
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ANLN1'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 3.
ls_fieldcat-seltext_m = 'Cespite'.
ls_fieldcat-seltext_l = 'Cespite'.
ls_fieldcat-outputlen = 12.
APPEND ls_fieldcat TO gt_fieldcat.
" Numero sec cespite modello
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ANLN2'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 4.
ls_fieldcat-seltext_m = 'Num Sec'.
ls_fieldcat-seltext_l = 'Num Sec'.
ls_fieldcat-outputlen = 7.
APPEND ls_fieldcat TO gt_fieldcat.
" classe cespite nuovo
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ANLKL'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 5.
ls_fieldcat-seltext_m = 'Cl cesp New'.
ls_fieldcat-seltext_l = 'Classe nuovo cesp'.
ls_fieldcat-outputlen = 10.
APPEND ls_fieldcat TO gt_fieldcat.
" numero nuovo cespite
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ANLN1_NEW'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 6.
* ls_fieldcat-no_zero = gc_x.
ls_fieldcat-seltext_m = 'Cesp New'.
ls_fieldcat-seltext_l = 'Nuovo Cespite'.
ls_fieldcat-outputlen = 15.
APPEND ls_fieldcat TO gt_fieldcat.
" messaggio
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'DESCR'.
ls_fieldcat-tabname = 'GT_OUTPUT'.
ls_fieldcat-col_pos = 7.
ls_fieldcat-seltext_m = 'Messaggio'.
ls_fieldcat-seltext_l = 'Messaggio'.
ls_fieldcat-outputlen = 200.
APPEND ls_fieldcat TO gt_fieldcat.
ENDFORM. " CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*& Form CALL_AS01
*&---------------------------------------------------------------------*
* chiamo AS01 per creare il cespite stock di copia
*
*----------------------------------------------------------------------*
FORM call_as01 USING ps_input TYPE ty_input.
DATA: ls_key TYPE bapi1022_key,
ls_reference TYPE bapi1022_reference,
ls_generaldata TYPE bapi1022_feglg001,
ls_generaldatax TYPE bapi1022_feglg001x,
ls_return TYPE bapiret2,
lv_anln1_new TYPE anln1.
CLEAR: lv_anln1_new,
ls_key,
ls_reference,
ls_generaldata,
ls_generaldata,
ls_return.
" valorizzazione società nella key:
MOVE 'SOC' TO ls_key-companycode.
" valorizzazione cespite modello
MOVE: 'SOC' TO ls_reference-companycode,
ps_input-anln1 TO ls_reference-asset,
ps_input-anln2 TO ls_reference-subnumber.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_reference-asset
IMPORTING
output = ls_reference-asset.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_reference-subnumber
IMPORTING
output = ls_reference-subnumber.
" valorizzazione classe cespite
MOVE: ps_input-anlkl TO ls_generaldata-assetclass,
'X' TO ls_generaldatax-assetclass.
CALL FUNCTION 'BAPI_FIXEDASSET_CREATE1'
EXPORTING
key = ls_key
reference = ls_reference
testrun = p_test
generaldata = ls_generaldata
generaldatax = ls_generaldatax
IMPORTING
* COMPANYCODE =
asset = lv_anln1_new
* SUBNUMBER =
* ASSETCREATED =
return = ls_return.
MOVE-CORRESPONDING ps_input TO ls_output.
IF ls_return-type EQ 'S'.
IF p_test IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-descr = text-e02. " Cespite stock non creato
ENDIF.
ADD 1 TO gv_ok.
MOVE lv_anln1_new TO ls_output-anln1_new.
MOVE ls_return-message TO ls_output-descr.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_output-descr = ls_return-message.
ENDIF.
APPEND ls_output TO gt_output.
ENDFORM. " CALL_AS01
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* Evento TOP OF PAGE per ALV
*----------------------------------------------------------------------*
FORM top_of_page.
DATA: lt_header TYPE slis_t_listheader,
ls_header TYPE slis_listheader,
ld_linesc TYPE c LENGTH 10.
* Titolo
ls_header-typ = 'H'.
ls_header-info = text-hea. "Creazione Anagrafica Cespiti
APPEND ls_header TO lt_header.
CLEAR ls_header.
* Data
ls_header-typ = 'S'.
ls_header-key = text-dat. " Data:
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO ls_header-info. "todays date
APPEND ls_header TO lt_header.
CLEAR: ls_header.
* Numero totale di record elaborati
DESCRIBE TABLE gt_output LINES gv_tot.
ld_linesc = gv_tot.
ls_header-typ = 'S'.
ls_header-key = text-rtt. "Record totali:
ls_header-info = ld_linesc.
APPEND ls_header TO lt_header.
CLEAR: ls_header, ld_linesc.
* Numero totale di record corretti
ld_linesc = gv_ok.
ls_header-typ = 'S'.
ls_header-key = text-rok. "Record corretti:
ls_header-info = ld_linesc.
APPEND ls_header TO lt_header.
CLEAR: ls_header, ld_linesc.
* Numero di record scartati
ld_linesc = gv_tot - gv_ok.
ls_header-typ = 'S'.
ls_header-key = text-rko. "Record errati:
ls_header-info = ld_linesc.
APPEND ls_header TO lt_header.
* Modalità
ls_header-typ = 'S'.
ls_header-key = text-mod. "Modalità:
IF p_test IS INITIAL.
ls_header-info = text-eff. "Effettiva
ELSE.
ls_header-info = text-tst. "Test
ENDIF.
APPEND ls_header TO lt_header.
CLEAR: ls_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_header.
ENDFORM. " CREATE_LAYOUT
*======================================================================*
* AT SELECTION-SCREEN OUTPUT
*======================================================================*
AT SELECTION-SCREEN OUTPUT.
PERFORM check_radio.
*======================================================================*
* AT SELECTION-SCREEN ON VALUE REQUEST *
*======================================================================*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filese.
CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
EXPORTING
directory = dir
IMPORTING
serverfile = p_filese
EXCEPTIONS
canceled_by_user = 1
OTHERS = 2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filelo.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
program_name = syst-repid
mask = '*.*'
CHANGING
file_name = p_filelo
EXCEPTIONS
mask_too_long = 1
OTHERS = 2.
*======================================================================*
* START-OF-SELECTION *
*======================================================================*
START-OF-SELECTION.
PERFORM read_file.
PERFORM estrai_dati.
PERFORM crea_cespiti.
*======================================================================*
* END-OF-SELECTION *
*======================================================================*
END-OF-SELECTION.
IF gt_output[] IS NOT INITIAL.
PERFORM display_output.
ELSE.
* Nessun dato estratto
MESSAGE text-e01 TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
EBOOK: le mie guide sono visualizzabili cliccando sui link:
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
SE MI CONTATTATE IN PRIVATO, PAGATE 1/3 DEL PREZZO DI AMAZON, E POTETE SCEGLIERE IL FORMATO WORD o PDF.
>>> RECENSIONI DEI LIBRI su Amazon Kindle <<<
Ebook: SAP CDS: https://www.amazon.it/dp/B0B9BD1RN3#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP EWM: https://www.amazon.it/dp/B0CL6TXP1V#customerReviews
Nessun commento:
Posta un commento