{ ============================================================================== PROGRAMA : IRPRCS008 OBJETIVO : MANTENER LOS REGISTROS DEL CONTEO FISICO DEL INVENTARIO FECHA REALIZACION : 01/01/2010 PROGRAMADOR : ING. JUAN SOTO ============================================================================== } GLOBALS "irprgb000.4gl" DEFINE chtipoInventario,tipo,tabla1,tabla2,tabla3,tabla4,tabla5,tabla6,tabla7 CHAR(20), selecb,selece,selecA,selecC,insertac STRING, igualo,sumarizo,incluye CHAR(1), xfecha DATE, chalmacen,chseccion,chtramo,chselec1,chselec2,chselec3 char(20), arrdetalle DYNAMIC ARRAY OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_Sec SMALLINT, descripcion CHAR(40), unidad_med CHAR(4), fisico DEC(12,4), teorico DEC(12,4), diferencia DEC(12,4), costo DEC(12,4), valor1 DEC(12,4), valor2 DEC(12,4), usuario CHAR(40), fechacrea DATETIME YEAR TO SECOND, bodega SMALLINT, cod_seccion SMALLINT, cod_tramo SMALLINT, trxid INT END RECORD, campos CHAR(40),ano,codMov,idx1,almacen,seccion,tramo SMALLINT, respuesta,irespuesta,resajuste CHAR(3), numeroDoc,numeroEntrada,numeroSalida INT, cherror CHAR(100), numeroidtrx,codMovAjusteEntrada,CodMovAjusteSalida INTEGER, total2,total_fisico,total_teorico DEC(12,2),palmacen,pseccion,ptramo,pfecha ui.combobox, pexistencia DEC(12,4), busca_fecha,fecha_doc DATE, descrip_mov CHAR(30) MAIN #WHENEVER ERROR CONTINUE CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave # CALL ui.Interface.loadStyles("TopMenu") --DEFER INTERRUPT #LET usuarios = "jsoto" #LET clave = "lmmjvsd2009" CONNECT to "smarmotech" USER usuarios USING clave CALL STARTLOG("ircs08.log") # SELECT * INTO p_companias.* FROM companias OPTIONS FORM LINE 7 OPEN FORM irfmcs008 FROM "irfmcs008" DISPLAY FORM irfmcs008 CLEAR FORM MENU ON ACTION actualizarf LET tipo = "CONTEO" CLEAR FORM CALL Actualiza(tipo) ON ACTION eliminarf LET tipo = "CONTEO" CLEAR FORM CALL eliminar(tipo) ON ACTION actualizari LET tipo = "INVENTA" CLEAR FORM CALL actualiza(tipo) ON ACTION eliminari LET tipo = "INVENTA" CLEAR FORM CALL eliminar(tipo) ON ACTION actualizard LET tipo = "DOC" CLEAR FORM CALL actualizard() ON ACTION eliminard LET tipo = "DOC" CLEAR FORM CALL eliminar(tipo) ON ACTION salir EXIT MENU END MENU END MAIN FUNCTION cargatablas(xtipo_inventario) DEFINE xtipo_inventario CHAR(30) INITIALIZE arrdetalle TO NULL LET chtipoInventario = xtipo_inventario IF xtipo_inventario = "REPUESTOS" THEN LET tabla1 = "irtb00002" # MAESTRA PRODUCTOS LET tabla2 = "irtb00011" # MAESTRA CONTEO FISICO LET tabla3 = "irtb00012" # TRANSACCIONES CONTEO, PROVIENE DE LA PDA LET tabla4 = "irtb00013" # COSTOS STANDARD PRODUCTOS LET tabla5 = "irtb00006" # TRANSACCIONES DE INVENTARIOS DE LOS PRODUCTOS LET campos = "a.costo_st" # CAMPO DE LA TABLA DE COSTO LET tabla6 = "irtb00042" # DOCUMENTO TEMPORAL AJUSTE LET tabla7 = "irtb00005" # CODIGOS DE MOVIMIENTOS END IF IF xtipo_inventario = "MATERIA PRIMA" THEN LET tabla1 = "intb00001" # MAESTRA PRODUCTOS LET tabla2 = "intb00011" # MAESTRA CONTEO FISICO LET tabla3 = "intb00012" # TRANSACCIONES CONTEO, PROVIENE DE LA PDA LET tabla4 = "intb00013" # COSTOS STANDARD PRODUCTOS LET tabla5 = "intb00006" # TRANSACCIONES DE INVENTARIOS DE LOS PRODUCTOS LET campos = "a.costo_st" # CAMPO DE LA TABLA DE COSTO LET tabla6 = "intb00042" # DOCUMENTO TEMPORAL AJUSTE LET tabla7 = "intb00005" # CODIGOS DE MOVIMIENTOS END IF IF xtipo_inventario = "PRODUCTOS TERMINADOS" THEN LET tabla1 = "iptb00002" # MAESTRA PRODUCTOS LET tabla2 = "iptb00011" # MAESTRA CONTEO FISICO LET tabla3 = "iptb00012" # TRANSACCIONES CONTEO, PROVIENE DE LA PDA LET tabla4 = "iptb00004" # COSTOS STANDARD PRODUCTOS LET tabla5 = "iptb00006" # TRANSACCIONES DE INVENTARIOS DE LOS PRODUCTOS LET campos = "a.material+a.labor+a.gastos" # CAMPO DE LA TABLA DE COSTO LET tabla6 = "iptb00042" # DOCUMENTO TEMPORAL AJUSTE LET tabla7 = "iptb00005" # CODIGOS DE MOVIMIENTOS END IF LET selecA = "SELECT a.descrip_esp,a.unidad_med FROM ",tabla1 CLIPPED, " a ", "WHERE a.cod_n = ? AND ", " a.cod_grupo = ? AND ", " a.cod_tipo = ? AND ", " a.cod_sec = ? AND ", " a.status_t IS NULL" LET selecC = "SELECT ",campos CLIPPED," FROM ",tabla4 CLIPPED, " a ", "WHERE a.cod_n = ? AND ", " a.cod_grupo = ? AND ", " a.cod_tipo = ? AND ", " a.cod_sec = ? AND ", " a.ano = ? AND ", " a.mes_fin = '12' AND ", " a.status_t IS NULL" PREPARE articulos FROM selecA PREPARE costos FROM selecC {CALCULA EXISTENCIA EN LA TABLA DE CONTEO} LET selecb = "SELECT SUM(cantidad) FROM ",tabla3, "WHERE fecha = ? AND ", "cod_n = ? AND ", " cod_grupo = ? AND ", " cod_tipo = ? AND ", "cod_sec = ? " PREPARE existencia FROM selecb END FUNCTION FUNCTION actualiza(xtipo) DEFINE tipo_inventario CHAR(30), xtipo CHAR(20), existe BOOLEAN, cantidad_reg SMALLINT, xbodega SMALLINT LET sumarizo = "N" LET incluye = "N" INPUT BY NAME xfecha,tipo_inventario,almacen,seccion,tramo,sumarizo,incluye,igualo,busca_fecha BEFORE INPUT CALL calmacen() AFTER FIELD almacen CALL cseccion() CALL cfecha() AFTER FIELD busca_fecha LET xfecha = busca_fecha DISPLAY BY NAME xfecha AFTER FIELD seccion CALL ctramo() AFTER FIELD tipo_inventario CALL cargatablas(tipo_inventario) AFTER FIELD xfecha LET almacen = 1 LET seccion = 99 LET tramo = 99 AFTER INPUT IF int_flag THEN CALL fgl_winmessage("ERROR","OPERACION ABORTADA","stop") LET int_flag = FALSE RETURN END IF LET chalmacen = palmacen.getitemtext(almacen) LET chseccion = pseccion.getitemtext(seccion) LET chtramo = ptramo.getitemtext(tramo) IF xtipo <> "CONTEO" THEN IF sumarizo = "S" or incluye = "S" THEN CALL fgl_winmessage("ERROR","NO PUEDE SUMARIZAR, TAMPOCO INCLUIR MAS REGISTROS EN INVENTARIO","stop") LET sumarizo = "N" LET incluye = "N" DISPLAY BY NAME sumarizo,incluye,igualo END IF IF igualo = "S" THEN LET irespuesta = fgl_winquestion("Pregunta","Esta seguro que desea igualar la existencia fisica con la teorica?","no","yes|No","question",0) LET irespuesta = UPSHIFT(irespuesta) IF irespuesta = "NO" THEN CONTINUE INPUT END IF END IF END IF EXIT INPUT END INPUT IF almacen = 99 THEN LET chselec1 = " b.bodega < ? " ELSE LET chselec1 = " b.bodega = ? " END IF IF seccion = 99 THEN LET chselec2 = " b.cod_seccion < ? " ELSE LET chselec2 = " b.cod_seccion = ? " END IF IF tramo = 99 THEN LET chselec3 = " b.cod_tramo < ? " ELSE LET chselec3 = " b.cod_tramo = ? " END IF LET ano = YEAR(xfecha) CONSTRUCT BY NAME CRITERIO on a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec IF int_flag THEN CALL fgl_winmessage("ERROR","OPERACION ABORTADA","stop") LET int_flag = FALSE RETURN END IF LET selecE = "SELECT SUM(a.cantidad_2) FROM ",tabla5 CLIPPED," a ", "WHERE (a.cod_n = ? AND ",criterio CLIPPED, " AND ", " a.cod_grupo = ? AND ", " a.cod_tipo = ? AND ", " a.cod_SEC = ?) AND ", " (CONVERT(DATE,a.fecha,101) <= ?) AND ", " (a.status_t IS NULL) " PREPARE existencia1 FROM selecE IF xtipo = "CONTEO" THEN LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,101) FROM ", tabla3 CLIPPED, " a ", " WHERE CONVERT(DATE,a.fecha,101) = ? " PREPARE comando FROM selec EXECUTE comando USING xfecha # IF STATUS <> NOTFOUND THEN IF sumarizo = "S" THEN LET selec = "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp,a.unidad_med,SUM(b.cantidad),'0','0','0','0','0',", "' ',' ','1','1','1','1' ", "FROM ",tabla1 CLIPPED," a, ",tabla3 CLIPPED," b ", "WHERE ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec and ", chselec1 CLIPPED," AND ",chselec2 CLIPPED, " AND ",chselec3 CLIPPED, " ", " AND CONVERT(DATE,b.fecha,101) = ? ", " AND ",criterio CLIPPED, " GROUP BY b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp,a.unidad_med ", "ORDER by b.cod_n,b.cod_Grupo,b.cod_tipo,b.cod_sec" END IF IF incluye = "S" THEN IF seccion = 99 THEN CALL fgl_winmessage("ERROR", "NO PUEDE INCLUIR ITEMS CON TODAS LAS SECCIONES", "stop") RETURN END IF IF tramo = 99 THEN CALL fgl_winmessage("ERROR", "NO PUEDE INCLUIR ITEMS CON TODOS LOS TRAMOS", "stop") RETURN END IF LET selec = "INSERT INTO ",tabla3 CLIPPED,"(idtrx,fecha,bodega,cod_Seccion,cod_tramo,cod_n,cod_grupo,cod_tipo,cod_Sec,cantidad,us_crea,fech_crea) ", " SELECT '1',?,?,?,?,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,'0','INCLUYE',getdate() FROM ",tabla1 CLIPPED," AS a ", " WHERE CAST(a.cod_n AS CHAR(2)) + CAST(a.cod_grupo AS CHAR(3)) + CAST(a.cod_tipo AS CHAR(4)) + ", " CAST(a.cod_sec AS CHAR(4)) NOT IN (", "SELECT CAST(cod_n AS CHAR(2)) + CAST(cod_grupo AS CHAR(3)) + CAST(cod_tipo AS CHAR(4)) + ", " CAST(cod_sec AS CHAR(4)) FROM ",tabla3 CLIPPED, " WHERE CONVERT(DATE,fecha,101) = ? ) AND ",criterio CLIPPED PREPARE pincluye FROM selec EXECUTE pincluye USING xfecha,almacen,seccion,tramo,xfecha LET selec = "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp,a.unidad_med,b.cantidad,'0','0','0','0','0',", "b.us_crea,b.fech_crea,b.bodega,b.cod_Seccion,b.cod_tramo,b.idtrx ", "FROM ",tabla1 CLIPPED," AS a INNER JOIN ",tabla3 CLIPPED," AS b ", "ON ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec and ", chselec1 CLIPPED," AND ",chselec2 CLIPPED, " AND ",chselec3 CLIPPED, " ", " WHERE CONVERT(DATE,b.fecha,101) = ? ", " AND ",criterio CLIPPED, "ORDER by b.cod_n,b.cod_Grupo,b.cod_tipo,b.cod_sec" END IF IF sumarizo = "S" THEN LET selec = "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp,a.unidad_med,SUM(b.cantidad),'0','0','0','0','0',", "' ',' ','1','1','1','1' ", "FROM ",tabla1 CLIPPED," AS a INNER JOIN ",tabla3 CLIPPED," AS b ", " ON ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec and ", chselec1 CLIPPED," AND ",chselec2 CLIPPED, " AND ",chselec3 CLIPPED, " ", " WHERE CONVERT(DATE,b.fecha,101) = ? ", " AND ",criterio CLIPPED, " AND a.status_t IS NULL ", " GROUP BY b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp,a.unidad_med ", "ORDER by b.cod_n,b.cod_Grupo,b.cod_tipo,b.cod_sec" END IF IF sumarizo = "N" AND incluye = "N" THEN LET selec = "SELECT b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,a.descrip_esp,a.unidad_med,b.cantidad,'0','0','0','0','0',", "b.us_crea,b.fech_crea,b.bodega,b.cod_Seccion,b.cod_tramo,b.idtrx ", "FROM ",tabla1 CLIPPED," AS a INNER JOIN ",tabla3 CLIPPED," AS b ", "ON ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec and ", chselec1 CLIPPED," AND ",chselec2 CLIPPED, " AND ",chselec3 CLIPPED, " ", " WHERE CONVERT(DATE,b.fecha,101) = ? ", " AND ",criterio CLIPPED, "ORDER by b.cod_n,b.cod_Grupo,b.cod_tipo,b.cod_sec" END IF PREPARE comando1 FROM selec DECLARE busca_ir CURSOR FOR comando1 OPEN busca_ir USING almacen,seccion,tramo,xfecha IF sqlca.sqlcode THEN LET cherror = "Favor verifique el error en ",tipo CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") END IF LET progreso = 10 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET total_fisico = 0 LET idx = 1 FOREACH busca_ir INTO arrdetalle[idx].* EXECUTE costos USING arrdetalle[idx].cod_n, arrdetalle[idx].cod_grupo, arrdetalle[idx].cod_tipo, arrdetalle[idx].cod_sec, ano INTO arrdetalle[idx].costo IF sqlca.sqlcode < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error en ",tipo CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") EXIT FOREACH END IF IF igualo = "S" THEN EXECUTE existencia1 USING arrdetalle[idx].cod_n, arrdetalle[idx].cod_grupo, arrdetalle[idx].cod_tipo, arrdetalle[idx].cod_sec, xfecha INTO arrdetalle[idx].teorico IF arrdetalle[idx].teorico IS NULL THEN LET arrdetalle[idx].teorico = 0 END IF LET arrdetalle[idx].fisico = arrdetalle[idx].teorico END IF LET arrdetalle[idx].valor1 = arrdetalle[idx].fisico * arrdetalle[idx].costo LET total_fisico = arrdetalle[idx].valor1 + total_fisico LET progreso = progreso + 2 DISPLAY progreso TO progreso CALL ui.Interface.refresh() IF progreso > 90 THEN LET progreso = 90 DISPLAY progreso TO progreso CALL ui.Interface.refresh() END IF LET idx = idx + 1 END FOREACH DISPLAY idx-1 TO numero_registros DISPLAY BY NAME total_fisico LET progreso = 100 DISPLAY progreso TO progreso CALL ui.Interface.refresh() CALL set_count(idx-1) LET existe = true # ELSE # LET existe = false #END IF # ACTUALIZACION DEL CONTEO FISICO CALL aceptainfo(existe) RETURNING cantidad_reg IF int_flag THEN LET int_flag = FALSE RETURN END IF { ACTUALIZACION TABLA CONTEO} LET respuesta = fgl_winquestion("Pregunta","Esta seguro de Actualizar Datos?","no","yes|No","question",0) IF respuesta = "yes" THEN # LET resajuste = fgl_winquestion("Pregunta","Desea Generar Documento Ajuste Articulos con Diferencias?","no","yes|No","question",0) LET resajuste = "no" { NUMERO SECUENCIA DEL CONTEO FISICO} LET selecb = "SELECT MAX(idtrx) FROM ",tabla3 CLIPPED PREPARE buscamax FROM selecb EXECUTE buscamax INTO numeroidtrx IF numeroidtrx IS NULL THEN LET numeroidtrx = 0 END IF LET numeroidtrx = numeroidtrx + 1 {=======================================================================} {TABLA RESUMEN FISICO TABLA2} LET INSERTAC = "INSERT INTO ",tabla2 CLIPPED, "(fecha,bodega,cod_seccion,cod_tramo,cod_n,", "cod_grupo,cod_tipo,", "cod_Sec,cantidad,", "us_crea,fech_crea) ", "VALUES (?,'1','1','1',?,?,?,?,?,suser_sname(),getdate())" PREPARE inserta2 FROM insertac LET selecb = "DELETE FROM ",tabla2 CLIPPED, " WHERE CONVERT(DATE,fecha,101) = ? and ", " cod_n = ? AND ", " cod_grupo = ? AND ", " cod_tipo = ? AND ", " cod_sec = ? " PREPARE borra_tabla2 FROM selecb LET selecb = "DELETE FROM ",tabla3 CLIPPED, " WHERE CONVERT(DATE,fecha,101) = ? and ", " bodega = ? and ", " cod_seccion = ? and ", " cod_tramo = ? and ", " cod_n = ? AND ", " cod_grupo = ? AND ", " cod_tipo = ? AND ", " cod_sec = ? AND idtrx = ? " PREPARE borra11 FROM selecb IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK END IF LET INSERTAC = "INSERT INTO ",tabla3 CLIPPED, "(fecha,bodega,cod_seccion,cod_tramo,cod_n,", "cod_grupo,cod_tipo,cod_Sec,cantidad,", "balance,fech_crea,us_crea,idtrx,us_mod,fech_mod) ", " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,SUSER_SNAME(),GETDATE())" PREPARE inserta11 FROM insertac BEGIN WORK LET xbodega = 1 FOR i = 1 TO cantidad_Reg IF arrdetalle[i].cod_n IS NOT NULL THEN IF sumarizo <> "S" THEN EXECUTE borra11 USING xfecha, arrdetalle[i].bodega, arrdetalle[i].cod_seccion, arrdetalle[i].cod_tramo, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec, arrdetalle[i].trxid IF STATUS < 0 THEN ROLLBACK WORK LET cherror = "Ocurrio un error, Borrando Transaccion ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") END IF IF arrdetalle[i].trxid IS NULL THEN LET arrdetalle[i].trxid = numeroidtrx LET numeroidtrx = numeroidtrx + 1 END IF IF arrdetalle[i].fisico > 0 THEN IF arrdetalle[i].bodega IS NULL or arrdetalle[i].bodega = 99 THEN ROLLBACK WORK CALL fgl_winmessage("INFORMACION","NO PUEDE ADICIONAR CODIGOS, CUANDO TIENE SELECCIONADO, TODAS LAS SECCIONES DE ALMACEN","STOP") RETURN END IF IF arrdetalle[i].cod_seccion IS NULL OR arrdetalle[i].cod_seccion = 99 THEN ROLLBACK WORK CALL fgl_winmessage("INFORMACION","NO PUEDE ADICIONAR CODIGOS, CUANDO TIENE SELECCIONADO, TODAS LAS SECCIONES DE ALMACEN","STOP") RETURN END IF IF arrdetalle[i].cod_tramo IS NULL or arrdetalle[i].cod_tramo = 99 THEN ROLLBACK WORK CALL fgl_winmessage("INFORMACION","NO PUEDE ADICIONAR CODIGOS, CUANDO TIENE SELECCIONADO, TODAS LAS SECCIONES DE ALMACEN","STOP") RETURN END IF # LET arrdetalle[i].bodega =almacen # LET arrdetalle[i].cod_seccion =seccion # LET arrdetalle[i].cod_tramo =tramo EXECUTE inserta11 USING xfecha, arrdetalle[i].bodega, arrdetalle[i].cod_seccion, arrdetalle[i].cod_tramo, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec, arrdetalle[i].fisico, arrdetalle[i].teorico, arrdetalle[i].fechacrea, arrdetalle[i].usuario, #SI LE PONGO QUE ADICIONE EL USUARIO ME DA UN ERROR -254 arrdetalle[i].trxid IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error en ",tipo CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF END IF END IF END IF END FOR COMMIT WORK BEGIN WORK { ACTUALIZCION DEL INVENTARIO FISICO A PARTIR DEL CONTEO} FOR i = 1 TO cantidad_reg IF arrdetalle[i].cod_n IS NOT NULL THEN EXECUTE existencia USING xfecha, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec INTO pexistencia IF pexistencia IS NULL THEN LET pexistencia = 0 END IF { EXECUTE verifica USING xfecha, # VERIFICA SI EL CODIGO EXISTE EN LA TABLA DE RESUMEN EXISTENCIA arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec } EXECUTE borra_tabla2 USING xfecha, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec IF STATUS < 0 THEN ROLLBACK WORK LET cherror = "Ocurrio un error, Verificando Inventario ",tipo CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") RETURN END IF EXECUTE inserta2 USING xfecha, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec, pexistencia END IF END FOR COMMIT WORK CALL fgl_winmessage("INFORMACION","ACTUALIZACION EXITOSA","STOP") END IF END IF IF xtipo = "INVENTA" THEN LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,101) FROM ", tabla2 CLIPPED, " a ", " WHERE CONVERT(DATE,a.fecha,101) = ? " PREPARE comando2 FROM selec EXECUTE comando2 USING xfecha IF STATUS <> NOTFOUND THEN # BUSQUEDA DEL CONTEO FISICO TABLA 00011 LET selec = "SELECT distinct a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,", #"a.unidad_med,b.cantidad,'0','0','0','0','0',b.us_crea,b.fech_crea,", "a.unidad_med,b.cantidad,'0','0','0','0','0',' ',' ',", "b.bodega,b.cod_Seccion,b.cod_tramo ", "FROM ",tabla1 CLIPPED," AS a INNER JOIN ",tabla2 CLIPPED," b ", " ON a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_Sec = b.cod_Sec "," and ",criterio CLIPPED, " and a.status_t is null ", " WHERE CONVERT(DATE,b.fecha,101) = ? ", " ORDER by a.cod_n,a.cod_Grupo,a.cod_tipo,a.cod_sec" # DISPLAY selec CLIPPED," where al ", almacen," se ",seccion," tr ",tramo PREPARE comando3 FROM selec DECLARE busca_ir1 CURSOR FOR comando3 OPEN busca_ir1 USING xfecha LET progreso = 10 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET total_fisico = 0 LET total_teorico = 0 LET total2 = 0 LET idx1 = 1 LET idx = 1 FOREACH busca_ir1 INTO arrdetalle[idx].* EXECUTE existencia1 USING arrdetalle[idx].cod_n, arrdetalle[idx].cod_grupo, arrdetalle[idx].cod_tipo, arrdetalle[idx].cod_sec, xfecha INTO arrdetalle[idx].teorico IF sqlca.sqlcode THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") EXIT FOREACH END IF EXECUTE costos USING arrdetalle[idx].cod_n, arrdetalle[idx].cod_grupo, arrdetalle[idx].cod_tipo, arrdetalle[idx].cod_sec, ano INTO arrdetalle[idx].costo IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") EXIT FOREACH END IF IF arrdetalle[idx].teorico IS NULL THEN LET arrdetalle[idx].teorico = 0 END IF IF arrdetalle[idx].fisico IS NULL THEN LET arrdetalle[idx].fisico = 0 END IF IF arrdetalle[idx].fisico = 0 AND arrdetalle[idx].teorico = 0 THEN CONTINUE FOREACH END IF IF arrdetalle[idx].teorico < 0 THEN LET arrdetalle[idx].teorico = arrdetalle[idx].teorico *-1 END IF LET arrdetalle[idx].diferencia = arrdetalle[idx].fisico - arrdetalle[idx].teorico LET arrdetalle[idx].valor1 = arrdetalle[idx].fisico * arrdetalle[idx].costo LET arrdetalle[idx].valor2 = arrdetalle[idx].diferencia * arrdetalle[idx].costo LET total2 = arrdetalle[idx].valor2 + total2 LET total_fisico = total_fisico + arrdetalle[idx].valor1 LET total_teorico = total_teorico + (arrdetalle[idx].teorico * arrdetalle[idx].costo) LET idx = idx + 1 IF idx1 = 100 THEN LET progreso = progreso + 5 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET idx1 = 0 END IF LET idx1 = idx1 + 1 IF progreso > 90 THEN LET progreso = 90 DISPLAY progreso TO progreso CALL ui.Interface.refresh() END IF END FOREACH IF idx = 1 THEN CALL fgl_winmessage("ERROR","REGISTROS NO EXISTEN CON ESA CONDICION","stop") END IF DISPLAY idx-1 TO numero_registros DISPLAY BY NAME total2,total_fisico,total_teorico LET progreso = 100 DISPLAY progreso TO progreso CALL ui.Interface.refresh() CALL set_count(idx-1) LET existe = TRUE ELSE LET existe = FALSE END IF #### ACTUALIZACION INVENTARIO FISICO CALL aceptainfo(existe) RETURNING cantidad_reg IF Int_flag THEN LET int_flag = false RETURN END IF LET respuesta = fgl_winquestion("Pregunta","Esta seguro de Actualizar Datos?","no","yes|No","question",0) IF respuesta = "yes" THEN LET resajuste = fgl_winquestion("Pregunta","Desea Generar Documento Ajuste Articulos con Diferencias?","no","yes|No","question",0) # LET tabla2 = "TMPIRTB00011" LET selecb = "DELETE FROM ",tabla2 CLIPPED, " WHERE fecha = ? and ", " bodega = ? and ", " cod_seccion = ? and ", " cod_tramo = ? and ", " cod_n = ? AND ", " cod_grupo = ? AND ", " cod_tipo = ? AND ", " cod_sec = ? " PREPARE borra FROM selecb IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK END IF LET INSERTAC = "INSERT INTO ",tabla2 CLIPPED, "(fecha,bodega,cod_seccion,cod_tramo,cod_n,cod_grupo,cod_tipo,", "cod_Sec,cantidad,", "balance,fech_crea) VALUES (?,?,?,?,?,?,?,?,?,?,getdate())" PREPARE inserta FROM insertac { ACTURALIZACION DE LA TABLA DE INVENTARIO FISICO LET xbodega = 1 BEGIN WORK FOR i = 1 TO cantidad_Reg IF arrdetalle[i].cod_n IS NOT NULL THEN EXECUTE borra USING xfecha,arrdetalle[i].bodega,arrdetalle[i].cod_seccion,arrdetalle[i].cod_tramo, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec IF STATUS < 0 THEN LET cherror = "Ocurrio un error, Borrando Transaccion ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK END IF EXECUTE inserta USING xfecha,arrdetalle[i].bodega,arrdetalle[i].cod_seccion,arrdetalle[i].cod_tramo, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec, arrdetalle[i].fisico, arrdetalle[i].teorico #arrdetalle[i].fechacrea # arrdetalle[i].usuario SI LE PONGO QUE ADICIONE EL USUARIO ME DA UN ERROR -254 IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF END IF END FOR COMMIT WORK } IF resajuste = "yes" THEN INPUT BY NAME fecha_doc AFTER INPUT IF fecha_Doc IS NULL THEN CALL FGL_WINMESSAGE("ERROR","CAMPO EN BLANCO","STOP") NEXT FIELD fecha_doc END IF CALL prd(fecha_doc,usuarios) RETURNING bandera IF bandera = 1 THEN CALL FGL_WINMESSAGE("ERROR","FECHA FUERA DE CORTE","STOP") NEXT FIELD fecha_doc END IF EXIT INPUT END INPUT CALL documento(cantidad_reg,tipo_inventario,fecha_doc) END IF CALL FGL_WINMESSAGE("ACTUALIZA","ACTUALIZACION EXITOSA","STOP") END IF END IF END FUNCTION FUNCTION eliminar(xtipo) DEFINE xtipo CHAR(20) CALL fgl_winmessage("MENSAJE","ESTOY EN ELIMINAR","stop") END FUNCTION FUNCTION aceptainfo(xexiste) DEFINE xexiste BOOLEAN, xcantidad SMALLINT # FREE articulos # FREE costos # IF xexiste THEN INPUT ARRAY arrdetalle WITHOUT DEFAULTS FROM sconteo.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() ON ACTION imprmir # LET tipo = "INVENTA" CALL impresion(tipo) ON ACTION actualiza IF tipo = "DOC" THEN IF int_flag THEN CALL fgl_winmessage("INFORMACION","OPERACION CANCELADA","STOP") LET int_flag = FALSE EXIT INPUT END IF CALL actualizainv() ELSE CALL fgl_winmessage("INFORMACION","DEBE ESTAR EN LA OPCION DE DOCUMENTO","INFO") END IF AFTER FIELD cod_SEC IF arrdetalle[curr].cod_n IS NOT NULL THEN EXECUTE articulos USING arrdetalle[curr].cod_n, arrdetalle[curr].cod_grupo, arrdetalle[curr].cod_tipo, arrdetalle[curr].cod_sec INTO arrdetalle[curr].descripcion, arrdetalle[curr].unidad_med IF STATUS = NOTFOUND THEN CALL fgl_winmessage("ERROR","ARTICULO NO EXISTE","STOP") NEXT FIELD cod_n END IF DISPLAY arrdetalle[curr].descripcion TO sconteo[scr_l].descripcion DISPLAY arrdetalle[curr].unidad_med TO sconteo[scr_l].unidad_med EXECUTE costos USING arrdetalle[curr].cod_n, arrdetalle[curr].cod_grupo, arrdetalle[curr].cod_tipo, arrdetalle[curr].cod_sec, ano INTO arrdetalle[curr].costo IF sqlca.sqlcode < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error en ",tipo CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") END IF DISPLAY arrdetalle[curr].costo TO sconteo[scr_l].costo END IF IF seccion <> 99 THEN LET arrdetalle[curr].bodega = almacen LET arrdetalle[curr].cod_seccion = seccion LET arrdetalle[curr].cod_tramo = tramo DISPLAY arrdetalle[curr].bodega TO sconteo[scr_l].bodega DISPLAY arrdetalle[curr].cod_seccion TO sconteo[scr_l].cod_seccion DISPLAY arrdetalle[curr].cod_tramo TO sconteo[scr_l].cod_tramo END IF AFTER INPUT IF int_flag THEN CALL fgl_winmessage("ERROR","OPERACION ABORTADA","stop") RETURN xcantidad END IF EXIT INPUT END INPUT # ELSE # INPUT ARRAY arrdetalle FROM sconteo.* # IF int_flag THEN # CALL fgl_winmessage("ERROR","OPERACION ABORTADA","stop") # LET xcantidad = arr_count() # RETURN xcantidad # END IF # END IF LET xcantidad = arr_count() RETURN xcantidad END FUNCTION FUNCTION documento(xcantidad_reg,xtipo,zfecha) DEFINE xcantidad_reg SMALLINT, xtipo CHAR(30), zfecha DATE, xdocumento INTEGER, chdoc CHAR(80), ejecutasalida,ejecutaentrada BOOLEAN IF xtipo = "MATERIA PRIMA" THEN LET codMovAjusteEntrada = 52 LET CodMovAjusteSalida = 25 END IF IF xtipo = "REPUESTOS" THEN LET codMovAjusteEntrada = 52 LET CodMovAjusteSalida = 25 END IF IF xtipo = "PRODUCTOS TERMINADOS" THEN LET codMovAjusteEntrada = 11 LET CodMovAjusteSalida = 25 END IF LET selecb = "SELECT MAX(a.num_doc) FROM ",tabla5 CLIPPED," a ", "WHERE a.cod_mov = ? " PREPARE buscamax1 FROM selecb EXECUTE buscamax1 USING codMovAjusteEntrada INTO numeroEntrada LET selecb = "SELECT MAX(a.num_doc) FROM ",tabla5 CLIPPED," a ", "WHERE a.cod_mov = ? " PREPARE buscamax12 FROM selecb EXECUTE buscamax12 USING codMovAjusteSalida INTO numeroSalida LET INSERTAC = "INSERT INTO ",tabla6 CLIPPED, " (num_doc,fecha,cod_mov,bodega,cod_n,cod_grupo,cod_tipo,cod_Sec,", " cantidad,us_crea,fech_crea) VALUES (?,?,?,?,?,?,?,?,?,SUSER_SNAME(),GETDATE())" PREPARE inserta1 FROM insertac LET numeroEntrada = numeroEntrada + 1 LET numeroSalida = numeroSalida + 1 LET selecb = "SELECT DISTINCT a.num_doc FROM ",tabla6 CLIPPED," a ", "WHERE a.num_doc = ? AND a.cod_mov = ? " LET ejecutasalida = FALSE PREPARE existe FROM selecb EXECUTE existe USING numeroSalida,codMovAjusteSalida INTO xdocumento IF xdocumento > 0 THEN LET chdoc = "El documento ",numeroSalida USING "&&&&&&"," para el codigo de movimiento ",CodMovAjusteSalida USING "&&", " existe, Desea Sustituirlo por este?" LET respuesta = fgl_winquestion("error",chdoc,"no","yes|no","question",0) END IF IF respuesta = "yes" THEN LET ejecutaSalida = true END IF LET xdocumento = 0 LET ejecutaEntrada = false LET existe = true PREPARE existe1 FROM selecb EXECUTE existe1 USING numeroEntrada,codMovAjusteEntrada INTO xdocumento IF xdocumento > 0 THEN LET chdoc = "El documento ",numeroEntrada USING "&&&&&&"," para el codigo de movimiento ",CodMovAjusteEntrada USING "&&", " existe, Desea Sustituirlo por este?" LET respuesta = fgl_winquestion("error",chdoc,"no","yes|no","question",0) END IF IF respuesta = "yes" THEN LET ejecutaEntrada = true END IF BEGIN WORK IF ejecutasalida THEN LET selecb = "DELETE FROM ",tabla6 CLIPPED," WHERE num_doc = ? and cod_mov = ? " PREPARE borra1 FROM selecb EXECUTE borra1 USING numeroSalida,CodMovAjusteSalida IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF END IF IF ejecutaentrada THEN LET selecb = "DELETE FROM ",tabla6 CLIPPED," WHERE num_doc = ? and cod_mov = ? " PREPARE borra2 FROM selecb EXECUTE borra2 USING numeroEntrada,CodMovAjusteEntrada IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF END IF FOR i = 1 TO xcantidad_reg IF arrdetalle[i].cod_n IS NOT NULL THEN LET arrdetalle[i].fechacrea = CURRENT YEAR TO MINUTE IF arrdetalle[i].diferencia < 0 AND ejecutaSalida THEN EXECUTE inserta1 USING numeroSalida,zfecha, CodMovAjusteSalida, arrdetalle[i].bodega, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec, arrdetalle[i].diferencia IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF ELSE IF arrdetalle[i].diferencia <> 0 AND ejecutaEntrada THEN EXECUTE inserta1 USING numeroEntrada,zfecha, CodMovAjusteEntrada, arrdetalle[i].bodega, arrdetalle[i].cod_n, arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo, arrdetalle[i].cod_sec, arrdetalle[i].diferencia IF STATUS < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF END IF END IF END IF END FOR COMMIT WORK END FUNCTION FUNCTION actualizard() # ADMINISTRACION DEL DOCUMENTO DE AJUSTE DEFINE tipo_inventario CHAR(30), cantidad_reg SMALLINT, numDoc INT CONSTRUCT BY NAME criterio ON a.num_doc,a.cod_mov INPUT BY NAME tipo_inventario CALL cargatablas(tipo_inventario) IF int_flag THEN CALL FGL_WINMESSAGE("STOP","OPERACION ABORTADA","STOP") LET int_flag = FALSE RETURN END IF LET selecb = "SELECT DISTINCT a.cod_mov,a.num_doc,a.fecha,b.descrip_mov FROM ",tabla6 CLIPPED," a, ", tabla7 CLIPPED," b ", " WHERE ",criterio CLIPPED," and a.cod_mov = b.cod_mov " PREPARE bdocumento FROM selecb DECLARE busca_doc SCROLL CURSOR FOR bdocumento OPEN busca_doc FETCH FIRST busca_doc INTO codMov,numDoc,fecha_doc,descrip_mov DISPLAY codMov to cod_mov DISPLAY numDoc to num_doc DISPLAY BY NAME fecha_doc DISPLAY BY NAME descrip_mov MENU "NAVEGA" COMMAND "Siguiente" FETCH NEXT busca_doc INTO codMov,numDoc,fecha_doc,descrip_mov DISPLAY codMov to cod_mov DISPLAY numDoc to num_doc DISPLAY BY NAME fecha_doc DISPLAY BY NAME descrip_mov COMMAND "Primero" FETCH FIRST busca_doc INTO codMov,numDoc,fecha_doc,descrip_mov DISPLAY codMov to cod_mov DISPLAY numDoc to num_doc DISPLAY BY NAME fecha_doc DISPLAY BY NAME descrip_mov COMMAND "Anterior" FETCH LAST busca_doc INTO codMov,numDoc,fecha_doc,descrip_mov DISPLAY codMov to cod_mov DISPLAY numDoc to num_doc DISPLAY BY NAME fecha_doc DISPLAY BY NAME descrip_mov COMMAND "Ultimo" FETCH LAST busca_doc INTO codMov,numDoc,fecha_doc,descrip_mov DISPLAY codMov to cod_mov DISPLAY numDoc to num_doc DISPLAY BY NAME fecha_doc DISPLAY BY NAME descrip_mov COMMAND "ITEMS" CALL documentodetalle(numDoc,codMov) DISPLAY BY NAME total2 CALL set_count(idx-1) LET existe = TRUE CALL aceptainfo(existe) RETURNING cantidad_reg IF Int_flag THEN LET int_flag = false EXIT MENU END IF CALL fgl_winmessage("STOP","ACTUALIZACION EXITOSA","STOP") COMMAND "Retornar" EXIT MENU END MENU END FUNCTION FUNCTION documentodetalle(xnumDoc,xCodMov) DEFINE xnumDoc INT, xCodMov SMALLINT LET selecc = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,c.descrip_esp,c.unidad_med,a.cantidad FROM ",tabla6 CLIPPED," a, ", tabla1 CLIPPED," c ", " WHERE a.num_doc = ? AND a.cod_mov = ? AND a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ", " a.cod_tipo = c.cod_tipo and a.cod_Sec = c.cod_Sec " PREPARE docdetalle FROM selecc DECLARE busca_Detalle CURSOR FOR docdetalle OPEN busca_detalle USING xnumDoc,xcodMov LET numeroDoc = xnumdoc LET idx = 1 LET total2 = 0 LET ano = YEAR(fecha_doc) FOREACH busca_detalle INTO arrdetalle[idx].cod_n, arrdetalle[idx].cod_grupo, arrdetalle[idx].cod_tipo, arrdetalle[idx].cod_sec, arrdetalle[idx].descripcion, arrdetalle[idx].unidad_med, arrdetalle[idx].fisico EXECUTE costos USING arrdetalle[idx].cod_n, arrdetalle[idx].cod_grupo, arrdetalle[idx].cod_tipo, arrdetalle[idx].cod_sec, ano INTO arrdetalle[idx].costo IF sqlca.sqlcode < 0 THEN LET cherror = "Ocurrio un error, favor verifique el error en ",tipo CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") END IF IF arrdetalle[idx].costo IS NULL THEN LET arrdetalle[idx].costo = 0 END IF IF arrdetalle[idx].fisico IS NULL THEN LET arrdetalle[idx].fisico = 0 END IF LET arrdetalle[idx].valor1 = arrdetalle[idx].costo* arrdetalle[idx].fisico LET total2 = total2 + arrdetalle[idx].valor1 LET idx = idx + 1 END FOREACH END FUNCTION FUNCTION impresion(ztipo) DEFINE ztipo CHAR(20), chorigen CHAR(30) DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() r_filename STRING, -- filename of Report Design Document including .4rp extension r_output STRING, -- output format option preview INTEGER -- TRUE/FALSE, to set preview option --pregunta al usuario por la salida del reporte CALL seleccionarSalida() RETURNING r_output LET r_filename = 'irprrpcs008.4rp' 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 CALL fgl_report_selectPreview(preview) -- changing default 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 imprime TO XML HANDLER handler # IF ztipo = "INVENTA" THEN SELECT a.nombre INTO p_companias.nombre FROM companias a FOR i = 1 TO idx IF arrdetalle[i].cod_n IS NOT NULL THEN SELECT a.descripcion INTO chalmacen FROM intb00009 a WHERE a.cod_bodega = arrdetalle[i].bodega SELECT a.descripcion INTO chseccion FROM intb00010 a WHERE a.cod_seccion = arrdetalle[i].cod_seccion and a.cod_bodega = arrdetalle[i].bodega SELECT a.descripcion INTO chtramo FROM intb00043 a WHERE a.cod_tramo = arrdetalle[i].cod_tramo and a.cod_seccion = arrdetalle[i].cod_seccion and a.cod_bodega = arrdetalle[i].bodega { SELECT a.descripcion INTO chorigen FROM iptb00022 a,iptb00002 b WHERE a.cod_cia = b.cod_cia AND b.cod_n = b.cod_n and b.cod_grupo = b.cod_grupo and b.cod_tipo = b.cod_tipo and b.cod_sec = b.cod_Sec } OUTPUT TO REPORT imprime(arrdetalle[i].cod_n,arrdetalle[i].cod_grupo, arrdetalle[i].cod_tipo,arrdetalle[i].cod_sec, arrdetalle[i].descripcion,arrdetalle[i].unidad_med, arrdetalle[i].fisico,arrdetalle[i].teorico, arrdetalle[i].diferencia,arrdetalle[i].costo, arrdetalle[i].valor1,arrdetalle[i].valor2, arrdetalle[i].bodega,arrdetalle[i].cod_seccion, arrdetalle[i].cod_tramo, p_companias.nombre,chalmacen,chseccion,chtramo,chtipoInventario,numeroDoc,codMov,descrip_mov,tipo,chorigen,xfecha) END IF END FOR FINISH REPORT imprime #END IF ELSE EXIT PROGRAM END IF END FUNCTION FUNCTION calmacen() DEFINE kcod_bodega SMALLINT,kdescripcion CHAR(30) LET palmacen = ui.combobox.forname("formonly.almacen") DECLARE busca_alm CURSOR FOR SELECT a.cod_bodega,a.descripcion FROM Intb00009 a CALL palmacen.clear() FOREACH busca_alm INTO kcod_bodega,kdescripcion CALL palmacen.additem(kcod_bodega,kdescripcion) END FOREACH CALL palmacen.additem(99,"TODOS") END FUNCTION FUNCTION cfecha() DEFINE kfecha date LET pfecha = ui.combobox.forname("formonly.busca_fecha") LET selec = "SELECT UNIQUE top 10 a.fecha,CONVERT(CHAR(10),a.fecha,103) FROM ",tabla2 clipped," a order by a.fecha desc " PREPARE comando_fecha FROM selec DECLARE busca_fecha CURSOR FOR comando_fecha OPEN busca_fecha CALL pfecha.clear() FOREACH busca_fecha INTO kfecha,kfecha CALL pfecha.additem(kfecha,kfecha) END FOREACH END FUNCTION FUNCTION cseccion() DEFINE kcod_seccion SMALLINT,kdescripcion CHAR(30) LET pseccion = ui.combobox.forname("formonly.seccion") DECLARE busca_sec CURSOR FOR SELECT a.cod_seccion,a.descripcion FROM Intb00010 a WHERE a.cod_bodega = almacen CALL pseccion.clear() FOREACH busca_sec INTO kcod_seccion,kdescripcion CALL pseccion.additem(kcod_seccion,kdescripcion) END FOREACH CALL pseccion.additem(99,"TODAS") END FUNCTION FUNCTION ctramo() DEFINE kcod_tramo SMALLINT,kdescripcion CHAR(30) LET ptramo = ui.combobox.forname("formonly.tramo") DECLARE busca_tramo CURSOR FOR SELECT a.cod_tramo,a.descripcion FROM Intb00043 a WHERE a.cod_bodega = almacen and a.cod_Seccion = seccion CALL ptramo.clear() FOREACH busca_tramo INTO kcod_tramo,kdescripcion CALL ptramo.additem(kcod_tramo,kdescripcion) END FOREACH CALL ptramo.additem(99,"TODOS") END FUNCTION FUNCTION actualizaINV() DEFINE inserta,borra,respuestainv STRING LET respuestainv = fgl_winquestion("Pregunta","Esta seguro de Actualizar Datos?","no","yes|No","question",0) IF respuestainv = "yes" then LET inserta = "INSERT INTO ",tabla5 CLIPPED," (num_doc,cod_mov,fecha,bodega,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_2,us_crea,fech_crea,us_mod,fech_mod) ", " SELECT num_doc,cod_mov,fecha,bodega,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,us_crea,fech_crea,us_mod,fech_mod FROM ",tabla6 CLIPPED, " WHERE cod_mov = ? and num_doc = ? " LET borra = "DELETE FROM ",tabla6 CLIPPED, " WHERE cod_mov = ? and num_doc = ? " call fgl_winmessage("w",inserta,"stop") BEGIN WORK PREPARE pinserta FROM Inserta EXECUTE pinserta USING codmov,numerodoc IF STATUS < 0 THEN LET cherror = "Ocurrio un error actualizando ",tabla5 CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF PREPARE pborra FROM borra EXECUTE pborra USING codmov,numerodoc IF STATUS < 0 THEN LET cherror = "Ocurrio un error borrando ",tabla5 CLIPPED," ",SQLCA.sqlerrd[2], SQLERRMESSAGE CALL fgl_winmessage("ERROR", cherror, "stop") ROLLBACK WORK RETURN END IF END IF COMMIT WORK CALL fgl_winmessage("INFORMACION","ACTUALIZACION EXITOSA","STOP") END FUNCTION