#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??? |
Herramientas | Buscar en Tema |
Desplegado | |
|
|