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 - Carlos

Páginas: [1] 2 3 ... 12
1
Programación ABAP / BAPI_SALESORDER_CHANGE - Ejemplo
« en: 09 de Enero de 2020, 10:33:20 am »
Esto es un ejemplo de como actualizar el motivo del rechazo (VBAP-ABGRU) y la cantidad de pedido (VBAP-WMENG) para todos los artículos en un pedido de ventas. "BAPI_SALESORDER_CHANGE"



REPORT ztestbapiso2.
*&--------------------------------------------------------------------&*
*& Program Description:                                               &*
*& -----------------------                                            &*
*& This demo program will update the reason for rejection and the     &*
*& order quantity for all items in a selected sales order.            &*
*&                                                                    &*
*& The program demonstrate the use of the 'BAPI_SALESORDER_CHANGE'.   &*
*&                                                                    &*
*& Author:  ABAPCOOKBOOK          <------                             &*
*& Website: www.abapcookbook.com  <------                             &*
************************************************************************

************************************************************************
* DATA DECLARATIONS                                                    *
************************************************************************
*Tables:
TABLES:
  vbap.

*Internal tables:
DATA:
  gt_vbap               TYPE STANDARD TABLE OF vbap,
  gt_vbep               TYPE STANDARD TABLE OF vbep,
  gt_item_in            TYPE STANDARD TABLE OF bapisditm,
  gt_item_inx           TYPE STANDARD TABLE OF bapisditmx,
  gt_schedule_lines     TYPE STANDARD TABLE OF bapischdl,
  gt_schedule_linesx    TYPE STANDARD TABLE OF bapischdlx,
  gt_return             TYPE STANDARD TABLE OF bapiret2.

*Field Symbols:
FIELD-SYMBOLS:
  <fs_vbap>             TYPE vbap,
  <fs_vbep>             TYPE vbep.

*Structures:
DATA:
  gst_item_hedx         TYPE bapisdh1x,
  gst_item_in           TYPE bapisditm,
  gst_item_inx          TYPE bapisditmx,
  gst_schedule_lines    TYPE bapischdl,
  gst_schedule_linesx   TYPE bapischdlx.

*Variables:
DATA:
  gv_msg                TYPE string,
  gv_tabix              TYPE sy-tabix.

*Constants:
CONSTANTS:
  gc_error              TYPE string
        VALUE ': An error occured, no change done to the sales order.',
  gc_success            TYPE string
        VALUE ': Sales order changed successfully.'.

************************************************************************
* SELECTION SCREEN                                                     *
************************************************************************
SELECT-OPTIONS:
*  Sales Order Number.
   s_vbeln FOR vbap-vbeln OBLIGATORY.

PARAMETERS:
* Reason for Rejection.
  p_abgru TYPE vbap-abgru OBLIGATORY,

* Order Quantity.
  p_wmeng TYPE vbep-wmeng OBLIGATORY.


************************************************************************
* CODE LOGIC                                                           *
************************************************************************

*Select sales order data from table VBAP.
SELECT *
  FROM vbap
  INTO TABLE gt_vbap
  WHERE vbeln IN s_vbeln.

IF sy-subrc EQ 0.

* Rules 'For All Entries'.
* Not necessary as 'VBELN' and 'POSNR' is already primary key, this
*                                                              logic
* just to demonstrate 'For All Entries' rule.
  SORT gt_vbap BY vbeln posnr.
  DELETE ADJACENT DUPLICATES FROM gt_vbap COMPARING vbeln posnr.

* Retrieving schedule lines entries.
  SELECT *
    FROM vbep
   INTO TABLE gt_vbep
 FOR ALL ENTRIES IN gt_vbap
   WHERE vbeln EQ gt_vbap-vbeln
     AND posnr EQ gt_vbap-posnr.

  IF sy-subrc EQ 0.

*   Sorting for binary search.
    SORT gt_vbep BY vbeln posnr.

    LOOP AT gt_vbap ASSIGNING <fs_vbap>.

*     ........................
*     BAPI Data for updating the reason for rejection.
*     ........................
*     (Order Header Level)
*     Setting the update flag at order header level to update mode.
      gst_item_hedx-updateflag = 'U'.

*     (Order Item Level)
*     Setting of the material number(MATNR) at order item level.
      gst_item_in-material = <fs_vbap>-matnr.

*     Setting of the item number(POSNR) at order item level.
      gst_item_in-itm_number  = <fs_vbap>-posnr.
      gst_item_inx-itm_number = <fs_vbap>-posnr.

*     Setting of the reason for rejection(ABGRU) at order item level.
      gst_item_in-reason_rej  = p_abgru.
      gst_item_inx-reason_rej = 'X'.

*     Setting the update flag at order item level to update mode.
      gst_item_inx-updateflag = 'U'.

*     BAPI items level tables:
      APPEND:
        gst_item_in  TO gt_item_in,
        gst_item_inx TO gt_item_inx.

*     ........................
*     BAPI Data for updating the order quantity.
*     ........................
*     Adding the schedule lines items.
      READ TABLE gt_vbep TRANSPORTING NO FIELDS
      WITH KEY  vbeln = <fs_vbap>-vbeln
                posnr = <fs_vbap>-posnr
                BINARY SEARCH.

      IF sy-subrc EQ 0.

        gv_tabix = sy-tabix.

*       Index looping for better performance.
        LOOP AT gt_vbep ASSIGNING <fs_vbep> FROM gv_tabix.

          IF  <fs_vbep>-vbeln EQ <fs_vbap>-vbeln
          AND <fs_vbep>-posnr EQ <fs_vbap>-posnr.

*           (Schedule Line Level)
*           Setting of the item number(POSNR) at schedule line level.
            gst_schedule_lines-itm_number  = <fs_vbep>-posnr.
            gst_schedule_linesx-itm_number = <fs_vbep>-posnr.

*           Setting of the schedule line number(ETENR) at schedule
*                                                        line level.
            gst_schedule_lines-sched_line  = <fs_vbep>-etenr.
            gst_schedule_linesx-sched_line = <fs_vbep>-etenr.

*           Setting the update flag at schedule line level to update
*                                                                mode.
            gst_schedule_linesx-updateflag = 'U'.

*           Setting the new order quantity(WMENG).
            gst_schedule_lines-req_qty  = p_wmeng.
            gst_schedule_linesx-req_qty = 'X'.

*           BAPI schedule lines level tables:
            APPEND:
              gst_schedule_lines  TO gt_schedule_lines,
              gst_schedule_linesx TO gt_schedule_linesx.

          ELSE.

*           Clear index
            CLEAR gv_tabix.

*           Move out of the loop.
            EXIT.

          ENDIF.

*         Clearing of work areas.
          CLEAR:
            gst_schedule_lines,
            gst_schedule_linesx.

        ENDLOOP.

      ENDIF.

*     Calling BAPI to update reason for rejection and the
*     schedule line order quantity in the selected sales order.
      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          salesdocument    = <fs_vbap>-vbeln
          order_header_inx = gst_item_hedx
        TABLES
          return           = gt_return
          order_item_in    = gt_item_in
          order_item_inx   = gt_item_inx
          schedule_lines   = gt_schedule_lines
          schedule_linesx  = gt_schedule_linesx.

*     Preparing the result message.
      CONCATENATE <fs_vbap>-vbeln   " Sales Order Number
                  <fs_vbap>-posnr   " Item Number
             INTO gv_msg            " Message
     SEPARATED BY space.            " Space

*     Check if at least one error was raised by the BAPI. Loop inside
*     loop is not advise, however, the return table will contains small
*     amount of entries. We can use that for our demo.
      LOOP AT gt_return TRANSPORTING NO FIELDS
      WHERE type EQ 'E'
         OR type EQ 'A'.

*       Exit and rollback changes.
        EXIT.

      ENDLOOP.

*     If error found, rollback database changes.
      IF sy-subrc EQ 0.

*       Rollback changes.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

*       Preparing error message.
        CONCATENATE gv_msg        "Sales Order and Item Number
                    gc_error      "Error Message
               INTO gv_msg
       SEPARATED BY space.

*       Output message.
        WRITE / gv_msg.

*     Else, no error found, commit database changes.
      ELSE.

*       Commit changes.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = abap_true.

*       Preparing success message.
        CONCATENATE gv_msg        "Sales Order and Item Number
                    gc_success    "Success Message
               INTO gv_msg
       SEPARATED BY space.

*       Output message.
        WRITE / gv_msg.

      ENDIF.

*     Write a line after each sales order.
      AT END OF vbeln.
        WRITE: sy-uline.
      ENDAT.

*     Clearing of variables and structures:
      CLEAR:
*       Variables:
        gv_msg,
        gv_tabix,
*       Structures:
        gst_item_hedx,
        gst_item_in,
        gst_item_inx.

*     Refreshing internal tables:
      REFRESH:
        gt_item_in,
        gt_item_inx,
        gt_schedule_lines,
        gt_schedule_linesx,
        gt_return.

    ENDLOOP.

  ENDIF.

ENDIF.




2
HANA / Conectarse a una base de datos SAP HANA (Power Query)
« en: 17 de Abril de 2019, 08:56:14 am »
Interesante artículo que comparto...

Para conectarse a una base de datos SAP HANA desde Excel:

1.- Haga clic en datos > nueva consulta > desde base de datos > desde base de datos SAP Hana.




2.- En el cuadro de diálogo base de datos SAP Hana, especifique el servidor al que desea conectarse. El nombre del servidor debe seguir el formato ServerName: Port.




3.- Opcionalmente, si desea importar datos mediante una consulta de base de datos nativa, haga clic en Opciones avanzadas y, en el cuadro instrucción SQL, escriba la consulta.

4.- Haga clic en Aceptar.

5.- Si el servidor SAP Hana requiere credenciales de usuario de base de datos, en el cuadro de diálogo obtener acceso a una base de datos SAP Hana, haga lo siguiente:

  a. Haga clic en la pestaña base de datos y escriba su nombre de usuario y contraseña.

  b. Haga clic en Conectar.



3
Programación ABAP / Capturar errores en un módulo de funciones estándar.
« en: 19 de Marzo de 2019, 04:33:04 pm »
Hola,

Estoy utilizando en un programa un módulo de funciones estándar y este me está devolviendo un error que me impide continuar.

Recuerdo que existe una forma de capturar el error, pero no recuerdo como era.



Gracias.

4
Todos los informes ALV de activos fijos tienen una estructura de catálogo predefinida con la nomenclatura:

            FIAA_SALVTAB_xxxxxx*

Ejemplos:

Patrimonio de activos fijos  > FIAA_SALVTAB_RABEST (Report: RABEST_ALV01)
Cuadro de activos fijos      > FIAA_SALVTAB_RAGITT (Report: RAGITT_ALV01)
Movimientos activos fijos    > FIAA_SALVTAB_RABEWG (Report: RABEWG_ALV01)
Amortizaciones               > FIAA_SALVTAB_RAHAFA (Report: RAHAFA_ALV01)


Cada catálogo de campo predefinido FIAA_SALVTAB_XXXXXX incluye una estructura tipo:

  CI_REPxxxxxx*

Ejemplos:

FIAA_SALVTAB_RABEST  .include > CI_REPRABEST  (Report: RABEST_ALV01)
FIAA_SALVTAB_RAGITT  .include > CI_REPRAGITT  (Report: RAGITT_ALV01)
FIAA_SALVTAB_RABEWG  .include > CI_REPRABEWG  (Report: RABEWG_ALV01)
FIAA_SALVTAB_RAHAFA  .include > CI_REPRAHAFA  (Report: RAHAFA_ALV01)



Procedimiento ejemplo del programa RABEST_ALV01 (de la nota 335065):

1.- Vamos al Diccionario (Tx. SE11) y en 'Tipo de datos' introducimos la estructura FIAA_SALVTAB_RABEST.
2.- Seleccionamos el  .Include > CI_REPRABEST (doble clic).
3.- En la estructura append añadimos los campos que deseamos al informe.
4.- Activamos el cambio.
5.- La próxima vez que ejecutemos el programa, modificamos el Layout y añadimos el nuevo campo al informe ALV.


Restricciones
Podemos incluir solo los campos que la base de datos lógica transfiere al informe.
 -ANLA (Segm.reg.maestro inmov.)
 -ANLZ (Asignaciones de activos fijos con fecha valor)
 -ANLU (Registro maestro de activos fijos: Campos de usuario)
 -ANLB (Parámetros de amortización)


-> Este método no está disponible para el informe RASIMU02. Lea la Nota 427827 para una mejora de RASIMU02.

Recomendaciones
-> Transfiera solo los campos realmente requeridos ya que cada campo agregado afecta el rendimiento.
-> Los campos que se incluyen adicionalmente se suministran con valores dentro del programa mediante una instrucción MOVE-CORRESPONDING. Es por eso que es necesario designar los campos agregados a los campos exactos correspondientes de las tablas originales o estructuras originales.
-> El tipo de componente también tiene que aceptar garantizar un formato correcto . Por lo tanto, siempre verifique los nombres de los campos en las estructuras iniciales (ANLAV, ANLB) y de qué tipo son. Luego, copie las entradas a la estructura CI_REPRA ... de forma idéntica.
-> Para los campos que contienen importes de moneda o especificaciones de cantidad, debe especificar tablas de referencia y campos de referencia. Puede asignar los campos de referencia en la pestaña de la pestaña Moneda / cantidad.
-> La activación de la estructura CI_REPRA ...- generalmente genera mensajes de advertencia, porque inserta campos en el espacio de nombres SAP en una estructura propiedad del cliente. Puede ignorar estas advertencias aquí y activar la estructura aún así.



5
Programación ABAP / SM35 - ¿Como descargar el LOG de un Batch Input?
« en: 10 de Enero de 2018, 11:05:53 am »
De esta forma sencilla podemos descargarnos el LOG de un Batch Input

1. Usamos la transacción SM35P y seleccionamos el LOG para visualizar.
2. Le damos al icono de la impresora, lo que te mostrará el LOG como un ALV_LIST.
3. En el menú superior vamos a... Sistema -> Lista -> Grabar -> Fichero local



6
Programación ABAP / Re:ayuda - RAWSTRING
« en: 14 de Diciembre de 2017, 05:37:08 pm »
La clase CX_ROOT es la clase más alta de todas las clases de excepción.

Mira en tu DUMP que excepción te esta devolviendo.

Este ejemplo te puede ayudar... TRY CATCH – Ejemplo básico de excepción



7
Links / Descargar SAP GUI o parches
« en: 17 de Noviembre de 2016, 05:39:52 pm »
Hay un sitio WEB llamado Easy Service Marketplace, donde están los links necesarios para descargar el SAP GUI y sus parches.

El link al sitio es: http://www.easymarketplace.de

Específicamente el SAPGUI se encuentra en: http://www.easymarketplace.de/SAPgui-Patches.php


8
Programación ABAP / Pasar un SELECT OPTIONS a un Módulo de Función (SE37)
« en: 17 de Octubre de 2016, 03:47:49 pm »
Alguna vez nos han indicado volcar un programa a una función y a la hora de pasar los Select Options de la pantalla de selección nos entra la duda de como hacerlo.

En principio es bastante sencillo.

Nos imaginamos que tenemos en nuestra pantalla de selección de nuestro programa:

SELECT-OPTIONS: so_bukrs   FOR ekpo-bukrs,
                so_matnr   FOR mara-matnr.


Nos declaramos en nuestra función y en la pestaña de tablas lo siguiente:

s_bukrs LIKE BAPI_RANGESBUKRS
s_matnr LIKE BAPI_RANGESMATNR


Y realizamos la llamada...



 CALL FUNCTION 'ZTU_FUNCION'
    TABLES
      s_bukrs = so_bukrs
      s_matnr = so_matnr
      ti_alv  = gt_alv.



Y dentro de nuestra nueva función ya podemos copiar y pegar nuestro programa y devolver "por ejemplo" nuestra tabla interna del ALV.




Puedes buscar este tipo de estructuras en la SE11...

BAPI_RANGESAUDAT
BAPI_RANGESBLDAT
BAPI_RANGESBSTKD
BAPI_RANGESBSTNK
BAPI_RANGESBUKRS
BAPI_RANGESCASVBELN
BAPI_RANGESEKGRP
BAPI_RANGESEKORG
BAPI_RANGESEQTYP
BAPI_RANGESEQUNR
BAPI_RANGESKDMAT
BAPI_RANGESKIDNO
BAPI_RANGESKTAAR
BAPI_RANGESKTAST
BAPI_RANGESKUNNR
BAPI_RANGESLFART
BAPI_RANGESLIFNR
BAPI_RANGESMATNR
BAPI_RANGESPARNR
BAPI_RANGESPOSTX
BAPI_RANGESRFBSK
BAPI_RANGESSETTLDATE
BAPI_RANGESSPART
BAPI_RANGESUSECASE
BAPI_RANGESVKBUR


etc...

9
Basis / Re:BAISS: Duda Transacción DB13
« en: 09 de Agosto de 2016, 09:37:27 am »
No conozco la transacción, pero me parece que llegas en el menú superior:

Administration > View week

10
Formularios / Re:Problema al traducir un Smartforms con la tx. SE63
« en: 10 de Mayo de 2016, 08:57:31 am »
Parece que el problema ocurre cuando tenemos abiertos dos modos al mismo tiempo.
(Por un lado el Smartforms y por otro la transacción SE63).

De alguna manera se queda en memoria el Smartforms mientras estas con la tx. SE63 abierta y si no te sales del Smartforms es como si luego al activar el Smartforms no hace caso a la traducción realizada y vuelve a cargar los valores anteriores a la traducción.

La solución sería la siguiente:
Utilizar el mismo modo entre el Smartforms y la SE63.

Dentro del mismo modo me salgo del Smartforms y entro en la SE63, traduzco, y volvemos a entrar en el Smartforms. Es un poco coñazo tener que hacerlo así, pero por lo menos funciona.
 

11
Links / Curso SAP BW y SD gratis
« en: 23 de Febrero de 2016, 08:49:37 am »
Hola!
Les escribo para compartirles un sitio web con cursos gratis de diferentes módulos SAP. Si bien por el momento hay solo dos cursos, por lo que dice el sitio web tienen pensado ir agregando mas.

El sitio web es InforSAP.

Dentro del sitio web esta el Curso de SAP BW y el Curso de SAP SD

Espero les sea de utilidad para todos aquellos principiantes en el aprendizaje de este gran ERP! :)

Saludos!

12
Formularios / Re:PDF por EMAIL con opción de "A" y "CC"
« en: 14 de Octubre de 2014, 03:32:11 pm »
Existe un programa de ejemplo en SAP muy bueno que convierte una orden SPOOL a PDF y lo envía como adjunto por MAIL.

BCS_EXAMPLE_8



13
Reports / Flujo de documentos... Factura - Entrega - Pedido...
« en: 15 de Abril de 2014, 01:23:29 pm »
Al programa le informamos de la factura y nos devuelve su flujo de documentos



*&---------------------------------------------------------------------*
*& Report  ZFLUJO_DOC
*&
*&---------------------------------------------------------------------*
*&
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZFLUJO_DOC.


************************************************************************
*INCLUDE
************************************************************************
INCLUDE zalv.
INCLUDE zsdin01.

TABLES: *vbrk.

************************************************************************
*DATA
************************************************************************
DATA: BEGIN OF gt_salida_alv OCCURS 0,
        vbeln              LIKE vbrk-vbeln,
        sfakn              LIKE vbrk-sfakn,
        fkdat              LIKE vbrk-fkdat,
        fkart              LIKE vbrk-fkart,
        vkorg              LIKE vbrk-vkorg,
        vtweg              LIKE vbrk-vtweg,
        kunrg              LIKE vbrk-kunrg,
        kunrg_txt          LIKE kna1-name1,
        posnr              LIKE vbrp-posnr,
        matnr              LIKE vbrp-matnr,
        matnr_txt          LIKE makt-maktx,
        entrega            LIKE likp-vbeln,
        posicion_entrega   LIKE lips-posnr,
        kunwe              LIKE likp-kunnr,
        kunwe_txt          LIKE kna1-name1,
        wadat_ist          LIKE likp-wadat_ist,
        ntgew              LIKE lips-ntgew,
        brgew              LIKE lips-brgew,
        gewei              LIKE lips-gewei,
        pedido             LIKE vbak-vbeln,
        posicion_pedido    LIKE vbap-posnr,
        bstnk              LIKE vbak-bstnk,
        bstdk              LIKE vbak-bstdk,
        ntgew_pedido       LIKE vbap-ntgew,
        brgew_pedido       LIKE vbap-brgew,
        gewei_pedido       LIKE vbap-gewei,
        werks              LIKE vbap-werks,
        werks_txt          LIKE t001w-name1,
        pedido_compras     LIKE ekko-ebeln,
        pos_pedido_compras LIKE ekpo-ebelp,
        reswk              LIKE ekko-reswk,
        reswk_txt          LIKE t001w-name1,
        augbl              LIKE bseg-augbl,       " ODJ 16.11.2010
        dmbtr              LIKE bseg-dmbtr,       " ODJ 16.11.2010
        pswsl              LIKE bseg-pswsl,       " ODJ 16.11.2010

      END   OF gt_salida_alv.


************************************************************************
*SELECT-OPTIONS
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: s_vbeln FOR gt_salida_alv-vbeln,
                s_fkart FOR gt_salida_alv-fkart,
                s_fkdat FOR gt_salida_alv-fkdat,
                s_vkorg FOR gt_salida_alv-vkorg,
                s_vtweg FOR gt_salida_alv-vtweg,
                s_kunrg FOR gt_salida_alv-kunrg,
                s_matnr FOR gt_salida_alv-matnr.

SELECTION-SCREEN SKIP 1.

PARAMETERS: p_gewei  LIKE mara-gewei DEFAULT 'KG' OBLIGATORY.

SELECTION-SCREEN SKIP 1.
PARAMETERS: p_agru RADIOBUTTON GROUP  r1 DEFAULT 'X',
            p_det  RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN SKIP 2.

PARAMETERS: p_vari    LIKE variant-variant.

************************************************************************
*AT SELECTION-SCREEN ON VALUE-REQUEST
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

  DATA: spec_layout TYPE disvariant,
         g_exit TYPE c.

  CLEAR variant.
  variant-report = sy-repid.

  CALL FUNCTION 'LVC_VARIANT_F4'
    EXPORTING
      is_variant = variant
      i_save     = 'A'
    IMPORTING
      e_exit     = g_exit
      es_variant = spec_layout
    EXCEPTIONS
      not_found  = 1
      OTHERS     = 2.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF g_exit NE 'X'.
      p_vari    = spec_layout-variant.
      variant = spec_layout.
    ENDIF.
  ENDIF.


************************************************************************
*START-OF-SELECTION
************************************************************************
START-OF-SELECTION.

  PERFORM tomar_datos.



************************************************************************
*END-OF-SELECTION
************************************************************************
END-OF-SELECTION.

  PERFORM salida_alv.





************************************************************************
*FORMS
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  tomar_datos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM tomar_datos .

  DATA: lt_salida_alv         LIKE gt_salida_alv OCCURS 0
                                                 WITH HEADER LINE.

  DATA: lt_likp               LIKE likp OCCURS 0 WITH HEADER LINE.
  DATA: lt_lips               LIKE lips OCCURS 0 WITH HEADER LINE.
  DATA: lt_vbak               LIKE vbak OCCURS 0 WITH HEADER LINE.
  DATA: lt_vbap               LIKE vbap OCCURS 0 WITH HEADER LINE.
  DATA: lt_ekko               LIKE ekko OCCURS 0 WITH HEADER LINE.
  DATA: lt_kna1               LIKE kna1 OCCURS 0 WITH HEADER LINE.
  DATA: lt_t001w              LIKE t001w OCCURS 0 WITH HEADER LINE.
  DATA: lt_makt               LIKE makt OCCURS 0 WITH HEADER LINE.


  DATA:   lf_subrc              LIKE sy-subrc.
  DATA:   lf_vkorg_error        LIKE zyte81-x_vkorg.

  PERFORM validar_organizacion_ventas
                     TABLES   s_vkorg
                     USING    ''
                     CHANGING lf_subrc
                              lf_vkorg_error.
  IF lf_subrc <> 0.
*   Sin autorización para organización de ventas ....
    MESSAGE i151(jgbp) WITH lf_vkorg_error.
    EXIT.
  ENDIF.


  SELECT vbeln fkart fkdat vkorg vtweg kunrg sfakn
  INTO CORRESPONDING FIELDS OF TABLE lt_salida_alv
  FROM vbrk
  WHERE vbeln IN s_vbeln
    AND fkart IN s_fkart
    AND fkdat IN s_fkdat
    AND vkorg IN s_vkorg
    AND vtweg IN s_vtweg
    AND kunrg IN s_kunrg.





  LOOP AT lt_salida_alv.
    MOVE-CORRESPONDING lt_salida_alv TO gt_salida_alv.

    SELECT posnr matnr
    INTO (gt_salida_alv-posnr, gt_salida_alv-matnr)
    FROM vbrp
    WHERE vbeln =  lt_salida_alv-vbeln
      AND matnr IN s_matnr.


      CLEAR: gt_salida_alv-entrega,
             gt_salida_alv-posicion_entrega,
             gt_salida_alv-pedido,
             gt_salida_alv-posicion_pedido.

      SELECT SINGLE vbelv posnv
      INTO (gt_salida_alv-entrega, gt_salida_alv-posicion_entrega)
      FROM vbfa
      WHERE vbeln   = gt_salida_alv-vbeln
        AND posnn   = gt_salida_alv-posnr
        AND vbtyp_v = 'J'.
      IF sy-subrc <> 0.
        SELECT SINGLE vbelv posnv
        INTO (gt_salida_alv-pedido, gt_salida_alv-posicion_pedido)
        FROM vbfa
        WHERE vbeln   = gt_salida_alv-vbeln
          AND posnn   = gt_salida_alv-posnr
          AND stufe   = '0'.
        IF sy-subrc <> 0.

          SELECT SINGLE vgbel vgpos aubel aupos
           INTO (gt_salida_alv-entrega, gt_salida_alv-posicion_entrega,
                 gt_salida_alv-pedido,  gt_salida_alv-posicion_pedido)
          FROM vbrp
          WHERE vbeln = lt_salida_alv-vbeln
            AND posnr = gt_salida_alv-posnr
            AND vgtyp = 'J'.

        ENDIF.
      ELSE.
        SELECT SINGLE vbelv posnv
        INTO (gt_salida_alv-pedido, gt_salida_alv-posicion_pedido)
        FROM vbfa
        WHERE vbeln   = gt_salida_alv-entrega
          AND posnn   = gt_salida_alv-posicion_entrega
          AND stufe   = '0'.
        IF sy-subrc <> 0.
          SELECT SINGLE vgbel vgpos
          INTO (gt_salida_alv-pedido_compras,
                gt_salida_alv-pos_pedido_compras)
          FROM lips
        WHERE vbeln = gt_salida_alv-entrega
          AND posnr = gt_salida_alv-posicion_entrega.
        ENDIF.
      ENDIF.

      APPEND gt_salida_alv.
    ENDSELECT.

  ENDLOOP.

  SORT gt_salida_alv BY vbeln           posnr
                        entrega         posicion_entrega
                        pedido          posicion_pedido
                        pedido_compras  pos_pedido_compras.




  IF NOT gt_salida_alv[] IS INITIAL.

*   Datos entrega, cabecera
    SELECT vbeln kunnr wadat_ist
    INTO CORRESPONDING FIELDS OF TABLE lt_likp
    FROM likp
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE vbeln = gt_salida_alv-entrega.

    LOOP AT lt_likp.
      gt_salida_alv-kunwe     = lt_likp-kunnr.
      gt_salida_alv-wadat_ist = lt_likp-wadat_ist.
      MODIFY gt_salida_alv TRANSPORTING kunwe wadat_ist
                           WHERE entrega = lt_likp-vbeln.
    ENDLOOP.

*   Datos entrega, posición
    SELECT vbeln posnr matnr ntgew brgew gewei
    INTO CORRESPONDING FIELDS OF TABLE lt_lips
    FROM lips
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE vbeln = gt_salida_alv-entrega
      AND posnr = gt_salida_alv-posicion_entrega.

    LOOP AT lt_lips.
      gt_salida_alv-gewei = p_gewei.

      IF p_gewei <> lt_lips-gewei.

        CALL FUNCTION 'Z_FT_CONVERTIR_UNIDADES'
          EXPORTING
            matnr    = lt_lips-matnr
            meinh    = lt_lips-gewei
            meins    = p_gewei
            cantidad = lt_lips-brgew
          IMPORTING
            salida   = gt_salida_alv-brgew.
        CALL FUNCTION 'Z_FT_CONVERTIR_UNIDADES'
          EXPORTING
            matnr    = lt_lips-matnr
            meinh    = lt_lips-gewei
            meins    = p_gewei
            cantidad = lt_lips-ntgew
          IMPORTING
            salida   = gt_salida_alv-ntgew.
      ELSE.
        gt_salida_alv-ntgew = lt_lips-ntgew.
        gt_salida_alv-brgew = lt_lips-brgew.
      ENDIF.

      MODIFY gt_salida_alv TRANSPORTING ntgew brgew gewei
                           WHERE entrega          = lt_lips-vbeln
                             AND posicion_entrega = lt_lips-posnr.
    ENDLOOP.


*   Datos pedido ventas, cabecera
    SELECT vbeln bstnk bstdk
    INTO CORRESPONDING FIELDS OF TABLE lt_vbak
    FROM vbak
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE vbeln = gt_salida_alv-pedido.

    LOOP AT lt_vbak.
      gt_salida_alv-bstnk = lt_vbak-bstnk.
      gt_salida_alv-bstdk = lt_vbak-bstdk.
      MODIFY gt_salida_alv TRANSPORTING bstnk bstdk
                           WHERE pedido = lt_vbak-vbeln.
    ENDLOOP.


*   Datos pedido ventas, posición
    SELECT vbeln posnr ntgew brgew gewei werks
    INTO CORRESPONDING FIELDS OF TABLE lt_vbap
    FROM vbap
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE vbeln = gt_salida_alv-pedido
      AND posnr = gt_salida_alv-posicion_pedido.

    LOOP AT lt_vbap.

      gt_salida_alv-werks        = lt_vbap-werks.
      gt_salida_alv-gewei_pedido = p_gewei.

      IF p_gewei <> lt_vbap-gewei.
        CALL FUNCTION 'Z_FT_CONVERTIR_UNIDADES'
          EXPORTING
            matnr    = lt_lips-matnr
            meinh    = lt_lips-gewei
            meins    = p_gewei
            cantidad = lt_vbap-brgew
          IMPORTING
            salida   = gt_salida_alv-brgew_pedido.
        CALL FUNCTION 'Z_FT_CONVERTIR_UNIDADES'
          EXPORTING
            matnr    = lt_lips-matnr
            meinh    = lt_lips-gewei
            meins    = p_gewei
            cantidad = lt_vbap-ntgew
          IMPORTING
            salida   = gt_salida_alv-ntgew_pedido.
      ELSE.
        gt_salida_alv-ntgew_pedido = lt_vbap-ntgew.
        gt_salida_alv-brgew_pedido = lt_vbap-brgew.
      ENDIF.

      MODIFY gt_salida_alv TRANSPORTING ntgew_pedido
                                        brgew_pedido
                                        gewei_pedido
                                        werks
                           WHERE pedido           = lt_vbap-vbeln
                             AND posicion_pedido  = lt_vbap-posnr.
    ENDLOOP.


    SELECT ebeln reswk
    INTO CORRESPONDING FIELDS OF TABLE lt_ekko
    FROM ekko
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE ebeln = gt_salida_alv-pedido_compras.

    LOOP AT lt_ekko.
      gt_salida_alv-reswk = lt_ekko-reswk.
      MODIFY gt_salida_alv TRANSPORTING reswk
                           WHERE pedido_compras = lt_ekko-ebeln.
    ENDLOOP.





*   Descripción de Resp. Pago, Dest. Mercancía
    SELECT kunnr name1
    INTO CORRESPONDING FIELDS OF TABLE lt_kna1
    FROM kna1
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE kunnr = gt_salida_alv-kunrg
       OR kunnr = gt_salida_alv-kunwe.

    LOOP AT lt_kna1.
      gt_salida_alv-kunrg_txt = lt_kna1-name1.
      MODIFY gt_salida_alv TRANSPORTING kunrg_txt
                           WHERE kunrg = lt_kna1-kunnr.
      gt_salida_alv-kunwe_txt = lt_kna1-name1.
      MODIFY gt_salida_alv TRANSPORTING kunwe_txt
                           WHERE kunwe = lt_kna1-kunnr.
    ENDLOOP.


*   Datos asociados a los centros
    SELECT werks name1
    INTO CORRESPONDING FIELDS OF TABLE lt_t001w
    FROM t001w
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE werks = gt_salida_alv-werks
       OR werks = gt_salida_alv-reswk.

    LOOP AT lt_t001w.
      gt_salida_alv-werks_txt = lt_t001w-name1.
      MODIFY gt_salida_alv TRANSPORTING werks_txt
                           WHERE werks = lt_t001w-werks.
      gt_salida_alv-reswk_txt = lt_t001w-name1.
      MODIFY gt_salida_alv TRANSPORTING reswk_txt
                           WHERE reswk = lt_t001w-werks.
    ENDLOOP.

*   Textos de material
    SELECT matnr maktx
    INTO CORRESPONDING FIELDS OF TABLE lt_makt
    FROM makt
    FOR ALL ENTRIES IN gt_salida_alv
    WHERE matnr = gt_salida_alv-matnr
      AND spras = sy-langu.

    LOOP AT lt_makt.
      gt_salida_alv-matnr_txt = lt_makt-maktx.
      MODIFY gt_salida_alv TRANSPORTING matnr_txt
                           WHERE matnr = lt_makt-matnr.
    ENDLOOP.


*   Añadimos el doc. compensado y el importe
    DATA: lf_vbeln LIKE gt_salida_alv-vbeln.
    LOOP AT gt_salida_alv.
      SELECT SINGLE bukrs INTO *vbrk-bukrs FROM *vbrk
                     WHERE vbeln = gt_salida_alv-vbeln.

      SELECT SINGLE augbl dmbtr pswsl
               INTO (gt_salida_alv-augbl, gt_salida_alv-dmbtr,
                     gt_salida_alv-pswsl)
               FROM bseg
              WHERE bukrs = *vbrk-bukrs
                AND belnr = gt_salida_alv-vbeln
                AND augbl <> space
                AND bschl = '01'.     " Facturas

      IF gt_salida_alv-vbeln <> lf_vbeln.
        lf_vbeln = gt_salida_alv-vbeln.   " Solo una vez por factura
      ELSE.
        CLEAR gt_salida_alv-dmbtr.
      ENDIF.

      MODIFY gt_salida_alv.
    ENDLOOP.

  ENDIF.


ENDFORM.                    " tomar_datos

*&---------------------------------------------------------------------*
*&      Form  SALIDA_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM salida_alv .

  DATA: lf_alv_repid          LIKE sy-repid.

  DATA: ls_alv_doc_layout     TYPE slis_layout_alv,
        lt_alv_doc_fieldcat   TYPE slis_t_fieldcat_alv,
        ls_alv_doc_fieldcat   TYPE slis_fieldcat_alv.
  DATA: ls_alv_doc_variant    LIKE disvariant.

  DATA: lt_salida_alv         LIKE gt_salida_alv OCCURS 0
                                                 WITH HEADER LINE.

  lf_alv_repid = 'ZFLUJO_DOC'.


* Tomamos el catálogo de campos.
  PERFORM obt_descrip_campos_tabla USING lf_alv_repid
                                         'GT_SALIDA_ALV'.


  PERFORM cambio_descripcion USING:
  'POSNR'               text-001  text-001  text-001  text-001,
  'POSICION_ENTREGA'    text-002  text-002  text-002  text-002,
  'POSICION_PEDIDO'     text-003  text-003  text-003  text-003,
  'POS_PEDIDO_COMPRAS'  text-004  text-004  text-004  text-004.


  PERFORM copia_descripcion USING: 'KUNRG_TXT'  'KUNRG',
                                   'KUNWE_TXT'  'KUNWE',
                                   'WERKS_TXT'  'WERKS',
                                   'RESWK_TXT'  'RESWK'.


  PERFORM carac_gen_listado.

  PERFORM asign_o_quitar_campo_clave USING: 'VBELN'              ' ',
                                            'POSNR'              ' ',
                                            'ENTREGA'            ' ',
                                            'POSICION_ENTREGA'   ' ',
                                            'PEDIDO'             ' ',
                                            'POSICION_PEDIDO'    ' ',
                                            'PEDIDO_COMPRAS'     ' ',
                                            'POS_PEDIDO_COMPRAS' ' '.

  PERFORM activar_hotspot USING: 'VBELN'           'X',
                                 'SFAKN'           'X',
                                 'ENTREGA'         'X',
                                 'PEDIDO'          'X',
                                 'PEDIDO_COMPRAS'  'X'.


  ls_alv_doc_variant-report  = lf_alv_repid.
  ls_alv_doc_variant-variant = p_vari.



  IF p_det IS INITIAL.

    LOOP AT gt_salida_alv.
      lt_salida_alv = gt_salida_alv.

      CLEAR: lt_salida_alv-posnr,
             lt_salida_alv-matnr,
             lt_salida_alv-matnr_txt,
             lt_salida_alv-posicion_entrega,
             lt_salida_alv-posicion_pedido,
             lt_salida_alv-pos_pedido_compras.
      COLLECT lt_salida_alv.
    ENDLOOP.

    gt_salida_alv[] = lt_salida_alv[].

    PERFORM eliminar_campos USING: 'POSNR',
                                   'MATNR',
                                   'MATNR_TXT',
                                   'POSICION_ENTREGA',
                                   'POSICION_PEDIDO',
                                   'POS_PEDIDO_COMPRAS'.

  ENDIF.

  PERFORM eliminar_campos USING: 'NTGEW',
                                 'BRGEW',
                                 'GEWEI',
                                 'NTGEW_PEDIDO',
                                 'BRGEW_PEDIDO',
                                 'GEWEI_PEDIDO',
                                 'WERKS',
                                 'WERKS_TXT',
                                 'PEDIDO_COMPRAS',
                                 'POS_PEDIDO_COMPRAS',
                                 'ERSWK',
                                 'RESWK_TXT'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = lf_alv_repid
      is_layout               = layout
      it_fieldcat             = fieldtab
      i_callback_user_command = 'USER_COMMAND'
      i_default               = 'X'
      i_save                  = 'A'
      is_variant              = ls_alv_doc_variant
    TABLES
      t_outtab                = gt_salida_alv
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 99.



ENDFORM.                    " SALIDA_ALV

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM user_command USING pf_ucomm    TYPE sy-ucomm
                        ps_selfield TYPE slis_selfield.

  DATA: lf_ebeln              LIKE  ekko-ebeln.

  CASE pf_ucomm.
    WHEN '&IC1'.
      CASE ps_selfield-fieldname.
        WHEN 'VBELN' OR 'SFAKN'.
          CHECK NOT ps_selfield-value IS INITIAL.
          SET PARAMETER ID 'VF' FIELD ps_selfield-value.
          CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.

        WHEN 'ENTREGA'.
          CHECK NOT ps_selfield-value IS INITIAL.
          SET PARAMETER ID 'VL' FIELD ps_selfield-value.
          CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

        WHEN 'PEDIDO'.
          CHECK NOT ps_selfield-value IS INITIAL.
          SET PARAMETER ID 'AUN' FIELD ps_selfield-value.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

        WHEN 'PEDIDO_COMPRAS'.
          CHECK NOT ps_selfield-value IS INITIAL.

          CLEAR gt_salida_alv.
          READ TABLE gt_salida_alv INDEX ps_selfield-tabindex.
          CHECK sy-subrc = 0.

          CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
            EXPORTING
              i_ebeln              = gt_salida_alv-pedido_compras
              i_ebelp              = gt_salida_alv-pos_pedido_compras
              i_enjoy              = 'X'
              i_display_only       = 'X'
            EXCEPTIONS
              not_found            = 1
              no_authority         = 2
              invalid_call         = 3
              preview_not_possible = 4
              OTHERS               = 5.

      ENDCASE.
  ENDCASE.

ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  cambio_descripcion
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM cambio_descripcion USING pf_fieldname
                              pf_scrtext_l
                              pf_scrtext_m
                              pf_scrtext_s
                              pf_coltext.

  READ TABLE fieldtab WITH KEY fieldname = pf_fieldname ASSIGNING <fs>.
  IF sy-subrc EQ 0.
    <fs>-seltext_l    = pf_scrtext_l.
    <fs>-seltext_m    = pf_scrtext_m.
    <fs>-seltext_s    = pf_scrtext_s.
    <fs>-reptext_ddic = pf_coltext.
  ENDIF.

ENDFORM.                    " cambio_descripcion

*&---------------------------------------------------------------------*
*&      Form  copia_descripcion
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM copia_descripcion USING pf_fieldname_destino
                             pf_fieldname_origen.

  FIELD-SYMBOLS: <lfs_fieldtab> TYPE slis_fieldcat_alv.

  READ TABLE fieldtab WITH KEY fieldname = pf_fieldname_origen
                      ASSIGNING <lfs_fieldtab>.

  CHECK sy-subrc = 0.

  READ TABLE fieldtab WITH KEY fieldname = pf_fieldname_destino
                      ASSIGNING <fs>.
  IF sy-subrc EQ 0.
    <fs>-seltext_l    = <lfs_fieldtab>-seltext_l.
    <fs>-seltext_m    = <lfs_fieldtab>-seltext_m.
    <fs>-seltext_s    = <lfs_fieldtab>-seltext_s.
    <fs>-reptext_ddic = <lfs_fieldtab>-reptext_ddic.
  ENDIF.

ENDFORM.                    " cambio_descripcion

*&---------------------------------------------------------------------*
*&      Form  activar_hotspot
*&---------------------------------------------------------------------*
FORM eliminar_campos USING p1 TYPE slis_fieldname.

  READ TABLE fieldtab WITH KEY fieldname = p1 ASSIGNING <fs>.
  IF sy-subrc = 0.
    <fs>-no_out = 'X'.
    <fs>-tech   = 'X'.
  ENDIF.

ENDFORM.                    " activar_hotspot

14
Reports / Re:Duplicidad en tabla EKKI
« en: 15 de Abril de 2014, 12:50:44 pm »
Otro programa similar pero mejorado...


*&---------------------------------------------------------------------*
*& Report  ZEKKI_MEJORADO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZEKKI_MEJORADO.

INCLUDE: zalv.


DATA: gt_ekki                LIKE ekki OCCURS 0 WITH HEADER LINE.

SELECT-OPTIONS: s_ebeln FOR gt_ekki-ebeln OBLIGATORY.
SELECT-OPTIONS: s_klief FOR gt_ekki-klief.
SELECT-OPTIONS: s_lifnr FOR gt_ekki-lifnr.

SELECTION-SCREEN SKIP 2.

PARAMETERS: p_real AS CHECKBOX.

START-OF-SELECTION.

  SELECT * INTO TABLE gt_ekki
  FROM ekki
  WHERE ebeln IN s_ebeln.

  SORT gt_ekki BY ebeln ASCENDING
                  klief ASCENDING
                  lifnr ASCENDING.


  IF NOT p_real IS INITIAL.
    LOOP AT gt_ekki.
      DELETE ekki FROM gt_ekki.
    ENDLOOP.
    COMMIT WORK AND WAIT.
    MESSAGE s836(sd) WITH 'Registros borrados'.
  ELSE.
    MESSAGE s836(sd) WITH 'Registros NO borrados'.
  ENDIF.


  PERFORM mostrar_alv.


*&---------------------------------------------------------------------*
*&      Form  mostrar_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM mostrar_alv .

  DATA: lf_alv_repid          LIKE sy-repid.

  DATA: lt_sort               TYPE slis_t_sortinfo_alv.
  DATA: ls_sort               TYPE slis_sortinfo_alv.

  DATA: lt_fieldtab           TYPE slis_t_fieldcat_alv.
  DATA: ls_fieldtab           TYPE slis_fieldcat_alv.


  lf_alv_repid = sy-repid.

  PERFORM obt_descrip_campos_tabla USING lf_alv_repid
                                         'GT_EKKI'.

  PERFORM activar_hotspot USING: 'EBELN'   'X'.

  PERFORM carac_gen_listado.


  ls_fieldtab-ddictxt = 'M'.
  MODIFY fieldtab FROM ls_fieldtab TRANSPORTING ddictxt
                                   WHERE fieldname <> space.

  DATA: lf_grid_title TYPE lvc_title.
  IF NOT p_real IS INITIAL.
    lf_grid_title = 'Registros borrados'.
  ELSE.
    lf_grid_title = 'Registros NO borrados'.
  ENDIF.



* Mostramos el listado
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = lf_alv_repid
      is_layout               = layout
      it_fieldcat             = fieldtab
      it_sort                 = lt_sort
      i_callback_user_command = 'USER_COMMAND'
      i_grid_title            = lf_grid_title
*     i_default               = ' '
*     i_save                  = 'A'
*     is_variant              = variant
    TABLES
      t_outtab                = gt_ekki
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 99.

  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.


ENDFORM.                    " mostrar_alv

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM user_command USING pf_ucomm TYPE sy-ucomm
                        ps_selfield TYPE slis_selfield.

  DATA: ls_venum TYPE hum_venum,
        lt_venum TYPE hum_venum_t.


  CASE pf_ucomm.
    WHEN '&IC1'.

      READ TABLE gt_ekki INDEX ps_selfield-tabindex.

      CHECK NOT gt_ekki-ebeln IS INITIAL.

      CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
        EXPORTING
          i_ebeln              = gt_ekki-ebeln
          i_enjoy              = 'X'
          i_display_only       = 'X'
        EXCEPTIONS
          not_found            = 1
          no_authority         = 2
          invalid_call         = 3
          preview_not_possible = 4
          OTHERS               = 5.


  ENDCASE.

ENDFORM.                    "USER_COMMAND

15
Programación ABAP / Re:Leer Bascula / puerto serial
« en: 15 de Abril de 2014, 08:18:12 am »
Por lo que nos comentas, no tengo ninguna duda que lo mejor es lo que nos comentas. Para nosotros acceder a una tabla SQL es sencillo y seguro.

Saludos,


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