Lyriance-labs

Welcome on Lyriance-labs. A site powered by the Lyriance team.

Feel free to create your account and share your knowledge...

Home SAP Tech ABAP ABAP - Program examples Personnel Administration Employee creation with call transaction

Employee creation with call transaction

E-mail Print PDF
*======================================================================*
* Report ZOHR_S_CREATE_COWORKER
*======================================================================*
REPORT zohr_s_create_coworker
LINE-SIZE 255
LINE-COUNT 60
MESSAGE-ID rp.

*----------------------------------------------------------------------*
* Déclarations
*----------------------------------------------------------------------*
*-- Données globales
DATA : gv_nbdossier TYPE i,
gv_nbsuccess TYPE i,
gv_nberror TYPE i.
DATA : gv_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,
gv_bimode.

*-- Table interne de stockage des données
TYPES: BEGIN OF t_comments,
comment(80) TYPE c,
status TYPE c,
END OF t_comments,

* Table stockant les informations utiles à la création du dossier du salarié
BEGIN OF t_tab_result,

* Infotype 0
pernr(8) TYPE c, " Matricule
massn TYPE massn, " Catégorie de mesure
massg TYPE massg, " Motif de mesure
begda(10), " Date d'embauche
endda(10), " Date de fin
plans TYPE plans, " Poste
werks TYPE persa, " Domaine du personnel
persg TYPE persg, " Catégorie de salarié (par défaut 1)
persk TYPE persk, " Statut de salarié

* Infotype 1
sacha TYPE sacha, " Gestionnaire contrat
ansvh TYPE ansvh, " Type de contrat
btrtl TYPE btrtl, " Sous-domaine du personnel
kostl TYPE kostl, " Centre de coût
abkrs TYPE abkrs, " Tranche de décompte
orgeh(8) TYPE c, " Unité structurelle

* Infotype 2
anrex TYPE anrex, " Qualité
nachn TYPE nachn, " Nom
vorna TYPE vorna, " Prénom
gbdat(10) TYPE c, " Date de naissance
gbort TYPE gbort, " Lieu de naissance
gbdep TYPE gbdep, " Département de naissance
gblnd TYPE gblnd, " Pays de naissance
natio TYPE natsl, " Nationalité
numss TYPE numss, " Numéro de sécurité social
cless TYPE cless, " Clé de sécurité social

* Autres
comments TYPE t_comments OCCURS 0, " Commentaires
END OF t_tab_result.
DATA : tab_result TYPE t_tab_result OCCURS 0 WITH HEADER LINE.

*-- Messages du CALL TRANSACTION
DATA BEGIN OF gv_messtab OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA END OF gv_messtab.


*-- Constantes
CONSTANTS : k_col1 TYPE i VALUE 1,
k_col1t TYPE i VALUE 2,
k_col2 TYPE i VALUE 12,
k_col2t TYPE i VALUE 13,
k_col3 TYPE i VALUE 40,
k_col3t TYPE i VALUE 41,
k_col4 TYPE i VALUE 70,
k_col4t TYPE i VALUE 71,
k_col5 TYPE i VALUE 80,
k_col5t TYPE i VALUE 81,
k_col6 TYPE i VALUE 95,
k_col6t TYPE i VALUE 96,
k_col7 TYPE i VALUE 110,
k_col7t TYPE i VALUE 111,
k_col8 TYPE i VALUE 130,
k_col8t TYPE i VALUE 131,
k_end TYPE i VALUE 225.



*----------------------------------------------------------------------*
* Ecran de sélection
*----------------------------------------------------------------------*
" Recherche du fichier
SELECTION-SCREEN BEGIN OF BLOCK param1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_candid FOR zohr_t_dp_cand-candidat_num MATCHCODE OBJECT zohr_h_candidat_num.
SELECT-OPTIONS : s_site FOR zohr_t_dp-defsite MATCHCODE OBJECT zohr_h_site.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (31) text-003.
PARAMETERS : p_begda LIKE sy-datum.
SELECTION-SCREEN COMMENT 52(5) text-004.
PARAMETERS : p_endda LIKE sy-datum.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK param1.

" Réèl ou lecture + contrôle
SELECTION-SCREEN BEGIN OF BLOCK param2 WITH FRAME TITLE text-002.
PARAMETERS : p_test AS CHECKBOX DEFAULT 'X'.
PARAMETERS : p_debug AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK param2.


" Détail des logs
SELECTION-SCREEN BEGIN OF BLOCK param3 WITH FRAME TITLE text-005.
PARAMETERS : p_erro AS CHECKBOX DEFAULT 'X'.
PARAMETERS : p_succ AS CHECKBOX DEFAULT 'X'.
PARAMETERS : p_info AS CHECKBOX DEFAULT 'X'.
PARAMETERS : p_warn AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK param3.



*----------------------------------------------------------------------*
* Initialisation *
*----------------------------------------------------------------------*
INITIALIZATION.
IF p_begda IS INITIAL.
p_begda = '18000101'.
ENDIF.

IF p_endda IS INITIAL.
p_endda = '99991231'.
ENDIF.



*----------------------------------------------------------------------*
* Start-of-selection *
*----------------------------------------------------------------------*
START-OF-SELECTION.

" Chargement en table interne
CLEAR tab_result. REFRESH tab_result.

PERFORM charger_tab_result.

" Traitement des données chargées.
IF gv_nbdossier GT 0.

" Contrôle des données lues et génération Batch Input
PERFORM traiter_tab_result.

ENDIF.



*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
" Affichage du compte rendu.
PERFORM afficher_compte_rendu.



*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* ROUTINE(S) de traitement
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form Charger_TAB_result
*& Chargement table interne
*&---------------------------------------------------------------------*
FORM charger_tab_result.
<!-- Code de récupération des informations du salarié à créer -->

ENDFORM. "charger_tab_result



*&---------------------------------------------------------------------*
*& Form check_error
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ERROR text
*----------------------------------------------------------------------*
FORM check_error USING p_error.
DATA : l_comment TYPE t_comments.

READ TABLE tab_result-comments INTO l_comment WITH KEY status = c_error.
IF sy-subrc EQ 0.
p_error = 'X'.
ELSE.
p_error = ''.
ENDIF.

ENDFORM. "check_error


*&---------------------------------------------------------------------*
*& Form Traiter_TAB_result
*& Controles des informations lues.
*& Lancement du traitement
*& Affichage d'un compte-rendu détaillé.
*&---------------------------------------------------------------------*
FORM traiter_tab_result.

" Traitement des données correctes si le traitement n'est pas en mode test
PERFORM traiter_donnees.

ENDFORM. "traiter_tab_result


*&---------------------------------------------------------------------*
*& Form Traiter_Donnees
*& Création ou mise à jour des données
*&---------------------------------------------------------------------*
FORM traiter_donnees.
DATA : l_error,
l_intervals TYPE inriv OCCURS 0 WITH HEADER LINE.
  IF p_test IS INITIAL.
" Boucle sur les résultats
LOOP AT tab_result.
PERFORM check_error CHANGING l_error.
IF l_error IS INITIAL.

* Remplissage des infotypes 0000 et 0001
PERFORM add_log USING text-i10 c_info '0000' ''.
PERFORM add_log USING text-i10 c_info '0001' ''.

PERFORM bdc_dynpro USING 'SAPMP50A' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=INS'.
PERFORM bdc_field USING 'RP50G-BEGDA' tab_result-begda.
PERFORM bdc_field USING 'RP50G-ENDDA' tab_result-endda.
PERFORM bdc_field USING 'RP50G-PERNR' tab_result-pernr.
PERFORM bdc_field USING 'RP50G-CHOIC' '0000'.
PERFORM bdc_field USING 'RP50G-SUBTY' tab_result-massn.

" Infotype 0
PERFORM bdc_dynpro USING 'MP000000' '2000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UPD'.
PERFORM bdc_field USING 'P0000-BEGDA' tab_result-begda.

IF tab_result-massn NE '02'.
PERFORM bdc_field USING 'P0000-ENDDA' tab_result-endda.
PERFORM bdc_field USING 'PSPAR-WERKS' tab_result-werks.
ENDIF.
PERFORM bdc_field USING 'PSPAR-PLANS' tab_result-plans.
PERFORM bdc_field USING 'P0000-MASSG' tab_result-massg.
PERFORM bdc_field USING 'PSPAR-PERSG' tab_result-persg.
PERFORM bdc_field USING 'PSPAR-PERSK' tab_result-persk.

" Infotype 1
PERFORM bdc_dynpro USING 'MP000100' '2000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UPD'.
PERFORM bdc_field USING 'P0001-BEGDA' tab_result-begda.
PERFORM bdc_field USING 'P0001-ENDDA' tab_result-endda.
PERFORM bdc_field USING 'P0001-BTRTL' tab_result-btrtl.
PERFORM bdc_field USING 'P0001-KOSTL' tab_result-kostl.
PERFORM bdc_field USING 'P0001-ANSVH' tab_result-ansvh.
PERFORM bdc_field USING 'P0001-SACHA' tab_result-sacha.
PERFORM bdc_field USING 'P0001-ORGEH' tab_result-orgeh.

" Lancement du traitement
IF p_debug EQ 'X'.
gv_bimode = 'A'.
ELSE.
gv_bimode = 'N'.
ENDIF.
CALL TRANSACTION 'PA30' USING gv_bdcdata
MODE gv_bimode
MESSAGES INTO gv_messtab.
PERFORM add_log_from_sap.
CLEAR : gv_bdcdata. REFRESH gv_bdcdata.
COMMIT WORK.

PERFORM check_error CHANGING l_error.
IF l_error IS INITIAL.
PERFORM add_log USING text-i10 c_info '0002' ''.

PERFORM bdc_dynpro USING 'SAPMP50A' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=INS'.
PERFORM bdc_field USING 'RP50G-BEGDA' tab_result-begda.
PERFORM bdc_field USING 'RP50G-ENDDA' tab_result-endda.
PERFORM bdc_field USING 'RP50G-PERNR' tab_result-pernr.
PERFORM bdc_field USING 'RP50G-CHOIC' '0002'.
          PERFORM bdc_dynpro USING  'MP000200'    '2000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UPD'.
PERFORM bdc_field USING 'P0002-ENDDA' tab_result-endda.
PERFORM bdc_field USING 'Q0002-ANREX' tab_result-anrex.
PERFORM bdc_field USING 'P0002-NACHN' tab_result-nachn.
PERFORM bdc_field USING 'P0002-VORNA' tab_result-vorna.
PERFORM bdc_field USING 'P0002-GBDAT' tab_result-gbdat.
PERFORM bdc_field USING 'P0002-GBLND' tab_result-gblnd.
PERFORM bdc_field USING 'P0002-GBDEP' tab_result-gbdep.
PERFORM bdc_field USING 'P0002-NATIO' tab_result-natio.
PERFORM bdc_field USING 'Q0002-NUMSS' tab_result-numss.
PERFORM bdc_field USING 'Q0002-CLESS' tab_result-cless.

CALL TRANSACTION 'PA30' USING gv_bdcdata
MODE gv_bimode
MESSAGES INTO gv_messtab.

CLEAR : gv_bdcdata. REFRESH gv_bdcdata.
COMMIT WORK.
ENDIF.

IF l_error IS INITIAL.
ADD 1 TO gv_nbsuccess.
ENDIF.
ENDIF.

IF NOT l_error IS INITIAL.
PERFORM add_log USING text-E21 c_error '' ''.

ADD 1 TO gv_nberror.
ENDIF.

MODIFY tab_result.
CLEAR : tab_result, l_error, l_intervals.
REFRESH : l_intervals.
ENDLOOP.
ENDIF.
ENDFORM. " Traiter_Donnees

*&---------------------------------------------------------------------*
*& Form add_log
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TEXT text
* -->P_TYPE text
* -->P_COMMENT text
*----------------------------------------------------------------------*
FORM add_log USING p_text
p_type
p_arg1
p_arg2.
DATA : l_comment TYPE t_comments.

IF ( p_type EQ c_error AND p_erro EQ 'X' )
OR ( p_type EQ c_info AND p_info EQ 'X' )
OR ( p_type EQ c_success AND p_succ EQ 'X' )
OR ( p_type EQ c_warning AND p_warn EQ 'X' ).

l_comment-comment = p_text.
l_comment-status = p_type.

IF NOT p_arg1 IS INITIAL.
REPLACE ALL OCCURENCES OF '$1' IN l_comment-comment WITH p_arg1 IN CHARACTER MODE.
ENDIF.

IF NOT p_arg2 IS INITIAL.
REPLACE ALL OCCURENCES OF '$2' IN l_comment-comment WITH p_arg2 IN CHARACTER MODE.
ENDIF.

APPEND l_comment TO tab_result-comments.
ENDIF.
ENDFORM. "add_log


*&---------------------------------------------------------------------*
*& Form add_log_from_sap
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM add_log_from_sap.
DATA : l_comment TYPE t_comments.

LOOP AT gv_messtab.
MESSAGE ID gv_messtab-msgid TYPE gv_messtab-msgtyp NUMBER gv_messtab-msgnr
INTO l_comment-comment
WITH gv_messtab-msgv1
gv_messtab-msgv2
gv_messtab-msgv3
gv_messtab-msgv4.

IF NOT l_comment-comment IS INITIAL.
l_comment-status = gv_messtab-msgtyp.

IF ( l_comment-status EQ c_error AND p_erro EQ 'X' )
OR ( l_comment-status EQ c_info AND p_info EQ 'X' )
OR ( l_comment-status EQ c_success AND p_succ EQ 'X' )
OR ( l_comment-status EQ c_warning AND p_warn EQ 'X' ).

APPEND l_comment TO tab_result-comments. CLEAR l_comment.

ENDIF.
ENDIF.
CLEAR : gv_messtab.
ENDLOOP.
REFRESH gv_messtab.

ENDFORM. "add_log_from_sap


*& ------------------------------------------------------------------- *
*& FORM OPEN_GROUP
*& ------------------------------------------------------------------- *
*& Create batch input session
*& ------------------------------------------------------------------- *
FORM open_group.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = wgroup
holddate = holddate
keep = keep
user = sy-uname.
ENDFORM. "OPEN_GROUP

*& ------------------------------------------------------------------- *
*& FORM CLOSE_GROUP
*& ------------------------------------------------------------------- *
*& End batch input session
*& ------------------------------------------------------------------- *
FORM close_group.

CALL FUNCTION 'BDC_CLOSE_GROUP'.

ENDFORM. "CLOSE_GROUP

*& ------------------------------------------------------------------- *
*& FORM BDC_TRANSACTION
*& ------------------------------------------------------------------- *
*& Start new transaction according to parameters
*& ------------------------------------------------------------------- *
FORM bdc_transaction USING tcode.

CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = gv_bdcdata.

REFRESH gv_bdcdata.

ENDFORM. "BDC_TRANSACTION

*& ------------------------------------------------------------------- *
*& FORM BDC_DYNPRO
*& ------------------------------------------------------------------- *
*& Start new screen
*& ------------------------------------------------------------------- *
FORM bdc_dynpro USING program dynpro.

CLEAR gv_bdcdata.
gv_bdcdata-program = program.
gv_bdcdata-dynpro = dynpro.
gv_bdcdata-dynbegin = 'X'.
APPEND gv_bdcdata.

ENDFORM. "BDC_DYNPRO

*& ------------------------------------------------------------------- *
*& FORM BDC_FIELD
*& ------------------------------------------------------------------- *
*& Insert field
*& ------------------------------------------------------------------- *
FORM bdc_field USING fnam fval.

CLEAR gv_bdcdata.
gv_bdcdata-fnam = fnam.
gv_bdcdata-fval = fval.
APPEND gv_bdcdata.

ENDFORM. "BDC_FIELD

*&----------------------------------------------------------------------*
*& Form Afficher_Compte_Rendu
*& Affichage d'un compte-rendu :
*& Anomalies provenant du controle de données
*& Anomalies provenant de la mise à jour de données
*& Paramètres de lancement du programme
*& Statistiques d'éxécution du programme
*&----------------------------------------------------------------------*
FORM afficher_compte_rendu.
DATA : l_comment TYPE t_comments.

IF NOT p_test IS INITIAL.
WRITE : / 'Traitement en mode simulation'.
ELSE.
WRITE : / 'Traitement en mode réel'.
ENDIF.

WRITE :/.
WRITE :/ text-150 , ' : ', 50 gv_nbdossier.
WRITE :/ text-151 , ' : ', 50 gv_nbsuccess.
WRITE :/ text-152 , ' : ', 50 gv_nberror.

* En-tête
SKIP.
ULINE AT 0(k_end).
FORMAT COLOR COL_HEADING.

WRITE : /1 sy-vline, AT k_col1t text-101,
AT k_col2 sy-vline, AT k_col2t text-102,
AT k_col3 sy-vline, AT k_col3t text-103,
AT k_col4 sy-vline, AT k_col4t text-104,
AT k_col5 sy-vline, AT k_col5t text-105,
AT k_col6 sy-vline, AT k_col6t text-106,
AT k_col7 sy-vline, AT k_col7t text-107,
AT k_col8 sy-vline, AT k_col8t text-108,
AT k_end sy-vline.

FORMAT RESET.
ULINE AT 0(k_end).

* Liste des résultats
SORT tab_result BY pernr vorna ASCENDING.
LOOP AT tab_result.

" Affichage des informations
WRITE : /1 sy-vline, AT k_col1t tab_result-pernr,
AT k_col2 sy-vline, AT k_col2t tab_result-nachn,
AT k_col3 sy-vline, AT k_col3t tab_result-vorna,
AT k_col4 sy-vline, AT k_col4t tab_result-massn,
AT k_col5 sy-vline, AT k_col5t tab_result-begda,
AT k_col6 sy-vline, AT k_col6t(14) tab_result-sacha.

" Commentaires
READ TABLE tab_result-comments INDEX 1 INTO l_comment.
IF sy-subrc EQ 0.
PERFORM write_comment USING l_comment.

DELETE tab_result-comments INDEX 1.

LOOP AT tab_result-comments INTO l_comment.
WRITE : /1 sy-vline,
AT k_col2 sy-vline,
AT k_col3 sy-vline,
AT k_col4 sy-vline,
AT k_col5 sy-vline,
AT k_col6 sy-vline, AT k_col6t(14) ''.

PERFORM write_comment USING l_comment.
ENDLOOP.
ELSE.
WRITE : AT k_col7 sy-vline.
WRITE : AT k_col8 sy-vline, AT k_end sy-vline.
ENDIF.

ULINE AT 0(k_end).

ENDLOOP.

ENDFORM. " Afficher_Compte_Rendu


*&---------------------------------------------------------------------*
*& Form write_comment
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->L_COMMENT text
*----------------------------------------------------------------------*
FORM write_comment USING p_comment TYPE t_comments.

" Statut
CASE p_comment-status.
WHEN c_success.
FORMAT COLOR COL_POSITIVE.
WRITE : AT k_col7 sy-vline, AT k_col7t text-117.
WHEN c_warning.
FORMAT COLOR COL_TOTAL.
WRITE : AT k_col7 sy-vline, AT k_col7t text-127.
WHEN c_info.
FORMAT COLOR COL_POSITIVE.
WRITE : AT k_col7 sy-vline, AT k_col7t text-147.
WHEN c_error.
FORMAT COLOR COL_NEGATIVE.
WRITE : AT k_col7 sy-vline, AT k_col7t text-137.
ENDCASE.

WRITE : AT k_col8 sy-vline, AT k_col8t p_comment-comment,
AT k_end sy-vline.

FORMAT RESET.
ENDFORM. "write_comment

*&----------------------------------------------------------------------*
*& Form ARRANGE_DATE
*&----------------------------------------------------------------------*
FORM arrange_date USING old_date new_date.
DATA : l_year(4), l_day(2), l_month(2).

l_year = old_date(4).
l_month = old_date+4(2).
l_day = old_date+6(2).

CONCATENATE l_day l_month l_year INTO new_date SEPARATED BY '.'.
ENDFORM. "arrange_date

*&----------------------------------------------------------------------*
*& Form ARRANGE_DATE_TO_SAP
*&----------------------------------------------------------------------*
FORM arrange_date_to_sap USING old_date new_date.
DATA : l_year(4), l_day(2), l_month(2).

l_year = old_date+6(4).
l_month = old_date+3(2).
l_day = old_date(2).

CONCATENATE l_year l_month l_day INTO new_date.
ENDFORM. "arrange_date_to_sap
Last Updated ( Wednesday, 17 September 2008 14:36 )