MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 17/12/15, 19:58:23
naotosx naotosx is offline
Junior Member
 
Fecha de Ingreso: dic 2015
Mensajes: 5
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???
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 10:44:54.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web