PDA

Ver la Versión Completa : Problema en posible sumatoria


naotosx
17/12/15, 19:58:23
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???