martes, 31 de diciembre de 2013

BW: RSDS193. Campo LANGU ( Pos. 9 ) modif.de forma incomp.p.base datos

Error: RSDS193. Campo LANGU ( Pos. 9 ) modif.de forma incomp.p.base datos al activar la fuente de datos en un BW.
Solución: Borrar la fuente de datos en BW y en el ERP. Volver a activarla en el ERP y en el BW hacer replicar metadatos. NO uses el Bussines Content. Luego cuando creemos la transformación, asignaremos el SYST-LANGU con FÓRMULA. 

A mi así me ha funcionado, sobreentiendo que es porque no hay más de un idioma en los datos de esta fuente.

jueves, 19 de diciembre de 2013

Los post sobre consumo y creación de Web Services que me hubiese gustado hacer.

He encotrado un par de posts muy interesantes y prácticos sobre Web Services.

Para la creación de un Web Services desde un grupo de funciones: "Create a Web Service in 10 Minutes".
Y para el consumo: "Consuming a Web Service in ABAP".

Todo esto siempre se puede complicar por temas de seguridad, sistemas, firewalls... pero para programadores están muy bien.

jueves, 28 de noviembre de 2013

Error en IDOC entrada. VP199.

 Nº mensaje: VP199
No existe para el solicitante 5556688887 ningún maestro de clientes.


Solución: Buscamos en el IDOC (BD87) los interlocutores que tenga forma 335556688887. Vamos a la XD02 (o XD01 para alta) y en el cliente que toque ponemos en pestaña Datos de control
Núm.ubic.int.1: 3355566
Núm.ubic.int.2: 8888
Díg.ctrl.: 7
Volvemos a procesar desde la BD87.

miércoles, 2 de octubre de 2013

BW: Error R7087.

Error para BW: R7087 (R7 87, R7 087), Para el sistema fuente (sist.lógico) XX555 no existe un ID de sistema fuente,  el mensaje para repararlo es claro:

Asigne un ID de sistema fuente al sistema lógico XX555 . Para ello, seleccione en el menú principal de Workbench Data Warehousing Herramientas -> Asignación de sistema fuente a ID de sistema fuente .

Solución: Pero estaba torpe e iba a otros menús que no eran hasta que me ha ayudado Jordi de sistemas. Hay que hacer transsación RSA1 (Workbench Data Warehousing), y allí arriba Herramientas -> Asignación de sistema fuente a ID de sistema fuente

sábado, 28 de septiembre de 2013

BW: Caracteres raros al cargar una característica o cubo.

Error BRAIN 60: PVIÑ7 F0101 (hex.50005600490....) de característica 0WBS_ELEMT contiene caracteres n

Solución de Laura: Ir al SPRO y según en inglés o castellano:

 
Y ponemos el valor ALL_CAPITAL

jueves, 26 de septiembre de 2013

User para bloquear campo del detalle en el pedido.

Me piden bloquear la introducción del material en el pedido: que la columna no esté habilitada para la entrada de datos (VA01, VA02, VA03). Por lo que veo el campo en el dynpro es el RV45A-MABNR. Si uso userexit_field_modification de la MV45AFZZ conforme a los ejemplos de este estilo

 CASE SCREEN-NAME.
   WHEN 'RV45A-MABNR'.
     SCREEN-ACTIVE = 0.
ENDCASE.

Sólo me bloquea el material para el registro una vez he metido los datos, pero no es lo que necesitamos. Al final con la ayuda de Laura, Jesús y gentes con parecidos problemas he puesto este código:

FORM userexit_field_modification.

    DATAWA_COLS LIKE LINE OF TCTRL_U_ERF_AUFTRAG-COLS.
    LOOP AT TCTRL_U_ERF_AUFTRAG-cols INTO wa_cols.
      CHECK  WA_COLS-SCREEN-NAME 'RV45A-MABNR'.

      WA_COLS-SCREEN-input 0.

      MODIFY TCTRL_U_ERF_AUFTRAG-COLS FROM WA_COLS.

    ENDLOOP.

ENDFORM.  
Y funciona sin necesidad de Enhacements en otros sitios.

Epílogo: para saber que este campo y este Field Table hay que ir haciendo F1 y datos técnicos. Y si es vuestra primera user-exit del pedido.

miércoles, 25 de septiembre de 2013

BW: La variante de ejercicio R2 no está prevista FGV 1

Cargando datos por primera vez un un cubo de Business Warehouse (0PS_04) de 0CO_OM_NWA1, me ha dado el siguiente error:
La variante de ejercicio R2 no está prevista (FGV 001).
Después de buscar, la solución es ir al modelado de datos (RSA1). Sistemas fuentes, ponernos encima del sistema fuente que nos da el problema. Botón derecho, Adoptar parametrizaciones globales.


Seleccionamos las que nos interesen, en nuestro caso Variantes de ejercicio y Actualizar Tabla.

miércoles, 31 de julio de 2013

BW: Dump en Business Content al traer InfoObjeto.

En una nueva instalación de BW al intentar rescatar la primera característica me da el error DUMP con los siguiente datos más :

Categoría              Error de programación ABAP
Err.tmpo.ejec.         RAISE_EXCEPTION
Programa ABAP          SAPLRRSI
Application Component  BW-BEX-OT
Texto breve
    Exception condition "X_MESSAGE" raised.

Buscando por Internet, la solución que me ha funcionado ha sido usar la transacción RSRV. Desplegar Los tests en la transacción RSRV -> Test elementales (Todos) -> Datos maestros -> Ajustar rango de números y SID máximo. Arrastro al panel de la derecha, hago clic en el nodo y le indico InfoObjeto 0IOBJNM. Hay que poner este sea cual sea el InfoObjeto que nos dé error.

viernes, 5 de julio de 2013

BF00076: La entrada PT 1 4 en tabla T015Z no tiene delimitadores (;).

Al intentar imprimir una factura en portugués nos da el siguiente error al intentar convertir las cantidades en letras.
La entrada PT 1 4 en tabla T015Z no tiene delimitadores (;).

    Nº mensaje: BF00076

Diagnóstico

    Se ha producido una cancelación del módulo de funciones SPELL_AMOUNT: Se
    ha detectado que en una entrada en la tabla T015Z no se ha introducido
    el delimitador (delimiter ';'). Al cerrar la cifra con el delimitador se
    pueden también incluir espacios en blanco delante del mismo para separar
    la cifra de otras que eventualmente podrían venir detrás y que de otro
    modo no podrían ser reconocidas.

Procedimiento

    Corrija la entrada en tabla correspondiente.

Solución:  Ves a la transacción OBA9, y busca por idioma PT (portugués) o bien no tienes ninguna entrada o tienes la entrada 
PT 1 4 QUATORZE

Si no tienes ninguna entrada introduce 
PT 1 4 QUATORZE ;
Y si la tienes la corrigues para que acabe en ' ;', es decir espcaio y punto y coma.

jueves, 13 de junio de 2013

¿Dónde está el campo PLIKZ en el extractor 1_CO_PA****?

Necesitaba el extractor de COPA (1_CO_PA*) para un cubo, el que extrae la información de las tablas CE1*, CE2*, CE3* y CE4*, finalmente he encontrado como hacerlo con la KEB0. Pero al ir a la RSA6 para añadir los campos para filtrar o la RSA3 para ver los datos no encontraba el campo PLIKZ Indicador plan/real  finalmente me dicen que se transforma en WRTTP Tipo valor para informes.

Para quien necesite crear el extractor los 2 últimos links son buenas guías.

viernes, 24 de mayo de 2013

Error RSEC231.

He transportado unos roles. Al ejecutar la transacción RSECADMIN, pestaña de Análisis, botón Ejecutar como..., y poner otro usuario y ejecutar me ha dado el error RSEC231 "Sin autorización suficiente".

He visto que hablaban de notas, pero en mi caso he entrado en lo perfiles de los roles que había asignado al usuario que quería probar y los he vuelto a generar. Al transportar desde conexión de transporte  no vienen los perfiles, si transportamos desde el mantenimiento de roles no hace falta volver a generar, en principio.

viernes, 8 de marzo de 2013

Texto de mensaje.

Para tener el texto de un mensaje de forma entendible 'MESSAGE_TEXT_BUILD'. En mi caso tengo una tabla p_mensajes_out  TYPE   zws_mensajes_t con los datos necesarios.

  DATA : p_mensajes_out TYPE  zws_mensajes_t.

  
CONCATENATE sy-datum sy-uzeit INTO p_idpersona .
*
  
DATAwa_mensajes_out TYPE zws_mensajes_l.
*
  wa_mensajes_out
-msgty 'I'.
*  WA_MENSAJES_OUT-TEXT = 'xxx'.
  wa_mensajes_out
-arbgb 'VF'.
  wa_mensajes_out
-txtnr '006'.
  wa_mensajes_out
-msgv1 'SRG'.
*wa_mensajes_out-MSGV2
*wa_mensajes_out-MSGV3
*wa_mensajes_out-MSGV4
*
  
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
    
EXPORTING
      msgid               
wa_mensajes_out-arbgb
      msgnr               
wa_mensajes_out-txtnr
      msgv1               
wa_mensajes_out-msgv1
      msgv2               
wa_mensajes_out-msgv1
      msgv3               
wa_mensajes_out-msgv1
      msgv4               
wa_mensajes_out-msgv1
    
IMPORTING
      message_text_output 
wa_mensajes_out-text.
*
  
APPEND wa_mensajes_out TO p_mensajes_out.


lunes, 21 de enero de 2013

Concurrencia de usuarios en programa o transacción.

Objetivo: Queremos evitar que haya más de un usuario en el mismo programa.
Solución: Hemos creado, siguiendo los consejos de Jesús, 2 subrutinas. Con la de BLOQUEO bloquearíamos al ejecutarla antes de la selección de datos y con la de DESBLOQUEO dejaríamos que otros usuarios accediesen a la misma. Lo controlo por programa y si no hemos desbloqueado y salimos de él "a saco Paco"  también se desbloquearía.
Subrutinas:
&---------------------------------------------------------------------*
*&      Form  BLOQUEO
*&---------------------------------------------------------------------*
*      
* Bloqueamos programa para evitar concurrencia de usuarios en programa.
* Se recomienda usar antes de buscar datos.
* Se desbloquearà al salir o forzar con PERFORM desbloqueo.
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM bloqueo.
  DATAw_funcname LIKE tfdir-funcname.
  w_funcname sy-cprog.
*
  CALL FUNCTION 'ENQUEUE_ESFUNCTION'
    EXPORTING
*     MODE_TFDIR     = 'E'
      funcname       w_funcname
*     X_FUNCNAME     = ' '
*     _SCOPE         = '2'
*     _WAIT          = ' '
*     _COLLECT       = ' '
    EXCEPTIONS
      foreign_lock   1
      system_failure 2
      OTHERS         3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
    MESSAGE e001(zgen)."Programa bloqueado por otro usuario. Inténtelo más tarde.
  ELSE.
    MESSAGE i002(zgen)"Ha bloqueado el programa para otros usuarios. Téngalo en cuenta.
  ENDIF.
ENDFORM                   " BLOQUEO

*&---------------------------------------------------------------------*
*&      Form  desbloqueo
*&---------------------------------------------------------------------*
*  
* Desbloqueamos el programa que ha sido bloqueado previamente con bloqueo.
*----------------------------------------------------------------------*
FORM desbloqueo.
*
  DATAw_funcname LIKE tfdir-funcname.
  w_funcname sy-cprog.
*
  CALL FUNCTION 'DEQUEUE_ESFUNCTION'
    EXPORTING
*     MODE_TFDIR = 'E'
      funcname   w_funcname
*     X_FUNCNAME = ' '
*     _SCOPE     = '3'
*     _SYNCHRON  = ' '
*     _COLLECT   = ' '
    .
  IF sy-subrc 0.
    MESSAGE i003(zgen)"Programa desbloqueado. Otros usuarios pueden usarlo.
  ENDIF.
*
ENDFORM.                    "desbloqueo

miércoles, 16 de enero de 2013

Pasar datos del pedido a factura SD. Centro de coste.

Después de poner informar el centro de coste en el pedido queremos que pase a la factura. Vamos al INCLUDE RV60AFZC del grupo de funciones V60A vamos a la subrutina y editamos como con el include mv45afzz la subrutina

  • USEREXIT_FILL_VBRK_VBRP

En nuestro caso queremos rescatar el centro de coste de la posición:
VBRP-KOSTL VBAP-KOSTL.

Una vez más gracias a Laura

lunes, 14 de enero de 2013

USER. Centro de coste en Pedido SD.

Queremos pode informar el Centro de coste en el pedido SD (VA01, VA02). Para ello vamos al include MV45AFZB del programa y aanálogamente a como lo haríamos con la mv45afzz en las siguientes subrutinas:

  • USEREXIT_COBL_SEND_ITEM

Con este código podremos rellenar el campo.
    INT_COBLF-FDNAM 'KOSTL'.
    INT_COBLF-OUTPUT '1'.
    IF T180-TRTYP NE CHARA AND
    VBAP-KZVBR NE KZVBR_P.
      INT_COBLF-INPUT    '1'.
    ENDIF.
    INT_COBLF-ACTIVE '1'.
    APPEND INT_COBLF.

  • USEREXIT_MOVE_FIELD_TO_COBL

 CH_COBL-KOSTL US_VBAP-KOSTL.

  • USEREXIT_COBL_RECEIVE_VBAP

 VBAP-KOSTL COBL-KOSTL.

  • USEREXIT_MOVE_FIELD_TO_VBAPKOM.

 VBAP-KOSTL US_VBAPKOM-KOSTL.

Hacer notar que en la CH_COBL son los datos de pantalla para centro de coste, lo digo por si queremos rellenarlo para que se visualice directamente. 

jueves, 10 de enero de 2013

USER de factura SD a FI. Anotación.

User para pasar información de facturas SD a FI peleandome con Elena, me refiero junto a no contra.

Con EXIT_SAPLV60B_002 (SDVFX002 User exit for A/R line in transfer to accounting / User Exit AC Interface (Customer Line) ) podemos modificar en la posición del deudor. Include ZXVVFU02.

Con EXIT_SAPLV60B_004 (SDVFX004 User exit G/L line in transfer to accounting / User Exit AC Interface (GL Account Item)) podemos modificar en las posiciones de cuentas de mayor (claves de contabilización 40 y 50).

Ambas están el grupo de funciones XVVF (User Exits Billing Document / User-exits p. factura).

viernes, 4 de enero de 2013

Fecha de Vencimiento (SD) - SD_PRINT_TERMS_OF_PAYMENT

Para obtener la fechas de vencimiento de las facturas de Ventas se puede utilizar la Función SD_PRINT_TERMS_OF_PAYMENT. Con tan solo pasar la fecha de documento(BLDAT)  (habitualmente es la de factura), el idioma y la condición de pago.

      DATAl_baseline_date TYPE  vbrk-fkdat,

      lt_top_text TYPE STANDARD TABLE  OF vtopis,

      ls_top_text TYPE vtopis.

      CALL FUNCTION 'SD_PRINT_TERMS_OF_PAYMENT'
        EXPORTING
         bldat                              ls_vbrk-fkdat
*   BUDAT                              = 00000000
*   CPUDT                              = 00000000
         language                           sy-langu
          terms_of_payment                   ls_vbrk-zterm
*   COUNTRY                            = ' '
*   HOLDBACK                           = ' '
*   TOP_HOLDBACK_INFO                  = TOP_HOLDBACK_INFO
*   DOCUMENT_CURRENCY                  = ' '
* IMPORTING
*   BASELINE_DATE                      = BASELINE_DATE
*   PAYMENT_SPLIT                      = PAYMENT_SPLIT
*   ZFBDT                              = ZFBDT
        TABLES
          top_text                           top_text
       EXCEPTIONS
         terms_of_payment_not_in_t052       1
         OTHERS                             2
                .
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.