{-------------------------------------------------------------------------- PROGRAMA : IPPRMT044 OBJETIVO : Programa Captura Documento Otros Movimientos de Inventario de Producto Terminados. PROGRAMADOR : Juan Soto. FECHA REALIZACION : AGOSTO 1997. --------------------------------------------------------------------------} IMPORT util GLOBALS "ipprgb000.4gl" # # DEFINE buf base.StringBuffer, costoItem DEC(18, 4), pano SMALLINT, scodigo STRING, pcodmov_transferencia, p_num_doc_transferencia SMALLINT, l_sql_seq STRING, prep_seq_docs SMALLINT, xes_produccion SMALLINT DEFINE out_cantidad_item DECIMAL(18, 5) DEFINE out_cantidad_ubicacion DECIMAL(18, 5) DEFINE idxUbic INTEGER DEFINE idxJSON INTEGER DEFINE movi10Dest_JSON DYNAMIC ARRAY OF RECORD area, cod_n, cod_Grupo, cod_tipo, cod_sec INT, id_bodega, id_seccion1 INT, id_tramo1 INT, id_fila, id_pos INT, cantidad1, cantidad2 DECIMAL(12, 5) END RECORD DEFINE documento_encabezado RECORD tipoEcf, eNcf, indicadorMontoGravado, tipoPago, fechaLimitePago, FormadePAgo, montoPago, FechaVencimientoSecuencia, rncEmisor, razonSocialEmisor, direccionEmisor, Municipio, Provincia, telefonoEmisor, correoEmisor, webSite, codigoVendedor, numeroFacturaInterna, numeroPedidoInterno, fechaEmision, rncComprador, razonSocialComprador, montoGravadoTotal, montoGravadoI1, montoGravadoI2, montoGravadoI3, montoExento, itbis1, itbis2, itbis3, totalItbis, totalItbis1, totalItbis2, totalItbis3, montoTotal, tipoIngreso, terminoPago, TipoCuentaPago, NumeroCuentaPago, IdentificadorExtranjero, contactoComprador, CorreoComprador, DireccionComprador, MunicipioComprador, ProvinciaComprador, FechaEntrega, FechaOrdenCompra, NumeroOrdenCompra, CodigoInternoComprador, nombreFile, IndicadorNotaCredito, NCFmodificado, codigoModificacion, fechaNCFmodificado STRING END RECORD DEFINE despieceMem DYNAMIC ARRAY OF RECORD id_etiqueta SMALLINT, 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), secuencia, id_despiece INT, bodega SMALLINT END RECORD DEFINE container DYNAMIC ARRAY OF RECORD id_etiqueta SMALLINT, 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), secuencia, id_despiece INT, bodega SMALLINT END RECORD DEFINE moviD RECORD area, cod_n, cod_Grupo, cod_tipo, cod_sec INT, descripcion, observacion STRING, book VARCHAR(50), tipos VARCHAR(50), lado_1 DECIMAL(12, 5), lado_2 DECIMAL(12, 5), lado_3 DECIMAL(12, 5), id_bodega, id_seccion1 INT, d_seccion1 VARCHAR(50), id_tramo1 INT, id_fila, id_pos INT, d_tramo1 VARCHAR(50), id_producto VARCHAR(25), tipo_material VARCHAR(30), cantidad1, cantidad2, factor_conv DECIMAL(12, 5), cod_mov INT, control_transferencia_ubicaciones VARCHAR(2), cod_mov_transferencia INT, codigo STRING END RECORD DEFINE movi10 DYNAMIC ARRAY OF RECORD area, cod_n, cod_Grupo, cod_tipo, cod_sec INT, descripcion, observacion STRING, book VARCHAR(50), tipos VARCHAR(50), lado_1 DECIMAL(12, 5), lado_2 DECIMAL(12, 5), lado_3 DECIMAL(12, 5), id_bodega, id_seccion1 INT, d_seccion1 VARCHAR(50), id_tramo1 INT, d_tramo1 VARCHAR(50), id_fila, id_pos INT, id_producto VARCHAR(25), tipo_material VARCHAR(30), cantidad1, cantidad2, factor_conv DECIMAL(12, 5), cod_mov INT, de_seccion, de_tramo INT, codigo STRING END RECORD DEFINE movi10Dest DYNAMIC ARRAY OF RECORD area, cod_n, cod_Grupo, cod_tipo, cod_sec INT, descripcion, observacion STRING, book VARCHAR(50), tipos VARCHAR(50), lado_1 DECIMAL(12, 5), lado_2 DECIMAL(12, 5), lado_3 DECIMAL(12, 5), id_bodega, id_seccion1 INT, d_seccion1 VARCHAR(50), id_tramo1 INT, d_tramo1 VARCHAR(50), id_fila, id_pos INT, id_producto VARCHAR(25), tipo_material VARCHAR(30), cantidad1, cantidad2, factor_conv DECIMAL(12, 5), cod_mov INT, de_seccion, de_tramo INT, codigo STRING END RECORD DEFINE documento_Detalle DYNAMIC ARRAY OF RECORD indicadorFacturacion, nombreItem, indicadorBienoServicio, cantidadItem, precioUnitarioItem, montoItem STRING, DescripcionItem VARCHAR(1000), NumeroLinea INT END RECORD DEFINE jsonMovi STRING DEFINE num_cr_e, num_doc_e, factura_e, num_doc_ret, ordenx, tmpnumero, idtipo, xnum_doc_c, dias_factura, pnumero_doc, id_municipio_dgii, id_provincia_dgii INTEGER, hacerdocumento BOOLEAN, pperfil SMALLINT, direccion_p VARCHAR(100), pdescripmov VARCHAR(80), xhas VARCHAR(6), xtipo_orden, xfechaFirmaDigital VARCHAR(50), nombre_sucursal VARCHAR(80), existminima DYNAMIC ARRAY OF FLOAT, existenciaact DYNAMIC ARRAY OF FLOAT, porcientoControl DYNAMIC ARRAY OF FLOAT, enviaCorreo VARCHAR(2), enviaEmailProd DYNAMIC ARRAY OF CHAR(2), estadoordenes VARCHAR(200), xusername, xsmtphost, xsmtpport, xpassword STRING, almacen_orden VARCHAR(10), xhash, phash VARCHAR(6), codigodgii, codigodgii_m VARCHAR(19), descripcion_ncf VARCHAR(100), desglose VARCHAR(1), arr_iptb58 DYNAMIC ARRAY OF RECORD area INT, cod_n, cod_grupo, cod_tipo, cod_sec INT, descripcion VARCHAR(100), unidad_med VARCHAR(4), cantidad_1, cantidad, cantidad_o1, cantidad1, factor_conv DEC(12, 5) END RECORD, arrcontrol_existencia DYNAMIC ARRAY OF CHAR(2) DEFINE factor_conv DYNAMIC ARRAY OF DECIMAL(12, 5), cantidad_factura, cantidad_devuelta, total_medida, cantidad_orden, cantidad_recibida, diferencia, cantidadRequisicion, Rcantidad_requisicion, cantidad_orden1, pcantidadConduce, transito, existencia, reservado DEC(12, 5) DEFINE ac_cli, reimpresion, pcerrada CHAR(1), pnum_req, xcotizacion INTEGER, pcontrol_cliente CHAR(3), aplica_dev CHAR(2), pcontrol_despacho, pcontrol_transferencia, chconduce, control_devolucion, pcontrol_departamento CHAR(2), procedimiento, PCCEMAIL VARCHAR(200), TOemail STRING, cuerpo_correo VARCHAR(230), CCEmail, subject VARCHAR(450), psec_vend INT, almacen_destino, almacen_origen VARCHAR(40), xbodega VARCHAR(30) DEFINE busca1, busca2, chitbis, _chitbis, prequisiciones CHAR(10), pitbis, pdescuento, xporc_Desc DEC(12, 2) DEFINE nombre_emp, nom_cli CHAR(30) DEFINE p_num_doc INTEGER DEFINE p_itbi, valor_fac, p_total DECIMAL(12, 2) DEFINE salir, via CHAR(1), ptotalb, xdescuento DEC(12, 2) DEFINE prtb09 RECORD LIKE prtb00009.* DEFINE busca_v RECORD sec_cliente INTEGER, nombre CHAR(30) END RECORD DEFINE despiece DYNAMIC ARRAY OF RECORD id_etiqueta SMALLINT, 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), secuencia, id_despiece INT, bodega SMALLINT END RECORD, cantidad_conduce, xcantidad2, xcantidad1 DEC(12, 5), psucid INT, fechaVencimiento DATE DEFINE despieceDest DYNAMIC ARRAY OF RECORD id_etiqueta SMALLINT, 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), secuencia, id_despiece INT, bodega SMALLINT END RECORD DEFINE despiece_act DYNAMIC ARRAY OF RECORD id_etiqueta SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, lado_1 DEC(12, 5), lado_2 DEC(12, 5), lado_3 DEC(12, 5), cantidad DEC(12, 5), medida DEC(12, 5), secuencia INT END RECORD DEFINE arr_recibo RECORD cod_mov LIKE iptb00006.cod_mov, aplica_a LIKE cctb00001.aplica_a, valor_pen DECIMAL(12, 2), desc_p LIKE cctb00001.monto_desc, val_desc DECIMAL(12, 2), valor_pag DECIMAL(12, 2) END RECORD DEFINE fact_gral RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, --zona CHAR(3), factura LIKE vetb00002.factura, bodega SMALLINT, --conduce LIKE vetb00002.conduce, --fecha_conduce DATE, --fecha_factura DATE, --tipo_cliente LIKE vetb00002.tipo_cliente, --sec_cliente LIKE vetb00002.sec_cliente, --nombre CHAR(30), direccion CHAR(80), --ciudad CHAR(20), --prima_us LIKE vetb00002.prima_us, --porc_desc LIKE vetb00002.porc_desc, --cond_pago LIKE vetb00002.cond_pago, --orden INT, --fecha_orden DATE, --porc_itbi LIKE vetb00002.porc_itbi, --sec_vend LIKE vetb00002.sec_vend, --nombre_vend CHAR(60), --cod_transp LIKE iptb00006.cod_transp, --sec_transp LIKE iptb00006.sec_transp, --cod_tarifa LIKE iptb00006.cod_tarifa, --nombre_tran CHAR(30), --fecha_embarque DATE, --placa_transp LIKE iptb00006.placa, --sub_total DECIMAL(12,2), --desc_valor DECIMAL(12,2), --itbi DECIMAL(12,2), --total_fact DECIMAL(12,2) fecha_despacho DATE END RECORD DEFINE recibo RECORD num_doc LIKE cctb00001.num_doc, tipo_cliente LIKE cctb00001.tipo_cliente, sec_cliente LIKE cctb00001.sec_cliente, cod_emp_sec LIKE cctb00001.cod_emp_sec, fecha_orig LIKE cctb00001.fecha_orig, itbi DECIMAL(8, 2), concepto CHAR(60) END RECORD, ptipoorden STRING, sucnombre, direccion_sucursal, xnombre_provincia VARCHAR(100), cantidadBultos, x2 INT, ult_ncf, num_ncf, num_ncf_m, localidad INT DEFINE out_result, cod_mensaje INT, out_msg STRING DEFINE normal, negrilla_on, negrillas_of, comp_on, comp_off, doce, doble_on, doble_off CHAR(3), usuarios, clave CHAR(80), HANDLER om.SaxDocumentHandler, salida VARCHAR(4) MAIN DEFER INTERRUPT CALL STARTLOG("ipmt044.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CALL ARG_VAL(4) RETURNING impresor1 CONNECT TO "marmotech" AS "SQL_E" USER usuarios USING clave CONNECT TO "smarmotech" AS "SQL_C" USER usuarios USING clave SET ISOLATION TO COMMITTED READ SELECT * INTO p_companias.* FROM companias SELECT controlOrdenesE FROM seg0003 WHERE usuario = usuarios AND controlOrdenesE = "SI" IF STATUS <> NOTFOUND THEN LET ptipoorden = 'ECOMMERCE' ELSE LET ptipoorden = "GENERAL" END IF SELECT a.sucid, b.sucnombre, b.direccion, c.nombre_provincia, b.telefono, b.fax, b.rnc, a.cod_perfil, c.id_dgii, c.id_municipio_dgii INTO localidad, sucnombre, direccion_sucursal, xnombre_provincia, p_companias.telefono, p_companias.fax, p_companias.rnc, pperfil, id_provincia_dgii, id_municipio_dgii FROM seg0001 a, sucursales b, vetb00020 c WHERE a.usuario = usuarios AND a.sucid = b.sucid AND b.localidad = c.cod_provincia CALL ipprmt044() END MAIN FUNCTION busca_cliente() LET int_flag = FALSE OPEN WINDOW cliente AT 10, 9 WITH FORM "ipfmwd009" ATTRIBUTE(BORDER, FORM LINE FIRST + 2) CONSTRUCT BY NAME criterio ON a.tipo_cliente, a.sec_cliente, a.nombre LET selec = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre FROM vetb00004 a ", "WHERE a.status_t IS NULL AND ", criterio CLIPPED, "ORDER BY 1,2" PREPARE comando3 FROM selec DECLARE comp3 CURSOR FOR comando3 LET idx = 1 FOREACH comp3 INTO clientes[idx].* LET idx = idx + 1 IF idx = 49 THEN EXIT FOREACH END IF END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY clientes TO s_cliente.* LET idx = ARR_CURR() CLOSE WINDOW cliente END FUNCTION FUNCTION ipprmt044() DEFINE fecha CHAR(8) DEFINE hora CHAR(5) OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 24, PROMPT LINE 24 LET fecha = TODAY USING "dd/mm/yyyy" LET hora = TIME LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2 DISPLAY p_companias.nombre CLIPPED AT 1, lj ATTRIBUTE(REVERSE, BLUE) DISPLAY fecha AT 1, 70 ATTRIBUTE(BLUE) DISPLAY hora AT 2, 73 ATTRIBUTE(BLUE) DISPLAY "ipprmt044" AT 1, 3 ATTRIBUTE(BLUE) DISPLAY "Otros Movimientos" AT 2, 30 DISPLAY " Adiciona Registro" AT 3, 2 ATTRIBUTE(BLUE, REVERSE) OPEN FORM ipfmmt044 FROM "ipfmmt044" DISPLAY FORM ipfmmt044 CALL ipprad44() END FUNCTION FUNCTION ipprad44() DEFINE vexistencia, estado_req, siDespiece BOOLEAN, control_produce VARCHAR(2) DEFINE data RECORD rnumeroDoc, rcodMov, rtipo_cliente, num_oc, tipo_cliente, sec_cliente, bodega, bodega_destino INT, nombre VARCHAR(100) END RECORD DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME otros_mov.num_doc, otros_mov.cod_cia, pnumero_Doc, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, idtipo, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, num_doc_ret, pnum_req ATTRIBUTE(WITHOUT DEFAULTS) AFTER FIELD pnumero_doc IF pnumero_doc IS NOT NULL THEN SELECT a.cod_mov, a.num_oc, a.nombre, a.tipo_cliente, a.sec_cliente, a.bodega, a.bodega_destino INTO otros_mov.cod_mov, otros_mov.conduce_no, otros_mov.descrip4, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.bodega, otros_mov.bodega_destino FROM iptb00057 a WHERE a.numero_doc = pnumero_doc AND a.status_t IS NULL AND a.estado = "AUTORIZADA" IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD pnumero_doc END IF DISPLAY BY NAME otros_mov.cod_mov, pnumero_doc, otros_mov.conduce_no, otros_mov.descrip4, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.bodega, otros_mov.bodega_destino END IF ON ACTION reqautorizadas CALL ipautorizadas(usuarios) RETURNING data.* LET otros_mov.cod_mov = data.rcodMov LET pnumero_doc = data.rnumeroDoc LET otros_mov.conduce_no = data.num_oc LET otros_mov.descrip4 = data.nombre LET otros_mov.cod_sp = data.rtipo_cliente LET otros_mov.cod_sp_sec = data.sec_cliente IF data.bodega IS NOT NULL THEN LET otros_mov.bodega = data.bodega END IF LET otros_mov.bodega_destino = data.bodega_destino DISPLAY BY NAME otros_mov.cod_mov, pnumero_doc, otros_mov.conduce_no, otros_mov.descrip4, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.bodega, otros_mov.bodega_destino BEFORE INPUT INITIALIZE otros_mov.* TO NULL CALL tiposModificacion() LET selec = "SELECT ISNULL(a.material,0)+ISNULL(a.labor,0)+ISNULL(a.gastos,0) FROM iptb00004 a WHERE a.ano = ? AND a.mes_fin=12 AND a.cod_n = ? AND a.cod_grupo = ? AND a.cod_tipo = ? AND a.cod_sec = ? AND a.status_t IS NULL " PREPARE bcosto FROM selec CALL ipautorizadas(usuarios) RETURNING data.* CALL piking(usuarios, clave, impresor, otros_mov.bodega, psucid) LET otros_mov.cod_mov = data.rcodMov LET pnumero_doc = data.rnumeroDoc LET otros_mov.conduce_no = data.num_oc LET otros_mov.descrip4 = data.nombre LET otros_mov.cod_sp = data.rtipo_cliente LET otros_mov.cod_sp_sec = data.sec_cliente IF data.bodega IS NOT NULL THEN LET otros_mov.bodega = data.bodega END IF LET otros_mov.bodega_destino = data.bodega_destino LET otros_mov.fecha = TODAY LET pnum_req = NULL LET num_doc_ret = NULL CALL despiece.clear() LET otros_mov.cod_cia = 1 # IF pnumero_doc IS NULL THEN SELECT a.bodega, a.sucid, b.ordenes INTO otros_mov.bodega, psucid, almacen_orden FROM seg0001 a LEFT OUTER JOIN intb00009 b ON b.cod_bodega = a.bodega WHERE a.usuario = usuarios # END IF LET k1 = '1' CALL bodegas(k1) LET k1 = '2' CALL bodegas(k1) DISPLAY BY NAME otros_mov.bodega IF ptipoorden <> 'ECOMMERCE' THEN IF otros_mov.cod_mov IS NULL OR otros_mov.cod_mov = 0 THEN LET otros_mov.cod_mov = 30 END IF ELSE SELECT a.cod_mov INTO otros_mov.cod_mov FROM vetb00060 a WHERE a.tipo_cliente = 25 END IF CALL cmovimientos() DISPLAY BY NAME otros_mov.cod_mov, pnumero_doc, otros_mov.conduce_no, otros_mov.descrip4, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.bodega, otros_mov.bodega_destino NEXT FIELD cod_mov { COMENTARIO PARA EL CONTROL DEL DOCUMENTO DE RE-TRABAJO, SE VA A REALIZAR LUEGO DEL DOC DEVOLUCION} { AFTER FIELD num_doc_ret IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN IF num_doc_ret IS NULL THEN CALL fgl_winmessage("ERROR","NO PUEDE DEJAR EN BLANCO NUMERO DOCUMENTO RE-TRABAJO","INFO") NEXT FIELD num_doc_ret END IF END IF IF num_doc_ret IS NOT NULL THEN SELECT a.num_oc,a.tipo_cliente,a.sec_cliente,b.nombre,a.conduce_no,a.factura,a.num_req INTO otros_mov.conduce_no,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.descrip4,xconduce_no, otros_mov.fact_no,pnum_req FROM svtb00007 a,vetb00004 b WHERE (a.num_doc = num_doc_ret) AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","DOCUMENTO RE-TRABAJO NO EXISTE","INFO") NEXT FIELD num_doc_ret END IF IF otros_mov.fact_no IS NULL THEN SELECT a.factura, a.fecha_factura INTO otros_mov.fact_no, fact_gral.fecha_despacho FROM vetb00002 a WHERE (a.conduce = xconduce_no AND a.tipo_cliente = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_sec) AND a.status_t IS NULL ELSE SELECT a.fecha_factura INTO fact_gral.fecha_despacho FROM vetb00002 a WHERE (a.factura = otros_mov.fact_no AND a.tipo_cliente = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_sec) AND a.status_t IS NULL END IF DISPLAY BY NAME otros_mov.fact_no,pnum_req,otros_mov.conduce_no IF otros_mov.fact_no IS NULL THEN NEXT FIELD fact_no END IF # CONSULTA QUE ESTE FORMULARIO NO EXISTA EN LA TABLA TRANSACCIONES INVENTARIOS SELECT DISTINCT a.num_doc_retrabajo FROM iptb00006 a WHERE a.num_doc_retrabajo = num_doc_ret AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN CALL fgl_winmessage("INFO","DOCUMENTO RETRABAJO YA TIENE DEVOLUCION","INFO") NEXT FIELD num_doc_ret END IF END IF } ON ACTION buscar ATTRIBUTES(TEXT = "Busca Documento", IMAGE = "find") LET reimpresion = "S" CALL consulta() ON ACTION bconduces CALL conduces( otros_mov.conduce_no) RETURNING otros_mov.conduce_no, pnum_req, otros_mov.factura DISPLAY BY NAME otros_mov.factura, otros_mov.conduce_no, pnum_req ON ACTION buscacliente IF INFIELD(cod_sp_sec) OR INFIELD(cod_sp) THEN CALL busca_cliente() LET otros_mov.cod_sp = clientes[idx].tipo_cliente LET otros_mov.cod_sp_sec = clientes[idx].sec_cliente LET otros_mov.descrip4 = clientes[idx].nombre DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.descrip4 END IF AFTER FIELD cod_cia IF otros_mov.cod_cia IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_cia END IF IF otros_mov.cod_cia = 1 THEN LET nombre_cia = p_companias.nombre ELSE LET nombre_cia = "" END IF DISPLAY BY NAME nombre_cia AFTER FIELD pnum_req IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN IF pnum_req IS NULL THEN CALL msg(16) NEXT FIELD pnum_req END IF SELECT DISTINCT a.num_req FROM iptb00006 a WHERE a.num_req = pnum_req AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD pnum_req END IF END IF # IF pcontrol_cliente = 'SI' AND verificaRequisicion(pnum_req) THEN # CALL msg(1675) # NEXT FIELD cod_mov # END IF AFTER FIELD fecha IF otros_mov.fecha > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = otros_mov.fecha USING "dd/mm/yyyy" CALL prd(p_fechas, usuarios) RETURNING bandera LET otros_mov.fecha = p_fechas DISPLAY BY NAME otros_mov.fecha IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF AFTER FIELD factura # LET otros_mov.cod_sp = null # LET otros_mov.cod_sp_sec = null IF control_devolucion = "SI" THEN IF otros_mov.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura END IF SELECT UNIQUE a.tipo_cliente, a.sec_cliente, a.orden, MAX(b.num_req), RTRIM(a.rnc), a.fecha_factura INTO otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.conduce_no, pnum_req, documento_encabezado.rncComprador, fact_gral.fecha_despacho FROM vetb00002 a, iptb00006 b WHERE a.factura = otros_mov.factura AND (a.tipo_cliente = b.cod_sp AND a.sec_cliente = b.cod_sp_Sec) AND a.factura = b.factura AND b.cod_mov IN (30, 31, 55, 56, 94) AND a.status_t IS NULL AND b.num_req IS NOT NULL AND CONVERT(CHAR(10), fecha_factura, 101) >= '01/01/2007' GROUP BY a.tipo_cliente, a.sec_cliente, a.orden, a.rnc, a.fecha_factura IF status = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) NEXT FIELD factura END IF DISPLAY BY NAME otros_mov.conduce_no, pnum_req, otros_mov.cod_sp, otros_mov.cod_sp_sec # CONTROL FECHA IF otros_mov.fecha < fact_gral.fecha_despacho THEN CALL msg(64) NEXT FIELD factura END IF # CONTROL ` LET cantidad_factura = 0 LET cantidad_devuelta = 0 SELECT SUM(a.cantidad) INTO cantidad_factura FROM vetb00003 a WHERE a.factura = otros_mov.factura AND a.status_t IS NULL AND a.fech_crea > '2009-01-01 08:00' SELECT SUM(a.cantidad_2) INTO cantidad_devuelta FROM iptb00006 a WHERE a.fact_no = otros_mov.factura AND a.status_t IS NULL AND a.fech_crea > '2009-01-01 08:00' AND a.cod_mov IN (12, 13) IF cantidad_devuelta + .05 > cantidad_factura THEN LET numero_msg = 238 CALL msg(numero_msg) NEXT FIELD factura END IF END IF { IF otros_mov.fact_no is not null THEN IF otros_mov.cod_mov = 32 THEN SELECT unique cod_n FROM iptb00006 WHERE fact_no = otros_mov.fact_no and cod_mov = otros_mov.cod_mov and CONVERT(CHAR(10), fecha,101) >= "01011994" AND status_t is null IF status != NOTFOUND THEN LET numero_msg = 103 CALL msg(numero_msg) NEXT FIELD fact_no END IF END IF END IF } DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec AFTER FIELD cod_transp IF otros_mov.cod_mov = 30 OR otros_mov.conduce_no = 31 OR otros_mov.cod_mov = 55 OR otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN IF otros_mov.cod_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_transp END IF END IF AFTER FIELD sec_transp IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN IF otros_mov.sec_transp IS NULL THEN CALL msg(16) NEXT FIELD sec_transp END IF END IF IF pcontrol_despacho = "SI" OR pcontrol_transferencia = "SI" THEN IF otros_mov.sec_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_transp END IF SELECT nombre INTO descrip2 FROM vetb00015 WHERE cod_transp = otros_mov.cod_transp AND sec_transp = otros_mov.sec_transp AND status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_transp END IF DISPLAY BY NAME descrip2 END IF AFTER FIELD cod_tarifa IF otros_mov.cod_tarifa IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) # NEXT FIELD cod_tarifa END IF SELECT descrip INTO descrip1 FROM vetb00023 WHERE cod_tarifa = otros_mov.cod_tarifa AND status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) #NEXT FIELD cod_tarifa END IF DISPLAY BY NAME descrip1 # ON ACTION piking # CALL piking(usuarios,clave,impresor,otros_mov.bodega,psucid) BEFORE FIELD num_doc LET tmpnumero = 0 SELECT a.num_doc INTO tmpnumero FROM iptb00043 a WHERE usuario = usuarios IF STATUS = NOTFOUND THEN INSERT INTO iptb00043 VALUES(1, usuarios) LET tmpnumero = 1 ELSE LET tmpnumero = tmpnumero + 1 UPDATE iptb00043 SET num_doc = tmpnumero WHERE usuario = usuarios END IF LET otros_mov.num_doc = tmpnumero DISPLAY BY NAME otros_mov.num_doc LET otros_mov.fecha = TODAY DISPLAY BY NAME otros_mov.fecha AFTER FIELD cod_mov CALL despiece.clear() LET pcontrol_cliente = NULL LET Pcontrol_transferencia = NULL SELECT a.status_mov, a.control_clientes, a.control_despacho, a.control_devolucion, a.control_transferencia, a.control_departamento, a.descrip_mov, a.requisiciones, a.control_produccion INTO status_m, pcontrol_cliente, pcontrol_despacho, control_devolucion, Pcontrol_transferencia, pcontrol_departamento, otros_mov.descrip_mov, prequisiciones, control_produce FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t IS NULL IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF IF control_devolucion = 'SI' THEN LET aplica_dev = 1 LET idtipo = 1 DISPLAY BY NAME aplica_Dev, idtipo END IF IF prequisiciones = "SI" AND (pnumero_doc IS NULL OR pnumero_doc = 0) THEN CALL msg(203) NEXT FIELD pnumero_Doc END IF IF pcontrol_transferencia = 'SI' THEN LET k1 = '2' ELSE LET k1 = '1' END IF CALL bodegas(k1) SELECT num_doc INTO otros_mov.num_doc FROM iptb00007 WHERE cod_mov = otros_mov.cod_mov AND bodega = otros_mov.bodega IF otros_mov.num_Doc IS NULL THEN LET otros_mov.num_doc = 1 END IF # CONTROL CODIGO ENTRADA TRANSFERENCIA SELECT a.codigo_mov_transferencia FROM iptb00005 a WHERE a.codigo_mov_transferencia = otros_mov.cod_mov IF STATUS <> NOTFOUND THEN CALL fgl_winmessage( "INFO", "NO PUEDES USAR EL CODIGO QUE VA A RECIBIR LA TRANSFERENCIA", "INFO") NEXT FIELD cod_mov END IF LET otros_mov.num_Doc = otros_mov.num_doc + 1 DISPLAY BY NAME otros_mov.num_doc DISPLAY BY NAME otros_mov.bodega --C0NTROL DESPACHO LET pnum_req = NULL IF pcontrol_despacho = "SI" THEN TRY CALL visualizacion_despacho() RETURNING otros_mov.conduce_no, otros_mov.cod_sp, otros_mov.cod_sp_sec, pnum_req CATCH LET numero_msg = 15 CALL msg(numero_msg) NEXT FIELD cod_mov END TRY IF Int_flag THEN LET int_flag = FALSE CALL msg(2) DELETE FROM iptbexistencia WHERE us_crea = usuarios RETURN END IF IF otros_mov.cod_sp IS NULL THEN NEXT FIELD cod_mov END IF IF otros_mov.cod_sp_sec IS NULL THEN NEXT FIELD cod_mov END IF END IF { CHEQUEO DE PERMISOS PARA EL USUARIO} SELECT a.cod_mov FROM iptb00023 a WHERE a.cod_mov = otros_mov.cod_mov AND a.usuario = usuarios IF status = NOTFOUND THEN LET numero_msg = 139 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF otros_mov.cod_mov = 35 OR otros_mov.cod_mov = 10 THEN CALL fgl_winmessage( "INFO", "NO PUEDES EMITIR ESTE TIPO DE DOCUMENTO EN ESTE PROGRAMA", "INFO") NEXT FIELD cod_mov END IF # IF otros_mov.cod_mov = 32 or # otros_mov.cod_mov = 12 # THEN # NEXT FIELD num_doc_ret # ELSE # NEXT FIELD cod_transp # END IF AFTER FIELD bodega IF otros_mov.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF SELECT UNIQUE a.usuario FROM iptb00048 a WHERE a.bodega = otros_mov.bodega AND a.usuario = usuarios IF STATUS = NOTFOUND THEN CALL msg(503) NEXT FIELD bodega END IF AFTER FIELD cod_mov1 IF otros_mov.entrada IS NOT NULL THEN IF otros_mov.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD entrada END IF SELECT a.descrip_mov INTO otros_mov.descrip_mov1 FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov1 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov1 END IF DISPLAY BY NAME otros_mov.descrip_mov1 END IF BEFORE FIELD conduce_no IF pcontrol_despacho = "SI" THEN IF otros_mov.bodega IS NULL THEN LET otros_mov.bodega = 1 DISPLAY BY NAME otros_mov.bodega END IF SELECT UNIQUE a.cod_mov FROM vetb00060 a WHERE a.tipo_cliente = otros_mov.cod_sp AND a.cod_mov = otros_mov.cod_mov IF STATUS = NOTFOUND THEN LET numero_msg = 386 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.nombre INTO otros_mov.descrip4 FROM vetb00004 a WHERE a.tipo_cliente = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_sec DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_Sec, otros_mov.descrip4 NEXT FIELD detalle END IF AFTER FIELD conduce_no LET ordenx = NULL LET pnum_req = NULL IF otros_mov.conduce_no IS NOT NULL THEN LET ordenx = otros_mov.conduce_no LET pcerrada = 'N' SELECT a.tipo_cliente, a.sec_cliente, a.cerrada, a.cotizacion_no, a.tipo_orden INTO otros_mov.cod_sp, otros_mov.cod_sp_sec, pcerrada, xcotizacion, xtipo_orden FROM prtb00012 a WHERE a.num_oc = ordenx AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD conduce_no END IF SELECT a.nombre INTO otros_mov.descrip4 FROM vetb00004 a WHERE a.tipo_cliente = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_sec DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_Sec, otros_mov.descrip4 IF pcontrol_despacho = "SI" THEN IF pcerrada = "S" THEN LET numero_msg = 74 CALL msg(numero_msg) NEXT FIELD conduce_no END IF END IF DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec IF otros_mov.cod_mov = 44 THEN IF xtipo_orden <> 'REPOSICION' THEN CALL fgl_Winmessage( "INFO", "LA ORDEN DEBE SER DE REPOSICION", "INFO") NEXT FIELD conduce_no END IF END IF END IF IF otros_mov.cod_mov = 30 OR otros_mov.conduce_no = 31 OR otros_mov.cod_mov = 55 THEN IF otros_mov.conduce_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD conduce_no END IF END IF NEXT FIELD detalle BEFORE FIELD cod_sp IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN CALL busca_vend() LET otros_mov.cod_sp = 12 LET otros_mov.cod_sp_sec = busca_v.sec_cliente LET otros_mov.descrip4 = busca_v.nombre DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.descrip4 NEXT FIELD cod_sp_sec END IF AFTER FIELD cod_sp IF ac_cli = "S" AND otros_mov.cod_sp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF IF pcontrol_despacho = "SI" THEN IF pcontrol_cliente = "SI" THEN SELECT a.cod_mov FROM vetb00060 a WHERE a.cod_mov = otros_mov.cod_mov AND a.tipo_cliente = otros_mov.cod_sp IF STATUS = NOTFOUND THEN CALL msg(240) NEXT FIELD cod_sp END IF END IF END IF AFTER FIELD cod_sp_sec IF ac_cli = "S" AND otros_mov.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF IF otros_mov.cod_mov = 12 THEN IF otros_mov.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF END IF IF otros_mov.cod_sp_sec IS NOT NULL THEN SELECT a.nombre, b.sec_vend INTO otros_mov.descrip4, psec_vend FROM vetb00004 a, vetb00028 b WHERE a.tipo_cliente = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_sec AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME otros_mov.descrip4, psec_vend IF otros_mov.factura IS NOT NULL THEN SELECT sec_cliente FROM vetb00002 WHERE factura = otros_mov.factura AND sec_cliente = otros_mov.cod_sp_sec IF status = NOTFOUND THEN LET numero_msg = 237 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF END IF END IF IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN SELECT UNIQUE sec_cliente FROM vetb00033 WHERE sec_cliente = otros_mov.cod_sp_sec IF STATUS = NOTFOUND THEN LET numero_msg = -1301 CALL msg(numero_msg) NEXT FIELD cod_sp END IF END IF BEFORE FIELD entrada IF otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 THEN IF otros_mov.entrada IS NULL THEN # IF otros_mov.entrada IS NOT NULL THEN SELECT MAX(a.num_doc), MAX(a.cod_mov) INTO otros_mov.entrada, otros_mov.cod_mov1 FROM iptb00006 a WHERE (a.num_oc = ordenx) AND (a.cod_mov IN (70, 71, 72)) AND a.status_t IS NULL # END IF DISPLAY BY NAME otros_mov.entrada, otros_mov.cod_mov1 END IF END IF AFTER FIELD entrada IF otros_mov.entrada IS NOT NULL THEN SELECT UNIQUE a.num_doc FROM iptb00006 a WHERE a.cod_mov = otros_mov.cod_mov1 AND a.num_doc = otros_mov.entrada AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD entrada END IF END IF AFTER FIELD departamento IF pcontrol_departamento = "SI" THEN IF otros_mov.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) DISPLAY "DEPARTAMENTO AFTER FIELD: ", pcontrol_departamento NEXT FIELD departamento END IF SELECT a.nom_dpto INTO otros_mov.nombre_depto FROM adtb00001 a WHERE a.departamento = otros_mov.departamento AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 16 CALL msg(numero_msg) DISPLAY "DEPARTAMENTO AFTER FIELD NOT FOUND 1: ", pcontrol_departamento NEXT FIELD departamento END IF DISPLAY BY NAME otros_mov.nombre_depto, otros_mov.cod_sp, otros_mov.cod_sp_sec ELSE IF otros_mov.departamento IS NOT NULL THEN CALL fgl_winmessage( "INFO", "ESTE CODIGO DE MOVIMIENTO NO SE LE PUEDE COLOCAR DEPARTAMENTO", "INFO") NEXT FIELD departamento END IF END IF AFTER INPUT IF INT_FLAG THEN CALL msg(2) LET INT_FLAG = FALSE RETURN END IF LET pano = YEAR(otros_mov.fecha) IF prequisiciones = "SI" AND (pnumero_doc IS NULL OR pnumero_doc = 0) THEN CALL msg(203) NEXT FIELD pnumero_Doc END IF # IF pcontrol_cliente = 'SI' AND NOT verificaRequisicion(pnum_req) THEN # CALL msg(1675) # NEXT FIELD cod_mov # END IF IF pcontrol_departamento = "SI" THEN IF otros_mov.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) DISPLAY "DEPARTAMENTO AFTER INPUT 1: ", pcontrol_departamento NEXT FIELD departamento END IF SELECT a.nom_dpto INTO otros_mov.nombre_depto FROM adtb00001 a WHERE a.departamento = otros_mov.departamento AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 16 CALL msg(numero_msg) DISPLAY "DEPARTAMENTO AFTER INPUT NOT FOUND 2: ", pcontrol_departamento NEXT FIELD departamento END IF DISPLAY BY NAME otros_mov.nombre_depto, otros_mov.cod_sp, otros_mov.cod_sp_sec ELSE IF otros_mov.departamento IS NOT NULL THEN CALL fgl_winmessage( "INFO", "ESTE CODIGO DE MOVIMIENTO NO SE LE PUEDE COLOCAR DEPARTAMENTO", "INFO") NEXT FIELD departamento END IF END IF # CONTROL CODIGO ENTRADA TRANSFERENCIA SELECT a.codigo_mov_transferencia FROM iptb00005 a WHERE a.codigo_mov_transferencia = otros_mov.cod_mov AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN CALL fgl_winmessage( "INFO", "NO PUEDES USAR EL CODIGO QUE VA A RECIBIR LA TRANSFERENCIA", "INFO") NEXT FIELD cod_mov END IF #--------------------- CONTROL DESPACHOS ------------------------------------------------- IF pcontrol_despacho = "SI" THEN IF pcontrol_cliente = "SI" THEN IF otros_mov.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF IF ptipoorden = 'ECOMMERCE' THEN SELECT a.sec_transp FROM vetb00015 a WHERE a.cod_transp = otros_mov.cod_transp AND a.sec_transp = otros_mov.sec_transp IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD cod_transp END IF SELECT a.cantidad_bultos INTO cantidadBultos FROM iptb00056 a WHERE a.num_oc = ordenx IF otros_mov.detalle IS NULL OR LENGTH(otros_mov.detalle) < 8 THEN LET otros_mov.detalle = 'CONDUCE RELACIONADO CON TIENDA ONLINE, LA ORDEN CONTIENE ', cantidadBultos USING "<<<", ' BULTOS ' ELSE LET otros_mov.detalle = otros_mov.detalle CLIPPED, " CONTIENE ", cantidadBultos USING "<<<", ' BULTOS ' END IF DISPLAY BY NAME otros_mov.detalle END IF #--------------------- TERMINO DE ECOMMERCE ------------------------------------------------------ SELECT a.cod_mov FROM vetb00060 a WHERE a.cod_mov = otros_mov.cod_mov AND a.tipo_cliente = otros_mov.cod_sp IF STATUS = NOTFOUND THEN CALL msg(240) NEXT FIELD cod_mov END IF END IF #---------------- TERMINO CONTROL CLIENTE ---------------------------------- # CONTROL ORDEN PERTENEZCA A LA REQUISICION SELECT DISTINCT a.num_oc FROM cctb00026 a WHERE a.num_oc = otros_mov.conduce_no AND a.num_req = pnum_req AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(1673) NEXT FIELD conduce_no END IF END IF #----------------- TERMINO CONTROL DESPACHO ---------------------------------- IF otros_mov.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF IF control_devolucion = "SI" THEN IF aplica_dev IS NULL THEN NEXT FIELD aplica_dev END IF IF idtipo IS NULL OR idtipo = 0 THEN CALL msg(16) NEXT FIELD idtipo END IF END IF IF Pcontrol_transferencia = 'SI' THEN IF otros_mov.bodega_destino IS NULL OR otros_mov.bodega_destino = 0 THEN CALL msg(16) NEXT FIELD bodega_destino END IF IF otros_mov.sec_transp IS NULL THEN CALL msg(16) NEXT FIELD sec_transp END IF IF otros_mov.placa IS NULL THEN END IF END IF IF otros_mov.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF SELECT UNIQUE a.usuario FROM iptb00048 a WHERE a.bodega = otros_mov.bodega AND a.usuario = usuarios IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "USTED NO TIENE PERMISOS PARA UTILIZAR BODEGA", "INFO") NEXT FIELD bodega END IF # BUSCA LOS ITEMS QUE TIENE LA REQUISICION IF pnumero_doc > 0 THEN DECLARE buscar_requisicion CURSOR FOR SELECT a.area, b.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad_1, a.cantidad_2, a.cantidad_2, a.unidad_med, a.descripcion, a.cantidad_1, a.cantidad_2, '', '' FROM iptb00058 a, prtb00016 b WHERE a.numero_doc = pnumero_doc AND b.area_num = a.area # Limpia el arreglo antes de cargar la requisicion para que no # queden items "fantasma" de una carga anterior. El FOREACH solo # sobreescribe los indices 1..N; sin este clear, los elementos # sobrantes de una carga previa quedaban y se posteaban sin # pertenecer a la requisicion de despacho. CALL movi2.clear() LET idx = 1 FOREACH buscar_requisicion INTO movi2[idx].* LET idx = idx + 1 END FOREACH ELSE IF otros_mov.conduce_no IS NOT NULL THEN LET ordenx = otros_mov.conduce_no SELECT a.tipo_cliente, a.sec_cliente, a.cerrada, a.cotizacion_no, a.sec_vend, a.tipo_orden INTO otros_mov.cod_sp, otros_mov.cod_sp_sec, pcerrada, xcotizacion, psec_vend, xtipo_orden FROM prtb00012 a WHERE a.num_oc = ordenx AND a.status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD conduce_no END IF SELECT a.nombre, b.sec_vend INTO otros_mov.descrip4 FROM vetb00004 a, vetb00028 b WHERE a.tipo_cliente = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_sec AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF SELECT a.mensaje INTO direccion_p FROM cctb00029 a WHERE a.num_req = pnum_req DISPLAY BY NAME otros_mov.conduce_no, otros_mov.cod_sp, otros_mov.cod_sp_Sec, pnum_req, direccion_p, psec_vend, xcotizacion, otros_mov.descrip4, psec_Vend IF otros_mov.cod_mov = 44 THEN IF xtipo_orden <> 'REPOSICION' THEN CALL fgl_Winmessage( "INFO", "LA ORDEN DEBE SER DE REPOSICION", "INFO") NEXT FIELD conduce_no END IF END IF END IF IF opc = "YES" OR opc IS NULL THEN CALL movi2.clear() END IF LET chconduce = 'N' # ESTA DECICION SE COMENTO EN FECHA 30/1/2026. EL OBJETIVO ES USAR LA PROPIEDAD control_produccion de la # tabla iptb00005 en lugar de los codigos hardcode # IF otros_mov.conduce_no IS NOT NULL AND (otros_mov.cod_mov = 70 OR otros_mov.cod_mov = 71 OR # otros_mov.cod_mov = 72 OR otros_mov.cod_mov = 79) THEN IF control_produce = 'SI' THEN DECLARE busca_orden CURSOR FOR SELECT a.area, c.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, '0', '0', a.cantidad, b.unidad_med, b.descrip_esp FROM prtb00013 a, iptb00002 b, prtb00016 c WHERE a.num_oc = ordenx AND c.area_num = a.area AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec LET idx = 1 FOREACH busca_orden INTO movi2[idx].* LET idx = idx + 1 END FOREACH END IF IF otros_mov.entrada IS NOT NULL THEN DECLARE busca_20 CURSOR FOR SELECT a.area, c.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, '0', '0', a.cantidad_2, b.unidad_med, b.descrip_esp FROM iptb00006 a, iptb00002 b, prtb00016 c WHERE a.conduce_no = ordenx AND c.area_num = a.area 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_mov = otros_mov.cod_mov1 AND a.num_doc = otros_mov.entrada AND a.status_t IS NULL LET idx = 1 FOREACH busca_20 INTO movi2[idx].* LET idx = idx + 1 END FOREACH END IF LET chconduce = 'N' IF otros_mov.conduce_no IS NOT NULL AND (otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 OR otros_mov.cod_mov = 56) THEN LET chconduce = 'S' IF otros_mov.entrada IS NOT NULL THEN DECLARE busca_entrada CURSOR FOR SELECT c.area, d.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.cantidad_1, c.cantidad, c.cantidad * - 1, b.unidad_med, b.descrip_esp, a.codigo_bloque, c.id_kit FROM iptb00006 a, iptb00002 b, cctb00026 c, prtb00016 d WHERE a.conduce_no = ordenx AND a.status_t IS NULL AND a.num_Doc = otros_mov.entrada AND d.area_num = c.area 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 = C.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND a.area = c.area AND c.num_req = pnum_req LET idx = 1 FOREACH busca_entrada INTO movi2[idx].* LET idx = idx + 1 END FOREACH END IF IF otros_mov.entrada IS NULL THEN DECLARE busca_orden1 CURSOR FOR SELECT UNIQUE a.area, d.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.cantidad_1, c.cantidad, c.cantidad, b.unidad_med, b.descrip_esp, ' ', c.id_kit FROM prtb00013 a, iptb00002 b, cctb00026 c, prtb00016 d WHERE a.num_oc = ordenx AND d.area_num = a.area AND a.status_t IS NULL 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 = C.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND a.area = c.area AND c.num_req = pnum_req LET idx = 1 FOREACH busca_orden1 INTO movi2[idx].* LET idx = idx + 1 END FOREACH END IF END IF IF control_devolucion = "SI" THEN IF otros_mov.conduce_no IS NULL THEN CALL fgl_winmessage( "ERROR", "DEBES DIGITAR NUMERO DE ORDEN DE PEDIDOS", "INFO") NEXT FIELD conduce_no END IF IF num_doc_ret IS NULL THEN IF otros_mov.factura IS NULL THEN CALL fgl_winmessage( "ERROR", "FACTURA ESTA EN BLANCO, FAVOR DE COLOCAR NUMERO DE FACTURA", "INFO") NEXT FIELD factura END IF LET selec = "SELECT a.area,'',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,a.cantidad,b.unidad_med,b.descrip_esp FROM vetb00003 a,iptb00002 b WHERE (a.factura = ", otros_mov.factura, " 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.status_t IS NULL " # ELSE # LET selec = "SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,a.cantidad,b.unidad_med,b.descrip_esp # FROM svtb00008 a,iptb00002 b # WHERE a.num_doc = ",num_doc_ret," and a.status_t IS NULL 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)" END IF PREPARE devoluciones FROM selec DECLARE busca_dev CURSOR FOR devoluciones LET idx = 1 FOREACH busca_dev INTO movi2[idx].* LET idx = idx + 1 END FOREACH END IF END IF END INPUT INPUT ARRAY movi2 FROM s_movi1.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET decide = NULL LET selec_pt = NULL LET hacerdocumento = TRUE # Este BEFORE FIELD estaba en comentario por disposicion de alguien hace algun # tiempo y ahora no se sabe porque se determino que cuando usted hace una # devolucion le permita al usuario modificar el codigo del producto # Hoy 13 de noviembre de 1993 el Ing. de informatica dispuso que # cuando sea una devolucion a una factura no se permitiera la actualizacion # del codigo del producto ON ACTION ordenDisponible ATTRIBUTE(TEXT = "Disponible") IF movi2[p_act].cod_Sec IS NOT NULL THEN CALL busca_ordenes_reservadas( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_Sec) END IF { BEFORE ROW LET p_act = arr_curr() LET scr_l = scr_line() IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN NEXT FIELD cantidad_1 END IF} ON ACTION despiece ATTRIBUTE(TEXT = "Despiece") LET p_act = arr_curr() LET scr_l = scr_line() SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec IF STATUS = NOTFOUND THEN LET numero_msg = 399 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi2[p_act].area IS NULL THEN LET movi2[p_act].area = 1 # DISPLAY movi2[p_act].area TO smovi1[scr_l].area END IF CALL despiece( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].area) # CALL adddespiece() # BUSCA LA EXISTENCIA LET p_act = arr_curr() IF status_m = "2" THEN LET hacerdocumento = TRUE LET arrcontrol_existencia[p_act] = p_iptb02.control_existencia IF p_iptb02.control_existencia = "SI" THEN CALL existencia( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].cantidad_2, p_act, otros_mov.bodega) RETURNING vexistencia, movi2[p_act].existencia DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 IF vexistencia THEN CALL fgl_winmessage( "ERROR", "CANTIDAD EXCEDE EXISTENCIA", "STOP") NEXT FIELD cod_n END IF CALL disponibles( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, TODAY) RETURNING cantidad_orden1, pcantidadConduce, transito, existencia, reservado, valororden LET cantidad_orden1 = cantidad_orden1 + pcantidadConduce # LET movi2[p_act].existencia=existencia # LET existencia=existencia-cantidad_orden1 # LET movi2[p_act].disponible=existencia DISPLAY movi2[p_act].existencia TO s_movi1[scr_l].existencia DISPLAY movi2[p_act].disponible TO s_movi1[scr_l].disponible IF movi2[p_act].cantidad_2 > existencia THEN CALL fgl_winmessage( "info", "CANTIDAD EXCEDE DISPONIBLE", "INFO") END IF END IF END IF #================================================================================ # DISPLAY movi2[p_act].cantidad_1 TO smovi1[scr_l].cantidad_1 ##NEXT FIELD cantidad_1 NEXT FIELD cod_sec ON ACTION producto ATTRIBUTE(TEXT = "Producto") CASE WHEN INFIELD(cod_n) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp = busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].descrip_esp, movi2[p_act].unidad_med TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo, s_movi1[scr_l].cod_tipo, s_movi1[scr_l].cod_sec, s_movi1[scr_l].descrip_esp, s_movi1[scr_l].unidad_med WHEN INFIELD(cod_grupo) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp = busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].descrip_esp, movi2[p_act].unidad_med TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo, s_movi1[scr_l].cod_tipo, s_movi1[scr_l].cod_sec, s_movi1[scr_l].descrip_esp, s_movi1[scr_l].unidad_med WHEN INFIELD(cod_tipo) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp = busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].descrip_esp, movi2[p_act].unidad_med TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo, s_movi1[scr_l].cod_tipo, s_movi1[scr_l].cod_sec, s_movi1[scr_l].descrip_esp, s_movi1[scr_l].unidad_med WHEN INFIELD(cod_sec) CALL busca_prod1() LET movi2[p_act].cod_n = busca_p.cod_n LET movi2[p_act].cod_grupo = busca_p.cod_grupo LET movi2[p_act].cod_tipo = busca_p.cod_tipo LET movi2[p_act].cod_sec = busca_p.cod_sec LET movi2[p_act].descrip_esp = busca_p.descrip_esp LET movi2[p_act].unidad_med = busca_p.unidad_med DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].descrip_esp, movi2[p_act].unidad_med TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo, s_movi1[scr_l].cod_tipo, s_movi1[scr_l].cod_sec, s_movi1[scr_l].descrip_esp, s_movi1[scr_l].unidad_med END CASE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF AFTER FIELD codigo_bloque IF LENGTH(movi2[p_act].codigo_bloque) > 2 THEN SELECT UNIQUE a.codigo_bloque FROM intb00018 a WHERE a.codigo_bloque = movi2[p_act].codigo_bloque IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD codigo_bloque END IF END IF AFTER FIELD cod_n LET p_act = arr_curr() IF movi2[p_act].cod_n IS NOT NULL THEN LET ant_art.area = movi2[p_act].area LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].area = ant_art.area AND movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR END IF AFTER FIELD cod_grupo LET p_act = arr_curr() IF movi2[p_act].cod_grupo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ant_art.area = movi2[p_act].area LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].area = ant_art.area AND movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR AFTER FIELD cod_tipo LET p_act = arr_curr() IF movi2[p_act].cod_tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ant_art.area = movi2[p_act].area LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].area = ant_art.area AND movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR AFTER FIELD cod_sec LET p_act = arr_curr() IF movi2[p_act].cod_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi2[p_act].cod_n IS NULL AND movi2[p_act].cod_sec IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi2[p_act].cod_n IS NOT NULL AND movi2[p_act].cod_grupo IS NOT NULL AND movi2[p_act].cod_tipo IS NOT NULL AND movi2[p_act].cod_sec IS NOT NULL THEN SELECT a.descrip_esp, a.unidad_med, a.control_existencia, a.exist_min, a.desglose, a.es_produccion INTO p_iptb02.descrip_esp, p_iptb02.unidad_med, p_iptb02.control_existencia, existminima[p_act], desglose, xes_produccion FROM iptb00002 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF # CONTROL PRODUCCION: si el codigo de movimiento tiene # control_produccion = SI (control_produce), el item digitado # debe estar marcado como es_produccion en la maestra iptb00002. # Si no lo esta, se avisa con msg(1686) y se rechaza el item. IF control_produce = "SI" THEN IF xes_produccion IS NULL OR xes_produccion = 0 THEN LET numero_msg = 1686 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF LET arrcontrol_existencia[p_act] = p_iptb02.control_existencia SELECT UNIQUE a.factor_conv INTO factor_conv[p_act] FROM iptb00001 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(94) NEXT FIELD cod_n END IF LET movi2[p_act].descrip_esp = p_iptb02.descrip_esp CLIPPED LET movi2[p_act].unidad_med = p_iptb02.unidad_med CLIPPED DISPLAY movi2[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp ATTRIBUTE(CYAN) DISPLAY movi2[p_act].unidad_med TO s_movi1[scr_l].unidad_med ATTRIBUTE(CYAN) LET ant_art.area = movi2[p_act].area LET ant_art.cod_n = movi2[p_act].cod_n LET ant_art.cod_grupo = movi2[p_act].cod_grupo LET ant_art.cod_tipo = movi2[p_act].cod_tipo LET ant_art.cod_sec = movi2[p_act].cod_sec FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].area = ant_art.area AND movi2[idx].cod_n = ant_art.cod_n AND movi2[idx].cod_grupo = ant_art.cod_grupo AND movi2[idx].cod_tipo = ant_art.cod_tipo AND movi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR # CONTROL ITEMS EN LA ORDEN IF otros_mov.conduce_no IS NOT NULL AND pcontrol_cliente = "SI" THEN SELECT UNIQUE a.cod_n FROM prtb00013 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.num_oc = ordenx IF STATUS = NOTFOUND THEN LET numero_msg = 397 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF IF pnum_req IS NOT NULL THEN # CONTROL ITEM EN LA REQUISICION LET hacerdocumento = TRUE SELECT UNIQUE a.cod_n FROM cctb00026 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.num_oc = otros_mov.conduce_no AND a.num_req = pnum_req IF STATUS = NOTFOUND THEN LET numero_msg = 397 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF # CONTROL DESPIECE SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec IF STATUS != NOTFOUND THEN # IF NOT siDespiece THEN CALL despiece( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].area) # CALL adddespiece() # END IF DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 END IF LET movi2[p_act].cantidad_p = cantidad_conduce - cantidad_orden # CONTROL UBICACION # Normalizar el area ANTES de capturar la ubicacion. # El "ON ACTION guardar" defaultea area NULL -> 1, asi que # si aqui se captura la ubicacion con area NULL, al guardar # el item queda con area 1 y la ubicacion con area NULL, y # el filtro NVL(area,0) del JSON no matchea (error 1668). IF movi2[p_act].area IS NULL THEN LET movi2[p_act].area = 1 END IF LET moviD.area = movi2[p_act].area LET moviD.cod_n = movi2[p_act].cod_n LET moviD.cod_grupo = movi2[p_act].cod_grupo LET moviD.cod_tipo = movi2[p_act].cod_tipo LET moviD.cod_sec = movi2[p_act].cod_sec LET moviD.id_bodega = otros_mov.bodega LET moviD.cod_mov = otros_mov.cod_mov LET moviD.descripcion = movi2[p_act].descrip_esp CLIPPED LET moviD.factor_conv = factor_conv[p_act] LET moviD.cantidad1 = movi2[p_act].cantidad_1 LET moviD.cantidad2 = movi2[p_act].cantidad_2 LET scodigo = movi2[p_act].area USING "<<<", "-", movi2[p_act].cod_n USING "<<<<", "-", movi2[p_act].cod_grupo USING "<<<<<", "-", movi2[p_act].cod_tipo USING "<<<<<<", "-", movi2[p_act].cod_sec USING "<<<<<<", "-" LET idx = movi10Dest.search("codigo", scodigo) # CALL movi10Dest.deleteElement(idx) DISPLAY "antes movi cantidad2: ", moviD.cantidad2 DISPLAY "antes movi cantidad1: ", moviD.cantidad1 CALL insertaUbicacion( moviD.*, tmpnumero) RETURNING movi2[p_act].cantidad_1, movi2[p_act].cantidad_2, tmpnumero, movi10 # Si insertaUbicacion no devolvio ninguna fila de ubicacion # (por ejemplo el usuario salio del dialogo con ESC/int_flag # en vez de presionar "Guardar"), no se debe continuar como # si el ITEM tuviera ubicacion. De lo contrario el ITEM queda # sin registros en movi10Dest y el error 1668 solo aparece # hasta el "Guardar" final del documento. IF movi10.getLength() = 0 THEN LET numero_msg = 1668 CALL msg(numero_msg) NEXT FIELD cod_sec END IF DISPLAY movi2[p_act].cantidad_1 TO s_movi1[scr_l].cantidad_1 DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 CALL eliminaUbicacionesItem( movi2[p_act].area, movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec) CALL adicionaArray() #CONTROL DEVOLUCION IF control_devolucion = "SI" THEN SELECT DISTINCT a.area INTO movi2[p_act].area FROM vetb00003 a WHERE a.factura = otros_mov.factura AND a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.area = movi2[p_act].area IF STATUS = NOTFOUND THEN CALL msg(502) NEXT FIELD area END IF DISPLAY movi2[p_act].area TO s_movi1[scr_l].area ATTRIBUTE(RED) IF movi2[p_Act].cantidad_2 > movi2[p_Act].cantidad_p THEN LET numero_msg = 28 CALL msg(numero_msg) ##NEXT FIELD cantidad_1 NEXT FIELD cod_sec END IF DISPLAY movi2[p_Act].cantidad_2 TO s_movi1[scr_l].cantidad_2 END IF IF desglose = 'S' THEN # PROCESO DESGLOSE CALL fotos( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].descrip_esp, USUARIOS, TRUE, movi2[p_act].cantidad_2, tmpnumero, otros_mov.cod_mov, otros_mov.bodega, status_m) RETURNING xcantidad2, xcantidad1 LET movi2[p_act].cantidad_1 = xcantidad1 LET movi2[p_act].cantidad_2 = xcantidad2 NEXT FIELD codigo_bloque END IF END IF # CONTROL CODIGO EN BLANCO AFTER ROW LET p_act = arr_curr() LET scr_l = scr_line() IF movi2[p_act].cod_n IS NOT NULL AND movi2[p_act].cod_grupo IS NOT NULL AND movi2[p_act].cod_tipo IS NOT NULL AND movi2[p_act].cod_sec IS NOT NULL THEN IF arrcontrol_existencia[p_act] = "SI" THEN EXECUTE bcosto USING pano, movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec INTO costoItem IF STATUS = NOTFOUND OR costoItem = 0 THEN DISPLAY movi2[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp ATTRIBUTE(RED) LET numero_msg = 1674 CALL msg(numero_msg) NEXT FIELD cod_n END IF ELSE LET costoItem = 0 END IF END IF AFTER FIELD cantidad_1 LET p_act = arr_curr() IF movi2[p_act].cod_n IS NOT NULL AND movi2[p_act].cod_grupo IS NOT NULL AND movi2[p_act].cod_tipo IS NOT NULL AND movi2[p_act].cod_sec IS NOT NULL THEN IF movi2[p_act].cantidad_1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) ##NEXT FIELD cantidad_1 NEXT FIELD cod_sec END IF SELECT UNIQUE a.factor_conv INTO factor_conv[p_act] FROM iptb00001 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(94) NEXT FIELD cod_n END IF IF movi2[p_act].cantidad_1 < 0 THEN CALL msg(16) ##NEXT FIELD cantidad_1 NEXT FIELD cod_sec END IF LET movi2[p_act].cantidad_2 = movi2[p_act].cantidad_1 * factor_conv[p_act] DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 LET p_iptb06.cantidad_2 = 0 # BUSCA LA EXISTENCIA IF status_m = "2" THEN LET hacerdocumento = TRUE IF p_iptb02.control_existencia = "SI" THEN CALL existencia( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].cantidad_2, p_act, otros_mov.bodega) RETURNING vexistencia, movi2[p_act].existencia IF vexistencia THEN CALL fgl_winmessage( "ERROR", "CANTIDAD EXCEDE EXISTENCIA", "STOP") NEXT FIELD cod_n END IF CALL disponibles( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, TODAY) RETURNING cantidad_orden1, pcantidadConduce, transito, existencia, reservado, valororden LET cantidad_orden1 = cantidad_orden1 + pcantidadConduce DISPLAY movi2[p_act].existencia TO s_movi1[scr_l].existencia DISPLAY movi2[p_act].disponible TO s_movi1[scr_l].disponible IF movi2[p_act].cantidad_2 > existencia THEN CALL fgl_winmessage( "info", "CANTIDAD EXCEDE DISPONIBLE", "INFO") END IF END IF END IF #================================================================================ # CONTROL CANTIDAD DESPIECE LET total_medida = 0 IF otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 OR otros_mov.cod_mov = 70 OR otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 72 THEN # CONTROL DESPIECE SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec IF STATUS != NOTFOUND THEN # IF NOT siDespiece THEN CALL despiece( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].area) # CALL adddespiece() # END IF LET movi2[p_act].cantidad_2 = movi2[p_act].cantidad_1 END IF END IF DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 LET selec_pt = selec_pt CLIPPED, movi2[p_act].descrip_esp, " CANTIDAD ", movi2[p_act].cantidad_2, " ", movi2[p_act].unidad_med IF otros_mov.conduce_no IS NOT NULL AND pcontrol_cliente = "SI" THEN # CONTROL ORDEN IF otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 70 THEN LET cantidad_conduce = 0 SELECT ISNULL(SUM(a.cantidad), 0) INTO cantidad_conduce FROM prtb00013 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.num_oc = ordenx AND a.status_t IS NULL LET cantidad_recibida = 0 SELECT ISNULL(SUM(a.cantidad_2), 0) INTO cantidad_recibida FROM iptb00006 a WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.num_oc = ordenx AND a.cod_mov IN (20, 70, 72, 71) AND a.status_t IS NULL LET hacerdocumento = TRUE DISPLAY "CANTIDAD CONDUCE: ", movi2[p_act].cod_sec, " ", cantidad_recibida, " ", movi2[p_act].cantidad_2, " ", cantidad_conduce IF (cantidad_Recibida + movi2[p_act].cantidad_2) > cantidad_conduce THEN LET numero_msg = 46 LET hacerdocumento = FALSE CALL msg(numero_msg) ##NEXT FIELD cantidad_1 NEXT FIELD cod_sec END IF END IF END IF # CONTROL DEVOLUCION # CONTROL REQUISICION { IF control_devolucion <>"SI" THEN IF pnum_req IS NOT NULL THEN IF NOT control_requisicion(movi2[p_act].cantidad_2,movi2[p_act].cod_n, movi2[p_act].cod_grupo,movi2[p_act].cod_tipo, movi2[p_act].cod_sec,movi2[p_act].id_kit,factor_conv[p_act]) THEN CALL fgl_Winmessage("ERROR","CANTIDAD EXCEDE A CANTIDAD EN REQUISICION","INFO") NEXT FIELD cantidad_1 END IF END IF END IF} #================================================================================================= LET movi3[p_act].cantidad_2 = movi2[p_act].cantidad_2 END IF ON ACTION guardar ATTRIBUTE(TEXT = "Guardar", IMAGE = "save") # RED DE SEGURIDAD (equivalente a un AFTER INPUT): antes de cualquier # otra validacion, si el movimiento es de produccion (control_produce=SI) # ningun item puede carecer de es_produccion en la maestra iptb00002. # Atrapa el caso en que el usuario haya evadido el AFTER FIELD cod_sec. IF control_produce = "SI" THEN FOR idx = 1 TO movi2.getLength() IF movi2[idx].cod_n IS NOT NULL AND movi2[idx].cod_grupo IS NOT NULL AND movi2[idx].cod_tipo IS NOT NULL AND movi2[idx].cod_sec IS NOT NULL THEN SELECT a.es_produccion INTO xes_produccion FROM iptb00002 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.status_t IS NULL IF xes_produccion IS NULL OR xes_produccion = 0 THEN LET numero_msg = 1686 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR END IF FOR idx = 1 TO movi2.getLength() IF movi2[idx].area IS NULL THEN LET movi2[idx].area = 1 END IF END FOR # CONTROL ORDEN PEDIDOS EN FECHA 10/02/2026 {IF pcontrol_departamento = "SI" THEN IF ordenx IS NOT NULL THEN # BUSCA LA CANTIDAD DE LA ORDEN PARA ESTE ITEM FOR idx = 1 TO movi2.getLength() LET cantidad_orden =0 SELECT SUM(a.cantidad) INTO cantidad_orden FROM prtb00013 a WHERE (a.num_oc = ordenx) AND (a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec) # AND # a.area = movi2[idx].area #CANTIDAD PRODUCIDA LET cantidad_recibida=0 SELECT SUM(a.cantidad_2) INTO cantidad_recibida FROM iptb00006 a,iptb00005 b WHERE (a.cod_mov = b.cod_mov) AND b.control_departamento ='SI' AND (a.num_oc = ordenx) AND (a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec) AND # a.area = movi2[idx].area AND a.status_t IS NULL IF cantidad_recibida >= cantidad_orden THEN CALL msg(46) NEXT FIELD cod_n END IF END FOR END IF END IF } #------------------------------------------------------------------------------- # CONTROL DESPIECE FOR idx = 1 TO movi2.getLength() SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec IF STATUS != NOTFOUND THEN IF despiece.getLength() = 1 THEN CALL msg(398) NEXT FIELD cod_n END IF END IF END FOR #--------------------------------------------------------------------------------------------- # CONTROL REQUISICION EN FECHA 10/02/2026 IF control_devolucion <> "SI" THEN IF pcontrol_despacho = "SI" THEN IF pnum_req IS NOT NULL THEN LET hacerdocumento = TRUE FOR idx = 1 TO movi2.getLength() IF movi2[idx].cod_n IS NOT NULL THEN IF NOT control_requisicion( movi2[idx].cantidad_2, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].id_kit, factor_conv[idx], movi2[idx].area) THEN CALL fgl_Winmessage( "ERROR", "CANTIDAD EXCEDE A CANTIDAD EN REQUISICION", "INFO") LET hacerdocumento = FALSE EXIT FOR END IF END IF END FOR IF NOT hacerdocumento THEN NEXT FIELD cod_sec END IF ELSE CALL fgl_Winmessage( "ERROR", "NUMERO REQUISICION ESTA EN BLANCO", "INFO") NEXT FIELD cod_mov END IF END IF END IF #================================================================================================= IF control_devolucion = "SI" THEN IF otros_mov.factura IS NULL OR otros_mov.factura = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura END IF SELECT UNIQUE a.tipo_cliente, a.sec_cliente, a.orden, b.codigo_dgii INTO otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.conduce_no, documento_encabezado.tipoPago FROM vetb00002 a, vetb00012 b WHERE factura = otros_mov.factura AND a.status_t IS NULL AND a.cond_pago = b.cond_pago AND CONVERT(CHAR(10), a.fecha_factura, 101) >= '01/01/2007' IF status = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) NEXT FIELD fact_no END IF DISPLAY BY NAME otros_mov.conduce_no # CONTROL ` LET cantidad_factura = 0 LET cantidad_devuelta = 0 SELECT SUM(a.cantidad) INTO cantidad_factura FROM vetb00003 a WHERE a.factura = otros_mov.factura AND a.status_t IS NULL AND a.fech_crea > '2009-01-01 08:00' SELECT SUM(a.cantidad_2) INTO cantidad_devuelta FROM iptb00006 a WHERE a.factura = otros_mov.factura AND a.status_t IS NULL AND a.fech_crea > '2009-01-01 08:00' AND a.cod_mov IN (12, 13) IF cantidad_devuelta + .05 > cantidad_factura THEN LET numero_msg = 238 CALL msg(numero_msg) NEXT FIELD factura END IF END IF IF pcontrol_cliente = "SI" THEN FOR idx = 1 TO movi2.getLength() IF movi2[idx].cod_sec IS NOT NULL THEN #CONTROL DEVOLUCION IF control_devolucion = "SI" THEN SELECT DISTINCT a.area INTO movi2[idx].area FROM vetb00003 a WHERE a.factura = otros_mov.factura AND a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.area = movi2[idx].area IF STATUS = NOTFOUND THEN CALL msg(502) DISPLAY movi2[idx].area TO s_movi1[idx].area ATTRIBUTE(RED) NEXT FIELD area END IF DISPLAY movi2[idx].area TO s_movi1[idx].area ATTRIBUTE(RED) IF movi2[idx].cantidad_2 > movi2[idx].cantidad_p THEN CALL msg(28) NEXT FIELD cod_sec END IF DISPLAY movi2[idx].cantidad_2 TO s_movi1[idx].cantidad_2 END IF #------------------------------------------------------------------------------------------ IF movi2[idx].area IS NULL THEN CALL msg(16) NEXT FIELD area END IF END IF END FOR END IF #----------------------- CONTROL EXISTENCIAS ---------------------------------------- IF status_m = "2" THEN FOR idx = 1 TO movi2.getLength() IF movi2[idx].cod_sec IS NOT NULL THEN SELECT a.descrip_esp, a.unidad_med, a.control_existencia INTO p_iptb02.descrip_esp, p_iptb02.unidad_med, p_iptb02.control_existencia FROM iptb00002 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.status_t IS NULL IF p_iptb02.control_existencia = "SI" THEN LET vexistencia = FALSE DISPLAY movi2[idx].cantidad_2 TO s_movi1[scr_l].cantidad_2 END IF END IF END FOR END IF #-------------------------------------------------------------------------------------------------------- LET hacerdocumento = TRUE LET opc = "NO" LET opc = fgl_winquestion( "INFORMACION", "Toda la Informacion Esta Correcta?", "YES", "YES|NO", "QUESTION", 0) IF OPC = "YES" THEN LET pano = YEAR(otros_mov.fecha) ERROR "BUSCANDO SECUENCIA DOCS...." # Actualiza tabla control ultimo documento BEGIN WORK # Serializa la obtencion del numero de documento para evitar # duplicados bajo concurrencia (con RCSI activado los lectores # ya no toman lock compartido). UPDLOCK + HOLDLOCK hace que un # segundo usuario espere el COMMIT del primero antes de leer, # de modo que dos usuarios nunca lean el mismo numero base. IF NOT prep_seq_docs THEN LET l_sql_seq = "SELECT num_doc FROM iptb00007 WITH (UPDLOCK, HOLDLOCK)", " WHERE cod_mov = ? AND bodega = ?" PREPARE p_seq_docs FROM l_sql_seq LET prep_seq_docs = TRUE END IF EXECUTE p_seq_docs USING otros_mov.cod_mov, otros_mov.bodega INTO otros_mov.num_doc IF status = NOTFOUND THEN LET otros_mov.num_doc = 0 INSERT INTO iptb00007 VALUES(1, otros_mov.cod_mov, NULL, usuarios, getdate(), NULL, NULL, otros_mov.bodega) END IF LET otros_mov.num_doc = otros_mov.num_doc + 1 LET cuerpo_correo = "" LET idxJSON = 0 FOR idx = 1 TO movi2.getLength() IF movi2[idx].cod_n IS NOT NULL AND movi2[idx].cod_grupo IS NOT NULL AND movi2[idx].cod_tipo IS NOT NULL AND movi2[idx].cod_sec IS NOT NULL THEN # BUSCA NUEVAMENTE EL FACTOR DE CONVERSION SELECT UNIQUE a.factor_conv INTO factor_conv[idx] FROM iptb00001 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN ROLLBACK WORK CALL msg(94) NEXT FIELD cod_n END IF # BUSCA NUEVAMENTE EL CONTROL DE EXISTENCIA (fresco por idx). # arrcontrol_existencia se llenaba por p_act solo en el input interactivo; # los items cargados desde requisicion/conduce no pasan por ahi y el arreglo # quedaba stale/vacio -> la app se saltaba la busqueda de costo y mandaba # costoItem = 0 -> el SP devolvia 1674 aunque el item si tuviera costo. SELECT a.control_existencia INTO arrcontrol_existencia[idx] FROM iptb00002 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN ROLLBACK WORK LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi2[idx].cantidad_1 < 0 THEN ROLLBACK WORK CALL msg(16) NEXT FIELD cod_sec END IF LET movi2[idx].cantidad_2 = movi2[idx].cantidad_1 * factor_conv[idx] IF movi2[idx].cantidad_2 IS NULL OR movi2[idx].cantidad_2 = 0 THEN ROLLBACK WORK CALL msg(16) DISPLAY "estoy en cantidad_2 is null and 0" NEXT FIELD cod_sec END IF IF movi2[idx].cantidad_2 = 0 THEN ROLLBACK WORK CALL msg(16) DISPLAY "estoy en cantidad_2 =0" NEXT FIELD cod_sec END IF IF movi2[idx].cantidad_2 IS NOT NULL OR movi2[idx].cantidad_2 > 0 THEN IF movi2[idx].cantidad_1 = 0 THEN ROLLBACK WORK CALL msg(16) DISPLAY "estoy en cantidad_1 es cero" NEXT FIELD cod_sec END IF END IF IF pcontrol_despacho = "SI" THEN SELECT UNIQUE a.cod_mov FROM vetb00060 a WHERE a.tipo_cliente = otros_mov.cod_sp AND a.cod_mov = otros_mov.cod_mov IF STATUS = NOTFOUND THEN ROLLBACK WORK LET numero_msg = 386 CALL msg(numero_msg) NEXT FIELD cod_Sec END IF END IF IF ordenx IS NULL OR ordenx = 0 THEN LET ordenx = otros_mov.conduce_no END IF IF arrcontrol_existencia[idx] = "SI" THEN EXECUTE bcosto USING pano, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec INTO costoItem IF STATUS = NOTFOUND OR costoItem = 0 THEN ROLLBACK WORK LET scr_l = scr_line() DISPLAY movi2[idx].descrip_esp TO s_movi1[scr_l].descrip_esp ATTRIBUTE(RED) LET numero_msg = 1674 CALL msg(numero_msg) NEXT FIELD cod_n END IF ELSE LET costoItem = 0 END IF # Normalizar una sola vez el movimiento principal IF status_m = 2 THEN IF movi2[idx].cantidad_2 > 0 THEN LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1 END IF ELSE IF status_m = 1 THEN IF movi2[idx].cantidad_2 < 0 THEN LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1 END IF END IF END IF CALL movi10Dest_JSON.clear() INITIALIZE jsonMovi TO NULL LET idxJSON = 0 FOR idxUbic = 1 TO movi10Dest.getLength() DISPLAY "COMPARANDO: ", movi10Dest[idxUbic].cod_n, "-", movi10Dest[idxUbic].cod_grupo, "-", movi10Dest[idxUbic].cod_tipo, "-", movi10Dest[idxUbic].cod_sec, " AREA UBIC: ", movi10Dest[idxUbic].area, " AREA ITEM: ", movi2[idx].area IF movi10Dest[idxUbic].cod_n = movi2[idx].cod_n AND movi10Dest[idxUbic].cod_grupo = movi2[idx].cod_grupo AND movi10Dest[idxUbic].cod_tipo = movi2[idx].cod_tipo AND movi10Dest[idxUbic].cod_sec = movi2[idx].cod_sec AND NVL(movi10Dest[idxUbic].area, 0) = NVL(movi2[idx].area, 0) THEN LET idxJSON = idxJSON + 1 LET movi10Dest_JSON[idxJSON].area = movi10Dest[idxUbic].area LET movi10Dest_JSON[idxJSON].cod_n = movi10Dest[idxUbic].cod_n LET movi10Dest_JSON[idxJSON].cod_grupo = movi10Dest[idxUbic].cod_grupo LET movi10Dest_JSON[idxJSON].cod_tipo = movi10Dest[idxUbic].cod_tipo LET movi10Dest_JSON[idxJSON].cod_sec = movi10Dest[idxUbic].cod_sec LET movi10Dest_JSON[idxJSON].id_bodega = movi10Dest[idxUbic].id_bodega LET movi10Dest_JSON[idxJSON].id_seccion1 = movi10Dest[idxUbic].id_seccion1 LET movi10Dest_JSON[idxJSON].id_tramo1 = movi10Dest[idxUbic].id_tramo1 LET movi10Dest_JSON[idxJSON].id_fila = movi10Dest[idxUbic].id_fila LET movi10Dest_JSON[idxJSON].id_pos = movi10Dest[idxUbic].id_pos LET movi10Dest_JSON[idxJSON].cantidad1 = movi10Dest[idxUbic].cantidad1 LET movi10Dest_JSON[idxJSON].cantidad2 = movi10Dest[idxUbic].cantidad2 IF status_m = 2 THEN IF movi10Dest_JSON[idxJSON].cantidad2 > 0 THEN LET movi10Dest_JSON[idxJSON] .cantidad2 = movi10Dest_JSON[idxJSON] .cantidad2 * -1 END IF ELSE IF status_m = 1 THEN IF movi10Dest_JSON[idxJSON] .cantidad2 < 0 THEN LET movi10Dest_JSON[idxJSON] .cantidad2 = movi10Dest_JSON[idxJSON] .cantidad2 * -1 END IF END IF END IF END IF END FOR IF idxJSON = 0 THEN DISPLAY "SIN UBICACION PARA ITEM: ", movi2[idx].cod_n, "-", movi2[idx].cod_grupo, "-", movi2[idx].cod_tipo, "-", movi2[idx].cod_sec, " AREA: ", movi2[idx].area ROLLBACK WORK LET numero_msg = 1668 CALL msg(numero_msg) NEXT FIELD cod_sec END IF LET jsonMovi = util.JSON.stringify(movi10Dest_JSON) DISPLAY "JSON FINAL: ", jsonMovi INITIALIZE out_result TO NULL LET procedimiento = "EXEC sp_insert_inventario ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?" PREPARE smt FROM procedimiento EXECUTE smt USING ordenx IN, --idx IN, movi2[idx].cod_n IN, movi2[idx].cod_grupo IN, movi2[idx].cod_tipo IN, movi2[idx].cod_sec IN, movi2[idx].area IN, movi2[idx].cantidad_1 IN, movi2[idx].cantidad_2 IN, otros_mov.cod_mov IN, otros_mov.num_doc IN, tmpnumero IN, otros_mov.entrada IN, otros_mov.fecha IN, otros_mov.conduce_no IN, otros_mov.cod_sp IN, otros_mov.cod_sp_sec IN, otros_mov.cod_transp IN, otros_mov.sec_transp IN, otros_mov.placa IN, otros_mov.detalle IN, otros_mov.bodega IN, pcerrada IN, usuarios IN, pnum_req IN, movi2[idx].codigo_bloque IN, psec_vend IN, direccion_p IN, otros_mov.bodega_destino IN, num_doc_ret IN, aplica_dev IN, otros_mov.departamento IN, pcontrol_departamento IN, otros_mov.factura IN, pnumero_doc IN, costoItem IN, pcodmov_transferencia IN, #CODMOV TRANSFERENCIA p_num_doc_transferencia IN, # NUMERO TRANSFERENCIA otros_mov.bodega IN, #BODEGA TRANSFERENCIA jsonMovi IN, out_result OUT, cod_mensaje OUT, out_cantidad_item OUT, out_cantidad_ubicacion OUT, out_msg OUT IF out_result <> 0 THEN DISPLAY "============================================" DISPLAY "ERROR sp_insert_inventario" DISPLAY "ITEM: ", movi2[idx].cod_n, "-", movi2[idx].cod_grupo, "-", movi2[idx].cod_tipo, "-", movi2[idx].cod_sec DISPLAY "DOCUMENTO: ", otros_mov.num_doc DISPLAY "MOVIMIENTO: ", otros_mov.cod_mov DISPLAY "BODEGA: ", otros_mov.bodega DISPLAY "AREA: ", movi2[idx].area DISPLAY "OUT_RESULT: ", out_result DISPLAY "COD_MENSAJE: ", cod_mensaje DISPLAY "OUT_MSG: ", out_msg DISPLAY "CANTIDAD1: ", out_cantidad_item DISPLAY "CANTIDAD2: ", out_cantidad_ubicacion DISPLAY "JSON: ", jsonMovi DISPLAY "============================================" ROLLBACK WORK IF out_msg IS NOT NULL THEN ERROR out_msg ELSE LET numero_msg = cod_mensaje CALL msg(numero_msg) END IF NEXT FIELD cod_n END IF # CUERPO TRANSFERENCIA IF pcontrol_transferencia = "SI" THEN LET cuerpo_correo = cuerpo_correo CLIPPED, "", "", "" END IF # ACTUALIZA LISTA PARA DESPACHO EN STATUS_PRODUCCION IF pcontrol_departamento = "SI" THEN # BUSCA LA CANTIDAD DE LA ORDEN PARA ESTE ITEM LET cantidad_orden = 0 SELECT SUM(a.cantidad) INTO cantidad_orden FROM prtb00013 a WHERE (a.num_oc = ordenx) AND (a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec) #CANTIDAD PRODUCIDA LET cantidad_recibida = 0 SELECT SUM(a.cantidad_2) INTO cantidad_recibida FROM iptb00006 a, iptb00005 b WHERE (a.cod_mov = b.cod_mov) AND b.control_departamento = 'SI' AND (a.num_oc = ordenx) AND (a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec) AND a.status_t IS NULL IF cantidad_recibida >= cantidad_orden THEN LET chconduce = 'S' LET estadoordenes = NULL LET cuerpo_correo = 'ORDEN: ', ordenx USING "&&&&&&", 'LISTA PARA DESPACHO PARA EL MATERIAL ', movi2[idx].descrip_esp CLIPPED, ' ', movi2[idx].unidad_med, ' ', movi2[idx].cantidad_2 USING "<<<,<<<.####", '; ' LET estadoordenes = 'CON EL DOCUMENTO ', otros_mov.num_doc USING "<<<<<<", " FUE ACTUALIZADA LA ORDEN ", ordenx USING "<<<<<<", " LISTA PARA DESPACHO " ELSE LET chconduce = 'S' LET cuerpo_correo = 'ORDEN: ', ordenx USING "&&&&&&", 'PRODUCCION PARCIAL PARA EL MATERIAL ', movi2[idx].descrip_esp CLIPPED, ' ', movi2[idx].unidad_med, ' ', movi2[idx].cantidad_2 USING "<<<,<<<.####", '; ' END IF END IF IF chconduce = 'S' OR control_devolucion = 'SI' THEN LET cuerpo_correo = cuerpo_correo CLIPPED, ' ', movi2[idx].descrip_esp CLIPPED, ' ', movi2[idx].unidad_med, ' ', movi2[idx].cantidad_2 USING "<<<,<<<.####", '; ' END IF END IF { if de cantidad_2 no NULL } # END IF {if cod_n cod_tipo ........ is not null } END FOR INITIALIZE numero_msg TO NULL # CALL addUbicacion() RETURNING numero_msg IF numero_msg IS NOT NULL AND numero_msg <> 0 THEN ROLLBACK WORK DISPLAY "ROLLBACK: ERROR AL REGISTRAR UBICACIONES" CALL msg(numero_msg) NEXT FIELD cod_sec END IF #----------------------------------------------------------------------------------------- #DESPIECE IF despiece.getLength() > 0 THEN FOR idx = 1 TO despiece.getLength() INSERT INTO iptb00025( id_etiqueta, cod_mov, num_doc, cod_n, cod_grupo, cod_tipo, cod_sec, lado_1, lado_2, lado_3, cantidad, medida, us_crea, fech_crea, bodega) VALUES(despiece[idx].id_etiqueta, otros_mov.cod_mov, otros_mov.num_doc, despiece[idx].cod_n, despiece[idx].cod_grupo, despiece[idx].cod_tipo, despiece[idx].cod_sec, despiece[idx].lado_1, despiece[idx].lado_2, despiece[idx].lado_3, despiece[idx].cantidad, despiece[idx].medida, usuarios, GETDATE(), otros_mov.bodega) END FOR END IF # CALL autoFacturacion(datos.*,usuarios) DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero # ELIMINA DE LA TABLA TEMPORAL EL DOCUMENTO CON RELACION AL DESGLOSE DELETE FROM tmpdesglose_master WHERE num_Doc = tmpnumero AND cod_mov = otros_mov.cod_mov AND us_crea = usuarios DELETE FROM tmpdesglose WHERE num_Doc = tmpnumero AND cod_mov = otros_mov.cod_mov AND us_crea = usuarios #ACTUALIZA LA REQUISICION TRANSACCIONES IF pnumero_Doc > 0 THEN IF actualizareqtrx(pnumero_doc) THEN UPDATE iptb00057 SET estado = 'CERRADA', us_mod = usuarios, fech_mod = getdate() WHERE numero_doc = pnumero_doc END IF END IF # ENVIO AVISO EXISTENCIA MINIMA CALL existenciaMinima() # ACTUALIZA EL ESTADO DE LA REQUISICION DESPACHO SELECT ISNULL(SUM(a.cantidad), 0) INTO cantidadRequisicion FROM cctb00026 a WHERE (a.num_req = pnum_req) AND a.status_t IS NULL SELECT ISNULL(SUM(a.cantidad_2 * - 1), 0) INTO rcantidad_requisicion FROM iptb00006 a WHERE (a.num_req = pnum_req) AND a.status_t IS NULL LET diferencia = cantidadRequisicion - rcantidad_Requisicion IF diferencia < .05 THEN UPDATE cctb00025 SET estado_despacho = 'DESPACHADA', us_mod = usuarios, fech_mod = getdate() WHERE num_req = pnum_req ELSE UPDATE cctb00025 SET estado_despacho = 'DESPACHO PARCIAL', us_mod = usuarios, fech_mod = getdate() WHERE (num_req = pnum_req) END IF # CIERRE ORDENES LET diferencia = 0 SELECT ISNULL(SUM(cantidad), 0) INTO cantidad_orden FROM prtb00013 a WHERE (a.num_oc = ordenx) SELECT ISNULL(SUM(cantidad_2 * - 1), 0) INTO cantidad_conduce FROM iptb00006 a WHERE (a.num_oc = ordenx) AND (a.cod_mov IN (12, 13, 30, 31, 55)) AND CONVERT(CHAR(10), a.fecha, 101) > "01/01/2007" AND a.status_t IS NULL LET diferencia = cantidad_orden - cantidad_conduce IF diferencia < 0 THEN LET diferencia = diferencia * -1 END IF IF diferencia IS NULL THEN LET diferencia = 0 END IF IF diferencia < .05 THEN IF status_m <> 1 THEN TRY UPDATE prtb00012 SET cerrada = "S", estado_despacho = 'DESPACHADA', us_mod = usuarios, fech_mod = getdate() WHERE num_oc = ordenx # ACTUALIZA EL ESTADO DE LA REQUISICION DESPACHO UPDATE cctb00025 SET estado_despacho = 'DESPACHADA', us_mod = usuarios, fech_mod = getdate() WHERE num_req = pnum_req CATCH # ROLLBACK WORK LET numero_msg = 1663 DISPLAY "ROLLBACK actualizar estado prtb12" CALL msg(numero_msg) NEXT FIELD cod_n END TRY END IF END IF IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN UPDATE cctb00025 SET estado_despacho = 'DESPACHO PARCIAL', us_mod = usuarios, fech_mod = getdate() WHERE num_req = pnum_req AND status_t IS NULL IF cantidad_devuelta > cantidad_orden THEN UPDATE prtb00012 SET estado_devolucion = 'DEVOLUCION COMPLETA', us_mod = usuarios, fech_mod = getdate() WHERE num_oc = otros_mov.conduce_no ELSE UPDATE prtb00012 SET estado_devolucion = 'DEVOLUCION PARCIAL', cerrada = 'N', us_mod = usuarios, fech_mod = getdate() WHERE num_oc = otros_mov.conduce_no END IF END IF SELECT a.descrip_mov INTO pdescripmov FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov #-> Actualiza la tabla de monitoreo de las ordenes de corte vg. Saturday, 03 March, 2001 10:51:42 AM IF otros_mov.conduce_no IS NOT NULL THEN LET prtb09.detalle = pdescripmov CLIPPED, " CON EL NUMERO DE DOCUMENTO: ", otros_mov.num_doc USING "<<<<<<<", " DE FECHA : ", otros_mov.fecha USING "dd/mm/yyyy" INSERT INTO prtb00009 VALUES(ordenx, otros_mov.fecha, NULL, "S", prtb09.detalle, NULL, usuarios, getdate(), NULL, NULL) END IF COMMIT WORK # INSERTA EN LA OTRA DB IF control_devolucion = "SI" THEN CALL insertaData() END IF # PROCEDIMIENTO ENVIO CORREO IF chconduce = 'S' OR pcontrol_departamento = "SI" OR pcontrol_transferencia = "SI" THEN LET TOEmail = NULL IF psec_vend IS NOT NULL THEN SELECT UNIQUE a.email INTO TOEmail FROM seg0000 a WHERE a.sec_vend = psec_vend END IF # INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES LET subject = 'DOCUMENTO ', otros_mov.num_doc USING "&&&&&&&&", " CODIGO MOV ", otros_mov.cod_mov USING "&&&", " ", pdescripmov CLIPPED, "ORDEN: ", ordenx USING "<<<<<<<" IF TOEmail IS NULL THEN LET TOEmail = "notificacion@marmotech.com.do" ELSE LET toemail = toemail CLIPPED END IF DECLARE buscaCorreos CURSOR FOR SELECT DISTINCT a.correo FROM seg0003 a WHERE a.controldespacho = 'SI' LET ccemail = NULL FOREACH buscacorreos INTO PCCEMAIL LET CCEmail = Pccemail CLIPPED, ',', CCEmail END FOREACH # LET toemail = 'jsoto@marmotech.com.do' # LET ccemail = 'jsoto@marmotech.com.do' IF ccemail IS NULL THEN LET ccemail = 'notificacion@marmotech.com.do' END IF IF subject IS NULL THEN LET subject = 'DOCUMENTO ', otros_mov.num_doc USING "&&&&&&&&", " CODIGO MOV ", otros_mov.cod_mov USING "&&&" END IF IF TOemail IS NULL THEN LET TOemail = "notificacion@marmotech.com.do" END IF IF pcontrol_transferencia = 'NO' THEN LET cuerpo_correo = 'CLIENTE: ', otros_mov.descrip4 CLIPPED, ", ", otros_mov.detalle CLIPPED END IF LET cuerpo_correo = cuerpo_correo CLIPPED, "
", movi2[idx].descrip_esp CLIPPED, "", movi2[idx].cantidad_2 USING "##,###.##", "
" DISPLAY "ccmail ", ccemail, " to ", Toemail LET TOemail = toemail CLIPPED, ",", ccemail CLIPPED LET buf = base.StringBuffer.create() CALL buf.append(TOemail) CALL buf.replace(',', ' ', 1) LET TOemail = buf.toString() # CALL envia_correo(TOemail,CCEmail,cuerpo_correo, # subject, procedimiento ) END IF LET opt2 = fgl_winquestion( "IMPRESION", "Desea Imprimir Formulario Ahora?", "YES", "YES|NO", "QUESTION", 0) IF opt2 = "YES" THEN CALL defecto( usuarios, clave, impresor) RETURNING imprime, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, normal, archivo, copia { IF usuarios = 'mabad' THEN IF salida IS NULL THEN LET salida = 'PDF' END IF CALL configureoutput(salida) RETURNING HANDLER START REPORT formu4 TO XML HANDLER HANDLER ELSE } START REPORT formu4 TO archivo -- END IF LET ya = NULL FOR idx = 1 TO arr_count() IF movi2[idx].cod_sec IS NOT NULL THEN OUTPUT TO REPORT formu4( otros_mov.*, movi2[idx].*) END IF END FOR FINISH REPORT formu4 -- IF usuarios <> 'mabad' THEN RUN imprime -- END IF END IF SET CONNECTION "SQL_C" IF ordenx > 0 THEN IF Toemail IS NOT NULL THEN LET xusername = 'notificacion@marmotech.com.do' LET xsmtphost = 'smtp.office365.com' LET xsmtpport = '587' LET xpassword = 'Lmmjvsd2020' IF LENGTH(Toemail) > 2 THEN CALL enviaemail( Toemail, subject, cuerpo_correo, NULL, xusername, xsmtphost, xsmtpport, xpassword) # RETURNING retorne # LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED END IF END IF END IF END IF LET numero_msg = 1 CALL msg(numero_msg) CALL movi2.clear() CALL movi10Dest.clear() CALL despiece.clear() CALL despiecedest.clear() END INPUT ON ACTION recibir ATTRIBUTE(TEXT = "Recepcion Mercancia", IMAGE = "fa-ship") CALL piking(usuarios, clave, impresor, otros_mov.bodega, psucid) ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancel", IMAGE = "quit") LET INT_FLAG = FALSE CALL msg(2) DELETE FROM tmpdesglose_master WHERE num_Doc = tmpnumero AND cod_mov = otros_mov.cod_mov AND us_crea = usuarios DELETE FROM tmpdesglose WHERE num_Doc = tmpnumero AND cod_mov = otros_mov.cod_mov AND us_crea = usuarios EXIT PROGRAM END DIALOG END FUNCTION REPORT formu4(x, z) DEFINE x RECORD num_doc LIKE iptb00006.num_doc, cod_cia LIKE iptb00006.cod_cia, cod_mov LIKE iptb00006.cod_mov, fact_no LIKE iptb00006.fact_no, cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, placa LIKE iptb00006.placa, fecha LIKE iptb00006.fecha, conduce_no LIKE iptb00006.conduce_no, descrip_mov CHAR(80), bodega LIKE iptb00006.bodega, bodega_destino SMALLINT, detalle VARCHAR(100), cod_sp LIKE iptb00006.cod_sp, cod_sp_sec LIKE iptb00006.cod_sp_sec, departamento SMALLINT, nombre_depto CHAR(30), cod_mov1 SMALLINT, entrada INT, descrip_mov1 CHAR(40), descrip4 CHAR(30), factura INT END RECORD DEFINE z RECORD area SMALLINT, descripcion_area VARCHAR(30), cod_n LIKE intb00003.cod_n, cod_grupo LIKE intb00003.cod_grupo, cod_tipo LIKE intb00003.cod_tipo, cod_sec LIKE intb00003.cod_sec, cantidad_1 DEC(12, 5), cantidad_2 DEC(12, 5), cantidad_p DEC(12, 5), unidad_med LIKE iptb00002.unidad_med, descrip_esp CHAR(80), existencia DEC(12, 5), disponible DEC(12, 5), codigo_bloque CHAR(15), id_kit INT END RECORD, etiqueta, ptelefono, ptelefono1, pcelular, nombre, apellido CHAR(30), plado1, plado2, plado3, pcantidad, pmedida DEC(12, 5), pprovincia SMALLINT, nombre_provincia CHAR(30), nombre_p CHAR(70), total_unidades INT, hora CHAR(5), pubica CHAR(60), porden_cliente VARCHAR(25), i INT DEFINE kdatos DYNAMIC ARRAY OF RECORD lado_2 DEC(8, 5), lado_1 DEC(8, 5), lado_3 DEC(8, 5), cantidad FLOAT, cantidad2 FLOAT, tono VARCHAR(100), calidad VARCHAR(100), xobservacion VARCHAR(200), id_producto CHAR(25), seccion INT, tramo INT END RECORD DEFINE usuario_c CHAR(9) DEFINE signo CHAR(1) DEFINE doce, normal, doble, doble_of, negras, negras_off CHAR(2) DEFINE l, cuenta SMALLINT, darea VARCHAR(40) OUTPUT LEFT MARGIN 0 ORDER BY x.num_doc, z.area, z.cod_sec FORMAT BEFORE GROUP OF x.num_doc LET doble = ASCII 14 LET doble_of = ASCII 20 LET negras = ASCII 27, ASCII 69 LET negras_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 SELECT UNIQUE us_crea INTO usuario_c FROM iptb00006 WHERE num_doc = x.num_doc AND cod_mov = x.cod_mov AND us_crea = user LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET hora = TIME PRINT doce #PRINT COLUMN 1, negras,doble,p_companias.nombre CLIPPED IF x.cod_sp <> 19 AND x.cod_sp <> 18 THEN PRINT COLUMN 1, doble, "M A R M O T E C H, S. A.", doble_of END IF PRINT COLUMN 71, "No. ", doble, x.num_doc USING "<<<<<<" #LET l = (80 - LENGTH ("OTROS MOVIMIENTOS")) / 2 PRINT #COLUMN l, "OTROS MOVIMIENTOS", COLUMN 71, x.fecha USING "dd/mm/yyyy" PRINT COLUMN 71, hora LET l = (70 - LENGTH(x.descrip_mov)) / 2 PRINT COLUMN l - 2, doble, negras, "(", x.cod_mov USING "&&", ") ", x.descrip_mov, doble_of PRINT negras_off IF x.cod_mov = 12 THEN PRINT COLUMN 1, "Factura Venta: ", x.factura USING "&&&&&&" END IF IF x.detalle IS NULL THEN LET x.detalle = "**************************************" END IF { COMENTARIO DE ESTAS DIRECCIONES PORQUE SOLO SE VA A TOMAR LA DIRECCION DEL PROYECTO QUE ASU VEZ VIENE EN EL MENSAJE DE LA REQUISICION SELECT a.calle,a.casa_num,a.urbanizacion,b.telefono,b.telex,c.nom1_emp,c.apell1_emp,b.cod_provincia INTO pcalle,pcasa_num,purbanizacion,ptelefono,pcelular,nombre,apellido,pprovincia FROM vetb00005 a,vetb00004 b,vetb00028 d,adtb00003 c WHERE a.tipo_cliente = x.cod_sp AND a.sec_cliente = x.cod_sp_sec AND a.tipo_cliente = d.tipo_cliente AND a.sec_cliente = d.sec_cliente AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND d.sec_vend = c.num_emp SELECT a.nombre_proyecto,a.direccion_proyecto INTO nombre_p,direccion_p FROM vetb00050 a WHERE a.tipo_cliente = x.cod_sp AND a.sec_cliente = x.cod_sp_Sec AND a.cotizacion_no = xcotizacion } LET pcelular = NULL LET ptelefono = NULL LET ptelefono1 = NULL LET nombre_p = NULL LET nombre = NULL SELECT a.nom1_emp + ' ' + a.apell1_emp INTO nombre FROM adtb00003 a WHERE a.num_emp = psec_vend SELECT a.nombre_proyecto, a.telefono_r, a.telefono_o, a.celular1 INTO nombre_p, ptelefono, ptelefono1, pcelular FROM vetb00050 a WHERE a.cotizacion_no = xcotizacion LET nombre_provincia = NULL IF x.cod_mov = 30 OR x.cod_mov = 31 THEN SELECT a.nombre_provincia INTO nombre_provincia FROM vetb00020 a WHERE a.cod_provincia = pprovincia END IF IF x.cod_mov = 55 THEN SELECT UNIQUE a.nom_pais INTO nombre_provincia FROM cotb00018 a WHERE a.cod_pais = pprovincia END IF SELECT a.direccion, a.nombre_file INTO pubica, porden_cliente FROM prtb00012 a WHERE a.num_oc = x.conduce_no AND CONVERT(CHAR(10), a.fech_crea, 103) > "01/01/2007" # SELECT a.observacion INTO pobserva FROM prtb00014 a # WHERE a.num_oc = x.conduce_no AND a.fech_crea > datetime (2007-01-01 08:00) year to minute # BUSCA BODEGAS SELECT a.descripcion INTO almacen_origen FROM intb00009 a WHERE a.cod_bodega = x.bodega SELECT a.descripcion INTO almacen_destino FROM intb00009 a WHERE a.cod_bodega = x.bodega_destino PRINT COLUMN 1, "ALMACEN : ", "(", x.bodega USING "<<<", ")", almacen_origen PRINT COLUMN 1, "ALMACEN DESTINO : ", "(", x.bodega_destino USING "<<<", ")", almacen_destino PRINT COLUMN 1, "CLIENTE : ", negras, x.descrip4, " (", x.cod_sp USING "&&", "-", x.cod_sp_sec USING "&&&&&&", ")", negras_off #PRINT COLUMN 1, "DIRECCION: ",pcalle CLIPPED," ",pcasa_num CLIPPED," ",purbanizacion CLIPPED, # " TELEFONO: ",ptelefono CLIPPED," CELULAR: ",pcelular PRINT COLUMN 1, "Proyecto : ", nombre_p CLIPPED, " DIRECCION: ", direccion_p CLIPPED PRINT COLUMN 1, "TELEFONO1: ", ptelefono CLIPPED, " TELEFONO2 :,", ptelefono1, " CELULAR: ", pcelular PRINT COLUMN 1, "Vendedor : ", nombre CLIPPED, " ", apellido PRINT COLUMN 1, "Entrada : ", x.entrada USING "<<<<<<", " (", x.cod_mov1 USING "<<<", ") ", x.descrip_mov1 CLIPPED PRINT COLUMN 1, "Orden : ", x.conduce_no, COLUMN 20, "ORDEN CLIENTE: ", porden_cliente, " COTIZACION NO: ", xcotizacion USING "&&&&&&" #,"Observacion Orden: ",pobserva CLIPPED PRINT COLUMN 1, "Requisicion: ", pnum_req USING "<<<<<<" #PRINT COLUMN 1, "Ubicacion: ",pubica CLIPPED PRINT COLUMN 1, "Otros Documentos : ", otros_mov.fact_no IF x.departamento IS NOT NULL THEN PRINT COLUMN 1, "DEPARTAMENTO: ", x.departamento USING "<<<<", " ", x.nombre_depto END IF PRINT comp_on PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-------------------------------------------------------------------" PRINT COLUMN 2, doble, "PRODUCTO(S)", doble_of CLIPPED PRINT COLUMN 123, "CANTIDAD" PRINT COLUMN 108, "CANTIDAD", COLUMN 123, "PENDIENTE" PRINT COLUMN 94, "UNIDADES", COLUMN 108, "A DESPACHAR", # COLUMN 123, "CON ESTA TRANSACCION", 2 SPACES, "BLOQUE" PRINT COLUMN 1, "-----------------------------------------------------------------------------", "-------------------------------------------------------------------" SKIP 1 LINES BEFORE GROUP OF z.area SELECT a.nombre_Area INTO darea FROM prtb00016 a WHERE a.area_num = z.area PRINT COLUMN 2, "(" CLIPPED, z.area CLIPPED, ") ", darea CLIPPED ON EVERY ROW IF z.cod_n IS NOT NULL AND z.cod_grupo IS NOT NULL AND z.cod_tipo IS NOT NULL AND z.cod_sec IS NOT NULL THEN PRINT COLUMN 2, z.cod_n USING "&&&&", "-", z.cod_grupo USING "&&&&&", "-", z.cod_tipo USING "&&&&&&&", "-", z.cod_sec USING "&&&&&&&&&&", " ", z.descrip_esp[1, 64], " "; IF cuenta = 1 THEN LET signo = "+" ELSE LET signo = "-" LET z.cantidad_2 = z.cantidad_2 * -1 END IF IF z.cantidad_2 < 0 THEN LET z.cantidad_2 = z.cantidad_2 * -1 END IF PRINT COLUMN 69, z.cantidad_1 USING "###,###.#####", COLUMN 84, z.cantidad_2 USING "###,###.#####", " ", z.unidad_med, COLUMN 105, z.cantidad_p USING "###,###.#####", 2 SPACES, z.codigo_bloque IF z.descrip_esp[65, 80] <> ' ' THEN PRINT COLUMN 22, z.descrip_esp[65, 80] END IF SELECT DISTINCT a.cod_n FROM iptb00025 a, vetb00026 b WHERE # a.area = z.area 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.cod_mov = X.cod_mov AND a.num_Doc = x.num_doc AND a.bodega = x.bodega AND a.id_etiqueta = b.codid IF STATUS <> NOTFOUND THEN PRINT "------------------------------- DESPIECE ----------------------------------------" DECLARE busca_d1 CURSOR FOR SELECT b.descripcion, a.lado_1, a.lado_2, a.lado_3, a.cantidad, a.medida FROM iptb00025 a, vetb00026 b WHERE # a.area = z.area 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.cod_mov = X.cod_mov AND a.num_Doc = x.num_doc AND a.bodega = x.bodega AND a.id_etiqueta = b.codid LET total_unidades = 0 FOREACH busca_d1 INTO etiqueta, plado1, plado2, plado3, pcantidad, pmedida PRINT COLUMN 19, pcantidad USING "<,<<<", " ", etiqueta, " 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 PRINT PRINT "---------------------------------------------------------------------------------" END IF # IMPRESION DESGLOSE SELECT DISTINCT a.num_doc FROM iptb00052 a WHERE a.num_doc = x.num_doc AND a.cod_mov = x.cod_mov IF STATUS <> NOTFOUND THEN PRINT COLUMN 10, "------------------------------------- DESGLOSE -----------------------------------" DECLARE busca_desglose CURSOR FOR SELECT a.lado_1, a.lado_2, a.lado_3, a.cantidad, a.cantidad2, a.tono, a.calidad, b.descripcion, c.descripcion FROM iptb00050 a, intb00010 b, intb00043 c WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.num_doc = x.num_doc AND a.cod_mov = x.cod_mov AND a.cod_seccion = b.cod_seccion AND a.cod_bodega = x.bodega AND a.cod_bodega = b.cod_bodega AND a.cod_seccion = b.cod_seccion AND a.cod_tramo = c.cod_tramo AND b.cod_seccion = c.cod_seccion AND b.cod_bodega = c.cod_bodega LET i = 1 FOREACH busca_desglose INTO kdatos[i].lado_1, kdatos[i].lado_2, kdatos[i].lado_3, kdatos[i].cantidad, kdatos[i].cantidad2, kdatos[i].tono, kdatos[i].calidad PRINT COLUMN 10, kdatos[i].lado_1, 2 SPACES, kdatos[i].lado_2, 2 SPACES, kdatos[i].lado_3, 2 SPACES, kdatos[i].cantidad, 2 SPACES, kdatos[i].cantidad2, 2 SPACES, kdatos[i].tono, 2 SPACES, kdatos[i].calidad LET i = i + 1 END FOREACH PRINT COLUMN 10, "----------------------------------------------------------------------------------" END IF END IF PAGE TRAILER SELECT a.nombre INTO descrip2 FROM vetb00015 a WHERE a.cod_transp = x.cod_transp AND a.sec_transp = x.sec_transp SKIP 1 LINE PRINT COLUMN 1, "OBSERVACIONES: ", UPSHIFT(x.detalle) SKIP 1 LINE PRINT COLUMN 1, "TRANSPORTISTA: ", x.cod_transp USING "<<", "-", x.sec_transp USING "<<<<", " ", descrip2 CLIPPED PRINT COLUMN 1, "PLACA : ", x.placa SKIP 4 LINES PRINT COLUMN 1, "---------------------------", 6 SPACES, "---------------------------", 6 SPACES, "---------------------------" PRINT COLUMN 1, "Entregado Por ", 6 SPACES, "Recibido Por ", 6 SPACES, "Aprobado Por " SKIP 1 LINE PRINT COLUMN 2, "Original: Contabilidad Copia: Vendedor Copia: Ventas Copia: Almacen" PRINT normal END REPORT FUNCTION busca_vend() DEFINE arr_vend ARRAY[200] OF RECORD sec_cliente INTEGER, num_emp INTEGER, nombre CHAR(30) END RECORD OPEN WINDOW busca_1 AT 8, 4 WITH FORM "ipfmwd004" ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) DECLARE busca_1 CURSOR FOR SELECT a.sec_cliente, a.num_emp, b.nombre FROM vetb00033 a, vetb00004 b WHERE a.sec_cliente = b.sec_cliente AND a.status_t IS NULL ORDER BY 1 LET idx = 1 FOREACH busca_1 INTO arr_vend[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY arr_vend TO sc_vend.* LET idx = ARR_CURR() LET busca_v.sec_cliente = arr_vend[idx].sec_cliente LET busca_v.nombre = arr_vend[idx].nombre CLOSE WINDOW busca_1 END FUNCTION FUNCTION busca_prod1() DEFINE arr_prod DYNAMIC ARRAY OF RECORD cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(30), unidad_med CHAR(5) END RECORD OPEN WINDOW busca_2 AT 8, 4 WITH FORM "ipfmwd001" ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) CONSTRUCT criterio ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp FROM cod_n, cod_grupo, cod_tipo, cod_sec, descrip_esp LET selec_pt = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med FROM iptb00002 a ", "WHERE ", criterio CLIPPED, " and a.status_t IS NULL ORDER BY a.descrip_esp " PREPARE comando_p FROM selec_pt DECLARE busca_2 CURSOR FOR comando_p LET idx = 1 FOREACH busca_2 INTO arr_prod[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY arr_prod TO s_prod.* LET idx = ARR_CURR() LET busca_p.cod_n = arr_prod[idx].cod_n LET busca_p.cod_grupo = arr_prod[idx].cod_grupo LET busca_p.cod_tipo = arr_prod[idx].cod_tipo LET busca_p.cod_sec = arr_prod[idx].cod_sec LET busca_p.descrip_esp = arr_prod[idx].descrip_esp LET busca_p.unidad_med = arr_prod[idx].unidad_med # para el precio LET p_vetb25.cod_n = arr_prod[idx].cod_n LET p_vetb25.cod_grupo = arr_prod[idx].cod_grupo LET p_vetb25.cod_tipo = arr_prod[idx].cod_tipo LET p_vetb25.cod_sec = arr_prod[idx].cod_sec LET descrip1 = arr_prod[idx].descrip_esp LET medida = arr_prod[idx].unidad_med CLOSE WINDOW busca_2 END FUNCTION FUNCTION despiece(pcodn, pcodgrupo, pcodtipo, pcodsec, parea) DEFINE cetiqueta VARCHAR(20), total_cantidad FLOAT, i, pcodn, pcodgrupo, pcodtipo, pcodsec, parea INT, xfactor DEC(12, 5) OPEN WINDOW wdespiece AT 5, 3 WITH FORM "ipfmwd010" ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) CALL despieceMem.clear() CALL despiece.clear() LET idx = 0 DISPLAY BY NAME movi2[p_act].descrip_esp, movi2[p_act].unidad_med LET despiece[1].cod_n = pcodn LET despiece[1].cod_grupo = pcodgrupo LET despiece[1].cod_tipo = pcodtipo LET despiece[1].cod_sec = pcodsec #CONTROL EN CASO QUE UN PRODUCTO TENGA EN LA MAESTRA QUE DEBE DESPIEZARSE, EN SU FACTOR DE # CONVERSION ES DIFERENTE A LA UNIDAD. TODO ARTICULO QUE SE DESPIECE DEBE TENER LA UNIDAD EN EL # FACTOR DE CONVERSION SELECT a.factor_conv INTO Xfactor FROM iptb00001 a WHERE a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec IF xfactor <> 1 THEN CALL msg(1021) CLOSE WINDOW wdespiece RETURN END IF CALL loadDespieceMemory( pcodn, pcodgrupo, pcodtipo, pcodsec) RETURNING container IF container.getLength() = 0 THEN CALL loadDespiece( pcodn, pcodgrupo, pcodtipo, pcodsec, parea, otros_mov.entrada, otros_mov.cod_mov1, pcontrol_despacho, ordenx, pnum_req) RETURNING container END IF LET i = container.getLength() IF i > 0 THEN CALL despiece.clear() FOR idx = 1 TO i LET despiece[idx].* = container[idx].* END FOR END IF IF idx > 1 THEN DISPLAY BY NAME total_cantidad CALL set_count(idx - 1) END IF INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.* BEFORE ROW LET curr1 = arr_curr() LET fila = scr_line() CALL cetiquetas() IF curr1 > 1 THEN IF despiece[curr1].id_etiqueta IS NULL THEN LET despiece[curr1].id_etiqueta = despiece[curr1 - 1].id_etiqueta END IF LET despiece[curr1].cod_n = pcodn LET despiece[curr1].cod_grupo = pcodgrupo LET despiece[curr1].cod_tipo = pcodtipo LET despiece[curr1].cod_sec = pcodsec DISPLAY despiece[curr1].cod_n TO sdespiece[fila].cod_n DISPLAY despiece[curr1].cod_grupo TO sdespiece[fila].cod_grupo DISPLAY despiece[curr1].cod_tipo TO sdespiece[fila].cod_tipo DISPLAY despiece[curr1].cod_sec TO sdespiece[fila].cod_sec END IF DISPLAY cetiqueta TO sdespiece[fila].etiqueta DISPLAY pcodn TO sdespiece[fila].cod_n DISPLAY pcodgrupo TO sdespiece[fila].cod_grupo DISPLAY pcodtipo TO sdespiece[fila].cod_tipo DISPLAY pcodsec TO sdespiece[fila].cod_sec AFTER FIELD cantidad LET despiece[curr1].secuencia = arr_curr() IF movi2[p_act].unidad_med = "M2" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2) END IF IF movi2[p_act].unidad_med = "M3" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2 * despiece[curr1].lado_3) END IF IF movi2[p_act].unidad_med = "ML" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * despiece[curr1].lado_1 LET despiece[curr1].lado_2 = 0 END IF IF movi2[p_act].unidad_med = "UD" OR movi2[p_act].unidad_med = "GL" THEN LET despiece[curr1].medida = despiece[curr1].cantidad END IF DISPLAY despiece[curr1].medida TO sdespiece[fila].medida AFTER ROW IF despiece[curr1].medida IS NULL AND despiece[curr1].lado_1 IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD lado_1 END IF IF despiece[curr1].id_etiqueta IS NULL AND despiece[curr1].medida IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD etiqueta END IF LET total_medida = 0 LET total_cantidad = 0 FOR idx = 1 TO despiece.getLength() IF despiece[idx].medida IS NOT NULL THEN LET total_cantidad = total_cantidad + despiece[idx].cantidad LET total_medida = total_medida + despiece[idx].medida END IF END FOR DISPLAY BY NAME total_medida, total_cantidad AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF LET total_medida = 0 LET total_cantidad = 0 FOR idx = 1 TO despiece.getLength() IF despiece[idx].id_etiqueta IS NOT NULL THEN IF movi2[p_act].unidad_med = "M2" THEN LET despiece[idx].medida = despiece[idx].cantidad * (despiece[idx].lado_1 * despiece[idx].lado_2) END IF IF movi2[p_act].unidad_med = "M3" THEN LET despiece[idx].medida = despiece[idx].cantidad * (despiece[idx].lado_1 * despiece[idx].lado_2 * despiece[idx].lado_3) END IF IF movi2[p_act].unidad_med = "ML" THEN LET despiece[idx].medida = despiece[idx].cantidad * despiece[idx].lado_1 LET despiece[idx].lado_2 = 0 END IF IF movi2[p_act].unidad_med = "UD" OR movi2[p_act].unidad_med = "GL" THEN LET despiece[idx].medida = despiece[idx].cantidad END IF DISPLAY despiece[idx].medida TO sdespiece[fila].medida LET total_medida = total_medida + despiece[idx].medida LET total_cantidad = total_cantidad + despiece[idx].cantidad END IF END FOR DISPLAY BY NAME total_medida, total_cantidad FOR i = 1 TO despiece.getLength() LET despiece[i].cod_n = pcodn LET despiece[i].cod_grupo = pcodgrupo LET despiece[i].cod_tipo = pcodtipo LET despiece[i].cod_sec = pcodsec END FOR CALL saveDespieceMemory(pcodn, pcodgrupo, pcodtipo, pcodsec) END INPUT IF int_flag THEN LET int_flag = FALSE CLOSE WINDOW wdespiece RETURN END IF LET total_medida = 0 LET total_cantidad = 0 FOR idx = 1 TO despiece.getLength() IF despiece[idx].medida IS NOT NULL THEN LET total_cantidad = total_cantidad + despiece[idx].cantidad LET total_medida = total_medida + despiece[idx].medida END IF END FOR DISPLAY "EN FUNCION DESPIECE CANTIDAD1: ", total_cantidad DISPLAY "EN FUNCION DESPIECE CANTIDAD2: ", total_medida LET movi2[p_act].cantidad_1 = total_medida LET movi2[p_act].cantidad_2 = total_medida DISPLAY "DESPIECE AL FINAL: ", despiece[1].* CLOSE WINDOW wdespiece END FUNCTION FUNCTION consulta() CONSTRUCT CRITERIO ON a.num_Doc, a.cod_mov, a.fecha, a.conduce_no, a.cod_sp, a.cod_sp_Sec, a.bodega, a.detalle FROM num_doc, cod_mov, fecha, conduce_no, cod_sp, cod_sp_sec, bodega, detalle BEFORE CONSTRUCT CALL cmovimientos() AFTER CONSTRUCT IF INT_FLAG THEN LET INT_FLAG = FALSE RETURN END IF END CONSTRUCT CALL movi2.clear() LET selec = "SELECT DISTINCT a.num_doc, a.cod_cia, a.cod_mov, a.fact_no, a.cod_transp, a.sec_transp, a.cod_tarifa, a.placa, a.fecha, a.conduce_no, a.bodega, a.bodega_d, a.detalle, a.cod_sp, a.cod_sp_sec, a.departamento, d.nom_dpto, c.cod_mov1, c.entrada, ' ' , ' ' ,a.factura, a.num_req, a.sec_vend,a.num_oc,k.descrip_mov FROM iptb00006 AS a LEFT OUTER JOIN adtb00001 AS d ON a.departamento = d.departamento INNER JOIN iptb00005 AS k ON a.cod_mov = k.cod_mov LEFT OUTER JOIN iptb00028 AS c ON a.num_doc = c.num_doc AND a.cod_mov = c.cod_mov LEFT OUTER JOIN iptb00048 AS b ON a.bodega = b.bodega WHERE (b.usuario ='", usuarios CLIPPED, "' ", ") AND (a.status_t IS NULL) AND ", criterio CLIPPED PREPARE comando FROM selec DECLARE busca4 SCROLL CURSOR WITH HOLD FOR comando OPEN busca4 FETCH FIRST busca4 INTO otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend, ordenx, otros_mov.descrip_mov IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL busca_info() DISPLAY BY NAME otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend DISPLAY ordenx TO conduce_no MENU "Busqueda " ON ACTION exportar ATTRIBUTE(TEXT = "Exp PDF") CALL toPDF() COMMAND "Siguiete " "Sieguiente Registro Cumpla Condicion" FETCH NEXT busca4 INTO otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend, ordenx, otros_mov.descrip_mov IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL busca_info() DISPLAY BY NAME otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend DISPLAY ordenx TO conduce_no COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS busca4 INTO otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend, ordenx, otros_mov.descrip_mov IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL busca_info() DISPLAY BY NAME otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend DISPLAY ordenx TO conduce_no COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST busca4 INTO otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend, ordenx, otros_mov.descrip_mov LET numero_msg = 5 CALL msg(numero_msg) CALL busca_info() DISPLAY BY NAME otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, psec_vend DISPLAY ordenx TO conduce_no COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST busca4 INTO otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend, ordenx, otros_mov.descrip_mov LET numero_msg = 4 CALL msg(numero_msg) CALL busca_info() DISPLAY BY NAME otros_mov.num_doc, otros_mov.cod_cia, otros_mov.cod_mov, otros_mov.fact_no, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_tarifa, otros_mov.placa, otros_mov.fecha, otros_mov.conduce_no, otros_mov.bodega, otros_mov.bodega_destino, otros_mov.detalle, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.departamento, otros_mov.nombre_depto, otros_mov.cod_mov1, otros_mov.entrada, otros_mov.descrip_mov1, otros_mov.descrip4, otros_mov.factura, pnum_req, psec_vend DISPLAY ordenx TO conduce_no COMMAND "Items" "Busca Items" DECLARE busca1 CURSOR FROM "SELECT a.area, c.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad_1, a.cantidad_2, '0', b.unidad_med, b.descrip_esp FROM iptb00006 a JOIN iptb00002 b ON 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 LEFT JOIN prtb00016 c ON a.area = c.area_num WHERE a.num_doc = " || otros_mov.num_doc || " AND a.cod_mov = " || otros_mov.cod_mov || " AND a.bodega = " || otros_mov.bodega || " AND a.fech_crea > '2009-01-01 08:00' ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec" {SELECT a.area,c.nombre_area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec, a.cantidad_1,a.cantidad_2,'0',b.unidad_med,b.descrip_esp FROM iptb00006 a,iptb00002 b, prtb00016 c WHERE a.num_doc = otros_mov.num_doc AND a.cod_mov = otros_mov.cod_mov 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.bodega = otros_mov.bodega AND a.fech_crea > '01/01/2009 08:00' AND a.area = c.area_num} LET idx = 1 CALL movi2.clear() FOREACH busca1 INTO movi2[idx].* IF movi2[idx].cantidad_2 < 0 THEN LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1 END IF SELECT SUM(a.cantidad) INTO cantidad_conduce FROM prtb00013 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.num_oc = ordenx AND a.status_t IS NULL LET cantidad_orden = 0 IF otros_mov.cod_mov = 30 AND otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 THEN SELECT SUM(a.cantidad_2 * - 1) INTO cantidad_orden FROM iptb00006 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.conduce_no = otros_mov.conduce_no AND cod_mov IN (30, 31, 55) AND a.status_t IS NULL END IF IF cantidad_orden IS NULL THEN LET cantidad_orden = 0 END IF IF cantidad_conduce IS NULL THEN LET cantidad_conduce = 0 END IF LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden IF movi2[idx].area IS NULL THEN LET movi2[idx].area = 1 END IF LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY movi2 TO s_movi1.* PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2 IF opt2 = "S" OR opt2 = "s" THEN CALL defecto( usuarios, clave, impresor) RETURNING imprime, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, normal, archivo, copia { IF usuarios = 'mabad' THEN IF salida IS NULL THEN LET salida = 'PDF' END IF CALL configureoutput(salida) RETURNING HANDLER START REPORT formu4 TO XML HANDLER HANDLER ELSE } START REPORT formu4 TO archivo -- END IF FOR idx = 1 TO arr_count() IF movi2[idx].cod_sec IS NOT NULL THEN IF movi2[idx].cantidad_2 IS NOT NULL AND movi2[idx].cantidad_2 != 0 THEN OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*) END IF END IF END FOR FINISH REPORT formu4 IF opt2 = "S" OR opt2 = "s" THEN # LET filename = "TYPE ",archivo CLIPPED," > %USPRINT%" # RUN filename -- IF usuarios <> 'mabad' THEN RUN imprime -- END IF END IF END IF CALL movi2.clear() COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM INITIALIZE otros_mov.* TO NULL LET otros_mov.fecha = TODAY EXIT MENU END MENU END FUNCTION FUNCTION busca_info() SELECT nombre INTO descrip2 FROM vetb00015 WHERE cod_transp = otros_mov.cod_transp AND sec_transp = otros_mov.sec_transp AND status_t IS NULL SELECT nombre INTO otros_mov.descrip4 FROM vetb00004 WHERE tipo_cliente = otros_mov.cod_sp AND sec_cliente = otros_mov.cod_sp_sec SELECT a.status_mov, a.control_clientes, a.control_despacho, a.control_devolucion, a.control_transferencia, a.control_departamento INTO status_m, pcontrol_cliente, pcontrol_despacho, control_devolucion, Pcontrol_transferencia, pcontrol_departamento FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t IS NULL SELECT a.descrip_mov INTO otros_mov.descrip_mov1 FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov1 IF pcontrol_transferencia = 'SI' THEN LET k1 = '2' ELSE LET k1 = '1' END IF CALL bodegas(k1) SELECT a.tipo_cliente, a.sec_cliente, a.cerrada, a.cotizacion_no INTO otros_mov.cod_sp, otros_mov.cod_sp_sec, pcerrada, xcotizacion FROM prtb00012 a WHERE a.num_oc = ordenx AND a.status_t IS NULL SELECT a.mensaje INTO direccion_p FROM cctb00029 a WHERE a.num_req = pnum_req DISPLAY BY NAME descrip2, otros_mov.descrip4, otros_mov.descrip_mov1, direccion_p END FUNCTION FUNCTION actualiza_st(forden) DEFINE forden INTEGER, prod_total, vent_total DEC(12, 5), prtb09 RECORD LIKE prtb00009.* SELECT SUM(a.cantidad) INTO prod_total FROM prtb00013 a WHERE a.num_oc = forden IF STATUS = NOTFOUND THEN LET prod_total = 0 END IF LET vent_total = 0 SELECT SUM(b.cantidad_2) INTO vent_total FROM IPTB00006 a WHERE a.conduce_no = forden AND CONVERT(CHAR(10), a.fecha, 101) > "31122006" AND a.cod_sp = otros_mov.cod_sp AND a.sec_cliente = otros_mov.cod_sp_Sec AND a.cod_mov IN (30, 31, 55, 12, 13) AND a.status_t IS NULL IF vent_total IS NULL THEN LET vent_total = 0 END IF #-> Actualiza la fecha de cierre de la orden de corte vg Wednesday, 17 January, 200112:42:33 PM IF vent_total = prod_total THEN UPDATE prtb00012 SET fecha_cierre = otros_mov.fecha, cerrada = "S" WHERE @num_oc = forden AND @tipo_cliente = otros_mov.cod_sp AND @sec_cliente = otros_mov.cod_sp_Sec LET prtb09.num_oc = forden LET prtb09.fecha = otros_mov.fecha LET prtb09.pendiente = "N" LET prtb09.detalle = "CIERRE DE ORDEN DE PRODUCCION SEGUN CONDUCE # ", otros_mov.num_doc USING "<<<<<<<", " DE FECHA : ", otros_mov.fecha USING "dd/mm/yyyy" INSERT INTO prtb00009 VALUES(prtb09.num_oc, prtb09.fecha, NULL, prtb09.pendiente, prtb09.detalle, NULL, USER, getdate(), NULL, NULL) ELSE LET prtb09.num_oc = forden LET prtb09.fecha = otros_mov.fecha LET prtb09.pendiente = "N" LET prtb09.detalle = "DESPACHO ", pdescripmov CLIPPED, " SEGUN CONDUCE # ", otros_mov.num_doc USING "<<<<<<<", " DE FECHA : ", otros_mov.fecha USING "dd/mm/yyyy", " CONTIENE PRODUCTO(S): ", selec_pt CLIPPED INSERT INTO prtb00009 VALUES(prtb09.num_oc, prtb09.fecha, NULL, prtb09.pendiente, prtb09.detalle, NULL, USER, getdate(), NULL, NULL) END IF END FUNCTION FUNCTION visualizacion_despacho() DEFINE arr_autoriza_desp DYNAMIC ARRAY OF RECORD num_oc INT, cliente CHAR(66), fecha CHAR(10), tipo_cliente SMALLINT, sec_cliente INT, num_req INT END RECORD OPEN WINDOW w1 AT 10, 5 WITH FORM "ipfmwd011" DECLARE busca_autoriza CURSOR FOR SELECT DISTINCT a.num_oc, rtrim( CAST(b.tipo_cliente AS CHAR(2)) + '-' + CAST(b.sec_cliente AS CHAR(6)) + ' ' + b.nombre), CAST(d.fecha AS CHAR(10)) AS FECHA, b.tipo_cliente, b.sec_cliente, a.num_req FROM cctb00026 a, vetb00004 b, prtb00012 c, cctb00025 d WHERE c.tipo_cliente = b.tipo_cliente AND c.sec_cliente = b.sec_cliente AND (a.num_oc = c.num_oc) AND # c.tipo_orden = ptipoorden AND (a.cotizacion_no = c.cotizacion_no) AND c.cerrada = 'N' AND A.num_req = d.num_req AND d.estado IN ('AUTORIZADA') AND d.estado_despacho IN ('DESPACHO PARCIAL', 'NO DESPACHADA') AND c.status_t IS NULL AND a.status_t IS NULL ORDER BY fecha LET idx = 1 FOREACH busca_autoriza INTO arr_autoriza_desp[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY arr_autoriza_desp TO s_despachos.* AFTER DISPLAY LET idx = arr_curr() IF Int_flag THEN EXIT DISPLAY END IF END DISPLAY CLOSE WINDOW w1 IF int_flag THEN RETURN 0, 0, 0, 0 ELSE RETURN arr_autoriza_desp[idx].num_oc, arr_autoriza_desp[idx].tipo_cliente, arr_autoriza_desp[idx].sec_cliente, arr_autoriza_desp[idx].num_req END IF END FUNCTION FUNCTION existencia(pcodn, pcodgrupo, pcodtipo, pcodsec, cantidad, pid, xbodega) DEFINE pcodn, pcodgrupo, pcodtipo, pcodsec, pid, xbodega SMALLINT, pexistencia, pexistencia1, cantidad DEC(12, 5), verdad BOOLEAN LET verdad = FALSE SELECT SUM(a.cantidad_2) INTO pexistencia FROM iptb00006 a WHERE (a.cod_n = Pcodn AND a.cod_grupo = Pcodgrupo AND a.cod_tipo = Pcodtipo AND a.cod_sec = Pcodsec) AND (a.bodega = xbodega) AND (a.status_t IS NULL) DISPLAY "existencia ", pexistencia, " c ", cantidad IF pexistencia IS NULL THEN LET pexistencia = 0 END IF IF pexistencia1 IS NULL THEN LET pexistencia1 = 0 END IF LET existenciaact[p_act] = pexistencia # IF pexistencia < 0 THEN # RETURN TRUE,pexistencia # END IF IF cantidad > pexistencia THEN RETURN TRUE, pexistencia END IF RETURN verdad, pexistencia END FUNCTION FUNCTION cetiquetas() DEFINE ketiquetas SMALLINT, detiquetas CHAR(30) LET petiquetas = ui.combobox.forname("formonly.etiqueta") DECLARE betiquetas CURSOR FOR SELECT a.codid, a.descripcion FROM vetb00026 a ORDER BY a.descripcion CALL petiquetas.clear() FOREACH betiquetas INTO ketiquetas, detiquetas CALL petiquetas.additem(ketiquetas, detiquetas) END FOREACH END FUNCTION FUNCTION control_requisicion( cantidad_Trx, xcodn, xcodgrupo, xcodtipo, xcodsec, xkit, fconv, xarea) DEFINE cantidad_Trx, fconv DEC(12, 5), totalcantidad DEC(12, 5), xcodn, xcodgrupo, xcodtipo, xcodsec, xarea SMALLINT, xkit INT # DISPLAY "otra data: ",pnum_req," ",xcodn," ",xcodsec SELECT ISNULL(SUM(a.cantidad), 0) INTO cantidadRequisicion FROM cctb00026 a WHERE a.cod_n = xcodn AND a.cod_grupo = xcodgrupo AND a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec AND # a.area = xarea AND a.num_req = pnum_req AND a.status_t IS NULL SELECT ISNULL(SUM(a.cantidad_2), 0) INTO Rcantidad_requisicion FROM iptb00006 a WHERE a.cod_n = xcodn AND a.cod_grupo = xcodgrupo AND a.cod_tipo = xcodtipo AND a.cod_sec = xcodsec AND # a.area = xarea AND a.cod_mov IN (30, 31, 55, 12, 13) AND (a.num_req = pnum_req) AND a.status_t IS NULL IF rcantidad_requisicion < 0 THEN LET rcantidad_requisicion = rcantidad_requisicion * -1 END IF DISPLAY "cantidad req ", cantidadRequisicion, " cantidad trx ", Rcantidad_requisicion, " CANTIDAD TRX ", cantidad_Trx # IF fconv > 1 THEN # LET cantidadRequisicion = cantidadRequisicion + .03 # END IF LET totalcantidad = Rcantidad_requisicion + cantidad_Trx DISPLAY totalcantidad DISPLAY cantidadRequisicion IF xcodn IS NOT NULL THEN DISPLAY "TOTALES: ", totalcantidad, " req ", cantidadRequisicion IF totalcantidad > cantidadRequisicion THEN # INSERT EN ESTE LOG PARA MONITOREAR CUALES SON LOS VALORES INSERT INTO iptb00006_log( num_req, fechatrx, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad_1, cantidad_2, num_oc, cotizacion_no, us_crea, cod_mov, totalCantidadControl, totalCantidadReq, totalCantidadReqInv, retornado) VALUES(pnum_req, getdate(), xarea, xcodn, xcodgrupo, xcodtipo, xcodsec, cantidad_Trx, cantidad_Trx, ordenx, xcotizacion, usuarios, otros_mov.cod_mov, totalcantidad, cantidadRequisicion, Rcantidad_requisicion, 'FALSO') RETURN FALSE ELSE INSERT INTO iptb00006_log( num_req, fechatrx, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad_1, cantidad_2, num_oc, cotizacion_no, us_crea, cod_mov, totalCantidadControl, totalCantidadReq, totalCantidadReqInv, retornado) VALUES(pnum_req, getdate(), xarea, xcodn, xcodgrupo, xcodtipo, xcodsec, cantidad_Trx, cantidad_Trx, ordenx, xcotizacion, usuarios, otros_mov.cod_mov, totalcantidad, cantidadRequisicion, Rcantidad_requisicion, 'VERDADERO') RETURN TRUE END IF END IF END FUNCTION FUNCTION insertaData() DEFINE emp, codi_cia SMALLINT DEFINE nom_cli, nombre_emp CHAR(30) LET arr_recibo.cod_mov = otros_mov.cod_mov LET recibo.fecha_orig = fecha1 # Control Secuencial de las notas de creditos LET recibo.fecha_orig = otros_mov.fecha LET recibo.tipo_cliente = otros_mov.cod_sp LET recibo.sec_cliente = otros_mov.cod_sp_sec LET recibo.itbi = 0 LET fact_gral.bodega = otros_mov.bodega LET reimpresion = "N" LET fecha1 = recibo.fecha_orig # Busca el codigo del cliente y chequea que el documento de almacen exista LET recibo.tipo_cliente = otros_mov.cod_sp LET recibo.sec_cliente = otros_mov.cod_sp_sec LET codi_cia = otros_mov.cod_cia LET fact_gral.factura = otros_mov.factura SET CONNECTION "SQL_C" SELECT b.nombre, a.calle || ' ' || a.casa_num || ' ' || a.urbanizacion || ' ' || a.barrio, c.ventas INTO nom_cli, fact_gral.direccion, fact_gral.ventas FROM vetb00004 b, vetb00060 c, OUTER vetb00005 a WHERE (b.tipo_cliente = recibo.tipo_cliente) AND (b.sec_cliente = recibo.sec_cliente) AND b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente AND b.tipo_cliente = c.tipo_cliente IF STATUS = NOTFOUND THEN LET nom_cli = "NO E X I S T E" END IF LET descrip2 = NULL LET descrip3 = NULL SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = psec_vend --DISPLAY "descrip2 ",descrip2,"descrip3 ",descrip3 IF status = NOTFOUND THEN LET nombre_emp = "NO E X I S T E" ELSE LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED END IF --DISPLAY nombre_emp LET busca1 = "S" SELECT SUM(a.cantidad_2 * b.precio) INTO valor_fac FROM iptb00006 a, vetb00003 b WHERE (a.num_doc = otros_mov.num_doc) 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_mov = otros_mov.cod_mov) AND (b.factura = otros_mov.factura) AND a.area = b.area AND (a.bodega = otros_mov.bodega) --DISPLAY "valor_fac 1",valor_fac LET arr_recibo.valor_pen = valor_fac { SE ESTA FORZANDO A QUE DEBE TENER UNA FACTURA UNA DEVOLUCION 13/3/2024 IF valor_fac IS NULL THEN --DISPLAY "ESTA NULO " LET busca2 = "S" LET busca1 = "N" SELECT SUM(a.cantidad_2*b.precio) INTO valor_fac FROM iptb00006 a,vetb00025 b WHERE (a.num_doc = otros_mov.num_doc) 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_mov = otros_mov.cod_mov) AND a.bodega = otros_mov.bodega AND b.ventas = "1" AND b.tipo_cliente IS NULL END IF} LET arr_recibo.valor_pen = valor_fac LET pdescuento = 0 # BUSCA EL DESCUENTO SELECT SUM(a.cantidad_2 * b.precio * (b.cantidad_2 / 100)), AVG(b.cantidad_2) INTO pdescuento, xporc_desc FROM iptb00006 a, vetb00003 b WHERE (a.num_doc = otros_mov.num_doc) 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_mov = otros_mov.cod_mov) AND (b.factura = fact_gral.factura) AND a.area = b.area AND a.bodega = otros_mov.bodega IF pdescuento IS NULL THEN LET pdescuento = 0 END IF LET arr_recibo.val_desc = pdescuento LET arr_recibo.desc_p = xporc_Desc # El campo VALOR_PEN gruarda el valor bruto de la nota de credito obtenida # por la multiplicacion de las cantidades devueltas por el movimiento 12 # por el precio actual del producto # LET arr_recibo[curr].val_desc = arr_recibo[curr].valor_pen * (arr_recibo[curr].desc_p / 100) # Calcula el itbi despues de restar el descuento al monto bruto # BUSCA PORCENTAJE ITBIS FACTURA LET pitbis = 0 LET p_itbi = 0 DISPLAY fact_gral.factura SELECT a.porc_itbi, a.fecha_factura INTO pitbis, fact_gral.fecha_despacho FROM vetb00002 a WHERE a.factura = fact_gral.factura IF STATUS = NOTFOUND THEN DISPLAY "NO LA ENCONTRE" ELSE DISPLAY "LA ENCONTRE" END IF LET dias_factura = TODAY - fact_gral.fecha_despacho {DISPLAY "fact_gral.fecha_despacho ", fact_gral.fecha_despacho DISPLAY "chitbis", chitbis} DISPLAY "dias factura ", dias_factura, " fecha: ", fact_gral.fecha_despacho IF dias_factura <= 30 THEN LET chitbis = "S" LET p_itbi = (arr_recibo.valor_pen - arr_recibo.val_desc) * (pitbis / 100) LET recibo.itbi = recibo.itbi + p_itbi DISPLAY "MENOS DE 30 ", recibo.itbi ELSE LET chitbis = "N" LET recibo.itbi = 0 DISPLAY "MAS DE 30 ", recibo.itbi END IF LET chitbis = UPSHIFT(chitbis) LET arr_recibo.valor_pag = (arr_recibo.valor_pen - arr_recibo.val_desc) + p_itbi LET p_total = arr_recibo.valor_pag LET via = "S" SELECT b.nombre, a.calle || ' ' || a.casa_num || ' ' || a.urbanizacion || ' ' || a.barrio INTO nom_cli, fact_gral.direccion FROM vetb00004 b, vetb00005 a WHERE (b.tipo_cliente = otros_mov.cod_sp) AND (b.sec_cliente = otros_mov.cod_sp_sec) AND b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente IF fact_gral.direccion IS NULL THEN LET fact_gral.direccion = 'NO ESPECIFICADA' END IF LET descrip2 = NULL LET descrip3 = NULL SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = psec_vend IF STATUS = NOTFOUND THEN LET nombre_emp = "NO E X I S T E" ELSE LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED END IF #SECUENCIA RECIBO SELECT ult_recibo INTO p_num_doc FROM cctb00003 WHERE tipo_doc = "NC" LET p_num_doc = p_num_doc + 1 LET recibo.num_doc = p_num_doc LET recibo.cod_emp_sec = psec_vend IF otros_mov.num_doc IS NOT NULL THEN LET arr_recibo.aplica_a = otros_mov.num_doc LET impresor = 47 CALL defecto( usuarios, clave, impresor) RETURNING imprime, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, normal, archivo, copia START REPORT cr_edito TO archivo IF arr_recibo.aplica_a IS NOT NULL THEN INSERT INTO tmpnotascr( num_doc, fecha, tipo_cliente, sec_cliente, cod_mov, factura, num_doc_nc, itbis, us_crea, fech_crea) VALUES(arr_recibo.aplica_a, otros_mov.fecha, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.cod_mov, otros_mov.factura, recibo.num_doc, recibo.itbi, usuarios, getdate()) OUTPUT TO REPORT cr_edito( recibo.*, arr_recibo.*, nom_cli, descrip2, descrip3, codi_cia) END IF FINISH REPORT cr_edito RUN imprime # IMPRESION EXTERIOR #-------------------------------------------------------------------------------------------------------- ######### ADICION A SQL_E CUANDO ES DEVOLUCION MERCANCIA SET CONNECTION "SQL_E" LET xnum_doc_c = otros_mov.num_doc SELECT a.num_doc INTO tmpnumero FROM iptb00007 a WHERE a.cod_mov = otros_mov.cod_mov #AND # a.bodega = otros_mov.bodega IF tmpnumero IS NULL THEN INSERT INTO iptb00007( num_doc, cod_mov, bodega) VALUES(1, otros_mov.cod_mov, otros_mov.bodega) ELSE LET num_doc_e = tmpnumero + 1 END IF LET factura_e = NULL FOR idx = 1 TO movi2.getLength() IF movi2[idx].cod_n IS NOT NULL THEN SELECT MAX( a .factura) #,MAX(a.sucid),MAX(a.hash),MAX(fechafirmadigital) INTO factura_e, psucid, xhas, xfechaFirmaDigital FROM vetb00002 a, vetb00003 b WHERE a.factura_c = otros_mov.factura AND a.factura = b.factura AND (b.cod_n = movi2[idx].cod_n AND b.cod_grupo = movi2[idx].cod_grupo AND b.cod_tipo = movi2[idx].cod_tipo AND b.cod_sec = movi2[idx].cod_sec) AND a.status_t IS NULL DISPLAY "FACTURA: ", factura_e IF factura_e IS NOT NULL THEN INITIALIZE out_result TO NULL INSERT INTO iptb00006( cod_cia, num_doc, fact_no, fecha, cod_transp, sec_transp, cod_sp, cod_sp_sec, placa, cod_tarifa, cod_mov, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad_1, cantidad_2, bodega, us_crea, fech_crea, num_oc, cotizacion_no, num_doc_c, conduce_no, detalle, num_req, sec_vend, idtipo) VALUES(otros_mov.cod_cia, num_doc_e, factura_e, otros_mov.fecha, otros_mov.cod_transp, otros_mov.sec_transp, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.placa, otros_mov.cod_tarifa, otros_mov.cod_mov, movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, '1', usuarios, getdate(), ordenx, xcotizacion, xnum_doc_c, otros_mov.conduce_no, otros_mov.detalle, pnum_req, psec_vend, idtipo) END IF END IF END FOR UPDATE iptb00007 SET num_doc = num_doc_e WHERE cod_mov = otros_mov.cod_mov END IF #-------------------------------------------------------------------------------------------------------- LET impresor1 = 45 CALL defecto( usuarios, clave, impresor1) RETURNING imprime, negrilla_on, negrillas_of, doble_on, doble_off, comp_on, comp_off, doce, normal, archivo, copia SELECT * INTO p_companias.* FROM companias SELECT a.factura, b.sucnombre, a.sucid INTO fact_gral.factura, nombre_sucursal, psucid FROM vetb00002 a, sucursales b WHERE a.factura_c = otros_mov.factura AND a.sucid = b.sucid AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN DISPLAY "dato e: ", recibo.num_doc IF num_doc_e > 0 THEN LET num_cr_e = recibo.num_doc SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_Doc = 'NC' IF p_num_doc IS NULL THEN INSERT INTO cctb00003(ult_recibo, tipo_doc) VALUES(1, 'NC') LET p_num_doc = 1 END IF LET recibo.num_doc = p_num_doc + 1 START REPORT cr_edito1 TO archivo LET arr_recibo.aplica_a = num_doc_e IF arr_recibo.aplica_a IS NOT NULL THEN INSERT INTO tmpnotascr( num_doc, fecha, tipo_cliente, sec_cliente, cod_mov, factura, num_doc_nc, itbis, us_crea, fech_crea) VALUES(arr_recibo.aplica_a, otros_mov.fecha, otros_mov.cod_sp, otros_mov.cod_sp_sec, otros_mov.cod_mov, otros_mov.factura, recibo.num_doc, recibo.itbi, usuarios, getdate()) OUTPUT TO REPORT cr_edito1( recibo.*, arr_recibo.*, nom_cli, descrip2, descrip3, codi_cia) END IF FINISH REPORT cr_edito1 RUN imprime { # PARA LA NC ELECTRONICA LET factura.fecha_factura = otros_mov.fecha LET factura.nombre = nom_cli LET r_filename = "veprmt022.4rp" iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET r_output="PDF" LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE RETURN END IF START REPORT cr_edito1_encf TO XML HANDLER HANDLER OUTPUT TO REPORT cr_edito1_encf (recibo.*,arr_recibo.*,nom_cli, descrip2,descrip3,codi_cia) FINISH REPORT cr_edito1_encf} END IF END IF SET CONNECTION "SQL_C" LET emp = psec_vend END FUNCTION REPORT cr_edito(x, z, nombre_cli, nombre, apellido, cia) DEFINE x RECORD num_doc LIKE cctb00001.num_doc, tipo_cliente LIKE cctb00001.tipo_cliente, sec_cliente LIKE cctb00001.sec_cliente, cod_emp_sec LIKE cctb00001.cod_emp_sec, fecha_orig LIKE cctb00001.fecha_orig, itbi DECIMAL(12, 2), concepto CHAR(60) END RECORD DEFINE z RECORD cod_mov LIKE iptb00006.cod_mov, aplica_a LIKE cctb00001.aplica_a, valor_pen DECIMAL(12, 2), desc_p LIKE cctb00001.monto_desc, valor_desc DECIMAL(12, 2), valor_pag DECIMAL(12, 2) END RECORD DEFINE cia SMALLINT DEFINE total_nc, total_bruto, total_desc, itbis DECIMAL(12, 2) DEFINE nombre_cli, nombre, apellido CHAR(30) DEFINE comp_on, comp_off, negrillas_on, negrillas_off, doble_on, doble_off, doce, normal CHAR(2) DEFINE reg_i RECORD area SMALLINT, cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(100), cantidad DEC(18, 5), precio DECIMAL(12, 2), descuento DEC(12, 2) END RECORD, lj, j, i, h SMALLINT, factura_ncf INT, xtipo_doc CHAR(2) OUTPUT TOP MARGIN 0 LEFT MARGIN 4 # PAGE LENGTH 33 ORDER BY x.num_doc FORMAT BEFORE GROUP OF x.num_doc LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET comp_off = ASCII 18 LET comp_on = ASCII 15 LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2 LET j = (90 - LENGTH(p_companias.direccion CLIPPED)) / 2 LET i = (90 - LENGTH(p_companias.telefono CLIPPED)) / 2 LET h = (90 - LENGTH(p_companias.rnc CLIPPED)) / 2 PRINT comp_on PRINT COLUMN lj, normal, doble_on, p_companias.nombre CLIPPED PRINT COLUMN j + 3, p_companias.direccion PRINT COLUMN i - 9, "Tels : ", p_companias.telefono, " Fax : ", p_companias.fax PRINT COLUMN h - 1, "RNC : ", p_companias.rnc CLIPPED, COLUMN 100, "Pag. ", PAGENO USING "###" PRINT COLUMN h, "NOTAS DE CREDITOS" IF reimpresion = "S" THEN PRINT COLUMN i, "RE-IMPRESION" ELSE PRINT " " END IF PRINT negrillas_on LET total_bruto = 0 LET total_Desc = 0 # DESCRIPCION BODEGA SELECT a.descripcion INTO xbodega FROM intb00009 a WHERE a.cod_bodega = fact_gral.bodega PRINT COLUMN 1, "Numero : ", doble_on, x.num_doc USING "&&&&&&", doble_off, negrillas_off PRINT COLUMN 1, "CLiente : ", x.tipo_cliente USING "&&", "-", x.sec_cliente USING "&&&&&&&&", " ", nombre_cli PRINT COLUMN 1, "Direccion: ", fact_gral.direccion PRINT COLUMN 1, "Vendedor : ", x.cod_emp_sec USING "&&&&", " ", nombre CLIPPED, ",", apellido PRINT COLUMN 1, "Fecha : ", x.fecha_orig USING "dd/mm/yy", negrillas_on PRINT COLUMN 1, "Doc. Dev : ", z.aplica_a USING "&&&&&&", " Factura : ", fact_gral.factura USING "&&&&&&" PRINT COLUMN 1, "Bodega : ", "(", fact_gral.bodega USING "<<<", ")", xbodega PRINT COLUMN 1, "Concepto : ", x.concepto CLIPPED PRINT COLUMN 1, "-----------------------------------------------------------", "------------------------------------------" PRINT COLUMN 1, "Producto", COLUMN 53, "Cantidad", COLUMN 64, "Precio", COLUMN 74, "%Desc", COLUMN 86, "Valor Desc", COLUMN 97, "Total" PRINT COLUMN 1, "-----------------------------------------------------------", "------------------------------------------" PRINT COLUMN 1, negrillas_off AFTER GROUP OF x.num_doc IF busca1 = "S" THEN # DISPLAY "bodega ",fact_gral.bodega," COD_MOV ",z.cod_mov," aplica ",z.aplica_a DECLARE venta1 CURSOR FOR SELECT DISTINCT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, SUM(a.cantidad_2), c.precio, AVG(c.cantidad_2) FROM iptb00006 a, iptb00002 b, vetb00003 c WHERE 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 = c.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND a.factura = c.factura AND a.cod_mov = z.cod_mov AND a.num_doc = z.aplica_a AND a.area = c.area AND a.bodega = fact_gral.bodega GROUP BY a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, c.precio ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec END IF IF busca2 = "S" THEN DECLARE venta2 CURSOR FOR SELECT DISTINCT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.descrip_esp, SUM(a.cantidad_2), b.precio, '0' FROM iptb00006 a, vetb00025 b, iptb00002 c WHERE (a.num_doc = z.aplica_a) 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 = c.cod_n) AND (a.cod_grupo = c.cod_grupo) AND (a.cod_tipo = c.cod_tipo) AND (a.cod_sec = c.cod_sec) AND (a.cod_mov = z.cod_mov) AND a.bodega = fact_gral.bodega AND b.ventas = "1" AND b.tipo_cliente IS NULL GROUP BY a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.precio, c.descrip_esp END IF LET total_bruto = 0 LET salir = "N" IF busca1 = "S" THEN FOREACH venta1 INTO reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc PRINT COLUMN 1, reg_i.area, " ", reg_i.cod_n USING "&&&&", '-', reg_i.cod_grupo USING "&&&&", "-", reg_i.cod_tipo USING "&&&", "-", reg_i.cod_sec USING "&&&&", " ", reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45, COLUMN 40, reg_i.cantidad USING "###,###.#####", 2 SPACES, reg_i.precio USING "##,###.##", 2 SPACES, reg_i.descuento USING "##,###.##", 2 SPACES, pdescuento USING "###,###.##", COLUMN 88, reg_i.cantidad * reg_i.precio USING "###,###,###.##" # IF reimpresion = "N" THEN INSERT INTO cctb00004( tipo_Doc, num_Doc, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, descuento, cod_mov, num_doc_almacen, bodega, porc_Desc) VALUES('NC', x.num_doc, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.cantidad, reg_i.precio, pdescuento, z.cod_mov, z.aplica_a, fact_gral.bodega, reg_i.descuento) # END IF END FOREACH END IF IF busca2 = "S" THEN FOREACH venta2 INTO reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc #LET reg_i.descuento = pdescuento IF reimpresion = "N" THEN LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) ELSE LET total_bruto = ptotalb END IF PRINT COLUMN 1, reg_i.cod_n USING "&&&&", '-', reg_i.cod_grupo USING "&&&&", "-", reg_i.cod_tipo USING "&&&&", "-", reg_i.cod_sec USING "&&&&", " ", reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45, COLUMN 40, reg_i.cantidad USING "###,###.####", 2 SPACES, reg_i.precio USING "##,###.##", 2 SPACES, reg_i.descuento USING "##,###.##", 2 SPACES, pdescuento USING "###,###.##", COLUMN 88, (reg_i.cantidad * reg_i.precio) - pdescuento USING "###,###,###.##" # IF reimpresion = "N" THEN INSERT INTO cctb00004( tipo_Doc, num_Doc, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, descuento, cod_mov, num_doc_almacen, bodega, porc_Desc) VALUES('NC', x.num_doc, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.cantidad, reg_i.precio, pdescuento, z.cod_mov, z.aplica_a, fact_gral.bodega, reg_i.descuento) # END IF END FOREACH END IF IF reimpresion = "S" THEN DECLARE busca_codigos CURSOR FOR SELECT a.cod_n, a.cod_Grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, a.cantidad, a.precio, a.porc_desc FROM cctb00004 a, iptb00002 b WHERE a.tipo_doc = 'NC' AND a.num_doc = x.num_doc 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 total_Desc = 0 LET total_bruto = 0 FOREACH busca_codigos INTO reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) PRINT COLUMN 1, reg_i.cod_n USING "&&&&", '-', reg_i.cod_grupo USING "&&&&", "-", reg_i.cod_tipo USING "&&&&", "-", reg_i.cod_sec USING "&&&&", " ", reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45, COLUMN 40, reg_i.cantidad USING "###,###.####", 2 SPACES, reg_i.precio USING "##,###.##", 2 SPACES, pdescuento USING "##,###.##", COLUMN 88, (reg_i.cantidad * reg_i.precio) - pdescuento USING "###,###,###.##" END FOREACH END IF IF z.valor_desc IS NULL THEN LET z.valor_desc = 0 END IF IF pitbis IS NULL THEN LET pitbis = 0 END IF IF x.itbi IS NULL THEN LET x.itbi = 0 END IF DISPLAY "1", x.itbi IF reimpresion = "N" THEN IF chitbis = "S" THEN LET x.itbi = (total_bruto - total_desc) * (pitbis / 100) DISPLAY "2", x.itbi ELSE LET x.itbi = 0 DISPLAY "3", x.itbi END IF END IF PRINT COLUMN 88, "--------------" PRINT COLUMN 60, " BRUTO : ", COLUMN 88, total_bruto USING "###,###,###.##" PRINT COLUMN 60, " DESC : ", COLUMN 88, total_Desc USING "---,---,###.##" PRINT COLUMN 60, "SUB-TOTAL : ", COLUMN 88, (total_bruto - total_desc) USING "---,---,###.##" PRINT COLUMN 60, " ITBIS : ", pitbis USING "<<<.##", "% : ", COLUMN 88, x.itbi USING "---,---,###.##" PRINT COLUMN 60, " NETO : ", COLUMN 88, total_bruto - total_desc + x.itbi USING "---,---,###.##" LET total_nc = (total_bruto + x.itbi) IF z.valor_desc IS NULL THEN LET z.valor_desc = 0 END IF IF x.itbi IS NULL THEN LET x.itbi = 0 DISPLAY "4", x.itbi END IF { ACTUALIZACION DE LA TABLA DE CUENTAS POR COBRAR =============================================== VALOR NETO (total_nc) SE GUARDA EN EL CAMPO: valor, ITBI (x.itbi) SE GUARDA EN EL CAMPO: valor_efectivo, EL VALOR BRUTO (total_bruto) SE GUARDA EN EN CAMPO: valor_cheque, MONTO DE DESCUENTO(total_desc) EN EL CAMPO: monto_desc EL CAMPO NUM_CHEQUE SE UTILIZA PARA EL NUMERO DE DOCUMENTOS DE INVENTARIO DEL MOVIMIENTO 12 DE PRODUCTO TERMINADOS} IF reimpresion = "N" THEN IF chitbis = 'YES' THEN LET chitbis = 'SI' ELSE LET chitbis = 'NO' END IF SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_Doc = 'NC' IF p_num_doc IS NULL THEN INSERT INTO cctb00003(ult_recibo, tipo_doc) VALUES(1, 'NC') LET p_num_doc = 1 END IF LET x.num_doc = p_num_doc + 1 { INSERT INTO cctb00011 (num_doc,tipo_doc,tipo_cliente,sec_cliente,comentario,chitbis,bodega,porc_itbis,valor_recibo,descuento, monto_itbis,valor_bruto,sucid) VALUES (x.num_doc,"NC",x.tipo_cliente,x.sec_cliente,otros_mov.detalle,chitbis,fact_gral.bodega,pitbis,total_nc, total_desc,x.itbi,total_bruto,psucid) } INSERT INTO cctb00011( num_doc, tipo_doc, tipo_cliente, sec_cliente, comentario, chitbis, bodega, porc_itbis) VALUES(x.num_doc, "NC", x.tipo_cliente, x.sec_cliente, otros_mov.detalle, chitbis, fact_gral.bodega, pitbis) INSERT INTO log_devoluciones( num_doc, cod_mov, fecha, tipo_cliente, sec_cliente, num_oc, cotizacion_no, factura, observacion, fecha_trx) VALUES(x.num_doc, 'NC', otros_mov.fecha, x.tipo_cliente, x.sec_cliente, ordenx, xcotizacion, otros_mov.factura, 'INSERTE EN LA TABLA CCTB00011', getdate()) LET total_nc = total_nc * -1 LET total_bruto = total_bruto * -1 IF fact_gral.ventas = '1' THEN LET xtipo_doc = 'FT' ELSE LET xtipo_Doc = 'FE' END IF IF total_nc > 0 THEN LET total_nc = total_nc * -1 END IF INSERT INTO cctb00001( cod_cia, tipo_doc, num_doc, tipo_cliente, sec_cliente, cod_emp_sec, fecha_orig, aplica_a, banco, num_cheque, valor, valor_efectivo, valor_cheque, monto_desc, us_crea, fech_crea, bodega, tipo_doc_aplica, cod_emp, num_oc, documento_ref) VALUES(cia, "NC", x.num_doc, x.tipo_cliente, x.sec_cliente, x.cod_emp_sec, x.fecha_orig, fact_gral.factura, z.cod_mov, z.aplica_a, total_nc, x.itbi, total_bruto, total_desc, usuarios, GETDATE(), fact_gral.bodega, xtipo_doc, psucid, ordenx, xcotizacion) INSERT INTO log_devoluciones( num_doc, cod_mov, fecha, tipo_cliente, sec_cliente, num_oc, cotizacion_no, factura, observacion, fecha_trx) VALUES(x.num_doc, 'NC', otros_mov.fecha, x.tipo_cliente, x.sec_cliente, ordenx, xcotizacion, fact_gral.factura, 'INSERTE EN LA TABLA CCTB00001', getdate()) UPDATE cctb00003 SET ult_recibo = x.num_doc WHERE tipo_Doc = 'NC' END IF PRINT normal PAGE TRAILER SKIP 1 LINE PRINT COLUMN 6, " Preparado Por", COLUMN 40, " Autorizado Por" PRINT " " PRINT COLUMN 6, "---------------------------", COLUMN 36, "---------------------------" ON LAST ROW IF reimpresion = "N" THEN UPDATE cctb00003 SET ult_recibo = x.num_doc, us_crea = SUSER_SNAME(), fech_crea = GETDATE(), us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE tipo_doc IN ("NC") END IF END REPORT REPORT cr_edito1(x, z, nombre_cli, nombre, apellido, cia) DEFINE x RECORD num_doc LIKE cctb00001.num_doc, tipo_cliente LIKE cctb00001.tipo_cliente, sec_cliente LIKE cctb00001.sec_cliente, cod_emp_sec LIKE cctb00001.cod_emp_sec, fecha_orig LIKE cctb00001.fecha_orig, itbi DECIMAL(12, 2), concepto CHAR(60) END RECORD DEFINE z RECORD cod_mov LIKE iptb00006.cod_mov, aplica_a LIKE cctb00001.aplica_a, valor_pen DECIMAL(12, 2), desc_p LIKE cctb00001.monto_desc, valor_desc DECIMAL(12, 2), valor_pag DECIMAL(12, 2) END RECORD DEFINE cia SMALLINT DEFINE total_nc, total_bruto, sub_total, total_desc, itbis DECIMAL(12, 2) DEFINE nombre_cli, nombre, apellido CHAR(30) DEFINE comp_on, comp_off, negrillas_on, negrillas_off, doble_on, doble_off, doce, normal CHAR(2) DEFINE reg_i RECORD area SMALLINT, cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(100), cantidad DEC(18, 5), precio DECIMAL(12, 2), descuento DEC(12, 2) END RECORD, lj, j, i, h SMALLINT, idxecf, id_tipoProducto INT, xtipo_doc CHAR(2), xhash VARCHAR(10), respuesta, xfechaFirma, xrespuesta, codigo STRING, xfecha_modificada DATE, ptasa DEC(12, 2), montoFactura DEC(18, 2) DEFINE p RECORD trackId STRING, codigo INT, estado, rnc, encf, secuenciaUtilizada, fechaRecepcion STRING, mensajes DYNAMIC ARRAY OF RECORD valor STRING, codigo INT END RECORD END RECORD DEFINE p1 RECORD trackId, ERROR, mensaje STRING END RECORD OUTPUT TOP MARGIN 0 LEFT MARGIN 4 # PAGE LENGTH 33 ORDER BY x.num_doc FORMAT #marmotech tienda, santiago_ #baja y alta resolucion BEFORE GROUP OF x.num_doc LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET comp_off = ASCII 18 LET comp_on = ASCII 15 LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2 LET j = (90 - LENGTH(p_companias.direccion CLIPPED)) / 2 LET i = (90 - LENGTH(p_companias.telefono CLIPPED)) / 2 LET h = (90 - LENGTH(p_companias.rnc CLIPPED)) / 2 PRINT comp_on PRINT COLUMN lj, normal, doble_on, p_companias.nombre CLIPPED PRINT COLUMN j + 3, p_companias.direccion PRINT COLUMN i - 9, "Tels : ", p_companias.telefono, " Fax : ", p_companias.fax PRINT COLUMN h - 1, "RNC : ", p_companias.rnc CLIPPED, COLUMN 100, "Pag. ", PAGENO USING "###" PRINT COLUMN h, "NOTAS DE CREDITOS" IF reimpresion = "S" THEN PRINT COLUMN i, "RE-IMPRESION" ELSE PRINT " " END IF PRINT negrillas_on LET total_bruto = 0 LET total_Desc = 0 #BUSCA EL NCF DE LA FACTURA EN LA NC # DE ESTA FORMA ES QUE EL QUERY ESTABA 1/2/2024 # SELECT a.codigo_dgii,a.ncf INTO codigodgii_m,num_ncf_m FROM vetb00072 a WHERE a.documento = fact_gral.factura AND # a.tipo_doc = 'FT' AND a.sucid = psucid SELECT a.ncf, a.fecha_factura, a.prima_us, a.porc_itbi, a.neto INTO codigodgii_m, xfecha_modificada, ptasa, pitbis, montoFactura FROM vetb00002 a WHERE a.factura = fact_gral.factura AND a.sucid = psucid #BUSCA EL NCF DE LA NC SELECT a.codigo_dgii, a.tipo_ncf INTO codigodgii, descripcion_ncf FROM vetb00071 a WHERE a.tipo_doc = 'NC' AND a.disponible = "S" AND a.sucid = 1 SELECT a.ncf INTO ult_ncf FROM vetb00073 a WHERE a.tipo_doc = 'NC' AND a.codigo_dgii = codigodgii AND a.sucid = 1 IF ult_ncf IS NOT NULL THEN LET num_ncf = ult_ncf + 1 END IF # DESCRIPCION BODEGA SELECT a.descripcion INTO xbodega FROM intb00009 a WHERE a.cod_bodega = fact_gral.bodega PRINT COLUMN 1, "Numero : ", doble_on, x.num_doc USING "&&&&&&", doble_off, negrillas_off PRINT COLUMN 1, "CLiente : ", x.tipo_cliente USING "&&", "-", x.sec_cliente USING "&&&&&&&&", " ", nombre_cli PRINT COLUMN 1, "Direccion: ", fact_gral.direccion PRINT COLUMN 1, "Vendedor : ", x.cod_emp_sec USING "&&&&", " ", nombre CLIPPED, ",", apellido PRINT COLUMN 1, "Fecha : ", x.fecha_orig USING "dd/mm/yy", negrillas_on PRINT COLUMN 1, "Doc. Dev : ", z.aplica_a USING "&&&&&&", " Factura : ", fact_gral.factura USING "&&&&&&", " NCF MODIFICADO:", codigodgii_m CLIPPED PRINT COLUMN 1, "Bodega : ", "(", fact_gral.bodega USING "<<<", ")", xbodega PRINT COLUMN 1, "NCF : ", codigodgii CLIPPED, num_ncf USING "&&&&&&&&" PRINT COLUMN 1, "Concepto : ", x.concepto CLIPPED PRINT COLUMN 1, "-----------------------------------------------------------", "------------------------------------------" PRINT COLUMN 1, "Producto", COLUMN 53, "Cantidad", COLUMN 64, "Precio", COLUMN 74, "%Desc", COLUMN 86, "Valor Desc", COLUMN 97, "Total" PRINT COLUMN 1, "-----------------------------------------------------------", "------------------------------------------" PRINT COLUMN 1, negrillas_off AFTER GROUP OF x.num_doc LET dias_factura = TODAY - xfecha_modificada IF dias_factura <= 30 THEN LET chitbis = "S" ELSE LET chitbis = 'N' END IF IF chitbis = 'S' THEN LET documento_encabezado.IndicadorNotaCredito = '0' ELSE LET documento_encabezado.IndicadorNotaCredito = '1' LET pitbis = 0 END IF DISPLAY "CHITBIS :", CHITBIS IF pitbis IS NULL THEN LET pitbis = 0 END IF LET total_bruto = 0 LET itbis = 0 LET pdescuento = 0 LET total_desc = 0 IF busca1 = "S" THEN # DISPLAY "bodega ",fact_gral.bodega," COD_MOV ",z.cod_mov," aplica ",z.aplica_a DECLARE venta11 CURSOR FOR SELECT DISTINCT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, SUM(a.cantidad_2), c.precio, SUM(c.cantidad_2), b.tipoproducto FROM iptb00006 a, iptb00002 b, vetb00003 c WHERE 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 = c.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND CAST(a.fact_no AS INT) = c.factura AND a.cod_mov = z.cod_mov AND a.num_doc = z.aplica_a AND a.area = c.area GROUP BY a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, c.precio, b.tipoproducto ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec END IF LET idxecf = 1 IF busca2 = "S" THEN DECLARE venta21 CURSOR FOR SELECT DISTINCT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.descrip_esp, SUM(a.cantidad_2), b.precio, '0', c.tipoproducto FROM iptb00006 a, vetb00025 b, iptb00002 c WHERE (a.num_doc = z.aplica_a) 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 = c.cod_n) AND (a.cod_grupo = c.cod_grupo) AND (a.cod_tipo = c.cod_tipo) AND (a.cod_sec = c.cod_sec) AND (a.cod_mov = z.cod_mov) AND b.ventas = "1" AND b.tipo_cliente IS NULL GROUP BY a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.precio, c.descrip_esp, c.tipoproducto END IF LET salir = "N" IF busca1 = "S" THEN FOREACH venta11 INTO reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento, id_tipoProducto IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) LET total_desc = (reg_i.precio * reg_i.cantidad) * (reg_i.descuento / 100) + total_desc LET pdescuento = reg_i.precio * (reg_i.descuento / 100) LET itbis = ((reg_i.precio - pdescuento) * reg_i.cantidad) * (pitbis / 100) # LET reg_i.precio = reg_i.precio + itbis PRINT COLUMN 1, reg_i.area, " ", reg_i.cod_n USING "&&&&", '-', reg_i.cod_grupo USING "&&&&", "-", reg_i.cod_tipo USING "&&&", "-", reg_i.cod_sec USING "&&&&", " ", reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45, COLUMN 40, reg_i.cantidad USING "###,###.#####", 2 SPACES, reg_i.precio USING "##,###.##", 2 SPACES, reg_i.descuento USING "##,###.##", 2 SPACES, pdescuento USING "###,###.##", COLUMN 88, reg_i.cantidad * reg_i.precio USING "###,###,###.##" LET reg_i.precio = reg_i.precio - pdescuento # IF reimpresion = "N" THEN INSERT INTO cctb00010( tipo_Doc, num_Doc, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, descuento, cod_mov, num_doc_almacen, bodega, porc_Desc, itbis, us_crea, fech_crea, descripcion) VALUES('NC', x.num_doc, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.cantidad, reg_i.precio, '0', z.cod_mov, z.aplica_a, fact_gral.bodega, '0', itbis, usuarios, getdate(), reg_i.descrip_esp) # END IF ----------->Documento Detalle OBLIGATORIO NC LET documento_detalle[idxecf].DescripcionItem = NULL LET documento_detalle[idxecf].cantidadItem = reg_i.cantidad USING "<<<<<<<<<<<<<&.##" LET documento_detalle[idxecf].montoItem = (reg_i.precio * reg_i.cantidad) * ptasa USING "<<<<<<<<<<<<<&.##" LET documento_detalle[idxecf].precioUnitarioItem = reg_i.precio * ptasa USING "<<<<<<<<<<<&.##" LET documento_detalle[idxecf].indicadorFacturacion = '1' --no s� que campo colocar LET documento_detalle[idxecf].nombreItem = reg_i.descrip_esp[ 1, 79] CLIPPED --Tengo la descripcion pero no el nombre del producto LET documento_detalle[idxecf].indicadorBienoServicio = id_tipoProducto --el generafile llena este campo, pero no estoy convencido LET idxecf = idxecf + 1 END FOREACH END IF IF busca2 = "S" THEN FOREACH venta21 INTO reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento, id_tipoProducto IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc #LET reg_i.descuento = pdescuento IF reimpresion = "N" THEN LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) ELSE LET total_bruto = ptotalb END IF PRINT COLUMN 1, reg_i.cod_n USING "&&&&", '-', reg_i.cod_grupo USING "&&&&", "-", reg_i.cod_tipo USING "&&&&", "-", reg_i.cod_sec USING "&&&&", " ", reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45, COLUMN 40, reg_i.cantidad USING "###,###.####", 2 SPACES, reg_i.precio USING "##,###.##", 2 SPACES, reg_i.descuento USING "##,###.##", 2 SPACES, pdescuento USING "###,###.##", COLUMN 88, (reg_i.cantidad * reg_i.precio) - pdescuento USING "###,###,###.##" LET reg_i.precio = reg_i.precio - pdescuento # IF reimpresion = "N" THEN INSERT INTO cctb00010( tipo_Doc, num_Doc, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, descuento, cod_mov, num_doc_almacen, bodega, porc_Desc, itbis, us_crea, fech_crea) VALUES('NC', x.num_doc, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.cantidad, reg_i.precio, '0', z.cod_mov, z.aplica_a, fact_gral.bodega, '0', itbis, usuarios, getdate()) # # END IF ----------->Documento Detalle OBLIGATORIO NC LET documento_detalle[idxecf].DescripcionItem = NULL LET documento_detalle[idxecf].cantidadItem = reg_i.cantidad USING "<<<<<<<<<<<<<<.##" LET documento_detalle[idxecf].montoItem = (reg_i.precio * reg_i.cantidad) * ptasa USING "<<<<<<<<<<<<<<.##" LET documento_detalle[idxecf].precioUnitarioItem = reg_i.precio * ptasa USING "<<<<<<<<<<<<.##" LET documento_detalle[idxecf].indicadorFacturacion = '1' --no s� que campo colocar LET documento_detalle[idxecf].nombreItem = reg_i.descrip_esp[ 1, 79] CLIPPED --Tengo la descripcion pero no el nombre del producto LET documento_detalle[idxecf].indicadorBienoServicio = id_tipoProducto --el generafile llena este campo, pero no estoy convencido LET idxecf = idxecf + 1 END FOREACH END IF IF reimpresion = "S" THEN DECLARE busca_codigos1 CURSOR FOR SELECT a.cod_n, a.cod_Grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, a.cantidad, a.precio, a.porc_desc, b.tipoproducto FROM cctb00004 a, iptb00002 b WHERE a.tipo_doc = 'NC' AND a.num_doc = x.num_doc 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 total_Desc = 0 LET total_bruto = 0 LET idxecf = 1 FOREACH busca_codigos1 INTO reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento, id_tipoProducto IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) PRINT COLUMN 1, reg_i.cod_n USING "&&&&", '-', reg_i.cod_grupo USING "&&&&", "-", reg_i.cod_tipo USING "&&&&", "-", reg_i.cod_sec USING "&&&&", " ", reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45, COLUMN 40, reg_i.cantidad USING "###,###.####", 2 SPACES, reg_i.precio USING "##,###.##", 2 SPACES, pdescuento USING "##,###.##", COLUMN 88, (reg_i.cantidad * reg_i.precio) - pdescuento USING "###,###,###.##" LET reg_i.precio = reg_i.precio - pdescuento ----------->Documento Detalle OBLIGATORIO NC LET documento_detalle[idxecf].DescripcionItem = NULL LET documento_detalle[idxecf].cantidadItem = reg_i.cantidad USING "<<<<<<<<<<<<<<.##" LET documento_detalle[idxecf].montoItem = (reg_i.precio * reg_i.cantidad) * ptasa USING "<<<<<<<<<<<<<<.##" LET documento_detalle[idxecf].precioUnitarioItem = reg_i.precio * ptasa USING "<<<<<<<<<<<<.##" LET documento_detalle[idxecf].indicadorFacturacion = '1' --no s� que campo colocar LET documento_detalle[idxecf].nombreItem = reg_i.descrip_esp[ 1, 79] CLIPPED --Tengo la descripcion pero no el nombre del producto LET documento_detalle[idxecf].indicadorBienoServicio = id_tipoProducto --el generafile llena este campo, pero no estoy convencido LET idxecf = idxecf + 1 END FOREACH END IF IF z.valor_desc IS NULL THEN LET z.valor_desc = 0 END IF IF pitbis IS NULL THEN LET pitbis = 0 END IF IF x.itbi IS NULL THEN LET x.itbi = 0 END IF --_chitbis IF reimpresion = "N" THEN IF chitbis = "S" THEN LET x.itbi = (total_bruto - total_desc) * (pitbis / 100) ELSE LET x.itbi = 0 END IF END IF LET total_nc = (total_bruto - total_Desc + x.itbi) PRINT COLUMN 88, "--------------" PRINT COLUMN 60, " BRUTO : ", COLUMN 88, total_bruto USING "###,###,###.##" PRINT COLUMN 60, " DESC : ", COLUMN 88, total_Desc USING "---,---,###.##" PRINT COLUMN 60, "SUB-TOTAL : ", COLUMN 88, (total_bruto - total_desc) USING "---,---,###.##" PRINT COLUMN 60, " ITBIS : ", pitbis USING "<<<.##", "% : ", COLUMN 88, x.itbi USING "---,---,###.##" PRINT COLUMN 60, " NETO : ", COLUMN 88, total_nc USING "---,---,###.##" IF z.valor_desc IS NULL THEN LET z.valor_desc = 0 END IF IF x.itbi IS NULL THEN LET x.itbi = 0 END IF { ACTUALIZACION DE LA TABLA DE CUENTAS POR COBRAR =============================================== VALOR NETO (total_nc) SE GUARDA EN EL CAMPO: valor, ITBI (x.itbi) SE GUARDA EN EL CAMPO: valor_efectivo, EL VALOR BRUTO (total_bruto) SE GUARDA EN EN CAMPO: valor_cheque, MONTO DE DESCUENTO(total_desc) EN EL CAMPO: monto_desc EL CAMPO NUM_CHEQUE SE UTILIZA PARA EL NUMERO DE DOCUMENTOS DE INVENTARIO DEL MOVIMIENTO 12 DE PRODUCTO TERMINADOS} IF reimpresion = "N" THEN IF _chitbis = 'YES' THEN LET _chitbis = 'SI' ELSE LET _chitbis = 'NO' END IF # BEGIN WORK INSERT INTO cctb00011( num_doc, tipo_doc, tipo_cliente, sec_cliente, comentario, chitbis, bodega, porc_itbis, valor_recibo, descuento, monto_itbis, valor_bruto, sucid, tipo_nc) VALUES(x.num_doc, "NC", x.tipo_cliente, x.sec_cliente, otros_mov.detalle, chitbis, fact_gral.bodega, pitbis, total_nc, total_desc, x.itbi, total_bruto, psucid, '01') LET total_nc = total_nc * -1 LET total_bruto = total_bruto * -1 IF fact_gral.ventas = '1' THEN LET xtipo_doc = 'FT' ELSE LET xtipo_Doc = 'FE' END IF SELECT MAX(a.fecha_Ven) INTO fechaVencimiento FROM cctb00001 a WHERE a.num_doc = fact_gral.factura AND a.tipo_doc = xtipo_doc AND a.tipo_cliente = x.tipo_cliente AND a.sec_cliente = x.sec_cliente IF num_ncf > 0 THEN UPDATE vetb00073 SET ncf = num_ncf WHERE tipo_doc = 'NC' AND codigo_dgii = codigodgii AND sucid = 1 INSERT INTO vetb00072( documento, tipo_doc, codigo_dgii, ncf, us_crea, fech_crea, sucid) VALUES(x.num_doc, 'NC', codigodgii, num_ncf, usuarios, getdate(), psucid) END IF IF total_nc > 0 THEN LET total_nc = total_nc * -1 END IF LET documento_encabezado.eNcf = "E", codigodgii CLIPPED, num_ncf USING "&&&&&&&&&&" INSERT INTO cctb00001( cod_cia, tipo_doc, num_doc, tipo_cliente, sec_cliente, cod_emp_sec, fecha_orig, aplica_a, banco, num_cheque, valor, valor_efectivo, valor_cheque, monto_desc, us_crea, fech_crea, bodega, tipo_doc_aplica, cod_emp, sucid, localidad_aplica_a, num_oc, documento_ref, num_doc_c, ncf, itbis) VALUES(cia, "NC", x.num_doc, x.tipo_cliente, x.sec_cliente, x.cod_emp_sec, x.fecha_orig, fact_gral.factura, z.cod_mov, z.aplica_a, total_nc, total_bruto, '0', '0', # total_desc---COLOQUE ESTO EN COMENTARIO PORQUE ESTABA DISTORCIONANDO EL VALOR CUANDO SE IMPRIMEN LOS REPORTES, usuarios, GETDATE(), fact_gral.bodega, xtipo_doc, psucid, psucid, psucid, ordenx, xcotizacion, num_cr_e, documento_encabezado.eNcf, x.itbi) UPDATE cctb00003 SET ult_recibo = x.num_doc WHERE tipo_Doc = 'NC' ------->Documento Encabezado OBLIGATORIO LET documento_encabezado.tipoEcf = '34' LET documento_encabezado.rncEmisor = p_companias.rnc CLIPPED LET documento_encabezado.razonSocialEmisor = p_companias.nombre CLIPPED LET documento_encabezado.direccionEmisor = p_companias.direccion CLIPPED LET documento_encabezado.Municipio = id_municipio_dgii USING "&&&&&&" LET documento_encabezado.Provincia = id_provincia_dgii USING "&&&&&&" LET documento_encabezado.fechaLimitePago = fechaVencimiento USING "dd-mm-yyyy" IF total_nc < 0 THEN LET total_nc = total_nc * -1 END IF LET documento_encabezado.montoTotal = total_nc * ptasa USING "<<<<<<<<<<<<<<<&.##" # IF x.itbi > 0 THEN IF x.itbi IS NULL THEN LET x.itbi = 0 END IF LET documento_encabezado.montoGravadoTotal = (total_nc - x.itbi) * ptasa USING "<<<<<<<<<<<<<&.##" LET documento_encabezado.montoGravadoI1 = (total_nc - x.itbi) * ptasa USING "<<<<<<<<<<<<<&.##" LET documento_encabezado.itbis1 = pitbis USING "&&" LET documento_encabezado.totalItbis = x.itbi * ptasa USING "<<<<<<<<<<<<<<<&.##" LET documento_encabezado.totalItbis1 = x.itbi * ptasa USING "<<<<<<<<<<<<<<<&.##" # END IF LET documento_encabezado.tipoIngreso = '01' LET documento_encabezado.indicadorMontoGravado = '0' LET documento_encabezado.razonSocialComprador = nombre_cli CLIPPED LET documento_encabezado.codigoVendedor = x.cod_emp_sec LET documento_encabezado.numeroFacturaInterna = fact_gral.factura LET documento_encabezado.fechaEmision = x.fecha_orig USING "dd-mm-yyyy" --Creo deberia usar getdate porque es una fecha diferente {Si es un getdate entonces restar dias fecha emision de fecha_org, si es > 30 entonces llenar IndicadorNotaCredito } LET documento_encabezado.NCFmodificado = codigodgii_m CLIPPED LET documento_encabezado.fechaNCFmodificado = xfecha_modificada USING "dd-mm-yyyy" # LET documento_encabezado.codigoModificacion = idtipo LET documento_encabezado.nombreFile = p_companias.rnc CLIPPED, "E", codigodgii CLIPPED, num_ncf USING "&&&&&&&&&&", ".xml" IF total_nc < 0 THEN LET total_nc = total_nc * 1 END IF IF montoFactura <> total_nc THEN LET documento_encabezado.codigoModificacion = 3 ELSE LET documento_encabezado.codigoModificacion = 1 END IF #LET documento_encabezado.fechaEmision=NULL IF (total_nc - x.itbi) * ptasa > 0 THEN CALL generafile( documento_encabezado.*, documento_detalle, psucid, psucid, 'adicionar') RETURNING xhash, respuesta, xfechaFirma, codigo DISPLAY "Aqui es lo que viene IPPRMT044: ", respuesta, " codigo: ", codigo UPDATE cctb00001 SET hash = xhash, ultima_respuesta = respuesta, fechaFirmaDigital = xfechaFirma WHERE num_doc = x.num_doc AND tipo_Doc = 'NC' IF codigo = '200' THEN CALL procesoEncf( ' ', "produccion", ' ', 0, 0, 'consultatrackid', respuesta) RETURNING phash, xrespuesta, codigo DISPLAY "consulta trackid: ", xrespuesta IF codigo = '200' THEN CALL util.JSON.parse(xrespuesta, p) ELSE DISPLAY "consulta trackid CON ERROR: ", xrespuesta END IF ELSE CALL util.JSON.parse(respuesta, p1) DISPLAY "consulta trackid CON ERROR DEL PRIMER IF: ", xrespuesta LET p.trackId = p1.trackId END IF # TRY # CALL procesoEncf(' ',"test",' ',0,0,'consultatrackid',respuesta) # RETURNING phash,xrespuesta # CALL util.JSON.parse(xrespuesta,p) # DISPLAY "estado respuesta: ",p.estado # CATCH # LET xtrack.mensaje="NO PUDE PARSEAR LA RESPUESTA EN EL PROGRAMA IPPRMT044" # END TRY UPDATE cctb00001 SET trackid = p.trackId, estado_dgii = p.estado, mensaje = p1.mensaje WHERE num_doc = x.num_doc AND tipo_Doc = 'NC' END IF END IF PRINT NORMAL PAGE TRAILER SKIP 1 LINE PRINT COLUMN 6, " Preparado Por", COLUMN 40, " Autorizado Por" PRINT " " PRINT COLUMN 6, "---------------------------", COLUMN 36, "---------------------------" ON LAST ROW IF reimpresion = "N" THEN UPDATE cctb00003 SET ult_recibo = x.num_doc, us_crea = SUSER_SNAME(), fech_crea = GETDATE(), us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE tipo_doc IN ("NC") END IF END REPORT REPORT cr_edito1_encf(x, z, nombre_cli, nombre, apellido, cia) DEFINE x RECORD num_doc LIKE cctb00001.num_doc, tipo_cliente LIKE cctb00001.tipo_cliente, sec_cliente LIKE cctb00001.sec_cliente, cod_emp_sec LIKE cctb00001.cod_emp_sec, fecha_orig LIKE cctb00001.fecha_orig, itbi DECIMAL(12, 2), concepto CHAR(60) END RECORD DEFINE z RECORD cod_mov LIKE iptb00006.cod_mov, aplica_a LIKE cctb00001.aplica_a, valor_pen DECIMAL(12, 2), desc_p LIKE cctb00001.monto_desc, valor_desc DECIMAL(12, 2), valor_pag DECIMAL(12, 2) END RECORD DEFINE cia SMALLINT DEFINE total_nc, total_bruto, sub_total, total_desc, itbis, valor_neto, valor_bruto, total_neto DECIMAL(12, 2) DEFINE nombre_cli, nombre, apellido CHAR(30) DEFINE reg_i RECORD area SMALLINT, cod_n INTEGER, cod_grupo INTEGER, cod_tipo INTEGER, cod_sec INTEGER, descrip_esp CHAR(100), cantidad DEC(18, 5), precio DECIMAL(12, 2), descuento DEC(12, 2) END RECORD, ch_ncf_m, ch_ncf STRING ORDER BY x.num_doc FORMAT #marmotech tienda, santiago_ #baja y alta resolucion BEFORE GROUP OF x.num_doc PRINTX p_companias.nombre, p_companias.direccion, p_companias.telefono, p_companias.rnc LET total_bruto = 0 LET total_Desc = 0 #BUSCA EL NCF DE LA FACTURA EN LA NC # SELECT a.ncf INTO codigodgii_m FROM vetb00072 a WHERE a.documento = fact_gral.factura AND # a.tipo_doc = 'FT' AND a.sucid = psucid #BUSCA EL NCF DE LA NC SELECT a.codigo_dgii, a.tipo_ncf INTO codigodgii, descripcion_ncf FROM vetb00071 a WHERE a.tipo_doc = 'NC' AND a.disponible = "S" AND a.sucid = 1 SELECT a.ncf INTO ult_ncf FROM vetb00073 a WHERE a.tipo_doc = 'NC' AND a.codigo_dgii = codigodgii AND a.sucid = 1 IF ult_ncf IS NOT NULL THEN LET num_ncf = ult_ncf + 1 END IF # DESCRIPCION BODEGA SELECT a.descripcion INTO xbodega FROM intb00009 a WHERE a.cod_bodega = fact_gral.bodega # LET ch_ncf = "E",codigodgii CLIPPED,num_ncf USING "&&&&&&&&&&" LET ch_ncf_m = codigodgii_m CLIPPED PRINTX x.tipo_cliente, x.sec_cliente, nombre_cli, fact_gral.direccion, x.cod_emp_sec, nombre, apellido, x.fecha_orig, z.aplica_a, fact_gral.factura, ch_ncf_m, ch_ncf PRINTX fact_gral.bodega, xbodega PRINTX x.concepto AFTER GROUP OF x.num_doc IF busca1 = "S" THEN # DISPLAY "bodega ",fact_gral.bodega," COD_MOV ",z.cod_mov," aplica ",z.aplica_a DECLARE venta111 CURSOR FOR SELECT DISTINCT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, SUM(a.cantidad_2), c.precio, AVG(c.cantidad_2) FROM iptb00006 a, iptb00002 b, vetb00003 c WHERE 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 = c.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec AND CAST(a.fact_no AS INT) = c.factura AND a.cod_mov = z.cod_mov AND a.num_doc = z.aplica_a AND a.area = c.area GROUP BY a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, c.precio ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec END IF IF busca2 = "S" THEN DECLARE venta211 CURSOR FOR SELECT DISTINCT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.descrip_esp, SUM(a.cantidad_2), b.precio, '0' FROM iptb00006 a, vetb00025 b, iptb00002 c WHERE (a.num_doc = z.aplica_a) 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 = c.cod_n) AND (a.cod_grupo = c.cod_grupo) AND (a.cod_tipo = c.cod_tipo) AND (a.cod_sec = c.cod_sec) AND (a.cod_mov = z.cod_mov) AND b.ventas = "1" AND b.tipo_cliente IS NULL GROUP BY a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.precio, c.descrip_esp END IF LET total_bruto = 0 LET salir = "N" IF busca1 = "S" THEN FOREACH venta111 INTO reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc LET valor_bruto = reg_i.cantidad * reg_i.precio PRINTX reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento, pdescuento, valor_bruto END FOREACH END IF IF busca2 = "S" THEN FOREACH venta211 INTO reg_i.area, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc #LET reg_i.descuento = pdescuento IF reimpresion = "N" THEN LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) ELSE LET total_bruto = ptotalb END IF LET valor_neto = (reg_i.cantidad * reg_i.precio) - pdescuento PRINTX COLUMN 1, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento, pdescuento, valor_neto IF reimpresion = "N" THEN INSERT INTO cctb00004( tipo_Doc, num_Doc, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, descuento, cod_mov, num_doc_almacen, bodega, porc_Desc) VALUES('NC', x.num_doc, reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.cantidad, reg_i.precio, pdescuento, z.cod_mov, z.aplica_a, fact_gral.bodega, reg_i.descuento) END IF END FOREACH END IF IF reimpresion = "S" THEN DECLARE busca_codigos11 CURSOR FOR SELECT a.cod_n, a.cod_Grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, a.cantidad, a.precio, a.porc_desc FROM cctb00004 a, iptb00002 b WHERE a.tipo_doc = 'NC' AND a.num_doc = x.num_doc 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 total_Desc = 0 LET total_bruto = 0 FOREACH busca_codigos11 INTO reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, reg_i.descuento IF reg_i.cantidad IS NULL THEN LET reg_i.cantidad = 0 END IF IF reg_i.precio IS NULL THEN LET reg_i.precio = 0 END IF LET pdescuento = (reg_i.cantidad * reg_i.precio) * (reg_i.descuento / 100) LET total_desc = pdescuento + total_desc LET total_bruto = total_bruto + (reg_i.cantidad * reg_i.precio) LET valor_neto = (reg_i.cantidad * reg_i.precio) - pdescuento PRINTX reg_i.cod_n, reg_i.cod_grupo, reg_i.cod_tipo, reg_i.cod_sec, reg_i.descrip_esp, reg_i.cantidad, reg_i.precio, pdescuento, valor_neto END FOREACH END IF IF z.valor_desc IS NULL THEN LET z.valor_desc = 0 END IF SELECT a.porc_itbi INTO pitbis FROM vetb00002 a WHERE a.factura = fact_gral.factura IF pitbis IS NULL THEN LET pitbis = 0 END IF IF x.itbi IS NULL THEN LET x.itbi = 0 END IF --_chitbis IF reimpresion = "N" THEN IF chitbis = "S" THEN LET x.itbi = (total_bruto - total_desc) * (pitbis / 100) ELSE LET x.itbi = 0 END IF END IF LET sub_total = (total_bruto - total_desc) LET total_neto = sub_total + x.itbi PRINTX total_bruto, total_Desc, sub_total, pitbis, x.itbi, total_neto LET total_nc = total_neto IF z.valor_desc IS NULL THEN LET z.valor_desc = 0 END IF IF x.itbi IS NULL THEN LET x.itbi = 0 END IF { ACTUALIZACION DE LA TABLA DE CUENTAS POR COBRAR =============================================== VALOR NETO (total_nc) SE GUARDA EN EL CAMPO: valor, ITBI (x.itbi) SE GUARDA EN EL CAMPO: valor_efectivo, EL VALOR BRUTO (total_bruto) SE GUARDA EN EN CAMPO: valor_cheque, MONTO DE DESCUENTO(total_desc) EN EL CAMPO: monto_desc EL CAMPO NUM_CHEQUE SE UTILIZA PARA EL NUMERO DE DOCUMENTOS DE INVENTARIO DEL MOVIMIENTO 12 DE PRODUCTO TERMINADOS} IF reimpresion = "N" THEN IF _chitbis = 'YES' THEN LET _chitbis = 'SI' ELSE LET _chitbis = 'NO' END IF END IF ON LAST ROW END REPORT { FUNCTION integridad() IF sqlca.sqlcode < 0 THEN LET numero_msg = sqlca.sqlcode CALL msg(numero_msg) DISPLAY numero_msg AT 23,70 LET bandera = 1 LET status = 0 SLEEP 2 RETURN END IF RETURN END FUNCTION } FUNCTION repetir1() DEFINE ant_art RECORD aplica_a INTEGER, valor_pag INTEGER END RECORD LET ant_art.aplica_a = otros_mov.num_doc --CHEQUEAR SI ES FACTURA LET ant_art.valor_pag = arr_recibo.valor_pag --FOR idx = 1 to arr_count() --IF idx != curr THEN IF arr_recibo.aplica_a IS NOT NULL AND arr_recibo.valor_pag IS NOT NULL THEN IF arr_recibo.aplica_a = ant_art.aplica_a AND arr_recibo.valor_pag = ant_art.valor_pag THEN --LET numero_msg = 21 --CALL msg(numero_msg) LET bandera = 1 ELSE IF bandera != 1 THEN LET bandera = 0 END IF END IF END IF --END IF --END FOR DISPLAY "REPITIENDO bandera", bandera END FUNCTION FUNCTION prod() LET a_ano = YEAR(p_fechas) LET mes_control = MONTH(TODAY) LET mes_calc = mes_control IF mes_calc = 01 THEN LET mes_calc = 13 LET a_ano = YEAR(TODAY - 32) END IF --Aqui la funcion se posicionaba en dos meses --para el control del documento LET mes_calc = mes_calc - 2 IF mes_calc <= 0 THEN LET mes_calc = 12 LET a_ano = YEAR(TODAY) - 1 END IF LET c_ano = YEAR(TODAY) SELECT MIN(fecha_corte) INTO fecha_c FROM prdtable WHERE fecha_corte >= p_fechas IF status = NOTFOUND THEN LET numero_msg = 58 CALL msg(numero_msg) LET bandera = 1 END IF SELECT MIN(dias_gracia) INTO dia FROM prdtable WHERE fecha_corte = fecha_c IF dia IS NULL THEN LET dia = 0 END IF SELECT UNIQUE a.usuario FROM seg0003 a WHERE a.usuario = SUSER_SNAME() IF STATUS != NOTFOUND THEN LET fecha_c = fecha_c + dia END IF LET comp_fech = fecha_c LET comp_fech1 = TODAY IF comp_fech < comp_fech1 THEN LET numero_msg = 57 CALL msg(numero_msg) LET bandera = 1 END IF END FUNCTION FUNCTION informacion() CALL bodegas(1) SELECT a.descripcion INTO xbodega FROM intb00009 a WHERE a.cod_bodega = fact_gral.bodega SELECT b.nombre, a.calle || ' ' || a.casa_num || ' ' || a.urbanizacion || ' ' || a.barrio INTO nom_cli, fact_gral.direccion FROM vetb00004 b, vetb00005 a WHERE (b.tipo_cliente = recibo.tipo_cliente) AND (b.sec_cliente = recibo.sec_cliente) AND b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente SELECT a.nom1_emp, a.apell1_emp INTO descrip2, descrip3 FROM adtb00003 a WHERE a.num_emp = psec_vend LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, fact_gral.bodega DISPLAY arr_recibo.cod_mov TO s_recibo[1].cod_mov DISPLAY arr_recibo.aplica_a TO s_recibo[1].aplica_a DISPLAY arr_recibo.valor_pag TO s_recibo[1].valor_pag DISPLAY arr_recibo.valor_pag TO s_recibo[1].valor_pag DISPLAY xdescuento TO s_recibo[1].val_desc DISPLAY ptotalb TO s_recibo[1].valor_pen END FUNCTION FUNCTION existenciaMinima() DEFINE encabezado, cuerpo, aquienEmail, ccAquien STRING, i INT LET aquienEmail = "almacenplanta@marmotech.com.do" LET ccAquien = "notificacion@marmotech.com.do" LET encabezado = 'AVISO EXISTENCIA MINIMA ALMACENES PRODUCTOS TERMINADOS' LET cuerpo = "", "", "", "", "", "", "", "", "" LET cuerpo = cuerpo CLIPPED, "" FOR i = 1 TO movi2.getLength() # PROCEDIMIENTO ENVIO CORREO PARA LA EXISTENCIA MINIMA LET existenciaact[i] = (existenciaact[i] - (movi2[i].cantidad_2 * -1)) IF existminima[i] > 0 THEN LET porcientocontrol[i] = (existminima[i] / existenciaact[i]) * 100 DISPLAY "PORCIENTO ", existminima[i], " ", existenciaact[i], " ", porcientocontrol[i], " ", status_m END IF LET enviaCorreo = "NO" IF porcientocontrol[i] >= 75 AND status_m = 2 AND existminIma[i] > 0 THEN # INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES LET enviaCorreo = "SI" LET cuerpo = cuerpo CLIPPED, "", "", "", "", "" LET enviaEmailProd[i] = "SI" END IF IF porcientocontrol[i] <= 0 AND status_m = 2 AND existminIma[i] > 0 THEN # INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES LET enviaCorreo = "SI" LET cuerpo_correo = cuerpo_correo CLIPPED, "", "", "", "", "" LET enviaEmailProd[i] = "SI" END IF END FOR IF enviaCorreo = "SI" THEN LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED # CALL envia_correo(aquienEmail,ccAquien,cuerpo, # encabezado, procedimiento ) END IF END FUNCTION FUNCTION toPDF() -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API CALL configureOutput("PDF") RETURNING HANDLER START REPORT formu4 TO XML HANDLER handler DECLARE buscapdf CURSOR FOR SELECT a.area, c.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad_1, a.cantidad_2, '0', b.unidad_med, b.descrip_esp FROM iptb00006 a, iptb00002 b, prtb00016 c WHERE a.num_doc = otros_mov.num_doc AND a.cod_mov = otros_mov.cod_mov 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.bodega = otros_mov.bodega AND a.fech_crea > '01/01/2009 08:00' AND a.area = c.area_num ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec LET idx = 1 FOREACH buscapdf INTO movi2[idx].* IF movi2[idx].cantidad_2 < 0 THEN LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1 END IF SELECT SUM(a.cantidad) INTO cantidad_conduce FROM prtb00013 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.num_oc = ordenx AND a.status_t IS NULL LET cantidad_orden = 0 IF otros_mov.cod_mov = 30 AND otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 THEN SELECT SUM(a.cantidad_2 * - 1) INTO cantidad_orden FROM iptb00006 a WHERE a.cod_n = movi2[idx].cod_n AND a.cod_grupo = movi2[idx].cod_grupo AND a.cod_tipo = movi2[idx].cod_tipo AND a.cod_sec = movi2[idx].cod_sec AND a.conduce_no = otros_mov.conduce_no AND cod_mov IN (30, 31, 55) AND a.status_t IS NULL END IF IF cantidad_orden IS NULL THEN LET cantidad_orden = 0 END IF IF cantidad_conduce IS NULL THEN LET cantidad_conduce = 0 END IF LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*) LET idx = idx + 1 END FOREACH FINISH REPORT formu4 END FUNCTION FUNCTION adicionaArray() DEFINE x1, current_length INT LET current_length = movi10Dest.getLength() FOR x1 = 1 TO movi10.getLength() IF movi10[x1].cantidad2 IS NOT NULL THEN LET current_length = current_length + 1 LET movi10Dest[current_length].* = movi10[x1].* END IF END FOR END FUNCTION FUNCTION addDespiece() DEFINE x1, x2, current_length INT, flag BOOLEAN --LET current_length = despieceDest.getLength() FOR x1 = 1 TO despiece.getLength() --DISPLAY "DESPIECE: ", despiece[x1].* LET flag = TRUE IF despiece[x1].medida IS NOT NULL THEN FOR x2 = 1 TO despieceDest.getLength() IF despiece[x1].cod_n = despieceDest[x2].cod_n AND despiece[x1].cod_grupo = despieceDest[x2].cod_grupo AND despiece[x1].cod_tipo = despieceDest[x2].cod_tipo AND despiece[x1].cod_sec = despieceDest[x2].cod_sec AND despiece[x1].secuencia = despieceDest[x2].secuencia THEN --DISPLAY "DESPIECEDEST: ", despieceDest[x2].* LET despieceDest[x2].* = despiece[x1].* LET flag = FALSE END IF END FOR IF flag THEN LET current_length = despieceDest.getLength() + 1 LET despieceDest[current_length].* = despiece[x1].* END IF END IF END FOR END FUNCTION FUNCTION addUbicacion() FOR x2 = 1 TO movi10Dest.getLength() IF movi10Dest[x2].cantidad2 IS NOT NULL THEN # IF movi10Dest[x2].id_seccion1 IS NOT NULL THEN IF status_m = "2" THEN IF movi10Dest[x2].cantidad2 > 0 THEN LET movi10Dest[x2].cantidad2 = movi10Dest[x2].cantidad2 * -1 END IF IF movi10Dest[x2].cantidad1 > 0 THEN LET movi10Dest[x2].cantidad1 = movi10Dest[x2].cantidad1 * -1 END IF END IF TRY DISPLAY otros_mov.num_doc DISPLAY movi10Dest[x2].area DISPLAY movi10Dest[x2].cod_n DISPLAY movi10Dest[x2].cod_Grupo DISPLAY movi10Dest[x2].cod_tipo DISPLAY movi10Dest[x2].cod_sec DISPLAY movi10Dest[x2].cod_mov DISPLAY movi10Dest[x2].id_bodega DISPLAY movi10Dest[x2].id_seccion1 DISPLAY movi10Dest[x2].id_tramo1 DISPLAY movi10Dest[x2].id_fila DISPLAY movi10Dest[x2].id_pos DISPLAY movi10Dest[x2].cantidad1 DISPLAY movi10Dest[x2].cantidad2 INSERT INTO iptb00062( num_Doc, cod_mov, bodega, fecha, cod_seccion, cod_tramo, cod_fila, cod_pos, area, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, cantidad2, us_crea, fech_crea) VALUES(otros_mov.num_doc, otros_mov.cod_mov, movi10Dest[x2].id_bodega, otros_mov.fecha, movi10Dest[x2].id_seccion1, movi10Dest[x2].id_tramo1, movi10Dest[x2].id_fila, movi10Dest[x2].id_pos, movi10Dest[x2].area, movi10Dest[x2].cod_n, movi10Dest[x2].cod_Grupo, movi10Dest[x2].cod_tipo, movi10Dest[x2].cod_sec, movi10Dest[x2].cantidad1, movi10Dest[x2].cantidad2, usuarios, getdate()) CATCH LET numero_msg = 1663 DISPLAY "ROLLBACK addUbicacion" EXIT FOR END TRY # END IF END IF END FOR RETURN numero_msg END FUNCTION FUNCTION controlaDevolucion( dcodn, dcodgrupo, dcodtipo, dcodsec, dfactura, dcontrol_devolucion, dcantidad) DEFINE dcodn, dcodgrupo, dcodtipo, dcodsec, dfactura INT, dcantidad_factura, dcantidad_devuelta, dcantidad DEC(12, 5), dcontrol_devolucion VARCHAR(2), devolucion_correcta BOOLEAN #CONTROL DEVOLUCION IF dcontrol_devolucion = "SI" THEN LET dcantidad_factura = 0 SELECT ISNULL(SUM(a.cantidad), 0) INTO dcantidad_factura FROM vetb00003 a WHERE a.factura = dfactura AND a.status_t IS NULL AND a.fech_crea > '2009-01-01 08:00' AND a.cod_n = dcodn AND a.cod_grupo = dcodgrupo AND a.cod_tipo = dcodtipo AND a.cod_sec = dcodsec AND a.status_t IS NULL SELECT ISNULL(SUM(a.cantidad_2), 0) INTO dcantidad_devuelta FROM iptb00006 a WHERE a.factura = dfactura AND a.status_t IS NULL AND a.fech_crea > '2009-01-01 08:00' AND a.cod_n = dcodn AND a.cod_grupo = dcodgrupo AND a.cod_tipo = dcodtipo AND a.cod_sec = dcodsec AND a.cod_mov IN (12, 13) DISPLAY "control dev: ", dcantidad_devuelta, " t ", dcantidad, " f ", dcantidad_factura IF dcantidad_devuelta + dcantidad > dcantidad_factura THEN RETURN FALSE END IF END IF RETURN TRUE END FUNCTION FUNCTION loadDespieceMemory(pcodn, pcodgrupo, pcodtipo, pcodsec) DEFINE i, idx, pcodn, pcodgrupo, pcodtipo, pcodsec INT LET idx = 1 FOR i = 1 TO despieceMem.getLength() IF despieceMem[i].cod_n = pcodn AND despieceMem[i].cod_grupo = pcodgrupo AND despieceMem[i].cod_tipo = pcodtipo AND despieceMem[i].cod_sec = pcodsec THEN LET container[idx].* = despieceMem[i].* LET idx = idx + 1 END IF END FOR RETURN container END FUNCTION FUNCTION saveDespieceMemory(pcodn, pcodgrupo, pcodtipo, pcodsec) DEFINE i, x, pcodn, pcodgrupo, pcodtipo, pcodsec INT -- borrar registros anteriores del producto { FOR x = despieceMem.getLength() TO 1 STEP -1 IF despieceMem[x].cod_n = pcodn AND despieceMem[x].cod_grupo = pcodgrupo AND despieceMem[x].cod_tipo = pcodtipo AND despieceMem[x].cod_sec = pcodsec THEN CALL despieceMem.deleteElement(x) END IF END FOR } -- guardar nuevos FOR i = 1 TO despiece.getLength() IF despiece[i].medida IS NOT NULL THEN LET x = despieceMem.getLength() + 1 LET despieceMem[x].* = despiece[i].* END IF END FOR END FUNCTION FUNCTION eliminaUbicacionesItem(parea, pcod_n, pcod_grupo, pcod_tipo, pcod_sec) DEFINE parea, pcod_n, pcod_grupo, pcod_tipo, pcod_sec, x INTEGER FOR x = movi10Dest.getLength() TO 1 STEP -1 IF movi10Dest[x].cod_n = pcod_n AND movi10Dest[x].cod_grupo = pcod_grupo AND movi10Dest[x].cod_tipo = pcod_tipo AND movi10Dest[x].cod_sec = pcod_sec AND NVL(movi10Dest[x].area, 0) = NVL(parea, 0) THEN CALL movi10Dest.deleteElement(x) END IF END FOR END FUNCTION
CON EL DOCUMENTO ", otros_mov.num_doc USING "&&&&&&&&", "PERTENECIENTE AL MOVIMIENTO (", otros_mov.cod_mov USING "&&&", ")", pdescripmov CLIPPED, "
PRODUCTOSCANTIDAD TRANSACCCANTIDAD MINIMAEXISTENCIA
", movi2[i].descrip_esp CLIPPED, "", movi2[i].cantidad_2 USING "##,###.##", "", existminima[i] USING "##,###.##", "", existenciaact[i] USING "##,###.##", "
", movi2[i].descrip_esp CLIPPED, "", movi2[i].cantidad_2 USING "##,###.##", "", existminima[i] USING "##,###.##", "", existenciaact[i] USING "##,###.##", "