106 lines
3.5 KiB
Plaintext
106 lines
3.5 KiB
Plaintext
FUNCTION calcula(detalles,pporcitbis)
|
|
DEFINE
|
|
detalles DYNAMIC ARRAY OF RECORD
|
|
secuencia INT,
|
|
area SMALLINT,
|
|
descripcion_area CHAR(50),
|
|
codid VARCHAR(25),
|
|
codigo VARCHAR(20),
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
# descripcion VARCHAR(100),
|
|
cantidad DEC(12,5),
|
|
cantidad1 DEC(12,5),
|
|
precio DEC(12,2),
|
|
porc_desc DEC(12,2),
|
|
itbis DEC(12,2),
|
|
valor DEC(12,2),
|
|
cantidad_reservada DEC(12,5),
|
|
fecha_inicio_reserva DATE,
|
|
fecha_vence_reserva DATE,
|
|
autorizada VARCHAR(10),
|
|
idkit INT,
|
|
disenoID VARCHAR(50)
|
|
|
|
END RECORD,
|
|
|
|
i INT,
|
|
valor_bruto, valor_Desc,tbruto,tdesc,tneto,valor_neto,valor_itbis,sub_total,titbis,pporcitbis DEC(12,2),
|
|
detalles_out DYNAMIC ARRAY OF RECORD
|
|
codid,area,cod_n,cod_grupo,cod_tipo,cod_sec INT,
|
|
titulo STRING,
|
|
cantidad1,cantidad,valorBruto,valorDescuento,valorItbis,valorTotal DEC(12,2)
|
|
END RECORD,
|
|
factor DEC(12,5),cantidad_unidades INT
|
|
|
|
LET valor_bruto = 0
|
|
LET valor_desc = 0
|
|
LET sub_total = 0
|
|
LET valor_itbis = 0
|
|
LET tbruto = 0
|
|
LET tdesc = 0
|
|
LET tneto = 0
|
|
LET titbis = 0
|
|
|
|
|
|
FOR i = 1 TO detalles.getLength()
|
|
|
|
LET detalles_out[i].area = detalles[i].area
|
|
LET detalles_out[i].codid = detalles[i].codid
|
|
LET detalles_out[i].cod_n = detalles[i].cod_n
|
|
LET detalles_out[i].cod_grupo = detalles[i].cod_grupo
|
|
LET detalles_out[i].cod_tipo = detalles[i].cod_tipo
|
|
LET detalles_out[i].cod_sec = detalles[i].cod_sec
|
|
|
|
# BUSCA EL FACTOR DE CONVERSION
|
|
SELECT a.factor_conv INTO factor FROM iptb00001 a
|
|
WHERE a.cod_n = detalles_out[i].cod_n AND a.cod_grupo = detalles_out[i].cod_grupo
|
|
AND a.cod_tipo = detalles_out[i].cod_tipo AND a.cod_sec = detalles_out[i].cod_sec
|
|
|
|
LET detalles[i].cantidad1 = detalles[i].cantidad * factor USING "###,###.##"
|
|
|
|
|
|
#DEBE CALCULARSE NUEVAMENTE EL METRAJE LUEGO DE QUE SE AJUSTE LAS UNIDADES
|
|
|
|
|
|
###################
|
|
|
|
|
|
IF factor <>1 THEN
|
|
|
|
LET cantidad_unidades =detalles[i].cantidad1 / factor USING "######"
|
|
LET detalles[i].cantidad = cantidad_unidades
|
|
ELSE
|
|
LET detalles[i].cantidad1 = detalles[i].cantidad * factor USING "###,###.##"
|
|
END IF
|
|
LET detalles[i].cantidad1 = detalles[i].cantidad * factor USING "###,###.##"
|
|
|
|
LET valor_bruto = detalles[i].cantidad1 * detalles[i].precio
|
|
LET valor_Desc = valor_bruto * (detalles[i].porc_desc/100)
|
|
|
|
LET detalles_out[i].cantidad1 = detalles[i].cantidad1
|
|
LET detalles_out[i].cantidad = detalles[i].cantidad
|
|
|
|
LET detalles_out[i].valorBruto = valor_bruto
|
|
LET detalles_out[i].valorDescuento = valor_desc
|
|
|
|
LET sub_total = valor_bruto - valor_Desc
|
|
|
|
LET valor_itbis = sub_total * ( pporcitbis/100 )
|
|
|
|
LET valor_neto = valor_bruto - valor_Desc + valor_itbis
|
|
|
|
LET detalles_out[i].valorItbis = valor_itbis
|
|
LET detalles_out[i].valorTotal = valor_neto
|
|
|
|
LET tbruto = tbruto + valor_bruto
|
|
LET tdesc = tdesc + valor_Desc
|
|
LET tneto = tneto + valor_neto
|
|
LET titbis = titbis + valor_itbis
|
|
END FOR
|
|
|
|
|
|
RETURN tbruto,tdesc,titbis,tneto,detalles_out
|
|
END FUNCTION |