2447 lines
90 KiB
Plaintext
2447 lines
90 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.
|
|
|
|
-------------------------------------------------------------------------
|
|
}
|
|
IMPORT util
|
|
SCHEMA smarmotech
|
|
GLOBALS
|
|
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)
|
|
|
|
DEFINE
|
|
etiqueta CHAR(20),
|
|
selec, criterio, scodigo STRING,
|
|
opt CHAR(10),
|
|
recepTodas SMALLINT,
|
|
verdad1 BOOLEAN
|
|
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, idx1, p_act, scr_l, cod_mov_ant SMALLINT
|
|
DEFINE primera, opc1, verdad, opc, estado_mov 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, cantidad, cantidad2
|
|
DECIMAL(12, 3),
|
|
descripcion_f CHAR(100),
|
|
nombre_m CHAR(20),
|
|
descrip CHAR(15),
|
|
USUARIOS, CLAVE, descripcion_bodega CHAR(50),
|
|
i, x2 INT,
|
|
xcod_mov SMALLINT,
|
|
xcantidad1, xcantidad2 DEC(12, 5)
|
|
|
|
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,
|
|
tmp_cantidad, num_doc_tmp DEC(12, 5)
|
|
|
|
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,
|
|
tipo_recepcion_entrada INT,
|
|
num_cont VARCHAR(100),
|
|
fecha_recepcion_entrada DATE,
|
|
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),
|
|
desglose CHAR(1),
|
|
descrip_esp VARCHAR(180)
|
|
|
|
END RECORD,
|
|
p_companias RECORD LIKE companias.*,
|
|
att DYNAMIC ARRAY OF RECORD
|
|
col1 STRING,
|
|
col2 STRING,
|
|
col3 STRING,
|
|
col4 STRING,
|
|
col5 STRING,
|
|
col6 STRING,
|
|
col7 STRING
|
|
END RECORD
|
|
|
|
DEFINE moviD RECORD
|
|
|
|
area, cod_n, cod_Grupo, cod_tipo, cod_sec, descripcion, observacion
|
|
STRING,
|
|
book VARCHAR(50),
|
|
tipos VARCHAR(50),
|
|
lado_1 DECIMAL(12, 5),
|
|
lado_2 DECIMAL(12, 5),
|
|
lado_3 DECIMAL(12, 5),
|
|
id_bodega, id_seccion1 INT,
|
|
d_seccion1 VARCHAR(50),
|
|
id_tramo1 INT,
|
|
d_tramo1 VARCHAR(50),
|
|
id_fila, id_pos INT,
|
|
id_producto VARCHAR(25),
|
|
tipo_material VARCHAR(30),
|
|
cantidad1, cantidad2, factor_conv DECIMAL(12, 5),
|
|
cod_mov INT,
|
|
control_transferencia_ubicaciones VARCHAR(2),
|
|
cod_mov_transferencia INT,
|
|
codigo STRING
|
|
END RECORD
|
|
DEFINE
|
|
movi10 DYNAMIC ARRAY OF RECORD
|
|
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
|
|
descripcion, observacion STRING,
|
|
book VARCHAR(50),
|
|
tipos VARCHAR(50),
|
|
lado_1 DECIMAL(12, 5),
|
|
lado_2 DECIMAL(12, 5),
|
|
lado_3 DECIMAL(12, 5),
|
|
id_bodega, id_seccion1 INT,
|
|
d_seccion1 VARCHAR(50),
|
|
id_tramo1 INT,
|
|
d_tramo1 VARCHAR(50),
|
|
id_fila, id_pos INT,
|
|
id_producto VARCHAR(25),
|
|
tipo_material VARCHAR(30),
|
|
cantidad1, cantidad2, factor_conv DECIMAL(12, 5),
|
|
cod_mov INT,
|
|
de_seccion, de_tramo INT,
|
|
codigo STRING
|
|
END RECORD,
|
|
tmpnumero INT
|
|
|
|
DEFINE movi10Dest DYNAMIC ARRAY OF RECORD
|
|
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
|
|
descripcion, observacion STRING,
|
|
book VARCHAR(50),
|
|
tipos VARCHAR(50),
|
|
lado_1 DECIMAL(12, 5),
|
|
lado_2 DECIMAL(12, 5),
|
|
lado_3 DECIMAL(12, 5),
|
|
id_bodega, id_seccion1 INT,
|
|
d_seccion1 VARCHAR(50),
|
|
id_tramo1 INT,
|
|
d_tramo1 VARCHAR(50),
|
|
id_fila, id_pos INT,
|
|
id_producto VARCHAR(25),
|
|
tipo_material VARCHAR(30),
|
|
cantidad1, cantidad2, factor_conv DECIMAL(12, 5),
|
|
cod_mov INT,
|
|
de_seccion, de_tramo INT,
|
|
codigo STRING
|
|
END RECORD
|
|
|
|
DEFINE kdatos DYNAMIC ARRAY OF RECORD
|
|
lado_2 DEC(8, 5),
|
|
lado_1 DEC(8, 5),
|
|
lado_3 DEC(8, 5),
|
|
cantidad FLOAT,
|
|
cantidad2 FLOAT,
|
|
tono VARCHAR(100),
|
|
calidad VARCHAR(100),
|
|
xobservacion VARCHAR(200),
|
|
id_producto CHAR(25),
|
|
seccion INT,
|
|
tramo INT
|
|
END RECORD
|
|
|
|
DEFINE container DECIMAL(12, 5)
|
|
|
|
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 cod_seccion, cod_tramo, cod_fila, cod_pos, nombre
|
|
INTO moviD.id_seccion1,
|
|
moviD.id_tramo1,
|
|
moviD.id_fila,
|
|
moviD.id_pos,
|
|
p_companias.nombre
|
|
FROM companias
|
|
SELECT ISNULL(a.num_doc, 0)
|
|
INTO tmpnumero
|
|
FROM iptb00043 a
|
|
WHERE a.usuario = usuarios
|
|
IF tmpnumero = 0 THEN
|
|
|
|
LET tmpnumero = 1
|
|
INSERT INTO iptb00043(num_doc, usuario) VALUES(tmpnumero, usuarios)
|
|
ELSE
|
|
LET tmpnumero = tmpnumero + 1
|
|
UPDATE iptb00043
|
|
SET num_doc = tmpnumero, usuario = usuarios
|
|
WHERE usuario = usuarios
|
|
|
|
END IF
|
|
|
|
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()
|
|
|
|
# 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
|
|
|
|
DIALOG ATTRIBUTES(UNBUFFERED)
|
|
# Captura de informacion del reporte de entrada
|
|
INPUT BY NAME datos_gen.tipo,
|
|
datos_gen.orden_compra,
|
|
datos_gen.conduce_no,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fact_no,
|
|
datos_Gen.bodega,
|
|
datos_Gen.fecha,
|
|
recepTodas,
|
|
datos_gen.fecha_recepcion_entrada
|
|
ATTRIBUTE(WITHOUT DEFAULTS)
|
|
|
|
ON ACTION Procesar INFIELD recepTodas
|
|
NEXT FIELD cod_b
|
|
|
|
BEFORE INPUT
|
|
CALL bodegas('1')
|
|
CALL tipoorden()
|
|
SELECT a.bodega
|
|
INTO datos_gen.bodega
|
|
FROM seg0001 a
|
|
WHERE a.usuario = usuarios
|
|
|
|
LET datos_gen.fecha = TODAY
|
|
DISPLAY BY NAME datos_gen.bodega, datos_gen.fecha
|
|
|
|
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
|
|
# PREPARACION INSTRUCCIONES PARA EL INSERT AL DESGLOSE
|
|
LET selec =
|
|
"INSERT INTO iptb00052 (cod_n,cod_grupo,cod_tipo,cod_Sec,tipo_material,cantidad_minima,us_crea,fech_crea,
|
|
cantidadorden,num_doc,cod_mov,fecha,bookmatch,tipos)
|
|
SELECT cod_n,cod_grupo,cod_tipo,cod_Sec,tipo_material,cantidad_minima,
|
|
us_crea,fech_crea,cantidadorden,?,cod_mov,fecha,bookmatch,tipos
|
|
FROM tmpdesglose_master
|
|
WHERE num_doc = ? AND cod_mov = ? AND us_crea = ? AND
|
|
cod_n = ? AND cod_grupo = ? AND
|
|
cod_tipo = ? AND cod_sec = ?
|
|
"
|
|
PREPARE inst1 FROM selec
|
|
|
|
LET selec =
|
|
"INSERT INTO iptb00050 (cod_n,cod_grupo,cod_tipo,cod_Sec,imagen,observacion,
|
|
lado_1,lado_2,lado_3,cantidad,
|
|
nombre_file,us_crea,fech_crea,id_producto,
|
|
cantidad2,cod_bodega,cod_seccion,cod_tramo,tono,calidad,num_doc,cod_mov)
|
|
SELECT cod_n,cod_grupo,cod_tipo,cod_Sec,imagen,observacion,
|
|
lado_1,lado_2,lado_3,cantidad,
|
|
nombre_file,us_crea,fech_crea,id_producto,
|
|
cantidad2,cod_bodega,cod_seccion,cod_tramo,tono,calidad,?,cod_mov
|
|
FROM tmpdesglose
|
|
WHERE num_doc = ? AND cod_mov = ? AND us_crea = ? AND
|
|
cod_n = ? AND cod_grupo = ? AND
|
|
cod_tipo = ? AND cod_sec = ?
|
|
"
|
|
PREPARE inst2 FROM selec
|
|
NEXT FIELD tipo
|
|
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)
|
|
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 = USUARIOS
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
LET fecha_c = fecha_c + dia
|
|
END IF
|
|
|
|
{ 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)}
|
|
|
|
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")
|
|
END IF
|
|
|
|
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
|
|
|
|
# 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
|
|
|
|
IF movi.getLength() <= 1 THEN
|
|
DECLARE locales CURSOR FOR
|
|
SELECT a.cod_n,
|
|
a.cod_grupo,
|
|
a.cod_tipo,
|
|
a.cod_sec,
|
|
a.cantidad,
|
|
'0',
|
|
a.cod_n,
|
|
" ",
|
|
a.cod_n,
|
|
b.desglose,
|
|
b.descrip_esp
|
|
FROM cotb00015 a
|
|
LEFT OUTER
|
|
JOIN iptb00002 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
|
|
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
|
|
|
|
SELECT a.status_mov
|
|
INTO estado_mov
|
|
FROM iptb00005 a
|
|
WHERE a.cod_mov = movi[idx].cod_mov
|
|
|
|
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
|
|
|
|
DISPLAY "recepcion ", recepTodas
|
|
IF recepTodas = 1 THEN
|
|
FOR idx = 1 TO movi.getLength()
|
|
LET movi[idx].cantidad_2 = movi[idx].cantidad_1
|
|
IF datos_gen.tipo = "01" THEN
|
|
LET movi[idx].cod_mov = 34
|
|
LET xcod_mov = movi[idx].cod_mov
|
|
END IF
|
|
|
|
IF datos_gen.tipo = "02" THEN
|
|
LET movi[idx].cod_mov = 10
|
|
LET xcod_mov = movi[idx].cod_mov
|
|
|
|
LET movi10Dest[idx].area = 1
|
|
LET movi10Dest[idx].cod_n = movi[idx].cod_n
|
|
LET movi10Dest[idx].cod_grupo = movi[idx].cod_grupo
|
|
LET movi10Dest[idx].cod_tipo = movi[idx].cod_tipo
|
|
LET movi10Dest[idx].cod_Sec = movi[idx].cod_sec
|
|
LET movi10Dest[idx].cantidad1 = movi[idx].cantidad_1
|
|
LET movi10Dest[idx].cantidad2 = movi[idx].cantidad_2
|
|
LET movi10Dest[idx].cod_mov = movi[idx].cod_mov
|
|
LET movi10Dest[idx].id_bodega = datos_gen.bodega
|
|
LET movi10Dest[idx].id_seccion1 = moviD.id_seccion1
|
|
LET movi10Dest[idx].id_tramo1 = moviD.id_tramo1
|
|
LET movi10Dest[idx].id_fila = moviD.id_fila
|
|
LET movi10Dest[idx].id_pos = moviD.id_pos
|
|
END IF
|
|
END FOR
|
|
CALL salvarData() RETURNING numero_msg, verdad1
|
|
IF NOT verdad1 THEN
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD orden_compra
|
|
END IF
|
|
# CALL verificaCodigo() RETURNING verdad1
|
|
EXIT DIALOG
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
# Si las informaciones estan correctas cuando se digite el proximo documento
|
|
# busca la orden especificada
|
|
|
|
# CAPTURA ARREGLO DE LOS CODIGOS DE MATERIA PRIMA
|
|
|
|
INPUT ARRAY movi FROM s_movi1.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
CALL DIALOG.setActionActive("delete", FALSE)
|
|
CALL dialog.setCellAttributes(att)
|
|
CALL verificaCodigo() RETURNING verdad1
|
|
BEFORE ROW
|
|
LET p_act = arr_curr()
|
|
LET scr_l = scr_line()
|
|
--ON ACTION test
|
|
--SET CONNECTION "SQL_C"
|
|
--CALL actExistencia(num_doc_tmp)
|
|
AFTER FIELD cod_Sec
|
|
|
|
IF movi[p_act].cantidad_1 IS NOT NULL
|
|
AND datos_gen.tipo = "02" THEN
|
|
SELECT a.factor_conv
|
|
INTO moviD.factor_conv
|
|
FROM iptb00001 a
|
|
WHERE a.cod_n = movi[p_act].cod_n
|
|
AND a.cod_grupo = movi[p_act].cod_grupo
|
|
AND a.cod_tipo = movi[p_act].cod_tipo
|
|
AND a.cod_sec = movi[p_act].cod_sec
|
|
|
|
LET moviD.cod_n = movi[p_act].cod_n
|
|
LET moviD.cod_grupo = movi[p_act].cod_grupo
|
|
LET moviD.cod_tipo = movi[p_act].cod_tipo
|
|
LET moviD.cod_sec = movi[p_act].cod_sec
|
|
# AREA FIJA 1: DEBE COINCIDIR CON EL AREA DEL MOVIMIENTO EN
|
|
# iptb00006/iptb00062 PARA QUE EL JSON DEL SP MATCHEE.
|
|
LET moviD.area = 1
|
|
LET moviD.descripcion = descripcion_f
|
|
LET moviD.id_bodega = datos_gen.bodega
|
|
LET moviD.cod_mov = movi[p_act].cod_mov
|
|
LET moviD.cantidad1 =
|
|
movi[p_act].cantidad_1 / moviD.factor_conv
|
|
#LET moviD.cantidad2 = movi[p_act].cantidad_2
|
|
LET scodigo =
|
|
1 USING "<<<",
|
|
"-",
|
|
movi[p_act].cod_n USING "<<<<",
|
|
"-",
|
|
movi[p_act].cod_grupo USING "<<<<<",
|
|
"-",
|
|
movi[p_act].cod_tipo USING "<<<<<<",
|
|
"-",
|
|
movi[p_act].cod_sec USING "<<<<<<",
|
|
"-"
|
|
LET idx = movi10Dest.search("codigo", scodigo)
|
|
#CALL movi10Dest.deleteElement(idx)
|
|
|
|
CALL insertaUbicacion(
|
|
moviD.*, tmpnumero)
|
|
RETURNING container,
|
|
movi[p_act].cantidad_2,
|
|
tmpnumero,
|
|
movi10
|
|
|
|
# SI EL USUARIO SALIO DE LA VENTANA DE UBICACION SIN GUARDAR
|
|
# (ESC/int_flag), movi10 REGRESA VACIO: NO CONTINUAR COMO SI
|
|
# EL ITEM TUVIERA UBICACION.
|
|
IF movi10.getLength() = 0 THEN
|
|
LET numero_msg = 1668
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sec
|
|
END IF
|
|
|
|
# ELIMINAR LAS UBICACIONES ANTERIORES DE ESTE ITEM ANTES DE
|
|
# AGREGAR LAS NUEVAS, PARA NO DUPLICAR EN movi10Dest.
|
|
CALL eliminaUbicacionesItem(
|
|
movi[p_act].cod_n,
|
|
movi[p_act].cod_grupo,
|
|
movi[p_act].cod_tipo,
|
|
movi[p_act].cod_sec)
|
|
|
|
CALL adicionaArray()
|
|
LET att[p_act].col6 = 'green reverse'
|
|
|
|
END IF
|
|
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
|
|
|
|
CALL verificaCodigo() RETURNING verdad1
|
|
|
|
IF movi[p_act].desglose = 'S' THEN
|
|
LET xcod_mov = movi[p_act].cod_mov
|
|
CALL fotos(
|
|
movi[p_act].cod_n,
|
|
movi[p_act].cod_grupo,
|
|
movi[p_act].cod_tipo,
|
|
movi[p_act].cod_sec,
|
|
movi[p_act].descrip_esp,
|
|
USUARIOS,
|
|
TRUE,
|
|
movi[p_act].cantidad_2,
|
|
tmpnumero,
|
|
movid.cod_mov,
|
|
datos_gen.bodega,
|
|
estado_mov)
|
|
RETURNING xcantidad2, xcantidad1
|
|
|
|
IF xcantidad2 > 0 THEN
|
|
LET movi[p_act].cantidad_2 = xcantidad2
|
|
END IF
|
|
# IF xcantidad1 > 0 THEN
|
|
# LET movi[p_act].cantidad_1=xcantidad1
|
|
# END IF
|
|
|
|
IF movi[p_act].cantidad_2 <> xcantidad2 THEN
|
|
CALL msg(46)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END IF
|
|
|
|
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 ISNULL(SUM(cantidad_2), 0)
|
|
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 --4.536
|
|
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
|
|
DISPLAY "Recibida: ", recibida
|
|
DISPLAY "Cantidad devuelta?:",
|
|
(movi[p_act].cantidad_1 * 1.10)
|
|
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"
|
|
|
|
# Mismo calculo que en salvarData: la secuencia se
|
|
# ancla al maximo real usado y NUNCA retrocede.
|
|
LET datos_gen.num_doc =
|
|
proximaSecuenciaIP(movi[p_act].cod_mov, datos_gen.bodega)
|
|
|
|
LET ip_ultimo = datos_gen.num_doc
|
|
LET documento[p_act] = datos_gen.num_doc
|
|
|
|
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
|
|
|
|
ON ACTION guardar ATTRIBUTE(TEXT = "Salvar", IMAGE = "save")
|
|
CALL salvarData() RETURNING numero_msg, verdad1
|
|
IF NOT verdad1 THEN
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
END INPUT
|
|
ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancelar", IMAGE = "quick")
|
|
|
|
DELETE FROM tmpdesglose_master
|
|
WHERE num_Doc = tmpnumero
|
|
AND cod_mov = xcod_mov
|
|
AND us_crea = usuarios
|
|
DELETE FROM tmpdesglose
|
|
WHERE num_Doc = tmpnumero
|
|
AND cod_mov = xcod_mov
|
|
AND us_crea = usuarios
|
|
|
|
EXIT PROGRAM
|
|
END DIALOG
|
|
# Actualiza la tabla de ordenes para cerrarla si la variable cerrada = "S"
|
|
|
|
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 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,
|
|
tipo_recepcion_entrada TINYINT,
|
|
num_cont INT,
|
|
fech_recep_carga DATE,
|
|
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 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),
|
|
desglose CHAR(1),
|
|
descrip_esp VARCHAR(180)
|
|
|
|
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
|
|
#--------------------------- DESGLOSE ------------------------------------------
|
|
# IMPRESION DESGLOSE
|
|
SELECT DISTINCT a.num_doc
|
|
FROM iptb00052 a
|
|
WHERE a.num_doc = datos_gen.num_doc AND a.cod_mov = z.cod_mov
|
|
IF STATUS <> NOTFOUND THEN
|
|
PRINT COLUMN 10,
|
|
"------------------------------------- DESGLOSE -----------------------------------"
|
|
DECLARE busca_desglose CURSOR FOR
|
|
SELECT a.lado_1,
|
|
a.lado_2,
|
|
a.lado_3,
|
|
a.cantidad,
|
|
a.cantidad2,
|
|
a.tono,
|
|
a.calidad,
|
|
b.descripcion,
|
|
c.descripcion
|
|
FROM iptb00050 a, intb00010 b, intb00043 c
|
|
WHERE a.cod_n = z.cod_n
|
|
AND a.cod_grupo = z.cod_grupo
|
|
AND a.cod_tipo = z.cod_tipo
|
|
AND a.cod_sec = z.cod_sec
|
|
AND a.num_doc = datos_gen.num_doc
|
|
AND a.cod_mov = z.cod_mov
|
|
AND a.cod_seccion = b.cod_seccion
|
|
AND a.cod_bodega = x.bodega
|
|
AND a.cod_bodega = b.cod_bodega
|
|
AND a.cod_seccion = b.cod_seccion
|
|
AND a.cod_tramo = c.cod_tramo
|
|
AND b.cod_seccion = c.cod_seccion
|
|
AND b.cod_bodega = c.cod_bodega
|
|
|
|
LET i = 1
|
|
FOREACH busca_desglose
|
|
INTO kdatos[i].lado_1,
|
|
kdatos[i].lado_2,
|
|
kdatos[i].lado_3,
|
|
kdatos[i].cantidad,
|
|
kdatos[i].cantidad2,
|
|
kdatos[i].tono,
|
|
kdatos[i].calidad
|
|
PRINT COLUMN 10,
|
|
kdatos[i].lado_1,
|
|
2 SPACES,
|
|
kdatos[i].lado_2,
|
|
2 SPACES,
|
|
kdatos[i].lado_3,
|
|
2 SPACES,
|
|
kdatos[i].cantidad,
|
|
2 SPACES,
|
|
kdatos[i].cantidad2,
|
|
2 SPACES,
|
|
kdatos[i].tono,
|
|
2 SPACES,
|
|
kdatos[i].calidad
|
|
END FOREACH
|
|
PRINT COLUMN 10,
|
|
"----------------------------------------------------------------------------------"
|
|
END IF
|
|
PAGE TRAILER
|
|
PRINT normal
|
|
PRINT COLUMN 1, "OBSERVACION :"
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------------------------------"
|
|
PRINT
|
|
|
|
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
|
|
|
|
# El ON (columnas) y el FROM (campos del formulario) deben tener la MISMA
|
|
# cantidad y estar pareados 1:1. Cada campo del FROM debe existir en
|
|
# alfmmt006.4fd. Se excluyen: cod_mov (solo esta en el detalle s_movi1) y
|
|
# cod_sp/cod_sp_sec (NOENTRY en el formulario). Antes fallaba porque
|
|
# 'fecha_contenedor_guia' no existe y ON(8)/FROM(9) estaban desbalanceados.
|
|
CONSTRUCT criterio
|
|
ON
|
|
a.num_doc,
|
|
a.orden_compra,
|
|
a.conduce_no,
|
|
a.fact_no,
|
|
a.tipo_recepcion_entrada,
|
|
a.num_contenedor_guia
|
|
FROM
|
|
num_Doc,
|
|
orden_compra,
|
|
conduce_no,
|
|
fact_no,
|
|
tipo_recepcion_entrada,
|
|
num_cont
|
|
BEFORE CONSTRUCT
|
|
CALL bodegas('1')
|
|
CALL tipoorden()
|
|
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, a.tipo_recepcion_entrada, ",
|
|
" a.num_contenedor_guia, a.fecha_recepcion_carga ",
|
|
" 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, a.tipo_recepcion_entrada, ",
|
|
" a.num_contenedor_guia, a.fecha_recepcion_carga ",
|
|
" 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"
|
|
DISPLAY SELEC
|
|
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 a.tipo_recepcion_entrada, ",
|
|
" a.num_contenedor_guia, a.fecha_recepcion_carga ",
|
|
" 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,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada
|
|
|
|
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,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada
|
|
|
|
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,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada
|
|
|
|
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,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada
|
|
|
|
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,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada
|
|
|
|
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
|
|
FUNCTION adicionaArray()
|
|
DEFINE x1, current_length INT
|
|
|
|
LET current_length = movi10Dest.getLength()
|
|
|
|
FOR x1 = 1 TO movi10.getLength()
|
|
|
|
IF movi10[x1].cantidad2 > 0 THEN
|
|
# IF movi10[idx].id_seccion1 IS NOT NULL THEN
|
|
LET current_length = current_length + 1
|
|
LET movi10Dest[current_length].* = movi10[x1].*
|
|
|
|
# END IF
|
|
END IF
|
|
END FOR
|
|
|
|
END FUNCTION
|
|
|
|
{ELIMINA DE movi10Dest TODAS LAS UBICACIONES DE UN ITEM. SE USA ANTES DE
|
|
adicionaArray() PARA QUE UNA RECAPTURA DE UBICACION NO DUPLIQUE FILAS.
|
|
EN ESTE PROGRAMA EL AREA ES SIEMPRE 1, POR LO QUE NO SE FILTRA POR AREA.}
|
|
FUNCTION eliminaUbicacionesItem(pcod_n, pcod_grupo, pcod_tipo, pcod_sec)
|
|
|
|
DEFINE pcod_n, pcod_grupo, pcod_tipo, pcod_sec, x INTEGER
|
|
|
|
FOR x = movi10Dest.getLength() TO 1 STEP -1
|
|
|
|
IF movi10Dest[x].cod_n = pcod_n
|
|
AND movi10Dest[x].cod_grupo = pcod_grupo
|
|
AND movi10Dest[x].cod_tipo = pcod_tipo
|
|
AND movi10Dest[x].cod_sec = pcod_sec THEN
|
|
|
|
CALL movi10Dest.deleteElement(x)
|
|
|
|
END IF
|
|
|
|
END FOR
|
|
|
|
END FUNCTION
|
|
FUNCTION addUbicacion()
|
|
|
|
DEFINE flag BOOLEAN
|
|
LET flag = TRUE
|
|
|
|
FOR x2 = 1 TO movi10Dest.getLength()
|
|
|
|
IF movi10Dest[x2].cantidad2 > 0 THEN
|
|
|
|
IF movi10Dest[x2].id_seccion1 IS NOT NULL
|
|
AND movi10Dest[x2].cod_n IS NOT NULL
|
|
AND movi10Dest[x2].cod_Grupo IS NOT NULL
|
|
AND movi10Dest[x2].cod_tipo IS NOT NULL
|
|
AND movi10Dest[x2].cod_sec THEN
|
|
INSERT INTO iptb00062(
|
|
num_Doc,
|
|
cod_mov,
|
|
bodega,
|
|
cod_seccion,
|
|
cod_tramo,
|
|
cod_fila,
|
|
cod_pos,
|
|
area,
|
|
cod_n,
|
|
cod_grupo,
|
|
cod_tipo,
|
|
cod_sec,
|
|
cantidad,
|
|
cantidad2,
|
|
us_crea,
|
|
fech_crea)
|
|
VALUES(datos_gen.num_doc,
|
|
movi[x2].cod_mov,
|
|
datos_gen.bodega,
|
|
movi10Dest[x2].id_seccion1,
|
|
movi10Dest[x2].id_tramo1,
|
|
movi10Dest[x2].id_fila,
|
|
movi10Dest[x2].id_pos,
|
|
movi10Dest[x2].area,
|
|
movi10Dest[x2].cod_n,
|
|
movi10Dest[x2].cod_Grupo,
|
|
movi10Dest[x2].cod_tipo,
|
|
movi10Dest[x2].cod_sec,
|
|
movi10Dest[x2].cantidad1,
|
|
movi10Dest[x2].cantidad2,
|
|
usuarios,
|
|
getdate())
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(-1321)
|
|
LET flag = FALSE
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
END FUNCTION
|
|
FUNCTION verificaCodigo()
|
|
DEFINE verdad BOOLEAN
|
|
|
|
LET verdad = FALSE
|
|
FOR i = 1 TO movi.getLength()
|
|
LET att[i].col6 = 'red reverse'
|
|
IF movi[i].cantidad_2 > 0 THEN
|
|
|
|
FOR idx1 = 1 TO movi10Dest.getLength()
|
|
|
|
IF movi10Dest[idx1].cod_n = movi[i].cod_n
|
|
AND movi10Dest[idx1].cod_grupo = movi[i].cod_grupo
|
|
AND movi10Dest[idx1].cod_tipo = movi[i].cod_tipo
|
|
AND movi10Dest[idx1].cod_sec = movi[i].cod_sec THEN
|
|
|
|
LET att[i].col6 = 'green reverse'
|
|
LET verdad = TRUE
|
|
# ELSE
|
|
# DISPLAY "codigos: ",idx1,"-",movi10Dest[idx1].cod_grupo,"-",movi10Dest[idx1].cod_sec," NO LO ENCONTRE"
|
|
# LET att[idx].col6 = 'red reverse'
|
|
# LET verdad = FALSE
|
|
END IF
|
|
|
|
END FOR
|
|
END IF
|
|
END FOR
|
|
RETURN verdad
|
|
END FUNCTION
|
|
FUNCTION verificarUbicacion()
|
|
FOR idx1 = 1 TO movi.getLength()
|
|
IF movi[idx1].cantidad_2 = 0 OR movi[idx1].cantidad_1 IS NULL THEN
|
|
DISPLAY "borre: ", movi10dest[idx1].descripcion
|
|
CALL movi10dest.deleteElement(idx1)
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
|
|
FUNCTION salvarData()
|
|
|
|
DEFINE
|
|
jsonUbic DYNAMIC ARRAY OF RECORD
|
|
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
|
|
id_bodega, id_seccion1 INT,
|
|
id_tramo1 INT,
|
|
id_fila, id_pos INT,
|
|
cantidad1, cantidad2 DECIMAL(12, 5)
|
|
END RECORD,
|
|
jsonMovi STRING,
|
|
procedimiento STRING,
|
|
updExtra STRING,
|
|
out_result INT,
|
|
cod_mensaje INT,
|
|
out_cantidad_item DECIMAL(18, 5),
|
|
out_cantidad_ubicacion DECIMAL(18, 5),
|
|
out_msg VARCHAR(1000),
|
|
idxU, idxJSON INT,
|
|
detalle_re CHAR(60),
|
|
cherror STRING,
|
|
areaFija SMALLINT,
|
|
pcontrol_dep CHAR(5),
|
|
controlaCosto CHAR(2),
|
|
nullInt INT,
|
|
nullChar CHAR(10),
|
|
nullDec DECIMAL(18, 5)
|
|
|
|
INITIALIZE nullInt TO NULL
|
|
INITIALIZE nullChar TO NULL
|
|
INITIALIZE nullDec TO NULL
|
|
LET areaFija = 1
|
|
LET pcontrol_dep = "NO"
|
|
# EL REPORTE DE ENTRADA RECEPCIONA ORDENES DE COMPRA: ES NORMAL QUE
|
|
# EXISTAN ITEMS SIN COSTO DEFINIDO TODAVIA, POR LO QUE EL SP NO DEBE
|
|
# RECHAZARLOS (PARAMETRO OPCIONAL @controla_costo = 'NO').
|
|
LET controlaCosto = "NO"
|
|
|
|
LET total_cantidad = 0
|
|
|
|
FOR idx = 1 TO movi.getLength()
|
|
|
|
IF movi[idx].cantidad_2 IS NOT NULL THEN
|
|
DISPLAY "EN GUARDAR_3: ", movi[idx].*
|
|
LET total_cantidad = movi[idx].cantidad_2 + total_cantidad
|
|
END IF
|
|
|
|
END FOR
|
|
|
|
LET recibida = 0
|
|
LET ordenada = 0
|
|
DISPLAY "TOTAL CANTIDAD: ", total_cantidad
|
|
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
|
|
|
|
# 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
|
|
# SECUENCIA POR (cod_mov, bodega). Se ancla al maximo real usado en
|
|
# iptb00006 (fuente de verdad) para que NUNCA retroceda aunque la fila
|
|
# de iptb00007 quede en un valor menor. Ver FUNCTION proximaSecuenciaIP.
|
|
LET datos_gen.num_doc = proximaSecuenciaIP(xcod_mov, datos_gen.bodega)
|
|
|
|
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
|
|
INSERT INTO iptb00007(
|
|
num_doc, cod_mov, bodega, us_crea, fech_crea)
|
|
VALUES(datos_gen.num_doc,
|
|
xcod_mov,
|
|
datos_gen.bodega,
|
|
usuarios,
|
|
GETDATE())
|
|
ELSE
|
|
# Guarda anti-retroceso: solo se actualiza si el nuevo numero es
|
|
# mayor al almacenado, para no pisar la secuencia hacia atras.
|
|
UPDATE iptb00007
|
|
SET num_doc = datos_gen.num_doc
|
|
WHERE cod_mov = xcod_mov AND bodega = datos_gen.bodega
|
|
AND num_doc < datos_gen.num_doc
|
|
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"
|
|
|
|
# PREPARACION SP DE INVENTARIO (iptb00006 + iptb00062 EN UNA SOLA
|
|
# OPERACION VALIDADA) PARA PRODUCTOS TERMINADOS (TIPO 02).
|
|
LET procedimiento =
|
|
"EXEC sp_insert_inventario ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
|
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"
|
|
PREPARE smt_re FROM procedimiento
|
|
|
|
# EL SP NO MANEJA LAS COLUMNAS PROPIAS DE LA RECEPCION DE COMPRAS:
|
|
# SE COMPLEMENTAN CON UN UPDATE SOBRE LA FILA RECIEN INSERTADA.
|
|
LET updExtra =
|
|
"UPDATE iptb00006 SET orden_compra = ?, tipo = ?, ",
|
|
"fact_no = ?, ",
|
|
"tipo_recepcion_entrada = ?, num_contenedor_guia = ?, ",
|
|
"fecha_recepcion_carga = ? ",
|
|
"WHERE num_doc = ? AND cod_mov = ? AND bodega = ? ",
|
|
"AND cod_n = ? AND cod_grupo = ? AND cod_tipo = ? AND cod_sec = ? ",
|
|
"AND us_crea = ? AND status_t IS NULL"
|
|
PREPARE updcompra FROM updExtra
|
|
|
|
LET detalle_re =
|
|
"REPORTE DE ENTRADA OC ", datos_gen.orden_compra USING "<<<<<<&"
|
|
|
|
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
|
|
RETURN numero_msg, FALSE
|
|
END IF
|
|
TRY
|
|
UPDATE intb00023
|
|
SET num_doc = DATOS_GEN.num_doc
|
|
WHERE cod_mov = xcod_mov
|
|
CATCH
|
|
RETURN 1663, FALSE
|
|
END TRY
|
|
END IF
|
|
|
|
FOR idx = 1 TO movi.getLength()
|
|
|
|
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,
|
|
tipo_recepcion_entrada,
|
|
num_contenedor_guia,
|
|
fecha_recepcion_carga,
|
|
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,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada,
|
|
usuarios,
|
|
GETDATE())
|
|
END IF
|
|
|
|
# Actualizacion de las tablas de Productos terminados
|
|
IF datos_gen.tipo = "02" THEN
|
|
DISPLAY "EN GUARDAR_4: ", movi[idx].*
|
|
|
|
{=========================================================
|
|
ARMAR EL JSON CON LAS UBICACIONES DEL ITEM DESDE
|
|
movi10Dest (CAPTURADAS EN insertaUbicacion O GENERADAS
|
|
POR LA RECEPCION TOTAL). EL SP INSERTA iptb00006 E
|
|
iptb00062 EN LA MISMA EJECUCION Y VALIDA CANTIDADES.
|
|
=========================================================}
|
|
CALL jsonUbic.clear()
|
|
LET idxJSON = 0
|
|
|
|
FOR idxU = 1 TO movi10Dest.getLength()
|
|
IF movi10Dest[idxU].cod_n = movi[idx].cod_n
|
|
AND movi10Dest[idxU].cod_grupo = movi[idx].cod_grupo
|
|
AND movi10Dest[idxU].cod_tipo = movi[idx].cod_tipo
|
|
AND movi10Dest[idxU].cod_sec = movi[idx].cod_sec
|
|
AND movi10Dest[idxU].cantidad2 > 0 THEN
|
|
|
|
LET idxJSON = idxJSON + 1
|
|
LET jsonUbic[idxJSON].area = 1
|
|
LET jsonUbic[idxJSON].cod_n = movi10Dest[idxU].cod_n
|
|
LET jsonUbic[idxJSON].cod_Grupo =
|
|
movi10Dest[idxU].cod_grupo
|
|
LET jsonUbic[idxJSON].cod_tipo =
|
|
movi10Dest[idxU].cod_tipo
|
|
LET jsonUbic[idxJSON].cod_sec = movi10Dest[idxU].cod_sec
|
|
LET jsonUbic[idxJSON].id_bodega = datos_gen.bodega
|
|
LET jsonUbic[idxJSON].id_seccion1 =
|
|
movi10Dest[idxU].id_seccion1
|
|
LET jsonUbic[idxJSON].id_tramo1 =
|
|
movi10Dest[idxU].id_tramo1
|
|
LET jsonUbic[idxJSON].id_fila = movi10Dest[idxU].id_fila
|
|
LET jsonUbic[idxJSON].id_pos = movi10Dest[idxU].id_pos
|
|
LET jsonUbic[idxJSON].cantidad1 =
|
|
movi10Dest[idxU].cantidad1
|
|
LET jsonUbic[idxJSON].cantidad2 =
|
|
movi10Dest[idxU].cantidad2
|
|
END IF
|
|
END FOR
|
|
|
|
IF idxJSON = 0 THEN
|
|
DISPLAY "SIN UBICACION PARA ITEM: ",
|
|
movi[idx].cod_n,
|
|
"-",
|
|
movi[idx].cod_grupo,
|
|
"-",
|
|
movi[idx].cod_tipo,
|
|
"-",
|
|
movi[idx].cod_sec
|
|
ROLLBACK WORK
|
|
LET numero_msg = 1668
|
|
RETURN numero_msg, FALSE
|
|
END IF
|
|
|
|
LET jsonMovi = util.JSON.stringify(jsonUbic)
|
|
DISPLAY "JSON ITEM: ", jsonMovi
|
|
|
|
INITIALIZE out_result TO NULL
|
|
INITIALIZE cod_mensaje TO NULL
|
|
INITIALIZE out_msg TO NULL
|
|
|
|
EXECUTE smt_re
|
|
USING nullInt IN, # num_oc: NULL, LA ORDEN DE COMPRA
|
|
# NO ES ORDEN DE PRODUCCION (prtb00013);
|
|
# SE GRABA EN orden_compra VIA updcompra
|
|
movi[idx].cod_n IN,
|
|
movi[idx].cod_grupo IN,
|
|
movi[idx].cod_tipo IN,
|
|
movi[idx].cod_sec IN,
|
|
areaFija IN, # area
|
|
movi[idx].cantidad_1 IN,
|
|
movi[idx].cantidad_2 IN,
|
|
movi[idx].cod_mov IN,
|
|
datos_gen.num_doc IN, # num_doc YA GENERADO ARRIBA
|
|
tmpnumero IN,
|
|
nullInt IN, # entrada
|
|
datos_gen.fecha IN,
|
|
datos_gen.conduce_no IN,
|
|
datos_gen.cod_sp IN,
|
|
datos_gen.cod_sp_sec IN,
|
|
nullInt IN, # codtransp
|
|
nullInt IN, # sectransp
|
|
nullChar IN, # placa
|
|
detalle_re IN, # detalle
|
|
datos_gen.bodega IN,
|
|
cerrada IN, # pcerrada
|
|
usuarios IN,
|
|
nullInt IN, # numreq
|
|
nullChar IN, # codigobloque
|
|
nullInt IN, # secvend
|
|
nullChar IN, # direccion
|
|
nullInt IN, # bodega_d
|
|
nullInt IN, # num_doc_retrabajo
|
|
nullChar IN, # aplicaDev
|
|
nullInt IN, # departamento
|
|
pcontrol_dep IN, # pcontrol_depto
|
|
nullInt IN, # factura (numerico); el fact_no
|
|
# alfanumerico se graba en iptb00006.fact_no via updcompra
|
|
nullInt IN, # numero_doc
|
|
nullDec IN, # costo (EL SP LO BUSCA)
|
|
nullInt IN, # cod_mov_transferencia
|
|
nullInt IN, # num_doc_transferencia
|
|
nullInt IN, # bodega_procedencia
|
|
jsonMovi IN,
|
|
out_result OUT,
|
|
cod_mensaje OUT,
|
|
out_cantidad_item OUT,
|
|
out_cantidad_ubicacion OUT,
|
|
out_msg OUT,
|
|
controlaCosto IN # @controla_costo = 'NO'
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
LET cherror =
|
|
"Error SQL sp_insert_inventario ",
|
|
SQLCA.sqlerrd[2],
|
|
SQLERRMESSAGE
|
|
CALL fgl_winmessage("ERROR", cherror, "stop")
|
|
RETURN 16, FALSE
|
|
END IF
|
|
|
|
IF out_result <> 0 THEN
|
|
DISPLAY "============================================"
|
|
DISPLAY "ERROR sp_insert_inventario (REPORTE ENTRADA)"
|
|
DISPLAY "ITEM: ",
|
|
movi[idx].cod_n,
|
|
"-",
|
|
movi[idx].cod_grupo,
|
|
"-",
|
|
movi[idx].cod_tipo,
|
|
"-",
|
|
movi[idx].cod_sec
|
|
DISPLAY "DOCUMENTO: ",
|
|
datos_gen.num_doc,
|
|
" MOVIMIENTO: ",
|
|
movi[idx].cod_mov,
|
|
" BODEGA: ",
|
|
datos_gen.bodega
|
|
DISPLAY "COD_MENSAJE: ", cod_mensaje
|
|
DISPLAY "OUT_MSG: ", out_msg
|
|
DISPLAY "JSON: ", jsonMovi
|
|
DISPLAY "============================================"
|
|
ROLLBACK WORK
|
|
LET cherror =
|
|
"ITEM ",
|
|
movi[idx].cod_n USING "<<<&",
|
|
"-",
|
|
movi[idx].cod_grupo USING "<<<<&",
|
|
"-",
|
|
movi[idx].cod_tipo USING "<<<<&",
|
|
"-",
|
|
movi[idx].cod_sec USING "<<<<&",
|
|
": ",
|
|
out_msg CLIPPED
|
|
CALL fgl_winmessage("ERROR", cherror, "stop")
|
|
IF cod_mensaje IS NULL THEN
|
|
LET cod_mensaje = 16
|
|
END IF
|
|
RETURN cod_mensaje, FALSE
|
|
END IF
|
|
|
|
# COMPLEMENTO: COLUMNAS DE LA RECEPCION DE COMPRAS QUE
|
|
# EL SP NO MANEJA (orden_compra, tipo, recepcion, etc.)
|
|
EXECUTE updcompra
|
|
USING datos_gen.orden_compra,
|
|
datos_gen.tipo,
|
|
datos_gen.fact_no,
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada,
|
|
datos_gen.num_doc,
|
|
movi[idx].cod_mov,
|
|
datos_gen.bodega,
|
|
movi[idx].cod_n,
|
|
movi[idx].cod_grupo,
|
|
movi[idx].cod_tipo,
|
|
movi[idx].cod_sec,
|
|
usuarios
|
|
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
LET cherror =
|
|
"Error actualizando datos de compra ",
|
|
SQLCA.sqlerrd[2],
|
|
SQLERRMESSAGE
|
|
CALL fgl_winmessage("ERROR", cherror, "stop")
|
|
RETURN 16, FALSE
|
|
END IF
|
|
|
|
LET xcod_mov = movi[idx].cod_mov
|
|
|
|
IF movi[idx].desglose = 'S' THEN
|
|
# TRANSACCIONES DESGLOSE DE LOS PRODUCTOS
|
|
|
|
EXECUTE inst1
|
|
USING datos_Gen.num_doc,
|
|
tmpnumero,
|
|
xcod_mov,
|
|
usuarios,
|
|
movi[idx].cod_n,
|
|
movi[idx].cod_grupo,
|
|
movi[idx].cod_tipo,
|
|
movi[idx].cod_sec
|
|
|
|
EXECUTE inst2
|
|
USING datos_Gen.num_doc,
|
|
tmpnumero,
|
|
xcod_mov,
|
|
usuarios,
|
|
movi[idx].cod_n,
|
|
movi[idx].cod_grupo,
|
|
movi[idx].cod_tipo,
|
|
movi[idx].cod_sec
|
|
|
|
DELETE FROM tmpdesglose_master
|
|
WHERE num_Doc = tmpnumero
|
|
AND cod_mov = xcod_mov
|
|
AND 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
|
|
DELETE FROM tmpdesglose
|
|
WHERE num_Doc = tmpnumero
|
|
AND cod_mov = xcod_mov
|
|
AND 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
|
|
|
|
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,
|
|
tipo_recepcion_entrada,
|
|
num_contenedor_guia,
|
|
fecha_recepcion_carga)
|
|
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(),
|
|
datos_gen.tipo_recepcion_entrada,
|
|
datos_gen.num_cont,
|
|
datos_gen.fecha_recepcion_entrada)
|
|
END IF
|
|
|
|
OUTPUT TO REPORT entrada_imp(datos_Gen.*, movi[idx].*)
|
|
|
|
END IF
|
|
END FOR
|
|
{LAS UBICACIONES (iptb00062) LAS INSERTA sp_insert_inventario JUNTO
|
|
CON iptb00006; YA NO SE USA addUbicacion() PARA EL TIPO 02.}
|
|
COMMIT WORK
|
|
FINISH REPORT entrada_imp
|
|
|
|
RUN imprime
|
|
|
|
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()
|
|
CALL movi10Dest.clear()
|
|
LET numero_msg = 1
|
|
|
|
RETURN numero_msg, TRUE
|
|
|
|
END FUNCTION
|
|
|
|
{
|
|
-------------------------------------------------------------------------
|
|
FUNCION : tipoorden() (LOCAL a alprmt006)
|
|
OBJETIVO : Llenar el combobox "tipo_recepcion_entrada" con los tipos de
|
|
recepcion definidos en la tabla tipo_recepcion_entrada.
|
|
NOTA : Se define LOCAL en este programa (no en la libreria compartida)
|
|
porque la tipoorden() de la libreria llena otro combo
|
|
(formonly.tipo, tipo de orden) y es usada por otros programas.
|
|
-------------------------------------------------------------------------
|
|
}
|
|
FUNCTION tipoorden()
|
|
DEFINE
|
|
ketiquetas SMALLINT,
|
|
detiquetas CHAR(30),
|
|
crecepcion ui.ComboBox
|
|
|
|
LET crecepcion = ui.combobox.forname("formonly.tipo_recepcion_entrada")
|
|
CALL crecepcion.clear()
|
|
|
|
DECLARE brecepcion CURSOR FOR
|
|
SELECT a.cod_recepcion, a.descrip_recepcion
|
|
FROM tipo_recepcion_entrada a
|
|
ORDER BY a.cod_recepcion
|
|
|
|
FOREACH brecepcion INTO ketiquetas, detiquetas
|
|
CALL crecepcion.additem(ketiquetas, detiquetas)
|
|
END FOREACH
|
|
|
|
END FUNCTION
|
|
|
|
{
|
|
-------------------------------------------------------------------------
|
|
FUNCION : proximaSecuenciaIP(pcod_mov, pbodega)
|
|
OBJETIVO : Devuelve el proximo num_doc para un movimiento de productos
|
|
terminados (tabla iptb00007), respetando que la secuencia es
|
|
por (cod_mov, bodega).
|
|
CLAVE : La secuencia se ancla al MAXIMO REAL ya usado en iptb00006
|
|
(fuente de verdad). Si por cualquier motivo la fila de
|
|
iptb00007 quedo en un valor MENOR (corrupcion / retroceso),
|
|
se reconcilia hacia arriba, de modo que el numero devuelto
|
|
NUNCA retrocede ni choca con un documento existente.
|
|
-------------------------------------------------------------------------
|
|
}
|
|
FUNCTION proximaSecuenciaIP(pcod_mov, pbodega)
|
|
DEFINE pcod_mov INT
|
|
DEFINE pbodega INT
|
|
DEFINE v_ult INT # valor guardado en el contador iptb00007
|
|
DEFINE v_real INT # maximo num_doc realmente usado en iptb00006
|
|
|
|
LET v_ult = NULL
|
|
SELECT a.num_doc
|
|
INTO v_ult
|
|
FROM iptb00007 a
|
|
WHERE a.cod_mov = pcod_mov AND a.bodega = pbodega
|
|
|
|
IF v_ult IS NULL THEN
|
|
LET v_ult = 0
|
|
END IF
|
|
|
|
SELECT ISNULL(MAX(num_doc), 0)
|
|
INTO v_real
|
|
FROM iptb00006
|
|
WHERE cod_mov = pcod_mov AND bodega = pbodega
|
|
|
|
IF v_real IS NULL THEN
|
|
LET v_real = 0
|
|
END IF
|
|
|
|
# La secuencia nunca puede ser menor que el maximo real ya emitido.
|
|
IF v_ult < v_real THEN
|
|
LET v_ult = v_real
|
|
END IF
|
|
|
|
RETURN v_ult + 1
|
|
END FUNCTION
|