{ ----------------------------------------------------------------------------- PROGRAMA : CCPRMT001 OBJETIVO : Mantenimiento de Recibo de Pago y otros Movimientos REALIZADO POR : JUAN SOTO FECHA : Enero 1997 ----------------------------------------------------------------------------- } IMPORT UTIL GLOBALS "ccprgb000.4gl" 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, tipodocumento CHAR(2), ambiente STRING DEFINE documento_Detalle DYNAMIC ARRAY OF RECORD indicadorFacturacion, nombreItem, indicadorBienoServicio, cantidadItem, precioUnitarioItem, montoItem STRING, DescripcionItem VARCHAR(1000), NumeroLinea INT END RECORD, xhash CHAR(6), xfechaFirmaDigital DATETIME YEAR TO SECOND DEFINE decenas DYNAMIC ARRAY OF CHAR(20) DEFINE centenas DYNAMIC ARRAY OF CHAR(20) DEFINE unidades1 DYNAMIC ARRAY OF CHAR(20), reimprime, hecha_aqui VARCHAR(2), rnc VARCHAR(11), direccion_Sucursal, descripcion, desc_modificacion VARCHAR(100), arr_articulos DYNAMIC ARRAY OF RECORD area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad_1, cantidad_2 DEC(12, 4), descrip_Esp VARCHAR(70), unidad_med VARCHAR(4), precio, por_desc, valor_desc, valor_itbis, valor DEC(12, 2), id_tipo SMALLINT END RECORD DEFINE xorden, numero_recibo, valor_cheque1, p_num_doc, num_doc_ref, hsucid, xfactura, xsucid INTEGER DEFINE valor_ctrl1, valor_nc, nc_pend, valor_ctrl, p_total, tasa, pitbis, ditbis, valor_orig, valor_aplicado, remanente, val_pen, valor2, xvalor_bruto, xdescuento, xsub_total, xitbis, xneto DECIMAL(12, 2), psimbolo, pmoneda, valor_letras, phash, xrespuesta, codigo, message_err STRING, dias SMALLINT, ffecha DATE, imagen BYTE DEFINE fecha1 DATE DEFINE nombre_cta, qncf CHAR(30) DEFINE tipo_ant, tipo_doc2, tipo_doc1, ptipo_nc, chr_impresion, vacio CHAR(2) DEFINE opc, ncr, tienencf CHAR(1), p_nombre_tipo, pdescrip_mov CHAR(40), dir1, dir2, dir3, dir4 CHAR(30), pdireccion CHAR(200), cod_mov_ref, no_reg SMALLINT, pdocumento_ref DYNAMIC ARRAY OF INT, simbolo, id_provincia_dgii, id_municipio_dgii VARCHAR(6), idtipo SMALLINT, xventas CHAR(1), ncffechaVencimiento BOOLEAN DEFINE pok RECORD trackId, ERROR, mensaje STRING END RECORD DEFINE p RECORD trackid STRING, codigo, estado, rnc, encf, secuenciaUtilizada, fechaRecepcion STRING, mensajes DYNAMIC ARRAY OF RECORD valor, codigo STRING END RECORD END RECORD MAIN DEFER INTERRUPT CALL STARTLOG("ccprmt01.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(4) RETURNING impresor CONNECT TO "decomarmol" USER usuarios USING clave -- campo por campo (evita descuadre del SELECT * con la companias del .sch) SELECT a.cod_comp, a.nombre, a.rnc, a.direccion, a.telefono, a.fax, a.ambientedgii INTO p_companias.cod_comp, p_companias.nombre, p_companias.rnc, p_companias.direccion, p_companias.telefono, p_companias.fax, p_companias.ambientedgii FROM companias a SELECT a.sucid, b.sucnombre, b.direccion, b.telefono, b.fax, b.rnc, a.cod_perfil, c.id_municipio_dgii, c.id_dgii INTO codigo_sucursal, nombre_sucursal, direccion_sucursal, p_companias.telefono, p_companias.fax, p_companias.rnc, pperfil, id_municipio_dgii, id_provincia_dgii FROM seg0001 a, sucursales b, vetb00020 c WHERE a.usuario = usuarios AND a.sucid = b.sucid AND b.localidad = c.cod_provincia IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "ERROR", "USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS", "STOP") EXIT PROGRAM END IF # Provincia/municipio del emisor (e-CF) salen de companias, no de vetb00020 CALL ubicacion_emisor_dgii(id_provincia_dgii, id_municipio_dgii) RETURNING id_provincia_dgii, id_municipio_dgii CALL ccprmt001() END MAIN # Provincia y municipio del EMISOR para el e-CF (codigos DGII de 6 digitos) # tomados de companias.id_dgii / companias.id_municipio_dgii. # vetb00020 queda solo para la ubicacion de los clientes. # Si companias no los tiene, se dejan los valores recibidos. FUNCTION ubicacion_emisor_dgii(pprovincia, pmunicipio) DEFINE pprovincia, pmunicipio STRING DEFINE vprovincia, vmunicipio INTEGER LET vprovincia = NULL LET vmunicipio = NULL SELECT a.id_dgii, a.id_municipio_dgii INTO vprovincia, vmunicipio FROM companias a IF vprovincia IS NOT NULL THEN LET pprovincia = vprovincia USING "&&&&&&" END IF IF vmunicipio IS NOT NULL THEN LET pmunicipio = vmunicipio USING "&&&&&&" END IF RETURN pprovincia, pmunicipio END FUNCTION ####### Funcion para agregar un recibo de pago FUNCTION ccprmt001() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 OPEN FORM ccfmmt001 FROM "ccfmmt001" DISPLAY FORM ccfmmt001 DISPLAY "ccprmt001" AT 4, 3 DISPLAY "Movimientos de CXC" AT 6, 31 LET fecha1 = TODAY LET hecha_Aqui = "NO" MENU "OPCION" ON ACTION Adicionar LET hecha_aqui = "SI" CALL arr_recibo.clear() CLEAR FORM CALL ccpcad001() ON ACTION Consulta_modifica CALL ccpcmf001() ON ACTION Salir EXIT MENU END MENU END FUNCTION FUNCTION ccpcad001() DEFINE emp SMALLINT DEFINE hoy DATE LET hoy = NULL SELECT a.sucid, a.sucnombre INTO codigo_sucursal, nombre_sucursal FROM sucursales a, seg0001 b WHERE b.usuario = usuarios AND b.sucid = a.sucid IF STATUS = NOTFOUND THEN ERROR "USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS" RETURN END IF DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME recibo.tipo_doc, recibo.tipo_cliente, recibo.sec_cliente, recibo.cod_emp_sec, recibo.fecha_orig, recibo.comentario, aplicacion_antiguas, valor_ctrl, monto_efectivo, monto_ck, monto_cr, ptipo_nc, cod_mov_ref, num_doc_ref, xsucid, xfactura, idtipo, recibo.num_doc ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET idtipo = NULL CALL tiposModificacion() CALL localidades("1") # Lista de la Localidad del encabezado (xsucid): antes no se llenaba # y el campo quedaba vacio sin opciones; por defecto la del usuario CALL localidades("2") IF xsucid IS NULL THEN LET xsucid = codigo_sucursal DISPLAY BY NAME xsucid END IF LET recibo.fecha_orig = fecha1 LET valor_ctrl = NULL LET tipo_ant = "RC" LET aplicacion_antiguas = "NO" LET xfactura = NULL LET chr_impresion = "NO" ## VENTANAS PARA BUSCAR LOS CLIENTES Y LOS EMPLEADOS ON KEY(CONTROL-W) CASE WHEN INFIELD(codigodgii) IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN CALL btipo_fact(recibo.tipo_doc) RETURNING codigodgii, fecha_vencimiento IF int_flag THEN LET int_flag = FALSE END IF DISPLAY BY NAME fecha_Vencimiento END IF WHEN INFIELD(tipo_cliente) CALL consulta_clientes() LET recibo.tipo_cliente = cliente_dir.tipo_cliente LET recibo.sec_cliente = cliente_dir.sec_cliente SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE(BOLD) DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD) DISPLAY BY NAME nom_cli ATTRIBUTE(BOLD) NEXT FIELD cod_emp_sec WHEN INFIELD(sec_cliente) CALL consulta_clientes() LET recibo.tipo_cliente = cliente_dir.tipo_cliente LET recibo.sec_cliente = cliente_dir.sec_cliente SELECT nombre INTO nom_cli FROM vetb00004 WHERE tipo_cliente = recibo.tipo_cliente AND sec_cliente = recibo.sec_cliente DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE(BOLD) DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD) DISPLAY BY NAME nom_cli ATTRIBUTE(BOLD) NEXT FIELD cod_emp_sec WHEN INFIELD(cod_emp_sec) CALL consulta_empleados() LET recibo.cod_emp_sec = transportista.sec_transp SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec DISPLAY BY NAME recibo.cod_emp_sec ATTRIBUTE(BOLD) LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME nombre_emp ATTRIBUTE(BOLD) NEXT FIELD fecha_orig END CASE BEFORE FIELD tipo_doc LET recibo.tipo_doc = tipo_ant AFTER FIELD tipo_doc IF recibo.tipo_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF LET tipo_ant = recibo.tipo_doc LET tienencf = "N" CASE WHEN recibo.tipo_doc = "PG" LET nombre_tipo = "PAGOS A FACTURA" EXIT CASE WHEN recibo.tipo_doc = "RC" LET nombre_tipo = "PAGOS" EXIT CASE WHEN recibo.tipo_doc = "OC" LET nombre_tipo = "OTROS CREDITOS" EXIT CASE WHEN recibo.tipo_doc = "OD" LET nombre_tipo = "OTROS DEBITOS" EXIT CASE WHEN recibo.tipo_doc = "ED" LET nombre_tipo = "ENTRADAS" EXIT CASE WHEN recibo.tipo_doc = "NC" LET nombre_tipo = "NOTA CREDITO" LET tienencf = "S" NEXT FIELD cod_mov_ref EXIT CASE WHEN recibo.tipo_doc = "ND" LET nombre_tipo = "NOTA DEBITO" LET tienencf = "S" NEXT FIELD xfactura EXIT CASE WHEN recibo.tipo_doc = "PI" LET nombre_tipo = "PAGO INTER." EXIT CASE WHEN recibo.tipo_doc = "RM" LET nombre_tipo = "RECIBOS MICELANEOS" EXIT CASE WHEN recibo.tipo_doc = "RC" LET nombre_tipo = "INGRESOS CXC" EXIT CASE WHEN recibo.tipo_doc = "DV" LET nombre_tipo = "DEVOLUCION DINERO" EXIT CASE END CASE IF recibo.tipo_doc = 'AV' THEN CALL fgl_winmessage( "INFO", "TIPO DOCUMENTO INCORRECTO", "INFO") NEXT FIELD tipo_Doc END IF # DISPLAY BY NAME nombre_tipo ATTRIBUTE (BOLD) LET p_nombre_tipo = nombre_tipo { AFTER FIELD cuenta_no IF recibo.cuenta_no is not null THEN SELECT descripcion INTO nombre_cta FROM cgtb00001 WHERE cuenta_no = recibo.cuenta_no and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF DISPLAY BY NAME nombre_cta ATTRIBUTE (blue) END IF } ## CHEQUEA QUE EL REGISTRO NO SE REPITA BEFORE FIELD num_doc IF recibo.tipo_Doc = 'RC' OR recibo.tipo_Doc = 'RM' THEN NEXT FIELD tipo_cliente END IF {AFTER FIELD num_doc IF recibo.num_doc IS NULL or recibo.num_doc = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF SELECT UNIQUE a.num_doc FROM cctb00001 a WHERE a.tipo_doc = recibo.tipo_doc AND a.num_doc = recibo.num_doc IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_doc END IF } ## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE AFTER FIELD tipo_cliente IF recibo.tipo_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) DISPLAY "NOMBRE ", nom_cli NEXT FIELD tipo_cliente END IF # BUSCA LA TASA { LET tasa =0 SELECT a.tasa INTO tasa FROM vetb00060 a,vetb00061 b WHERE b.tipo_cliente = recibo.tipo_cliente AND b.ventas = a.ventas IF tasa IS NULL OR tasa = 0 THEN CALL msg(16) NEXT FIELD tipo_cliente END IF DISPLAY BY NAME tasa} AFTER FIELD sec_cliente IF recibo.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio, b.zona_postal INTO nom_cli, dir1, dir2, dir3, dir4, tipodocumento FROM vetb00004 b, 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 IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 DISPLAY BY NAME nom_cli ATTRIBUTE(BOLD) # BUSCA EL VENDEDOR PARA ESTE CLIENTE SELECT a.sec_vend INTO recibo.cod_emp_sec FROM vetb00028 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente DISPLAY BY NAME recibo.cod_emp_sec IF recibo.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF NEXT FIELD fecha_orig AFTER FIELD cod_mov_ref IF recibo.tipo_doc = 'NC' THEN IF cod_mov_ref IS NOT NULL AND cod_mov_ref <> 0 THEN SELECT a.descrip_mov INTO pdescrip_mov FROM iptb00005 a WHERE a.cod_mov = cod_mov_ref AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD cod_mov_ref END IF DISPLAY BY NAME pdescrip_mov END IF END IF AFTER FIELD xfactura IF xfactura IS NOT NULL AND xfactura <> 0 THEN IF xsucid IS NULL THEN CALL msg(16) NEXT FIELD xsucid END IF SELECT a.tipo_cliente, a.sec_cliente, b.nombre, a.sucid, a.fecha_factura, a.sec_vend, c.nom1_emp, c.apell1_emp, a.prima_us, a.orden, a.ventas INTO recibo.tipo_cliente, recibo.sec_cliente, nom_cli, arr_recibo[1].sucid, ffecha, recibo.cod_emp_sec, descrip2, descrip3, tasa, xorden, xventas FROM vetb00002 a LEFT OUTER JOIN adtb00003 c ON c.num_emp = a.sec_vend, vetb00004 b WHERE a.factura = xfactura AND a.sucid = xsucid 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 msg(3) NEXT FIELD xfactura END IF LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.cod_emp_sec, nombre_emp, tasa, recibo.tipo_cliente, recibo.sec_cliente, nom_cli, ffecha IF ffecha > recibo.fecha_orig THEN CALL msg(1011) NEXT FIELD ffactura END IF IF tienencf = "S" THEN IF recibo.fecha_orig > "12312006" THEN IF codigodgii IS NULL THEN CALL btipo_fact( recibo.tipo_doc) RETURNING codigodgii, fecha_vencimiento DISPLAY BY NAME fecha_vencimiento, codigodgii END IF END IF END IF IF idtipo IS NULL THEN CALL msg(16) NEXT FIELD idtipo END IF IF recibo.tipo_doc = 'NC' THEN IF ptipo_nc IS NULL THEN CALL msg(16) NEXT FIELD ptipo_nc END IF END IF CALL calculo_nc( num_doc_ref, cod_mov_ref, tasa, idtipo) RETURNING xvalor_bruto, xdescuento, xsub_total, xitbis, xneto IF xvalor_bruto = 0 THEN CALL msg(16) LET valor_ctrl = xvalor_bruto NEXT FIELD valor_ctrl END IF LET valor_ctrl = xneto LET arr_recibo[1].valor_pag = valor_ctrl LET arr_recibo[1].desc_p = 0 DISPLAY BY NAME valor_ctrl IF codigodgii <> 'B04' THEN NEXT FIELD num_doc_ref ELSE NEXT FIELD valor_ctrl END IF IF valor_ctrl IS NULL THEN NEXT FIELD valor_ctrl END IF END IF AFTER FIELD num_doc_ref IF recibo.tipo_doc = "NC" THEN IF num_doc_ref <> 0 THEN SELECT DISTINCT CAST(a.fact_no AS INT), a.cod_sp, a.cod_sp_sec, b.nombre INTO xfactura, recibo.tipo_cliente, recibo.sec_cliente, nom_cli FROM iptb00006 a, vetb00004 b WHERE a.num_doc = num_doc_ref AND a.cod_mov = cod_mov_ref AND a.cod_sp = b.tipo_cliente AND a.cod_sp_sec = b.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_doc_ref END IF DISPLAY BY NAME recibo.tipo_cliente, recibo.sec_cliente, nom_cli SELECT COUNT(*) INTO no_reg FROM cctb00001 a WHERE a.banco = cod_mov_ref AND a.num_cheque = num_doc_ref AND a.status_t IS NULL IF no_reg > 0 THEN CALL msg(364) NEXT FIELD num_doc_ref END IF LET arr_recibo[1].aplica_a = xfactura SELECT a.sucid, a.fecha_factura, a.sec_vend, c.nom1_emp, c.apell1_emp, a.prima_us, a.orden INTO arr_recibo[1].sucid, ffecha, recibo.cod_emp_sec, descrip2, descrip3, tasa, xorden FROM vetb00002 a LEFT OUTER JOIN adtb00003 c ON c.num_emp = a.sec_vend WHERE a.factura = xfactura AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.cod_emp_sec, nombre_emp, tasa END IF END IF NEXT FIELD sucid AFTER FIELD cod_emp_sec IF recibo.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME nombre_emp ATTRIBUTE(BOLD) IF recibo.tipo_doc = "ND" THEN SELECT sec_vend FROM vetb00028 WHERE tipo_cliente = recibo.tipo_cliente AND sec_cliente = recibo.sec_cliente IF status != NOTFOUND THEN LET numero_msg = 357 CALL msg(numero_msg) END IF END IF AFTER FIELD fecha_orig IF recibo.fecha_orig IS NULL OR recibo.fecha_orig > TODAY THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = recibo.fecha_orig CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF LET fecha1 = recibo.fecha_orig BEFORE FIELD valor_ctrl IF monto_efectivo IS NULL THEN LET monto_efectivo = 0 END IF IF monto_cr IS NULL THEN LET monto_cr = 0 END IF IF monto_ck IS NULL THEN LET monto_ck = 0 END IF IF recibo.tipo_Doc <> 'NC' THEN LET valor_ctrl = monto_efectivo + monto_cr + monto_ck END IF DISPLAY BY NAME valor_ctrl AFTER FIELD valor_ctrl IF valor_ctrl IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_ctrl END IF IF recibo.tipo_doc = 'NC' THEN NEXT FIELD ptipo_nc ELSE LET ptipo_nc = NULL END IF AFTER INPUT IF INT_FLAG THEN LET INT_FLAG = FALSE CALL msg(2) RETURN END IF IF recibo.tipo_doc = 'RC' THEN IF monto_efectivo IS NULL THEN LET monto_efectivo = 0 END IF IF monto_cr IS NULL THEN LET monto_cr = 0 END IF IF monto_ck IS NULL THEN LET monto_ck = 0 END IF LET valor_ctrl = monto_efectivo + monto_cr + monto_ck DISPLAY BY NAME valor_ctrl END IF IF aplicacion_antiguas = "SI" THEN CALL aplica_mas_antiguas() END IF IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN IF xfactura IS NULL OR xfactura = 0 THEN CALL msg(16) NEXT FIELD xfactura END IF IF recibo.tipo_doc <> 'RC' AND recibo.tipo_doc <> 'RM' THEN SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = recibo.tipo_doc AND a.sucid = codigo_sucursal IF STATUS = NOTFOUND THEN LET p_num_doc = 0 END IF LET p_num_doc = p_num_doc + 1 LET recibo.num_doc = p_num_doc END IF IF tienencf = "S" THEN IF recibo.fecha_orig > "12312006" THEN IF codigodgii IS NULL THEN CALL btipo_fact( recibo.tipo_doc) RETURNING codigodgii, fecha_vencimiento DISPLAY BY NAME fecha_Vencimiento, codigodgii END IF SELECT MAX(a.ncf) INTO kncf FROM vetb00072 a WHERE a.tipo_doc = recibo.tipo_Doc AND a.codigo_dgii = codigodgii IF kncf IS NULL THEN LET kncf = 0 END IF LET kncf = kncf + 1 DISPLAY BY NAME kncf, codigodgii SELECT a.tipo_ncf INTO descripcion FROM vetb00071 a WHERE kncf BETWEEN a.ncf_inicial AND a.ncf_final AND a.tipo_doc = recibo.tipo_doc AND a.codigo_dgii = codigodgii AND UPPER(a.disponible) = "S" IF STATUS = NOTFOUND THEN LET numero_msg = 391 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF END IF END IF IF idtipo IS NULL THEN CALL msg(16) NEXT FIELD idtipo END IF # El tipo de nota (devolucion / sin ITBIS / otros creditos) solo # aplica a la nota de CREDITO; la de debito no lo lleva IF recibo.tipo_doc = 'NC' AND ptipo_nc IS NULL THEN CALL msg(16) NEXT FIELD ptipo_nc END IF CALL calculo_nc( num_doc_ref, cod_mov_ref, tasa, idtipo) RETURNING xvalor_bruto, xdescuento, xsub_total, xitbis, xneto IF xvalor_bruto = 0 THEN CALL msg(16) LET valor_ctrl = xvalor_bruto NEXT FIELD valor_ctrl END IF LET valor_ctrl = xneto LET arr_recibo[1].valor_pag = valor_ctrl LET arr_recibo[1].desc_p = 0 DISPLAY BY NAME valor_ctrl IF codigodgii <> 'B04' THEN NEXT FIELD num_doc_ref ELSE NEXT FIELD valor_ctrl END IF END IF IF valor_ctrl IS NULL THEN NEXT FIELD valor_ctrl END IF END INPUT ## AQUI SE INTRODUCEN LOS DATOS DEL ARREGLO INPUT ARRAY arr_recibo FROM s_recibo.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET curr = arr_curr() CALL localidades("1") # LET arr_recibo[curr].sucid = xsucid # LET arr_Recibo[arr_curr()].aplica_a = xfactura ## VENTANA PARA BUSCAR LOS DOCUMENTOS ON KEY(CONTROL-W) CASE WHEN INFIELD(aplica_a) CALL busca_aplicacion() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD aplica_a END IF IF existe = "N" THEN LET existe = "S" NEXT FIELD aplica_a END IF DISPLAY arr_recibo[curr].aplica_a TO s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD aplica_a END IF NEXT FIELD aplica_a END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() BEFORE FIELD aplica_A IF recibo.tipo_doc = 'NC' THEN SELECT DISTINCT b.num_doc, b.sucid INTO arr_recibo[curr].aplica_a, arr_recibo[curr].sucid FROM iptb00006 a, cctb00001 b WHERE (a.cod_mov = cod_mov_ref AND a.num_doc = num_doc_ref) AND (a.cod_sp = recibo.tipo_cliente AND a.cod_sp_sec = recibo.sec_cliente) AND b.tipo_cliente = recibo.tipo_cliente AND b.sec_cliente = recibo.sec_cliente AND a.fact_no = b.num_doc AND b.tipo_Doc IN ('FT', 'FE') AND a.status_t IS NULL DISPLAY arr_recibo[curr].aplica_a TO s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].sucid TO s_recibo[scr_l].sucid END IF AFTER FIELD num_nc LET nc_pend = 0 IF recibo.tipo_doc = "AV" THEN LET arr_recibo[curr].num_nc = NULL DISPLAY arr_recibo[curr].num_nc TO s_recibo[scr_l].num_nc END IF IF arr_recibo[curr].num_nc IS NOT NULL THEN SELECT UNIQUE num_doc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_nc END IF LET valor_nc = 0 SELECT SUM(a.valor + a.monto_desc) INTO valor_nc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF valor_nc IS NULL THEN LET valor_nc = 0 END IF LET nc_pend = valor_nc LET arr_recibo[curr].valor_pen = nc_pend DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen DISPLAY BY NAME nc_pend END IF AFTER FIELD aplica_a LET curr = arr_curr() IF arr_recibo[curr].aplica_a IS NOT NULL THEN LET bandera = 0 CALL repetir() DISPLAY "AQUI TAL VEZ" IF bandera = 1 THEN NEXT FIELD aplica_a END IF IF recibo.tipo_doc = "AV" THEN IF recibo.num_doc != arr_recibo[curr].aplica_a THEN CALL msg(131) NEXT FIELD aplica_a END IF END IF # Controla que la factura pertenezca al cliente # IF recibo.tipo_doc = "PG" OR recibo.tipo_doc="NC" OR recibo.tipo_doc="ND" THEN { SELECT MAX(a.documento_ref),MAX(a.tipo_doc) INTO pdocumento_ref[curr],arr_Recibo[curr].tipo_doc_aplica FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente and a.sec_cliente = recibo.sec_cliente) AND a.sucid = arr_recibo[curr].sucid AND (a.num_doc = arr_recibo[curr].aplica_a and a.tipo_doc = arr_recibo[curr].tipo_doc_aplica) and a.status_t is null IF status = notfound THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF} IF recibo.tipo_doc = "PG" OR recibo.tipo_doc = 'ND' THEN SELECT UNIQUE a.tipo_cliente FROM cctb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND (a.tipo_doc = arr_recibo[curr].tipo_doc_aplica) AND a.status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF IF recibo.tipo_doc = 'NC' AND (ptipo_nc = '01' OR ptipo_nc = '03') THEN SELECT DISTINCT a.fact_no FROM iptb00006 a WHERE a.cod_mov = cod_mov_ref AND a.num_doc = num_doc_ref AND a.fact_no = arr_recibo[curr].aplica_a AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "INFO", "ESTA FACTURA NO EXISTE PARA EL DOCUMENTO DE ALMACEN ESPECIFICADO", "INFO") NEXT FIELD aplica_A END IF SELECT ISNULL(SUM(a.cantidad_2 * b.precio), 0) INTO arr_recibo[curr].valor_pag FROM iptb00006 a, vetb00003 b WHERE a.cod_mov = cod_mov_ref AND a.num_doc = num_doc_ref AND a.fact_no = arr_recibo[curr].aplica_a AND b.factura = arr_recibo[curr].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 LET arr_recibo[curr].valor_pen = arr_recibo[curr].valor_pag DISPLAY arr_recibo[curr].valor_pag TO s_recibo[scr_l].valor_pag END IF # END IF # Busca el valor pendiente de la factura IF recibo.tipo_doc <> 'NC' THEN IF arr_recibo[curr].num_nc IS NULL THEN SELECT SUM(a.valor + a.monto_desc) INTO valor_fac FROM cctb00001 a WHERE a.aplica_a = arr_recibo[curr].aplica_a AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc NOT IN ('AV', 'AP') AND a.status_t IS NULL IF arr_recibo[curr].valor_pag IS NULL THEN LET arr_recibo[curr].valor_pag = valor_fac END IF IF aplicacion_antiguas = "NO" THEN LET arr_recibo[curr].valor_pen = valor_fac END IF ELSE LET arr_recibo[curr].valor_pen = 0 END IF DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].tipo_doc_aplica TO s_recibo[scr_l].tipo_doc_aplica END IF END IF BEFORE FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 NEXT FIELD valor_pag ELSE LET arr_recibo[curr].desc_p = 0 LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].desc_p TO s_recibo[scr_l].desc_p END IF AFTER FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 ELSE IF arr_recibo[curr].desc_p IS NULL THEN LET arr_recibo[curr].desc_p = 0 END IF LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pag - arr_recibo[curr].desc_p END IF DISPLAY arr_recibo[curr].valor_pag TO s_recibo[scr_l].valor_pag AFTER FIELD valor_pag IF arr_recibo[curr].aplica_a IS NULL AND arr_recibo[curr].num_nc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF arr_recibo[curr].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF LET p_total = 0 LET remanente = valor_ctrl FOR idx = 1 TO arr_recibo.getLength() IF arr_recibo[idx].valor_pag IS NOT NULL THEN IF arr_recibo[idx].num_nc IS NULL THEN LET p_total = p_total + arr_recibo[idx].valor_pag LET remanente = remanente - arr_recibo[idx].valor_pag END IF END IF END FOR IF p_total < 0 THEN LET p_total = p_total * -1 END IF IF arr_recibo[arr_curr()].num_nc IS NOT NULL THEN IF p_total > valor_ctrl THEN LET numero_msg = 502 CALL msg(numero_msg) END IF END IF DISPLAY BY NAME p_total ATTRIBUTE(BOLD) DISPLAY BY NAME remanente ATTRIBUTE(BLUE) END INPUT ON ACTION guardar LET reimprime = 'NO' LET p_total = 0 LET remanente = valor_ctrl IF recibo.tipo_doc = 'ND' THEN IF xfactura IS NULL THEN CALL msg(16) NEXT FIELD xfactura END IF LET arr_recibo[1].aplica_a = xfactura LET arr_Recibo[1].valor_pag = valor_ctrl IF xventas = '2' OR xventas = '3' THEN LET arr_recibo[1].tipo_doc_aplica = "FE" END IF IF xventas = '1' THEN LET arr_recibo[1].tipo_doc_aplica = "FT" END IF END IF IF recibo.tipo_doc = 'NC' THEN IF ptipo_nc IS NULL THEN CALL msg(16) NEXT FIELD ptipo_nc END IF IF xfactura IS NULL THEN IF num_doc_ref IS NULL OR num_doc_ref = 0 THEN CALL msg(16) NEXT FIELD num_doc_ref END IF IF xfactura IS NULL THEN CALL msg(16) NEXT FIELD num_doc_ref END IF IF idtipo IS NULL THEN CALL msg(16) NEXT FIELD idtipo END IF IF arr_articulos.getLength() = 0 THEN CALL msg(16) NEXT FIELD num_doc_ref END IF IF monto_efectivo IS NULL THEN LET monto_efectivo = 0 END IF ELSE LET arr_recibo[1].aplica_a = xfactura LET arr_Recibo[1].valor_pag = valor_ctrl IF xventas = '2' OR xventas = '3' THEN LET arr_recibo[1].tipo_doc_aplica = "FE" END IF IF xventas = '1' THEN LET arr_recibo[1].tipo_doc_aplica = "FT" END IF END IF END IF FOR idx = 1 TO arr_recibo.getLength() IF arr_recibo[idx].valor_pag IS NOT NULL THEN IF arr_recibo[idx].num_nc IS NULL THEN LET p_total = p_total + arr_recibo[idx].valor_pag LET remanente = remanente - arr_recibo[idx].valor_pag END IF END IF END FOR IF p_total < 0 THEN LET p_total = p_total * -1 END IF IF arr_recibo[arr_curr()].num_nc IS NOT NULL THEN IF p_total > valor_ctrl THEN LET numero_msg = 502 CALL msg(numero_msg) END IF END IF DISPLAY BY NAME p_total ATTRIBUTE(BOLD) DISPLAY BY NAME remanente ATTRIBUTE(BLUE) # Controla que el valor aplicado a las facturas no exceda el monto del recibo IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = 'ND' THEN IF idtipo IS NULL THEN CALL msg(16) NEXT FIELD idtipo END IF LET ncr = NULL # PROMPT "TIENE ITBIS(S/N)? " FOR CHAR ncr # LET ncr = UPSHIFT(ncr) END IF LET opc = NULL LET valor_cheque1 = NULL IF recibo.tipo_doc = "ND" THEN PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? " FOR CHAR opc LET opc = UPSHIFT(opc) IF opc = "S" THEN SELECT sec_vend INTO recibo.cod_emp_sec FROM vetb00028 WHERE tipo_cliente = recibo.tipo_cliente AND sec_cliente = recibo.sec_cliente DISPLAY BY NAME recibo.cod_emp_sec LET valor_cheque1 = recibo.num_doc ELSE LET valor_cheque1 = NULL END IF END IF #START REPORT cctb01 TO archivo # busca el ultimo numero de los recibos RC, con los AV IF recibo.tipo_doc <> 'RC' AND recibo.tipo_doc <> 'RM' THEN SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = recibo.tipo_doc #AND a.sucid =codigo_sucursal IF STATUS = NOTFOUND THEN LET p_num_doc = 0 END IF LET p_num_doc = p_num_doc + 1 LET recibo.num_doc = p_num_doc END IF BEGIN WORK # busca el ultimo numero de los recibos RC, con los AV IF recibo.tipo_Doc = 'RC' OR recibo.tipo_Doc = 'RM' THEN SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = 'AV' IF p_num_doc IS NULL THEN LET p_num_doc = 0 INSERT INTO cctb00003( ult_recibo, tipo_Doc.us_crea) VALUES(0, 'AV', user, "1") END IF LET recibo.num_doc = p_num_doc + 1 UPDATE cctb00003 SET ult_recibo = recibo.num_doc WHERE tipo_doc = 'AV' END IF DISPLAY BY NAME recibo.num_doc { DE ESTA FORMA ERA QUE ESTABA AL 23/02/2016 IF recibo.tipo_doc != "PG" THEN IF recibo.tipo_doc <> 'RC' THEN if recibo.tipo_doc <> 'RM' THEN SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = recibo.tipo_doc IF STATUS = NOTFOUND THEN LET p_num_doc = 0 END IF LET p_num_doc = p_num_doc + 1 LET recibo.num_doc = p_num_doc END IF END IF IF recibo.tipo_Doc = 'RC' or recibo.tipo_Doc = 'RM' THEN SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = 'AV' IF p_num_doc IS NULL THEN LET p_num_doc = 0 INSERT INTO cctb00003 (ult_recibo,tipo_Doc.us_crea) values (0,'AV',usuarios,"1") END IF LET recibo.num_doc = p_num_doc + 1 update cctb00003 set ult_recibo=recibo.num_doc where tipo_doc = 'AV' END IF } #NCF IF recibo.tipo_Doc = "NC" OR recibo.tipo_Doc = "ND" THEN SELECT a.ncf INTO kncf FROM vetb00073 a WHERE a.codigo_dgii = codigodgii AND a.tipo_doc = recibo.tipo_doc IF kncf IS NULL THEN LET kncf = 0 END IF LET kncf = kncf + 1 UPDATE vetb00073 SET ncf = kncf WHERE codigo_dgii = codigodgii AND tipo_doc = recibo.tipo_doc DISPLAY BY NAME kncf, codigodgii SELECT DISTINCT a.ncf FROM vetb00072 a WHERE a.codigo_dgii = codigodgii AND a.ncf = kncf IF STATUS <> NOTFOUND THEN CALL msg(390) CONTINUE DIALOG END IF INSERT INTO vetb00072 (documento, tipo_doc, codigo_dgii, ncf, us_crea, fech_crea, sucid) VALUES(recibo.num_doc, recibo.tipo_doc, codigodgii, kncf, usuarios, GETDATE(), "1") END IF INSERT INTO cctb00011( cod_cia, num_doc, tipo_doc, tipo_cliente, sec_cliente, comentario, us_crea, fech_crea, sucid, tipo_nc, valor_efectivo, valor_tarjeta, valor_cheque, chitbis, emitida) VALUES(1, recibo.num_doc, recibo.tipo_Doc, recibo.tipo_cliente, recibo.sec_cliente, recibo.comentario, usuarios, GETDATE(), codigo_sucursal, ptipo_nc, monto_efectivo, monto_cr, monto_ck, ncr, hecha_aqui) ## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO DISPLAY "DATA APLICA?A ", arr_recibo[1].aplica_a, " IT ", xitbis, " LENGTH: ", arr_recibo.getLength() # ADICION PRODUCTOS NC O ND IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN FOR k = 1 TO arr_articulos.getLength() IF arr_articulos[k].cod_sec IS NOT NULL THEN INSERT INTO cctb00010( tipo_doc, num_doc, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad, precio, descuento, porc_desc, itbis, num_doc_almacen, cod_mov, bodega, us_crea, fech_crea, descripcion) VALUES(recibo.tipo_doc, recibo.num_doc, arr_articulos[k].cod_n, arr_articulos[k].cod_grupo, arr_articulos[k].cod_tipo, arr_articulos[k].cod_sec, arr_articulos[k].cantidad_2, arr_articulos[k].precio, arr_articulos[k].valor_desc, arr_articulos[k].por_desc, arr_articulos[k].valor_itbis, pdocumento_ref[idx], cod_mov_ref, "1", usuarios, getdate(), arr_articulos[k].descrip_Esp) END IF END FOR END IF FOR idx = 1 TO arr_recibo.getLength() IF arr_recibo[idx].aplica_a IS NOT NULL THEN # PG ya no exige empleado (cod_emp_sec): se comporta como RC. # Se comenta el candado que abortaba el guardado e impedia el # INSERT en cctb00001 cuando el PG no traia empleado. { IF recibo.tipo_doc = "PG" THEN IF recibo.cod_emp_sec IS NULL OR recibo.cod_emp_sec = 0 THEN LET numero_msg = 68 CALL msg(numero_msg) CONTINUE DIALOG END IF END IF } IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN IF recibo.tipo_doc != "FI" THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF END IF IF recibo.tipo_doc = "OC" THEN IF arr_recibo[idx].valor_pag > 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF END IF IF recibo.tipo_doc = "OD" THEN IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF END IF IF recibo.tipo_doc = "DV" OR recibo.tipo_Doc = 'OD' THEN IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN IF arr_recibo[idx].valor_pag > 0 THEN LET valor_aplicado = arr_recibo[idx].valor_pag * -1 END IF LET xorden = NULL SELECT a.num_oc INTO xorden FROM prtb00012 a WHERE a.cotizacion_no = pdocumento_ref[idx] AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.status_t IS NULL # PARA REAPLICAR LOS AVANCES CUANDO ES POR DEVOLUCION DE DINERO DEL AVANCE ORIGINAL INSERT INTO cctb00001( cod_cia, tipo_doc, num_doc, tipo_cliente, sec_cliente, cod_emp, cod_emp_sec, fecha_orig, fecha_ven, aplica_a, num_cheque, valor, valor_cheque, costo, monto_desc, us_crea, fech_crea, banco, tipo_doc_aplica, documento_ref, num_oc, sucid, localidad_aplica_a) VALUES(p_companias.cod_comp, 'AP', arr_recibo[idx].aplica_a, recibo.tipo_cliente, recibo.sec_cliente, codigo_sucursal, recibo.cod_emp_sec, recibo.fecha_orig, "010101", arr_recibo[idx].aplica_a, recibo.num_doc, valor_aplicado, valor_cheque1, recibo.num_doc, arr_recibo[idx].desc_p, SUSER_SNAME(), GETDATE(), pdocumento_ref[idx], arr_recibo[idx].tipo_doc_aplica, pdocumento_ref[idx], xorden, codigo_sucursal, xsucid) END IF END IF # ESTAS INSTRUCCIONES ES PARA ENTRAR LOS AV-AVANCES POR ESTE PROGRAMA # SUPONGO QUE ESTAS LINEAS SERAN TEMPORALES HASTA QUE LOS AVANCES SE # INTRODUZCAN POR OTRO MANTENIMIENTO IF recibo.tipo_doc = "AV" THEN IF arr_recibo[idx].num_nc IS NOT NULL THEN ERROR "El Campo de Numero de Avancve Debe Estar En Nulo" CONTINUE DIALOG END IF IF arr_recibo[idx].aplica_a != recibo.num_doc THEN ERROR "Documento Debe Aplicarse a Si Mismo" CONTINUE DIALOG END IF IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF END IF #-------------------------------------------------------------------------- LET tipo_doc1 = NULL IF arr_recibo[idx].num_nc IS NOT NULL THEN LET tipo_doc1 = "AV" ELSE LET arr_recibo[idx].num_nc = recibo.num_doc LET tipo_doc1 = recibo.tipo_doc END IF IF arr_recibo[idx].desc_p IS NULL THEN LET arr_recibo[idx].desc_p = 0 END IF IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN IF recibo.tipo_cliente <> 17 THEN LET arr_recibo[1].tipo_doc_aplica = 'FT' ELSE LET arr_recibo[1].tipo_doc_aplica = 'FE' END IF IF xitbis < 0 THEN LET xitbis = xitbis * -1 END IF LET arr_recibo[idx].valor_pag = xneto * -1 IF arr_recibo[idx].valor_pag > 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF IF xitbis > 0 THEN LET xitbis = xitbis * -1 END IF END IF IF arr_recibo[idx].valor_pag < 0 AND recibo.tipo_doc = 'ND' THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF IF codigodgii NOT MATCHES 'B*' THEN LET qncf = "E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&" ELSE LET qncf = codigodgii CLIPPED, kncf USING "&&&&&&&&&&" END IF DISPLAY qncf TO codigodgii -- El valor no puede quedar en blanco: cctb00001.valor es NOT NULL. -- Si quedo NULL (p.ej. NC sin neto calculado o guardar sin pasar -- por el campo), se aborta el guardado con mensaje y ROLLBACK en -- vez de reventar el INSERT en la base de datos. IF arr_recibo[idx].valor_pag IS NULL THEN ROLLBACK WORK CALL msg(16) CONTINUE DIALOG END IF INSERT INTO cctb00001( tipo_Doc, num_doc, tipo_cliente, sec_cliente, cod_emp_sec, fecha_orig, fecha_ven, aplica_a, localidad_aplica_a, valor, num_cheque, valor_cheque, monto_desc, us_crea, fech_crea, bodega, sucid, documento_ref, valor_efectivo, valor_tarjeta, banco, efectivo, tipo_doc_aplica, idtipo, ncf) VALUES(tipo_doc1, arr_recibo[idx].num_nc, recibo.tipo_cliente, recibo.sec_cliente, recibo.cod_emp_sec, recibo.fecha_orig, "010101", arr_recibo[idx].aplica_a, arr_recibo[idx].sucid, arr_recibo[idx].valor_pag, recibo.num_doc, valor_cheque1, arr_recibo[idx].desc_p, usuarios, getdate(), "1", codigo_sucursal, pdocumento_ref[idx], monto_efectivo, monto_cr, cod_mov_ref, ncr, arr_recibo[idx].tipo_doc_aplica, idtipo, qncf) IF tipo_doc1 = "ND" THEN UPDATE cctb00001 SET valor_cheque = numero_recibo WHERE num_doc = recibo.num_doc AND tipo_doc = "ND" END IF END IF END FOR # Actualiza el correlativo en cctb00003 para CUALQUIER tipo de documento # (antes se excluia PG). Si no existe la fila del tipo_doc, la inserta # por primera vez; si existe, la actualiza con el ultimo numero usado. SELECT a.tipo_doc FROM cctb00003 a WHERE a.tipo_Doc = recibo.tipo_doc IF STATUS != NOTFOUND THEN UPDATE cctb00003 SET ult_recibo = recibo.num_doc, us_crea = usuarios, fech_crea = getdate(), us_mod = usuarios, fech_mod = getdate() WHERE tipo_doc = recibo.tipo_doc ELSE INSERT INTO cctb00003( tipo_doc, ult_recibo, sucid) VALUES(recibo.tipo_doc, recibo.num_doc, "1") END IF COMMIT WORK LET numero_msg = 1 CALL msg(numero_msg) LET emp = recibo.cod_emp_sec CLEAR FORM IF recibo.tipo_doc <> 'NC' AND recibo.tipo_doc <> 'ND' THEN LET r_filename = "ccprmt001a.4rp" LET r_output = "PDF" LET preview = 1 -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF fgl_report_loadCurrentSettings( r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default IF preview = 0 THEN CALL fgl_report_selectPreview(1) -- changing default # CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter") ELSE CALL fgl_report_selectPreview(preview) END IF LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT cctb01b TO XML HANDLER HANDLER FOR idx = 1 TO arr_recibo.getLength() # IF arr_recibo[idx].num_nc IS NULL THEN IF arr_recibo[idx].valor_pag IS NOT NULL THEN LET hsucid = arr_recibo[idx].sucid LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF OUTPUT TO REPORT cctb01b( recibo.tipo_cliente, recibo.sec_cliente, recibo.fecha_orig, recibo.num_doc, recibo.cod_emp_sec, recibo.tipo_doc, NULL, NULL, arr_recibo[idx].aplica_a, arr_recibo[idx].desc_p, arr_recibo[idx].valor_pag, nom_cli, nombre_emp, nombre_cta, recibo.comentario, codigodgii, kncf, ditbis) END IF # END IF END FOR FINISH REPORT cctb01b END IF END IF IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN LET r_filename = "ccprmt001encf.4rp" LET r_output = "PDF" LET preview = 1 -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF fgl_report_loadCurrentSettings( r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default IF preview = 0 THEN CALL fgl_report_selectPreview(1) -- changing default # CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter") ELSE CALL fgl_report_selectPreview(preview) END IF LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT cctb01b_encf TO XML HANDLER HANDLER FOR idx = 1 TO arr_recibo.getLength() # IF arr_recibo[idx].num_nc IS NULL THEN IF arr_recibo[idx].valor_pag IS NOT NULL THEN LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF OUTPUT TO REPORT cctb01b_encf( recibo.tipo_cliente, recibo.sec_cliente, recibo.fecha_orig, recibo.num_doc, recibo.cod_emp_sec, recibo.tipo_doc, NULL, NULL, arr_recibo[idx].aplica_a, arr_recibo[idx].desc_p, arr_recibo[idx].valor_pag, nom_cli, nombre_emp, nombre_cta, recibo.comentario, codigodgii, ditbis) END IF # END IF END FOR FINISH REPORT cctb01b_encf UPDATE cctb00001 SET num_cheque = num_doc_ref, itbis = xitbis WHERE num_doc = recibo.num_doc AND tipo_cliente = recibo.tipo_cliente AND sec_cliente = recibo.sec_cliente AND tipo_doc IN ("NC", "ND") END IF END IF { IF recibo.tipo_doc = "PG" THEN UPDATE cctb00003 set ult_recibo = recibo.num_doc, us_crea = usuarios, fech_crea = getdate(), us_mod = usuarios, fech_mod = getdate() WHERE sec_vend = recibo.cod_emp_sec END IF } EXIT DIALOG ON ACTION CANCEL LET INT_FLAG = FALSE CALL msg(2) EXIT PROGRAM END DIALOG END FUNCTION ## Funcion para consultar/modificar un recibo de pago FUNCTION ccpcmf001() DEFINE usuario RECORD us_crea CHAR(9), fech_crea LIKE cctb00001.fech_crea END RECORD ## SE PREPARA EL CRITERIO PARA CONSULTAR/MODIFICAR UN REGISTRO { CONSTRUCT CRITERIO ON a.banco,a.tipo_doc,a.num_doc,a.tipo_cliente, a.sec_cliente, a.cod_emp_sec,a.fecha_orig FROM deposito,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec, fecha_orig } CONSTRUCT CRITERIO ON a.tipo_doc, a.num_doc, a.tipo_cliente, a.sec_cliente, a.cod_emp_sec, a.fecha_orig FROM tipo_doc, num_doc, tipo_cliente, sec_cliente, cod_emp_sec, fecha_orig IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF LET selec = "SELECT a.tipo_doc,a.num_doc,a.tipo_cliente, a.sec_cliente,a.cod_emp_sec,CONVERT(CHAR(10),", "a.fecha_orig,103),ISNULL(b.comentario,' '),c.codigo_dgii,a.banco,a.num_cheque,b.tipo_nc,b.valor_efectivo,", "b.valor_cheque,b.valor_tarjeta,b.chitbis,b.emitida,a.trackid,a.fechaFirmaDigital,a.hash,a.estado_dgii ", " FROM cctb00001 a LEFT OUTER JOIN cctb00011 b ON a.num_doc = b.num_doc AND a.tipo_doc = b.tipo_doc LEFT OUTER JOIN vetb00072 c ON c.documento = a.num_doc AND c.tipo_Doc = a.tipo_doc WHERE ", criterio CLIPPED, " and a.tipo_doc NOT IN('FE','PC','FT') AND a.status_t is null" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO recibo.*, codigodgii, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, ncr, hecha_aqui, p.trackid, xfechaFirmaDigital, xhash, p.estado IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor - monto_desc) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE IF recibo.tipo_Doc = "NC" THEN SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" OR recibo.tipo_Doc = "OD" THEN LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED { SELECT descripcion INTO nombre_cta FROM cgtb00001 WHERE cuenta_no = recibo.cuenta_no } IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, valor_ctrl, nombre_cta, codigodgii, kncf, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, p.trackid, p.estado CALL detallecxc() MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO recibo.*, codigodgii, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, ncr, hecha_aqui IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE SELECT SUM((a.valor + a.monto_desc) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" OR recibo.tipo_Doc = "OD" THEN LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, valor_ctrl, nombre_cta, codigodgii, kncf, ptipo_nc, monto_efectivo, monto_ck, monto_cr COMMAND "Imprimir" SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio, b.num_rnc INTO nom_cli, dir1, dir2, dir3, dir4, rnc 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, valor_ctrl, nombre_cta, codigodgii, ptipo_nc, monto_efectivo, monto_ck, monto_cr LET reimprime = "SI" CASE WHEN recibo.tipo_doc = "PG" LET nombre_tipo = "PAGOS" EXIT CASE WHEN recibo.tipo_doc = "RC" LET nombre_tipo = "PAGOS" EXIT CASE WHEN recibo.tipo_doc = "OC" LET nombre_tipo = "OTROS CREDITOS" EXIT CASE WHEN recibo.tipo_doc = "OD" LET nombre_tipo = "OTROS DEBITOS" EXIT CASE WHEN recibo.tipo_doc = "ED" LET nombre_tipo = "ENTRADAS" EXIT CASE WHEN recibo.tipo_doc = "NC" LET nombre_tipo = "NOTA CREDITO" LET tienencf = "S" EXIT CASE WHEN recibo.tipo_doc = "ND" LET nombre_tipo = "NOTA DEBITO" LET tienencf = "S" EXIT CASE WHEN recibo.tipo_doc = "PI" LET nombre_tipo = "PAGO INTER." EXIT CASE WHEN recibo.tipo_doc = "RM" LET nombre_tipo = "RECIBOS MICELANEOS" EXIT CASE WHEN recibo.tipo_doc = "RC" LET nombre_tipo = "INGRESOS CXC" EXIT CASE WHEN recibo.tipo_doc = "DV" LET nombre_tipo = "DEVOLUCION DINERO" EXIT CASE END CASE LET p_nombre_tipo = nombre_tipo CLIPPED LET chr_impresion = "SI" LET tipo_Doc1 = recibo.tipo_doc CALL detallecxc() IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN LET r_filename = "ccprmt001encf.4rp" LET r_output = "PDF" LET preview = 1 -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF fgl_report_loadCurrentSettings( r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default IF preview = 0 THEN CALL fgl_report_selectPreview(1) -- changing default # CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter") ELSE CALL fgl_report_selectPreview(preview) END IF LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT cctb01b_encf TO XML HANDLER HANDLER FOR idx = 1 TO arr_recibo.getLength() # IF arr_recibo[idx].num_nc IS NULL THEN IF arr_recibo[idx].valor_pag IS NOT NULL THEN # LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF OUTPUT TO REPORT cctb01b_encf( recibo.tipo_cliente, recibo.sec_cliente, recibo.fecha_orig, recibo.num_doc, recibo.cod_emp_sec, recibo.tipo_doc, NULL, NULL, arr_recibo[idx].aplica_a, arr_recibo[idx].desc_p, arr_recibo[idx].valor_pag, nom_cli, nombre_emp, nombre_cta, recibo.comentario, codigodgii, ditbis) END IF # END IF END FOR FINISH REPORT cctb01b_encf END IF END IF IF recibo.tipo_doc = 'RC' OR recibo.tipo_doc = 'OC' OR recibo.tipo_doc = 'OD' THEN LET r_filename = "ccprmt001a.4rp" LET r_output = "PDF" LET preview = 1 -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF fgl_report_loadCurrentSettings( r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default IF preview = 0 THEN CALL fgl_report_selectPreview(1) -- changing default # CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter") ELSE CALL fgl_report_selectPreview(preview) END IF LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT cctb01b TO XML HANDLER HANDLER FOR idx = 1 TO arr_recibo.getLength() # IF arr_recibo[idx].num_nc IS NULL THEN IF arr_recibo[idx].valor_pag IS NOT NULL THEN LET hsucid = arr_recibo[idx].sucid LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF OUTPUT TO REPORT cctb01b( recibo.tipo_cliente, recibo.sec_cliente, recibo.fecha_orig, recibo.num_doc, recibo.cod_emp_sec, recibo.tipo_doc, NULL, NULL, arr_recibo[idx].aplica_a, arr_recibo[idx].desc_p, arr_recibo[idx].valor_pag, nom_cli, nombre_emp, nombre_cta, recibo.comentario, codigodgii, kncf, ditbis) END IF # END IF END FOR FINISH REPORT cctb01b END IF END IF COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO recibo.*, codigodgii, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, ncr IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" OR recibo.tipo_Doc = "OD" THEN LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, valor_ctrl, nombre_cta, codigodgii, kncf, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO recibo.*, codigodgii, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, ncr IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" THEN LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, valor_ctrl, nombre_cta, codigodgii, kncf, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, banco COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO recibo.*, codigodgii, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr, ncr IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL ELSE SELECT SUM((a.valor) * - 1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" THEN LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, valor_ctrl, nombre_cta, codigodgii, ptipo_nc, cod_mov_ref, num_doc_ref, ptipo_nc, monto_efectivo, monto_ck, monto_cr COMMAND "Escoger" " Actualiza Registro Cancela Operacion" ## AQUI SE MODIFICAN/ACTUALIZAN LOS DATOS DEL REGISTRO { ESTA EN COMENTARIO PORQUE EL USUARIO EN CXC DE EXTERIOR ESTA REALIZANDO UNA LABOR INMEDIATAMENTE TERMINE DEBE COMUNICARSE CON TI 31/10/2020 LET p_fechas = recibo.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF } IF recibo.tipo_doc = 'NC' THEN CALL fgl_winmessage( "INFO", "NO PUEDES MODIFICAR NOTAS DE CREDITOS", "INFO") CONTINUE MENU END IF LET reimprime = "NO" LET chr_impresion = 'NO' INPUT BY NAME codigodgii, recibo.tipo_cliente, recibo.sec_cliente, recibo.cod_emp_sec, recibo.fecha_orig, valor_ctrl, monto_efectivo, monto_ck, monto_cr, ptipo_nc, cod_mov_ref, num_doc_ref WITHOUT DEFAULTS ## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE AFTER FIELD tipo_cliente IF recibo.tipo_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF # Controla que el TIPO DE MOVIMIENTO FI solo sea a tipo clientes 13 IF recibo.tipo_doc = "FI" AND recibo.tipo_cliente = 12 THEN LET numero_msg = 240 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF AFTER FIELD cod_mov_ref IF recibo.tipo_doc = 'NC' THEN SELECT a.descrip_mov INTO pdescrip_mov FROM iptb00005 a WHERE a.cod_mov = cod_mov_ref AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD cod_mov_ref END IF DISPLAY BY NAME pdescrip_mov END IF AFTER FIELD num_doc_ref IF recibo.tipo_doc = "NC" AND ptipo_nc = '01' THEN IF num_doc_ref > 0 THEN SELECT DISTINCT a.num_doc FROM iptb00006 a WHERE a.num_doc = num_doc_ref AND a.cod_mov = cod_mov_ref AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_doc_ref END IF END IF END IF AFTER FIELD sec_cliente IF recibo.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF SELECT b.nombre, a.calle, a.casa_num, a.urbanizacion, a.barrio INTO nom_cli, dir1, dir2, dir3, dir4 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 IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF LET pdireccion = dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4 DISPLAY BY NAME nom_cli ATTRIBUTE(BOLD) AFTER FIELD cod_emp_sec IF recibo.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF SELECT nom1_emp, apell1_emp INTO descrip2, descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED DISPLAY BY NAME nombre_emp ATTRIBUTE(BOLD) IF recibo.tipo_doc = "ND" THEN SELECT sec_vend FROM vetb00028 WHERE tipo_cliente = recibo.tipo_cliente AND sec_cliente = recibo.sec_cliente IF status != NOTFOUND THEN LET numero_msg = 357 CALL msg(numero_msg) END IF END IF ## VENTANAS PARA DESPLEGAR LOS CLIENTES Y LOS EMPLEADOS AFTER FIELD fecha_orig IF recibo.fecha_orig IS NULL OR recibo.fecha_orig > TODAY THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = recibo.fecha_orig { ESTA EN COMENTARIO PORQUE EL USUARIO EN CXC DE EXTERIOR ESTA REALIZANDO UNA LABOR INMEDIATAMENTE TERMINE DEBE COMUNICARSE CON TI 31/10/2020 CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF } AFTER FIELD valor_ctrl IF valor_ctrl IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_ctrl END IF IF recibo.tipo_doc = 'NC' THEN NEXT FIELD ptipo_nc ELSE LET ptipo_nc = NULL END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CONTINUE MENU END IF CASE WHEN recibo.tipo_doc = "PG" LET nombre_tipo = "PAGOS" EXIT CASE WHEN recibo.tipo_doc = "OC" LET nombre_tipo = "OTROS CREDITOS" EXIT CASE WHEN recibo.tipo_doc = "ED" LET nombre_tipo = "ENTRADAS" EXIT CASE WHEN recibo.tipo_doc = "NC" LET nombre_tipo = "NOTA CREDITO" EXIT CASE WHEN recibo.tipo_doc = "ND" LET nombre_tipo = "NOTA DEBITO" EXIT CASE WHEN recibo.tipo_doc = "PI" LET nombre_tipo = "PAGO INTER." EXIT CASE WHEN recibo.tipo_doc = "DV" LET nombre_tipo = "DEVOLUCION DINERO" EXIT CASE END CASE # DISPLAY BY NAME nombre_tipo ATTRIBUTE (BOLD) LET p_nombre_tipo = nombre_tipo IF recibo.tipo_doc = 'RC' THEN IF monto_efectivo IS NULL THEN LET monto_efectivo = 0 END IF IF monto_cr IS NULL THEN LET monto_cr = 0 END IF IF monto_ck IS NULL THEN LET monto_ck = 0 END IF LET valor_ctrl = monto_efectivo + monto_cr + monto_ck DISPLAY BY NAME valor_ctrl END IF EXIT INPUT END INPUT CALL detallecxc() CALL set_count(idx - 1) LABEL arreglo2: ## AQUI SE MODIFICAN/ACTUALIZAN LOS CAMPOS DEL ARREGLO INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.* BEFORE INPUT CALL localidades("1") ## VENTANA PARA BUSCAR LOS DOCUMENTOS ON KEY(CONTROL-W) LET curr = arr_curr() LET scr_l = scr_line() CASE WHEN INFIELD(aplica_a) CALL busca_aplicacion() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD aplica_a END IF IF existe = "N" THEN LET existe = "S" NEXT FIELD aplica_a END IF DISPLAY arr_recibo[curr].aplica_a TO s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD aplica_a END IF NEXT FIELD aplica_a END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD num_nc LET nc_pend = 0 IF recibo.tipo_doc = "AV" THEN LET arr_recibo[curr].num_nc = NULL DISPLAY arr_recibo[curr].num_nc TO s_recibo[scr_l].num_nc END IF IF arr_recibo[curr].num_nc IS NOT NULL THEN SELECT UNIQUE num_doc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_nc END IF LET valor_nc = 0 SELECT SUM(a.valor + a.monto_desc) INTO valor_nc FROM cctb00001 a WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND a.num_doc = arr_recibo[curr].num_nc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente IF valor_nc IS NULL THEN LET valor_nc = 0 END IF END IF AFTER FIELD aplica_a IF arr_recibo[curr].aplica_a IS NOT NULL THEN LET bandera = 0 CALL repetir() IF bandera = 1 THEN NEXT FIELD aplica_a END IF IF recibo.tipo_doc = "AV" THEN IF recibo.num_doc != arr_recibo[curr].aplica_a THEN ERROR "Si Es Un Avance Debe Aplicarse a Si Mismo" NEXT FIELD aplica_a END IF END IF IF recibo.tipo_doc != "AV" AND arr_recibo[curr].aplica_a = recibo.num_doc THEN LET numero_msg = 131 CALL msg(numero_msg) NEXT FIELD aplica_a END IF # Controla que la factura pertenezca al cliente IF recibo.tipo_doc = "PG" OR recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN SELECT UNIQUE a.documento_ref, a.tipo_doc INTO pdocumento_ref[curr], arr_Recibo[curr].tipo_doc_aplica FROM cctb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.sucid = arr_recibo[curr].sucid AND (a.tipo_doc = arr_recibo[curr].tipo_doc_aplica) AND a.status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF # notas de creditos IF recibo.tipo_doc = 'NC' AND ptipo_nc = '01' THEN SELECT DISTINCT a.fact_no FROM iptb00006 a WHERE a.cod_mov = cod_mov_ref AND a.num_doc = num_doc_ref AND a.fact_no = arr_recibo[curr].aplica_a AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage( "INFO", "ESTA FACTURA NO EXISTE PARA EL DOCUMENTO DE ALMACEN ESPECIFICADO", "INFO") NEXT FIELD aplica_A END IF END IF # Busca el valor pendiente de la factura IF arr_recibo[curr].num_nc IS NULL THEN SELECT SUM(a.valor + a.monto_desc) INTO valor_fac FROM cctb00001 a WHERE a.aplica_a = arr_recibo[curr].aplica_a AND a.status_t IS NULL AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente LET arr_recibo[curr].valor_pen = valor_fac ELSE LET arr_recibo[curr].valor_pen = 0 END IF DISPLAY arr_recibo[curr].valor_pen TO s_recibo[scr_l].valor_pen DISPLAY arr_recibo[curr].tipo_Doc_aplica TO s_recibo[scr_l].tipo_Doc_aplica END IF BEFORE FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 NEXT FIELD valor_pag END IF IF arr_recibo[curr].desc_p IS NULL THEN LET arr_recibo[curr].desc_p = 0 END IF DISPLAY arr_recibo[curr].desc_p TO s_recibo[scr_l].desc_p AFTER FIELD desc_p IF arr_recibo[curr].num_nc IS NOT NULL THEN LET arr_recibo[curr].desc_p = 0 ELSE IF arr_recibo[curr].desc_p IS NULL THEN LET arr_recibo[curr].desc_p = 0 END IF END IF AFTER FIELD valor_pag IF arr_recibo[curr].aplica_a IS NULL AND arr_recibo[curr].num_nc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF arr_recibo[curr].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_pag END IF LET remanente = valor_ctrl LET p_total = 0 FOR idx = 1 TO arr_count() IF arr_recibo[idx].desc_p < 0 THEN LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF IF arr_recibo[idx].valor_pag IS NOT NULL THEN IF arr_recibo[idx].num_nc IS NULL THEN LET p_total = p_total - arr_recibo[idx].valor_pag END IF END IF END FOR IF p_total < 0 THEN LET p_total = p_total * -1 END IF DISPLAY BY NAME remanente ATTRIBUTE(BLUE) IF p_total != valor_ctrl THEN LET numero_msg = 502 CALL msg(numero_msg) END IF DISPLAY BY NAME p_total ATTRIBUTE(BOLD) # Controla que el valor aplicado a las facturas no exceda el monto del recibo AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF FOR idx = 1 TO arr_count() IF arr_recibo[idx].aplica_a IS NOT NULL THEN IF arr_recibo[idx].valor_pag IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF END FOR IF recibo.tipo_doc <> 'NC' OR recibo.tipo_doc <> 'ND' THEN IF p_total != valor_ctrl THEN LET numero_msg = 502 CALL msg(numero_msg) NEXT FIELD aplia_a END IF END IF END INPUT IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN LET ncr = NULL # PROMPT "TIENE ITBIS(S/N)? " FOR CHAR ncr # LET ncr = UPSHIFT(ncr) END IF LET opc = NULL LET valor_cheque1 = NULL IF recibo.tipo_doc = "ND" THEN PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? " FOR CHAR opc LET opc = UPSHIFT(opc) IF opc = "S" THEN LET valor_cheque1 = recibo.num_doc ELSE LET valor_cheque1 = NULL END IF END IF ## AQUI SE REALIZA LA MODIFICACION DEL REGISTRO BEGIN WORK IF recibo.tipo_doc = "PG" THEN DELETE FROM cctb00001 WHERE num_cheque = recibo.num_doc AND tipo_doc IN ("PG", "AV") AND valor < 0 AND fecha_orig = recibo.fecha_orig AND sucid = codigo_sucursal ELSE IF recibo.tipo_doc = "ND" THEN SELECT UNIQUE a.valor_cheque INTO valor_cheque1 FROM cctb00001 a WHERE a.num_doc = recibo.num_doc AND a.tipo_doc = "ND" END IF DELETE FROM cctb00001 WHERE num_doc = recibo.num_doc AND @tipo_doc = recibo.tipo_doc AND fecha_orig = recibo.fecha_orig AND sucid = codigo_sucursal END IF #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 cctb01 TO archivo UPDATE cctb00011 SET tipo_cliente = recibo.tipo_cliente, sec_cliente = recibo.sec_cliente, comentario = recibo.comentario, valor_efectivo = monto_efectivo, valor_cheque = monto_ck, valor_tarjeta = monto_cr, us_mod = usuarios, fech_mod = getdate() WHERE tipo_doc = recibo.tipo_doc AND num_doc = recibo.num_doc FOR idx = 1 TO arr_count() IF arr_recibo[idx].aplica_a IS NOT NULL OR arr_recibo[idx].num_nc IS NOT NULL THEN IF recibo.tipo_doc != "ND" AND recibo.tipo_doc <> "OD" THEN IF recibo.tipo_doc != "FI" THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF END IF LET tipo_doc1 = NULL IF arr_recibo[idx].num_nc IS NOT NULL THEN LET tipo_doc1 = "AV" ELSE LET arr_recibo[idx].num_nc = recibo.num_doc LET tipo_doc1 = recibo.tipo_doc IF recibo.tipo_doc = 'NC' THEN LET recibo.num_doc = num_doc_ref END IF END IF IF recibo.tipo_doc = "DV" THEN IF ARR_RECIBO[IDX].VALOR_PAG < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF IF arr_recibo[idx].valor_pag > 0 THEN LET valor_aplicado = arr_recibo[idx].valor_pag * -1 END IF IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN LET xorden = NULL SELECT a.num_oc INTO xorden FROM prtb00012 a WHERE a.cotizacion_no = pdocumento_ref[idx] AND a.status_t IS NULL # PARA REAPLICAR LOS AVANCES CUANDO ES POR DEVOLUCION DE DINERO DEL AVANCE ORIGINAL INSERT INTO cctb00001( cod_cia, tipo_doc, num_doc, tipo_cliente, sec_cliente, cod_emp, cod_emp_sec, fecha_orig, fecha_ven, aplica_a, num_cheque, valor, valor_cheque, costo, monto_desc, us_crea, fech_crea, banco, tipo_doc_aplica, documento_ref, num_oc, sucid) VALUES(p_companias.cod_comp, 'AP', arr_recibo[idx].aplica_a, recibo.tipo_cliente, recibo.sec_cliente, codigo_sucursal, recibo.cod_emp_sec, recibo.fecha_orig, "010101", arr_recibo[idx].aplica_a, recibo.num_doc, valor_aplicado, valor_cheque1, recibo.num_doc, arr_recibo[idx].desc_p, SUSER_SNAME(), GETDATE(), pdocumento_ref[idx], arr_recibo[idx].tipo_doc_aplica, pdocumento_ref[idx], xorden, codigo_sucursal) END IF END IF IF recibo.tipo_doc = "OC" THEN IF ARR_RECIBO[IDX].VALOR_PAG > 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF END IF IF arr_recibo[idx].desc_p IS NULL THEN LET arr_recibo[idx].desc_p = 0 END IF IF arr_recibo[idx].desc_p < 0 THEN LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 END IF IF recibo.tipo_doc = 'NC' THEN LET arr_recibo[1].aplica_a = xfactura # LET monto_efectivo = xitbis END IF INSERT INTO cctb00001( tipo_Doc, num_doc, tipo_cliente, sec_cliente, cod_emp_sec, fecha_orig, fecha_ven, aplica_a, localidad_aplica_a, banco, num_cheque, valor, valor_cheque, monto_desc, us_crea, fech_crea, bodega, sucid, documento_ref, valor_efectivo, valor_tarjeta, efectivo, tipo_doc_aplica) VALUES(tipo_doc1, arr_recibo[idx].num_nc, recibo.tipo_cliente, recibo.sec_cliente, recibo.cod_emp_sec, recibo.fecha_orig, "010101", arr_recibo[idx].aplica_a, arr_recibo[idx].sucid, cod_mov_ref, recibo.num_doc, arr_recibo[idx].valor_pag, valor_cheque1, arr_recibo[idx].desc_p, usuarios, getdate(), "1", codigo_sucursal, pdocumento_ref[idx], monto_efectivo, monto_cr, ncr, arr_recibo[idx].tipo_doc_aplica) IF recibo.tipo_doc = 'NC' THEN LET recibo.num_doc = arr_recibo[idx].num_nc END IF LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF END IF END FOR COMMIT WORK IF recibo.tipo_doc <> 'NC' AND recibo.tipo_doc <> 'ND' THEN LET r_filename = "ccprmt001a.4rp" LET r_output = "PDF" LET preview = 1 -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF fgl_report_loadCurrentSettings( r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default IF preview = 0 THEN CALL fgl_report_selectPreview(1) -- changing default # CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter") ELSE CALL fgl_report_selectPreview(preview) END IF LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT cctb01b TO XML HANDLER HANDLER FOR idx = 1 TO arr_recibo.getLength() # IF arr_recibo[idx].num_nc IS NULL THEN IF arr_recibo[idx].valor_pag IS NOT NULL THEN LET hsucid = arr_recibo[idx].sucid LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF OUTPUT TO REPORT cctb01b( recibo.tipo_cliente, recibo.sec_cliente, recibo.fecha_orig, recibo.num_doc, recibo.cod_emp_sec, recibo.tipo_doc, NULL, NULL, arr_recibo[idx].aplica_a, arr_recibo[idx].desc_p, arr_recibo[idx].valor_pag, nom_cli, nombre_emp, nombre_cta, recibo.comentario, codigodgii, kncf, ditbis) END IF # END IF END FOR FINISH REPORT cctb01b END IF END IF # IMPRESION e-NCF IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN LET r_filename = "ccprmt001encf.4rp" LET r_output = "PDF" LET preview = 1 -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF fgl_report_loadCurrentSettings( r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default IF preview = 0 THEN CALL fgl_report_selectPreview(1) -- changing default # CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter") ELSE CALL fgl_report_selectPreview(preview) END IF LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE EXIT PROGRAM END IF --run the report IF handler IS NOT NULL THEN -- report engine was configured ok START REPORT cctb01b_encf TO XML HANDLER HANDLER FOR idx = 1 TO arr_recibo.getLength() IF arr_recibo[idx].valor_pag IS NOT NULL THEN LET hsucid = arr_recibo[idx].sucid LET hsucid = arr_recibo[idx].sucid IF arr_recibo[idx].valor_pag < 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF OUTPUT TO REPORT cctb01b_encf( recibo.tipo_cliente, recibo.sec_cliente, recibo.fecha_orig, recibo.num_doc, recibo.cod_emp_sec, recibo.tipo_doc, NULL, NULL, arr_recibo[idx].aplica_a, arr_recibo[idx].desc_p, arr_recibo[idx].valor_pag, nom_cli, nombre_emp, nombre_cta, recibo.comentario, codigodgii, ditbis) END IF END FOR FINISH REPORT cctb01b_encf END IF END IF #----------------------------------------------------------------------------------------------------- LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY("N") "aNular" ## AQUI SE REALIZA LA ANULACION DE UN REGISTRO LET p_fechas = recibo.fecha_orig CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF IF recibo.tipo_doc = "PG" THEN UPDATE cctb00001 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE tipo_doc IN ("AV", "PG") AND num_cheque = recibo.num_doc ELSE UPDATE cctb00001 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE tipo_doc = recibo.tipo_doc AND num_doc = recibo.num_doc END IF LET numero_msg = 82 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM FOR idx = 1 TO 3 LET arr_recibo[idx].aplica_a = NULL LET arr_recibo[idx].valor_pen = NULL LET arr_recibo[idx].valor_pag = NULL DISPLAY arr_recibo[idx].aplica_a TO s_recibo[idx].aplica_a DISPLAY arr_recibo[idx].valor_pen TO s_recibo[idx].valor_pen DISPLAY arr_recibo[idx].valor_pag TO s_recibo[idx].valor_pag END FOR EXIT MENU END MENU END FUNCTION FUNCTION busca_aplicacion() OPEN WINDOW busqueda1 AT 10, 10 WITH FORM "ccfmwd001" ATTRIBUTE(BORDER, FORM LINE FIRST + 1, COMMENT LINE LAST) CALL ui.Interface.LoadStyles("mbsStyle") DECLARE aplicar CURSOR FOR SELECT a.aplica_a, SUM(a.valor + a.monto_desc) FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.status_t IS NULL GROUP BY a.aplica_a HAVING SUM(a.valor + a.monto_desc) > 0 ORDER BY 1 LET existe = "N" LET idx = 1 FOREACH aplicar INTO aplica_wd[idx].aplica_a, aplica_wd[idx].pendiente IF status = NOTFOUND THEN LET existe = "N" EXIT FOREACH END IF CALL integridad() # Busca el tipo de movimiento SELECT UNIQUE a.tipo_doc INTO tipo_doc2 FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc NOT IN ("PG", "AV") AND a.num_doc = aplica_wd[idx].aplica_a) AND a.status_t IS NULL IF status < 0 THEN CALL integridad() LET tipo_doc2 = "SQ" END IF LET aplica_wd[idx].tipo_doc = tipo_doc2 # Busca Nota de credito LET valor_ctrl1 = 0 IF tipo_doc2 = "AV" THEN SELECT SUM(a.valor * - 1) INTO valor_ctrl1 FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.num_doc = aplica_wd[idx].aplica_a AND a.tipo_doc = "AV" AND a.num_doc != a.aplica_a) AND a.status_t IS NULL IF valor_ctrl1 IS NULL THEN LET valor_ctrl1 = 0 END IF LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente - valor_ctrl1 END IF LET existe = "S" IF aplica_wd[idx].pendiente != 0 THEN LET idx = idx + 1 END IF END FOREACH IF existe = "N" AND idx = 1 THEN LET numero_msg = 127 CALL msg(numero_msg) GOTO salir END IF CALL set_count(idx - 1) DISPLAY ARRAY aplica_wd TO consart.* LET INT_FLAG = FALSE LET curr1 = arr_curr() LET arr_recibo[curr].aplica_a = aplica_wd[curr1].aplica_a LET arr_recibo[curr].valor_pen = aplica_wd[curr1].pendiente LABEL salir: CLOSE WINDOW busqueda1 END FUNCTION { FUNCTION busca_aplicacion() OPEN WINDOW busqueda1 AT 10,10 WITH FORM "ccfmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last) DECLARE aplicar CURSOR FOR SELECT a.aplica_a,SUM(a.valor+a.monto_desc) FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.status_t is null {and a.fech_crea > datetime (1994-01-01 08:00) year to minute# GROUP BY a.aplica_a HAVING SUM(a.valor+a.monto_desc) > 0 ORDER BY a.aplica_A LET existe = "N" LET idx = 1 FOREACH aplicar INTO aplica_wd[idx].aplica_a,aplica_wd[idx].pendiente IF status = NOTFOUND THEN LET existe = "N" EXIT FOREACH END IF { # Busca el tipo de movimiento SELECT unique a.tipo_doc INTO tipo_doc2 FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente and a.sec_cliente = recibo.sec_cliente and a.tipo_doc != "PG" and a.num_doc = aplica_wd[idx].aplica_a) and a.status_t is null IF status < 0 THEN LET tipo_doc2 = "SQ" END IF # LET tipo_doc2 = "FT" LET aplica_wd[idx].tipo_doc = tipo_doc2 # Busca Nota de credito LET valor_ctrl1 = 0 IF tipo_doc2 = "AV" THEN SELECT SUM(a.valor*-1) INTO valor_ctrl1 FROM cctb00001 a WHERE (a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.num_doc = aplica_wd[idx].aplica_a AND a.tipo_doc = "AV" AND a.num_doc != a.aplica_a) AND a.status_t IS NULL IF valor_ctrl1 is null THEN LET valor_ctrl1 = 0 END IF LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente - valor_ctrl1 END IF LET existe = "S" IF aplica_wd[idx].pendiente != 0 THEN LET idx = idx + 1 END IF END FOREACH IF existe = "N" and idx = 1 THEN LET numero_msg = 127 CALL msg(numero_msg) GOTO salir END IF CALL set_count(idx-1) DISPLAY ARRAY aplica_wd TO consart.* LET curr1 = arr_curr() LET arr_recibo[curr].aplica_a = aplica_wd[curr1].aplica_a LET arr_recibo[curr].valor_pen = aplica_wd[curr1].pendiente LABEL salir: CLOSE WINDOW busqueda1 END FUNCTION } FUNCTION repetir() DEFINE ant_art RECORD num_nc INTEGER, aplica_a INTEGER, valor_pag DECIMAL(12, 2) END RECORD LET ant_art.num_nc = arr_recibo[curr].num_nc LET ant_art.aplica_a = arr_recibo[curr].aplica_a LET ant_art.valor_pag = arr_recibo[curr].valor_pag FOR idx = 1 TO arr_count() IF idx != curr THEN IF arr_recibo[idx].aplica_a IS NOT NULL AND arr_recibo[idx].valor_pag IS NOT NULL THEN IF arr_recibo[idx].num_nc = ant_art.num_nc AND arr_recibo[idx].aplica_a = ant_art.aplica_a AND arr_recibo[idx].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 END FUNCTION FUNCTION consulta_clientes() OPEN WINDOW busqueda AT 7, 12 WITH FORM "vefmwd002" ATTRIBUTE(BORDER, FORM LINE FIRST + 2, COMMENT LINE LAST, MESSAGE LINE LAST) LET int_flag = FALSE CONSTRUCT criterio ON a.nombre FROM nombre IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_c END IF LET selec2 = "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 busca_clientes FROM selec2 DECLARE buscar_clientes CURSOR FOR busca_clientes LET idx = 1 FOREACH buscar_clientes INTO arr_clientes[idx].* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) MESSAGE " Selecciona Cliente donde esta el cursor" DISPLAY ARRAY arr_clientes TO s_clientes.* LET curr1 = arr_curr() LET cliente_dir.tipo_cliente = arr_clientes[curr1].tipo_cliente LET cliente_dir.sec_cliente = arr_clientes[curr1].sec_cliente LET descrip1 = arr_clientes[curr1].nombre LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION FUNCTION consulta_empleados() OPEN WINDOW busqueda2 AT 7, 12 WITH FORM "vefmwd001" ATTRIBUTE(BORDER, FORM LINE FIRST + 2, COMMENT LINE LAST, MESSAGE LINE LAST) LET int_flag = FALSE CONSTRUCT criterio ON a.nom1_emp FROM descrip6 LET selec2 = "SELECT num_emp,a.nom1_emp,a.apell1_emp ", "FROM adtb00003 a", "WHERE a.status_t is null AND ", criterio CLIPPED, " ORDER BY 1 " IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_e END IF PREPARE busca_empleados FROM selec2 IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF END IF DECLARE buscar_empleados CURSOR FOR busca_empleados LET idx = 1 FOREACH buscar_empleados INTO arr_empleados[idx].* IF status = NOTFOUND THEN EXIT FOREACH END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET empleados[idx].num_emp = arr_empleados[idx].num_emp LET empleados[idx].descrip6 = arr_empleados[idx].nom1_emp CLIPPED, " ", arr_empleados[idx].apell1_emp CLIPPED LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) MESSAGE " Selecciona Empleado donde esta el cursor" DISPLAY ARRAY empleados TO s_empleados.* LET curr1 = arr_curr() LET transportista.sec_transp = empleados[curr1].num_emp LET descrip6 = empleados[curr1].descrip6 LABEL salir_consulta_e: CLOSE WINDOW busqueda2 END FUNCTION { FUNCTION anular() OPEN WINDOW anula AT 7,5 WITH FORM "vefmwd006" ATTRIBUTE (BORDER, COMMENT LINE LAST - 1,PROMPT LINE LAST,FORM LINE FIRST + 1) INPUT BY NAME p_fact_no AFTER FIELD p_fact_no SELECT UNIQUE fecha_factura,orden,tipo_cliente,sec_cliente,neto INTO fact_gral.fecha_factura,fact_gral.orden,fact_gral.tipo_cliente, fact_gral.sec_cliente,fact_gral.total_fact FROM vetb00002 WHERE factura = p_fact_no AND status_t IS NULL AND fech_crea > datetime (1994-03-31 08:00) year to minute IF STATUS = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) NEXT FIELD p_fact_no END IF SELECT a.nombre INTO fact_gral.nombre FROM vetb00004 a WHERE a.tipo_cliente = fact_gral.tipo_cliente AND a.sec_cliente = fact_gral.sec_cliente DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente, fact_gral.total_fact,fact_gral.nombre ATTRIBUTE(blue) IF fact_gral.fecha_factura < "310394" THEN LET numero_msg = 58 CALL msg(numero_msg) GOTO salir END IF LET p_fechas = fact_gral.fecha_factura IF fact_gral.fecha_factura != TODAY THEN ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY" RETURN END IF CALL prd() IF bandera =1 THEN SLEEP 2 EXIT INPUT END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF EXIT INPUT END INPUT IF bandera = 1 THEN LET bandera = 0 GOTO salir END IF # Este Int_flag es porque tuve que salir del input con el int_flag verdadero # y asi poder salir del window sin problemas IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GOTO salir END IF LABEL atras: PROMPT "Esta seguro de Anular Esta Factura? (S/N)" FOR CHAR opt3 LET opt3 = UPSHIFT(opt3) IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GOTO salir END IF IF opt3 != "S" AND opt3 != "N" THEN LET numero_msg = -1301 CALL msg(numero_msg) GOTO atras END IF IF opt3 = "N" THEN GOTO salir END IF IF opt3 = "S" THEN UPDATE vetb00002 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE iptb00006 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE num_doc = p_fact_no AND cod_mov IN (30,31,32) AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE vetb00003 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE cctb00001 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND fech_crea > datetime (1994-03-31 08:00) year to minute UPDATE cctb00001 SET status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE aplica_a = p_fact_no AND tipo_doc = "PC" # ANULACION DE LAS SERIES IF fact_gral.ventas = "1" THEN LET p_codigo = 30 ELSE LET p_codigo = 31 END IF UPDATE vetb00042 set status_t = "E", us_mod = usuarios, fech_mod = getdate() WHERE factura = p_fact_no AND cod_mov = p_codigo LET numero_msg = 82 CALL msg(numero_msg) END IF LABEL salir: LET fact_gral.fecha_factura = TODAY #CLOSE FORM vefmwd006 CLOSE WINDOW anula END FUNCTION } REPORT cctb01( p_tipo_cliente, p_sec_cliente, p_fecha_orig, p_num_doc, p_cod_emp_sec, p_tipo_doc, p_cuenta_no, p_banco, p_aplica_a, p_sucid, p_monto_desc, p_valor, p_nombre, p_nomb_emp, p_nombre_cta, p_comentario) DEFINE p_tipo_cliente LIKE cctb00001.tipo_cliente, p_sec_cliente LIKE cctb00001.sec_cliente, p_fecha_orig LIKE cctb00001.fecha_orig, p_num_doc LIKE cctb00001.num_doc, p_cod_emp_sec LIKE cctb00001.cod_emp_sec, p_tipo_doc LIKE cctb00001.tipo_doc, p_cuenta_no LIKE cctb00001.cuenta_no, p_banco LIKE cctb00001.banco, p_aplica_a LIKE cctb00001.aplica_a, p_sucid SMALLINT, p_monto_desc LIKE cctb00001.monto_desc, p_valor LIKE cctb00001.valor, p_nomb_emp CHAR(40), p_nombre_cta CHAR(30), p_cod_cia LIKE cctb00001.cod_cia, pcodigodgii VARCHAR(19), pncf INT, ncf_factura VARCHAR(19), p_localidad VARCHAR(30), articulos RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DEC(12, 5), descrip_Esp VARCHAR(70) END RECORD DEFINE hora CHAR(5), l SMALLINT, p_nombre LIKE vetb00004.nombre, p_comentario CHAR(120), #LIKE cctb00011.comentario vtot DEC(16,2), vgdesc DEC(16,2), vgval DEC(16,2), vgtot DEC(16,2) OUTPUT TOP MARGIN 0 BOTTOM MARGIN 5 LEFT MARGIN 0 ORDER BY p_sec_cliente, p_num_doc FORMAT PAGE HEADER LET hora = TIME SELECT a.cod_comp, a.nombre, a.rnc, a.direccion, a.telefono, a.fax, a.ambientedgii INTO p_companias.cod_comp, p_companias.nombre, p_companias.rnc, p_companias.direccion, p_companias.telefono, p_companias.fax, p_companias.ambientedgii FROM companias a LET lj = (110 - LENGTH(p_companias.nombre CLIPPED)) / 2 PRINT comp_on PRINT COLUMN 2, "ccprmt001", COLUMN 15, negrilla_on, COLUMN lj, p_companias.nombre, COLUMN 65, negrillas_of, COLUMN 90, "Pag. ", PAGENO PRINT COLUMN lj, "RNC: ", p_companias.rnc LET lj = (110 - LENGTH(p_companias.direccion CLIPPED)) / 2 PRINT COLUMN 1, negrilla_on, COLUMN lj, p_companias.direccion, COLUMN 65, negrillas_of #, # column 90, today using "dd/mm/yyyy" LET lj = (110 - LENGTH(p_nombre_tipo)) / 2 PRINT COLUMN 1, negrilla_on, COLUMN lj, p_nombre_tipo CLIPPED, COLUMN 65, negrillas_of, COLUMN 93, hora SKIP 3 LINES BEFORE GROUP OF p_sec_cliente SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S" IF pitbis IS NULL THEN LET pitbis = 0 END IF PRINT COLUMN 5, "LOCALIDAD :", nombre_sucursal PRINT COLUMN 5, " NUMERO DOCUM. : ", p_num_doc USING "########" PRINT COLUMN 5, " CUENTA : ", p_cuenta_no CLIPPED, " - ", p_nombre_cta CLIPPED, COLUMN 70, " DEPOSITO : ", p_banco PRINT COLUMN 5, " CLIENTE : ", p_tipo_cliente, "-", p_sec_cliente USING "<<<<<", " - ", p_nombre CLIPPED, COLUMN 70, " FECHA : ", p_fecha_orig USING "dd/mm/yyyy" PRINT COLUMN 5, "DIRECCION : ", pdireccion CLIPPED PRINT COLUMN 5, " VENDEDOR : ", p_cod_emp_sec, " - ", p_nomb_emp CLIPPED PRINT COLUMN 5, " TIPO PAGO : ", p_tipo_doc CLIPPED, " - ", p_nombre_tipo CLIPPED PRINT COLUMN 5, " NCF : ", codigodgii CLIPPED, kncf USING "&&&&&&&&" IF fecha_vencimiento > '05/01/2018' THEN PRINT COLUMN 5, " Valido hasta : ", fecha_vencimiento USING "dd/mm/yyyy" END IF #PRINT doce IF p_tipo_Doc = 'NC' OR p_tipo_doc = 'ND' THEN SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S" IF pitbis IS NULL THEN LET pitbis = 0 END IF END IF PRINT p_cod_cia USING "<<<<" PRINT COLUMN 1, "===============================================================", "======================================================" PRINT COLUMN 5, "Aplica Factura", COLUMN 20, "Localidad ", COLUMN 43, "Descuento", COLUMN 64, "Valor", 8 SPACES, "ITBIS", COLUMN 90, "TOTAL", 11 SPACES, "NCF APLICADO" # print column 37, " S/ITBIS" PRINT COLUMN 1, "===============================================================", "======================================================" SKIP 1 LINE ON EVERY ROW IF p_tipo_Doc = "NC" OR p_tipo_doc = "ND" THEN IF ncr = "S" THEN LET ditbis = p_valor * (pitbis / 100) ELSE LET ditbis = 0 END IF IF chr_impresion <> "SI" THEN DISPLAY "esto ", chr_impresion, " ", ditbis UPDATE cctb00001 SET valor_cheque = p_valor, valor_efectivo = ditbis, valor = p_valor + ditbis, banco = cod_mov_ref, num_cheque = num_doc_ref, efectivo = ncr WHERE tipo_doc = p_tipo_Doc AND num_doc = p_num_doc AND aplica_a = p_aplica_a AND tipo_cliente = p_tipo_cliente AND sec_cliente = p_sec_cliente END IF SELECT a.codigo_dgii, a.ncf INTO pcodigodgii, pncf FROM vetb00072 a WHERE a.tipo_Doc IN ('FE', 'FT') AND a.documento = p_aplica_a AND a.sucid = p_sucid LET ncf_factura = pcodigodgii CLIPPED, pncf USING "&&&&&&&&" END IF IF p_tipo_doc = 'RC' THEN LET ditbis = 0 END IF SELECT a.sucnombre INTO p_localidad FROM sucursales a WHERE a.sucid = p_sucid LET vtot = p_valor + ditbis PRINT COLUMN 5, p_aplica_a USING "#######", COLUMN 20, p_localidad, COLUMN 43, p_monto_desc USING "#,###,###.##", COLUMN 57, p_valor USING "##,###,###.##", COLUMN 64, ditbis USING "##,###,###.##", COLUMN 83, vtot USING "###,###,###.##", 2 SPACES, ncf_factura LET l = 12 AFTER GROUP OF p_sec_cliente PRINT COLUMN 1, "===============================================================", "======================================================" IF p_tipo_doc = "NC" OR p_tipo_doc = "ND" THEN IF ncr = "S" THEN LET ditbis = GROUP SUM(p_valor) * (pitbis / 100) ELSE LET ditbis = 0 END IF END IF LET vgdesc = GROUP SUM(p_monto_desc) LET vgval = GROUP SUM(p_valor) LET vgtot = vgval + ditbis PRINT COLUMN 5, "Total----> ", COLUMN 43, vgdesc USING "#,###,###.##", COLUMN 57, vgval USING "##,###,###.##", 1 SPACES, ditbis USING "##,###,###.##", COLUMN 84, vgtot USING "##,###,###.##" SKIP 1 LINE IF p_tipo_doc = "NC" THEN PRINT COLUMN 1, "===============================================================", "======================================================" PRINT COLUMN 5, "PRODUCTO(S)", COLUMN 109, "CANTIDAD" PRINT COLUMN 1, "===============================================================", "======================================================" DECLARE busca_nc CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.cantidad_2, a.descrip_esp FROM iptb00002 a, iptb00006 b WHERE b.num_doc = num_doc_ref AND b.cod_mov = cod_mov_ref AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec FOREACH busca_nc INTO articulos.* PRINT 5, articulos.cod_n USING "&&&&", "-", articulos.cod_grupo USING "&&&&", "-", articulos.cod_tipo USING "&&&&", "-", articulos.cod_sec USING "&&&&", " ", articulos.descrip_Esp, articulos.cantidad USING "##,###,###.####" END FOREACH END IF ON LAST ROW SKIP 2 LINES PRINT COLUMN 2, "COMENTARIOS : " PRINT COLUMN 5, p_comentario[1, 60] CLIPPED PRINT COLUMN 5, p_comentario[61, 120] CLIPPED PAGE TRAILER SKIP 1 LINE PRINT COLUMN 10, "_________________________________________", COLUMN 60, "_________________________________________" PRINT COLUMN 10, " Preparado Por ", COLUMN 60, " Autorizado Por " PRINT comp_off, normal END REPORT FUNCTION aplica_mas_antiguas() DEFINE balance, valor_aplicando DEC(12, 2), j, psucid INT, pventas CHAR(1) DECLARE busca_antiguas CURSOR FOR SELECT a.aplica_a, SUM(a.valor + a.monto_desc), b.ventas, b.sucid, CONVERT(CHAR(10), b.fecha_factura, 103) FROM cctb00001 a, vetb00002 b WHERE (a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente) AND (a.tipo_doc NOT IN ('AV', 'AP') AND a.aplica_a = b.factura) AND a.status_t IS NULL GROUP BY a.aplica_a, b.fecha_factura, b.ventas, b.sucid HAVING SUM(a.valor + a.monto_desc) > 0 ORDER BY b.fecha_factura LET idx = 1 LET j = 1 LET valor_aplicando = 0 LET balance = valor_ctrl FOREACH busca_antiguas INTO aplica_wd[idx].aplica_a, aplica_wd[idx].pendiente, pventas, psucid LET balance = balance - aplica_wd[idx].pendiente IF balance < 0 THEN IF valor_aplicando < valor_ctrl THEN IF pventas = '1' THEN LET arr_recibo[j].tipo_doc_aplica = 'FT' LET arr_recibo[j].sucid = psucid ELSE LET arr_recibo[j].tipo_doc_aplica = 'FE' LET arr_recibo[j].sucid = psucid END IF LET arr_recibo[j].aplica_a = aplica_wd[idx].aplica_a LET arr_recibo[j].valor_pen = aplica_wd[idx].pendiente LET arr_recibo[j].valor_pag = valor_ctrl - valor_aplicando DISPLAY "DATA2 ", arr_recibo[j].aplica_a, " V ", arr_recibo[j].valor_pag END IF EXIT FOREACH ELSE IF pventas = '1' THEN LET arr_recibo[j].tipo_doc_aplica = 'FT' LET arr_recibo[j].sucid = psucid ELSE LET arr_recibo[j].tipo_doc_aplica = 'FE' LET arr_recibo[j].sucid = psucid END IF LET arr_recibo[j].aplica_a = aplica_wd[idx].aplica_a LET arr_recibo[j].valor_pen = aplica_wd[idx].pendiente IF balance > aplica_wd[idx].pendiente THEN LET valor_aplicando = valor_aplicando + aplica_wd[idx].pendiente LET arr_recibo[j].valor_pag = aplica_wd[idx].pendiente END IF DISPLAY "DATA ", arr_recibo[j].aplica_a, " V ", arr_recibo[j].valor_pag LET j = j + 1 END IF LET idx = idx + 1 END FOREACH END FUNCTION FUNCTION detallecxc() DEFINE k INT IF recibo.tipo_doc = "PG" THEN LET selec = "SELECT a.num_doc,a.sucid,a.tipo_doc_aplica,a.aplica_a,a.valor,a.monto_desc,a.valor ", "FROM cctb00001 a ", "WHERE ((a.tipo_doc = ? OR a.tipo_doc = 'AV') AND ", " a.num_cheque = ?) AND (a.tipo_cliente = ? AND ", " a.sec_cliente = ?) ORDER BY 2,1 " ELSE IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN LET selec = "SELECT a.num_doc,a.sucid,a.tipo_doc_aplica,a.aplica_a,a.valor,isnull(a.monto_desc,0), a.valor,isnull(a.valor_efectivo,0),b.prima_us,b.orden,a.localidad_aplica_a FROM cctb00001 a INNER JOIN vetb00002 b ON b.factura = a.aplica_a AND b.sucid = a.localidad_aplica_a AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente ", "WHERE (a.tipo_doc=? AND a.num_doc=?)AND (a.tipo_cliente = ? AND ", " a.sec_cliente = ?) ORDER BY 2,1 " ELSE LET selec = "SELECT num_doc,sucid,tipo_doc_aplica,aplica_a,valor,monto_desc,valor,isnull(valor_efectivo,0) FROM cctb00001 ", "WHERE (tipo_doc=? AND num_cheque=?)AND (tipo_cliente = ? AND ", " sec_cliente = ?) ORDER BY 2,1 " END IF END IF PREPARE comando FROM selec DECLARE buscar1 CURSOR FOR comando OPEN buscar1 USING recibo.tipo_doc, recibo.num_doc, recibo.tipo_cliente, recibo.sec_cliente LET k = 1 WHILE STATUS != NOTFOUND FETCH buscar1 INTO arr_recibo[k].*, xitbis, tasa, xorden, hsucid IF STATUS = NOTFOUND THEN EXIT WHILE END IF LET xfactura = arr_recibo[k].aplica_a SELECT a.fecha_factura INTO ffecha FROM vetb00002 a WHERE a.factura = xfactura AND a.sucid = hsucid LET valor_ctrl = arr_recibo[k].valor_pag CALL llenaarticulos() IF arr_recibo[k].num_nc = recibo.num_doc THEN LET arr_recibo[k].num_nc = NULL END IF IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN LET arr_recibo[k].valor_pen = arr_recibo[k].valor_pen * -1 ELSE IF arr_recibo[k].valor_pen < 0 THEN LET arr_recibo[k].valor_pen = arr_recibo[k].valor_pen * -1 END IF END IF LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pen LET arr_recibo[k].valor_pen = 0 LET arr_recibo[k].desc_p = arr_recibo[k].desc_p * -1 SELECT SUM(valor) INTO valor2 FROM cctb00001 WHERE tipo_cliente = recibo.tipo_cliente AND sec_cliente = recibo.sec_cliente AND aplica_a = arr_recibo[k].aplica_a AND status_t IS NULL AND num_cheque = recibo.num_doc LET arr_recibo[k].valor_pen = valor2 #ORIENTACION DOCUMENTO IF recibo.tipo_doc = "OD" THEN IF arr_recibo[k].valor_pag < 0 THEN LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1 END IF END IF IF recibo.tipo_doc = "OC" THEN IF arr_recibo[k].valor_pag < 0 THEN LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1 END IF END IF IF recibo.tipo_doc = "DV" THEN IF arr_recibo[k].valor_pag < 0 THEN LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1 END IF END IF IF recibo.tipo_doc = "OD" THEN IF ARR_RECIBO[k].VALOR_PAG < 0 THEN LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1 END IF END IF IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN LET arr_recibo[k].valor_pag = valor_ctrl * -1 END IF LET k = k + 1 END WHILE END FUNCTION FUNCTION llenaarticulos() DEFINE i INT, tvalor_bruto, tdescuento, tsub_total, titbis, tneto DEC(16, 2) DECLARE buscarticulos CURSOR FOR SELECT a.cod_n, a.cod_Grupo, a.cod_tipo, a.cod_sec, a.cantidad, a.precio, a.porc_desc, a.descuento, a.itbis, a.descripcion FROM cctb00010 a WHERE a.num_doc = recibo.num_doc AND a.tipo_doc = recibo.tipo_doc LET i = 1 LET xvalor_bruto = 0 LET xsub_total = 0 LET xdescuento = 0 LET xitbis = 0 LET xneto = 0 FOREACH buscarticulos INTO arr_articulos[i].cod_n, arr_articulos[i].cod_grupo, arr_articulos[i].cod_tipo, arr_articulos[i].cod_sec, arr_articulos[i].cantidad_2, arr_articulos[i].precio, arr_articulos[i].por_desc, arr_articulos[i].valor_desc, arr_articulos[i].valor_itbis, arr_articulos[i].descrip_Esp IF arr_articulos[i].cod_sec IS NOT NULL THEN IF reimprime = "SI" THEN LET xvalor_bruto = xvalor_bruto + (arr_articulos[i].cantidad_2 * arr_articulos[i].precio) LET xdescuento = xdescuento + arr_articulos[i].valor_desc LET xitbis = xitbis + arr_articulos[i].valor_itbis END IF END IF LET i = i + 1 END FOREACH IF reimprime <> "SI" THEN CALL calculos() RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto LET xitbis = titbis LET xsub_total = tsub_total #DISPLAY "datos ",xvalor_bruto, " xdes ",xdescuento," xsub ",xsub_total," xitbis ",xitbis LET xneto = xsub_total + xitbis LET xvalor_bruto = tvalor_bruto ELSE LET xsub_total = xsub_total + (xvalor_bruto - xdescuento) LET xneto = valor_ctrl * -1 END IF DISPLAY "VALORES: ", xvalor_bruto, " neto ", xsub_total DISPLAY BY NAME xfactura END FUNCTION REPORT cctb01b( p_tipo_cliente, p_sec_cliente, p_fecha_orig, p_num_doc, p_cod_emp_sec, p_tipo_doc, p_cuenta_no, p_banco, p_aplica_a, p_monto_desc, p_valor, p_nombre, p_nomb_emp, p_nombre_cta, p_comentario, pcodigodgii, pncf, monto_itbis) DEFINE p_tipo_cliente LIKE cctb00001.tipo_cliente, p_sec_cliente LIKE cctb00001.sec_cliente, p_fecha_orig LIKE cctb00001.fecha_orig, p_num_doc LIKE cctb00001.num_doc, p_cod_emp_sec LIKE cctb00001.cod_emp_sec, p_tipo_doc LIKE cctb00001.tipo_doc, p_cuenta_no LIKE cctb00001.cuenta_no, p_banco LIKE cctb00001.banco, p_aplica_a LIKE cctb00001.aplica_a, p_monto_desc LIKE cctb00001.monto_desc, p_valor LIKE cctb00001.valor, p_nomb_emp CHAR(40), p_nombre_cta CHAR(30), pitbis, monto_itbis DEC(12, 2), labelcliente, sfecha STRING, ncf_factura VARCHAR(19), pcodigodgii, fcodigodgii VARCHAR(19), pncf, fncf INT, encabezado VARCHAR(2), articulos RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DEC(12, 5), descrip_Esp VARCHAR(70) END RECORD, arr_articulos DYNAMIC ARRAY OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DEC(12, 5), descrip_Esp VARCHAR(70) END RECORD, vimagen BOOLEAN, imagen BYTE, nombre_file, filedestino STRING DEFINE hora CHAR(5), p_nombre LIKE vetb00004.nombre, p_comentario CHAR(120), #LIKE cctb00011.comentario, descuento, dtotal_monto, total_monto, ditbis DEC(12, 2), tipodocumento VARCHAR(50) ORDER BY p_sec_cliente, p_num_doc FORMAT FIRST PAGE HEADER LET hora = TIME LET total_monto = 0 LET encabezado = 'NO' IF p_tipo_doc = 'PG' OR p_tipo_doc = 'RC' THEN LET tipodocumento = 'RECIBO DE INGRESOS' LET labelcliente = "HEMOS RECIBIDO DE " ELSE LET tipodocumento = 'DOCUMENTO CUENTAS POR COBRAR' LET labelcliente = "CLIENTE: ", p_tipo_cliente USING "&&", "-", p_sec_cliente USING "&&&&&&&", " " END IF BEFORE GROUP OF p_sec_cliente SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S" IF pitbis IS NULL THEN LET pitbis = 0 END IF IF fecha_vencimiento > '05/01/2018' THEN LET sfecha = 'SI' ELSE LET sfecha = 'NO' END IF PRINTX nombre_sucursal, p_cuenta_no, p_nombre_cta, p_banco, p_nombre, p_tipo_cliente, p_sec_cliente, p_cod_emp_sec, p_nomb_emp, p_tipo_doc, p_nombre_tipo, tipodocumento, hora, p_companias.nombre, p_num_doc, p_companias.rnc, p_companias.direccion, p_fecha_orig, p_companias.telefono, p_companias.fax, fecha_proximo, labelcliente, pcodigodgii, pncf, recibo.comentario, pdireccion ON EVERY ROW IF p_tipo_Doc = "NC" OR p_tipo_doc = "ND" THEN # IF ncr = "S" THEN # LET ditbis =p_valor * (pitbis/100) # ELSE # LET ditbis = 0 # END IF SELECT a.codigo_dgii, a.ncf INTO fcodigodgii, fncf FROM vetb00072 a WHERE a.tipo_Doc IN ('FE', 'FT') AND a.documento = p_aplica_a AND a.sucid = hsucid LET ncf_factura = fcodigodgii CLIPPED, fncf USING "&&&&&&&&" END IF IF p_tipo_doc <> "NC" THEN LET encabezado = 'NO' END IF IF p_tipo_doc = "NC" THEN DECLARE busca_nc1 CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.cantidad_2, a.descrip_esp FROM iptb00002 a, iptb00006 b WHERE b.num_doc = num_doc_ref AND b.cod_mov = cod_mov_ref 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_nc1 INTO arr_articulos[idx].* LET idx = idx + 1 END FOREACH END IF IF monto_itbis IS NULL THEN LET monto_itbis = 0 END IF IF monto_itbis < 0 THEN LET monto_itbis = monto_itbis * -1 END IF IF p_monto_Desc < 0 THEN LET p_monto_Desc = p_monto_Desc * -1 END IF DISPLAY "valores ", p_valor, " ", monto_itbis, " ", p_monto_desc IF reimprime = "NO" THEN LET p_valor = p_valor - monto_itbis LET dtotal_monto = p_valor + monto_itbis - p_monto_desc ELSE LET p_valor = p_valor - monto_itbis LET dtotal_monto = p_valor + monto_itbis END IF LET dtotal_monto = p_valor + monto_itbis - p_monto_desc IF arr_articulos.getLength() > 1 THEN LET encabezado = 'SI' FOR idx = 1 TO arr_articulos.getLength() IF arr_articulos[idx].descrip_Esp IS NOT NULL THEN LET articulos.cod_n = arr_articulos[idx].cod_n LET articulos.cod_grupo = arr_articulos[idx].cod_grupo LET articulos.cod_tipo = arr_articulos[idx].cod_tipo LET articulos.cod_sec = arr_articulos[idx].cod_sec LET articulos.descrip_Esp = arr_articulos[idx].descrip_Esp LET articulos.cantidad = arr_articulos[idx].cantidad PRINTX articulos.cod_n, articulos.cod_grupo, articulos.cod_tipo, articulos.cod_sec, articulos.descrip_Esp, articulos.cantidad END IF END FOR ELSE LET encabezado = "NO" LET articulos.cod_n = 0 LET articulos.cod_grupo = 0 LET articulos.cod_tipo = 0 LET articulos.cod_sec = 0 LET articulos.descrip_Esp = "NO TIENE" LET articulos.cantidad = 0 END IF PRINTX p_aplica_a, p_monto_desc, p_valor, monto_itbis, ncf_factura, encabezado, dtotal_monto LET total_monto = total_monto + dtotal_monto AFTER GROUP OF p_sec_cliente #IMAGEN IF p_tipo_doc = "NC" THEN LET vimagen = TRUE LOCATE imagen IN MEMORY SELECT a.firmafactura, a.nombre_file_firma INTO imagen, nombre_file FROM seg0001 a WHERE a.usuario = usuarios # LET filedestino = 'E:\\MARMOTECH\\test\\IMAGENES\\tmp\\',usuarios CLIPPED,nombre_file CLIPPED LET filedestino = '.\\IMAGENES\\tmp\\', usuarios CLIPPED, nombre_file CLIPPED IF imagen IS NULL THEN LET vimagen = FALSE LET filedestino = '.\\IMAGENES\\tmp\\tmpdefault.png' ELSE CALL imagen.writeFile(filedestino) CALL comprimeImagen(filedestino, ' -resize 200x200 ') CALL imagen.readFile(filedestino) END IF ELSE LET vimagen = FALSE END IF # BUSCA TIPO DE VENTAS SELECT a.simbolo, a.descripcion_moneda INTO psimbolo, pmoneda FROM vetb00061 a, vetb00060 b WHERE a.ventas = b.ventas AND b.tipo_cliente = p_tipo_cliente LET descuento = GROUP SUM(p_monto_desc) IF p_tipo_doc = 'NC' THEN LET valor_orig = total_monto ELSE LET total_monto = GROUP SUM(p_valor) LET valor_orig = total_monto END IF LET valor_letras = NULL CALL convierte() PRINTX descuento, total_monto, valor_letras, psimbolo, vimagen, imagen ON LAST ROW PRINTX p_comentario CALL arr_articulos.clear() END REPORT REPORT cctb01b_encf( p_tipo_cliente, p_sec_cliente, p_fecha_orig, p_num_doc, p_cod_emp_sec, p_tipo_doc, p_cuenta_no, p_banco, p_aplica_a, p_monto_desc, p_valor, p_nombre, p_nomb_emp, p_nombre_cta, p_comentario, pcodigodgii, monto_itbis) DEFINE p_tipo_cliente LIKE cctb00001.tipo_cliente, p_sec_cliente LIKE cctb00001.sec_cliente, p_fecha_orig LIKE cctb00001.fecha_orig, p_num_doc LIKE cctb00001.num_doc, p_cod_emp_sec LIKE cctb00001.cod_emp_sec, p_tipo_doc LIKE cctb00001.tipo_doc, p_cuenta_no LIKE cctb00001.cuenta_no, p_banco LIKE cctb00001.banco, p_aplica_a LIKE cctb00001.aplica_a, p_monto_desc LIKE cctb00001.monto_desc, p_valor LIKE cctb00001.valor, p_nomb_emp CHAR(40), p_nombre_cta CHAR(30), pitbis, monto_itbis DEC(12, 2), labelcliente, sfecha STRING, ncf_factura VARCHAR(19), pcodigodgii, fcodigodgii VARCHAR(19), pncf INT, encabezado VARCHAR(2), articulos RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DEC(12, 5), descrip_Esp VARCHAR(70), unidad_med VARCHAR(4), precio, por_desc, valor_desc, valor_itbis, valor DEC(12, 2) END RECORD, vimagen BOOLEAN, nombre_file, filedestino, ch_fecha, dataqrcode, chfechafirmadigital, respuesta STRING, buf base.StringBuffer, bufmsg base.StringBuffer, imsg INT, qrpath STRING, rnccomprador VARCHAR(11) DEFINE hora CHAR(5), p_nombre LIKE vetb00004.nombre, p_comentario CHAR(120), #LIKE cctb00011.comentario, descuento, dtotal_monto, total_monto, ditbis DEC(12, 2), tipodocumento VARCHAR(50), ch_ncf VARCHAR(50), mostrarQR BOOLEAN, rhash VARCHAR(50), chbruto, chdescuento, chsubtotal, chitbis, chneto VARCHAR(100) ORDER BY p_num_doc FORMAT FIRST PAGE HEADER LET hora = TIME LET total_monto = 0 LET encabezado = 'NO' IF p_tipo_doc = 'PG' OR p_tipo_doc = 'RC' THEN LET tipodocumento = 'RECIBO DE INGRESOS' LET labelcliente = "HEMOS RECIBIDO DE " ELSE LET tipodocumento = 'DOCUMENTO CUENTAS POR COBRAR' LET labelcliente = "CLIENTE: ", p_tipo_cliente USING "&&", "-", p_sec_cliente USING "&&&&&&&", " " END IF BEFORE GROUP OF p_sec_cliente DISPLAY "xfactura ", xfactura, " SCID ", hsucid SELECT DISTINCT a.ncf, a.prima_us, b.codigo_dgii, c.num_rnc, # d.simbolo, a.ventas, c.zona_postal INTO fcodigodgii, tasa, documento_encabezado.tipoPago, rnccomprador, # simbolo, xventas, tipodocumento FROM vetb00002 a, vetb00012 b, vetb00004 c, vetb00060 d WHERE a.factura = xfactura AND a.sucid = hsucid AND a.tipo_cliente = c.tipo_cliente AND a.sec_cliente = c.sec_cliente AND a.ventas = d.ventas AND a.cond_pago = b.cond_pago LET ncf_factura = fcodigodgii CLIPPED LET documento_encabezado.tipoPago = '1' IF tipodocumento = '3' THEN LET documento_encabezado.IdentificadorExtranjero = rnccomprador CLIPPED END IF { SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S"} IF pitbis IS NULL THEN LET pitbis = 0 END IF IF fecha_vencimiento > '05/01/2018' THEN LET sfecha = 'SI' ELSE LET sfecha = 'NO' END IF SELECT DISTINCT a.ncf, a.fechafirmadigital, a.hash INTO ch_ncf, xfechafirmadigital, xhash FROM cctb00001 a WHERE a.num_doc = recibo.num_doc AND a.tipo_Doc = recibo.tipo_doc AND a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente # DISPLAY "info: ",recibo.num_doc," tipo ",recibo.tipo_doc," ff ",xfechaFirmadigital SELECT a.tipo_ncf INTO descripcion FROM vetb00071 a WHERE a.tipo_Doc = p_tipo_doc AND a.codigo_dgii = pcodigodgii IF reimprime <> "SI" THEN IF ch_ncf NOT MATCHES 'B*' OR ch_ncf IS NULL THEN LET mostrarQR = TRUE LET ch_ncf = "E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&" LET ch_ncf = 'e-NCF:', ch_ncf CLIPPED ELSE IF ch_ncf MATCHES 'B*' THEN LET mostrarQR = FALSE LET ch_ncf = 'NCF:', ch_ncf CLIPPED END IF END IF ELSE LET mostrarQR = TRUE LET qncf = ch_ncf CLIPPED LET ch_ncf = 'e-NCF:', ch_ncf CLIPPED SELECT a.fecha_vencimiento INTO fecha_vencimiento FROM vetb00071 a WHERE a.tipo_Doc = p_tipo_doc AND a.codigo_dgii = pcodigodgii CALL sus_caracter(xhash) RETURNING rhash END IF LET ch_fecha = fecha_vencimiento USING "dd-mm-yyyy" IF ch_fecha IS NOT NULL THEN LET ncffechaVencimiento = TRUE LET documento_encabezado.FechaVencimientoSecuencia = ch_fecha ELSE LET ncffechaVencimiento = FALSE LET documento_encabezado.FechaVencimientoSecuencia = NULL END IF # LET qncf = "E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&" ------->Documento Encabezado OBLIGATORIO LET documento_encabezado.tipoEcf = codigodgii CLIPPED 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 CLIPPED LET documento_encabezado.Provincia = id_provincia_dgii CLIPPED SELECT a.titulo INTO desc_modificacion FROM cctb00037 a WHERE a.idtipo = idtipo -- NO se encodea p_nombre: sus_caracter() es para URL/QR y metia -- %20/%3B en la razon social del XML (RazonSocialComprador) y del -- reporte. El nombre va limpio, igual que en veprmt022 -- (razonSocialComprador = nombre CLIPPED). PRINTX nombre_sucursal, p_cuenta_no, p_nombre_cta, p_banco, p_nombre, p_tipo_cliente, p_sec_cliente, p_cod_emp_sec, p_nomb_emp, p_tipo_doc, p_nombre_tipo, tipodocumento, hora, p_companias.nombre, p_num_doc, p_companias.rnc, p_companias.direccion, p_fecha_orig, p_companias.telefono, p_companias.fax, fecha_proximo, labelcliente, pcodigodgii, pncf, recibo.comentario, pdireccion, direccion_sucursal, rnccomprador, descripcion, ch_fecha, ch_ncf, mostrarQR, desc_modificacion, tasa, num_doc_ref, xorden, xfactura, ncffechaVencimiento ON EVERY ROW LET chbruto = simbolo CLIPPED, xvalor_bruto USING "<<<,<<<,<&&.##" LET chdescuento = simbolo CLIPPED, xdescuento USING "<<<,<<<,<&&.##" LET chsubtotal = simbolo CLIPPED, xvalor_bruto - xdescuento USING "<<<,<<<,<&&.##" LET chitbis = simbolo CLIPPED, xitbis USING "<<<,<<<,<&&.##" LET chneto = simbolo CLIPPED, xneto USING "<<<,<<<,<&&.##" DISPLAY "antes ", xitbis LET ditbis = xitbis * tasa DISPLAY "despues ", ditbis, " tasa ", tasa # LET monto_itbis = xitbis estaba antes LET monto_itbis = ditbis LET dtotal_monto = xsub_total * tasa LET p_monto_Desc = xdescuento LET total_monto = xneto * tasa LET p_valor = xsub_total IF monto_itbis < 0 THEN LET monto_itbis = monto_itbis * -1 END IF IF p_monto_Desc < 0 THEN LET p_monto_Desc = p_monto_Desc * -1 END IF IF arr_articulos.getLength() > 1 THEN LET encabezado = 'SI' FOR idx = 1 TO arr_articulos.getLength() IF arr_articulos[idx].descrip_Esp IS NOT NULL THEN LET articulos.cod_n = arr_articulos[idx].cod_n LET articulos.cod_grupo = arr_articulos[idx].cod_grupo LET articulos.cod_tipo = arr_articulos[idx].cod_tipo LET articulos.cod_sec = arr_articulos[idx].cod_sec LET articulos.descrip_Esp = arr_articulos[idx].descrip_Esp LET articulos.cantidad = arr_articulos[idx].cantidad_2 LET articulos.unidad_med = arr_articulos[idx].unidad_med LET articulos.precio = arr_articulos[idx].precio * tasa LET articulos.por_desc = arr_articulos[idx].por_desc LET articulos.valor_desc = arr_Articulos[idx].valor_desc * tasa LET articulos.valor_itbis = arr_articulos[idx].valor_itbis * tasa LET articulos.valor = (arr_articulos[idx].cantidad_2 * articulos.precio) - articulos.valor_desc DISPLAY "aqui se imprime ", ditbis PRINTX articulos.cod_n, articulos.cod_grupo, articulos.cod_tipo, articulos.cod_sec, articulos.descrip_Esp, articulos.cantidad, articulos.unidad_med, articulos.precio, articulos.por_desc, articulos.valor_desc, articulos.valor_itbis, articulos.valor, ditbis, chbruto, chdescuento, chsubtotal, chitbis, chneto, total_monto END IF END FOR ELSE LET encabezado = "NO" LET articulos.cod_n = 0 LET articulos.cod_grupo = 0 LET articulos.cod_tipo = 0 LET articulos.cod_sec = 0 LET articulos.descrip_Esp = "NO TIENE" LET articulos.cantidad = 0 END IF IF ditbis < 0 THEN LET ditbis = ditbis * -1 END IF LET documento_encabezado.montoTotal = total_monto USING "<<<<<<<<<<<<&.##" LET documento_encabezado.montoGravadoTotal = p_valor * tasa USING "<<<<<<<<<<<<<&.##" IF monto_itbis = 0 OR monto_itbis IS NULL THEN LET documento_encabezado.montoGravadoI1 = 0 USING "<<<<<<<<<<<<<&.##" ELSE LET documento_encabezado.montoGravadoI1 = p_valor * tasa USING "<<<<<<<<<<<<<&.##" END IF LET documento_encabezado.totalItbis = monto_itbis USING "<<<<<<<<<<<<<&.##" LET documento_encabezado.totalItbis1 = monto_itbis USING "<<<<<<<<<<<<<&.##" LET documento_encabezado.tipoIngreso = '01' IF tipodocumento <> '3' THEN LET documento_encabezado.rncComprador = rnccomprador CLIPPED END IF IF tipodocumento = '3' THEN LET documento_encabezado.IdentificadorExtranjero = rnccomprador CLIPPED END IF LET documento_encabezado.razonSocialComprador = p_nombre CLIPPED LET documento_encabezado.codigoVendedor = p_cod_emp_sec LET documento_encabezado.numeroFacturaInterna = p_aplica_a LET documento_encabezado.fechaEmision = p_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 = fcodigodgii CLIPPED LET documento_encabezado.fechaNCFmodificado = ffecha USING "dd-mm-yyyy" LET documento_encabezado.codigoModificacion = idtipo LET documento_encabezado.eNcf = "E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&" LET documento_encabezado.nombreFile = p_companias.rnc CLIPPED, "E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&", ".xml" IF mostrarQR THEN IF reimprime <> "SI" THEN CALL generafile( documento_encabezado.*, documento_detalle, codigo_sucursal, codigo_sucursal, 'adicionar') RETURNING xhash, respuesta, xfechaFirmadigital, codigo DISPLAY "retorna desde EL NC: ", respuesta CALL sus_caracter(xhash) RETURNING rhash IF codigo = '200' THEN TRY CALL util.JSON.parse(respuesta, pok) CATCH LET pok.trackId = NULL LET pok.mensaje = 'ERROR EN PARSE' END TRY END IF UPDATE cctb00001 SET ultima_respuesta = respuesta, hash = xhash, fechaFirmadigital = xfechaFirmadigital, cctb00001.trackid = pok.trackId WHERE num_doc = p_num_doc AND tipo_doc = p_tipo_doc END IF LET chfechafirmadigital = util.Datetime.format( xfechafirmadigital, "%d-%m-%Y %H:%M:%S") LET buf = base.StringBuffer.create() CALL buf.append(chfechafirmadigital) CALL buf.replace(' ', '%20', 1) LET chfechafirmadigital = buf.toString() -- El segmento de la URL del QR depende del ambiente DGII de la -- empresa (companias.ambientedgii), asi no hay que cambiarlo a mano -- entre test y produccion. CASE WHEN p_companias.ambientedgii CLIPPED = "produccion" LET qrpath = "ecf" WHEN p_companias.ambientedgii CLIPPED = "certificacion" LET qrpath = "certecf" OTHERWISE LET qrpath = "testecf" END CASE LET dataqrcode = 'https://ecf.dgii.gov.do/', qrpath CLIPPED, '/consultatimbre?rncemisor=', p_companias.rnc CLIPPED, "&rnccomprador=", rnccomprador CLIPPED, "&encf=", qncf CLIPPED, "&fechaemision=", p_fecha_orig USING 'dd-mm-yyyy', "&montototal=", total_monto USING "<<<<<<<<#.##", "&fechafirma=", chfechafirmadigital, "&codigoseguridad=", rhash END IF PRINTX p_aplica_a, p_monto_desc, p_valor, monto_itbis, ncf_factura, encabezado, dtotal_monto, dataqrcode, xhash, chfechafirmadigital IF reimprime <> "SI" THEN IF mostrarqr THEN CALL ambiente() RETURNING ambiente CALL procesoEncf( ' ', ambiente, ' ', 0, 0, 'consultatrackid', respuesta) RETURNING phash, xrespuesta, codigo DISPLAY "estado respuesta: ", CURRENT, xrespuesta, " codigo: ", codigo TRY CALL util.JSON.parse(xrespuesta, p) CATCH LET message_err = "Error JSON: ", STATUS DISPLAY message_Err END TRY END IF LET p.trackid = pok.trackId # LET p.estado = p.estado # LET p.secuenciaUtilizada = p1.secuenciaUtilizada # LET p.encf = p1.encf # LET p.mensajes[1].valor = p1.mensajes IF p.estado = ' ' OR p.estado IS NULL THEN LET p.estado = 'Rechazado' END IF DISPLAY BY NAME p.trackid IF p.estado = 'Rechazado' THEN DISPLAY BY NAME p.estado ATTRIBUTE(RED, REVERSE) -- Arma el/los motivo(s) del rechazo que devuelve la DGII y los -- muestra en el campo "mensajes" del form. Antes no se escribia -- nada en ese campo (p.mensajes[] traia el detalle pero nunca -- se desplegaba), por eso "no salia el mensaje". LET bufmsg = base.StringBuffer.create() FOR imsg = 1 TO p.mensajes.getLength() IF p.mensajes[imsg].valor IS NOT NULL THEN IF bufmsg.getLength() > 0 THEN CALL bufmsg.append(" | ") END IF CALL bufmsg.append(p.mensajes[imsg].codigo CLIPPED) CALL bufmsg.append(" - ") CALL bufmsg.append(p.mensajes[imsg].valor CLIPPED) END IF END FOR IF bufmsg.getLength() = 0 THEN -- Si la DGII no desgloso mensajes, mostrar la respuesta cruda CALL bufmsg.append(xrespuesta CLIPPED) END IF LET message_err = bufmsg.toString() DISPLAY message_err TO mensajes ELSE DISPLAY BY NAME p.estado ATTRIBUTE(GREEN, REVERSE) DISPLAY "" TO mensajes END IF UPDATE cctb00001 SET estado_dgii = p.estado WHERE num_doc = p_num_doc AND tipo_doc = p_tipo_doc END IF AFTER GROUP OF p_sec_cliente #IMAGEN IF p_tipo_doc = "NC" THEN LET vimagen = TRUE LOCATE imagen IN MEMORY SELECT a.firmafactura, a.nombre_file_firma INTO imagen, nombre_file FROM seg0001 a WHERE a.usuario = usuarios # LET filedestino = 'E:\\MARMOTECH\\test\\IMAGENES\\tmp\\',usuarios CLIPPED,nombre_file CLIPPED LET filedestino = '.\\IMAGENES\\tmp\\', usuarios CLIPPED, nombre_file CLIPPED IF imagen IS NULL THEN LET vimagen = FALSE LET filedestino = '.\\IMAGENES\\tmp\\tmpdefault.png' ELSE CALL imagen.writeFile(filedestino) CALL comprimeImagen(filedestino, ' -resize 200x200 ') CALL imagen.readFile(filedestino) END IF ELSE LET vimagen = FALSE END IF # BUSCA TIPO DE VENTAS SELECT a.simbolo, a.descripcion_moneda INTO psimbolo, pmoneda FROM vetb00061 a, vetb00060 b WHERE a.ventas = b.ventas AND b.tipo_cliente = p_tipo_cliente LET descuento = xdescuento PRINTX descuento, valor_letras, psimbolo, vimagen, imagen ON LAST ROW PRINTX p_comentario CALL arr_articulos.clear() END REPORT FUNCTION convierte() DEFINE consegui CHAR(1) DEFINE p, miles, m, k, a, b, d, c, entero, unidades_mi, unidades_m, unidad, mil, millon, unid_c, u INTEGER DEFINE cheles DECIMAL(7, 2) CALL letras() LET valor_letras = NULL LET consegui = "N" LET entero = valor_orig LET cheles = (valor_orig - entero) * 100 LET unidad = entero / 100 LET unidad = entero - (unidad * 100) LET a = entero / 1000 LET a = entero - (a * 1000) LET d = entero - 19 IF d >= 82 THEN LET c = entero / 100 # Para Controlar los miles y los cientos IF c <= 9 THEN LET valor_letras = valor_letras CLIPPED, " ", centenas[c] CLIPPED ELSE LET c = entero / 1000 LET b = entero / 1000000 END IF IF d > 19 THEN LET d = unidad - 19 END IF IF unidad > 0 AND unidad < 20 THEN LET d = unidad LET valor_letras = valor_letras CLIPPED, " ", unidades1[d] CLIPPED LET consegui = "S" END IF ELSE IF d > 0 AND d <= 81 THEN LET valor_letras = valor_letras CLIPPED, " ", decenas[d] CLIPPED LET consegui = "S" END IF END IF # Para controlar los miles IF entero > 999 THEN LET unidades_m = a / 100 LET unidades_m = a - (unidades_m * 100) LET valor_letras = NULL IF c = 1 THEN LET valor_letras = "MIL" END IF IF c > 1 AND c <= 19 THEN LET valor_letras = valor_letras CLIPPED, " ", unidades1[c] CLIPPED, " ", "MIL" END IF IF c >= 20 AND c <= 999 THEN IF c < 82 THEN LET c = c - 19 LET valor_letras = valor_letras CLIPPED, " ", decenas[c] CLIPPED ELSE LET k = c / 100 IF k > 0 AND k < 10 THEN LET unid_c = c - (k * 100) # AQUI FUE IF k > 1 THEN LET valor_letras = valor_letras CLIPPED, " ", centenas[k] CLIPPED ELSE IF k = 1 THEN IF unid_c > 0 THEN LET valor_letras = valor_letras CLIPPED, " ", centenas[k] CLIPPED ELSE LET valor_letras = valor_letras CLIPPED, " ", decenas[81] CLIPPED END IF END IF END IF END IF LET unid_c = c - (k * 100) IF unid_c > 0 AND unid_c < 20 THEN LET valor_letras = valor_letras CLIPPED, " ", unidades1[unid_c] CLIPPED ELSE LET unid_c = unid_c - 19 IF unid_c > 0 AND unid_c <= 81 THEN LET valor_letras = valor_letras CLIPPED, " ", decenas[unid_c] CLIPPED LET consegui = "S" END IF END IF IF c > 82 AND c < 100 AND consegui <> "S" THEN LET c = c - 19 LET valor_letras = valor_letras CLIPPED, " ", decenas[c] CLIPPED END IF IF c > 100 AND consegui <> "S" THEN LET c = c - 119 IF c > 0 AND c <= 81 THEN LET valor_letras = valor_letras CLIPPED, " ", decenas[c] CLIPPED LET consegui = "N" END IF END IF END IF LET valor_letras = valor_letras CLIPPED, " ", "MIL" END IF LET c = a IF c > 100 THEN LET c = c / 100 LET valor_letras = valor_letras CLIPPED, " ", centenas[c] CLIPPED END IF IF c = 100 THEN LET valor_letras = valor_letras CLIPPED, " ", decenas[81] CLIPPED END IF IF unidades_m > 0 AND unidades_m - 19 <= 81 THEN LET a = unidades_m - 19 IF a > 0 AND a <= 81 THEN LET valor_letras = valor_letras CLIPPED, " ", decenas[a] CLIPPED LET consegui = "S" ELSE LET valor_letras = valor_letras CLIPPED, " ", unidades1[unidades_m] CLIPPED END IF END IF END IF #======================================================================================== # Para Controlar cantidades en millones IF entero > 999999 THEN LET c = 0 LET miles = entero - 1000000 LET m = miles / 1000 LET p = miles - (m * 1000) LET u = m / 100 LET u = m - (u * 100) LET unidades_mi = p LET unidades_mi = unidades_mi / 100 LET unidades_mi = p - (unidades_mi * 100) LET valor_letras = NULL IF b = 1 THEN LET valor_letras = "UN MILLON" END IF IF b > 1 AND b <= 19 THEN LET valor_letras = valor_letras CLIPPED, " ", unidades1[b] CLIPPED, " ", "MILLONES" END IF IF b >= 20 AND b <= 999999 THEN IF b < 82 THEN LET b = b - 19 LET valor_letras = valor_letras CLIPPED, " ", decenas[b] CLIPPED, " ", "MILLONES" ELSE LET k = b / 100 LET valor_letras = valor_letras CLIPPED, " ", centenas[k] CLIPPED, " ", "MILLONES" END IF END IF LET b = m / 100 IF b > 0 AND b <= 9 THEN IF b = 1 THEN LET valor_letras = valor_letras CLIPPED, " CIEN " ELSE LET valor_letras = valor_letras CLIPPED, " ", centenas[b] CLIPPED END IF IF u > 0 AND u <= 19 THEN IF u = 1 THEN LET unidades1[1] = "UN" END IF LET valor_letras = valor_letras CLIPPED, " ", unidades1[u] CLIPPED END IF LET u = u - 19 # IF u > 0 and u <= 19 THEN # IF u = 1 THEN # LET unidades1[1] = "UN" # END IF # LET valor_letras = valor_letras clipped," ",unidades1[u] clipped # END IF IF u >= 1 AND u < 82 THEN # LET u = u - 19 # adicione este 13/5/2011 La quite el 30/5/2011 LET valor_letras = valor_letras CLIPPED, " ", decenas[u] CLIPPED END IF LET valor_letras = valor_letras CLIPPED, " ", "MIL" END IF IF p > 100 THEN LET p = p / 100 LET valor_letras = valor_letras CLIPPED, " ", centenas[p] CLIPPED END IF LET unidades_mi = unidades_mi - 19 IF unidades_mi > 0 AND unidades_mi <= 81 THEN LET m = unidades_mi LET valor_letras = valor_letras CLIPPED, " ", decenas[m] CLIPPED END IF END IF IF unidad > 0 AND unidad < 20 AND consegui = "N" THEN LET d = unidad LET valor_letras = valor_letras CLIPPED, " ", unidades1[d] CLIPPED END IF IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN LET valor_letras = valor_letras CLIPPED, " ", decenas[d] CLIPPED END IF LET valor_letras = valor_letras CLIPPED, " ", pmoneda CLIPPED, " CON", " ", cheles USING "&&", "/100" END FUNCTION FUNCTION letras() LET unidades1[1] = "UNO" LET unidades1[2] = "DOS" LET unidades1[3] = "TRES" LET unidades1[4] = "CUATRO" LET unidades1[5] = "CINCO" LET unidades1[6] = "SEIS" LET unidades1[7] = "SIETE" LET unidades1[8] = "OCHO" LET unidades1[9] = "NUEVE" LET unidades1[10] = "DIEZ" LET unidades1[11] = "ONCE" LET unidades1[12] = "DOCE" LET unidades1[13] = "TRECE" LET unidades1[14] = "CATORCE" LET unidades1[15] = "QUINCE" LET unidades1[16] = "DIECISEIS" LET unidades1[17] = "DIECISIETE" LET unidades1[18] = "DIECIOCHO" LET unidades1[19] = "DIECINUEVE" LET decenas[1] = "VEINTE" LET decenas[2] = "VEINTE Y UNO" LET decenas[3] = "VEINTE Y DOS" LET decenas[4] = "VEINTE Y TRES" LET decenas[5] = "VEINTE Y CUATRO" LET decenas[6] = "VEINTE Y CINCO" LET decenas[7] = "VEINTE Y SEIS" LET decenas[8] = "VEINTE Y SIETE" LET decenas[9] = "VEINTE Y OCHO" LET decenas[10] = "VEINTE Y NUEVE" LET decenas[11] = "TREINTA" LET decenas[12] = "TREINTA Y UNO" LET decenas[13] = "TREINTA Y DOS" LET decenas[14] = "TREINTA Y TRES" LET decenas[15] = "TREINTA Y CUATRO" LET decenas[16] = "TREINTA Y CINCO" LET decenas[17] = "TREINTA Y SEIS" LET decenas[18] = "TREINTA Y SIETE" LET decenas[19] = "TREINTA Y OCHO" LET decenas[20] = "TREINTA Y NUEVE" LET decenas[21] = "CUARENTA" LET decenas[22] = "CUARENTA Y UNO" LET decenas[23] = "CUARENTA Y DOS" LET decenas[24] = "CUARENTA Y TRES" LET decenas[25] = "CUARENTA Y CUATRO" LET decenas[26] = "CUARENTA Y CINCO" LET decenas[27] = "CUARENTA Y SEIS" LET decenas[28] = "CUARENTA Y SIETE" LET decenas[29] = "CUARENTA Y OCHO" LET decenas[30] = "CUARENTA Y NUEVE" LET decenas[31] = "CINCUENTA" LET decenas[32] = "CINCUENTA Y UNO" LET decenas[33] = "CINCUENTA Y DOS" LET decenas[34] = "CINCUENTA Y TRES" LET decenas[35] = "CINCUENTA Y CUATRO" LET decenas[36] = "CINCUENTA Y CINCO" LET decenas[37] = "CINCUENTA Y SEIS" LET decenas[38] = "CINCUENTA Y SIETE" LET decenas[39] = "CINCUENTA Y OCHO" LET decenas[40] = "CINCUENTA Y NUEVE" LET decenas[41] = "SESENTA" LET decenas[42] = "SESENTA Y UNO" LET decenas[43] = "SESENTA Y DOS" LET decenas[44] = "SESENTA Y TRES" LET decenas[45] = "SESENTA Y CUATRO" LET decenas[46] = "SESENTA Y CINCO" LET decenas[47] = "SESENTA Y SEIS" LET decenas[48] = "SESENTA Y SIETE" LET decenas[49] = "SESENTA Y OCHO" LET decenas[50] = "SESENTA Y NUEVE" LET decenas[51] = "SETENTA" LET decenas[52] = "SETENTA Y UNO" LET decenas[53] = "SETENTA Y DOS" LET decenas[54] = "SETENTA Y TRES" LET decenas[55] = "SETENTA Y CUATRO" LET decenas[56] = "SETENTA Y CINCO" LET decenas[57] = "SETENTA Y SEIS" LET decenas[58] = "SETENTA Y SIETE" LET decenas[59] = "SETENTA Y OCHO" LET decenas[60] = "SETENTA Y NUEVE" LET decenas[61] = "OCHENTA" LET decenas[62] = "OCHENTA Y UNO" LET decenas[63] = "OCHENTA Y DOS" LET decenas[64] = "OCHENTA Y TRES" LET decenas[65] = "OCHENTA Y CUATRO" LET decenas[66] = "OCHENTA Y CINCO" LET decenas[67] = "OCHENTA Y SEIS" LET decenas[68] = "OCHENTA Y SIETE" LET decenas[69] = "OCHENTA Y OCHO" LET decenas[70] = "OCHENTA Y NUEVE" LET decenas[71] = "NOVENTA" LET decenas[72] = "NOVENTA Y UNO" LET decenas[73] = "NOVENTA Y DOS" LET decenas[74] = "NOVENTA Y TRES" LET decenas[75] = "NOVENTA Y CUATRO" LET decenas[76] = "NOVENTA Y CINCO" LET decenas[77] = "NOVENTA Y SEIS" LET decenas[78] = "NOVENTA Y SIETE" LET decenas[79] = "NOVENTA Y OCHO" LET decenas[80] = "NOVENTA Y NUEVE" LET decenas[81] = "CIEN" LET centenas[1] = "CIENTO" LET centenas[2] = "DOCIENTOS" LET centenas[3] = "TRESCIENTOS" LET centenas[4] = "CUATROCIENTOS" LET centenas[5] = "QUINIENTOS" LET centenas[6] = "SEISCIENTOS" LET centenas[7] = "SETECIENTOS" LET centenas[8] = "OCHOCIENTOS" LET centenas[9] = "NOVECIENTOS" END FUNCTION FUNCTION calculo_nc(documento_alm, pcodigo_mov, tasa, ptipo) DEFINE j, xaplica, documento_alm, pcodigo_mov, ptipo INT, sub_total, tasa, pdescuento DEC(18, 2), dvalor_bruto, ddescuento, dsub_total, ditbis, dneto, tvalor_bruto, tdescuento, tsub_total, titbis, tneto, dprecio DEC(18, 2) OPEN WINDOW w1 WITH FORM "ccfmwd019" LET ditbis = 0 LET dsub_total = 0 LET dvalor_bruto = 0 LET pdescuento = 0 LET sub_total = 0 IF hecha_aqui = "NO" OR hecha_aqui IS NULL THEN DECLARE busca_nc11 CURSOR FOR SELECT '1', a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.cantidad, a.descrip_esp, a.unidad_med, b.precio, b.porc_desc, b.descuento, ISNULL(b.itbis, 0), a.tipoproducto FROM iptb00002 a, cctb00010 b WHERE b.num_doc_almacen = documento_alm AND b.cod_mov = p_tipo_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 j = 1 FOREACH busca_nc11 INTO arr_articulos[j].* IF arr_articulos[j].precio > 0 THEN CALL calculos() RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto LET xitbis = titbis LET xsub_total = tsub_total LET j = j + 1 END IF END FOREACH ELSE IF documento_alm > 0 THEN DECLARE busca_nd11 CURSOR FOR SELECT b.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, d.cantidad_1, d.cantidad_2, a.descrip_esp, a.unidad_med, b.precio, b.cantidad_2, b.valor_desc, b.itbis, b.valor, a.tipoproducto FROM iptb00002 a, vetb00003 b, vetb00002 c, iptb00006 d WHERE b.factura = xfactura AND b.factura = c.factura AND ( b.sucid = c.sucid OR b.sucid IS NULL OR c.sucid IS NULL OR b.sucid = 0 OR c.sucid = 0 ) 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 -- El area a veces viene y a veces no. Se tolera el area -- ausente (NULL/0) en cualquiera de los dos lados para no -- perder el producto; si ambos la traen, se cruza por area. AND ( b.area = d.area OR b.area IS NULL OR d.area IS NULL OR b.area = 0 OR d.area = 0 ) AND d.num_Doc = documento_alm AND d.cod_mov = pcodigo_mov AND a.cod_n = d.cod_n AND a.cod_grupo = d.cod_grupo AND a.cod_tipo = d.cod_tipo AND a.cod_sec = d.cod_sec AND b.factura = CAST(d.fact_no AS INT) LET j = 1 FOREACH busca_nd11 INTO arr_articulos[j].* IF arr_articulos[j].precio > 0 THEN CALL calculos() RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto LET j = j + 1 END IF END FOREACH DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto DISPLAY ARRAY arr_articulos TO sproductos.* BEFORE DISPLAY DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto AFTER DISPLAY LET xitbis = titbis LET xsub_total = tsub_total EXIT DISPLAY END DISPLAY ELSE LET selec = "SELECT TOP 1 b.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.cantidad,b.cantidad,a.descrip_esp, a.unidad_med,b.precio,b.cantidad_2, b.valor_desc,b.itbis,b.valor,a.tipoproducto FROM iptb00002 a,vetb00003 b,vetb00002 c WHERE b.factura =", xfactura, " AND b.factura = c.factura AND ( b.sucid = c.sucid OR b.sucid IS NULL OR c.sucid IS NULL OR b.sucid = 0 OR c.sucid = 0 ) 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 " PREPARE bcomando FROM selec DECLARE busca_nd111 CURSOR FOR bcomando LET j = 1 FOREACH busca_nd111 INTO arr_articulos[j].* IF arr_articulos[j].precio > 0 THEN CALL calculos() RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto LET j = j + 1 END IF END FOREACH IF j = 1 THEN CALL fgl_winmessage("NOTA", "No se encontraron productos con precio en la factura indicada.\nVerifique el numero de factura y su localidad.", "exclamation") END IF DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto INPUT ARRAY arr_articulos FROM sproductos.* ATTRIBUTE(WITHOUT DEFAULTS) AFTER ROW CALL calculos() RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto LET xitbis = titbis LET xsub_total = tsub_total DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto AFTER INPUT IF int_flag THEN CALL msg(16) LET tvalor_bruto = 0 LET tdescuento = 0 LET tsub_total = 0 LET titbis = 0 LET tneto = 0 EXIT INPUT END IF CALL calculos() RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto LET xitbis = titbis LET xsub_total = tsub_total DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto EXIT INPUT END INPUT END IF END IF CLOSE WINDOW w1 IF int_flag THEN LET int_flag = FALSE END IF RETURN tvalor_bruto, tdescuento, tsub_total, titbis, tneto END FUNCTION FUNCTION calculos() DEFINE dvalor_bruto, ddescuento, dprecio, dsub_total, ditbis, dneto, tvalor_bruto, tdescuento, tsub_total, titbis, tneto, ldesc DEC(12, 2) IF recibo.tipo_doc = 'NC' THEN LET documento_encabezado.IndicadorNotaCredito = '0' USING "&" ELSE LET documento_encabezado.IndicadorNotaCredito = NULL END IF IF ptipo_nc = '01' THEN SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S" LET documento_encabezado.indicadorMontoGravado = '1' ELSE LET documento_encabezado.indicadorMontoGravado = '0' USING "&" END IF IF recibo.tipo_doc = 'ND' THEN LET documento_encabezado.indicadorMontoGravado = '0' USING "&" END IF IF pitbis IS NULL THEN LET pitbis = 0 END IF LET documento_encabezado.itbis1 = pitbis USING "&&" LET ldesc = 0 LET tvalor_bruto = 0 LET tdescuento = 0 LET tsub_total = 0 LET titbis = 0 LET tneto = 0 LET ditbis = 0 LET dsub_total = 0 LET dvalor_bruto = 0 LET dias = recibo.fecha_orig - ffecha DISPLAY "dias ", dias, " tipos nc ", ptipo_nc FOR idx = 1 TO arr_articulos.getLength() IF arr_articulos[idx].precio > 0 THEN LET ditbis = 0 LET dvalor_bruto = arr_articulos[idx].precio * arr_articulos[idx].cantidad_2 LET ddescuento = dvalor_bruto * (arr_articulos[idx].por_desc / 100) LET dprecio = (arr_articulos[idx].precio * arr_articulos[idx].cantidad_2) LET dsub_total = dvalor_bruto - ddescuento IF dias > 30 THEN LET ditbis = 0 LET documento_encabezado.indicadorMontoGravado = '0' USING "&" IF recibo.tipo_doc = 'NC' THEN LET documento_encabezado.IndicadorNotaCredito = '1' ELSE LET documento_encabezado.IndicadorNotaCredito = NULL END IF LET documento_encabezado.itbis3 = '0' USING "&&" LET documento_encabezado.montoGravadoI3 = 0 USING "<<<<<<<<<<<<<<.##" LET documento_encabezado.totalItbis3 = '00' USING "&&" ELSE IF ptipo_nc = '01' THEN LET ditbis = dsub_total * (pitbis / 100) LET arr_articulos[idx].valor_itbis = ditbis LET ditbis = arr_articulos[idx].valor_itbis LET documento_encabezado.indicadorMontoGravado = '1' ELSE LET documento_encabezado.itbis3 = '0' USING "&&" LET documento_encabezado.montoGravadoI3 = 0 USING "<<<<<<<<<<<<<<.##" LET documento_encabezado.totalItbis3 = 0 USING "<<<<<<<<<<<<<<.##" END IF END IF LET dneto = dsub_total LET ldesc = arr_articulos[idx].precio * (arr_articulos[idx].por_desc / 100) LET arr_articulos[idx].valor_desc = ddescuento LET arr_articulos[idx].valor_itbis = ditbis LET arr_articulos[idx].valor = dneto LET documento_detalle[idx].DescripcionItem = NULL LET documento_detalle[idx].cantidadItem = arr_articulos[idx].cantidad_2 USING "<<<<<<<<<<<<<&.##" LET documento_detalle[idx].indicadorFacturacion = '1' USING "&" LET documento_detalle[idx].precioUnitarioItem = (arr_articulos[idx].valor / arr_articulos[idx].cantidad_2) * tasa USING "<<<<<<<<<<<&.####" #(dneto* tasa)/ arr_articulos[idx].cantidad_2 USING "<<<<<<<<<<<&.##" LET documento_detalle[idx].montoItem = dneto * tasa USING "<<<<<<<<<<<<<&.##" LET documento_detalle[idx].nombreItem = arr_articulos[idx] .descrip_Esp CLIPPED --Tengo la descripcion pero no el nombre del producto LET documento_detalle[idx].indicadorBienoServicio = arr_articulos[idx] .id_tipo --el generafile llena este campo, pero no estoy convencido DISPLAY "DITBIS ", ditbis, " s ", dsub_total, " v ", idx LET dneto = dsub_total + ditbis LET ldesc = 0 LET tvalor_bruto = tvalor_bruto + dvalor_bruto LET tdescuento = tdescuento + ddescuento LET tsub_total = tsub_total + dsub_total LET titbis = titbis + ditbis LET tneto = tneto + dneto END IF END FOR LET monto_efectivo = tvalor_bruto RETURN tvalor_bruto, tdescuento, tsub_total, titbis, tneto END FUNCTION