{ ================================================================================ 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