Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - ale12

Páginas: [1] 2 3 ... 6
1
Con esta BAPI se contabiliza la salida de mercancía, esta es la que ejecuta la VL02N cuando se da clic en el botón "Contabilizar EM"

DATA: it_hd  LIKE bapiobdlvhdrcon,
      it_hc  LIKE bapiobdlvhdrctrlcon,
      it_hds LIKE /spe/bapiobdlvhdrconf,
      it_hcs LIKE /spe/bapiobdlvhdrctrlcon,
      it_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE.


it_hd-deliv_numb  = entrega.
it_hc-deliv_numb  = entrega.
it_hc-post_gi_flg = 'X'.     "<<<
it_hds-deliv_numb = entrega.
it_hcs-deliv_numb = entrega.


CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
  EXPORTING
    header_data        = it_hd
    header_control     = it_hc
    delivery           = entrega
    header_data_spl    = it_hds
    header_control_spl = it_hcs
  TABLES
    return             = it_ret.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait = 'X'.


Tomado de : http://bitacorasap.blogspot.com/2011/10/contabilizar-salida-de-mercancia.html




2
ALV / Re:color de lineas en alvgrid
« en: 11 de Diciembre de 2013, 01:21:24 pm »
Hola,

Mejor si nos pones todo el programa entero, me lo copio en mi sistema y veo si me compila para ver que pasa.

Pero por lo que estoy mirando es en la tabla interna lt_vuelo donde te tienes que crear un campo nuevo para marcarlo con una 'X' según vas pinchando sobre el. Al retroceder al primer listado no te olvides en grabar el cambio realizado.


Pero como te comentaba me falta mucho código para ver el posible error.

Saludos,



3
Pero si las plazas están agotadas!!!  :o

¿Cuando van a salir los siguientes cursos?

4
ALV / Re:Posicionar cursor de un alv_grid_display
« en: 30 de Agosto de 2012, 01:06:10 pm »
Hola Mario,


No llego entender muy bien lo que necesitas, te pongo lo que intuyo que quieres, ya nos comentas si salió bien... o miramos otra solución.

Pero por lo que yo entiendo en tu 'USER_COMMAND' tendrás algo similar.


FORM user_command USING r_ucomm     LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.
  CASE r_ucomm.

   WHEN 'IP'.  "pagina 1
                ¿?

      rs_selfield-refresh    = 'X'.
      rs_selfield-col_stable = 'X'.
      rs_selfield-row_stable = 'X'.

    WHEN 'AP'. "pagina anterior
              ¿?

      rs_selfield-refresh    = 'X'.
      rs_selfield-col_stable = 'X'.
      rs_selfield-row_stable = 'X'.

    WHEN 'SP'. " pagina siguiente

          ¿?

      rs_selfield-refresh    = 'X'.
      rs_selfield-col_stable = 'X'.
      rs_selfield-row_stable = 'X'.

    WHEN 'FP'. " pagina final   


      rs_selfield-refresh    = 'X'.
      rs_selfield-col_stable = 'X'.
      rs_selfield-row_stable = 'X'.


  ENDCASE.

ENDFORM.                    " user_command




5
Programación ABAP / Re:Metodos Avanzados de Debug
« en: 28 de Diciembre de 2011, 05:46:24 pm »
MODO DEBUGGING:

Un programa Abap/4 puede ejecutarse paso a paso o pueden insertarse breakpoints para parar en cualquier sentencia la ejecución del mismo. Para activar la ejecución en "modo debugging" al testear una transacción o durante la ejecución de un programa hay que ir a la función debugging, por el menú: Sistema – Utilidades – Debugging Abap/4, o bien introducir '/H' en la barra de comandos. Con esto también se saltan los procesos PBO (Process Before Output) y se pasa directamente a la pantalla de selección. Empieza la ejecución paso a paso o con breakpoints.

Los breakpoints pueden fijarse desde el editor pulsando el botón Fijar Breakpoint. Para ver los que hay definidos, por menú ir a Utilidades – Breakpoints – Visualizar. También se pueden codificar breakpoints en el programa de forma estática, usando la sentencia Abap/4:

BREAK–POINT.

Al depurarse un programa, cuando se llega a un breakpoint la ejecución se detiene. En ese momento se puede conocer el contenido actual de todos los campos, variables, tablas internas, sus cabeceras, y bases de datos referenciadas en el report (incluso campos del sistema). Para ello hacer doble clic sobre el campo a ver, o bien pulsar el botón Seleccionar, o incluso escribir su nombre directamente. Para ver todas las entradas de una tabla interna, pulsar el botón Tabla y escribir su nombre. Su registro de cabecera se distingue con el símbolo: >>>>>.

También se puede cambiar el contenido de los campos o variables en ese momento, forzando la ejecución del programa para ver cómo responde éste, o para corregir valores incorrectos. Para ello teclear el nuevo valor para una variable, y pulsar el botón Retener para 'guardarlo'.

La línea actual en proceso en modo debugging está marcada con un '>' (es el punto de ejecución). En modo "paso a paso" se puede ejecutar una subrutina, función o bloque de programa todo seguido, pulsando el botón Ejecutar, o bien hacerlo paso a paso, con el botón Paso-a-paso.

Los breakpoints dentro de un SELECT. ENDSELECT. pueden dar problemas, pues el acceso a la base de datos no puede ser interrumpido. Mejor ponerlos antes o después, y saltar hasta él, o bien ejecutar paso a paso. Se pueden seleccionar breakpoints que dependan del código de retorno dado por SY-SUBRC. Se pueden grabar breakpoints para la duración de la sesión de diálogo (con Grabarfunción). Para parar el proceso en ciertas rutinas, eventos o palabras clave, ir a: Breakpoints – Breakpoint at – At event / form / keyword. Para que el control de programa vuelva al llamante, elegir Debugging Return.

6
ALV / Re:Fijar línea ALV
« en: 27 de Octubre de 2011, 06:10:23 pm »
Me respondo yo mismo.

* 1ª Opción
ls_selfield-refresh    = 'X'.
ls_selfield-col_stable = 'X'.
ls_selfield-row_stable = 'X'.



   ---


* 2ª Opción
DATA ls_row    TYPE LVC_S_ROW.
DATA ls_col    TYPE LVC_S_COL.
DATA ls_row_no TYPE LVC_S_ROID.

*Mover el scroll para la posicion indicada
CALL METHOD grid->SET_SCROLL_INFO_VIA_ID
  EXPORTING
    IS_ROW_INFO = ls_row
    IS_COL_INFO = ls_col
    IS_ROW_NO   = ls_row_no.


7
ALV / Fijar línea ALV
« en: 27 de Octubre de 2011, 05:53:17 pm »
Hola, que comando se utiliza para fijar la posición del ALV después de ejecutar un comando... refresh, call transaction, etc...

Cuando vuelvo a mi ALV el scroll se ha desplazado a la parte superior del informe.


Saludos y gracias.

8
Programación ABAP / Re: Cómo agregar una última línea al final del ALV??
« en: 30 de Mayo de 2011, 06:11:44 pm »
Hola,

En principio a un ALV no se le deben de añadir líneas con cálculos porque puedes perder la funcionalidad del ALV, como por ejemplo a la hora de totalizar.

De todas formas para añadir una fila al final, basta con hacerle un APPEND a la tabla interna que muestras en el ALV, otra cosa es que intentes meter un texto en un formato numérico, (no se si me explico).

De todas formas si nos explicas con un poco mas de detalle que es lo que quieres hacer igual te podemos ayudar.

Salduos.

9
Bapis / Como modificar una lista de materiales para material
« en: 25 de Mayo de 2011, 09:58:14 am »
En el sistema estándar, puede utilizar los siguientes módulos de funciones para modificar una lista de materiales para material:

    CSAP_MAT_BOM_OPEN
    CSAP_BOM_ITEM_MAINTAIN
    CSAP_MAT_BOM_CLOSE


Abrir lista de materiales: CSAP_MAT_BOM_OPEN
Este módulo de funciones se utiliza para abrir una lista de materiales y llevar a cabo modificaciones. La lista de materiales se importa con la fecha de inicio de validez relevante y se bloquea. Si no tiene lugar ningún error al abrir la lista de materiales, el resultado que devuelve el módulo son los datos de cabecera de la lista de materiales, una tabla de posiciones de la lista de materiales y una tabla de relación de objetos.

Actualizar posiciones de la lista de materiales: CSAP_BOM_ITEM_MAINTAIN
Una vez haya abierto con éxito (sin errores) la lista de materiales, puede utilizar este módulo de funciones para procesar las posiciones individuales de la lista de materiales.
Puede:

  • Crear nuevas posiciones
Los campos para nodo de posición y contador de posición deben ser iniciales cuando crea una nueva posición.

  • Modificar posiciones:
En la tabla de posiciones de la lista de materiales, seleccione la posición que desea modificar, y transfiera los datos modificados. Los campos para nodo de posición y contador de posición deben contener un valor, ya que son campos utilizados únicamente para identificar una posición de una lista de materiales.

  • Borrar posiciones:
En la tabla de posiciones de la lista de materiales, seleccione la posición que desea borrar, y configure el indicador de borrado. Los campos para nodo de posición y contador de posición deben contener un valor.

  • Actualizar relaciones de objeto
Si desea modificar o borrar una relación de objetos local para una posición de la lista de materiales que tiene más de una relación, introduzca la denominación interna de la relación.

No puede utilizar la denominación externa que introdujo cuando creó la relación para identificar los datos que pertenecen a una relación local.

   
  • No puede modificar el tipo de posición de una posición existente.
  • Sólo puede modificar cada posición una vez esté en una sesión (entre la apertura y el cierre de la lista de materiales).
  • Si aparece el mensaje de error "La posición no puede modificarse" en el log, puede deberse a las siguientes razones:

    (i) La posición no es válida para la fecha de inicio de validez introducida, porque se hace válida en una fecha posterior.
    (ii) La relación de objetos está asignada a la posición, pero el número de modificación que utilizó para abrir la lista de materiales no está activo para relaciones de objetos.
    (iii) La posición ya se ha procesado con otro número de modificación en la fecha de inicio de validez introducida.

Cerrar lista de materiales: CSAP_MAT_BOM_CLOSE
Una vez haya realizado las modificaciones, utilice este módulo de funciones para cerrar la lista de materiales. Se grabarán las modificaciones, se desbloqueará la lista de materiales y se registrará el log.

La lista de materiales sólo se graba si se ha modificado al menos una posición con éxito.

Tenga en cuenta los siguientes puntos al modificar listas de materiales:

  •     No existe un módulo de funciones para modificar los datos de cabecera.
  •     Se aplican las mismas limitaciones que para crear una lista de materiales.
  •     Sólo puede procesar una alternativa o una variante. Si no introduce una alternativa al llamar el módulo de funciones CSAP_MAT_BOM_OPEN, éste abre la alternativa "01".


Sacado del siguiente enlace



10
Bapis / BAPI_MATERIAL_BOM_GROUP_CREATE - Crear una lista de material
« en: 25 de Mayo de 2011, 09:38:21 am »
Dejo un ejemplo para crear una lista de materiales usando BAPI_MATERIAL_BOM_GROUP_CREATE

Este código creará una lista de materiales para un material.
Con el material MAINMATERIAL y con sus componentes COMPON1 y COMPON2.

Código: [Seleccionar]

REPORT zsm_create_simplebom.

* Data Declaration
DATA:
it_bomgroup LIKE bapi1080_bgr_c OCCURS 0 WITH HEADER LINE,
it_variants LIKE bapi1080_bom_c OCCURS 0 WITH HEADER LINE,
it_items    LIKE bapi1080_itm_c OCCURS 0 WITH HEADER LINE,
it_matrel   LIKE bapi1080_mbm_c OCCURS 0 WITH HEADER LINE,
it_itemas   LIKE bapi1080_rel_itm_bom_c OCCURS 0 WITH HEADER LINE,
it_return   LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

* Fill the data
* Material BoM Group Header Data
CLEAR it_bomgroup.
it_bomgroup-bom_group_identification = 'BAPI_SMP_COL1'.
it_bomgroup-object_type = 'BGR'.
it_bomgroup-object_id = 'SIMPLE1'.
it_bomgroup-bom_usage = '5'. " YOU COULD CHANGE THE BOM USAGE TO YOUR
"NEEDS
it_bomgroup-ltxt_lang = sy-langu.
it_bomgroup-technical_type = ' '.
it_bomgroup-bom_text = 'Simple BoM - FM'.
APPEND it_bomgroup.

* Header Details of the different variants
CLEAR it_variants.
it_variants-bom_group_identification = 'BAPI_SMP_COL1'.
it_variants-object_type = 'BOM'.
it_variants-object_id = 'SIMPLE1'.
it_variants-alternative_bom = '01'.
it_variants-bom_status = '01'.
it_variants-base_qty = '1.000'.
it_variants-valid_from_date = sy-datum.
it_variants-function = 'NEW'.
APPEND it_variants.

* Details of the items of the variants
CLEAR it_items.
it_items-bom_group_identification = 'BAPI_SMP_COL1'.
it_items-object_type = 'ITM'.
it_items-object_id = 'SIMPLE1'.
it_items-item_no = '0010'.
it_items-item_cat = 'L'.
it_items-component = 'COMPON1'.
it_items-comp_qty = '2'.
it_items-valid_from_date = sy-datum.
APPEND it_items.

CLEAR it_items.
it_items-bom_group_identification = 'BAPI_SMP_COL1'.
it_items-object_type = 'ITM'.
it_items-object_id = 'SIMPLE1'.
it_items-item_no = '0020'.
it_items-item_cat = 'L'.
it_items-component = 'COMPON2'.
it_items-comp_qty = '3'.
it_items-valid_from_date = sy-datum.
APPEND it_items.


* Details of the materials of the different variants
CLEAR it_matrel.
it_matrel-bom_group_identification = 'BAPI_SMP_COL1'.
it_matrel-material = 'MAINMATERIAL'.
it_matrel-bom_usage = '5'.
it_matrel-alternative_bom = '01'.
APPEND it_matrel.

* Linking items to the corresponding variants
CLEAR it_itemas.
it_itemas-bom_group_identification = 'BAPI_SMP_COL1'.
it_itemas-sub_object_type = 'ITM'.
it_itemas-sub_object_id = 'SIMPLE1'.
it_itemas-super_object_type = 'BOM'.
it_itemas-super_object_id = 'SIMPLE1'.
it_itemas-valid_from_date = sy-datum.
it_itemas-function = 'NEW'.
APPEND it_itemas.

* Create variants
CALL FUNCTION 'BAPI_MATERIAL_BOM_GROUP_CREATE'
  EXPORTING
    all_error         = 'X'
  TABLES
    bomgroup          = it_bomgroup
    variants          = it_variants
    items             = it_items
    materialrelations = it_matrel
    itemassignments   = it_itemas
    return            = it_return.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

LOOP AT it_return.
  WRITE:/ it_return-type, it_return-id, it_return-number,
          it_return-message.
ENDLOOP.


11
Hola,

La verdad es que yo cuando he querido realizar la entrega completa, he puesto en la posición principal la cantidad a cero y en las subposiciones el resto.

Lo de dejarlo en blanco no lo he probado.


Un saludo.

12
Programación ABAP / Convertir cantidad a formato interno de SAP
« en: 05 de Mayo de 2011, 06:42:41 pm »
Hola,

Desde la WEB me envían por una BAPI una cantidad en formato de salida: 1.234,56

Yo lo que quiero es poner esa cantidad en formato interno de SAP para poder operar con el: 1234.56


¿Existe alguna función que lo haga?

Gracias.

13
Bapis / BAPI_PO_CHANGE - Cambiar condición de pago de un pedido. ME22N
« en: 21 de Marzo de 2011, 12:25:51 pm »
Comparto un Perform donde tengo como cambiar la condición de pago en un pedido.
Para ello utilizaré la Bapi BAPI_PO_CHANGE.

Código: [Seleccionar]
FORM modificar_condicion_pago .
* Tabla y estructuras para la bapi de cambio
  DATA: l_st_poheaderx          LIKE  bapimepoheaderx,
        l_st_poheader           LIKE  bapimepoheader,
        l_st_resultado  LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
  DATA: l_ebeln_new(1) TYPE c.     " Indicador nuevo doc.compras
  DATA: gc_2 LIKE bapita-wait VALUE '2'.


  SORT g_it_ped_compras BY ebeln.
  LOOP AT g_it_ped_compras.

*   La cabecera de pedido de compras sólo se realizará una vez por
*   nº de documento.
    AT NEW ebeln.
*     Se informa la variable de nuevo documento de compras.
      l_ebeln_new = 'X'.
    ENDAT.

*   Si se activó la variable de nuevo documento de compras.
    IF NOT l_ebeln_new IS INITIAL.
*     Se inicializa la variable de nuevo documento de compras.
      CLEAR l_ebeln_new.

      IF g_it_ped_compras-bukrs BETWEEN '0001' AND '1000'.
        SELECT SINGLE * FROM lfa1
                       WHERE lifnr = g_it_ped_compras-lifnr
                         AND vbund BETWEEN '000001' AND '001000'.
        IF sy-subrc = 0.

          l_st_poheader-pmnttrms  = 'ZXXX'. "Condición de pago nueva
*         Marcar la referencia
          l_st_poheaderx-pmnttrms = 'X'.

*         Modificar el campo ZTERM de la tabla ekko
          CALL FUNCTION 'BAPI_PO_CHANGE'
            EXPORTING
              purchaseorder = g_it_ped_compras-ebeln
              poheader      = l_st_poheader
              poheaderx     = l_st_poheaderx
            TABLES
              return        = l_st_resultado.

*         Si no existe error se genera un commint
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = gc_2.

        ENDIF.
      ENDIF.
    ENDIF.

  ENDLOOP.



14
Bapis / BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« en: 21 de Marzo de 2011, 11:25:53 am »
Quiero compartir con vosotros una Bapi para añadir Partición de Lotes en una Entrega... como si lo hiciéramos por la transacción VL02N.

Con este Report lo que conseguimos es añadir particiones de lotes en una entrega ya existente utilizando la siguiente Bapi: BAPI_OUTB_DELIVERY_CHANGE.


Código: [Seleccionar]
REPORT  z_bapi_outb_delivery_change.

TABLES: lips, marc.


DATA: header_data     LIKE  bapiobdlvhdrchg.
DATA: header_control  LIKE  bapiobdlvhdrctrlchg.
DATA: delivery        LIKE  bapiobdlvhdrchg-deliv_numb.

DATA: item_data    LIKE  bapiobdlvitemchg OCCURS 0 WITH HEADER LINE.
DATA: item_control LIKE  bapiobdlvitemctrlchg
                                          OCCURS 0 WITH HEADER LINE.
DATA: return       LIKE  bapiret2         OCCURS 0 WITH HEADER LINE.




header_data-deliv_numb    = '0080974350'.
header_control-deliv_numb = '0080974350'.
delivery                  = '0080974350'.


* Esta sería la posición Padre
* La cantidad de esta posición es de 200 KG, pero como
* vamos a añadir dos subposiciones de 100 + 40 KG, le quedarán 60.
item_data-deliv_numb = '0080974350'.
item_data-deliv_item = '000010'.
item_data-material   = '000000000000002803'.
item_data-dlv_qty    = '60.000'.     "Cantidad pendiente calculada
item_data-dlv_qty_imunit = '60.000'. "Cantidad pendiente calculada
item_data-fact_unit_nom  = '1'.
item_data-fact_unit_denom = '1'.
APPEND item_data.


* Aquí indicamos las subposiciones de la posición Padre
CLEAR item_data.
item_data-deliv_numb = '0080974350'.
item_data-deliv_item = '900001'.
item_data-material   = '000000000000002803'.
item_data-batch      = '28/273/081'.
item_data-hieraritem = '000010'.
item_data-usehieritm = '1'.
item_data-dlv_qty    = '100.000'.
item_data-dlv_qty_imunit = '100.000'.
item_data-fact_unit_nom = '1'.
item_data-fact_unit_denom = '1'.
APPEND item_data.


CLEAR item_data.
item_data-deliv_numb = '0080974350'.
item_data-deliv_item = '900002'.
item_data-material   = '000000000000002803'.
item_data-batch      = '08/280/081'.
item_data-hieraritem = '000010'.
item_data-usehieritm = '1'.
item_data-dlv_qty    = '40.000'.
item_data-dlv_qty_imunit = '40.000'.
item_data-fact_unit_nom = '1'.
item_data-fact_unit_denom = '1'.
APPEND item_data.


** Si en la posición no viene indicado el Almacen, lo cogeremos del
** maestro de la MARC.
*IF lips-lgort IS INITIAL.
*  SELECT SINGLE * FROM marc
*                 WHERE matnr = lips-matnr
*                   AND werks = lips-werks.
*  item_data_spl-deliv_numb  = '0080974350'.
*  item_data_spl-deliv_item  = lips-posnr.
*  item_data_spl-stge_loc    = marc-lgpro.
*  item_data_spl-pick_denial = 'X'.
*  APPEND item_data_spl.
*ENDIF.


item_control-deliv_numb = '0080974350'.
item_control-deliv_item = '000010'.
item_control-chg_delqty = 'X'.
APPEND item_control.


CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data    = header_data
    header_control = header_control
    delivery       = delivery
  TABLES
    item_data      = item_data
    item_control   = item_control
    return         = return.

COMMIT WORK AND WAIT.




*****
DATA: lf_mensaje(220).

LOOP AT return.

  MESSAGE ID return-id
          TYPE 'S'
          NUMBER return-number
          WITH return-message_v1
          return-message_v2
          return-message_v3
          return-message_v4
          INTO
          lf_mensaje.

  WRITE lf_mensaje.

ENDLOOP.



15
Programación ABAP / Re: DUMP por entrada masiva en un select
« en: 16 de Noviembre de 2010, 08:52:23 am »
Me ha pasado lo mismo. No hay nada mas gratificante que buscar un poco y encontrarlo.

 ;D Muchas gracias dluis.

Páginas: [1] 2 3 ... 6