877 lines
33 KiB
Plaintext
877 lines
33 KiB
Plaintext
|
|
{
|
|
======================================================================
|
|
PROGRAMA : veprmt022
|
|
OBJETIVO : Administrar facturacion (PUNTO VENTAS CAFETERIA)
|
|
PROGRAMADOR : ING. JUAN SOTO
|
|
FECHA CREACION : 23/4/2014
|
|
|
|
======================================================================
|
|
}
|
|
SCHEMA smarmotech
|
|
GLOBALS
|
|
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
|
|
r_filename STRING, -- filename of Report Design Document including .4rp extension
|
|
r_output STRING, -- output format option
|
|
preview INTEGER, -- TRUE/FALSE, to set preview option
|
|
xcotizacion_no INTEGER,
|
|
xitem SMALLINT
|
|
DEFINE usuarios,clave CHAR(80),
|
|
p_companias RECORD LIKE companias.*,
|
|
estado,guarde,pcredito VARCHAR(3),
|
|
hora CHAR(16),
|
|
nombre_cia VARCHAR(60),
|
|
limite_cr,balance DEC(12,2)
|
|
DEFINE encabezado RECORD
|
|
factura_no INT,
|
|
fecha_factura DATE,
|
|
cond_pago SMALLINT,
|
|
codigo_id INT,
|
|
nombre_cliente VARCHAR(90),
|
|
bruto DEC(12,2),
|
|
descuento DEC(12,2),
|
|
itbis DEC(12,2),
|
|
sub_total DEC(12,2),
|
|
neto DEC(12,2),
|
|
estado VARCHAR(30)
|
|
END RECORD
|
|
DEFINE detalle DYNAMIC ARRAY OF RECORD
|
|
cod_n INT,
|
|
cod_grupo INT,
|
|
cod_tipo INT,
|
|
cod_sec INT,
|
|
descrip_esp VARCHAR(80),
|
|
cantidad DEC(12,2),
|
|
precio DEC(12,2),
|
|
ddescuento DEC(12,2),
|
|
valor_desc DEC(12,2),
|
|
pitbis DEC(12,2),
|
|
valor_itbis DEC(12,2),
|
|
valor DEC(12,2)
|
|
END RECORD,
|
|
idx,scr_l,idx1,Pdepartamento SMALLINT,
|
|
pfecha,fecha1,fecha2 DATE,
|
|
selec STRING
|
|
|
|
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
|
|
r_filename STRING, -- filename of Report Design Document including .4rp extension
|
|
r_output STRING, -- output format option
|
|
preview INTEGER -- TRUE/FALSE, to set preview option
|
|
|
|
END GLOBALS
|
|
MAIN
|
|
|
|
DEFINE selec1 VARCHAR(200),
|
|
dias_credito SMALLINT
|
|
DEFER INTERRUPT
|
|
|
|
CALL STARTLOG("veprmt22.log")
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT to "smarmotech" USER usuarios USING clave
|
|
|
|
LET selec1 = "SELECT a.nombre,a.limite_credito,a.dias_credito from puntodeventas.dbo.companias a where a.cod_cia = 1"
|
|
PREPARE ciacomando FROM selec1
|
|
|
|
EXECUTE ciacomando INTO nombre_Cia,limite_cr,dias_credito
|
|
|
|
SELECT CONVERT(CHAR(10),MAX(a.fecha_cierre_nomina),103) INTO pfecha FROM notb00010 a
|
|
WHERE a.fecha_cierre_nomina < today
|
|
|
|
IF pfecha IS NULL THEN
|
|
CALL fgl_Winmessage("ERROR","NO PUEDES REALIZAR FACTURAS, NO EXISTE FECHA CIERRE NOMINA","INFO")
|
|
EXIT PROGRAM
|
|
END IF
|
|
|
|
SELECT CONVERT(char(10),MIN(a.fecha_cierre_nomina),103) INTO fecha1 FROM notb00010 a
|
|
WHERE a.fecha_cierre_nomina > pfecha
|
|
|
|
LET pfecha = pfecha + 1
|
|
|
|
CALL veprmt022()
|
|
END MAIN
|
|
|
|
FUNCTION veprmt022()
|
|
call ui.Interface.loadStyles("formularios")
|
|
OPEN WINDOW fw1 WITH FORM "vepfmmt001"
|
|
|
|
DISPLAY BY NAME limite_cr,nombre_cia,pfecha,fecha1
|
|
DISPLAY usuarios TO usuario
|
|
DISPLAY TODAY TO fecha
|
|
DISPLAY TIME TO hora
|
|
|
|
MENU
|
|
ON ACTION nuevo
|
|
LET estado = "N"
|
|
|
|
CALL veprmtad22()
|
|
ON ACTION buscar
|
|
LET estado = "M"
|
|
CALL veprmtad22()
|
|
ON ACTION listado
|
|
CALL relacion()
|
|
ON ACTION salir
|
|
EXIT MENU
|
|
EXIT PROGRAM
|
|
END MENU
|
|
CLOSE WINDOW fw1
|
|
END FUNCTION
|
|
|
|
FUNCTION veprmtad22()
|
|
DEFINE nom1_emp,nom2_emp,apell1_emp,apell2_emp VARCHAR(30),
|
|
respuesta CHAR(3),
|
|
selec1,insert1 CHAR(500),
|
|
Pnivel_emp,Pcod_puesto INT,
|
|
ptipo CHAR(1)
|
|
|
|
DIALOG ATTRIBUTE (FIELD ORDER FORM, UNBUFFERED)
|
|
|
|
INPUT BY NAME encabezado.*,preview ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
CALL detalle.clear()
|
|
INITIALIZE encabezado.* TO NULL
|
|
LET encabezado.cond_pago=2
|
|
DISPLAY BY NAME encabezado.*
|
|
LET selec1 = "SELECT SUM(a.valor) FROM notb00008 a WHERE a.num_emp = ? ",
|
|
"AND a.cod_mov = 19 AND a.fecha between ? and ? and a.clase_mov ='F' and status_t is null "
|
|
PREPARE suma_facturas FROM selec1
|
|
|
|
LET selec1 = "UPDATE puntodeventas.dbo.vetb00002 set status_t = 'E',us_mod = '",usuarios,"', fech_mod = getdate() ",
|
|
" WHERE factura = ? "
|
|
PREPARE upcomando1 FROM selec1
|
|
|
|
LET selec1 = "DELETE FROM notb00008 ",
|
|
" WHERE num_nomi = ? and cod_mov = 19 and clase_mov = 'F' AND fecha = ? "
|
|
PREPARE upcomando2 FROM selec1
|
|
|
|
LET selec1 = "UPDATE notb00011 set status_t = 'E',us_mod ='",usuarios CLIPPED,"',fech_mod = getdate() ",
|
|
" WHERE num_doc = ? and cod_mov = 19 AND num_emp = ? "
|
|
PREPARE upcomando3 FROM selec1
|
|
|
|
LET insert1 =
|
|
"INSERT INTO puntodeventas.dbo.vetb00003 (factura,cod_n,cod_grupo,cod_tipo,cod_sec,descripcion,cantidad,precio,descuento,itbis,valor) ",
|
|
" VALUES (?,?,?,?,?,?,?,?,?,?,?) "
|
|
|
|
PREPARE inscomando FROM insert1
|
|
|
|
LET insert1 =
|
|
"INSERT INTO puntodeventas.dbo.vetb00002 (factura,fecha_factura,fecha_nomina,codigo_id,cond_pago,nombre_cliente, ",
|
|
"bruto,descuento,itbis,sub_total,neto,us_crea,fech_crea) ",
|
|
"VALUES (?,?, ?,?,?, ?,?,?, ?,?,?, ?,getdate())"
|
|
|
|
PREPARE inscomando1 FROM insert1
|
|
|
|
LET selec1 = "SELECT MAX(a.factura) FROM puntodeventas.dbo.vetb00002 a "
|
|
PREPARE comando2 FROM selec1
|
|
|
|
|
|
IF estado ='M' THEN
|
|
|
|
LET selec1 =
|
|
" SELECT a.factura,CONVERT(CHAR(10),a.fecha_factura,103),CONVERT(CHAR(10),a.fecha_nomina,103),a.cond_pago,a.codigo_id, ",
|
|
"a.nombre_cliente,a.bruto,a.descuento,a.itbis,a.sub_total, ",
|
|
"a.neto,CASE a.status_t WHEN 'E' THEN 'ANULADA' ELSE 'ACTIVA' END,b.departamento, ",
|
|
" b.nomina ",
|
|
"FROM puntodeventas.dbo.vetb00002 a LEFT OUTER JOIN adtb00003 b ON a.codigo_id = b.num_emp ",
|
|
"WHERE a.factura = ? "
|
|
|
|
PREPARE comand1 FROM selec1
|
|
|
|
NEXT FIELD factura_no
|
|
|
|
ELSE
|
|
LET encabezado.fecha_factura= TODAY
|
|
DISPLAY BY NAME encabezado.fecha_factura
|
|
END IF
|
|
NEXT FIELD cond_pago
|
|
ON ACTION empleados
|
|
CALL busca_empleado() RETURNING encabezado.codigo_id,nom1_emp,
|
|
nom2_emp,apell1_emp,apell2_emp
|
|
LET encabezado.nombre_cliente=nom1_emp CLIPPED," ",nom2_emp CLIPPED," ",
|
|
apell1_emp CLIPPED," ",apell2_emp
|
|
DISPLAY BY NAME encabezado.nombre_cliente,encabezado.codigo_id
|
|
|
|
ON ACTION anular
|
|
IF estado = "M" THEN
|
|
LET respuesta= fgl_winquestion("ANULAR","ESTA SEGURO DE ANULAR FACTURA?","NO","YES|NO","QUESTION",0)
|
|
IF respuesta = 'YES' THEN
|
|
EXECUTE upcomando1 USING encabezado.factura_no
|
|
EXECUTE upcomando2 USING encabezado.factura_no,fecha1
|
|
EXECUTE upcomando3 USING encabezado.factura_no,encabezado.codigo_id
|
|
|
|
CALL err_mensajes(82)
|
|
DISPLAY "ANULADA" TO estado
|
|
ELSE
|
|
CONTINUE DIALOG
|
|
END IF
|
|
END IF
|
|
ON ACTION imprime
|
|
CALL impresion_fact()
|
|
|
|
AFTER FIELD factura_no
|
|
IF encabezado.factura_no IS NOT NULL THEN
|
|
|
|
EXECUTE comand1 USING encabezado.factura_no INTO encabezado.factura_no,
|
|
encabezado.fecha_factura,
|
|
pfecha,
|
|
encabezado.cond_pago,
|
|
encabezado.codigo_id,
|
|
encabezado.nombre_cliente,
|
|
encabezado.bruto,
|
|
encabezado.descuento,
|
|
encabezado.itbis,
|
|
encabezado.sub_total,
|
|
encabezado.neto,
|
|
encabezado.estado,
|
|
pdepartamento,
|
|
ptipo
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL err_mensajes(3)
|
|
NEXT FIELD factura_no
|
|
END IF
|
|
DISPLAY BY NAME encabezado.*,pfecha
|
|
|
|
IF estado = 'M' THEN
|
|
LET selec1 =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descripcion,a.cantidad,a.precio,a.descuento,'0',a.itbis, ",
|
|
" '0',a.valor ",
|
|
" FROM puntodeventas.dbo.vetb00003 a ",
|
|
"WHERE a.factura = ",encabezado.factura_no
|
|
|
|
PREPARE comand2 FROM selec1
|
|
DECLARE busca_d CURSOR FOR comand2
|
|
|
|
LET idx1 = 1
|
|
FOREACH busca_d INTO detalle[idx1].*
|
|
LET idx1 = idx1 + 1
|
|
END FOREACH
|
|
CALL set_count(idx1-1)
|
|
DISPLAY ARRAY detalle TO record2.*
|
|
BEFORE DISPLAY
|
|
LET idx1=arr_curr()
|
|
LET detalle[idx1].valor_desc = (detalle[idx1].cantidad * detalle[idx1].precio)
|
|
* (detalle[idx1].ddescuento/100)
|
|
LET detalle[idx1].valor_itbis = ((detalle[idx1].cantidad * detalle[idx1].precio) -
|
|
detalle[idx1].valor_desc)
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
END IF
|
|
END IF
|
|
AFTER FIELD codigo_id
|
|
|
|
IF encabezado.codigo_id IS NOT NULL THEN
|
|
SELECT ISNULL(RTRIM(a.nom1_emp),' ')+' '+ISNULL(RTRIM(a.nom2_emp),' ')+
|
|
' '+ ISNULL(RTRIM(a.apell1_emp),' ')+' '+
|
|
ISNULL(RTRIM(a.apell2_emp),' '),a.departamento,a.nivel_emp,
|
|
a.cod_puesto,a.nomina,a.credito
|
|
INTO encabezado.nombre_cliente,pdepartamento,pnivel_Emp,pcod_puesto,
|
|
ptipo,pcredito
|
|
FROM adtb00003 a
|
|
WHERE num_emp = encabezado.codigo_id AND a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL err_mensajes(3)
|
|
NEXT FIELD codigo_id
|
|
END IF
|
|
IF pcredito = "NO" THEN
|
|
CALL fgl_winmessage("ERROR","NO ES PERMITIDO FACTURAR A ESTE EMPLEADO, FAVOR DE COMUNICARSE CON NOMINA","INFO")
|
|
NEXT FIELD codigo_id
|
|
END IF
|
|
|
|
DISPLAY BY NAME encabezado.nombre_cliente
|
|
IF fecha1 IS NULL THEN
|
|
CALL fgl_Winmessage("ERROR","FECHA INICIAL DE LA NOMINA ESTA EN BLANCO, FAVOR COMUNICARSE EN NOMINA","INFO")
|
|
NEXT FIELD codigo_id
|
|
END IF
|
|
EXECUTE suma_facturas INTO balance USING encabezado.codigo_id,pfecha,fecha1
|
|
DISPLAY BY NAME balance
|
|
LET estado = 'N'
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF encabezado.cond_pago= 2 THEN
|
|
IF encabezado.codigo_id IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD codigo_id
|
|
END IF
|
|
END IF
|
|
IF pfecha IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD codigo_id
|
|
END IF
|
|
END INPUT
|
|
# DETALLE PRODUCTOS
|
|
|
|
INPUT ARRAY detalle FROM record2.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET selec1 =
|
|
" SELECT a.descrip_esp,a.itbis ",
|
|
"FROM puntodeventas.dbo.iptb00002 a ",
|
|
"WHERE a.cod_n=? and a.cod_grupo=? and a.cod_tipo=? and a.cod_sec = ? "
|
|
|
|
PREPARE comand3 FROM selec1
|
|
|
|
LET scr_l = scr_line()
|
|
CALL quemasvende() RETURNING detalle[1].cod_n,detalle[1].cod_grupo,detalle[1].cod_tipo,detalle[1].cod_sec
|
|
|
|
LET detalle[1].valor_desc=0
|
|
LET detalle[1].pitbis=0
|
|
|
|
IF detalle[1].cod_n IS NOT NULL THEN
|
|
EXECUTE comand3 USING detalle[1].cod_n,detalle[1].cod_grupo,detalle[1].cod_tipo,
|
|
detalle[1].cod_sec INTO detalle[1].descrip_esp,detalle[1].pitbis
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL err_mensajes(3)
|
|
NEXT FIELD cod_n
|
|
ELSE
|
|
|
|
DISPLAY detalle[1].descrip_esp TO record2[scr_l].descripcion
|
|
DISPLAY detalle[1].pitbis TO record2[scr_l].pitbis
|
|
NEXT FIELD precio
|
|
END IF
|
|
END IF
|
|
NEXT FIELD precio
|
|
{ ON ACTION busca_tems
|
|
LET idx = arr_curr()
|
|
LET scr_l = scr_line()
|
|
CALL busca_articulos('N',' ') RETURNING detalle[idx].codigo_prod,detalle[idx].descripcion,
|
|
detalle[idx].pitbis
|
|
DISPLAY detalle[idx].codigo_prod TO record2[scr_l].codigo_prod
|
|
DISPLAY detalle[idx].descripcion TO record2[scr_l].descripcion
|
|
NEXT FIELD cantidad}
|
|
AFTER FIELD cod_n
|
|
LET idx = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF detalle[idx].cod_n IS NOT NULL THEN
|
|
EXECUTE comand3 USING detalle[idx].cod_n,detalle[idx].cod_grupo,
|
|
detalle[idx].cod_tipo,detalle[idx].cod_sec INTO detalle[idx].descrip_esp,
|
|
detalle[idx].pitbis
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL err_mensajes(3)
|
|
NEXT FIELD codigo_prod
|
|
ELSE
|
|
|
|
DISPLAY detalle[idx].descrip_esp TO record2[scr_l].descripcion
|
|
DISPLAY detalle[idx].pitbis TO record2[scr_l].pitbis
|
|
NEXT FIELD cantidad
|
|
END IF
|
|
|
|
END IF
|
|
AFTER FIELD descripcion
|
|
IF detalle[idx].descrip_esp IS NOT NULL THEN
|
|
|
|
EXECUTE comand3 USING detalle[idx].descrip_esp INTO detalle[idx].descrip_esp,
|
|
detalle[idx].pitbis
|
|
IF STATUS < 0 THEN
|
|
CALL busca_articulos('A',detalle[idx].descrip_esp)RETURNING detalle[idx].cod_n,detalle[idx].descrip_esp,
|
|
detalle[idx].pitbis
|
|
ELSE
|
|
DISPLAY detalle[idx].descrip_esp TO record2[scr_l].descripcion
|
|
DISPLAY detalle[idx].pitbis TO record2[scr_l].pitbis
|
|
END IF
|
|
END IF
|
|
AFTER FIELD cantidad
|
|
NEXT FIELD precio
|
|
AFTER FIELD precio
|
|
CALL calcula_valor(arr_count())
|
|
|
|
NEXT FIELD ddescuento
|
|
AFTER ROW
|
|
LET idx = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF detalle[idx].valor_desc IS NULL THEN
|
|
LET detalle[idx].valor_desc=0
|
|
END IF
|
|
IF detalle[idx].valor_itbis IS NULL THEN
|
|
LET detalle[idx].valor_itbis=0
|
|
END IF
|
|
|
|
IF detalle[idx].cantidad IS NOT NULL THEN
|
|
LET detalle[idx].valor = detalle[idx].cantidad * detalle[idx].precio
|
|
IF detalle[idx].ddescuento IS NOT NULL THEN
|
|
LET detalle[idx].valor_desc = detalle[idx].valor * (detalle[idx].ddescuento/100)
|
|
LET detalle[idx].valor = detalle[idx].valor - detalle[idx].valor_desc
|
|
END IF
|
|
IF detalle[idx].pitbis > 0 THEN
|
|
LET detalle[idx].valor_itbis = (detalle[idx].cantidad * detalle[idx].precio) - detalle[idx].valor_desc
|
|
LET detalle[idx].valor_itbis =detalle[idx].valor_itbis * (detalle[idx].pitbis / 100)
|
|
|
|
END IF
|
|
LET detalle[idx].valor = detalle[idx].valor + detalle[idx].valor_itbis
|
|
DISPLAY detalle[idx].pitbis TO record2[scr_l].pitbis
|
|
DISPLAY detalle[idx].valor TO record2[scr_l].valor
|
|
DISPLAY detalle[idx].valor_itbis TO record2[scr_l].valor_itbis
|
|
DISPLAY detalle[idx].valor_desc TO record2[scr_l].valor_desc
|
|
END IF
|
|
|
|
LET encabezado.bruto=0
|
|
LET encabezado.descuento=0
|
|
LET encabezado.itbis=0
|
|
LET encabezado.neto=0
|
|
LET encabezado.sub_total=0
|
|
FOR idx1 =1 TO arr_count()
|
|
IF detalle[idx1].valor IS NOT NULL THEN
|
|
IF detalle[idx1].valor_desc IS NULL THEN
|
|
LET detalle[idx1].valor_desc = 0
|
|
END IF
|
|
IF detalle[idx1].valor_itbis IS NULL THEN
|
|
LET detalle[idx1].valor_itbis =0
|
|
END IF
|
|
LET encabezado.bruto = (detalle[idx1].cantidad * detalle[idx1].precio) + encabezado.bruto
|
|
LET encabezado.descuento =detalle[idx1].valor_desc + encabezado.descuento
|
|
|
|
LET encabezado.itbis = detalle[idx1].valor_itbis + encabezado.itbis
|
|
LET encabezado.sub_total = encabezado.bruto - encabezado.descuento
|
|
LET encabezado.neto = encabezado.sub_total +encabezado.itbis
|
|
ELSE
|
|
IF detalle[idx1].cod_n IS NOT NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
DISPLAY BY NAME encabezado.bruto,encabezado.descuento,encabezado.itbis,
|
|
encabezado.neto,encabezado.descuento,encabezado.sub_total
|
|
|
|
BEFORE FIELD cod_n
|
|
IF estado <> "N" THEN
|
|
NEXT FIELD codigo_id
|
|
END IF
|
|
ON KEY (F12)
|
|
IF estado = 'N' THEN
|
|
EXECUTE suma_facturas INTO balance USING encabezado.codigo_id,pfecha,fecha1
|
|
DISPLAY BY NAME balance
|
|
|
|
IF balance+encabezado.neto > limite_cr THEN
|
|
CALL fgl_winmessage("ERROR","ESTE EMPLEADO TIENE SI LIMITE DE CREDITO AGOTADO, NO PUEDE REALIZAR FACTURA","INFO")
|
|
NEXT FIELD precio
|
|
END IF
|
|
|
|
EXECUTE comando2 INTO encabezado.factura_no
|
|
IF encabezado.factura_no IS NULL THEN
|
|
LET encabezado.factura_no = 0
|
|
END IF
|
|
LET encabezado.factura_no = encabezado.factura_no + 1
|
|
DISPLAY BY NAME encabezado.factura_no
|
|
#WHENEVER ERROR CONTINUE
|
|
|
|
BEGIN WORK
|
|
FOR idx1 = 1 TO arr_count()
|
|
IF detalle[idx1].cod_n IS NOT NULL THEN
|
|
IF detalle[idx1].valor IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD cantidad
|
|
|
|
END IF
|
|
EXECUTE inscomando USING encabezado.factura_no,detalle[idx1].cod_n,detalle[idx1].cod_grupo,
|
|
detalle[idx1].cod_tipo,detalle[idx1].cod_sec,detalle[idx1].descrip_esp,detalle[idx1].cantidad,detalle[idx1].precio,
|
|
detalle[idx1].ddescuento,detalle[idx1].pitbis,detalle[idx1].valor
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL err_mensajes(SQLCA.sqlcode)
|
|
EXIT FOR
|
|
RETURN
|
|
END IF
|
|
|
|
END IF
|
|
|
|
END FOR
|
|
IF encabezado.cond_pago = 2 THEN
|
|
INSERT INTO notb00008 (num_nomi,tipo_emp,clase_mov,fecha,num_emp,departamento,nivel_emp,cod_puesto,cod_mov,cantidad,valor,us_crea,fech_crea)
|
|
VALUES (encabezado.factura_no,ptipo,'F',fecha1,encabezado.codigo_id,pdepartamento,pnivel_emp,pcod_puesto,'19','0',encabezado.neto,usuarios,getdate())
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL err_mensajes(SQLCA.sqlcode)
|
|
|
|
RETURN
|
|
END IF
|
|
|
|
INSERT INTO notb00011 (num_doc,fecha,cod_mov,monto,num_emp,departamento,nivel_emp,cod_puesto,us_crea,fech_crea)
|
|
VALUES (encabezado.factura_no,encabezado.fecha_factura,'19',encabezado.neto,encabezado.codigo_id,
|
|
pdepartamento,pnivel_emp,pcod_puesto,usuarios,getdate())
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL err_mensajes(SQLCA.sqlcode)
|
|
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
IF encabezado.nombre_cliente IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD nombre_cliente
|
|
END IF
|
|
EXECUTE inscomando1 USING encabezado.factura_no,encabezado.fecha_factura,pfecha,
|
|
encabezado.codigo_id,encabezado.cond_pago,
|
|
encabezado.nombre_cliente,
|
|
encabezado.bruto,encabezado.descuento,
|
|
encabezado.itbis,encabezado.sub_total,encabezado.neto,
|
|
usuarios
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL err_mensajes(SQLCA.sqlcode)
|
|
RETURN
|
|
ELSE
|
|
|
|
COMMIT WORK
|
|
# REPORTE
|
|
LET balance = balance + encabezado.neto
|
|
CALL impresion_fact()
|
|
CALL impresion_fact()
|
|
|
|
CALL detalle.clear()
|
|
INITIALIZE encabezado.* TO NULL
|
|
LET encabezado.cond_pago=2
|
|
LET encabezado.fecha_factura=TODAY
|
|
DISPLAY BY NAME encabezado.*
|
|
NEXT FIELD codigo_id
|
|
|
|
END IF
|
|
|
|
END IF
|
|
|
|
|
|
CONTINUE DIALOG
|
|
AFTER INPUT
|
|
IF detalle[idx].descrip_esp IS NULL AND detalle[idx].cod_n IS NOT NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
IF detalle[idx].descrip_esp IS NOT NULL THEN
|
|
IF detalle[idx].cantidad IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD cantidad
|
|
END IF
|
|
IF detalle[idx].precio IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD precio
|
|
END IF
|
|
|
|
END IF
|
|
END INPUT
|
|
|
|
ON ACTION CANCEL
|
|
|
|
EXIT DIALOG
|
|
|
|
END DIALOG
|
|
|
|
IF INT_FLAG THEN
|
|
LET INT_FLAG = FALSE
|
|
RETURN
|
|
END IF
|
|
END FUNCTION
|
|
REPORT factura(x,z,xdepartamento)
|
|
DEFINE x RECORD
|
|
factura_no INT,
|
|
fecha_factura DATE,
|
|
cond_pago SMALLINT,
|
|
codigo_id INT,
|
|
nombre_cliente VARCHAR(90),
|
|
bruto DEC(12,2),
|
|
descuento DEC(12,2),
|
|
itbis DEC(12,2),
|
|
sub_total DEC(12,2),
|
|
neto DEC(12,2),
|
|
estado VARCHAR(30)
|
|
END RECORD,
|
|
xdepartamento SMALLINT
|
|
DEFINE z RECORD
|
|
cod_n CHAR(25),
|
|
cod_grupo INT,
|
|
cod_tipo INT,
|
|
cod_sec INT,
|
|
descrip_esp VARCHAR(80),
|
|
cantidad DEC(12,2),
|
|
precio DEC(12,2),
|
|
ddescuento DEC(12,2),
|
|
valor_desc DEC(12,2),
|
|
pitbis DEC(12,2),
|
|
valor_itbis DEC(12,2),
|
|
valor DEC(12,2)
|
|
END RECORD,
|
|
hora VARCHAR(16),
|
|
descripcion_dpto CHAR(30)
|
|
|
|
FORMAT
|
|
FIRST PAGE HEADER
|
|
LET descripcion_dpto = NULL
|
|
SELECT a.nom_dpto INTO descripcion_dpto FROM adtb00001 a
|
|
WHERE a.departamento = xdepartamento
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET descripcion_dpto = "NO EXISTE"
|
|
LET STATUS = 0
|
|
|
|
END IF
|
|
LET hora =CURRENT YEAR TO MINUTE
|
|
|
|
PRINTX nombre_cia,hora,pfecha,x.factura_no,xdepartamento,descripcion_dpto
|
|
ON EVERY ROW
|
|
PRINTX x.fecha_factura,x.nombre_cliente,x.codigo_id,x.bruto,x.descuento,x.itbis,
|
|
x.sub_total,x.neto,z.*,balance
|
|
|
|
|
|
END REPORT
|
|
FUNCTION impresion_fact()
|
|
|
|
LET r_filename = "veprmt022.4rp"
|
|
# LET preview = 0
|
|
LET r_output = 'SVG'
|
|
iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
|
|
CALL fgl_report_selectDevice(r_output) -- changing default
|
|
|
|
IF preview = 0 THEN
|
|
CALL fgl_report_selectPreview(1)
|
|
|
|
CALL fgl_report_configureSVGPreview("PrintOnNamedPrinter")
|
|
CALL fgl_report_setSVGPrinterName("EPSON TM-T20II Receipt")
|
|
CALL fgl_report_setSVGCopies(2)
|
|
ELSE
|
|
CALL fgl_report_selectPreview(preview)
|
|
END IF
|
|
|
|
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
|
|
START REPORT factura TO XML HANDLER HANDLER
|
|
FOR idx = 1 TO arr_count()
|
|
IF detalle[idx].cod_n IS NOT NULL THEN
|
|
OUTPUT TO REPORT factura(encabezado.*,detalle[idx].*,Pdepartamento)
|
|
END IF
|
|
END FOR
|
|
FINISH REPORT factura
|
|
END IF
|
|
|
|
END FUNCTION
|
|
FUNCTION relacion()
|
|
DEFINE fecha_inicial,fecha_final DATE,
|
|
criterio VARCHAR(100),
|
|
select2 VARCHAR(500),
|
|
registro RECORD
|
|
factura INT,
|
|
fecha_factura CHAR(10),
|
|
fecha_nomina CHAR(10),
|
|
codigo_id INT,
|
|
nombre_cliente VARCHAR(60),
|
|
bruto DEC(12,2),
|
|
descuento DEC(12,2),
|
|
itbis DEC(12,2),
|
|
sub_total DEC(12,2),
|
|
neto DEC(12,2),
|
|
estado CHAR(20),
|
|
condicion VARCHAR(30)
|
|
|
|
END RECORD,
|
|
primera CHAR(1),
|
|
impresion CHAR(2),
|
|
forma_reporte varchar(10)
|
|
|
|
OPEN WINDOW w2 WITH FORM "vepfmrp001"
|
|
DIALOG ATTRIBUTE (FIELD ORDER FORM, UNBUFFERED)
|
|
|
|
INPUT BY NAME fecha_inicial,fecha_final,preview,forma_reporte
|
|
BEFORE INPUT
|
|
LET fecha_final = TODAY
|
|
DISPLAY BY NAME fecha_final
|
|
AFTER INPUT
|
|
IF fecha_final IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD fecha_final
|
|
END IF
|
|
IF fecha_inicial IS NULL THEN
|
|
CALL err_mensajes(16)
|
|
NEXT FIELD fecha_inicial
|
|
END IF
|
|
|
|
END INPUT
|
|
CONSTRUCT BY NAME criterio ON a.codigo_id,a.cond_pago
|
|
|
|
ON ACTION impresion
|
|
IF forma_reporte = "Detalle" THEN
|
|
LET select2 =
|
|
" SELECT a.factura,CONVERT(CHAR(10),a.fecha_factura,103),CONVERT(CHAR(10),a.fecha_nomina,103),",
|
|
" a.codigo_id,a.nombre_cliente,a.bruto,a.descuento,a.itbis,a.sub_total,a.neto,",
|
|
" a.status_t,
|
|
CASE a.cond_pago WHEN 1 THEN 'OTRAS FACTURAS' ELSE 'CREDITO EMPLEADOS' END ",
|
|
" FROM puntodeventas.dbo.vetb00002 a WHERE ",
|
|
" a.fecha_factura between ? and ? AND ",criterio CLIPPED,
|
|
" ORDER BY a.cond_pago,a.factura"
|
|
ELSE
|
|
LET select2 =
|
|
" SELECT '0',' ',' ',",
|
|
" a.codigo_id,CAST(a.codigo_id as varchar)+'-'+a.nombre_cliente,SUM(a.bruto),SUM(a.descuento),SUM(a.itbis),SUM(a.sub_total),SUM(a.neto),",
|
|
" ' ',
|
|
' ' ",
|
|
" FROM puntodeventas.dbo.vetb00002 a WHERE ",
|
|
" a.fecha_factura between ? and ? AND ",criterio CLIPPED,
|
|
" AND a.status_t IS NULL ",
|
|
" GROUP BY a.codigo_id,a.nombre_cliente ",
|
|
" ORDER BY a.codigo_id"
|
|
|
|
END IF
|
|
PREPARE relacion1 FROM select2
|
|
DECLARE busca_r CURSOR FOR relacion1
|
|
OPEN busca_r USING fecha_inicial,fecha_final
|
|
LET primera = 'S'
|
|
LET impresion = "NO"
|
|
FOREACH busca_r INTO registro.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET impresion = 'NO'
|
|
CALL err_mensajes(3)
|
|
EXIT FOREACH
|
|
END IF
|
|
LET impresion = 'SI'
|
|
IF primera = 'S' THEN
|
|
LET r_filename = "veprrp001.4rp"
|
|
# LET preview = 1
|
|
LET r_output = 'SVG'
|
|
iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
|
|
CALL fgl_report_selectDevice(r_output)
|
|
|
|
-- changing default
|
|
IF preview = 0 THEN
|
|
CALL fgl_report_selectPreview(1) -- changing default
|
|
CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
|
|
ELSE
|
|
CALL fgl_report_selectPreview(preview)
|
|
|
|
END IF
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
ELSE
|
|
EXIT PROGRAM
|
|
END IF
|
|
START REPORT r_registros TO XML HANDLER HANDLER
|
|
END IF
|
|
LET primera = 'N'
|
|
IF registro.estado = 'E' THEN
|
|
LET registro.nombre_cliente = registro.nombre_cliente[1,15]," NULA"
|
|
END IF
|
|
OUTPUT TO REPORT r_registros(registro.*,fecha_inicial,fecha_final)
|
|
END FOREACH
|
|
IF impresion = "SI" THEN
|
|
FINISH REPORT r_registros
|
|
END IF
|
|
ON ACTION CANCEL
|
|
LET INT_FLAG = FALSE
|
|
EXIT DIALOG
|
|
|
|
EXIT DIALOG
|
|
END CONSTRUCT
|
|
|
|
END DIALOG
|
|
CLOSE WINDOW w2
|
|
END FUNCTION
|
|
REPORT r_registros(x,xfecha1,xfecha2)
|
|
DEFINE x RECORD
|
|
factura INT,
|
|
fecha_factura CHAR(10),
|
|
fecha_nomina CHAR(10),
|
|
codigo_id INT,
|
|
nombre_cliente VARCHAR(60),
|
|
bruto DEC(12,2),
|
|
descuento DEC(12,2),
|
|
itbis DEC(12,2),
|
|
sub_total DEC(12,2),
|
|
neto DEC(12,2),
|
|
estado CHAR(20),
|
|
condicion VARCHAR(30)
|
|
|
|
END RECORD,
|
|
hora CHAR(16),
|
|
total_condicion,total_venta DEC(12,2),
|
|
xfecha1 ,
|
|
xfecha2 CHAR(10)
|
|
|
|
ORDER BY x.condicion,x.factura
|
|
|
|
FORMAT
|
|
|
|
FIRST PAGE HEADER
|
|
LET hora = CURRENT YEAR TO MINUTE
|
|
#PRINTX nombre_cia,hora,x.fecha_inicial,x.fecha_final
|
|
LET total_venta = 0
|
|
BEFORE GROUP OF x.condicion
|
|
LET total_condicion = 0
|
|
|
|
ON EVERY ROW
|
|
IF x.estado IS NULL OR x.estado = ' ' THEN
|
|
LET total_venta = total_venta + x.neto
|
|
LET total_condicion = total_condicion + x.neto
|
|
END IF
|
|
|
|
PRINTX x.*,nombre_cia,hora,xfecha1,xfecha2
|
|
AFTER GROUP OF x.condicion
|
|
PRINTX total_condicion
|
|
ON LAST ROW
|
|
PRINTX total_venta
|
|
END REPORT
|
|
FUNCTION calcula_valor(cuenta_fila)
|
|
DEFINE cuenta_fila SMALLINT
|
|
LET encabezado.bruto=0
|
|
LET encabezado.descuento=0
|
|
LET encabezado.itbis=0
|
|
LET encabezado.neto=0
|
|
LET encabezado.sub_total=0
|
|
FOR idx1 =1 TO cuenta_fila
|
|
|
|
IF detalle[idx1].valor_desc IS NULL THEN
|
|
LET detalle[idx1].valor_desc=0
|
|
END IF
|
|
IF detalle[idx1].valor_itbis IS NULL THEN
|
|
LET detalle[idx1].valor_itbis=0
|
|
END IF
|
|
|
|
IF detalle[idx1].cantidad IS NOT NULL THEN
|
|
LET detalle[idx1].valor = detalle[idx1].cantidad * detalle[idx1].precio
|
|
IF detalle[idx1].ddescuento IS NOT NULL THEN
|
|
LET detalle[idx1].valor_desc = detalle[idx1].valor * (detalle[idx1].ddescuento/100)
|
|
LET detalle[idx1].valor = detalle[idx1].valor - detalle[idx1].valor_desc
|
|
END IF
|
|
IF detalle[idx1].pitbis > 0 THEN
|
|
LET detalle[idx1].valor_itbis = (detalle[idx1].cantidad * detalle[idx].precio) - detalle[idx1].valor_desc
|
|
LET detalle[idx1].valor_itbis =detalle[idx1].valor_itbis * (detalle[idx1].pitbis / 100)
|
|
|
|
END IF
|
|
LET detalle[idx1].valor = detalle[idx1].valor + detalle[idx1].valor_itbis
|
|
DISPLAY detalle[idx1].pitbis TO record2[scr_l].pitbis
|
|
DISPLAY detalle[idx1].valor TO record2[scr_l].valor
|
|
DISPLAY detalle[idx1].valor_itbis TO record2[scr_l].valor_itbis
|
|
DISPLAY detalle[idx1].valor_desc TO record2[scr_l].valor_desc
|
|
END IF
|
|
|
|
|
|
IF detalle[idx1].valor IS NOT NULL THEN
|
|
IF detalle[idx1].valor_desc IS NULL THEN
|
|
LET detalle[idx1].valor_desc = 0
|
|
END IF
|
|
IF detalle[idx1].valor_itbis IS NULL THEN
|
|
LET detalle[idx1].valor_itbis =0
|
|
END IF
|
|
LET encabezado.bruto = (detalle[idx1].cantidad * detalle[idx1].precio) + encabezado.bruto
|
|
LET encabezado.descuento =detalle[idx1].valor_desc + encabezado.descuento
|
|
|
|
LET encabezado.itbis = detalle[idx1].valor_itbis + encabezado.itbis
|
|
LET encabezado.sub_total = encabezado.bruto - encabezado.descuento
|
|
LET encabezado.neto = encabezado.sub_total +encabezado.itbis
|
|
|
|
END IF
|
|
END FOR
|
|
DISPLAY BY NAME encabezado.bruto,encabezado.itbis,
|
|
encabezado.neto,encabezado.descuento,encabezado.sub_total
|
|
|
|
END FUNCTION
|
|
FUNCTION quemasvende()
|
|
DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec INT
|
|
LET selec =
|
|
"SELECT TOP 1 a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,COUNT(*) FROM vetb00003 a
|
|
group by a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec order by desc "
|
|
PREPARE buscav FROM selec
|
|
EXECUTE buscav INTO pcodn,pcodgrupo,pcodtipo,pcodsec
|
|
|
|
RETURN pcodn,pcodgrupo,pcodtipo,pcodsec
|
|
END FUNCTION |