{ ----------------------------------------------------------------------------- PROGRAMA : CPPRMT001 OBJETIVO : Mantenimiento de Factura Proveedor REALIZADO POR : Tadeo A. Ferreras FECHA : Junio 17, 1993 MODIFICADO POR : Juan F. Soto FECHA : Enero 16, 1996 DESCRIPCION : Buscar conjuntamente con los pre-pagos las NOTAS DE DEBITO ----------------------------------------------------------------------------- } IMPORT os GLOBALS "cpprgb000.4gl" DEFINE debito1,credito1,credito2 decimal(12,2),ent_num CHAR(150) DEFINE valor_pr DECIMAL(12,2) DEFINE term_sp SMALLINT DEFINE fecha_control date DEFINE dias SMALLINT DEFINE puser char(80) DEFINE itbis DECIMAL(16,2) DEFINE hoy,fecha1,fecha2 DATE DEFINE debe_ir CHAR(1) DEFINE cuenta,cuenta_sp CHAR(8) DEFINE total1,valor_cxp,valor,valor_f DECIMAL(12,2) DEFINE cat,dpto,refe,tiene_cta,chequea,ctrl_cxp CHAR(1) DEFINE ctrl_reg,orden_ant,aplicar INTEGER DEFINE p,l,niv,cod1_sp,cod1_sp_sec SMALLINT DEFINE idx2,p_orden INTEGER DEFINE pbase,flete,gasto,pvalor,tvalor DECIMAL(16,2) DEFINE val_pen,valor_fac1,valor2 DECIMAL(13,2) DEFINE nom_tipo CHAR(15) DEFINE idx1,ultimo SMALLINT DEFINE nombre,apellido CHAR(14) DEFINE tipo_emp CHAR(1) DEFINE cuadradatrx BOOLEAN DEFINE tiempo,pano CHAR(4),entrada_no CHAR(14), numero_ent CHAR(2), foto CHAR(200),nombre_file_foto CHAR(100),imagefac,d_tipos, f_tipos, mensaje,filepath,filedestino STRING ,pimagen BYTE DEFINE cuenta_itibis,cuenta_mayor CHAR(8), cod_mon INTEGER, credito decimal(12,2) DEFINE buscar_oc RECORD orden_no INTEGER, fecha_orig DATE, cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sup CHAR(30) END RECORD DEFINE cod_sp1,cod_sp2 SMALLINT DEFINE valor3 DECIMAL(12,2) DEFINE datos_usu RECORD status_t CHAR(1), us_crea CHAR(9), fech_crea CHAR(16), us_mod CHAR(9), fech_mod CHAR(16) END RECORD DEFINE supl DYNAMIC ARRAY OF RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sp CHAR(30) END RECORD DEFINE cuentas ARRAY[200] OF RECORD cuenta_no CHAR(8), departamento SMALLINT, cod_aux SMALLINT, sec_aux SMALLINT, num_doc CHAR(13), debito DECIMAL(12,2), credito DECIMAL(12,2) END RECORD DEFINE descripcion CHAR(30) DEFINE arrfac DYNAMIC ARRAY OF RECORD tipo CHAR(1), aplica_a CHAR(11), tipo_doc CHAR(2), valor_prep DECIMAL(12,2), valor DECIMAL(12,2) END RECORD DEFINE arr_fac1 DYNAMIC ARRAY OF RECORD tipo CHAR(1), aplica_a CHAR(11), tipo_doc CHAR(2), valor_prep DECIMAL(12,2), valor DECIMAL(12,2) END RECORD DEFINE j RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sup CHAR(30), num_doc CHAR(13), valor_fac DECIMAL(12,2), detalle CHAR(30), tipo CHAR(1), aplica_a CHAR(11), valor DECIMAL(12,2) END RECORD DEFINE ordenes DYNAMIC ARRAY OF RECORD orden_no LIKE cptb00001.orden_no, tipo LIKE cptb00001.tipo END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave #LET usuarios ="lsoto" #LET clave ="1234" CONNECT to "decomarmol" user usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL cpprmt001() END MAIN FUNCTION cpprmt001() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 OPEN FORM cpfmmt001 FROM "cpfmmt001" DISPLAY FORM cpfmmt001 DISPLAY "cpprmt001" AT 4,3 DISPLAY "Registro de Facturas" AT 6,29 MENU ON ACTION nuevo # LET filedestino='tmpfoto.jpg' LOCATE pimagen IN MEMORY CLEAR FORM CALL cppcad000() ON ACTION buscar CALL cppcmd000() ON ACTION salir EXIT MENU END MENU END FUNCTION ##funcion par los gastos { FUNCTION cgastos() DEFINE codigo_gasto SMALLINT, des_gasto CHAR(30) DECLARE bgastos CURSOR FOR SELECT a.codigo_fiscal, a.descripcion FROM cgtb00074 a CALL cgastos.clear() FOREACH bgastos INTO codigo_gasto,des_gasto CALL cgastos.additem(kventas,dventas) END FOREACH } ####### Proceso para Insertar Una Factura ########### FUNCTION cppcad000() DEFINE porc_p DECIMAL(10,2) DEFINE emp SMALLINT LET hoy = null LET fecha1 = TODAY LABEL volver: INITIALIZE factura TO NULL LET factura.cod_sp = cod_sp1 LET factura.cod_sp_sec = cod_sp2 LET factura.fecha_orig = fecha1 LET factura.fecha_proc = fecha2 LET tipo_ncf=NULL LET descripcion_ncf=NULL LET itbis =NULL LET ncf = NULL CALL e41_reset() -- compra electronica 41 (cpprmt001_ecf.4gl) INPUT BY NAME factura.*,ITBIS,TIPO_NCF,cod_mon,NCF WITHOUT DEFAULTS ON ACTION busca_foto ATTRIBUTE(TEXT="Foto",IMAGE="upload") LET d_tipos="Images" LET f_tipos="*.jpg *.png *.gif" LET mensaje=%"Elige Imagen" LET imagefac = "*.jpg" CALL ui.interface.frontcall("standard","openfile",[imagefac,d_tipos,f_tipos,mensaje],filepath) DISPLAY filepath IF nombre_file_foto IS NULL THEN LET nombre_file_foto =factura.num_doc USING "<<<<<<",".jpg" END IF IF filepath IS NOT NULL THEN IF fgl_getenv("WINDIR") IS NULL THEN LET filedestino = FGL_GETENV("IMAGENfactura"),"/IMAGENFACTURA/",nombre_file_foto CLIPPED DISPLAY "1",filedestino ELSE LET filedestino = FGL_GETENV("IMAGENfactura"),"\\IMAGENFACTURA\\",nombre_file_foto CLIPPED # LET filedestino = "D:\\genero fuentes\\DECOMARMOL320\\decomarmol\\IMAGENFACTURA\\",nombre_file_foto CLIPPED DISPLAY "2",filedestino END IF LOCATE pimagen IN MEMORY # CALL FGL_WINMESSAGE("W",filedestino,"stop") CALL fgl_getfile(filepath,filedestino) CALL pimagen.readFile(filedestino) DISPLAY filedestino TO foto LET foto = filedestino END IF ON ACTION compra_e41 ATTRIBUTE(TEXT="Compra Electronica",IMAGE="new") -- e-CF 41: trae el proximo e-NCF y calcula montos desde el neto IF factura.cod_sp IS NULL OR factura.cod_sp_sec IS NULL THEN CALL fgl_winmessage("COMPRA ELECTRONICA","Primero elija el suplidor.","exclamation") NEXT FIELD cod_sp END IF IF e41_captura(factura.cod_sp, factura.cod_sp_sec) THEN LET tipo_ncf = 41 SELECT a.descripcion INTO descripcion_ncf FROM cgtb00074 a WHERE a.codigo_fiscal = 41 LET ncf = e41_ncf() LET factura.num_doc = e41_ncf() LET factura.valor_fac = e41_neto() -- CxP queda por el neto LET itbis = e41_itbis() DISPLAY BY NAME factura.num_doc, factura.valor_fac, itbis, tipo_ncf, ncf, descripcion_ncf -- lo llena el sistema: no se digita CALL DIALOG.setFieldActive("num_doc", FALSE) CALL DIALOG.setFieldActive("valor_fac", FALSE) CALL DIALOG.setFieldActive("itbis", FALSE) CALL DIALOG.setFieldActive("tipo_ncf", FALSE) CALL DIALOG.setFieldActive("ncf", FALSE) END IF AFTER FIELD itbis IF itbis IS NULL THEN CALL msg(16) NEXT FIELD itbis END IF ON KEY (control-p) NEXT FIELD cod_sp BEFORE FIELD cod_mon CALL busca_monedas() ON KEY (control-w) CASE WHEN INFIELD(cod_sp) CALL busca_suplidor() LET int_flag = FALSE IF factura.cod_sp_sec IS NULL OR factura.cod_sp_sec = 0 THEN NEXT FIELD cod_sp ELSE DISPLAY BY NAME factura.cod_sp,factura.cod_sp_sec,nom_sup NEXT FIELD num_doc END IF EXIT CASE WHEN INFIELD(cod_sp_sec) CALL busca_suplidor() LET int_flag = FALSE IF factura.cod_sp_sec IS NULL OR factura.cod_sp_sec = 0 THEN NEXT FIELD cod_sp ELSE DISPLAY BY NAME factura.cod_sp,factura.cod_sp_sec,nom_sup ATTRIBUTE(BLUE) NEXT FIELD num_doc END IF EXIT CASE END CASE AFTER FIELD tipo_ncf IF tipo_ncf IS NOT NULL THEN SELECT a.descripcion INTO descripcion_ncf FROM cgtb00074 a WHERE a.codigo_fiscal=tipo_ncf IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_ncf END IF display BY NAME descripcion_ncf END IF {AFTER FIELD cod_mon IF cod_mon IS NOT NULL THEN SELECT a.ncf INTO chncf FROM cotb00031 a WHERE a.cod_mon = cod_mon IF chncf = 'NO' THEN EXIT INPUT END IF END IF} AFTER FIELD ncf IF NCF IS NOT NULL THEN if Length(ncf CLIPPED ) <> 19 THEN call fgl_winmessage('mensaje','La longitud no es valida debe tener 19 posiciones',1) NEXT FIELD ncf ELSE LET conteo=0 SELECT count(*) INTO conteo FROM cptb00004 a WHERE cod_sp=factura.cod_sp and cod_sp_sec=factura.cod_sp_sec and a.ncf=ncf IF conteo > 0 THEN call fgl_winmessage('mensaje','Este NCF ya esta registrado',1) NEXT FIELD ncf END IF END IF END IF AFTER FIELD cod_sp ### Codigo Suplidor If factura.cod_sp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp END IF AFTER FIELD cod_sp_sec ### Secuencia Suplidor IF factura.cod_sp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF SELECT a.nom_sp INTO nom_sup FROM cotb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF LET cod_sp1 = factura.cod_sp LET cod_sp2 = factura.cod_sp_sec DISPLAY BY NAME nom_sup ATTRIBUTE (BLUE)#### Nombre del suplidor SELECT cuenta_no INTO cuenta FROM cotb00001 WHERE cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec If cuenta IS NULL THEN LET numero_msg = 393 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF BEFORE FIELD num_doc LET factura.num_doc = NULL DISPLAY BY NAME factura.num_doc AFTER FIELD num_doc #### Numero del documento o factura IF factura.num_doc IS NULL OR factura.num_doc[1] = " " THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF SELECT UNIQUE a.num_doc,a.status_t INTO factura.num_doc,datos_usu.status_t FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.num_doc = factura.num_doc AND a.tipo_doc = "FT" ##### Proceso para evitar se digite el mismo numero de factura ##### Para el mismo suplidor IF datos_usu.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD num_doc END IF IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_doc END IF BEFORE FIELD fecha_orig IF fecha1 IS NULL OR fecha1 > TODAY THEN LET fecha1 = today END IF LET factura.fecha_orig = fecha1 DISPLAY BY NAME factura.fecha_orig AFTER FIELD fecha_orig IF factura.fecha_orig IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF IF factura.fecha_orig > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET fecha1 = factura.fecha_orig LET p_fechas = factura.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF BEFORE FIELD fecha_proc SELECT b.term_sp INTO term_sp FROM cotb00001 b WHERE b.cod_sp=factura.cod_sp AND b.cod_sp_sec=factura.cod_sp_sec SELECT a.dias INTO dias FROM cotb00024 a WHERE a.term_sp=term_sp LET fecha_control = factura.fecha_orig LET factura.fecha_proc = fecha_control + dias IF factura.cod_sp = 23 THEN LET factura.fecha_proc = factura.fecha_orig DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE) NEXT FIELD valor_fac END IF DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE) {AFTER FIELD fecha_proc IF factura.cod_sp = 23 THEN LET factura.fecha_proc = factura.fecha_orig DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE) END IF IF factura.fecha_proc IS NULL OR factura.fecha_proc > TODAY THEN LET factura.fecha_proc = today END IF DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE) LET fecha2 = factura.fecha_proc } AFTER FIELD valor_fac IF factura.valor_fac IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_fac END IF IF factura.valor_fac < 0 THEN LET valor = 0 NEXT FIELD valor_fac END IF AFTER FIELD tipo_oc IF factura.tipo_oc is null THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD tipo_oc END IF AFTER FIELD orden_no IF factura.orden_no IS NOT null THEN SELECT UNIQUE a.cod_sp,a.cod_sp_sec INTo factura.cod_sp,factura.cod_sp_sec FROM cotb00014 a WHERE a.tipo = factura.tipo_oc AND a.num_oc = factura.orden_no AND # a.cod_sp = factura.cod_sp AND # a.cod_sp_sec = factura.cod_sp_sec AND a.status_t is null IF status = notfound THEN LET numero_msg = 358 CALL msg(numero_msg) NEXT FIELD tipo_oc END IF DISPLAY BY NAME factura.cod_sp,factura.cod_sp_sec #LET numero_msg = 16 #CALL msg(numero_msg) # NEXT FIELD orden_no END IF AFTER INPUT EXIT INPUT END INPUT ##### Proceso Para abortar OPERACION ###### IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF CALL contab() IF int_flag THEN LET int_flag = false RETURN END IF LET debito1 = debito1 + cuentas[curr1].debito LET credito1 = cuentas[curr1].credito + credito1 DECLARE buscar4 CURSOR FOR SELECT UNIQUE "N",a.num_doc,a.tipo_doc,a.valor *-1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a =a.num_doc AND a.tipo_doc IN ("ND") AND a.tipo = "ND" AND a.status_t IS NULL ORDER BY 2 LET idx = 1 FOREACH buscar4 INTO arrfac[idx].* LET arr_fac1[idx].tipo = "N" LET arr_fac1[idx].aplica_a = arrfac[idx].aplica_a LET arr_fac1[idx].tipo_doc = arrfac[idx].tipo_doc LET arr_fac1[idx].valor_prep = arrfac[idx].valor_prep LET arr_fac1[idx].valor = arrfac[idx].valor_prep LET idx = idx + 1 END FOREACH DECLARE buscar CURSOR FOR SELECT UNIQUE "N",a.num_doc,a.tipo_doc,SUM(a.valor*-1) FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a is null AND a.tipo_doc IN ("CP") AND a.status_t IS NULL GROUP BY a.num_doc,a.tipo_doc ORDER BY a.num_doc LET idx1 = idx FOREACH buscar INTO arrfac[idx].* SELECT SUM(a.valor) INTO valor1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a IS NOT NULL AND a.num_doc = arrfac[idx].aplica_a AND a.tipo_doc = "CP" AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF LET arrfac[idx].valor_prep = arrfac[idx].valor_prep + valor1 LET arrfac[idx].valor = arrfac[idx].valor_prep IF arrfac[idx].valor > 0 THEN LET arr_fac1[idx1].tipo = "N" LET arr_fac1[idx1].aplica_a = arrfac[idx].aplica_a LET arr_fac1[idx1].tipo_doc = arrfac[idx].tipo_doc LET arr_fac1[idx1].valor_prep = arrfac[idx].valor_prep LET arr_fac1[idx1].valor = arrfac[idx].valor LET idx1 = idx1 + 1 END IF LET idx = idx + 1 END FOREACH LET l = 1 FOR p = 1 TO idx IF arr_fac1[p].aplica_a is not null THEN IF arr_fac1[l].valor_prep > 0 THEN LET arr_fac1[l].tipo = "N" LET arr_fac1[l].aplica_a = arrfac[p].aplica_a LET arr_fac1[l].tipo_doc = arrfac[p].tipo_doc LET arr_fac1[l].valor_prep = arrfac[p].valor_prep LET arr_fac1[l].valor = arrfac[p].valor_prep LET l = l + 1 END IF END IF END FOR CALL SET_COUNT(l - 1) LABEL volver1: CALL arr_fac1.clear() INPUT ARRAY arr_fac1 WITHOUT DEFAULTS FROM factura1.* BEFORE ROW LET curr = arr_curr() LET fila = scr_line() AFTER FIELD valor ##### Valor del documento o factura IF arr_fac1[curr].valor IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor END IF IF arr_fac1[curr].valor > arr_fac1[curr].valor_prep THEN LET numero_msg = 162 CALL msg(numero_msg) NEXT FIELD valor END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF LET total1 = 0 FOR k = 1 TO arr_curr() IF arr_fac1[k].tipo = "S" THEN LET total1 = total1 + arr_fac1[k].valor END IF END FOR IF total1 > factura.valor_fac THEN LET numero_msg = 162 CALL msg(numero_msg) GOTO volver1 END IF LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM GOTO volver END FUNCTION ###### Proceso de Modificacion de registros FUNCTION cppcmd000() ##### Criterio de Busqueda de informacion a consultar y/o modificar CONSTRUCT CRITERIO ON b.cod_sp,b.cod_sp_sec,b.num_doc,b.fecha_orig, b.fecha_proc,b.valor,b.detalle,a.codigo_fiscal,a.ncf FROM cod_sp,cod_sp_sec,num_doc,fecha_orig,fecha_proc, valor,detalle,tipo_ncf,ncf IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ##### Busquedas de los datos generales LET selec = "SELECT b.cod_sp,b.cod_sp_sec,b.num_doc,CONVERT(CHAR(10),b.fecha_orig,103), ", "CONVERT(CHAR(10),b.fecha_proc,103),b.valor,b.tipo,b.orden_no,b.detalle,b.status_t,b.us_crea, ", "CAST(b.fech_crea AS CHAR(16)),b.us_mod,CAST(b.fech_mod AS CHAR(16)),a.codigo_fiscal, ", " a.ncf,(a.monto_itbi),foto_producto,nombre_file_foto", " FROM cptb00001 b LEFT OUTER join cptb00004 a ON b.num_doc = a.num_doc and ", " b.cod_sp = a.cod_sp AND b.cod_sp_sec = a.cod_sp_sec ", " WHERE ", " b.status_t is null AND b.tipo_doc = 'FT' And ", criterio clipped," ORDER BY b.fecha_orig,b.num_doc " PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos #### Buscando el primer registro FETCH FIRST datos INTO factura.*,datos_usu.*,tipo_ncf,ncf,itbis,foto,nombre_file_foto IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf,itbis,foto,nombre_file_foto ATTRIBUTE(BLUE) MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO factura.*,datos_usu.*,tipo_ncf,ncf,itbis,foto,nombre_file_foto DISPLAY foto IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf,itbis ATTRIBUTE(BLUE) COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO factura.*,datos_usu.*,tipo_ncf,ncf,itbis,foto,nombre_file_foto IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf,itbis ATTRIBUTE(BLUE) COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO factura.*,datos_usu.*,tipo_ncf,ncf,itbis,foto,nombre_file_foto IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf,itbis ATTRIBUTE(BLUE) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO factura.*,datos_usu.*,tipo_ncf,ncf,itbis,foto,nombre_file_foto IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL suplidor(factura.cod_sp,factura.cod_sp_sec,tipo_ncf) RETURNING nom_sup,descripcion_ncf,cuenta_mayor DISPLAY BY NAME factura.*,nom_sup,descripcion_ncf,tipo_ncf,ncf,itbis ATTRIBUTE(BLUE) ###### Escoger registro para modificar COMMAND "Escoger" "Actualiza Registro Cancela Operacion Codigo Suplidor" LET p_fechas = factura.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera LET debe_ir = "N" IF bandera = 1 THEN LET bandera = 0 LET debe_ir = "S" RETURN END IF SELECT a.descripcion INTO descripcion_ncf FROM cgtb00074 a WHERE a.codigo_fiscal=tipo_ncf SELECT a.codigo_fiscal,a.ncf,a.monto_itbi INTO tipo_ncf, ncf,itbis FROM cptb00004 a WHERE a.cod_sp=factura.cod_sp AND a.cod_sp_sec=factura.cod_sp_sec AND a.num_doc=factura.num_doc DISPLAY BY NAME tipo_ncf, ncf,itbis,descripcion_ncf IF debe_ir = "N" THEN INPUT BY NAME factura.fecha_orig,factura.fecha_proc,factura.valor_fac,itbis, factura.tipo_oc,factura.orden_no,tipo_ncf,cod_mon,ncf, factura.detalle WITHOUT DEFAULTS AFTER FIELD itbis IF itbis IS NULL THEN CALL msg(16) NEXT FIELD itbis END IF { AFTER FIELD tipo_oc IF factura.tipo_oc is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_oc END IF AFTER FIELD orden_no IF factura.orden_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_oc END IF SELECT UNIQUE a.tipo,a.num_oc FROM cotb00014 a WHERE a.tipo = factura.tipo_oc AND a.num_oc = factura.orden_no AND a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.status_t is null IF status = notfound THEN LET numero_msg = 358 CALL msg(numero_msg) NEXT FIELD tipo_oc END IF } BEFORE FIELD cod_mon CALL busca_monedas() AFTER FIELD fecha_orig IF factura.fecha_orig IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = factura.fecha_orig CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF AFTER FIELD fecha_proc IF factura.fecha_proc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_proc END IF DISPLAY BY NAME factura.fecha_proc ATTRIBUTE(BLUE) AFTER FIELD valor_fac IF factura.valor_fac IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_fac END IF { IF factura.cod_sp = 21 OR factura.cod_sp = 22 THEN NEXT FIELD tipo_oc ELSE NEXT FIELD detalle END IF } AFTER INPUT EXIT INPUT END INPUT ##### Proceso Para abortar OPERACION ###### IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF END IF LET debe_ir = "N" CALL contab() DECLARE busca2 CURSOR FOR SELECT "S",a.num_doc,a.tipo_doc,a.valor * -1,a.valor * -1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a = factura.num_doc AND a.tipo = "ND" AND a.status_t IS NULL ORDER BY 2 LET idx = 1 FOREACH busca2 INTO arrfac[idx].* LET idx = idx + 1 END FOREACH DECLARE busca3 CURSOR FOR SELECT "N",a.num_doc,a.tipo_doc,a.valor * -1,a.valor * -1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a = a.num_doc AND a.tipo = "ND" AND a.status_t IS NULL ORDER BY 2 FOREACH busca3 INTO arrfac[idx].* LET idx = idx + 1 END FOREACH DECLARE buscar1 CURSOR FOR SELECT "S",a.num_doc,a.tipo_doc,a.valor * -1,a.valor * -1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a = factura.num_doc AND a.tipo_doc in ("CP") AND a.status_t IS NULL ORDER BY 2 FOREACH buscar1 INTO arrfac[idx].* SELECT SUM(a.valor) INTO valor2 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a IS NULL AND a.num_doc = arrfac[idx].aplica_a AND a.tipo_doc in ("CP") AND a.status_t IS NULL SELECT SUM(a.valor) INTO valor1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a IS NOT NULL AND a.num_doc = arrfac[idx].aplica_a AND a.tipo_doc in ("CP") AND a.status_t IS NULL AND a.aplica_a != arrfac[idx].aplica_a IF valor1 IS NULL THEN LET valor1 = 0 END IF IF valor2 IS NULL THEN LET valor2 = 0 END IF LET arrfac[idx].valor = arrfac[idx].valor_prep LET arrfac[idx].valor_prep = valor2 - valor1 LET idx = idx + 1 END FOREACH DECLARE buscar20 CURSOR FOR SELECT UNIQUE "N",a.num_doc,a.tipo_doc,SUM(a.valor*-1) FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a is null AND a.tipo_doc IN ("CP") AND a.status_t IS NULL GROUP BY a.num_doc,a.tipo_doc ORDER BY a.num_doc LET idx1 = idx FOREACH buscar20 INTO arrfac[idx].* SELECT SUM(a.valor) INTO valor1 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.aplica_a IS NOT NULL AND a.num_doc = arrfac[idx].aplica_a AND a.tipo_doc = "CP" AND a.status_t IS NULL IF valor1 IS NULL THEN LET valor1 = 0 END IF LET arrfac[idx].valor_prep = arrfac[idx].valor_prep + valor1 LET arrfac[idx].valor = arrfac[idx].valor_prep IF arrfac[idx].valor > 0 THEN LET arr_fac1[idx1].tipo = "N" LET arr_fac1[idx1].aplica_a = arrfac[idx].aplica_a LET arr_fac1[idx1].tipo_doc = arrfac[idx].tipo_doc LET arr_fac1[idx1].valor_prep = arrfac[idx].valor_prep LET arr_fac1[idx1].valor = arrfac[idx].valor LET idx1 = idx1 + 1 END IF LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) LABEL volver2: INPUT ARRAY arrfac WITHOUT DEFAULTS FROM factura1.* BEFORE ROW LET curr = arr_curr() LET fila = scr_line() AFTER FIELD aplica_a IF arrfac[curr].tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo END IF IF arrfac[curr].aplica_a IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF arrfac[curr].tipo_doc = "CP" THEN SELECT SUM(a.valor) INTO valor3 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.tipo_doc = "CP" AND a.num_doc = arrfac[curr].aplica_a AND a.aplica_a IS NOT NULL AND a.num_doc != arrfac[curr].aplica_a AND a.status_t IS NULL SELECT SUM(a.valor * -1) INTO valor2 FROM cptb00001 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.tipo_doc = "CP" AND a.num_doc = arrfac[curr].aplica_a AND a.aplica_a IS NULL AND a.status_t IS NULL IF valor2 IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF valor2 IS NULL THEN LET valor2 = 0 END IF IF valor3 IS NULL THEN LET valor3 = 0 END IF LET arrfac[curr].valor_prep = valor2 + valor3 IF arrfac[curr].valor IS NULL THEN LET arrfac[curr].valor = arrfac[curr].valor_prep END IF IF arrfac[curr].valor > arrfac[curr].valor_prep THEN LET numero_msg = 162 CALL msg(numero_msg) NEXT FIELD valor END IF ELSE SELECT unique valor*-1 INTO valor2 FROM cptb00001 WHERE num_doc = arrfac[curr].aplica_a and tipo_doc = "ND" and cod_sp = factura.cod_sp and cod_sp_sec = factura.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF DISPLAY arrfac[curr].aplica_a,arrfac[curr].tipo_doc,arrfac[curr].valor_prep, arrfac[curr].valor TO factura1[fila].aplica_a,factura1[fila].tipo_doc,factura1[fila].valor_prep, factura1[fila].valor AFTER FIELD valor ##### Valor del documento o factura IF arrfac[curr].valor IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor END IF IF arrfac[curr].valor > arrfac[curr].valor_prep THEN LET numero_msg = 162 CALL msg(numero_msg) NEXT FIELD valor END IF END INPUT ############## TERMINA INPUT ARRAY##################################### IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF LET total1 = 0 FOR k = 1 TO arr_curr() IF arrfac[k].tipo = "S" THEN LET total1 = total1 + arrfac[k].valor END IF END FOR IF total1 > factura.valor_fac THEN LET numero_msg = 162 CALL msg(numero_msg) GOTO volver2 END IF ###### Insertando registros en la Maestra de cuentas por Pagar #### LET cod_sp1 = factura.cod_sp DELETE FROM cptb00001 WHERE @aplica_a = factura.num_doc AND @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @tipo_doc = "CP" AND fecha_orig > "01/01/2008" UPDATE cptb00001 set (fecha_orig,fecha_proc,orden_no,tipo,detalle, us_mod,fech_mod,valor) = (factura.fecha_orig,factura.fecha_proc, factura.orden_no,factura.tipo_oc, factura.detalle, usuarios,GETDATE(),factura.valor_fac) WHERE @num_doc = factura.num_doc AND @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @tipo_doc = "FT" BEGIN work LET k = 0 FOR idx = 1 to ARR_COUNT() LET k = k + 1 IF arrfac[idx].tipo = "S" AND arrfac[idx].valor > 0 THEN LET arrfac[idx].valor = arrfac[idx].valor * -1 IF arrfac[idx].tipo_doc = "CP" THEN INSERT INTO cptb00001 values (arrfac[idx].tipo_doc, arrfac[idx].aplica_a, factura.cod_sp,factura.cod_sp_sec,factura.fecha_orig, factura.fecha_proc,ordenes[idx].*,factura.num_doc, null,arrfac[idx].valor,null,null,SUSER_SNAME(),GETDATE(),SUSER_SNAME(), GETDATE(),filedestino,pimagen,nombre_file_foto) ELSE UPDATE cptb00001 SET aplica_a = factura.num_doc WHERE num_doc = arr_fac1[idx].aplica_a and tipo_doc = "ND" AND tipo = "ND" END IF END IF IF arrfac[idx].tipo = "N" THEN UPDATE cptb00001 SET aplica_a = num_doc WHERE num_doc = arrfac[idx].aplica_a and tipo_doc = "ND" AND tipo = "ND" END IF END FOR IF k IS NULL OR k = 0 THEN LET k = 1 END IF DELETE FROM cptb00003 WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc AND fecha > "01/01/2008" ##para buscar las cuentas contables SELECT cuenta_no INTO cuenta FROM cotb00001 WHERE cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec LET credito=factura.valor_fac INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp, factura.cod_sp_sec,factura.num_doc,cuenta,null,null,null,null,null, 0,factura.valor_fac,NULL,NULL,NUll,SUSER_SNAME(),GETDATE()) IF cuenta_itibis IS NOT NULL AND itbis > 0 THEN INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp, factura.cod_sp_sec,factura.num_doc,cuenta_itibis,null,null,null,null,null, 0,itbis,NULL,SUSER_SNAME(),GETDATE(),NULL,NUll) END IF FOR idx = 1 TO cuentas.getLength() IF cuentas[idx].cuenta_no IS NOT NULL THEN IF cuentas[idx].debito <> 0 OR cuentas[idx].credito <> 0 THEN IF cuentas[idx].debito IS NULL THEN LET cuentas[idx].debito = 0 END IF IF cuentas[idx].credito IS NULL THEN LET cuentas[idx].credito = 0 END IF INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp, factura.cod_sp_sec,factura.num_doc,cuentas[idx].cuenta_no, cuentas[idx].departamento,cuentas[idx].num_doc,cuentas[idx].cod_aux, cuentas[idx].sec_aux,factura.detalle,cuentas[idx].debito,cuentas[idx].credito, NULL,NULL,NUll,SUSER_SNAME(),GETDATE()) END IF END IF END FOR CALL cuadrada(factura.cod_sp,factura.cod_sp_sec,factura.num_doc) RETURNING cuadradatrx IF cuadradatrx THEN COMMIT WORK ELSE ROLLBACK WORK CALL fgl_winmessage("MENSAJE","HUBO UN ERROR EN EL CUADRE DE LAS CUENTAS","STOP") END IF LET numero_msg = 13 CALL msg(numero_msg) IF debe_ir = "S" THEN LET handler = configureOutput("SVG") START REPORT apl_fact TO XML HANDLER handler FOR idx = 1 TO k IF arrfac[idx].tipo IS NOT NULL THEN LET j.cod_sp = factura.cod_sp LET j.cod_sp_sec = factura.cod_sp_sec LET j.nom_sup = nom_sup LET j.num_doc = factura.num_doc LET j.valor_fac = factura.valor_fac LET j.detalle = factura.detalle LET j.tipo = arrfac[idx].tipo LET j.aplica_a = arrfac[idx].aplica_a LET j.valor = arrfac[idx].valor OUTPUT TO REPORT apl_fact(j.*) END IF END FOR FINISH REPORT apl_fact ##### Proceso Para Anular una Factura END IF COMMAND KEY ("L") "eLiminar" LET bandera = 0 LET p_fechas = factura.fecha_orig { CALL prd(p_fechas) IF bandera = 1 THEN LET bandera = 0 RETURN END IF } # Inserta en la tabla Historica Registros Eliminados INSERT INTO cptb00006 (tipo_doc, num_doc, cod_sp, cod_sp_sec, fecha_orig, fecha_proc, orden_no, tipo, aplica_a, cta_ctble, valor, detalle, status_t, us_crea, fech_crea, us_mod, fech_mod) select z.tipo_doc, z.num_doc, z.cod_sp, z.cod_sp_sec, z.fecha_orig, z.fecha_proc, z.orden_no, z.tipo, z.aplica_a, z.cta_ctble, z.valor, z.detalle, z.status_t, z.us_crea, z.fech_crea, z.us_mod, z.fech_mod from cptb00001 z WHERE z.tipo_doc = 'FT' AND z.cod_sp = factura.cod_sp AND z.cod_sp_sec = factura.cod_sp_sec AND z.aplica_a = factura.num_doc UPDATE cptb00006 set us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @tipo_doc = "FT" AND @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @aplica_a = factura.num_doc #------------------------------------------------------------------------- DELETE FROM cptb00001 WHERE @tipo_doc = "FT" AND @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @aplica_a = factura.num_doc and fecha_orig > "01/01/2008" # Inserta en la tabla Historica Registros Eliminados INSERT INTO cptb00005 select *from cptb00003 WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc UPDATE cptb00005 set us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc #-------------------------------------------------------------------------- SELECT UNIQUE a.ref INTO ent_num FROM cgtb00004 a where a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.factura = factura.num_doc DELETE FROM cgtb00004 WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc DELETE FROM cptb00003 WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc and fecha > "01/01/2008" LET numero_msg = 82 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION #### Busqueda de datos generales referente a un suplidor FUNCTION busca_suplidor() LET int_flag = FALSE OPEN WINDOW busca_sp AT 10,3 WITH FORM "cpfmwd001" ATTRIBUTE(BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST) CONSTRUCT criterio ON a.nom_sp FROM nom_sp IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLOSE WINDOW busca_sp RETURN END IF LET selec = "SELECT a.cod_sp,a.cod_sp_sec,a.nom_sp FROM cotb00001 a ", "WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY 3 " PREPARE comando1 FROM selec DECLARE busc CURSOR FOR comando1 LET idx = 1 FOREACH busc INTO supl[idx].cod_sp,supl[idx].cod_sp_sec,supl[idx].nom_sp LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx -1) DISPLAY ARRAY supl TO s_suplid.* LET curr = ARR_CURR() LET factura.cod_sp = supl[curr].cod_sp LET factura.cod_sp_sec = supl[curr].cod_sp_sec LET nom_sup = supl[curr].nom_sp CLOSE WINDOW busca_sp END FUNCTION FUNCTION contab() DEFINE tdebito,tcredito,diferencia DEC(12,2), isr_ctas DEC(12,2), ncf41 VARCHAR(13) LET int_flag = FALSE OPEN WINDOW cpfmwd007 AT 10,3 WITH FORM "cpfmwd007" ATTRIBUTE(BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST) DECLARE busca_ctas CURSOR FOR SELECT a.cuenta_no,a.departamento,a.cod_aux,a.cod_sec,a.num_doc, a.debito,a.credito FROM cptb00003 a,cotb00001 b WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.cod_sp = b.cod_sp AND a.cod_sp_Sec = b.cod_sp_Sec AND a.factura = factura.num_doc AND a.cuenta_no <> b.cuenta_no LET idx2 = 1 LET tdebito = 0 LET tcredito = 0 FOREACH busca_ctas INTO cuentas[idx2].* LET tdebito = tdebito + cuentas[idx2].debito LET tcredito = tcredito + cuentas[idx2].credito LET idx2 = idx2 + 1 END FOREACH CALL SET_COUNT(idx2 - 1) DISPLAY BY NAME tdebito,tcredito LABEL arreglo1: LET int_flag = FALSE INPUT ARRAY cuentas WITHOUT DEFAULTS FROM cuentas1.* BEFORE ROW LET curr = ARR_CURR() LET curr1 = SCR_LINE() ON KEY (control-W) LET curr1 = arr_curr() LET scr_l = scr_line() CASE WHEN INFIELD (cuenta_no) CALL busca_cuenta() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE NEXT FIELD cuenta_no END IF IF status = NOTFOUND THEN LET numero_msg = 159 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET descripcion = cuentas1[curr1].descripcion LET cuentas[curr].cuenta_no = cuentas1[curr1].cuenta_no DISPLAY BY NAME cuentas[curr].cuenta_no,descripcion END CASE AFTER FIELD cuenta_no IF cuentas[curr].cuenta_no IS NOT NULL THEN SELECT a.descripcion,a.cata,a.depto,a.nivel,a.ref INTO descripcion,cat,dpto,niv,refe FROM cgtb00001 a WHERE a.status_t IS NULL AND a.cuenta_no = cuentas[curr].cuenta_no AND a.nivel = 3 IF STATUS = NOTFOUND OR descripcion IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF DISPLAY BY NAME descripcion ATTRIBUTE(BLUE) -- compra electronica 41: cuenta marcada como retencion -> ISR retenido IF e41_activo() THEN IF e41_cuenta_isr(cuentas[curr].cuenta_no) THEN IF NVL(cuentas[curr].debito,0) = 0 AND NVL(cuentas[curr].credito,0) = 0 THEN LET cuentas[curr].credito = e41_isr() DISPLAY cuentas[curr].credito TO cuentas1[curr1].credito END IF END IF END IF IF cuentas[curr].cuenta_no = cuenta_mayor THEN CALL msg(192) NEXT FIELD cuenta_no END IF IF cat = "S" THEN IF cuentas[curr].cod_aux IS NULL THEN LET cuentas[curr].cod_aux = factura.cod_sp END IF IF cuentas[curr].sec_aux IS NULL THEN LET cuentas[curr].sec_aux = factura.cod_sp_sec END IF END IF IF refe = "S" THEN IF cuentas[curr].num_doc IS NULL THEN LET cuentas[curr].num_doc = factura.orden_no END IF END IF DISPLAY cuentas[curr].cod_aux,cuentas[curr].sec_aux,cuentas[curr].num_doc TO cuentas1[curr1].cod_aux,cuentas1[curr1].sec_aux,cuentas1[curr1].num_doc END IF BEFORE FIELD departamento IF dpto = "N" OR dpto IS NULL THEN LET cuentas[curr].departamento = NULL NEXT FIELD cod_aux END IF AFTER FIELD departamento IF cuentas[curr].departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF SELECT UNIQUE a.departamento FROM adtb00001 a WHERE a.status_t IS NULL AND a.departamento = cuentas[curr].departamento IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF BEFORE FIELD cod_aux IF cat = "N" OR cat IS NULL THEN LET cuentas[curr].cod_aux = NULL LET cuentas[curr].sec_aux = NULL NEXT FIELD num_doc END IF AFTER FIELD cod_aux IF cat = "N" OR cat IS NULL THEN LET cuentas[curr].cod_aux = NULL LET cuentas[curr].sec_aux = NULL NEXT FIELD num_doc END IF BEFORE FIELD num_doc IF refe = "N" OR refe IS NULL THEN LET cuentas[curr].num_doc = NULL NEXT FIELD debito END IF AFTER FIELD num_doc IF refe = "N" OR refe IS NULL THEN LET cuentas[curr].num_doc = NULL NEXT FIELD debito END IF AFTER ROW IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF IF cuentas[curr].cuenta_no is not null THEN IF cuentas[curr].debito = 0 and cuentas[curr].credito = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF AFTER INPUT LET tdebito =0 LET tcredito=0 FOR idx = 1 TO cuentas.getLength() IF cuentas[idx].cuenta_no IS NOT NULL THEN LET tdebito = tdebito + cuentas[idx].debito LET tcredito = tcredito + cuentas[idx].credito END IF END FOR DISPLAY BY NAME tdebito,tcredito LET tdebito = 0 LET tcredito = 0 FOR idx = 1 TO arr_count() IF cuentas[idx].debito is null THEN LET cuentas[idx].debito = 0 END IF IF cuentas[idx].credito is null THEN LET cuentas[idx].credito = 0 END IF LET tdebito = tdebito + cuentas[idx].debito LET tcredito = cuentas[idx].credito + tcredito END FOR LET tcredito = tcredito + factura.valor_fac LET diferencia = tdebito-tcredito DISPLAY BY NAME diferencia,tdebito,tcredito IF diferencia <> 0 THEN CALL msg(174) NEXT FIELD cuenta_no END IF -- compra electronica 41: el ISR de las cuentas de retencion debe ser el calculado IF e41_activo() THEN LET isr_ctas = 0 FOR idx = 1 TO arr_count() IF cuentas[idx].cuenta_no IS NOT NULL THEN IF e41_cuenta_isr(cuentas[idx].cuenta_no) THEN LET isr_ctas = isr_ctas + NVL(cuentas[idx].credito,0) - NVL(cuentas[idx].debito,0) END IF END IF END FOR IF isr_ctas <> e41_isr() THEN CALL fgl_winmessage("COMPRA ELECTRONICA", "La retencion de ISR en las cuentas ("||isr_ctas||") no es igual a la calculada ("||e41_isr()||").\n"|| "Use una cuenta marcada como retencion en el catalogo.","stop") NEXT FIELD cuenta_no END IF END IF BEGIN WORK -- compra electronica 41: se reserva el e-NCF ahora (si se cancela no se pierde) IF e41_activo() THEN LET ncf41 = e41_reserva_ncf() IF ncf41 IS NULL THEN ROLLBACK WORK NEXT FIELD cuenta_no END IF LET factura.num_doc = ncf41 LET ncf = ncf41 END IF ###### Insertando registros en la Maestra de cuentas por Pagar #### LET cod_sp1 = factura.cod_sp SELECT * FROM cptb00001 WHERE num_doc=factura.num_doc AND cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec AND tipo_doc="FT" IF status = NOTFOUND THEN INSERT INTO cptb00001 values ("FT",factura.num_doc,factura.cod_sp, factura.cod_sp_sec,factura.fecha_orig,factura.fecha_proc, factura.orden_no,factura.tipo_oc, factura.num_doc,null,factura.valor_fac,factura.detalle,null,usuarios, GETDATE(),null,NULL,filedestino,pimagen,nombre_file_foto) END IF IF ncf IS NOT NULL THEN SELECT a.cod_sp FROM cptb00004 a WHERE a.cod_sp = factura.cod_sp AND a.cod_sp_Sec = factura.cod_sp_sec AND a.num_doc = factura.num_doc DISPLAY "update " IF STATUS = NOTFOUND THEN DISPLAY "update 2" INSERT INTO cptb00004 (cod_sp, cod_sp_sec, num_doc,codigo_fiscal, ncf, monto_itbi, US_CREA, FECH_CREA,cod_moneda) values(factura.cod_sp,factura.cod_sp_sec,factura.num_doc, tipo_ncf,ncf,itbis,suser_sname(),getdate(), cod_mon) ELSE UPDATE cptb00004 SET codigo_fiscal = tipo_ncf, ncf = ncf, monto_itbi = itbis, us_crea =suser_sname(), fech_crea =getdate() WHERE cod_sp = factura.cod_sp AND cod_sp_sec = factura.cod_sp_sec AND num_doc = factura.num_doc END IF END IF { IF ncf IS NOT NULL THEN INSERT INTO cptb00004 (cod_sp, cod_sp_sec, num_doc,codigo_fiscal, ncf, monto_itbi, US_CREA, FECH_CREA,cod_moneda) values(factura.cod_sp,factura.cod_sp_sec,factura.num_doc, tipo_ncf,ncf,itbis,suser_sname(),getdate(), cod_mon) END IF } FOR idx = 1 TO arr_fac1.getLength() IF arr_fac1[idx].tipo = "S" AND arr_fac1[idx].valor > 0 THEN IF arr_fac1[idx].tipo_doc = "CP" THEN LET arrfac[idx].valor = arrfac[idx].valor * -1 INSERT INTO cptb00001 values (arr_fac1[idx].tipo_doc, arr_fac1[idx].aplica_a, factura.cod_sp,factura.cod_sp_sec,factura.fecha_orig, factura.fecha_proc,ordenes[idx].*,factura.num_doc, null,arr_fac1[idx].valor,null,null,SUSER_SNAME(),GETDATE(),null,NULL,filedestino,pimagen,nombre_file_foto) ELSE UPDATE cptb00001 set aplica_a = factura.num_doc WHERE num_doc = arr_fac1[idx].aplica_a and tipo_doc = "ND" AND tipo = "ND" END IF END IF END FOR LET ent_num=null SELECT UNIQUE a.ref INTO ent_num FROM cgtb00004 a where a.cod_sp = factura.cod_sp AND a.cod_sp_sec = factura.cod_sp_sec AND a.factura = factura.num_doc DELETE FROM cptb00003 WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc AND fecha > "01/01/2008" DELETE FROM cgtb00004 WHERE @cod_sp = factura.cod_sp AND @cod_sp_sec = factura.cod_sp_sec AND @factura = factura.num_doc { IF factura.cod_sp = 22 THEN LET cuenta = "2114" END IF IF factura.cod_sp = 23 THEN LET cuenta = "2113" END IF IF factura.cod_sp = 24 THEN LET cuenta = "2116" END IF } ##para buscar las cuentas contables SELECT cuenta_no INTO cuenta FROM cotb00001 WHERE cod_sp=factura.cod_sp AND cod_sp_sec=factura.cod_sp_sec LET credito=factura.valor_fac FOR idx = 1 TO cuentas.getLength() IF cuentas[idx].cuenta_no IS NOT NULL THEN IF idx = 1 THEN IF cuenta IS NOT NULL then INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp, factura.cod_sp_sec,factura.num_doc,cuenta,null,null,null,null,null, 0,credito,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL) IF ent_num IS NULL THEN LET numero_ent = 18 LET pano = YEAR(factura.fecha_orig) LET tiempo = MONTH(factura.fecha_orig) using "&&",pano[3,4] SELECT MAX(a.ref[7,9]) INTO ultimo FROM cgtb00004 a WHERE a.ref[4,5] = numero_ent and a.ref[11,14] = tiempo IF ultimo is null THEN LET ultimo = 0 END IF LET ultimo = ultimo + 1 LET entrada_no = "ED.18-",ultimo USING "&&&","/",tiempo ELSE LET entrada_no=ent_num END IF INSERT INTO cgtb00004 VALUES(factura.fecha_orig,1,entrada_no,cuenta,null,null,null,null,NULL,NULL,NULL,0,factura.valor_fac,NULL,suser_sname(),getdate(),NULL,NULL, factura.cod_sp,factura.cod_sp_sec,factura.num_doc) END IF IF cuenta_itibis IS NOT NULL THEN INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp, factura.cod_sp_sec,factura.num_doc,cuenta_itibis,null,null,null,null,null, 0,itbis,NULL,SUSER_SNAME(),GETDATE(),NULL,NUll) END IF END IF IF cuentas[idx].debito <> 0 OR cuentas[idx].credito <> 0 THEN IF cuentas[idx].debito IS NULL THEN LET cuentas[idx].debito = 0 END IF IF cuentas[idx].credito IS NULL THEN LET cuentas[idx].credito = 0 END IF INSERT INTO cptb00003 VALUES (factura.fecha_orig,factura.cod_sp, factura.cod_sp_sec,factura.num_doc,cuentas[idx].cuenta_no, cuentas[idx].departamento,cuentas[idx].num_doc,cuentas[idx].cod_aux, cuentas[idx].sec_aux,factura.detalle,cuentas[idx].debito,cuentas[idx].credito, NULL,SUSER_SNAME(),GETDATE(),NULL,NULL) INSERT INTO cgtb00004 VALUES(factura.fecha_orig,1,entrada_no,cuentas[idx].cuenta_no,null,null,null,null,NULL,NULL,NULL,cuentas[idx].debito,cuentas[idx].credito,NULL,suser_sname(),getdate(),NULL,NULL, factura.cod_sp,factura.cod_sp_sec,factura.num_doc) END IF END IF END FOR CALL cuadrada(factura.cod_sp,factura.cod_sp_sec,factura.num_doc) RETURNING cuadradatrx IF cuadradatrx AND e41_activo() THEN IF NOT e41_guarda(factura.cod_sp,factura.cod_sp_sec,factura.num_doc,factura.fecha_orig) THEN LET cuadradatrx = FALSE END IF END IF IF cuadradatrx THEN COMMIT WORK -- compra electronica 41: envio a la DGII IF e41_activo() THEN CALL e41_envia(factura.cod_sp,factura.cod_sp_sec,factura.num_doc, factura.fecha_orig,factura.fecha_proc,factura.detalle) END IF ELSE ROLLBACK WORK CALL fgl_winmessage("MENSAJE","HUBO UN ERROR EN EL CUADRE DE LAS CUENTAS","STOP") NEXT FIELD CUENTA_NO END IF END INPUT CLOSE WINDOW cpfmwd007 END FUNCTION REPORT apl_fact(x) DEFINE x RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sup CHAR(30), num_doc CHAR(13), valor_fac DECIMAL(12,2), detalle CHAR(30), tipo CHAR(1), aplica_a CHAR(10), valor DECIMAL(12,2) END RECORD DEFINE cod1,dias SMALLINT DEFINE direccion,p_descrip CHAR(30) DEFINE p_casa,p_zona,p_numero CHAR(10) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE normall CHAR(3) DEFINE comprimido CHAR(3) DEFINE hora CHAR(5) DEFINE tipo CHAR(2) DEFINE imp_cli CHAR(1) DEFINE credito, debito, tcredito, tdebito, tbalance,t_valor1,t_valor2, limite,b_balance,v1_30,v31_45,v46_60,vm_60,p_valor,t_valor3 DECIMAL(12,2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 PAGE LENGTH 66 FORMAT PAGE HEADER LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 027, ASCII 098 LET negrillas_off = ASCII 027, ASCII 099 LET comp_on = ASCII 31 LET comp_off = ASCII 30 LET comprimido = ASCII 031 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET normall = ASCII 030 LET hora = time LET lj = (86 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comp_off,negrillas_on PRINT COLUMN 1, "cpprmt001", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 79, "Pag. ",pageno using "###" PRINT COLUMN 16, " Sistema de Cuentas por Pagar", COLUMN 79, today using "dd/mm/yyyy" PRINT COLUMN 16, " Modificacion de Factura", COLUMN 82, hora SKIP 1 LINE LET b_balance = 0 PRINT COLUMN 1, "Factura No. : ",x.num_doc PRINT COLUMN 1, "Suplidor : ",x.cod_sp using "&&","-", x.cod_sp_sec using "&&&&", " ", x.nom_sup clipped PRINT COLUMN 1, "Fecha Aplic.: ", today USING "dd/mm/yyyy" PRINT COLUMN 1, "Valor Fact. : ", x.valor_fac USING "###,###,###.##" PRINT COLUMN 1, "Observacion : ", x.detalle CLIPPED SKIP 1 LINE PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------" PRINT COLUMN 1, "Tipo", COLUMN 20, "Aplica", COLUMN 65, "Monto " PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------" PRINT COLUMN 1, negrillas_off LET debito = 0 ON EVERY ROW LET debito = debito + x.valor PRINT COLUMN 1, x.tipo, COLUMN 20, x.aplica_a, COLUMN 60, x.valor USING "###,###,###.##" ON LAST ROW PRINT comp_off END REPORT FUNCTION busca_monedas() DEFINE pmoneda ui.combobox, kmoneda SMALLINT,kdescripcion CHAR(30) DECLARE moneda CURSOR FOR SELECT a.cod_mon,a.simbolo FROM cotb00031 a WHERE a.status_t is null ORDER BY a.descrip_mon LET pmoneda = ui.combobox.forname("formonly.cod_mon") CALL pmoneda.clear() FOREACH moneda INTO kmoneda,kdescripcion CALL pmoneda.additem(kmoneda,kdescripcion) END FOREACH END FUNCTION FUNCTION busca_cuenta() OPEN WINDOW cons_cuenta AT 10,5 WITH FORM "cgfmwd004" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) CONSTRUCT BY NAME criterio ON cuenta_no,descripcion IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET selec = "SELECT cuenta_no,descripcion,nivel FROM cgtb00001 ", "WHERE ",criterio clipped," and nivel=3 AND status_t is null ORDER BY 1" PREPARE comando FROM selec DECLARE busca5 CURSOR FOR comando OPEN busca5 LET idx = 1 WHILE STATUS != NOTFOUND FETCH busca5 INTO cuentas1[idx].* IF status = notfound THEN EXIT WHILE END IF LET idx = idx + 1 END WHILE IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF CALL set_count (idx - 1) DISPLAY ARRAY cuentas1 TO s_cuentas.* LET curr1 = arr_curr() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF CLOSE WINDOW cons_cuenta END FUNCTION FUNCTION cuadrada(pcodsp,pcodspsec,pfactura) DEFINE pcodsp,pcodspsec INT, pfactura VARCHAR(25), pvalor DEC(12,2) SELECT ISNULL(SUM(a.DEBITO-a.CREDITO),0) INTO pvalor FROM cptb00003 a WHERE a.cod_sp = pcodsp AND a.cod_sp_Sec = pcodspsec AND a.factura =pfactura IF pvalor = 0 THEN RETURN TRUE ELSE RETURN FALSE END IF END FUNCTION