Files
MBS/PROYECTO/vedir/veconvierteorden.4gl
T

1099 lines
36 KiB
Plaintext

{
================================================================================
FUNCION : VECONVIERTEORDEN
OBJETIVO : PASAR LAS COTIZACIONES DE FORMA AUTOAMTICA A ORDEN DE PEDIDOS
PROGRAMADOR : ING. JUAN SOTO
FECHA REALIZACION: 19/12/2011
================================================================================
}
SCHEMA smarmotech
GLOBALS
DEFINE
normal,
negrilla_on,
negrillas_of,
comp_on,
comp_off,
doce,
doble_on,
doble_off
CHAR(3),
tipoNcf VARCHAR(2),
cmd, imprime, copia, copia1 CHAR(150),
archivo, archivo1 CHAR(80),
p_compania RECORD LIKE companias.*,
prtb08 RECORD LIKE prtb00012.*,
pvetb50 RECORD LIKE vetb00050.*,
ult_numero INT,
p_prtb14 RECORD LIKE prtb00014.*,
producto, file_impresora STRING,
printers DYNAMIC ARRAY OF SMALLINT,
printers_ant SMALLINT,
mensaje STRING,
identificacion VARCHAR(25)
END GLOBALS
FUNCTION convierteorden(
xcotizacion_no, xorden, xusuario, xclave, ximpresor, xcopia, xtipo_orden)
DEFINE
xcotizacion_no, xsecvend_a INT,
actualizar STRING,
pagaITBIS VARCHAR(1),
xtipo_orden VARCHAR(50),
xusuario, xclave, pdescripcion, punidad CHAR(50),
pcosto DEC(12, 5),
xorden CHAR(25),
pcodn, parea, pcodgrupo, pcodtipo, pcodsec, idx, ximpresor, xcopia
SMALLINT,
pcantidad1, pcantidad DEC(12, 5),
pvetb22 RECORD LIKE vetb00022.*,
pprecio, monto_cotizacion DEC(12, 2),
pdesc DEC(8, 2),
pkit INT,
pfecha_compromiso DATE
CALL STARTLOG("veconvierte.txt")
SELECT UNIQUE a.num_oc
FROM prtb00012 a
WHERE a.cotizacion_no = xcotizacion_no AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
CALL fgl_winmessage(
"ERROR", "COTIZACION TIENE ORDEN, NO PUEDE CREAR ORDEN", "STOP")
RETURN 0, FALSE
END IF
# CONTROL DESPIECE
LET pcantidad = 0
LET pcantidad1 = 0
SELECT num_oc INTO ult_numero FROM prtb00020
IF ult_numero IS NULL THEN
LET ult_numero = 0
END IF
LET ult_numero = ult_numero + 1
LET xsecvend_a = NULL
SELECT a.tipo_cliente,
a.nombre_cliente,
a.nombre_proyecto,
a.cotizacion_no,
CONVERT(CHAR(10), a.fecha_entrega, 103),
a.sec_vend_aux,
a.rnc,
a.total_neto,
b.codigo_dgii
INTO pvetb50.tipo_cliente,
pvetb50.nombre_cliente,
pvetb50.nombre_proyecto,
pvetb50.cotizacion_no,
pfecha_compromiso,
xsecvend_a,
identificacion,
monto_cotizacion,
tipoNcf
FROM vetb00050 a, vetb00060 b
WHERE a.cotizacion_no = xcotizacion_no
AND a.tipo_cliente = b.tipo_cliente
IF identificacion IS NULL AND monto_cotizacion > 25000 THEN
CALL msg(1023)
RETURN 0, FALSE
END IF
IF identificacion IS NULL AND monto_cotizacion < 25000 THEN
LET identificacion = '12345670901'
UPDATE vetb00050
SET rnc = identificacion
WHERE cotizacion_no = xcotizacion_no
END IF
IF tipoNcf = '31' AND identificacion IS NULL THEN
CALL msg(1023)
ROLLBACK WORK
RETURN 0, FALSE
END IF
# Cierra cualquier transaccion colgada por un intento previo fallido
# (evita el error -535 "Already in transaction" en el BEGIN WORK)
WHENEVER ANY ERROR CONTINUE
ROLLBACK WORK
WHENEVER ANY ERROR STOP
BEGIN WORK
UPDATE prtb00020
SET num_oc = ult_numero, us_crea = xusuario, fech_crea = GETDATE()
IF xsecvend_a IS NULL OR xsecvend_a = 0 THEN
LET actualizar =
" INSERT INTO prtb00012
(ventas,cotizacion_no,num_oc,fecha_oc,nombre_file,sec_vend,tipo_cliente,
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea,fech_crea,tipo_orden,
num_emp_inst,bodega,titulo_bodega)
SELECT a.ventas,a.cotizacion_no,'",
ult_numero,
"','",
CURRENT,
"', '",
xorden CLIPPED,
"',a.sec_vend,a.tipo_cliente,a.sec_cliente,a.direccion_cliente, ",
"a.telefono_r,a.fax,a.cond_pago,a.direccion_proyecto,'N',SUSER_SNAME(),GETDATE(), '",
xtipo_orden CLIPPED,
"', a.num_emp_inst,a.bodega,a.titulo_bodega ",
"FROM vetb00050 a WHERE a.cotizacion_no=",
xcotizacion_no
# DISPLAY actualizar
ELSE
LET actualizar =
" INSERT INTO prtb00012
(ventas,cotizacion_no,num_oc,fecha_oc,nombre_file,sec_vend,tipo_cliente,
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea,fech_crea,tipo_orden,num_emp_inst)
SELECT ventas,'",
xcotizacion_no,
"','",
ult_numero,
"','",
CURRENT,
"','",
xorden CLIPPED,
"','",
xsecvend_a,
"',tipo_cliente,sec_cliente,direccion_cliente, ",
"telefono_r,fax,cond_pago,direccion_proyecto,'N',SUSER_SNAME(),GETDATE(), '",
xtipo_orden CLIPPED,
"', num_emp_inst ",
"FROM vetb00050 WHERE cotizacion_no=",
xcotizacion_no
END IF
PREPARE xvetb50 FROM actualizar
TRY
EXECUTE xvetb50
CATCH
# SQLERRMESSAGE trae el texto real del error de SQL Server;
# SQLCA.SQLERRM normalmente solo trae un fragmento (tabla/columna).
LET mensaje = "NO FUE POSIBLE CREAR ORDEN [cod ", SQLCA.SQLCODE USING "<<<<<<&",
"]: ", SQLERRMESSAGE CLIPPED,
" (num_oc=", ult_numero USING "<<<<<<<", " cotizacion=", xcotizacion_no USING "<<<<<<<", ")"
DISPLAY "mensaje: ", mensaje
ROLLBACK WORK
CALL fgl_winmessage("ERROR AL CREAR ORDEN", mensaje CLIPPED, "STOP")
RETURN 0, FALSE
END TRY
LET idx = 1
LET actualizar =
"SELECT a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.direccion,a.sec_vend,a.tipo_cliente,a.sec_cliente, ",
" a.ubicacion,a.cond_pago,a.nombre_file,a.bodega,a.titulo_bodega ",
"FROM prtb00012 a WHERE a.num_oc ='",
ult_numero,
"'"
PREPARE xprtb12 FROM actualizar
EXECUTE xprtb12
INTO prtb08.num_oc,
prtb08.fecha_oc,
prtb08.direccion,
prtb08.sec_vend,
prtb08.tipo_cliente,
prtb08.sec_cliente,
prtb08.ubicacion,
prtb08.cond_pago,
prtb08.nombre_file,
prtb08.bodega,
prtb08.titulo_bodega
DECLARE xvetb22 CURSOR FOR
SELECT a.* FROM vetb00022 a WHERE a.cotizacion_no = xcotizacion_no
FOREACH xvetb22 INTO pvetb22.*
IF pvetb22.etiqueta IS NOT NULL THEN
INSERT INTO prtb00022(
num_oc,
etiqueta,
secuencia,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
lado_1,
lado_2,
lado_3,
cantidad,
medida,
us_crea)
VALUES(ult_numero,
pvetb22.etiqueta,
pvetb22.secuencia,
pvetb22.area,
pvetb22.cod_n,
pvetb22.cod_grupo,
pvetb22.cod_tipo,
pvetb22.cod_sec,
pvetb22.lado_1,
pvetb22.lado_2,
pvetb22.lado_3,
pvetb22.cantidad,
pvetb22.medida,
xusuario)
END IF
END FOREACH
# ACTUALIZA ESTADO
UPDATE vetb00050
SET estado = 'LOGRADA', fech_mod = getdate(), us_mod = xusuario
WHERE cotizacion_no = xcotizacion_no
CALL defecto(
xusuario, xclave, ximpresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia1
START REPORT o_pedido1 TO archivo
CALL oc_detalles()
DECLARE xvetb51 CURSOR FOR
SELECT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad_1,
a.cantidad,
b.descrip_esp,
b.unidad_med,
a.precio,
a.porc_Desc,
a.id_kit,
c.impresora
FROM vetb00051 a, iptb00002 b, iptb00020 c
WHERE a.cotizacion_no = xcotizacion_no
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
AND a.id_kit IS NULL
AND a.cod_n = c.cod_n
UNION SELECT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad,
a.cantidad,
b.descrip_esp,
b.unidad_med,
a.precio,
a.porc_Desc,
a.id_kit,
c.impresora
FROM vetb00031 a, iptb00002 b, iptb00020 c
WHERE a.cotizacion_no = xcotizacion_no
AND a.cod_n = c.cod_n
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
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
AND a.id_kit IS NOT NULL
ORDER BY c.impresora
LET idx = 1
CALL printers.clear()
FOREACH xvetb51
INTO parea,
pcodn,
pcodgrupo,
pcodtipo,
pcodsec,
pcantidad1,
pcantidad,
pdescripcion,
punidad,
pprecio,
pdesc,
pkit,
printers[idx]
#CONTROL KIT
IF pkit IS NOT NULL THEN
SELECT DISTINCT a.id_kit
FROM vetb00031 a
WHERE a.cotizacion_no = xcotizacion_no AND a.id_kit = pkit
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
CALL msg(16)
RETURN 0, FALSE
END IF
END IF
#BUSCA COSTO
LET pcosto = 0
IF pcodn <> 25 OR pcodn <> 12 OR pcodn <> 5 THEN
SELECT AVG(a.material + a.labor + gastos)
INTO pcosto
FROM iptb00004 a
WHERE a.ano = YEAR(today)
AND (a.cod_n = pcodn
AND a.cod_grupo = pcodgrupo
AND a.cod_tipo = pcodtipo
AND a.cod_Sec = pcodsec)
AND a.status_t IS NULL
{ IF pcosto = 0 THEN
ROLLBACK WORK
LET producto = pcodn USING "&&&&","-",pcodgrupo USING "&&&&", pcodtipo USING "&&&&",
pcodsec USING "&&&&", " NO TIENE COSTO, FAVOR DE INFORMAR A FINANZAS, NO SE ADICIONO LA ORDEN"
CALL fgl_winmessage("INFO",producto,"info")
RETURN 0,FALSE
END IF}
ELSE
LET pcosto = (pprecio * (pdesc / 100)) - pprecio
END IF
INSERT INTO prtb00013(
num_oc,
secuencia,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
us_crea,
fech_crea,
precio,
descuento,
id_kit,
costo)
VALUES(ult_numero,
idx,
parea,
pcodn,
pcodgrupo,
pcodtipo,
pcodsec,
pcantidad,
SUSER_SNAME(),
GETDATE(),
pprecio,
pdesc,
pkit,
pcosto)
INSERT INTO prtb00023(
num_oc,
secuencia,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad_1,
cantidad,
id_kit)
VALUES(ult_numero,
idx,
parea,
pcodn,
pcodgrupo,
pcodtipo,
pcodsec,
pcantidad1,
pcantidad,
pkit)
# DESAUTORIZA LAS RESERVAS
UPDATE vetb00051
SET autorizada = 'NO'
WHERE cotizacion_no = xcotizacion_no
AND cod_n = pcodn
AND cod_grupo = pcodgrupo
AND cod_tipo = pcodtipo
AND cod_Sec = pcodsec
OUTPUT TO REPORT o_pedido1(
ult_numero,
idx,
parea,
pcodn,
pcodgrupo,
pcodtipo,
pcodsec,
pdescripcion,
punidad,
pcantidad1,
pcantidad,
pprecio,
pdesc,
pkit,
p_prtb14.*,
xcotizacion_no,
pkit)
LET idx = idx + 1
END FOREACH
{CREACION REGISTRO EN LA TABLA CODIGOS MADRES KIT EN LA ORDEN DE PEDIDOS}
LET actualizar =
" INSERT INTO prtb00031 ",
" (num_oc ",
" ,cotizacion_no ",
" ,id_kit ",
" ,secuencia ",
" ,area ",
" ,cod_n ",
" ,cod_grupo ",
" ,cod_tipo ",
" ,cod_sec ",
" ,cantidad ",
" ,us_crea ",
" ,fech_crea) ",
"SELECT '",
ult_numero USING "<<<<<<<<",
"'",
",a.cotizacion_no ",
",a.id_kit ",
",a.secuencia ",
",a.area ",
",a.cod_n ",
",a.cod_grupo ",
",a.cod_tipo ",
",a.cod_sec ",
",a.cantidad ",
",a.us_crea ",
",a.fech_crea ",
" FROM vetb00051 a WHERE a.cotizacion_no = ",
xcotizacion_no,
" and a.id_kit IS NOT NULL "
PREPARE kits_orden FROM actualizar
EXECUTE kits_orden
INSERT INTO prordenstatus(
fecha_trx, num_oc, cerrada, observacion, fecha_compromiso, usuario)
VALUES(GETDATE(),
ult_numero,
'N',
'CREACION ORDEN',
pfecha_compromiso,
xusuario)
COMMIT WORK
FINISH REPORT o_pedido1
# RUTINA PARA REALIZAR IMPRESION EN DIFERENTES LUGARES
LET file_impresora = archivo
LET printers_ant = 0
FOR idx = 1 TO printers.getLength()
IF printers[idx] IS NOT NULL THEN
# DISPLAY "printers ",printers[idx], " anterior ",printers_ant
IF printers_ant <> printers[idx] THEN
LET printers_ant = printers[idx]
CALL defecto(
xusuario, xclave, printers[idx])
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia1
# DISPLAY "printers ENVIADO ",printers[idx]
# DISPLAY "imprime ",imprime clipped," copia1 ",copia1 clipped," file ",file_impresora
LET imprime = "TYPE ", file_impresora CLIPPED, " ", copia1
# DISPLAY "IMPRIME ", imprime
RUN imprime
END IF
END IF
END FOR
LET archivo1 = file_impresora
CALL defecto(
xusuario, xclave, ximpresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia1
LET cmd = "TYPE ", archivo1 CLIPPED, " ", copia1
RUN cmd
# funcion fija para imprimir en impresora soporte a clientes
CALL defecto(
xusuario, xclave, 84)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia1
LET cmd = "TYPE ", archivo1 CLIPPED, " ", copia1
RUN cmd
# INSERTA ORDEN EN OTRA DB ##########################################
# BUSCA SI EL CLIENTE DEBE IR A LA OTRA BASE DE DATOS
{ SE COLOCO EN COMENTARIO, YA QUE EL PROCESO DABA ERRORES AL PASAR LA DATA A LA OTRA BASE DE DATOS,
EL PROGRAMA DEL PUNTO DE VENTAS VEPRMT022 TIENE LA TRANSFERENCIA DE LA ORDEN QUE VAN A FACTURAR EN EL MOMENTO
SELECT a.ncf INTO pagaITBIS FROM vetb00060 A
WHERE a.tipo_cliente = pvetb50.tipo_cliente
IF pagaITBIS = 'S' THEN
SET CONNECTION "IFMX"
LET actualizar =
" INSERT INTO prtb00012
(ventas,cotizacion_no,num_oc,fecha_oc,nombre_file,sec_vend,tipo_cliente,
sec_cliente,direccion,telefono,fax,cond_pago,ubicacion,cerrada,us_crea)",
"SELECT ventas,'",xcotizacion_no, "','",ult_numero USING "<<<<<<<<",
"',fecha,'",
xorden CLIPPED,"',sec_vend,tipo_cliente,sec_cliente,direccion_cliente, ",
"telefono_r,fax,cond_pago,direccion_proyecto,'N','",xusuario CLIPPED,"' ",
" FROM vetb00050 WHERE cotizacion_no='",xcotizacion_no USING "<<<<<<<","'"
PREPARE xfvetb50 FROM actualizar
EXECUTE xfvetb50
IF STATUS < 0 THEN
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR LA ORDEN, EXISTE PROBLEMAS","STOP")
RETURN 0,FALSE
END IF
LET idx = 1
LET actualizar=
"SELECT a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),a.direccion,a.sec_vend,a.tipo_cliente,a.sec_cliente, ",
" a.ubicacion,a.cond_pago,a.nombre_file ",
"FROM prtb00012 a WHERE a.num_oc ='", ult_numero,"'"
PREPARE xfprtb12 FROM actualizar
EXECUTE xfprtb12
INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.direccion,prtb08.sec_vend,
prtb08.tipo_cliente,prtb08.sec_cliente,prtb08.ubicacion,
prtb08.cond_pago,prtb08.nombre_file
IF STATUS < 0 THEN
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR LA ORDEN, EXISTE PROBLEMAS","STOP")
RETURN 0,FALSE
END IF
DECLARE xfvetb51 CURSOR FOR
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad_1,a.cantidad,
b.descrip_esp,b.unidad_med,a.precio,a.porc_Desc
FROM vetb00051 a,iptb00002 b
WHERE a.cotizacion_no = xcotizacion_no 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
FOREACH xfvetb51 INTO parea,pcodn,pcodgrupo,pcodtipo,pcodsec,
pcantidad1,pcantidad,pdescripcion,punidad,pprecio,
pdesc
INSERT INTO prtb00013 (num_oc,secuencia,cod_n,cod_grupo,cod_tipo,cod_sec,
cantidad,precio,descuento)
VALUES
(ult_numero,idx,pcodn,pcodgrupo,pcodtipo,pcodsec,
pcantidad,pprecio,pdesc)
IF STATUS < 0 THEN
CALL fgl_winmessage("ERROR","NO PUDE ADICIONAR LA ORDEN, EXISTE PROBLEMAS","STOP")
RETURN 0,FALSE
END IF
LET idx = idx + 1
END FOREACH
END IF
#------------------------------------------------------------------------------------
}
RETURN ult_numero, TRUE
END FUNCTION
REPORT o_pedido1(xnumero, z, y, jcotizacion_no, xkit)
DEFINE
z RECORD
fila SMALLINT,
area SMALLINT,
cod_n LIKE prtb00013.cod_n,
cod_grupo LIKE prtb00013.cod_grupo,
cod_tipo LIKE prtb00013.cod_tipo,
cod_sec LIKE prtb00013.cod_sec,
descrip_esp LIKE iptb00002.descrip_esp,
unidad_med LIKE iptb00002.unidad_med,
cantidad_1 DEC(12, 4),
cantidad DEC(12, 4),
precio DEC(12, 2),
porc_desc DEC(8, 2),
id_kit INT
END RECORD,
y RECORD LIKE prtb00014.*,
l SMALLINT,
jcotizacion_no, xkit INT,
i, xnumero INTEGER,
descripcion_kit VARCHAR(100),
normal,
comp_on,
comp_off,
doce,
negrillas_on,
negrillas_off,
doble_on,
doble_off
CHAR(2),
raya CHAR(120),
rayita CHAR(35),
total_gral, total_inst, subtotal, descuento, total_p DEC(12, 2),
ult_pago INTEGER,
plado1, plado2, plado3, pcantidad, pmedida, total_unidades DEC(12, 5),
etiqueta, prnc, ptelefono, xnumrnc CHAR(20),
descrip_p, nombres, apellidos CHAR(50),
descrip_area CHAR(40)
OUTPUT
LEFT MARGIN 0
ORDER BY z.area, z.cod_n, z.cod_grupo, z.cod_tipo, z.cod_sec
FORMAT
PAGE HEADER
LET normal = ASCII 27, ASCII 80
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET doble_on = ASCII 14
LET doble_off = ASCII 20
SELECT a.* INTO p_compania.* FROM companias a
LET l = (90 - LENGTH(p_compania.nombre CLIPPED)) / 2
PRINT comp_on
PRINT COLUMN l,
p_compania.nombre CLIPPED,
COLUMN 72,
TODAY USING "DD/MM/YYYY"
LET l = (100 - LENGTH("Ordenes de Pedido Corte a la Medida")) / 2
PRINT COLUMN l, "ORDENES DE PEDIDOS", COLUMN 72, TIME
LET prnc = "RNC:", p_compania.rnc
LET l = (90 - LENGTH(prnc)) / 2
PRINT COLUMN l, prnc
LET l = (90 - LENGTH(p_compania.direccion)) / 2
PRINT COLUMN l, p_compania.direccion
LET ptelefono = p_compania.telefono
LET l = (90 - LENGTH(ptelefono)) / 2
PRINT COLUMN l, ptelefono
PRINT COLUMN 001,
"ORDEN NO.: ",
doble_on,
xnumero USING "<<<<<<",
doble_off
SKIP 1 LINE
PRINT COLUMN 001,
"Fecha de la Orden : ",
prtb08.fecha_oc USING "DD/MMM/YYYY",
COLUMN 62,
"Fecha de Entrega : ",
prtb08.fecha_entrega USING "DD/MM/YYYY"
# Busca el ultimo pago realizado
LET ult_pago = NULL
{ 23/06/2017 NO PUEDE SER ESE NUMERO SELECT MAX(a.num_doc) INTO ult_pago
FROM cctb00001 a
WHERE a.tipo_doc IN ("AV","PG") AND
a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente AND
a.status_t IS NULL
}
# VENDEDOR
LET nombres = NULL
LET apellidos = NULL
SELECT a.nom1_emp, a.apell1_emp
INTO nombres, apellidos
FROM adtb00003 a
WHERE a.num_emp = prtb08.sec_vend
IF prtb08.nombre_file IS NULL THEN
SELECT a.nombre_file
INTO prtb08.nombre_file
FROM prtb00012 a
WHERE a.num_oc = xnumero
END IF
LET xnumrnc = NULL
SELECT a.num_rnc
INTO xnumrnc
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
PRINT COLUMN 001,
"CLIENTE : ",
pvetb50.nombre_cliente CLIPPED
PRINT COLUMN 001,
"CODIGO CLIENTE : ",
prtb08.tipo_cliente USING "&&",
"-",
prtb08.sec_cliente USING "&&&&&&&&"
PRINT COLUMN 001,
"Direccion : ",
prtb08.direccion CLIPPED,
COLUMN 062,
"Ubicacion : ",
prtb08.ubicacion CLIPPED
PRINT COLUMN 001,
"NUM RNC : ",
xnumrnc,
COLUMN 62,
"LUGAR RECOGIDA : ",
prtb08.titulo_bodega
PRINT COLUMN 1,
"Proyecto : ",
pvetb50.nombre_proyecto CLIPPED
PRINT COLUMN 001,
"Telefono : ",
prtb08.telefono CLIPPED,
COLUMN 62,
"Fax : ",
prtb08.fax CLIPPED
PRINT COLUMN 001,
"Condiciones : ",
descrip_p CLIPPED,
COLUMN 62,
"Vendedor : ",
prtb08.sec_vend USING "<<<<",
" ",
nombres CLIPPED,
" ",
apellidos CLIPPED
PRINT COLUMN 1,
"COTIZACION NO. : ",
jcotizacion_no USING "&&&&&&",
2 SPACES,
"Documento Referencia : ",
prtb08.nombre_file CLIPPED
FOR i = 1 TO 120
LET raya[i] = "-"
END FOR
FOR i = 1 TO 35
LET rayita[i] = "-"
END FOR
# PRINT "Nombre Archivo dibujo: ",parchivo
LET subtotal = 0
LET descuento = 0
LET total_p = 0
LET total_gral = 0
PRINT doce
PRINT raya
PRINT COLUMN 033,
"|ALTURA",
COLUMN 040,
"|TERMINACION",
COLUMN 64,
"|CANTIDAD"
PRINT COLUMN 001,
" CODIGO ",
COLUMN 012,
"|DESCRIPCION",
COLUMN 033,
"|ZOCALO|",
# COLUMN 047, "|TERMINACION",
COLUMN 048,
"|BISEL",
COLUMN 55,
"|UNID.",
COLUMN 64,
"|UNIDADES",
COLUMN 78,
"|CANTIDAD",
COLUMN 91,
"|PRECIO",
COLUMN 101,
"|%DESC.",
COLUMN 108,
" |TOTAL"
PRINT raya
BEFORE GROUP OF z.area
SELECT a.nombre_Area
INTO descrip_Area
FROM prtb00016 a
WHERE a.area_num = z.area
PRINT "AREA: ", descrip_area CLIPPED
BEFORE GROUP OF z.id_kit
IF z.id_kit IS NOT NULL THEN
SELECT a.descripcion
INTO descripcion_kit
FROM vetb00029 a
WHERE a.id_kit = z.id_kit
PRINT "DESCRIPCION KIT: ", descripcion_kit CLIPPED
END IF
ON EVERY ROW
LET descuento = (z.precio * z.cantidad) * (z.porc_desc / 100)
LET subtotal = subtotal + (z.precio * z.cantidad)
LET total_p = subtotal - descuento
LET total_gral = total_p + total_gral
PRINT COLUMN 1,
z.cod_n USING "&&&&",
"-",
z.cod_grupo USING "&&&&&",
"-",
z.cod_tipo USING "&&&&",
"-",
z.cod_sec USING "&&&&&&&&",
" ",
COLUMN 12,
z.descrip_esp WORDWRAP RIGHT MARGIN 40,
COLUMN 57,
z.unidad_med CLIPPED,
COLUMN 63,
z.cantidad_1 USING "##,###.####",
COLUMN 75,
z.cantidad USING "#,###,###.#&&&"
# COLUMN 90, z.precio USING "$,$$$,$##.##",
# COLUMN 103, z.porc_desc USING "###.##","%",
# COLUMN 111, total_p USING "$$,$$$,$##.##"
# BUSCA DESPIECE
DECLARE busca_d1 CURSOR FOR
SELECT b.descripcion,
a.lado_1,
a.lado_2,
a.lado_3,
a.cantidad,
a.medida
FROM prtb00022 a, vetb00026 b
WHERE a.etiqueta = b.codid
AND a.area = z.area
AND
#a.secuencia = z.fila AND
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
AND a.num_oc = xnumero
LET total_unidades = 0
FOREACH busca_d1
INTO etiqueta, plado1, plado2, plado3, pcantidad, pmedida
PRINT COLUMN 5,
pcantidad USING "<,<<<",
" ",
etiqueta CLIPPED,
" DE ",
plado1 USING "<<.#####",
" X ",
plado2 USING "<<.#####",
" X ",
plado3 USING "<<.#####",
" = ",
pmedida USING "<<<.#####"
LET total_unidades = total_unidades + pcantidad
END FOREACH
IF total_unidades > 0 THEN
PRINT COLUMN 19, "TOTAL UNIDADES ", total_unidades USING "<,<<<"
END IF
{# BUSCA COMPOSICION KIT
DECLARE busca_kit CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,b.descrip_esp
FROM prtb00030 a,iptb00002 b
WHERE a.num_oc = xnumero AND
a.id_kit = xkit 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 l = 1
FOREACH busca_kit INTO kit.cod_n,kit.cod_grupo,kit.cod_tipo,kit.cod_sec,kit.cantidad,descrip_p
PRINT COLUMN 5, kit.cantidad USING "<<<"," ",kit.cod_n USING "&&&&","-",
kit.cod_grupo USING "&&&&","-",
kit.cod_tipo USING "&&&&","-",
kit.cod_sec USING "&&&&"," ",descrip_p
LET l = l + 1
END FOREACH
}
ON LAST ROW
SKIP 1 LINE
PRINT COLUMN 075, "INSTALACION"
PRINT COLUMN 065, rayita
PRINT COLUMN 065,
"|",
" Cantidad |",
COLUMN 075,
" Precio |",
COLUMN 085,
" Total "
PRINT COLUMN 045,
"Instalacion Tope",
COLUMN 068,
prtb08.cantidad_i USING "####.#&",
COLUMN 078,
prtb08.precio_i USING "#,###.#&",
COLUMN 088,
(prtb08.cantidad_i * prtb08.precio_i) USING "#,###,###.#&"
PRINT COLUMN 045,
"Mano de Obra",
COLUMN 068,
prtb08.cantidad_mo USING "####.#&",
COLUMN 078,
prtb08.precio_mo USING "#,###.#&",
COLUMN 088,
(prtb08.cantidad_mo * prtb08.precio_mo) USING "#,###,###.#&"
PRINT COLUMN 065, rayita
LET total_inst =
(prtb08.cantidad_i * prtb08.precio_i)
+ (prtb08.cantidad_mo * prtb08.precio_mo)
PRINT COLUMN 065,
"Total Instalacion",
COLUMN 088,
total_inst USING "#,###,###.#&"
PRINT COLUMN 060,
"Transporte",
COLUMN 088,
prtb08.transporte USING "#,###,###.#&"
#PRINT COLUMN 060, "Sub-Total",
# COLUMN 088, prtb08.sub_total + total_inst USING "#,###,###.#&"
#PRINT COLUMN 060, "Itbis",
# COLUMN 088, prtb08.itbis USING "#,###,###.#&"
#PRINT COLUMN 060, "Total Ventas",
# COLUMN 088, total_gral USING "$$$,$$$,$##.##"
PRINT normal
SKIP 2 LINES
PRINT COLUMN 003, y.observacion WORDWRAP RIGHT MARGIN 50
PAGE TRAILER
PRINT COLUMN 10,
"-------------------",
COLUMN 35,
"-------------------",
COLUMN 57,
"-------------------"
PRINT COLUMN 13,
"VENDEDOR",
COLUMN 39,
"CLIENTE",
COLUMN 61,
"APROBADO POR"
END REPORT
FUNCTION oc_detalles()
OPEN WINDOW wobserva
AT 14, 2
WITH FORM "prfmwd002"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1)
INITIALIZE p_prtb14.* TO NULL
SELECT a.* INTO p_prtb14.* FROM prtb00014 a WHERE a.num_oc = prtb08.num_oc
#IF p_prtb14.observacion IS NULL THEN
SELECT a.comentario
INTO p_prtb14.observacion
FROM vetb00050 a
WHERE a.cotizacion_no = pvetb50.cotizacion_no
#END IF
INPUT BY NAME p_prtb14.observacion WITHOUT DEFAULTS
AFTER INPUT
INSERT INTO prtb00014(
num_oc, observacion, us_crea, fech_crea)
VALUES(ult_numero,
p_prtb14.observacion,
SUSER_SNAME(),
GETDATE())
EXIT INPUT
END INPUT
CLOSE WINDOW wobserva
END FUNCTION
FUNCTION verificacodigo(qcodn, qcodgrupo, qcodtipo, qcodsec, qcotizacion)
DEFINE
qcodn, qcodgrupo, qcodtipo, qcodsec SMALLINT,
qcotizacion INT,
estado BOOLEAN
LET estado = FALSE
SELECT DISTINCT a.cod_n
FROM iptb00027 a
WHERE a.cod_n = qcodn
AND a.cod_grupo = qcodgrupo
AND a.cod_tipo = qcodtipo
AND a.cod_Sec = qcodsec
IF STATUS <> NOTFOUND THEN
SELECT DISTINCT a.cotizacion_no
FROM vetb00052 a
WHERE a.cotizacion_no = qcotizacion
AND a.cod_n = qcodn
AND a.cod_tipo = qcodtipo
AND a.cod_sec = qcodsec
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"NO PUEDE CONVERTIR COTIZACION EN ORDEN, EXISTE UN ITEM QUE SE DESPIEZA Y NO SE ENCUENTRA EN TABLA, VERIFIQUE DESPIECE",
"INFO")
LET estado = TRUE
END IF
END IF
RETURN estado
END FUNCTION