domingo, 30 de septiembre de 2012

Bloquear una tabla completa


Para bloquear todos los registros de una tabla utilizar:

CALL FUNCTION'ENQUEUE_E_TABLE'
EXPORTING
  MODE_RSTABLE ='E'
  TABNAME ='ZNOMBRETABLA'
* VARKEY =
* X_TABNAME = ' '
* X_VARKEY = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
 EXCEPTIONS
   FOREIGN_LOCK = 1
   SYSTEM_FAILURE = 2
   OTHERS = 3
          .
IF sy-subrc = 0.
 WRITE: 'Lock table successfully!'.
 else.
  write: 'Failed'.
ENDIF.

Bloquear un registro de tabla VBAK


* Bloquea un registro de tabla VBAK
  CALL FUNCTION 'ENQUEUE_EVVBAKE'
    EXPORTING
      mode_vbak      = 'E'
      mandt          = sy-mandt
      vbeln          = p_vbeln
      x_vbeln        = ' '
      _scope         = '2'
      _wait          = ' '
      _collect       = ' '
    EXCEPTIONS
      foreign_lock   = 1
      system_failure = 2
      OTHERS         = 3.


* Desbloquea un registro de tabla VBAK
    CALL FUNCTION 'DEQUEUE_EVVBAKE'
      EXPORTING
        mode_vbak = 'E'
        mandt     = sy-mandt
        vbeln     = p_vbeln
        x_vbeln   = ' '
        _scope    = '3'
        _synchron = ' '
        _collect  = ' '.

Llamar a función en background


Para llamar a función en background.

data: w_tid  TYPE arfctid,
      w_fnum TYPE qretstate-qrfnum.


      CALL FUNCTION 'ZNOMBREFUNCION'
        IN BACKGROUND TASK
        EXPORTING
          i_incentivo = w_incentivo
          i_inc_act   = p_act1
          i_archivo   = p_file
        TABLES
          t_vbak      = t_vbak_back
          t_vbak_agru = t_vbak_agru_back
          t_liq       = u_liq_back.

      CALL FUNCTION 'START_OF_BACKGROUNDTASK'
        EXPORTING
          startdate = sy-datum
          starttime = sy-uzeit.

      CALL FUNCTION 'ID_OF_BACKGROUNDTASK'
        IMPORTING
          tid  = w_tid
          fnum = w_fnum.
      IF sy-subrc EQ 0.
        COMMIT WORK.
      ENDIF.

Y en los atributos de la función, Módulo de acceso remoto y inicio inmediato

Mensajes de error varios en una pantalla


data:
e_log        TYPE bapiret2,
t_log        TYPE bapiret2tab,

  CLEAR e_log.
  e_log-type    = 'S'.
  e_log-id      = 'ZZZZZ'.
  e_log-number  = 437.
  APPEND e_log TO t_log.

  CALL FUNCTION 'SUSR_DISPLAY_LOG'
    EXPORTING
      display_in_popup = abap_true
      log_title        = text-002
    TABLES
      it_log_bapiret2  = t_log[]
    EXCEPTIONS
      parameter_error  = 1
      OTHERS           = 2.

  IF NOT sy-subrc IS INITIAL.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

2 checkbox en una misma línea


SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN: COMMENT 23(22) text-062, POSITION 20.
PARAMETERS: v_cm_mod AS CHECKBOX.

SELECTION-SCREEN: COMMENT 53(24) text-063, POSITION 50.
PARAMETERS: v_cm_sld AS CHECKBOX.
SELECTION-SCREEN END OF LINE.

Caja de texto en dynpro


Crear custom control en dynpro

 TYPES: BEGIN OF tp_text,
          line TYPE c LENGTH 120,
        END OF tp_text.


data:
v_container_104_1  TYPE REF TO cl_gui_custom_container,

v_ccontrol_104_1   TYPE scrfname VALUE 'CCCOMENTARIOS',
v_texto            TYPE REF TO cl_gui_textedit,
t_text             TYPE tp_ttext,
tp_ttext           TYPE STANDARD TABLE OF tp_text.

EN PAI:
FORM f_crea_contenedor_texto .

  DATA lw_line_length TYPE i VALUE 120.

* Crea contenedor y lo asocia con la DYNPRO
  CREATE OBJECT v_container_104_1
    EXPORTING
      container_name              = v_ccontrol_104_1
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.

  IF NOT sy-subrc IS INITIAL.
    MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

*$ Crea  el Objeto EDITOR
  CREATE OBJECT v_texto
    EXPORTING
      wordwrap_mode          = cl_gui_textedit=>wordwrap_at_fixed_position
      wordwrap_position      = lw_line_length
      parent                 = v_container_104_1
    EXCEPTIONS
      error_cntl_create      = 1
      error_cntl_init        = 2
      error_cntl_link        = 3
      error_dp_create        = 4
      gui_type_not_supported = 5
      OTHERS                 = 6.

  IF NOT sy-subrc IS INITIAL.
    MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF v_actvt = '03' AND v_edit IS INITIAL.
    CALL METHOD v_texto->set_readonly_mode
      EXPORTING
        readonly_mode          = '1'
      EXCEPTIONS
        error_cntl_call_method = 1
        invalid_parameter      = 2.
  ELSE.
    CALL METHOD v_texto->set_readonly_mode
      EXPORTING
        readonly_mode          = '0'
      EXCEPTIONS
        error_cntl_call_method = 1
        invalid_parameter      = 2.
  ENDIF.

  CALL METHOD v_texto->set_toolbar_mode
    EXPORTING
      toolbar_mode           = cl_gui_textedit=>false
    EXCEPTIONS
      error_cntl_call_method = 1
      invalid_parameter      = 2
      OTHERS                 = 3.

  CALL METHOD v_texto->set_statusbar_mode
    EXPORTING
      statusbar_mode         = cl_gui_textedit=>false
    EXCEPTIONS
      error_cntl_call_method = 1
      invalid_parameter      = 2
      OTHERS                 = 3.


ENDFORM.                    " f_crea_contenedor_texto


EN PBO: fuera de todo
MODULE rescata_comentarios INPUT.
  CHECK sy-ucomm NE 'YPR9_NO'.                            
  IF NOT v_texto IS INITIAL.                              
    PERFORM f_rescata_dd_dynpro.
  ENDIF.                                                
ENDMODULE.                 " rescata_comentarios


FORM f_rescata_dd_dynpro .

  DATA: u_text TYPE tp_ttext,
        w_true TYPE i.

  CLEAR u_text[].
  w_true = 1.


  CALL METHOD v_texto->get_text_as_r3table
    IMPORTING
      table                  = u_text
    EXCEPTIONS
      error_dp               = 1
      error_cntl_call_method = 2
      error_dp_create        = 3
      potential_data_loss    = 4
      OTHERS                 = 5.
  .
  IF NOT sy-subrc IS INITIAL.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  t_text[] = u_text[].

ENDFORM.                    " f_rescata_dd_dynpro

-----
FORM f_recupera_comentarios .

  TYPES: tp_lines TYPE STANDARD TABLE OF tline.


  DATA: w_name  TYPE tdobname,
        u_line        TYPE tp_lines,
        x_line        TYPE tline,
        x_line_txt    TYPE tp_text.

  w_name = v_vbeln.

* Rescata comentarios
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = c_0002
      language                = c_s
      name                    = w_name
      object                  = c_vbbk
    TABLES
      lines                   = u_line
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.

  IF sy-subrc IS INITIAL.

    LOOP AT u_line INTO x_line.
      x_line_txt-line      = x_line-tdline.
      APPEND x_line_txt TO t_text.
      CLEAR  x_line_txt.
    ENDLOOP.

  ENDIF.

* Mueve el texto al Objeto Editor
  IF NOT t_text[] IS INITIAL.

    IF v_vehiculo_rasa = abap_true.

      CALL METHOD v_texto->set_enable
        EXPORTING
          enable            = abap_false
        EXCEPTIONS
          cntl_error        = 1
          cntl_system_error = 2
          OTHERS            = 3.

      IF NOT sy-subrc IS INITIAL.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.


    ENDIF.

    CALL METHOD v_texto->set_text_as_stream
      EXPORTING
        text            = t_text
      EXCEPTIONS
        error_dp        = 1
        error_dp_create = 2
        OTHERS          = 3.

    IF NOT sy-subrc IS INITIAL.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
      sy-msgv3 sy-msgv4.
    ENDIF.

  ENDIF.

ENDFORM.                    " f_recupera_comentarios

Día laboral próximo


  CALL FUNCTION 'BKK_GET_NEXT_WORKDAY'
    EXPORTING
      i_date         = p_fecha
      i_calendar1    = 'SI'
    IMPORTING
      e_workday      = p_vto
    EXCEPTIONS
      calendar_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.