Ayuda con Items en un pedido

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • JELR87
    Junior Member
    • abr
    • 7

    #1

    Ayuda con Items en un pedido

    buenas tardes Abapers

    Tengo el siguiente problema espero que alguien me pueda apoyar estoy dando de alta pedidos de ventas con la bapi BAPI_SALESDOCUMENT_CREATFROMDAT2 para esto claro todo funciona de maravilla si el pedido tiene un item, pero si tiene dos pues ahi es donde camina, la carga es desde un archivo csv separado por lineas y despues por campos en cada coma, el detalle es que aun no encuentro la manera de ordenar la informacion para que para un mismo pedido se agregen dos o mas items a la bapi, tratare de imitar el archivo de carga de la siguiente manera:

    Clase Org div canal Solicitante N.pedido Fecha Material cantidad
    ZTA 2200 1 1 100000000 190 13.17.2010 300000000 1
    ZTA 2200 1 1 100000000 190 13.17.2010 400000000 10
    ZTA 2200 1 1 100000000 190 13.17.2010 800000000 15
    ZTA 2200 1 1 100000000 20 25.10.2010 300000000 6
    ZTA 2200 1 1 100000000 30 05.5.2010 300000000 9
    ZTA 2200 1 1 100000000 800 26.01.2009 300000000 17
    ZTA 2200 1 1 100000000 100 02.10.2008 300000000 90
    ZTA 2200 1 1 100000000 10 27.01.1987 300000000 100

    hasta el momento tengo todo en una Tabla Interna pero al momento de meterlo a la bapi, no encuentro la manera de enviarle varios materiales en un solo Loop porque el loop me lee linea por linea de la TI, alguien que tenga alguna recomendacion, me dijeorn que podia usar Loop At End y con eso quedaba pero aun no encuentro ejemplos consisos a mi escenario, pero sigo investigando, ovbio no hace falta mencionar que soy Jr y novato en el Lenguaje ABAP.

    Este es parte del codigo que llevo:

    Form para llenar la TI.

    Código:
    Form llenatabla_pedido.
    
      LOOP AT it_datatab ASSIGNING <fs_string>.
        SPLIT <fs_string> AT c_comma INTO
                        wa_record-p_auart
                        wa_record-p_vkorg
                        wa_record-p_vtweg
                        wa_record-p_spart
                        wa_record-p_sold
                        "wa_record-p_ship
                        wa_record-p_ordnum
                        wa_record-p_pdate
                        wa_record-p_matnr
                        wa_record-p_menge.
    
        MOVE sy-tabix TO wa_record-llave.
        MOVE sy-tabix TO wa_error-llave.
        MOVE 0 TO wa_record-estatus.
    
    
    *Cambia el formato fecha de DD.MM.AAAA a AAAAMMDD.
        CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
          EXPORTING
            DATE_EXTERNAL            = wa_record-p_pdate
          IMPORTING
            DATE_INTERNAL            = wa_record-p_pdate
          EXCEPTIONS
            DATE_EXTERNAL_IS_INVALID = 1
            OTHERS                   = 2.
    
    *Rellena con ceros a la izquierda el campo de solicitante.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = wa_record-p_sold
          IMPORTING
            OUTPUT = wa_record-p_sold.
    
    *Rellena con ceros a la izquierda el campo de material.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = wa_record-p_matnr
          IMPORTING
            OUTPUT = wa_record-p_matnr.
    
        APPEND wa_record to it_record.
      endloop.
    sort it_record by p_ordnum.
    
    ENDFORM.
    y con lo que estoy trabado es el form para pasar lOS DIFERENTES ITEMS A UNA BAPI.

    Saludos

    PD si no me explique bien diganme para re-plantearlo.
  • bisonye
    Senior Member
    • ago
    • 635

    #2
    Pues no acabo de entender tu duda, pero creo que es por que es viernes y estoy espesito...

    A ver, según veo tu tabla tienes mezclados los datos de cabecera y posición y entiendo que tu problema es separarlos.

    Como el primer campo que cambia es la posición puedes utilizar at new (cuando cambia la entrada) y at end of (en la última línea antes del cambio).

    Creo que puedes hacer el control de cabeceras con la fecha. At new fecha sería la primera línea de posición de esa cabecera at end of fecha sería la última línea de posición de esa cabecera.

    No se si me explico.

    Saludos
    http://sapymas.blogspot.com/

    Comentario

    • Dennis Urbano E.
      Junior Member
      • nov
      • 28

      #3
      Lo que entendí es que debes hacer esto:


      Código:
      Loop at it_data.
      
      AT NEW Pedido.
      Llenas datos de cabecera para la bapi
      endat.
      
      Llenas datos de posiciones
      
      At end of pedido.
      
      CALL BAPI
      
      endat.
      
      endloop.
      Espero sea eso lo que busques, es algo asi como lo que dijo Bisonye

      Comentario

      Trabajando...