IDOC Factura Electrónica.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • edgar_par87
    Junior Member
    • nov
    • 21

    #1

    IDOC Factura Electrónica.

    Qué tal foreros, aquí de nuevo molestándolos con una consulta:

    Existe una BADI que obtiene la información aduanera para factura electrónica de la siguiente manera:

    Código:
    loop at it_xvbrp into ls_vbrp.
        refresh:
          lts_valtab, lts_chartab, lts_atttab.
    
        clear l_batch.
    
        select single charg
            from lips
            into l_batch
            where
                vbeln eq ls_vbrp-vgbel and
                uecha eq ls_vbrp-vgpos and
                matnr eq ls_vbrp-matnr.
    
        IF sy-subrc <> 0.
    
          SELECT SINGLE
                 charg
            FROM lips
            INTO l_batch
           WHERE vbeln = ls_vbrp-vgbel
             AND matnr = ls_vbrp-matnr.
    
        ENDIF.
    
        call function 'QC01_BATCH_VALUES_READ'
        exporting
            i_val_matnr          = ls_vbrp-matnr
            i_val_werks          = ls_vbrp-werks
            i_val_charge         = l_batch
            i_language           = sy-langu
         tables
           t_val_tab            = lts_valtab
           t_char_tab           = lts_chartab
           t_att_tab            = lts_atttab
         exceptions
           no_class             = 1
           internal_error       = 2
           no_values            = 3
           no_chars             = 4
           others               = 5.
    
        clear ls_item_custom.
        loop at lts_valtab into ls_valtab.
          case ls_valtab-atnam.
            when 'YB_PEDIMENTO'.
              ls_item_custom-customs_doc_nr = ls_valtab-atwrt.
            when 'YB_FECHADEPEDIMENTO'.
              concatenate ls_valtab-atwrt+6(4) ls_valtab-atwrt+3(2) ls_valtab-atwrt+0(2) into ls_item_custom-customs_doc_date.
    
            when 'YB_ADUANA_ENT'.
              ls_item_custom-customs_office = ls_valtab-atwrt.
          endcase.
        endloop.
    
        ls_item_custom-vbeln = ls_vbrp-vbeln.
        ls_item_custom-posnr = ls_vbrp-posnr.
        append ls_item_custom to ct_item_customs.
    
      endloop.
    Lo que a mi me solicitaron fue que en lugar de obtener el lote (CHARG) de la tabla LIPS, lo obtenga directamente de la tabla VBRP (la tabla que se está loopeando), esto porque con el código actual, así vengan 1000 lotes, sólo obtiene información aduanera de uno (en la tabla CT_ITEM_CUSTOMS se guarda este lote). Sin embargo, al realizar las modificaciones (ahora en la tabla CT_ITEM_CUSTOMS se guarda la información de todos los lotes) el idoc no me genera el XML, marca el error "El IDOC no se puede enviar a una puerta XML".

    Revisando en la WE02 noté que el idoc con mis modificaciones se genera distinto, es decir en el original viene SEGMENTO X y dentro de este viene SEGMENTO Y, SEGMENTO Z, pero en el mío viene SEGMENTO X, SEGMENTO Y y SEGMENTO Z (Y y Z vienen fuera del SEGMENTO X).

    ¿Alguna idea de por qué es el error? Es la primera vez que me meto en este tema de los idocs y no entiendo mucho. Agradezco cualquier orientación que me puedan dar.

    Saludos!!
  • DCErick
    Moderator
    • mar
    • 1090

    #2
    ¿Podrías mostrar cual es el código que tu dejaste?
    -------------------
    ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

    Comentario

    • edgar_par87
      Junior Member
      • nov
      • 21

      #3
      IDOC Factura Electrónica.

      Este es el código que dejé:

      Código:
      loop at it_xvbrp into ls_vbrp.
          refresh:
            lts_valtab, lts_chartab, lts_atttab.
      
          clear l_batch.
      
          l_batch = ls_vbrp-charg.
      
          IF l_batch IS NOT INITIAL.
      
            call function 'QC01_BATCH_VALUES_READ'
            exporting
                i_val_matnr          = ls_vbrp-matnr
                i_val_werks          = ls_vbrp-werks
                i_val_charge         = l_batch
                i_language           = sy-langu
             tables
               t_val_tab            = lts_valtab
               t_char_tab           = lts_chartab
               t_att_tab            = lts_atttab
             exceptions
               no_class             = 1
               internal_error       = 2
               no_values            = 3
               no_chars             = 4
               others               = 5.
      
            clear ls_item_custom.
            loop at lts_valtab into ls_valtab.
              case ls_valtab-atnam.
                when 'YB_PEDIMENTO'.
                  ls_item_custom-customs_doc_nr = ls_valtab-atwrt.
                when 'YB_FECHADEPEDIMENTO'.
                  concatenate ls_valtab-atwrt+6(4) ls_valtab-atwrt+3(2) ls_valtab-atwrt+0(2) into ls_item_custom-customs_doc_date.
                when 'YB_ADUANA_ENT'.
                  ls_item_custom-customs_office = ls_valtab-atwrt.
              endcase.
            endloop.
      
            ls_item_custom-vbeln = ls_vbrp-vbeln.
            ls_item_custom-posnr = ls_vbrp-aupos.
            append ls_item_custom to ct_item_customs.
      
          ENDIF.
      
        endloop.
      Asigné directamente el CHARG y en la tabla CT_ITEM_CUSTOMS en lugar de asignarle el POSNR le asigno AUPOS (esto porque necesito que todos traigan la misma posición para que arme correctamente la cadena ya que la función IDMX_DI_SD_DATA_EXTRACT sólo toma en cuenta la posición 10 para el armado de la cadena e ignora las demás). Tal vez esto último esté causando el error.

      Saludos!!

      Comentario

      • DCErick
        Moderator
        • mar
        • 1090

        #4
        Oye pero el campo POSNR contiene la posición del item en la factura y el AUPOS si mal no recuerdo es la posicion del item en el pedido. Yo creo que deberias dejar el POSNR.
        -------------------
        ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

        Comentario

        • edgar_par87
          Junior Member
          • nov
          • 21

          #5
          IDOC Factura Electrónica.

          Te explico por qué me pidieron asignar AUPOS. En la función IDMX_DI_SD_DATA_EXTRACT viene el siguiente código:

          Línea 722 a 735:
          Código:
          ls_item_customs-vbeln = is_xvbrk-vbeln.
              ls_item_customs-posnr = ls_xvbrp-posnr.
          
          * CUSTOMS DOCUMENT NUMBER
          
              clear ls_item_customs-customs_doc_nr.
          
          * CUSTOMS DOCUMENT DATE OF ISSUANCE
              clear ls_item_customs-customs_doc_date.
          
          * CUSTOMS OFFICE
              clear ls_item_customs-customs_office.
          
              append ls_item_customs to lt_item_customs.
          La tabla lt_item_customs queda con un registro sólo con VBELN y POSNR (10). Posteriormente se hace esto:

          Línea 849:
          Código:
          lt_item_customs_ref[] = lt_item_customs[].
          Hace como un respaldo y LT_ITEM_CUSTOMS_REF queda con el registro (POSNR = 10). Luego llama a la BADI:

          Línea 881:
          Código:
          try.
                call badi lr_badi_di_sddata_det->get_line_item_customs
                  exporting
                    it_xvbrp        = it_xvbrp
                    is_xvbrk        = is_xvbrk
                    it_xvbpa        = it_xvbpa
                    it_xkomv        = it_xkomv
                  changing
                    ct_item_customs = lt_item_customs.
          
              catch cx_badi_not_implemented.
            endtry.
          Si se asigna POSNR, LT_ITEM_CUSTOMS queda, como bien mencionas, con la posición del item en la factura (10, 11 y 12 por ejemplo), pero al salir de la BADI se arma la cadena y viene el siguiente código:

          Línea 936:
          Código:
          READ TABLE lt_item_customs_ref[] INDEX lv_tabix ASSIGNING
              <fs_item_customs_ref>.
              LOOP AT lt_item_customs INTO ls_item_customs
              WHERE vbeln = <fs_item_customs_ref>-vbeln
              AND posnr = <fs_item_customs_ref>-posnr
              AND NOT customs_doc_nr IS INITIAL
              AND NOT customs_doc_date IS INITIAL
              AND NOT customs_office IS INITIAL.
                ls_customs_data-cust_doc = ls_item_customs-customs_doc_nr.
               ls_customs_data-office_doc_issued = ls_item_customs-customs_office
               .
                CONCATENATE ls_item_customs-customs_doc_date(4) '-'
                ls_item_customs-customs_doc_date+4(2)
                '-' ls_item_customs-customs_doc_date+6(2) INTO
                ls_customs_data-date_doc_issued.
                APPEND ls_customs_data TO <fs_line_item>-customs_data.
          
          
                PERFORM customs
                            USING
                               ls_item_customs-customs_doc_nr
                               ls_item_customs-customs_doc_date(4)
                               ls_item_customs-customs_doc_date+4(2)
                               ls_item_customs-customs_doc_date+6(2)
                               ls_item_customs-customs_office
                            CHANGING
                               lv_customs_doc_nr_string
                               lv_customs_doc_date_string
                               lv_customs_office_string.
              ENDLOOP.
          Se lee el registro que trae LT_ITEM_CUSTOMS_REF (POSNR = 10) y el LOOP valida que el POSNR sea igual a 10, por lo tanto sólo agrega un registro de información aduanera a la cadena (ignora la 11 y 12). Asignando AUPOS se obliga a que todos traigan la posición 10 y la cadena sale correctamente pero el IDOC me marca el error que menciono =S.

          Realmente no le encuentro pies ni cabeza a este tema.

          Muchas gracias por tus respuestas DCErick.

          Saludos!!

          Comentario

          • DCErick
            Moderator
            • mar
            • 1090

            #6
            Ok ya ví todo eso estoy a punto de bomitar, ya me enfermaste jajja y tengo que manejar 14 hrs .

            La factura se mueve en base al POSNR no hay otro campo, si lo cambias perderas los indices para las sigiuentes busquedas.


            *Línea 911 <- 911 jajajaa SOS :P
            loop at ls_data_extract-wa_line_items assigning <fs_line_item>.
            lv_tabix = sy-tabix.

            *Antes de estoy ya estas en otro LOOP.
            READ TABLE lt_item_customs_ref[] INDEX lv_tabix ASSIGNING
            Verifica como te quedan la tabla ct_item_customs despues de obtener la información aduanera.
            Según yo si la factura tiene 3 posiciones tu tendrías algo similar:

            REG VBELN POSNR ..........
            1 0091 10 .............
            2 0091 20 ..............
            3 0091 30 ..............

            Felíz Navidad
            -------------------
            ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

            Comentario

            • edgar_par87
              Junior Member
              • nov
              • 21

              #7
              IDOC Factura Electrónica.

              Buen día:

              Al final nos apoyamos con un experto que ya ha implementado Factura Electrónica y nos dijo que el Idoc y la Cadena son dos temas diferentes. Para la cadena efectivamente los cambios que realicé fueron correctos pero además había que agregar un código parecido a nivel Idoc dentro de un User Exit que llenaba los segmentos de la ampliación. Ya con eso quedó solucionado este tema.

              Muchas gracias por el apoyo DCErick y sobre todo por tu valioso tiempo.

              Saludos!!

              Feliz Navidad y Año Nuevo

              Comentario

              • pzambroc
                Junior Member
                • ago
                • 10

                #8
                Creacion De Un Idoc Para Factura Electronica

                Porfavor alguien que me ayude a configurar el IDOC para Factura Electronica.

                Ya tengo el mapeo de todos los campos sin embargo no se ni como empezar para la configuración del IDOC.

                Muchas gracias

                mi skype pzambroc mi correo personal pe_r_la@hotmail.com
                Perla Z. –Consultor Junior
                Monterrey México

                Comentario

                Trabajando...