viernes, 26 de abril de 2013

Code para transacción para lanzar cadenas


&---------------------------------------------------------------------*
*& Report  ZBWPR00
*&
*

REPORT  ZBWPR00.

************************************************************************
* VARIABLES
************************************************************************
CONSTANTS:  c_co(13) TYPE C VALUE 'ZPC_IG_TRAN03', "Comercial
            c_lo(13) TYPE C VALUE 'ZPC_IG_TRAN04', "Logística
            c_cg(13) TYPE C VALUE 'ZPC_IG_TRAN05', "Control de Gestión
            c_pr(13) TYPE C VALUE 'ZPC_IG_TRAN02', "Producción
            c_ca(13) TYPE C VALUE 'ZPC_IG_TRAN06', "Calidad
            c_fi(13) TYPE C VALUE 'ZPC_IG_TRAN07', "Finanzas
            c_rh(13) TYPE C VALUE 'ZPC_IG_TRAN01'. "Recursos Humanos

DATA: V_CHAIN TYPE RSPC_CHAIN. "Cadena de proceso


************************************************************************
* PANTALLA SELECCIÓN
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

PARAMETERS:
            cb_co   AS CHECKBOX, "Comercial
            cb_lo   AS CHECKBOX, "Logística
            cb_cg   AS CHECKBOX, "Control de Gestión
            cb_pr   AS CHECKBOX, "Producción
            cb_ca   AS CHECKBOX, "Calidad
            cb_fi   AS CHECKBOX, "Finanzas
            cb_rh   AS CHECKBOX. "Recursos Humanos

SELECTION-SCREEN END OF BLOCK b1.

************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.


   MESSAGE I000(zbw).

   IF cb_co IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_co.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_lo IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_lo.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_cg IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_cg.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_pr IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_pr.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.


   IF cb_ca IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_ca.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.


   IF cb_fi IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_fi.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.

   IF cb_rh IS NOT INITIAL.

         CLEAR V_CHAIN.
         V_CHAIN = c_rh.
         PERFORM F_CHAIN_START USING V_CHAIN.

   ENDIF.



*****************************************************************
* RUTINAS
*****************************************************************

*&---------------------------------------------------------------------*
*&      Form  F_CHAIN_START
*&---------------------------------------------------------------------*
*    Ejecutar cadena de procesos
*----------------------------------------------------------------------*
*      -->Pe_CHAIN  text
*----------------------------------------------------------------------*
FORM F_CHAIN_START  USING  Pe_CHAIN.

  CALL FUNCTION 'RSPC_CHAIN_START' IN BACKGROUND TASK
*                     [AS SEPARATE UNIT]
*                     [DESTINATION dest]
     EXPORTING
          i_chain             = Pe_CHAIN
          i_synchronous       = 'X'.
.
COMMIT WORK.


*   CALL FUNCTION 'RSPC_CHAIN_START'
*     EXPORTING
*          i_chain             = Pe_CHAIN
*          i_synchronous       = 'X'.

ENDFORM.                    " F_CHAIN_START

Coger el ultimo valor de un CHAR


opción 1

data: str_aux type string.
str_aux =
data: length type i.
length = strlen( str_aux ).
if not length is initial.
= str_aux+
perdon
length = lenght - 1.
= str_aux+length(1).
endif.


opcion 2
data: str_aux type string.
str_aux = .
shift str_aux by 1 places RIGHT CIRCULAR.
if not str_aux is initial.
= str_aux(1).
endif.

borrado con patron


  DELETE DATA_PACKAGE WHERE  COMP_CODE = 'YYYY'
  AND ( MATERIAL NP 'K*'
       AND MATERIAL NP 'W*'
       AND MATERIAL NP 'H*'
       AND MATERIAL NP 'L*').

Rutina: Año Bisiesto // Fisper-->Calmonth


data: year type /BI0/OICALYEAR,
      tri  type /BI0/OICALQUART1,
      dia  type c LENGTH 2,
      mes  type /BI0/OICALMONTH2,
      yearmes  type /BI0/OICALMONTH.

INCLUDE rs_bct_hr_update_rules_general.



***********
  clear: mes, year, dia, yearmes.
  year = COMM_STRUCTURE-CALMONTH(4).
  year = year + 1.
  mes  = COMM_STRUCTURE-CALMONTH+4(2).
  dia  = COMM_STRUCTURE-CALDAY+6(2).

  if mes eq '02'.
    concatenate year mes into yearmes.
    PERFORM CALCULATE_ULTIMO
        USING yearmes
               RECORD_NO
               RECORD_ALL
               SOURCE_SYSTEM
        CHANGING RESULT
                 RETURNCODE.
 else.
  concatenate year mes dia into RESULT.
endif.




************************************************************+
************************************************************

data: year type /BI0/OICALYEAR,
      tri  type /BI0/OICALQUART1,
      dia  type c LENGTH 2,
      mes  type /BI0/OICALMONTH2.

clear: mes, year.
  year = COMM_STRUCTURE-CALMONTH(4).
  year = year + 1.
  mes  = COMM_STRUCTURE-CALMONTH+4(2).
  dia  = COMM_STRUCTURE-CALDAY+6(2).
  if dia eq '29'.
    dia = '28'.
  endif.
  concatenate year mes dia into RESULT.


*************************************************************
*************************************************************

data: mes type /BI0/OICALMONTH2,
      year type /BI0/OICALYEAR.

clear: mes, year.

year = TRAN_STRUCTURE-FISCPER(4) .
mes = TRAN_STRUCTURE-FISCPER+5(2) .

if mes > 12.
mes = 12.
endif.

if mes = 00.
mes = 01.
endif.

concatenate year mes into RESULT.

3 - Exit variables BW (Step 3): ejemplo


ELSEIF i_step = 3.
* Formula variable for Unit

  LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'P_UCONV1'.
    perform f_check_p_uconv1 using    loc_var_range
                             changing l_subrc.

    if l_subrc <> 0.
      raise entry_again.
    endif.
  ENDLOOP.
 ENDIF.

2 - Exit variables (Step_2): ejemplos para text variables


* Text variables
*====================================================================
*  Rellena el texto del año anterior
*====================================================================
      WHEN 'TFYEAR1'.
        PERFORM f_fill_tfyear1 USING loc_var_range
                               CHANGING l_s_range.
        APPEND L_S_RANGE TO E_T_RANGE.

*====================================================================
*  Rellena el periodo a partir del valor de periodo introducido
*====================================================================
      WHEN 'tP_PER3'.
        CLEAR L_S_RANGE.
        LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'ZV_PER3'.
          PERFORM f_fill_tP_PER3 USING loc_var_range
                                 CHANGING l_s_range.
          APPEND L_S_RANGE TO E_T_RANGE.
          EXIT.

        ENDLOOP.

*====================================================================
*  Rellena el periodo a partir del valor de periodo acumulado
*====================================================================
      WHEN 'tZ_PERAC'.
        CLEAR L_S_RANGE.
        LOOP AT i_t_var_range INTO loc_var_range WHERE vnam = 'Z_PERAC'.
          PERFORM f_fill_tZ_PERAC USING loc_var_range
                                 CHANGING l_s_range.
          APPEND L_S_RANGE TO E_T_RANGE.
          EXIT.

        ENDLOOP.
      WHEN OTHERS.
    ENDCASE.

1- Exit Variables BW (Step 1): ejemplos