SAP ABAP FUNCTIONS POPUP GET VALUES USER BUTTONS

From SapWiki
REPORT yrsspo450 MESSAGE-ID s4 LINE-SIZE 132.
*-----------------------------------------------------------------------
* Beispielprogramm für den Einsatz und den Aufruf des Funktionsbausteins
*
*              POPUP_GET_VALUES_USER_BUTTONS
*
* Für den Customizing-Transport soll über ein Dialogfenster eine
* Korrekturnummer erfragt werden. Aus dem Dialogfenster heraus soll
* es möglich sein, die Korrekturnummer zu suchen und eine neue
* Korrektur anzulegen. An die Korrektur werden bestimmte Anforderungen
* gestellt: es muß eine nicht freigegebene Korrektur sein, die dem
* Anwender selbst gehört und die nicht gesperrt ist. Die F4-Hilfe
* soll nur Korrekturen anbieten, die diesen Bedingungen genügen.
* Der Funktionsbaustein POPUP_GET_VALUES_USER_BUTTONS wird dabei
* verwendet, um die Oberfläche zu realisieren. Die Prüfungen sowie
* die Absprünge zum Suchen und Anlegen der Korrektur sowie die
* einschränkende F4-Hilfe müssen selbst programmiert werden.
*-----------------------------------------------------------------------


DATA: subrc   LIKE sy-subrc,
      corr_nr LIKE e070-trkorr.

INCLUDE <icon>.

DATA ld_a(1) TYPE c.
DATA gs_sval LIKE sval.
DATA gt_sval TYPE TABLE OF sval.

* Routine zum Erfragen der Korrekturnummer aufrufen
PERFORM get_monto_pago CHANGING subrc.
IF subrc = 0.
* action
ELSE.
*    Anwender hat Aktion abgebrochen
  WRITE: / 'Cancelado por usuario'.
ENDIF.

*&---------------------------------------------------------------------*
*&      Form  get_monto_pago
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->SUBRC        text
*      -->CORR_NUMBER  text
*----------------------------------------------------------------------*
FORM get_monto_pago CHANGING subrc.
*-----------------------------------------------------------------------
* Korrekturnummer erfragen
* Schnittstelle:
*      CORR_NUMBER     Korrekturnummer
*      SUBRC = 0       Korrekturnummer ist richtig gefüllt.
*      SUBRC <> 0      Funktion vom Anwender abgebrochen (F12)
*-----------------------------------------------------------------------
*     Tabelle mit Feldangaben für das Dialogfenster
  DATA: BEGIN OF fields OCCURS 1.
          INCLUDE STRUCTURE sval.
  DATA: END OF fields,
*     Rückgabewert
        returncode(1)       TYPE c,
*     Titel des Dialogfensters
        popup_title(30)     TYPE c,
*     Text der Standardrucktaste
        ok_pushbuttontext    LIKE svalbutton-buttontext,
        icon_ok_push         LIKE icon-name,
        quickinfo_ok_push    LIKE smp_dyntxt-text,
*     Text zur ersten zusätzlichen Drucktaste
        first_pushbutton     LIKE svalbutton-buttontext,
        icon_button_1        LIKE icon-name,
        quickinfo_button_1   LIKE smp_dyntxt-text,
*     Text zur zweiten zusätzlichen Drucktaste
        second_pushbutton    LIKE svalbutton-buttontext,
        icon_button_2        LIKE icon-name,
        quickinfo_button_2   LIKE smp_dyntxt-text.

* Überschrift des Dialogfensters festlegen
  popup_title       = 'Pago en Efectivo(en Pesos)'.

  CLEAR gs_sval.
  gs_sval-tabname = 'VBRK'.
  gs_sval-fieldname = 'NETWR'.
  gs_sval-field_attr = '03'.
  gs_sval-FIELDTEXT  = 'Monto Factura'.
  gs_sval-field_obl = 'X'.
  gs_sval-value = 100.
  APPEND gs_sval TO gt_sval.

  CLEAR gs_sval.
  gs_sval-tabname = 'VBRK'.
  gs_sval-fieldname = 'WAERK'.
  gs_sval-field_attr = '04'.
  gs_sval-value = 'CLP'.
  APPEND gs_sval TO gt_sval.

  CLEAR gs_sval.
  gs_sval-tabname = 'BKPF'.
  gs_sval-fieldname = 'WAERS'.
  gs_sval-field_attr = '04'.
  gs_sval-value = 'CLP'.
  APPEND gs_sval TO gt_sval.

  CLEAR gs_sval.
  gs_sval-tabname = 'VBRK'.
  gs_sval-fieldname = 'KUNRG'.
  gs_sval-field_attr = '03'.
  gs_sval-value = '1'.
  APPEND gs_sval TO gt_sval.

  CLEAR gs_sval.
  gs_sval-tabname = 'KNA1'.
  gs_sval-fieldname = 'NAME1'.
  gs_sval-field_attr = '03'.
  gs_sval-value = 'Pepe'.
  APPEND gs_sval TO gt_sval.

  CLEAR gs_sval.
  gs_sval-tabname = 'BSEG'.
  gs_sval-fieldname = 'WRBTR'.
  gs_sval-FIELDTEXT  = 'Monto del Pago'.
  gs_sval-field_obl = 'X'.
  gs_sval-value = 100.
  APPEND gs_sval TO gt_sval.

*  ok_pushbuttontext = 'Weiter'(025).
  icon_ok_push       = icon_okay.
*  QUICKINFO_OK_PUSH  = 'Weiter'(025).

  first_pushbutton   = 'Ejecutar'.
  icon_button_1      = icon_execute_object.
  quickinfo_button_1 = 'Ejecutar'.


  CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS'
       EXPORTING popup_title       = popup_title
                 programname       = 'YRSSPO450'
                 formname          = 'HANDLE_CODE'
*                 F4_PROGRAMNAME    = 'RSSPO450'
*                 F4_FORMNAME       = 'CORRNR_VALUE_HELP'
                 ok_pushbuttontext = ok_pushbuttontext
                 icon_ok_push      = icon_ok_push
                 quickinfo_ok_push = quickinfo_ok_push
                 first_pushbutton  = first_pushbutton
                 icon_button_1     = icon_button_1
                 quickinfo_button_1 = quickinfo_button_1
                 second_pushbutton = second_pushbutton
                 icon_button_2     = icon_button_2
                 quickinfo_button_2 = quickinfo_button_2
       IMPORTING returncode      = returncode
       TABLES    fields          = gt_sval.

  IF returncode EQ 'A'.
*    Anwender hat die Aktion abgebrochen
    subrc   = '4'.
*    CLEAR corr_number.
  ELSE.
*    Anwender hat eine gültige Korrekturnummer angegeben
    subrc   = '0'.
    READ TABLE gt_sval into gs_sval INDEX 6.

  ENDIF.
ENDFORM.                    "get_monto_pago

*&---------------------------------------------------------------------*
*&      Form  HANDLE_CODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELDS     text
*      -->CODE       text
*      -->ERROR      text
*      -->SHOW_POPUP text
*----------------------------------------------------------------------*
FORM handle_code TABLES   fields STRUCTURE sval
                 USING    code
                 CHANGING error  STRUCTURE svale show_popup.
      DATA ld_m1 LIKE vbrk-netwr.
      DATA ld_m2 LIKE vbrk-netwr.
* Routine zur Behandlung der OkCodes des Dialogfensters
  CASE code.
    WHEN 'FURT'.
      CLEAR error.
      show_popup = 'X'.

      READ TABLE fields INDEX 1.
      MOVE  fields-value TO ld_m1.

      READ TABLE  fields INDEX 6.
      MOVE  fields-value TO ld_m2.
      IF ld_m2 = 0.
        CLEAR error.
        error-errortab   = 'BSEG'.
        error-errorfield = 'WRBTR'.
        error-msgty      = 'E'.
        error-msgid      = 'V1'.
        error-msgno      = '899'.
        error-msgv1      = 'Monto Pago debe ser mayor que cero'.
        return.
      ENDIF.

      IF ld_m2 > ld_m1.
        CLEAR error.
        error-errortab   = 'BSEG'.
        error-errorfield = 'WRBTR'.
        error-msgty      = 'E'.
        error-msgid      = 'V1'.
        error-msgno      = '899'.
        error-msgv1      = 'Monto Pago mayor Monto Factura'.
        return.
      ENDIF.

    WHEN 'COD1'.
      READ TABLE fields INDEX 1.
      MOVE  fields-value TO ld_m1.

      READ TABLE  fields INDEX 6.
      MOVE  fields-value TO ld_m2.

      clear show_popup.

      IF ld_m2 = 0.
        CLEAR error.
        error-errortab   = 'BSEG'.
        error-errorfield = 'WRBTR'.
        error-msgty      = 'E'.
        error-msgid      = 'V1'.
        error-msgno      = '899'.
        error-msgv1      = 'Monto Pago debe ser mayor que cero'.
        show_popup = 'X'.
        return.
      ENDIF.

      IF ld_m2 > ld_m1.
        CLEAR error.
        error-errortab   = 'BSEG'.
        error-errorfield = 'WRBTR'.
        error-msgty      = 'E'.
        error-msgid      = 'V1'.
        error-msgno      = '899'.
        error-msgv1      = 'Monto Pago mayor Monto Factura'.
        show_popup = 'X'.
      else.
        show_popup = ' '.
      ENDIF.
  ENDCASE.
ENDFORM.                    "HANDLE_CODE

*Text elements
*----------------------------------------------------------
* 037 Crear orden
* 040 Crear corrección
* 045 Txt.corrección
* 005 Nº corrección
* 010 Usuario ha cancelado diálogo
* 015 Indicar Nº corrección
* 020 Nº corrección
* 025 Cont.
* 030 Buscar
* 035 Crear
* 036 Buscar por órdenes


*Selection texts
*----------------------------------------------------------
* EXAMPLE1         Ejemplo 1
* EXAMPLE2         Ejemplo 2
* EXAMPLE3         Ejemplo 3
* EXAMPLE4         Ejemplo 4