Files
MBS/PROYECTO/otrodir/facturar.4gl
T

533 lines
21 KiB
Plaintext

SCHEMA smarmotech
GLOBALS
DEFINE p_iptb01 RECORD LIKE iptb00001.*,
p_companias RECORD LIKE companias.*,
sucnombre VARCHAR(60),
fecha_vencimiento DATE,
pubicacion VARCHAR(80),
cliente_bas RECORD LIKE vetb00004.*,
condicion RECORD LIKE vetb00012.*
END GLOBALS
FUNCTION facturar(xcotizacion,xsucid,numero_orden,usuarios,clave,impresor,pcodigodgii,pcomprobante,pfecha_vence)
DEFINE xcotizacion,numero_orden,xnumero_factura,
kncf INT,
xsucid,idx,cod_fact,impresor SMALLINT,
archivo,imprime STRING,
usuarios,clave VARCHAR(50),
xdireccion_proyecto VARCHAR(100),
xvalor_desc DEC(12,2),
tot_porc DEC(12,5),
p_bonifica DYNAMIC ARRAY OF DECIMAL(12,3),
pcodigodgii CHAR(10),
pfecha_vence DATE,
pcomprobante VARCHAR(60)
DEFINE fact_gral RECORD
cod_cia LIKE vetb00002.cod_cia,
ventas LIKE vetb00002.ventas,
zona CHAR(3),
factura LIKE vetb00002.factura,
bodega SMALLINT,
conduce LIKE vetb00002.conduce,
fecha_conduce DATE,
fecha_factura DATE,
tipo_cliente LIKE vetb00002.tipo_cliente,
sec_cliente LIKE vetb00002.sec_cliente,
nombre CHAR(30),
direccion CHAR(80),
ciudad CHAR(20),
prima_us LIKE vetb00002.prima_us,
porc_desc LIKE vetb00002.porc_desc,
cond_pago LIKE vetb00002.cond_pago,
orden INT,
fecha_orden DATE,
porc_itbi LIKE vetb00002.porc_itbi,
sec_vend LIKE vetb00002.sec_vend,
nombre_vend CHAR(60),
cod_transp LIKE iptb00006.cod_transp,
sec_transp LIKE iptb00006.sec_transp,
cod_tarifa LIKE iptb00006.cod_tarifa,
nombre_tran CHAR(30),
fecha_embarque DATE,
placa_transp LIKE iptb00006.placa,
sub_total DECIMAL(12,2),
desc_valor DECIMAL(12,2),
itbi DECIMAL(12,2),
total_fact DECIMAL(12,2)
END RECORD
DEFINE fact_det DYNAMIC ARRAY OF RECORD
area SMALLINT,
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT,
descrip_esp CHAR(50),
unidad_med CHAR(5),
cantidad DEC(12,5),
precio LIKE vetb00003.precio,
cantidad_2 LIKE vetb00003.cantidad_2,
monto_fact DECIMAL(12,2),
kit_id INT
END RECORD,
documento_refe,copia VARCHAR(50),
negrilla_on,negrillas_of,doble_on,doble_off,comp_on,comp_off,
doce,NORMAL char(3)
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
SELECT a.tipo_cliente,a.sec_cliente,a.nombre_cliente,a.direccion_cliente,a.direccion_proyecto,
a.total_bruto,a.monto_desc,a.monto_itbi,a.porc_itbi,a.total_neto,a.telefono_o,b.nombre_file,b.num_oc,
a.ventas,a.cod_provincia,CONVERT(CHAR(10),b.fecha_oc,103),a.sec_vend,a.cond_pago,
a.prima,c.descrip,ISNULL(RTRIM(d.nom1_emp),' ')+' '+ISNULL(RTRIM(d.apell1_emp),' '),
CONVERT(CHAR(10),a.fecha,103)
INTO fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.nombre,fact_gral.direccion,
xdireccion_proyecto,
fact_gral.sub_total,fact_gral.desc_valor,fact_gral.itbi,fact_gral.porc_itbi,fact_gral.total_fact,
cliente_bas.telefono,documento_refe,fact_gral.orden,fact_gral.ventas,
fact_gral.zona,fact_gral.fecha_orden,fact_gral.sec_vend,fact_gral.cond_pago,
fact_gral.prima_us,condicion.descrip,fact_gral.nombre_vend,
fact_gral.fecha_factura
FROM vetb00050 a LEFT OUTER JOIN prtb00012 b ON a.cotizacion_no = b.cotizacion_no AND b.status_t IS NULL
INNER JOIN
vetb00012 c ON a.cond_pago = c.cond_pago INNER JOIN adtb00003 d ON a.sec_vend = d.num_emp
WHERE a.cotizacion_no = xcotizacion
SELECT a.ult_factura INTO xnumero_factura FROM vetb00001 a WHERE a.sucid = xsucid
IF xnumero_factura IS NULL THEN
LET xnumero_factura = 0
END IF
LET fact_gral.factura = xnumero_factura + 1
# SUMA EL VALOR EN EL DETALLE DE LA COTIZACION
SELECT a.ncf INTO kncf FROM vetb00073 a
WHERE a.tipo_doc = "FT" AND
a.codigo_dgii = pcodigodgii
LET kncf = kncf + 1
START REPORT imp_fact_ncf TO archivo
BEGIN WORK
UPDATE vetb00073 SET ncf = kncf WHERE tipo_doc = 'FT' AND codigo_dgii = pcodigodgii
INSERT INTO vetb00002 (cod_cia,ventas,zona,factura,fecha_factura,tipo_cliente,sec_cliente,orden,documento,nombre_cliente,
direccion_cliente,direccion_proyecto,sub_total,monto_desc,porc_itbi,monto_itbi,neto,
us_crea,fech_crea,sucid,fecha_orden,sec_vend,cond_pago,prima_us)
VALUES ('1',fact_gral.ventas,fact_gral.zona, fact_gral.factura,GETDATE(),fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden,
xcotizacion,
fact_gral.nombre,fact_gral.direccion,
xdireccion_proyecto,fact_gral.sub_total,fact_gral.desc_valor,fact_gral.porc_itbi,fact_gral.itbi,
fact_gral.total_fact,suser_sname(),getdate(),xsucid,fact_gral.fecha_orden,
fact_gral.sec_vend,fact_gral.cond_pago,fact_gral.prima_us)
# INSERTA EN LA TABLA COMPROBANTE FISCAL
INSERT INTO vetb00072 (documento,tipo_Doc,codigo_dgii,ncf,us_crea,fech_crea,sucid)
VALUES (xnumero_factura,'FT',pcodigodgii,kncf,suser_sname(),getdate(),xsucid)
DECLARE busca_items CURSOR FOR
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cantidad,a.precio,a.porc_Desc,
b.descrip_esp FROM vetb00051 a,iptb00002 b
WHERE a.cotizacion_no = xcotizacion AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND
a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec
LET idx = 1
LET xvalor_desc = 0
FOREACH busca_items INTO fact_det[idx].area,fact_det[idx].cod_n,fact_det[idx].cod_grupo,
fact_det[idx].cod_tipo,fact_det[idx].cod_sec,fact_det[idx].cantidad,
fact_det[idx].precio,fact_det[idx].cantidad_2,fact_det[idx].descrip_esp
LET xvalor_desc = (fact_det[idx].cantidad*fact_det[idx].cantidad_2) * (fact_det[idx].cantidad_2/100)
LET fact_det[idx].monto_fact = (fact_det[idx].precio* fact_det[idx].cantidad)-
((fact_det[idx].precio* fact_det[idx].cantidad)*
(fact_det[idx].cantidad_2/100))
INSERT INTO vetb00003 (factura,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,precio,cantidad_2,bonificacion,
us_crea,fech_crea)
VALUES (xnumero_factura,fact_det[idx].area,fact_det[idx].cod_n,fact_det[idx].cod_grupo,
fact_det[idx].cod_tipo,fact_det[idx].cod_sec,fact_det[idx].cantidad,
fact_det[idx].precio,fact_det[idx].cantidad_2,xvalor_desc,
suser_sname(),getdate())
LET xvalor_desc = 0
LET idx = idx + 1
END FOREACH
UPDATE vetb00001 SET ult_factura = fact_gral.factura,us_mod = usuarios,fech_mod = getdate() WHERE sucid = xsucid
IF idx = 1 THEN
ROLLBACK WORK
ELSE
COMMIT WORK
END IF
FOR idx = 1 TO fact_det.getLength()
IF fact_det[idx].cod_sec IS NOT NULL THEN
LET cod_fact = 1
OUTPUT TO REPORT imp_fact_ncf(fact_gral.*,fact_det[idx].*,tot_porc,
p_bonifica[idx],cod_fact,kncf,pcodigodgii,xcotizacion,documento_refe,pcomprobante)
END IF
END FOR
FINISH REPORT imp_fact_ncf
RUN imprime
# AFTER CUENTAS POR COBRAR
INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig,
fecha_ven,
aplica_a,valor,monto_desc,us_crea,fech_crea,bodega,sucid,cotizacion_no)
VALUES (fact_gral.cod_cia,tipo_f,fact_gral.factura,
fact_gral.tipo_cliente,fact_gral.sec_cliente,
fact_gral.sec_vend,fact_gral.fecha_factura,fact_gral.fecha_factura,
fact_gral.factura, fact_gral.total_fact,'0',
usuarios,GETDATE(),fact_gral.bodega,xsucid,'0')
# PARA LA REAPLICACION DE LOS AVANCES
CALL busca_avance(fact_gral.tipo_cliente,fact_gral.sec_cliente,xcotizacion,fact_gral.total_fact,fact_gral.fecha_factura,
fact_gral.sec_vend,xsucid,fact_gral.factura,usuarios)
END FUNCTION
REPORT imp_fact_ncf(x,z,porciento,bonifica,cod_f,pncf,Pcodigodgii,zcotizacion,zdocumento,descripcion)
DEFINE x RECORD
cod_cia LIKE vetb00002.cod_cia,
ventas LIKE vetb00002.ventas,
zona CHAR(3),
factura LIKE vetb00002.factura,
bodega SMALLINT,
conduce LIKE vetb00002.conduce,
fecha_conduce DATE,
fecha_factura DATE,
tipo_cliente LIKE vetb00002.tipo_cliente,
sec_cliente LIKE vetb00002.sec_cliente,
nombre CHAR(30),
direccion CHAR(80),
ciudad CHAR(20),
prima_us LIKE vetb00002.prima_us,
porc_desc LIKE vetb00002.porc_desc,
cond_pago LIKE vetb00002.cond_pago,
orden INT,
fecha_orden DATE,
porc_itbi LIKE vetb00002.porc_itbi,
sec_vend LIKE vetb00002.sec_vend,
nombre_vend CHAR(60),
cod_transp LIKE iptb00006.cod_transp,
sec_transp LIKE iptb00006.sec_transp,
cod_tarifa LIKE iptb00006.cod_tarifa,
nombre_tran CHAR(30),
fecha_embarque DATE,
placa_transp LIKE iptb00006.placa,
sub_total DECIMAL(12,2),
desc_valor DECIMAL(12,2),
itbi DECIMAL(12,2),
total_fact DECIMAL(12,2)
END RECORD,
zcotizacion INT,
zdocumento varchar(50),
descripcion VARCHAR(60)
DEFINE z RECORD
area SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(50),
unidad_med CHAR(5),
cantidad DEC(12,5),
precio LIKE vetb00003.precio,
cantidad_2 LIKE vetb00003.cantidad_2,
monto_fact DECIMAL(12,2),
kit_id INT
END RECORD,
Pcodigodgii LIKE vetb00071.codigo_dgii
DEFINE i,cod_f SMALLINT
DEFINE bonifica,pncf INTEGER
DEFINE tot_b,tot_n,tot_m DECIMAL(12,2),
ch_fech CHAR(20)
DEFINE porciento DECIMAL(8,3)
DEFINE normal,doce,negras,negras_off,doble CHAR(2)
DEFINE rnc CHAR(11)
DEFINE comprimido,comprimido_of CHAR(1)
DEFINE j,lj,h INTEGER
OUTPUT
TOP MARGIN 2
LEFT MARGIN 0
# PAGE LENGTH 65
BOTTOM MARGIN 3
ORDER BY x.factura,z.cod_n,z.cod_sec
FORMAT
PAGE HEADER
LET comprimido = ASCII 15
LET comprimido_of = ASCII 18
LET negras = ASCII 27, ASCII 69
LET negras_off = ASCII 27, ASCII 70
LET doble = ASCII 14
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
SELECT a.nombre INTO p_companias.nombre FROM companias a
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
LET j = (80 - LENGTH(p_companias.direccion CLIPPED||", "||p_companias.direccion1 CLIPPED))/2
LET i = (80 - LENGTH("Tels : "||p_companias.telefono ||
" Fax : "||p_companias.fax CLIPPED))/2
LET h = (80 - LENGTH(p_companias.rnc CLIPPED))/2
#--------------------------------------------------------
PRINT COLUMN 1, normal,doble,p_companias.nombre CLIPPED
PRINT COLUMN 1,doce, p_companias.direccion CLIPPED,", ",
p_companias.direccion1 CLIPPED,
COLUMN 61, descripcion[1,29]
PRINT COLUMN 1, sucnombre,
COLUMN 61,descripcion[30,60]
PRINT COLUMN 1, "RNC : ",p_companias.rnc,
COLUMN 60,"NCF: ",pcodigodgii CLIPPED,pncf USING "&&&&&&&&"
PRINT COLUMN 1, "Tels : ",p_companias.telefono ,
" Fax : ",p_companias.fax;
IF pcodigodgii <> 'B02' THEN
PRINT COLUMN 61, "Valida Hasta: ",fecha_vencimiento USING "dd/mm/yyyy"
ELSE
PRINT COLUMN 61, ' '
END IF
PRINT COLUMN 1, "Pag. ", pageno using "###"
#PRINT normal,comprimido_of
#--------------------------------------------------------
SELECT num_rnc INTO rnc FROM vetb00004
WHERE tipo_cliente = x.tipo_cliente AND sec_cliente = x.sec_cliente AND
status_t IS NULL
#PRINT normal,comprimido_of
PRINT COLUMN 1,"----------------------------------------------------------------------------------------------"
PRINT COLUMN 1, "RNC CLIENTE: ",rnc
IF x.ventas = "1" THEN
PRINT COLUMN 1, negras,"SENORES :"
ELSE
PRINT COLUMN 1, "SIR :"
END IF
PRINT COLUMN 1, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-",
x.sec_cliente using "&&&&&&"
PRINT COLUMN 1, x.direccion CLIPPED," ",cliente_bas.telefono
PRINT COLUMN 1, x.ciudad CLIPPED
PRINT COLUMN 1, pubicacion[1,70]
PRINT COLUMN 1, pubicacion[71,80]
PRINT COLUMN 60, doble,"FACTURA ",x.factura using "&&&&&"
PRINT COLUMN 1,"--------------------------------------------------------------------------------------------"
PRINT normal,comprimido
PRINT "======================================================================================================",
"================================="
PRINT COLUMN 1, "SALIDA",
COLUMN 15, "ORDEN",
COLUMN 35, "FECHA",
COLUMN 60, "CONDICION",
COLUMN 77, "VENDEDOR",
COLUMN 100, "COTIZACION",
COLUMN 111, "DOCUMENTO",
COLUMN 123, "FECHA FACTURA"
PRINT COLUMN 1, x.conduce using "&&&&&&",
COLUMN 14, x.orden using "&&&&&&",
COLUMN 34, x.fecha_orden using "dd/mm/yyyy",
COLUMN 60, condicion.descrip CLIPPED,
COLUMN 77, "(",x.sec_vend using "&&&&",") ",x.nombre_vend CLIPPED,
COLUMN 100, zcotizacion using "&&&&&&",
COLUMN 111, zdocumento,
COLUMN 126, x.fecha_factura using "dd/mm/yyyy"
PRINT "======================================================================================================",
"================================="
LET tot_n = 0
LET tot_b = 0
LET tot_m = 0
PRINT COLUMN 5,"CODIGO",
COLUMN 21, "CANTIDAD",
COLUMN 37, "UNIDADES",
COLUMN 50, "DESCRIPCION",
COLUMN 102, "PRECIO",
COLUMN 114, "DESC.",
COLUMN 131, "TOTAL"
PRINT "======================================================================================================",
"================================="
ON EVERY ROW
IF z.cantidad <> 0 THEN
LET p_iptb01.factor_conv = 1
LET p_iptb01.unidad = z.unidad_med
SELECT a.factor_conv,a.unidad INTO p_iptb01.factor_conv,p_iptb01.unidad
FROM iptb00001 a
WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec
IF p_iptb01.factor_conv IS NULL OR p_iptb01.factor_conv = 0 THEN
LET p_iptb01.factor_conv = 1
LET p_iptb01.unidad = z.unidad_med
END IF
PRINT COLUMN 5, z.cod_n USING "&&&&","-",z.cod_grupo USING "&&&&","-",
z.cod_tipo USING "&&&&","-",z.cod_sec USING "&&&&&&",
COLUMN 13, z.cantidad USING "###,###.###"," ",z.unidad_med CLIPPED,
COLUMN 32, z.cantidad/p_iptb01.factor_conv USING "###,###",
COLUMN 50, z.descrip_esp CLIPPED,
COLUMN 98, z.precio USING "###,###.###",
COLUMN 114, z.cantidad_2 USING "##.&&",
COLUMN 123, z.monto_fact USING "##,###,###.##"
END IF
AFTER GROUP OF x.factura
# Impresion de informaciones que pertenecen a facturas de exportacion
IF x.ventas = "2" or x.ventas = "4" THEN
PRINT COLUMN 122,"--------------"
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 122, x.sub_total using "###,###,###.##"
IF x.desc_valor <> 0 THEN
PRINT COLUMN 78,"DISCOUNT",
COLUMN 122, x.desc_valor using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "TOTAL F.O.B. PLANT, D.R.",
COLUMN 122, x.total_fact using "###,###,###.##"
PRINT COLUMN 122, "______________"
PRINT COLUMN 122, "--------------"
LET ch_fech = x.fecha_embarque using "ddd, mmm. dd, yyyy"
LET ch_fech = upshift(ch_fech)
PRINT COLUMN 47, "INLAND FREIGHT : COLLECT"
PRINT COLUMN 47, "INSURANCE : TO BE COVERED BY CUSTOMER"
PRINT COLUMN 47, "TO BE SHIPPED : ", ch_fech
#PRINT COLUMN 47, "EXCHANGE RATE : ", x.prima_us USING "###.##"
END IF
# Impresion de datos que concierne solamente a tipos de facturas locales
IF x.ventas = "1" THEN
#->PRINT COLUMN 122, "--------------"
SKIP 1 LINE
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 122, x.sub_total using "###,###,###.##"
IF x.desc_valor <> 0 THEN
PRINT COLUMN 78, "DESCUENTO",
COLUMN 093, x.desc_valor using "###,###,###.##"
#COLUMN 122, x.desc_valor using "###,###,###.##"
END IF
#-> PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "SUB-TOTAL",
COLUMN 119, x.sub_total-x.desc_valor using "RD$###,###,###.##"
IF x.porc_itbi > 0 THEN
PRINT COLUMN 78,x.porc_itbi using "###.##","%"," ITBIS",
COLUMN 122, x.itbi using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "VALOR NETO ",
COLUMN 119, x.total_fact using "RD$###,###,###.##"
PRINT COLUMN 122, "=============="
END IF
IF x.ventas = "3" THEN
#->PRINT COLUMN 122, "--------------"
SKIP 1 LINE
PRINT COLUMN 78, "VALOR BRUTO ",
COLUMN 118, x.sub_total using "USD$###,###,###.##"
IF x.desc_valor <> 0 THEN
PRINT COLUMN 78, "DESCUENTO",
COLUMN 122, x.desc_valor using "###,###,###.##"
END IF
#-> PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "SUB-TOTAL",
COLUMN 122, x.sub_total-x.desc_valor using "###,###,###.##"
IF x.porc_itbi > 0 THEN
PRINT COLUMN 78, x.porc_itbi using "###.##","%"," ITBIS",
COLUMN 122, x.itbi using "###,###,###.##"
END IF
PRINT COLUMN 122, "--------------"
PRINT COLUMN 78, "VALOR NETO ",
COLUMN 118, x.total_fact using "USD$###,###,###.##"
PRINT COLUMN 122, "=============="
END IF
PRINT comprimido_of
#SKIP 8 LINE
{PAGE TRAILER
SKIP 1 LINE
PRINT doce,comprimido_of
LET obs1=observacion[1,50]
LET obs2=observacion[51,101]
LET obs3=observacion[102,152]
LET obs4=observacion[152,180]
PRINT COLUMN 3, "OBSERVACIONES: ",UPSHIFT(obs1) CLIPPED," ", UPSHIFT(obs2) CLIPPED
PRINT COLUMN 3, " ",UPSHIFT(obs3) CLIPPED," ", UPSHIFT(obs4) CLIPPED
# IF x.ventas = 3 THEN
# PRINT COLUMN 3, "EXCHANGE RATE : ", x.prima_us USING "###.##"
# ELSE
# PRINT " "
# END IF
SKIP 2 LINES
PRINT COLUMN 4, "NOMBRE TRANSPORTISTA: ",x.nombre_tran, " ",
"CEDULA: ",p_cedula using "&&&&&&&&&",
" SERIE: ",p_serie using "&&&"
PRINT COLUMN 4, "PLACA DEL VEHICULO: ",x.placa_transp}
{
SKIP 10 LINES
PRINT COLUMN 12, x.nombre CLIPPED
CALL convierte(x.total_fact)
PRINT COLUMN 05, valor_letras clipped,
COLUMN 72, x.total_fact using "###,###,###.##"
PRINT COLUMN 72, x.factura using "&&&&&"
PRINT COLUMN 10, condicion.dias USING "&&"
}
{ SKIP 3 LINES
PRINT COLUMN 4,"-------------------------------",20 SPACES,
"-------------------------------"
PRINT COLUMN 4," FACTURADO POR ",20 SPACES,
" REVISADO POR "
}
SKIP 2 LINES
END REPORT