1383 lines
61 KiB
Plaintext
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 |