domingo, 30 de septiembre de 2012

Cantidad de caracteres de un string

Para obtener la cantidad de caracteres de un string utilizar:

data: v_cantidad type i,
v_texto(50) type c.
v_texto = 'Hola mundo'.

v_cantidad = STRLEN( v_texto ).

SAVE_TEXT y CREATE_TEXT


Ejemplo de utilización de grabación de texto standard, si ya existe el texto utiliza la función save_text para modificarlo, si no existe utiliza la función create_text para crearlo.

FORM f_guarda_comentarios.
  DATA: u_line   TYPE STANDARD TABLE OF tline,
        u_line_aux TYPE STANDARD TABLE OF tline,
        x_line   TYPE tline,
        x_text   TYPE tp_text,
        x_header TYPE thead,
        w_name   TYPE tdobname.
  CHECK NOT t_text[] IS INITIAL.
  REFRESH u_line.
  LOOP AT t_text INTO x_text.
    CLEAR x_line.
    x_line-tdline = x_text-line.
    APPEND x_line TO u_line.
  ENDLOOP.

  CHECK NOT u_line[] IS INITIAL.
  CHECK NOT v_vbeln IS INITIAL.

* Busca si ya existe el texto
  w_name = v_vbeln.

* Rescata comentarios
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = '0002'
      language                = 'S'
      name                    = w_name
      object                  = 'VBBK'
    TABLES
      lines                   = u_line_aux
    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 NE 0.
* Crea texto
    CALL FUNCTION 'CREATE_TEXT'
      EXPORTING
        fid       = '0002'
        flanguage = sy-langu
        fname     = w_name
        fobject   = 'VBBK'
      TABLES
        flines    = u_line
      EXCEPTIONS
        no_init   = 1
        no_save   = 2
        OTHERS    = 3.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
  ELSE.
    CLEAR x_header.
    x_header-tdname = w_name.
    x_header-tdid = '0002'.
    x_header-tdspras = sy-langu.
    x_header-tdobject = 'VBBK'.
    x_header-mandt = sy-mandt.

* Guarda texto
    CALL FUNCTION 'SAVE_TEXT'
      EXPORTING
        client   = sy-mandt
        header   = x_header
        savemode_direct = 'X'
      TABLES
        lines    = u_line
      EXCEPTIONS
        id       = 1
        language = 2
        name     = 3
        object   = 4
        OTHERS   = 5.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
  ENDIF.
  CALL FUNCTION 'COMMIT_TEXT'.
ENDFORM.                    " F_GUARDA_COMENTARIOS

Obtener el nombre de los meses


Para obtener el listado de nombres de los meses utilizar la función:
CALL FUNCTION 'MONTH_NAMES_GET'
 EXPORTING
   language                    = sy-langu
* IMPORTING
*   RETURN_CODE                 =
  TABLES
    month_names                 = t_month
* EXCEPTIONS
*   MONTH_NAMES_NOT_FOUND       = 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.

en la tabla interna t_month obtendremos el listado completo de los meses en el idioma sy-langu.

Signo menos a la izquierda

Para mover el signo menos de un número a la izquierda (ya que SAP utiliza por defecto el signo a la derecha). Utilizar la función:

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
  CHANGING
    value = p_amount.
(donde p_amount es la variable que contiene el número con el signo que queremos modificar).

viernes, 25 de mayo de 2012

ABAP - Sacar el separador decimal


Para eliminar el separador decimal o el de miles.
Hay que directamente ingresar que lo remplace por espacio (realmente lo eliminara).

w_cant = '100.00'.
REPLACE ALL OCCURRENCES OF '.' IN w_cant WITH space.

despues de esta sentencia nos quedara:
w_cant = '10000'. "Todo junto y sin separador

ABAP - Sacar decimales de un número


Si queremos sacar los decimales, primero copiar los datos a una variable tipo char, luego hacer split para separar los datos por el . o la , segun corresponda.

data: w_cant(6)  type c,
      w_scrap(6) type c.

        SPLIT w_cant  AT '.' INTO w_cant w_scrap.

domingo, 13 de mayo de 2012

MMPV - Desplazar periodo MM


Con la transacción MMPV es posible desplazar el período MM.
Apareceran para ingresar los datos de:
from company: A041 (ingresar la sociedad que corrresponda)
to company: A041 (ingresar la sociedad que corrresponda)

periodo: 08 (número que se desea abrir)
fiscal year: 2011 (año del periodo)

X check and close period

x Allow neg. qties in prev. per.
x Allow neg. vals in prev. per.