Files
MBS/PROYECTOS/irdir/irprcs008 - Copy.4gl
T

1383 lines
61 KiB
Plaintext

{
==============================================================================
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