giovedì 26 gennaio 2017

Copiare le varianti

*----------------------------------------------------------------------*
* DECLARATIONS                                                         *
*----------------------------------------------------------------------*
TABLES: ltdx.

DATA: gt_ltdx  LIKE ltdx  OCCURS 0,
      gt_ltdxt LIKE ltdxt OCCURS 0,
      gs_ltdx  LIKE LINE OF gt_ltdx,
      gs_ltdxt LIKE LINE OF gt_ltdxt,
      gt_vari  LIKE vari  OCCURS 0,
      gt_varit LIKE varit OCCURS 0,
      gt_varid LIKE varid OCCURS 0,
      gv_msg   TYPE string.

*----------------------------------------------------------------------*
* LAYOUT                                                               *
*----------------------------------------------------------------------*
PARAMETERS: pa_repid LIKE ltdx-report OBLIGATORY,
            pa_rfc   LIKE rfcdes-rfcdest.
SELECTION-SCREEN SKIP.
PARAMETERS: rb_vari RADIOBUTTON GROUP rbg1,
            pa_vari LIKE vari-variant.
SELECTION-SCREEN SKIP.
PARAMETERS: rb_ltdx  RADIOBUTTON GROUP rbg1,
            pa_lvari LIKE ltdx-variant,
            pa_user  LIKE ltdx-username.
SELECT-OPTIONS so_user FOR ltdx-username.

*----------------------------------------------------------------------*
* EVENTS                                                               *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
  IF so_user[] IS NOT INITIAL AND
     pa_user IS INITIAL.
    MESSAGE 'Scegliere un utente da cui copiare' TYPE 'E'.
  ENDIF.

*----------------------------------------------------------------------*
* PROGRAM BODY                                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  IF rb_ltdx = 'X'.

    CALL FUNCTION 'ZRFC_READ_LTDX'
      DESTINATION pa_rfc
      EXPORTING
        i_repid    = pa_repid
        i_username = pa_user
        i_variant  = pa_lvari
      TABLES
        t_ltdx     = gt_ltdx
        t_ltdxt    = gt_ltdxt.

    IF gt_ltdx[] IS NOT INITIAL.
      LOOP AT so_user.
        LOOP AT gt_ltdx INTO gs_ltdx WHERE username = pa_user.
          gs_ltdx-username = so_user-low.
          APPEND gs_ltdx TO gt_ltdx.
        ENDLOOP.
        LOOP AT gt_ltdxt INTO gs_ltdxt WHERE username = pa_user.
          gs_ltdxt-username = so_user-low.
          APPEND gs_ltdxt TO gt_ltdxt.
        ENDLOOP.
      ENDLOOP.
      MODIFY ltdx FROM TABLE gt_ltdx.
      MODIFY ltdxt FROM TABLE gt_ltdxt.
      gv_msg = 'Copia completata'.
    ELSE.
      gv_msg = 'Nessun dato da copiare'.
    ENDIF.

  ELSE.

    CALL FUNCTION 'ZRFC_READ_VARI'
      DESTINATION pa_rfc
      EXPORTING
        i_repid   = pa_repid
        i_variant = pa_vari
      TABLES
        t_vari    = gt_vari
        t_varit   = gt_varit
        t_varid   = gt_varid.

    IF gt_vari[] IS NOT INITIAL.
      MODIFY vari FROM TABLE gt_vari.
      MODIFY varit FROM TABLE gt_varit.
      MODIFY varid FROM TABLE gt_varid.
      gv_msg = 'Copia completata'.
    ELSE.
      gv_msg = 'Nessun dato da copiare'.
    ENDIF.

  ENDIF.

END-OF-SELECTION.
  MESSAGE gv_msg TYPE 'I'.



FUNCTION zrfc_read_ltdx.
*"----------------------------------------------------------------------
*"*"Interfaccia locale:
*"  IMPORTING
*"     VALUE(I_REPID) TYPE  REPID
*"     VALUE(I_USERNAME) TYPE  SLIS_USER
*"     VALUE(I_VARIANT) TYPE  SLIS_VARI
*"  TABLES
*"      T_LTDX STRUCTURE  LTDX
*"      T_LTDXT STRUCTURE  LTDXT
*"----------------------------------------------------------------------

  RANGES: lr_user FOR ltdx-username,
          lr_vari FOR ltdx-variant.

  IF i_username IS NOT INITIAL.
    lr_user-sign   = 'I'.
    lr_user-option = 'EQ'.
    lr_user-low = i_username.
    APPEND lr_user.
  ENDIF.
  IF i_variant IS NOT INITIAL.
    lr_vari-sign   = 'I'.
    lr_vari-option = 'EQ'.
    lr_vari-low = i_variant.
    APPEND lr_vari.
  ENDIF.

  SELECT *
    FROM ltdx
    INTO TABLE t_ltdx
   WHERE report   = i_repid
     AND username IN lr_user
     AND variant  IN lr_vari.

  SELECT *
    FROM ltdxt
    INTO TABLE t_ltdxt
   WHERE report   = i_repid
     AND username IN lr_user
     AND variant  IN lr_vari.

ENDFUNCTION.



FUNCTION ZRFC_READ_VARI.
*"----------------------------------------------------------------------
*"*"Interfaccia locale:
*"  IMPORTING
*"     VALUE(I_REPID) TYPE  VARI_REPRT
*"     VALUE(I_VARIANT) TYPE  VARIANT
*"  TABLES
*"      T_VARI STRUCTURE  VARI
*"      T_VARIT STRUCTURE  VARIT
*"      T_VARID STRUCTURE  VARID
*"----------------------------------------------------------------------

  RANGES: lr_vari FOR vari-variant.

  IF i_variant IS NOT INITIAL.
    lr_vari-sign   = 'I'.
    lr_vari-option = 'EQ'.
    lr_vari-low = i_variant.
    APPEND lr_vari.
  ENDIF.

  SELECT *
    FROM vari
    INTO TABLE t_vari
   WHERE report  = i_repid
     AND variant IN lr_vari.

  SELECT *
    FROM varit
    INTO TABLE t_varit
   WHERE report  = i_repid
     AND variant IN lr_vari.

  SELECT *
    FROM varid
    INTO TABLE t_varid
   WHERE report  = i_repid
     AND variant IN lr_vari.

ENDFUNCTION.

Nessun commento: