Files
MBS/PROYECTOS/alprmt06/alprmt006.4gl
T

1223 lines
42 KiB
Plaintext

{
-------------------------------------------------------------------------
PROGRAMA : ALPRMT006
OBJETIVO : Programa Captura Documento Movimiento:REPORTE ENTRADA
Nota: No utilice los PREPARE porque utilizaria todas las
tablas de los sistemas de inventarios.
PROGRAMADOR : Juan Fco. Soto (Johnny)
FECHA REALIZACION : Octubre 21,1993.
MODIFICADOR : Tadeo A. Ferreras F.
FECHA REALIZACION : Marzo 05, 1996
OBJETIVO : Impresion de la Cantidad Pendiente Por Enregar en la
Orden de Compra
-------------------------------------------------------------------------
}
SCHEMA smarmotech
GLOBALS
DEFINE etiqueta CHAR(20) ,
selec,criterio STRING,
opt CHAR(10)
DEFINE descrip_espa CHAR(100)
DEFINE fecha,p_fechas,fecha_c DATE
DEFINE ip_ultimo,ir_ultimo,ih_ultimo,is_ultimo,in_ultimo,
l,bandera,numero_msg INTEGER
DEFINE documento DYNAMIC ARRAY OF INTEGER
DEFINE dia,idx,p_act,scr_l,cod_mov_ant SMALLINT
DEFINE primera,opc1,verdad,opc CHAR (1)
DEFINE unidad CHAR(4)
DEFINE inv1,inv2,inv3,inv4,inv5 CHAR(500)
DEFINE tipo1,tipo2,tipo3,tipo4,tipo5 CHAR(200)
DEFINE tasa,precio_compra,recibida,f_cantidad,factor DECIMAL(12,3),
descripcion_f CHAR(100),
nombre_m CHAR(20),
descrip CHAR(15),
USUARIOS, CLAVE,descripcion_bodega CHAR(50)
DEFINE normal,negrilla_on,negrillas_of,comp_on,comp_off,doce,doble_on,doble_off
CHAR(3)
DEFINE cmd,imprime,copia CHAR(150),archivo CHAR(80),impresor,xcod_mov SMALLINT
DEFINE datos_gen RECORD
num_doc LIKE iptb00006.num_doc,
tipo CHAR(2),
orden_compra LIKE iptb00006.orden_compra,
cod_sp LIKE iptb00006.cod_sp,
cod_sp_sec LIKE iptb00006.cod_sp_sec,
conduce_no LIKE iptb00006.conduce_no,
fact_no LIKE iptb00006.fact_no,
fecha LIKE iptb00006.fecha,
bodega LIKE iptb00006.bodega,
nom_sp LIKE cotb00001.nom_sp,
descrip_mov LIKE intb00005.descrip_mov
END RECORD
DEFINE movi DYNAMIC ARRAY OF RECORD
cod_n LIKE iptb00006.cod_n,
cod_grupo LIKE iptb00006.cod_grupo,
cod_tipo LIKE iptb00006.cod_tipo,
cod_sec LIKE iptb00006.cod_sec,
cantidad_1 DECIMAL(12,3),
cantidad_2 DECIMAL(12,3),
cod_mov SMALLINT,
no_embarque CHAR(08),
pendiente DECIMAL(12,3)
END RECORD,
p_companias RECORD LIKE companias.*
END GLOBALS
MAIN
DEFINE fecha CHAR(8)
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CLEAR SCREEN
OPTIONS
ERROR LINE 24,
FORM LINE 4,
COMMENT LINE 22,
PROMPT LINE 23
SELECT * INTO p_companias.* FROM companias
LET l = (80 - LENGTH(p_companias.nombre CLIPPED))/2
LET fecha = today USING "dd/mm/yyyy"
OPEN FORM alfmmt006 FROM "alfmmt006"
DISPLAY FORM alfmmt006
MENU
ON ACTION nuevo
CALL inpcad006()
ON ACTION buscar
CALL inpcmf006()
ON ACTION salir
EXIT MENU
END MENU
END MAIN
FUNCTION inpcad006()
DEFINE nombre_s CHAR(20)
DEFINE cerrada CHAR(1) # Variable para actualizar el cierre de una orden
DEFINE total_cantidad,porciento,ordenada,r_cantidad1,r_cantidad,
mp_recibida,is_recibida,ip_recibida,ir_recibida,ih_recibida
DECIMAL(12,3)
# WHENEVER ERROR CONTINUE
LET int_flag = FALSE
INITIALIZE datos_gen.* TO NULL
LET datos_gen.fecha = today USING "dd/mm/yy"
LABEL otra_vez:
IF (OPC = "S" OR OPC = "s") OR opc IS NULL THEN
INITIALIZE datos_gen.* TO NULL
END IF
LET cerrada = "N"
LET total_cantidad = 0
LET is_ultimo = null
LET ir_ultimo = null
LET ip_ultimo = null
LET ih_ultimo = null
LET in_ultimo = null
# Captura de informacion del reporte de entrada
INPUT BY NAME datos_gen.num_doc THRU datos_gen.bodega WITHOUT DEFAULTS
BEFORE INPUT
CALL bodegas('1')
SELECT a.bodega INTO datos_gen.bodega
FROM seg0001 a
WHERE a.usuario = usuarios
DISPLAY BY NAME datos_gen.bodega
AFTER FIELD num_doc
# Estas asignaciones es para que cuando se le digite el numero del documento
# no busque el ultimo numero en las correspondientes tablas
IF datos_gen.num_doc IS NOT NULL THEN
LET is_ultimo = datos_gen.num_doc
LET ir_ultimo = datos_gen.num_doc
LET ip_ultimo = datos_gen.num_doc
LET ih_ultimo = datos_gen.num_doc
LET in_ultimo = datos_gen.num_doc
END IF
{
SELECT UNIQUE a.num_doc FROM iptb00006 a
WHERE a.cod_mov = 10 AND a.num_doc = datos_gen.num_doc
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
}
# Control de la fecha del documento para que el usuario no pueda introducir
# un documento con fecha atrasada
AFTER FIELD fecha
IF datos_gen.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
IF datos_gen.fecha > TODAY THEN
LET numero_msg = 160
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = datos_gen.fecha USING "ddmmyy"
SELECT MIN(fecha_corte) INTO fecha_c FROM prdtable
WHERE fecha_corte >= p_fechas
IF STATUS = NOTFOUND THEN
LET numero_msg = 58
CALL msg(numero_msg)
SLEEP 3
RETURN
END IF
LET dia = 0
SELECT MIN(dias_gracia) INTO dia FROM prdtable
WHERE fecha_corte = fecha_c
IF dia IS NULL THEN
LET dia = 0
END IF
SELECT a.usuario FROM seg0003 a
WHERE a.usuario = SUSER_SNAME()
IF STATUS != NOTFOUND THEN
LET fecha_c = fecha_c + dia
END IF
IF fecha_c < TODAY THEN
LET numero_msg = 57
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
AFTER FIELD bodega
IF datos_gen.bodega IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD bodega
END IF
LET descripcion_bodega = NULL
SELECT UNIQUE a.usuario,b.descripcion INTO descripcion_bodega FROM iptb00048 a,intb00009 b
WHERE a.bodega = datos_gen.bodega AND a.usuario = usuarios AND
a.bodega = b.cod_bodega
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISOS PARA UTILIZAR BODEGA","INFO")
NEXT FIELD bodega
END IF
BEFORE FIELD num_doc
LET datos_gen.bodega = 1
DISPLAY BY NAME datos_gen.bodega ATTRIBUTE (CYAN)
LET datos_gen.fecha = today
DISPLAY BY NAME datos_gen.fecha ATTRIBUTE (CYAN)
AFTER FIELD orden_compra
# Verifica que la orden de compra este en el archivo y
# ademas obliga a que el usuario tenga que digitar este campo
IF datos_gen.orden_compra IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD orden_compra
ELSE
SELECT a.cod_sp,a.cod_sp_sec,a.cierre
INTO datos_gen.cod_sp,datos_gen.cod_sp_sec,cerrada
FROM cotb00014 a
WHERE a.tipo = datos_gen.tipo AND
a.num_oc = datos_gen.orden_compra AND
a.status_t IS null
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
SELECT UNIQUE nom_sp INTO datos_gen.nom_sp FROM cotb00001
WHERE cod_sp=datos_gen.cod_sp and cod_sp_sec = datos_gen.cod_sp_sec and
status_t IS null
DISPLAY BY NAME datos_gen.nom_sp,datos_gen.cod_sp,datos_gen.cod_sp_sec
ATTRIBUTE (CYAN)
END IF
IF cerrada ="S" THEN
CALL fgl_winmessage("ERROR","ORDEN CERRADA, NO PUEDES RECIBIR MERCANCIAS","INFO")
NEXT FIELD orden_compra
END IF
IF cerrada IS NULL THEN
LET cerrada = "N"
END IF
AFTER FIELD fact_no
# Verifica que el numero de la factura no se repita con el mismo numero de
# documento.
IF datos_gen.conduce_no IS NULL AND datos_gen.fact_no IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
IF datos_gen.conduce_no IS NOT NULL AND datos_gen.fact_no IS NOT NULL THEN
LET numero_msg = 29
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
# Chequea que el conduce y la factura no este en blanco
IF datos_gen.conduce_no IS NULL AND datos_gen.fact_no IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
# bodegas
IF datos_gen.bodega IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD bodega
END IF
LET descripcion_bodega = NULL
SELECT UNIQUE a.usuario FROM iptb00048 a
WHERE a.bodega = datos_gen.bodega AND a.usuario = usuarios
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISOS PARA UTILIZAR BODEGA","INFO")
NEXT FIELD bodega
END IF
EXIT INPUT
END INPUT
IF opc = "S" or opc = "s" OR opc IS NULL THEN
CALL movi.clear()
END IF
# Si las informaciones estan correctas cuando se digite el proximo documento
# busca la orden especificada
IF opc = "S" or opc = "s" or opc IS NULL THEN
DECLARE locales CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,
a.cod_n," ",a.cod_n
FROM cotb00015 a
WHERE a.tipo = datos_gen.tipo and a.num_oc = datos_gen.orden_compra
ORDER BY 1,2,3,4,8
LET idx = 1
FOREACH locales INTO movi[idx].*
IF idx = 1 THEN
IF datos_gen.tipo = "01" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM intb00001
WHERE cod_n=movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and
cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec
END IF
IF datos_gen.tipo = "02" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM iptb00002
WHERE cod_n=movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and
cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec
END IF
IF datos_gen.tipo = "04" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM istb00002
WHERE cod_n=movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and
cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec
END IF
LET descripcion_f = descrip_espa clipped," ",unidad clipped
DISPLAY BY NAME descripcion_f ATTRIBUTE (CYAN)
END IF
IF datos_gen.tipo = "01" THEN
SELECT sum(a.cantidad_2) INTO recibida FROM intb00006 a
WHERE (a.orden_compra =datos_gen.orden_compra) and
(a.cod_n = movi[idx].cod_n) and
(a.cod_grupo = movi[idx].cod_grupo) and
(a.cod_tipo=movi[idx].cod_tipo) and
(a.cod_sec=movi[idx].cod_sec) and a.status_t IS NULL
LET movi[idx].cod_mov = 34
END IF
IF datos_gen.tipo = "02" THEN
SELECT sum(a.cantidad_2) INTO recibida FROM iptb00006 a
WHERE (a.orden_compra =datos_gen.orden_compra) and
(a.cod_n = movi[idx].cod_n) and
(a.cod_grupo = movi[idx].cod_grupo) and
(a.cod_tipo=movi[idx].cod_tipo) and
(a.cod_sec=movi[idx].cod_sec) and a.status_t IS NULL
LET movi[idx].cod_mov=10
END IF
IF recibida IS NULL THEN
LET recibida = 0
END IF
# LET movi[idx].cod_mov = null
# LET movi[idx].cantidad_2 = null
LET movi[idx].pendiente = movi[idx].cantidad_1 - recibida
LET idx = idx + 1
END FOREACH
END IF
# CAPTURA ARREGLO DE LOS CODIGOS DE MATERIA PRIMA
LET primera = "S"
CALL set_count(idx - 1)
INPUT ARRAY movi WITHOUT DEFAULTS FROM s_movi1.*
BEFORE ROW
LET p_act = arr_curr()
LET scr_l = scr_line()
AFTER FIELD cantidad_2
# Verifica que la cantidad recibida mas las que se han recibida de
# la orden no exceda de un 10% de la cantidad total de la orden
IF movi[p_act].cantidad_2 IS NOT NULL THEN
IF movi[p_act].cantidad_2 < 0 THEN
LET movi[p_act].cantidad_2 = 0
END IF
IF datos_gen.tipo = "01" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM intb00001
WHERE cod_n = movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and
cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec
END IF
IF datos_gen.tipo = "02" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM iptb00002
WHERE cod_n = movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and
cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec
END IF
IF datos_gen.tipo = "04" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM istb00002
WHERE cod_n = movi[idx].cod_n and cod_grupo = movi[idx].cod_grupo and
cod_tipo = movi[idx].cod_tipo and cod_sec = movi[idx].cod_sec
END IF
LET descripcion_f = descrip_espa clipped," ",unidad clipped
LET recibida = 0
IF datos_gen.tipo = "01" THEN
SELECT SUM(cantidad_2) INTO recibida FROM intb00006
WHERE orden_compra =datos_gen.orden_compra and
cod_n=movi[p_act].cod_n and cod_grupo=movi[p_act].cod_grupo and
cod_tipo=movi[p_act].cod_tipo and cod_sec=movi[p_act].cod_sec
and status_t IS null
END IF
IF datos_gen.tipo = "02" THEN
SELECT SUM(cantidad_2) INTO recibida FROM iptb00006
WHERE orden_compra =datos_gen.orden_compra and
cod_n=movi[p_act].cod_n and cod_grupo=movi[p_act].cod_grupo and
cod_tipo=movi[p_act].cod_tipo and cod_sec=movi[p_act].cod_sec
and status_t IS null
END IF
SELECT sum(cantidad) INTO ordenada FROM cotb00015
WHERE num_oc = datos_gen.orden_compra and tipo = datos_gen.tipo and
cod_n=movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and
cod_tipo=movi[p_act].cod_tipo and cod_sec=movi[p_act].cod_sec and
status_t IS null
IF recibida IS NULL THEN
LET recibida = 0
END IF
IF ordenada IS NULL THEN
LET ordenada = 0
END IF
LET porciento = ordenada * 0.10
IF movi[p_act].cantidad_2 IS NOT NULL THEN
LET recibida = recibida + movi[p_act].cantidad_2
END IF
LET r_cantidad = ordenada + porciento
IF recibida > (movi[p_act].cantidad_1*1.10) THEN
LET numero_msg = 28
CALL msg(numero_msg)
NEXT FIELD cantidad_2
END IF
END IF
AFTER FIELD cod_mov
LET p_act = arr_curr()
IF movi[p_act].cantidad_2 IS NOT NULL THEN
IF movi[p_act].cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
LET xcod_mov = movi[p_act].cod_mov
# Busqueda en la tabla movimientos de productos terminados
IF datos_gen.tipo = "01" THEN
LET etiqueta = "MATERIAS PRIMAS"
SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM intb00005 a
WHERE a.cod_mov = movi[p_act].cod_mov AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
END IF
IF datos_gen.tipo = "02" THEN
LET etiqueta = "PROD. TERMINADOS"
SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM iptb00005 a
WHERE a.cod_mov = movi[p_act].cod_mov AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
IF primera = "S" THEN
LET primera = "N"
SELECT a.num_doc INTO ip_ultimo FROM iptb00007 a
WHERE a.cod_mov = movi[arr_curr()].cod_mov AND
a.bodega = datos_gen.bodega
LET ip_ultimo = ip_ultimo + 1
LET datos_gen.num_doc = ip_ultimo
LET documento[p_act] = ip_ultimo
SELECT UNIQUE num_doc FROM iptb00006
WHERE num_doc=datos_gen.num_doc and cod_mov=movi[p_act].cod_mov AND
bodega = datos_gen.bodega
IF STATUS != NOTFOUND THEN
LET numero_msg = 128
CALL msg(numero_msg)
RETURN
END IF
END IF
END IF
# Busqueda del ultimo numero del reporte de entrada de Producto Terminados
DISPLAY BY NAME datos_gen.num_doc,datos_gen.descrip_mov ATTRIBUTE(CYAN)
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
FOR idx = 1 to arr_count()
IF movi[idx].cantidad_2 IS NOT NULL THEN
LET total_cantidad = movi[idx].cantidad_2 + total_cantidad
END IF
END FOR
EXIT INPUT
END INPUT
LET recibida = 0
LET ordenada = 0
PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc
IF OPC = "S" or OPC = "s" THEN
PROMPT "Desea Imprimir Este Documento? (S/N)" FOR CHAR opc1
LET opc1 = upshift(opc1)
IF opc1 = "S" THEN
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT entrada_imp TO archivo
END IF
LET primera = "S"
# Busca la cantidad recibida de la orden especificada
IF datos_gen.tipo = "01" THEN
SELECT sum(cantidad_2) INTO ip_recibida FROM intb00006
WHERE orden_compra=datos_gen.orden_compra and tipo=datos_gen.tipo and
status_t IS NULL
END IF
IF datos_gen.tipo = "02" THEN
SELECT sum(cantidad_2) INTO ip_recibida FROM iptb00006
WHERE orden_compra=datos_gen.orden_compra and tipo=datos_gen.tipo and
status_t IS NULL
SELECT a.num_doc INTO ip_ultimo FROM iptb00007 a
WHERE a.cod_mov = xcod_mov AND a.bodega = datos_gen.bodega
IF status != notfound THEN
LET datos_gen.num_doc = ip_ultimo +1
UPDATE iptb00007 set num_doc = datos_gen.num_doc
WHERE cod_mov = xcod_mov AND bodega = datos_Gen.bodega
ELSE
LET datos_gen.num_doc = 1
INSERT INTO iptb00007 (num_doc,cod_mov,bodega,us_crea,fech_crea) VALUES
(datos_gen.num_doc,xcod_mov,datos_gen.bodega,usuarios,GETDATE())
END IF
END IF
IF datos_gen.tipo = "04" THEN
SELECT sum(cantidad_2) INTO ip_recibida FROM istb00006
WHERE orden_compra=datos_gen.orden_compra and tipo=datos_gen.tipo and
status_t IS null
END IF
LET recibida = ip_recibida
# Busca la cantidad ordenada de la orden especificada
SELECT sum(a.cantidad) INTO ordenada FROM cotb00015 a
WHERE a.num_oc = datos_gen.orden_compra and a.tipo = datos_gen.tipo and
a.status_t IS null
IF recibida IS NULL THEN
LET recibida = 0
END IF
IF ordenada IS NULL THEN
LET ordenada = 0
END IF
# Calculo de los porcentaje limites de las ordenes
LET porciento = ordenada * 0.10
LET recibida = recibida + total_cantidad
LET r_cantidad = ordenada # - porciento
LET r_cantidad1 = ordenada #+ porciento
# Si la cantidad recibida producto de la sumatoria y subtracion del 10%
# es mayor o igual a la cantidad recibida y menor o igual a la cantidad de
# la orden cierra la orden
IF recibida >= r_cantidad and recibida <= r_cantidad1 THEN
LET cerrada = "S"
END IF
LET primera = "S"
# INFORMACION REPORTE ENTRADA
{ BEGIN WORK
DELETE FROM altbm00001 WHERE num_doc = datos_gen.num_doc AND orden_compra = datos_gen.orden_compra
INSERT INTO altbm00001 (num_doc,fecha,tipo,orden_compra,cod_sp,cod_sp_sec,conduce_no,fact_no,
bodega,us_crea,fech_crea)
VALUES
(datos_gen.num_doc,datos_gen.fecha,datos_gen.orden_compra,datos_gen.cod_sp,
datos_gen.cod_sp_Sec,datos_gen.conduce_no,datos_gen.fact_no,datos_gen.bodega,
SUSER_SNAME(),GETDATE())
IF STATUS < 0 THEN
LET numero_msg =-300
CALL msg(numero_msg)
ROLLBACK WORK
ELSE
COMMIT WORK
END IF
BEGIN WORK}
BEGIN WORK
IF datos_gen.tipo = "01" THEN
SELECT UNIQUE a.num_doc INTO in_ultimo FROM intb00023 a
WHERE a.cod_mov = xcod_mov AND bodega = datos_gen.bodega
IF STATUS = NOTFOUND THEN
LET datos_gen.num_doc = 1
INSERT INTO intb00023 (num_doc,cod_mov,us_crea,fech_crea,bodega) VALUES
(datos_gen.num_doc,xcod_mov,usuarios,GETDATE(),datos_gen.bodega)
END IF
LET in_ultimo = in_ultimo + 1
LET datos_gen.num_doc = in_ultimo
DISPLAY BY NAME datos_gen.num_doc
SELECT UNIQUE num_doc FROM intb00006
WHERE num_doc=datos_gen.num_doc and cod_mov=xcod_mov
IF STATUS != NOTFOUND THEN
LET numero_msg = 128
CALL msg(numero_msg)
END IF
UPDATE intb00023 SET num_doc=DATOS_GEN.num_doc WHERE cod_mov=xcod_mov
END IF
FOR idx = 1 TO arr_count()
IF movi[idx].cantidad_2 IS NOT NULL AND movi[idx].cantidad_2 <> 0 THEN
IF datos_gen.tipo = "04" THEN
INSERT INTO istb00006
(num_doc,fecha,fact_no,conduce_no,orden_compra,tipo,cod_sp,cod_sp_sec,
cod_mov,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_1,cantidad_2,bodega,
us_crea,fech_crea)
VALUES (datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no,
datos_gen.conduce_no,datos_gen.orden_compra,datos_gen.tipo,
datos_gen.cod_sp, datos_gen.cod_sp_sec,movi[idx].cod_mov,
movi[idx].cod_n,movi[idx].cod_grupo,
movi[idx].cod_tipo,movi[idx].cod_sec,
movi[idx].cantidad_1,
movi[idx].cantidad_2,
datos_gen.bodega,
usuarios,GETDATE())
END IF
# Actualizacion de las tablas de Productos terminados
IF datos_gen.tipo = "02" THEN
INSERT INTO iptb00006
VALUES ("1",datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no,
datos_gen.conduce_no,datos_gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp, datos_gen.cod_sp_sec,null,null,null,null,
movi[idx].cod_mov,null,'1',movi[idx].cod_n,movi[idx].cod_grupo,
movi[idx].cod_tipo,movi[idx].cod_sec,movi[idx].cantidad_1,
movi[idx].cantidad_2,null,null,datos_gen.bodega,
null,SUSER_SNAME(),GETDATE(),null,null,0,' ','0',' ','0','1','0',null,0,NULL,0,0,0,0)
END IF
IF datos_gen.tipo = "01" THEN
INSERT INTO intb00006
(num_doc,fecha,fact_no,conduce_no,orden_compra,tipo,cod_sp,cod_sp_sec,
cod_mov,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_1,cantidad_2,bodega,
us_crea,fech_crea)
VALUES (datos_gen.num_doc,datos_gen.fecha,datos_gen.fact_no,
datos_gen.conduce_no,datos_gen.orden_compra,datos_gen.tipo,
datos_gen.cod_sp, datos_gen.cod_sp_sec,movi[idx].cod_mov,
movi[idx].cod_n,movi[idx].cod_grupo,
movi[idx].cod_tipo,movi[idx].cod_sec,
movi[idx].cantidad_1,
movi[idx].cantidad_2,
datos_gen.bodega,
SUSER_SNAME(),GETDATE())
END IF
IF opc1 = "S" THEN
OUTPUT TO REPORT entrada_imp(datos_Gen.*,movi[idx].*)
END IF
END IF
END FOR
COMMIT WORK
IF opc1 = "S" THEN
FINISH REPORT entrada_imp
END IF
RUN imprime
# Actualiza la tabla de ordenes para cerrarla si la variable cerrada = "S"
IF cerrada = "S" THEN
UPDATE cotb00014 set cierre = cerrada
WHERE num_oc = datos_gen.orden_compra and tipo = datos_gen.tipo
END IF
CALL movi.clear()
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
END IF
GOTO otra_vez
END FUNCTION
{
----------------------------------------------------------------------------
PROGRAMA : PRD
OBJETIVO : Controlar las operaciones que se hagan anterior a una fecha
de corte.
REALIZADO POR : Ing. Juan Fco. Soto.
FECHA : Noviembre 4, 1992.
---------------------------------------------------------------------------
}
FUNCTION prd(p_fechas)
DEFINE p_fechas CHAR(6)
DEFINE comp_fech,comp_fech1 DATE
DEFINE mes_control CHAR(2)
DEFINE mes_calc SMALLINT
DEFINE fecha_c CHAR(6)
DEFINE c_ano,a_ano CHAR(4)
LET a_ano = year(p_fechas)
LET mes_control = MONTH(today)
LET mes_calc = mes_control
IF mes_calc = 01 THEN
LET mes_calc = 13
LET a_ano = year(today - 32)
END IF
LET mes_calc = mes_calc - 2
IF mes_calc <= 0 THEN
LET mes_calc = 12
LET a_ano = year(today) - 1
END IF
LET c_ano = year(today)
{IF a_ano != c_ano THEN
LET numero_msg = 59
CALL msg(numero_msg)
LET bandera = 1
RETURN
END IF}
SELECT fecha_corte INTO fecha_c FROM prdtable
WHERE mes = mes_calc AND ano = a_ano
IF STATUS = NOTFOUND THEN
LET numero_msg = 58
CALL msg(numero_msg)
LET bandera = 1
END IF
LET comp_fech1 = fecha_c
LET comp_fech = p_fechas
{
IF comp_fech < comp_fech1 THEN
LET numero_msg = 57
CALL msg(numero_msg)
LET bandera = 1
END IF
}
END FUNCTION
{
Esta funcion se utiliza para desplegar mensajes de errores en todos
los sistemas de Ray-O-Vac Dominicana.
Esta funcion busca el mensaje deseado en la tabla "msgtable" y lo
despliega en la linea de mensajes
}
FUNCTION msg(numero_msg)
DEFINE numero_msg SMALLINT
DEFINE descripcion CHAR (60)
SELECT desc_msg INTO descripcion FROM msgtable
WHERE cod_msg = numero_msg
IF STATUS = NOTFOUND THEN
LET numero_msg = 22
SELECT desc_msg INTO descripcion FROM msgtable
WHERE cod_msg = numero_msg
ERROR descripcion attribute (bold)
ELSE
ERROR descripcion attribute (bold)
LET numero_msg = 0
END IF
END FUNCTION
FUNCTION integridad()
IF sqlca.sqlcode < 0 THEN
LET numero_msg = sqlca.sqlcode
CALL msg(numero_msg)
DISPLAY numero_msg AT 23,70
LET bandera = 1
SLEEP 2
RETURN
END IF
END FUNCTION
FUNCTION no_existe()
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET verdad = "S"
END IF
CALL integridad()
END FUNCTION
REPORT entrada_imp(x,z)
DEFINE x RECORD
num_doc LIKE iptb00006.num_doc,
tipo LIKE iptb00006.tipo,
orden_compra LIKE iptb00006.orden_compra,
cod_sp LIKE iptb00006.cod_sp,
cod_sp_sec LIKE iptb00006.cod_sp_sec,
conduce_no LIKE iptb00006.conduce_no,
fact_no LIKE iptb00006.fact_no,
fecha LIKE iptb00006.fecha,
bodega LIKE iptb00006.bodega,
nom_sp LIKE cotb00001.nom_sp,
descrip_mov LIKE iptb00005.descrip_mov
END RECORD
DEFINE z RECORD
cod_n LIKE iptb00006.cod_n,
cod_grupo LIKE iptb00006.cod_grupo,
cod_tipo LIKE iptb00006.cod_tipo,
cod_sec LIKE iptb00006.cod_sec,
cantidad_1 LIKE iptb00006.cantidad_1,
cantidad_2 LIKE iptb00006.cantidad_2,
cod_mov SMALLINT,
no_embarque CHAR(8),
pendiente DECIMAL(12,3)
END RECORD
DEFINE etiq, unidad CHAR(20)
DEFINE recibida1 DECIMAL(12,3)
DEFINE l SMALLINT
DEFINE comp_on,comp_off,doce,normal,negras_of,negras_on,doble_on,doble_of CHAR(2)
OUTPUT
TOP MARGIN 0
BOTTOM MARGIN 0
LEFT MARGIN 0
FORMAT
#BEFORE GROUP OF doc
PAGE HEADER
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET negras_on = ASCII 27, ASCII 69
LET negras_of = ASCII 27, ASCII 70
LET doble_on = ASCII 14
LET doble_of = ASCII 20
LET normal = ASCII 27, ASCII 80
LET doce = ASCII 27, ASCII 77
PRINT normal
PRINT COLUMN 1,negras_on,doble_on,comp_on,
COLUMN 1,p_companias.nombre CLIPPED," RNC. ",
p_companias.rnc CLIPPED,doble_of,negras_of
PRINT COLUMN 58, "REPORTE DE ENTRADA"
LET etiq = etiqueta clipped
LET l = (80 - LENGTH(etiq))/2
PRINT COLUMN 58, "No.",doble_on,datos_gen.num_doc USING "&&&&&&"
LET l = (80 - LENGTH(datos_gen.descrip_mov))/2
PRINT COLUMN l, negras_on,"(",z.cod_mov USING "<<<",")", datos_gen.descrip_mov,negras_of
PRINT comp_on
SELECT a.descripcion INTO descripcion_bodega FROM intb00009 a
WHERE a.cod_bodega = datos_gen.bodega
SKIP 1 LINE
PRINT COLUMN 1, "Fecha : ",datos_gen.fecha USING "dd/mm/yy",
COLUMN 49, "Orden de Compra: ",datos_gen.tipo,"-",
datos_gen.orden_compra USING "&&&&&&"
PRINT COLUMN 1, "Proveedor : ",datos_gen.cod_sp USING "&&","-",
datos_gen.cod_sp_sec USING "&&&&"," ",
datos_gen.nom_sp[1,30]
PRINT COLUMN 1, "Conduce : ",datos_gen.conduce_no clipped,
COLUMN 49, "Factura : ",datos_gen.fact_no clipped
PRINT COLUMN 1, "BODEGA : (",datos_gen.bodega USING "<<<",")",descripcion_bodega
PRINT COLUMN 1, "=====================================================",
"==========================="
PRINT COLUMN 1, doce,
COLUMN 23, "CANTIDAD",
COLUMN 38, "CANTIDAD",
COLUMN 53, "CANTIDAD"
PRINT COLUMN 1, "CODIGO",
COLUMN 21, "ORDENADA",
COLUMN 36, "RECIBIDA",
COLUMN 51, "PENDIENTE",
COLUMN 71, "D E S C R I P C I O N"
PRINT COLUMN 36, "EN DOCUM.",
COLUMN 51, "ORDEN",normal
PRINT COLUMN 1, "=====================================================",
"==========================="
PRINT doce
ON EVERY ROW
LET recibida1 = 0
LET descrip_espa = " "
IF x.tipo = 1 THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM intb00001
WHERE cod_n = z.cod_n and cod_grupo = z.cod_grupo and
cod_tipo = z.cod_tipo and cod_sec = z.cod_sec
END IF
IF x.tipo = 2 THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM iptb00002
WHERE cod_n = z.cod_n and cod_grupo = z.cod_grupo and
cod_tipo = z.cod_tipo and cod_sec = z.cod_sec
END IF
LET descripcion_f = descrip_espa clipped," ",unidad clipped
PRINT COLUMN 1, z.cod_n USING "&&&&","-",z.cod_grupo USING "&&&&","-",
z.cod_tipo USING "&&&&","-",z.cod_sec USING "&&&&",
COLUMN 20, z.cantidad_1 USING "##,###,###.###",
COLUMN 37, z.cantidad_2 USING "##,###,###.###",
COLUMN 53, z.pendiente-z.cantidad_2 USING "---,---.###",
descripcion_f CLIPPED
PAGE TRAILER
PRINT normal
PRINT COLUMN 1,"OBSERVACION :"
PRINT COLUMN 1,
"--------------------------------------------------------------------------"
PRINT
PRINT COLUMN 1,
"--------------------------------------------------------------------------"
PRINT
PRINT COLUMN 1,
"--------------------------------------------------------------------------"
SKIP 3 LINE
PRINT normal
END REPORT
FUNCTION inpcmf006()
DEFINE query_item CHAR(500)
INPUT BY NAME datos_gen.tipo
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF datos_Gen.tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
EXIT INPUT
END INPUT
CONSTRUCT criterio ON a.bodega,a.num_doc,a.cod_mov,a.orden_compra,a.cod_sp,a.cod_sp_sec,a.fecha
FROM bodega,num_doc,cod_mov,orden_compra,cod_sp,cod_Sp_Sec,fecha
BEFORE CONSTRUCT
CALL bodegas('1')
AFTER CONSTRUCT
IF INT_FLAG THEN
CALL msg(2)
LET INT_FLAG = FALSE
RETURN
END IF
END CONSTRUCT
IF datos_gen.tipo = '01' THEN
LET selec = "SELECT DISTINCT a.num_doc,a.tipo,a.orden_compra,a.cod_Sp,a.cod_sp_Sec,a.conduce_no, ",
" a.fact_no,CONVERT(CHAR(10),a.fecha,103),a.bodega,b.nom_sp ",
" FROM intb00006 a,cotb00001 b ",
" WHERE a.cod_sp = b.cod_sp and a.cod_sp_Sec = b.cod_sp_Sec and ",criterio CLIPPED,
" AND a.status_t is null "
END IF
IF datos_gen.tipo = "02" THEN
LET selec = " SELECT DISTINCT a.num_doc,a.tipo,a.orden_compra,a.cod_Sp,a.cod_sp_Sec,a.conduce_no, ",
"a.fact_no,a.fecha,a.bodega,b.nom_sp ",
" FROM iptb00006 a,cotb00001 b ",
" WHERE a.cod_sp = b.cod_sp and a.cod_Sp_sec = b.cod_sp_sec ",
" and ",
criterio CLIPPED, " AND a.status_t IS NULL"
END IF
IF datos_gen.tipo = "04" THEN
LET selec = " SELECT DISTINCT a.num_doc,a.tipo,a.orden_compra,a.cod_Sp,a.cod_sp_Sec,a.conduce_no, ",
"a.fact_no,a.fecha,a.bodega,b.nom_sp ",
" FROM istb00006 a,cotb00001 b ",
" WHERE a.cod_sp = b.cod_sp and a.cod_Sp_sec = b.cod_sp_sec ",
" and ",
criterio CLIPPED, " AND a.status_t IS NULL"
END IF
PREPARE comando FROM selec
DECLARE busca_reporte SCROLL CURSOR FOR comando
OPEN busca_reporte
FETCH FIRST busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no,
datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega,
datos_gen.nom_sp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
DISPLAY BY NAME datos_gen.*
MENU "NAVEGACION"
COMMAND "SIGUIENTE"
FETCH NEXT busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no,
datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega,
datos_gen.nom_sp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
COMMAND "ANTERIOR"
FETCH PREVIOUS busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no,
datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega,
datos_gen.nom_sp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
COMMAND "PRIMERO"
FETCH FIRST busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no,
datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega,
datos_gen.nom_sp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
COMMAND "ULTIMO"
FETCH LAST busca_reporte iNTO datos_gen.num_doc,datos_Gen.tipo,datos_gen.orden_compra,
datos_gen.cod_sp,datos_gen.cod_sp_sec,datos_gen.conduce_no,
datos_gen.fact_no,datos_gen.fecha,datos_gen.bodega,
datos_gen.nom_sp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
COMMAND "ITEMS"
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT entrada_imp TO archivo
IF datos_Gen.tipo = '01' THEN
LET query_item =
" SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cod_mov,a.cantidad_1,",
"a.cantidad_2 FROM intb00006 a ",
"WHERE a.tipo = ",datos_gen.tipo, " AND a.orden_compra = '",
datos_gen.orden_compra using "&&&&&&","' AND",
" a.num_doc = '",datos_gen.num_doc using "&&&&&&","' ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec"
ELSE
LET query_item =
" SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cod_mov,a.cantidad_1,",
"a.cantidad_2 FROM iptb00006 a ",
"WHERE a.tipo = ",datos_gen.tipo, " AND a.orden_compra = '",
datos_gen.orden_compra using "&&&&&&","' AND",
" a.num_doc = '",datos_gen.num_doc using "&&&&&&","' ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec"
END IF
PREPARE comandoi FROM query_item
DECLARE busca_item CURSOR FOR comandoi
LET idx = 1
FOREACH busca_item INTO movi[idx].cod_n,movi[idx].cod_grupo,
movi[idx].cod_tipo,movi[idx].cod_sec,
movi[idx].cod_mov,movi[idx].cantidad_1,
movi[idx].cantidad_2
OUTPUT TO REPORT entrada_imp(datos_Gen.*,movi[idx].*)
LET idx = idx + 1
END FOREACH
FINISH REPORT entrada_imp
IF idx = 1 THEN
LET numero_msg = 3
CALL msg(numero_msg)
EXIT MENU
END IF
CALL set_count(idx-1)
DISPLAY ARRAY movi TO s_movi1.*
AFTER ROW
LET p_act = arr_curr()
IF datos_gen.tipo = "01" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM intb00001
WHERE cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and
cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec
SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM intb00005 a
WHERE a.cod_mov = movi[p_act].cod_mov AND a.status_t IS NULL
END IF
IF datos_gen.tipo = "02" THEN
SELECT unidad_med, descrip_esp INTO unidad, descrip_espa
FROM iptb00002
WHERE cod_n = movi[p_act].cod_n and cod_grupo = movi[p_act].cod_grupo and
cod_tipo = movi[p_act].cod_tipo and cod_sec = movi[p_act].cod_sec
SELECT a.descrip_mov INTO datos_gen.descrip_mov FROM iptb00005 a
WHERE a.cod_mov = movi[p_act].cod_mov AND a.status_t IS NULL
END IF
LET descripcion_f = descrip_espa clipped," ",unidad clipped
DISPLAY BY NAME descripcion_f,datos_gen.descrip_mov
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
IF idx > 1 THEN
LET opt = fgl_winquestion("Atencion","Desea Imprimir este Documento?",
"cancel","YES|NO|","question",0)
IF opt = "YES" THEN
RUN imprime
END IF
END IF
COMMAND "RETORNAR"
EXIT MENU
END MENU
END FUNCTION