Problema en posible sumatoria

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • naotosx
    Junior Member
    • dic
    • 5

    #1

    Problema en posible sumatoria

    Buenas estoy en mi periodo de aprendizaje y me dieron un ejercicio a resolver y llevo todo el dia viendo y no consigo que es en realidad un caso real pero me dan bastante tiempo

    Transaccion estandar: S_P00_07000134

    y lo que debo modificar es un smartform y tiene un codigo:

    DATA: lt_bseg TYPE TABLE OF bseg,
    lw_bseg TYPE bseg,
    lv_QSATZ type WITH_ITEM-QSATZ,
    lv_dmbtr TYPE dmbtr,
    LV_PORCE TYPE I.
    FIELD-SYMBOLS: <ls_bseg> TYPE bseg.
    DATA: lv_blart TYPE blart.
    CLEAR: vat_rate, vat_base, vat_12, vat_15.


    * Generate sequecial number
    counter = counter + 1.
    IF wa_fidoc-wt_xdmbtr1 GT 0.
    * Get VAT Data
    *VAT_RATE = ( wa_fidoc-ve_taxhb / wa_fidoc-wt_xdmbtr1 ) * 100.
    * vat_rate = ( wa_fidoc-ve_taxhh / wa_fidoc-wt_xdmbtr2 ) * 100.
    vat_rate = ( wa_fidoc-ve_taxhh / wa_fidoc-wt_xdmbtr1 ) * 100.
    ENDIF.
    IF vat_rate EQ 0.
    CLEAR wa_fidoc-wt_xdmbtr1.
    * CLEAR wa_fidoc-wt_xdmbtr2.
    ENDIF.
    * Get control number

    SELECT SINGLE bktxt INTO text_bktxt FROM bkpf
    WHERE bukrs = wa_fidoc-bukrs AND
    belnr = wa_fidoc-belnr AND
    gjahr = wa_fidoc-gjahr.

    * Get totals
    no_of_lines = counter MOD total_lines.

    *IF WA_FIDOC-wt_Free1 = 'C' OR WA_FIDOC-WT_REVERSED = 'x'.

    *IF ( ( WA_FIDOC-wt_Free1 EQ 'C' ) AND ( wa_fidoc-wt_group1 NE '03-Anu'
    *)
    * ) OR ( ( wa_fidoc-wt_group1 EQ '03-Anu' ) AND ( WA_FIDOC-wt_Free1 NE
    *'C' ) ). " EXCLUSIVE OR FOR CREDIT MEMO AND REVERSAL DOCS
    IF wa_fidoc-wt_free1 EQ 'C'.
    wa_fidoc-wt_xdmbtr1 = wa_fidoc-wt_xdmbtr1 * -1.
    * wa_fidoc-ve_taxhb = wa_fidoc-ve_taxhb * -1.
    * wa_fidoc-wt_xdmbtr2 = wa_fidoc-wt_xdmbtr2 * -1.
    wa_fidoc-ve_taxhh = wa_fidoc-ve_taxhh * -1.

    ENDIF.
    *VAT_AMOUNT = wa_fidoc-ve_taxhb.
    vat_amount = wa_fidoc-ve_taxhh.

    IF vat_rate = 0.
    **** total_invoiceam0 = total_invoiceam0 + wa_fidoc-dmbtr. "SM
    *&-- in. ABAP01. 20071220. Calculo de importe sin retencion
    ELSE.
    * sin_iva = -dmbtr - wa_fwa_fidocidoc-wt_xdmbtr2 - vat_amount.
    * sin_iva = wa_fidoc-dmbtr - wa_fidoc-wt_xdmbtr1 - vat_amount.


    *&-- fn. ABAP01. 20071220
    ENDIF.


    DATA: lv_fwbas TYPE fwbas.
    total_invoiceam = total_invoiceam + wa_fidoc-dmbtr.
    REFRESH lt_bseg. CLEAR lw_bseg.
    SELECT * FROM bseg INTO TABLE lt_bseg WHERE
    belnr = wa_fidoc-belnr AND
    gjahr = wa_fidoc-gjahr AND
    bukrs = wa_fidoc-bukrs AND
    fwbas NE 0.
    CLEAR lv_fwbas.
    *clear lv_dmbtr.
    LOOP AT lt_bseg INTO lw_bseg.
    lv_fwbas = lv_fwbas + lw_bseg-fwbas.
    ENDLOOP.
    *move lv_dmbtr to gv_dmbtr.

    gv_base = lv_fwbas.

    total_invoiceam0 = total_invoiceam0 + gv_dmbtr.
    sin_iva = ABS( wa_fidoc-dmbtr ) - ABS( gv_base ) - ABS( vat_amount ).
    total_invoiceam0 = total_invoiceam0 + sin_iva.


    "------------eacc20.05.2015----------
    IF wa_fidoc-wt_free1 EQ 'C'. "eacc.sn
    gv_base = gv_base * -1.
    ENDIF.
    "eacc.en
    "-------------------------------------
    total_vatbase = total_vatbase + gv_base.


    *TOTAL_VATamount = TOTAL_VATamount + wa_fidoc-ve_taxhb.

    *TOTAL_QBSHH = TOTAL_QBSHH + wa_fidoc-wt_qbshb.

    *total_vatbase = total_vatbase + wa_fidoc-wt_xdmbtr2.
    total_vatamount = total_vatamount + wa_fidoc-ve_taxhh.

    total_qbshh = total_qbshh + wa_fidoc-wt_qbshh.
    CLEAR lv_blart.
    SELECT SINGLE blart INTO lv_blart FROM bkpf
    WHERE bukrs EQ wa_fidoc-bukrs AND belnr EQ wa_fidoc-belnr AND gjahr EQ
    wa_fidoc-gjahr.

    *case lv_blart.
    *when 'RE' OR 'KR'.
    *wa_fidoc-WT_GROUP1 = '01-Reg'.
    *when others.
    *wa_fidoc-WT_GROUP1 = '02-Com'.
    *endcase.


    ************************* OCRD





















    DATA: lt_bset TYPE TABLE OF bset.


    FIELD-SYMBOLS: <fs_bset> TYPE bset.

    SELECT belnr bukrs gjahr hwbas ktosl hwste kbetr mwskz
    INTO CORRESPONDING FIELDS OF TABLE lt_bset
    FROM bset
    WHERE belnr = wa_fidoc-belnr
    AND gjahr = wa_fidoc-gjahr
    AND bukrs = wa_fidoc-bukrs.

    ** BOM-KSBG 10.12.2015
    *BREAK-POINT.
    SELECT SINGLE QSATZ
    INTO lv_QSATZ
    FROM WITH_ITEM
    WHERE belnr EQ wa_fidoc-belnr
    AND WITHT EQ 'VI'
    AND gjahr EQ wa_fidoc-gjahr.

    * IF sy-subrc EQ 0.
    * LV_PORCE = lv_QSATZ * 100.
    *
    * ENDIF.

    * EOM-KSBG 10.12.2015


    IF sy-subrc EQ 0.
    CLEAR: base_imp12, impte12, BASE_IMPE.

    *BREAK-POINT.
    LOOP AT lt_bset ASSIGNING <fs_bset>.
    IF <fs_bset>-ktosl = 'VST'.
    vat_12 = <fs_bset>-kbetr / 10.
    *********************************** KB
    if <FS_BSET>-KBETR <> 0.
    VAT_ALI = <fs_bset>-kbetr / 10.
    endif.
    ***********************************

    *********************************** KB
    if <FS_BSET>-KBETR = 0.
    BASE_IMPE = BASE_IMPE + <fs_bset>-hwbas.
    endif.
    ***********************************
    **************************
    base_imp12 = base_imp12 + <fs_bset>-hwbas.
    impte12 = impte12 + <fs_bset>-hwste.
    wa_fidoc-wt_xdmbtr1 = base_imp12.
    wa_fidoc-ve_taxhh = impte12.
    ***********************************KB
    IMP_RET = ( IMPTE12 * lv_QSATZ ) / 100.
    **************************
    ELSE.
    cont = counter + 1.

    IF <fs_bset>-ktosl = 'LUX' AND <fs_bset>-mwskz = 'V2'.
    vat_15 = <fs_bset>-kbetr / 10.
    base_imp15 = <fs_bset>-hwbas.
    impte15 = <fs_bset>-hwste.
    wa_fidoc-wt_xdmbtr2 = base_imp15.
    wa_fidoc-ve_taxhb = impte15.

    ***********************************KB
    IMP_RET15 = ( impte15 * lv_QSATZ ) / 100.
    **************************

    bsetmwskz = <fs_bset>-mwskz.
    ENDIF.

    ENDIF.

    *total_vatbase = base_imp12. "+ base_imp15.
    *total_vatamount = impte12 + impte15.

    sin_iva = 0.
    total_invoiceam0 = 0.
    ENDLOOP.


    ENDIF.

    * BOM-KSBG 09.12.2015
    total_invoiceam0 = total_invoiceam0 + BASE_IMPE.
    total_vatbasekb = total_vatbasekb + base_imp12.
    * EOM-KSBG 09.12.2015









    El problema viene con tres columnas, vi que las variables que imprime en el
    texto son sin_iva que es compras exentas, base_imp15 que es base imponible y alicuota que es vat_15 el problema es que estan sumando y haciendo el proceso mal y no entiendo la documentacion que dice asi:

    - Para el registro de compras exentas-> Sumar los registros con operación = “VST” de la tabla BSET relacionados a una factura registrada que tengan el campo porcentaje= (igual a 0,00 ) KBETR
    - Para el registro del total de la base imponible-> Se debe tomar el total del campo base imponible (HWBAS)correspondientes a lo registrado en el documento, según la tabla BSET
    Para el registro % alícuota-> Colocar lo que este en el campo KBETR cuando este sea diferente de cero, expresado en porcentaje:
    - Para facturas que contengan varios indicadores de impuesto-> Se debe colocar la parte de compras exentas en la línea donde aparece el indicador de impuesto cuyo porcentaje es 12% ya que es el vigente .

    Para realizar esto por favor contemplar la posibilidad de crear una tabla Z para indicar cuál es el porcentaje vigente, ya que se desea mantener con el tiempo.
    - Para facturas que contengan varios indicadores de impuesto, el impuesto retenido se debe modificar->Para esto el cálculo del importe retenido debe calcularse, porque actualmente la tabla estándar de SAP WITH_ITEM lo trae sumarizado.
    El cálculo se debe hacer tomando el importe causado que ya aparece en el comprobante

    eimagenes e ejemplo pero el punto es hay algo que esta haciendo mal el loop o algo que me puedan orientar para yo hacerlo???
Trabajando...