{ ================================================================================ 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), cmd,imprime,copia,copia1 CHAR(150), archivo,archivo1 CHAR(80), p_compania RECORD LIKE companias.*, p_prtb14 RECORD LIKE prtb00014.*, prtb08 RECORD LIKE prtb00012.*, pvetb50 RECORD LIKE vetb00050.*, ult_numero INT, producto,file_impresora STRING, printers DYNAMIC ARRAY OF SMALLINT, id_file,printers_ant,i SMALLINT, xnombre_file STRING, exito BOOLEAN, contenido_final BYTE, pbodega INT, identificacion VARCHAR(25), tipoNcf VARCHAR(2), monto_cotizacion DEC(12,2), pmensaje_error STRING END GLOBALS FUNCTION convierteorden(xcotizacion_no,xorden,xusuario,xclave,ximpresor,xcopia,xtipo_orden,xcomentario,xnosolicitud,archivos) DEFINE xcotizacion_no,xsecvend_a INT, actualizar STRING, psolicitud_sql STRING, sb_sol base.StringBuffer, xnosolicitud VARCHAR(200), pagaITBIS VARCHAR(1), xcomentario VARCHAR(100), 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 etiqueta INT, cotizacion_no INT, secuencia INT, area INT, cod_n INT, cod_grupo INT, cod_tipo INT, cod_sec INT, lado_1 DEC(12,5) , lado_2 DEC(12,5), lado_3 DEC(12,5), cantidad DEC(12,5), medida DEC(12,5) END RECORD, pprecio DEC(12,2), pdesc DEC(8,2), pkit INT, pfecha_compromiso DATE, archivos DYNAMIC ARRAY OF RECORD tipo_file VARCHAR(3), contenido STRING, nombre_arch STRING END RECORD CALL STARTLOG("veconvierte.txt") # Sin esto, el default WHENEVER ERROR STOP aborta el proceso ante cualquier # error SQL y NUNCA se ejecutan los ROLLBACK/RETURN de abajo (la conexion # queda colgada -> el proximo request falla con "la conexion se esta usando"). WHENEVER ANY ERROR CONTINUE # CONTROL DESPIECE LET pcantidad = 0 LET pcantidad1 = 0 # IMPORTANTE: estas son variables GLOBALS. En el servidor de proceso unico # conservan el valor del request anterior; hay que reinicializarlas para que # un SELECT que no encuentre fila (NOTFOUND) no arrastre datos de otra orden. LET pmensaje_error = NULL LET identificacion = NULL LET monto_cotizacion = NULL LET tipoNcf = NULL LET pbodega = NULL INITIALIZE pvetb50.* TO NULL 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.bodega,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,pbodega,identificacion,monto_cotizacion,tipoNcf FROM vetb00050 a,vetb00060 b WHERE a.cotizacion_no =xcotizacion_no AND a.tipo_cliente = b.tipo_cliente # Si no hay fila (cotizacion inexistente o tipo_cliente sin config NCF en # vetb00060) no podemos continuar: reportar en vez de fallar en silencio. IF STATUS = NOTFOUND THEN LET pmensaje_error = SFMT("Cotizacion %1 sin datos o su tipo de cliente no tiene configuracion NCF/DGII (vetb00060).", xcotizacion_no) RETURN 0,false END IF IF identificacion IS NULL AND monto_cotizacion > 25000 THEN LET pmensaje_error = SFMT("La cotizacion %1 requiere RNC/Cedula porque el monto (%2) supera 25,000.", xcotizacion_no, monto_cotizacion) 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 LET pmensaje_error = SFMT("La cotizacion %1 usa NCF de Credito Fiscal (31) y requiere RNC/Cedula del cliente.", xcotizacion_no) RETURN 0,false END IF 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 BEGIN WORK UPDATE prtb00020 set num_oc = ult_numero, us_crea = xusuario, fech_crea = GETDATE() DISPLAY "ACTUALICE ULTIMO NUMERO: ",ult_numero USING "<<<<<<<"," ",CURRENT LET p_prtb14.observacion = xcomentario CLIPPED DISPLAY "BUSQUE LA DATA DE LA COTIZACION EN LA TABLA MASTER COTIZACION: ",xcotizacion_no USING "<<<<<<<"," ",CURRENT IF pbodega IS NULL THEN LET pmensaje_error = SFMT("La cotizacion %1 no tiene bodega / lugar de entrega asignado.", xcotizacion_no) ROLLBACK WORK RETURN 0,FALSE END IF LET xtipo_orden = 'GENERAL' # Numero de solicitud (instalacion) enviado por el CRM -> columna prtb00012.num_solicitud. # Se arma como literal SQL: NULL si no viene; se duplican comillas simples para no romper el INSERT. IF xnosolicitud IS NULL OR LENGTH(xnosolicitud CLIPPED) = 0 THEN LET psolicitud_sql = "NULL" ELSE LET sb_sol = base.StringBuffer.create() CALL sb_sol.append(xnosolicitud CLIPPED) CALL sb_sol.replace("'", "''", 0) # escapa comillas simples (0 = todas) LET psolicitud_sql = "'", sb_sol.toString(), "'" END IF 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,prima_us,num_solicitud) SELECT a.ventas,'",xcotizacion_no, "','",ult_numero, "','",CURRENT,"','", xorden CLIPPED,"',a.sec_vend,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,b.tasa,",psolicitud_sql," ", "FROM vetb00050 a,vetb00061 b WHERE cotizacion_no=",xcotizacion_no," and a.ventas = b.ventas" 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,bodega,titulo_bodega,prima_us,precio_mo,num_solicitud) SELECT a.ventas,'",xcotizacion_no, "','",ult_numero, "','",CURRENT,"','", xorden CLIPPED,"','",xsecvend_a,"',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,b.tasa,a.sub_total,",psolicitud_sql," ", "FROM vetb00050 a,vetb00061 b WHERE a.cotizacion_no=",xcotizacion_no," and a.ventas = b.ventas" END IF PREPARE xvetb50 FROM actualizar EXECUTE xvetb50 IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF DISPLAY "SE ADICIONO EN LA TABLA MASTER DE LA ORDEN: ",ult_numero USING "<<<<<<<"," ",CURRENT 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 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 IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF DISPLAY "BUSQUEDA DE LA TABLA MASTER DE LA ORDEN: ",ult_numero USING "<<<<<<<"," ",CURRENT 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) IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF END IF END FOREACH DISPLAY "INSERTE EN LA TABLA IPTB00022: ",ult_numero USING "<<<<<<<"," ",CURRENT # 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() RETURNING exito IF NOT exito THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0, FALSE END IF DISPLAY "GENERE EL FILE PARA LA IMPRESION: ",ult_numero USING "<<<<<<<"," ",CURRENT 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 OR a.id_kit = 0) 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] #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,xusuario,GETDATE(),pprecio,pdesc,pkit,pcosto) IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF #verifica la categoria de los productos en la orden SELECT DISTINCT a.cod_cat FROM iptb00035 a WHERE a.cod_n = pcodn AND a.cod_cat = 3 IF STATUS <> NOTFOUND THEN UPDATE prtb00012 SET tipo_orden = 'COCINAS MODULARES, PUERTAS, BANOS' WHERE num_oc = ult_numero END IF # DISPLAY "adicione en prtb00013 ",ult_numero 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) IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF # FILES ORDENES DISPLAY "INSERTE EN EL DETALLE DE LA ORDEN: ",ult_numero USING "<<<<<<<"," ",CURRENT IF archivos.getLength() > 0 THEN DISPLAY "ESTOY EN DIBUJO ",archivos.getLength()," ",CURRENT LOCATE contenido_final IN MEMORY FOR i = 1 TO archivos.getLength() IF archivos[i].tipo_file IS NOT NULL THEN LET id_file = i LET xnombre_file = ult_numero USING "<<<<<<<<","-",id_file USING "&&&",".", archivos[i].tipo_file CLIPPED CALL b64_to_file(archivos[i].contenido,xnombre_file) CALL contenido_final.readFile(xnombre_file) INSERT INTO prtb00029 (num_oc ,documento ,nombre_file ,tipo_file ,id ,us_crea ,fech_crea ) VALUES (ult_numero,contenido_final,xnombre_file,'DI',id_file,xusuario,getdate()) # CALL gen_nombre_archivo(rusuario.tipo_file) RETURNING nombre_file # CALL rusuario.imagen.writeFile(nombre_file) # CALL file_to_b64(nombre_file) RETURNING rusuario.imagen # CALL documento(rusuario.imagen,r_out.orden) END IF FREE contenido_final END FOR END IF # 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,p_prtb14.*,xcotizacion_no,pkit) LET idx = idx + 1 END FOREACH DISPLAY "TERMINE EL PROCESO DE GENERAR EL FILE DE LA ORDEN Y LA ACTUALIZACION DE LA COTIZACION PARA LA DESAUTORIZACION DE LA RESERVA: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT {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 IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF DISPLAY "INSERTE ORDEN EN LA TABLA MAESTRA DE LOS KITS: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT INSERT INTO prordenstatus(fecha_trx,num_oc,cerrada,observacion,fecha_compromiso,usuario) VALUES (GETDATE(),ult_numero,'N','CREACION ORDEN',pfecha_compromiso,xusuario) IF STATUS < 0 THEN ROLLBACK WORK DISCONNECT CURRENT RETURN 0,FALSE END IF DISPLAY "INSERTE EL LOG DE LA ORDEN: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT COMMIT WORK DISPLAY "COMMIT WORK: ",xcotizacion_no USING "<<<<<<<<"," ",CURRENT FINISH REPORT o_pedido1 # ------------------------------------------------------------------------ # IMPRESION FISICA DESACTIVADA EN EL WEB SERVICE (CRM -> ERP). # El "RUN TYPE \\impresora" era SINCRONO y BLOQUEANTE: si la # impresora / ruta de red no respondia, congelaba TODO el servidor (proceso # unico) y el request del CRM nunca terminaba. La orden se imprime desde # Genero cuando el usuario la necesite. El file de spool queda generado en # 'archivo' por si se requiere reimpresion manual. # ------------------------------------------------------------------------ LET file_impresora = archivo DISPLAY "ORDEN GENERADA (impresion diferida a Genero): ",ult_numero USING "<<<<<<<"," ",CURRENT RETURN ult_numero,TRUE END FUNCTION # Devuelve el motivo del ultimo fallo de convierteorden (NULL si no hubo). # Lo usa el wrapper (orden_insert) para incluir el error en la respuesta al CRM. FUNCTION convierte_error() RETURN pmensaje_error 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) END RECORD, y RECORD LIKE prtb00014.*, l smallint, jcotizacion_no,xkit INT, i,xnumero INTEGER, 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 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 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() DEFINE pcomentario VARCHAR(80) SELECT a.comentario iNTO pcomentario FROM vetb00050 a WHERE a.cotizacion_no = pvetb50.cotizacion_no LET p_prtb14.observacion = pcomentario CLIPPED,p_prtb14.observacion CLIPPED INSERT INTO prtb00014 (num_oc,observacion,us_crea,fech_crea) VALUES (ult_numero,p_prtb14.observacion,SUSER_SNAME(),GETDATE()) IF STATUS < 0 THEN ROLLBACK WORK RETURN FALSE END IF RETURN TRUE 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