Lista de materiales de un material en particular

Dejo esta lógica para obtener la lista de materiales de un material. Se que hay funciones para lograr lo mismo porque las he usado pero hoy en día no las tengo a mano.

* Funcion para traer el num de material en el formato del sistema
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
        EXPORTING
          input  = wa_archivo-material
        IMPORTING
          output = l_material.

SELECT SINGLE stlal stlnr
       INTO (wa_stlal, wa_stlnr)
       FROM mast
       WHERE matnr EQ l_material.

SELECT stlkn
       FROM stas
       INTO CORRESPONDING FIELDS OF TABLE it_stas
       WHERE stlnr EQ wa_stlnr AND
                   stlal EQ wa_stlal.
IF it_stas[] IS NOT INITIAL.
   SELECT idnrk posnr
        FROM stpo
        INTO CORRESPONDING FIELDS OF TABLE it_stpo
        FOR ALL ENTRIES IN it_stas
        WHERE stlnr EQ wa_stlnr AND
                   stlkn EQ it_stas-stlkn.
ENDIF.

En la tabla it_stpo el campo IDNRK es el número de material.

Radio Buttons dinámicos y ocultar/mostrar grupos de parámetros de selección

Una vez necesite hacer una pantalla de selección dinámica, es decir que si elegía un radio button debía mostrar X cantidad de parámetros y ocultar otros, y viceversa sin la necesidad de que tengamos que apretar un ENTER para que se dispare el evento AT-SELECTION-SCREEN.

El siguiente código lo arme como modo ejemplo para que se den cuenta de como usarlo

 

REPORT ZRADIO_BUTTONS.
PARAMETERS: p_1(10) MODIF ID A,
                       p_2(2)   MODIF ID B,
                       p_3(5).
PARAMETERS: p_A RADIOBUTTON GROUP rad1 USER-COMMAND ACT DEFAULT 'X',
                       p_B RADIOBUTTON GROUP rad1.

AT SELECTION-SCREEN OUTPUT.
LOOP AT screen.
  IF p_A = 'X'.
     IF screen-group1 = 'B'.
     screen-active = 0.
     ENDIF.
  ELSEIF p_B = 'X'.
    IF screen-group1 = 'A'.
    screen-active = 0.
    ENDIF.
  ENDIF.

  MODIFY screen.
ENDLOOP.

 

El MODIF ID lo que hace es darle un identificador a cada parámetro por lo cual no es necesario ocultar cada uno de los parámetros, sino que es más práctico ocultar directamente todos los elementos de un grupo.

La adición USER-COMMAND es la que permite que la selección sea dinámica y que no haya que apretar un enter para ejecutar un PAI.

NOTA: Al usar este método es muy molesto tener parámetros de selección OBLIGATORIOS, porque de no estar completos nos va a saltar la validación y los radio button no funcionarán de la forma deseada. Así que de usar Radio buttons dinámicos la validaciones las deberemos hacer manualmente nosotros mismos.

Saltear falta de autorización para una transacción

Existe una función llamada: RS_HDSYS_CALL_TC_VARIANT

Ir a la SE37, ejecutar la función, en el parámetro TCODE ponemos la transacción deseada y le sacamos la X al parámetro AUTHORITY-CHECK.

 

NOTA: No es infalible, puede ser que igualmente no podamos usarlo y ojo porque queda en log el acceso.

Programa para la regeneración de fórmulas

Luego de Crear alguna formula o de algún cambio a nivel de activación. Necesitaremos correr el siguiente reporte

RV80HGEN

Este regenera las fórmulas, al no hacer esto seguramente nos aparezcan Dump al momento de usar fórmulas nuevas. Como buena práctica siempre que se agregan fórmulas debería de correrse.

Fórmulas de SD - VOFM - Agrupación y separación

En la transacción VOFM encontramos varios menues donde entrar esto sirve para el uso de rutinas, que sirven para agrupaciones, calculo de condiciones, etc.

La agrupación y separación sirve para que al momento de facturar pedidos o entregas por ejemplo tenga un cierto criterio de agrupación. Por ejemplo se desea que si varias entregas tienen mismo destinatario (cliente) se agrupen en una sola factura para no hacer una por por cada entrega.

 

Se va a la sección

image

 

La rutina que elegimos tiene que estar seteada en el customizing por el funcional SD

 

FORM DATEN_KOPIEREN_901.
*Criterio de Agrupamiento
  DATA: BEGIN OF ZUK,
          KUNNR TYPE LIKP-KUNNR,
        END OF ZUK.

ZUK-KUNNR = LIKP-KUNNR.

VBRK-ZUKRI = ZUK.

ENDFORM.

Con esta subrutina se va a agrupar las entregas por cliente (KUNNR). Todos los campos que se agreguen a la estrutura ZUK (ZUKRI) van a ser criterios de agrupación. Si dos entregas no coinciden en alguno de los campos especificados se hace una separación.

Tabla útiles de CRM

  • CRMD_ORDERADM_H - Cabecera de Orden
  • CRMD_ORDERADM_I - Posición
  • BUT000 -La tabla de donde salen los nombres de los códigos de Partner, se accede por el código de Partner.
  • SCPRIOT - Prioridades de una Orden
  • QPCT - Texto de Categorías
  • AGR_1251 - Clase de operación, entrando por roles - Function para ver roles de un user "/OSP/GET_R3_ROLES"
  • TJ30T - Textos para status de usuarios

 

Generalmente las tablas comienzan con CRMD* las que tienen que ver con ordenes.

 

También se puede usar la función CRM_ORDER_READ para obtener todos los detalles de una determinada orden.

Bajada de PDF de forma local

Si bien existen las funciones para bajar un OTF (SapScript o Smartforms) a PDF de esta manera es mucho más sencilla, este programa ya tiene el proceso de conversión a  PDF, simplemente le pasamos la orden de SPOOL y la ruta donde queremos el archivo y listo.

 

SUBMIT rstxpdft4
USING SELECTION-SCREEN '1000'
WITH spoolno EQ w_spool_num
WITH download EQ 'X'
WITH p_file EQ 'c:\download.pdf'
EXPORTING LIST TO MEMORY
AND RETURN.

Ejecutar un comando en el application server

Con la sentencia CALL 'SYSTEM' ID 'COMMAND' ejecutamos un comando del servidor. El siguiente ejemplo creaba un determinado directorio en el mismo.

CONCATENATE 'mkdir' ' ' v_ruta ls_bil_invoice-HD_GEN-PAYER '\' ls_bil_invoice-HD_ORG-SALESORG '\' ls_bil_invoice-HD_GEN-BIL_DATE+4(2) '\'
INTO l_text.

CALL 'SYSTEM' ID 'COMMAND' FIELD l_text.

Crear ComboBox en reportes

En SAP tenemos el Matchcode, pero muchas veces es tedioso ya que tarda. De esta forma tendremos un combobox.

El parámetro ps_parm tendrá la opción elejida.

 

TYPE-POOLS: vrm.
DATA: name TYPE vrm_id, list TYPE vrm_values, value LIKE LINE OF list.
PARAMETERS: ps_parm(10) AS LISTBOX VISIBLE LENGTH 10.
AT SELECTION-SCREEN OUTPUT.
  name = 'PS_PARM'.
  value-key = '1'. value-text = 'Linea 1'. APPEND value TO list.
  value-key = '2'. value-text = 'Linea 2'. APPEND value TO list.
  value-key = '3'. value-text = 'Linea 3'. APPEND value TO list.
  value-key = '4'. value-text = 'Linea 4'. APPEND value TO list.
  value-key = '5'. value-text = 'Linea 5'. APPEND value TO list.
  value-key = '6'. value-text = 'Linea 6'. APPEND value TO list.
  CALL FUNCTION 'VRM_SET_VALUES'
       EXPORTING
            id     = name
            values = list.
START-OF-SELECTION.
  WRITE: / 'Parametros : ', ps_parm.

Bug - Smartforms sin valores en la interfaz

A veces suele suceder que al modificar un smartforms, al problarlo hay datos que desaparecen como por arte de magia. Esto es un bug, por no usar el verificar y solamente el activar.

 

Si sucede esto, Verificar y luego Activar. Y se soluciona.