3036 lines
113 KiB
Plaintext
3036 lines
113 KiB
Plaintext
{
|
|
--------------------------------------------------------------------------
|
|
PROGRAMA : IPPRMT044
|
|
OBJETIVO : Programa Captura Documento Otros Movimientos de
|
|
Inventario de Producto Terminados.
|
|
PROGRAMADOR : Juan Soto.
|
|
FECHA REALIZACION : AGOSTO 1997.
|
|
--------------------------------------------------------------------------
|
|
}
|
|
|
|
GLOBALS
|
|
"ipprgb000.4gl"
|
|
|
|
|
|
DEFINE ordenx,tmpnumero,tmpnueroExistencia INTEGER,
|
|
hacerdocumento BOOLEAN,
|
|
direccion_p VARCHAR(200),
|
|
sucid SMALLINT
|
|
|
|
DEFINE factor_conv DYNAMIC ARRAY OF DECIMAL(12,5),
|
|
cantidad_factura,cantidad_devuelta,total_medida,cantidad_orden,
|
|
cantidad_recibida,diferencia,cantidadRequisicion,Rcantidad_requisicion DEC(12,5)
|
|
DEFINE ac_cli,reimpresion,pcerrada CHAR(1),
|
|
pnum_req,xcotizacion INTEGER,
|
|
pcontrol_cliente CHAR(3),
|
|
pcontrol_despacho,pcontrol_transferencia,chconduce,control_devolucion CHAR(2),
|
|
procedimiento ,
|
|
PCCEMAIL,TOemail VARCHAR(100),
|
|
cuerpo_correo VARCHAR(150),
|
|
CCEmail,subject VARCHAR(100),
|
|
psec_vend INT,
|
|
almacen_destino,almacen_origen VARCHAR(40)
|
|
|
|
|
|
DEFINE prtb09 RECORD LIKE prtb00009.*
|
|
DEFINE busca_v RECORD
|
|
sec_cliente INTEGER,
|
|
nombre CHAR(30)
|
|
END RECORD
|
|
DEFINE despiece DYNAMIC ARRAY OF RECORD
|
|
etiqueta SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
lado_1 DEC(12,5),
|
|
lado_2 DEC(12,5),
|
|
lado_3 DEC(12,5),
|
|
cantidad DEC(12,5),
|
|
medida DEC(12,5),
|
|
secuencia,id_despiece INT,
|
|
bodega SMALLINT
|
|
END RECORD,
|
|
cantidad_conduce DEC(12,5)
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL STARTLOG("ipmt044.log")
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(3) RETURNING impresor
|
|
|
|
CONNECT to "decomarmol" USER usuarios USING clave
|
|
-- Se seleccionan los campos por nombre (no con *) para no depender del orden
|
|
-- de columnas de companias (causaba el error -1213 char->numeric).
|
|
SELECT nombre, direccion, rnc, telefono
|
|
INTO p_companias.nombre, p_companias.direccion, p_companias.rnc, p_companias.telefono
|
|
FROM companias
|
|
|
|
CALL ipprmt044()
|
|
END MAIN
|
|
|
|
FUNCTION busca_cliente()
|
|
LET int_flag = FALSE
|
|
|
|
OPEN WINDOW cliente AT 10,9 WITH FORM "ipfmwd009"
|
|
ATTRIBUTE(BORDER,FORM LINE FIRST + 2)
|
|
CONSTRUCT BY NAME criterio ON a.tipo_cliente,a.sec_cliente,a.nombre
|
|
|
|
LET selec = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre FROM vetb00004 a ",
|
|
"WHERE a.status_t IS NULL AND ",criterio CLIPPED, "ORDER BY 1,2"
|
|
|
|
PREPARE comando3 FROM selec
|
|
DECLARE comp3 CURSOR FOR comando3
|
|
|
|
LET idx = 1
|
|
FOREACH comp3 INTO clientes[idx].*
|
|
LET idx = idx + 1
|
|
IF idx = 49 THEN
|
|
EXIT FOREACH
|
|
END IF
|
|
END FOREACH
|
|
CALL SET_COUNT(idx - 1)
|
|
|
|
DISPLAY ARRAY clientes TO s_cliente.*
|
|
LET idx = ARR_CURR()
|
|
CLOSE WINDOW cliente
|
|
END FUNCTION
|
|
|
|
FUNCTION ipprmt044()
|
|
DEFINE fecha CHAR(8)
|
|
DEFINE hora CHAR(5)
|
|
|
|
CLEAR SCREEN
|
|
OPTIONS
|
|
ERROR LINE 24,
|
|
FORM LINE 4,
|
|
COMMENT LINE 24,
|
|
PROMPT LINE 24
|
|
LET fecha = today USING "dd/mm/yyyy"
|
|
LET hora = time
|
|
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
|
|
DISPLAY p_companias.nombre CLIPPED AT 1,lj
|
|
ATTRIBUTE (REVERSE,BLUE)
|
|
DISPLAY fecha AT 1,70 ATTRIBUTE (BLUE)
|
|
DISPLAY hora AT 2,73 ATTRIBUTE (BLUE)
|
|
DISPLAY "ipprmt044" AT 1,3 ATTRIBUTE (BLUE)
|
|
DISPLAY "Otros Movimientos" AT 2,30
|
|
DISPLAY "<Esc> Adiciona Registro" AT 3,2 ATTRIBUTE (BLUE,REVERSE)
|
|
DISPLAY "<Delete> Cancela Operacion" AT 3,54 ATTRIBUTE (BLUE,REVERSE)
|
|
OPEN FORM ipfmmt044 FROM "ipfmmt044"
|
|
DISPLAY FORM ipfmmt044
|
|
|
|
CALL ipprad44()
|
|
END FUNCTION
|
|
|
|
FUNCTION ipprad44()
|
|
DEFINE vexistencia,estado_req BOOLEAN
|
|
# WHENEVER ERROR CONTINUE
|
|
LET int_flag = FALSE
|
|
INITIALIZE otros_mov.* TO NULL
|
|
|
|
LABEL otra_vez:
|
|
LABEL vuelve:
|
|
IF (OPC = "S" OR OPC = "s") OR opc is null THEN
|
|
INITIALIZE otros_mov.* TO NULL
|
|
END IF
|
|
|
|
|
|
IF otros_mov.num_doc is null THEN
|
|
LET otros_mov.num_doc = 0
|
|
END IF
|
|
|
|
LET p_fechas = otros_mov.fecha USING "dd/mm/yyyy"
|
|
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
LET otros_mov.cod_cia = 1
|
|
# Busca numero temporal para control existencia
|
|
DELETE FROM iptbexistencia WHERE us_crea = usuarios
|
|
SELECT max(a.num_doc) INTO tmpnueroExistencia
|
|
FROM iptbexistencia a
|
|
|
|
IF tmpnueroExistencia IS NULL THEN
|
|
LET tmpnueroExistencia = 0
|
|
END IF
|
|
LET tmpnueroExistencia= tmpnueroExistencia + 1
|
|
|
|
UPDATE iptbexistencia SET num_doc = tmpnueroExistencia
|
|
|
|
INPUT BY NAME otros_mov.num_doc,
|
|
otros_mov.cod_cia,
|
|
otros_mov.cod_mov,
|
|
otros_mov.fact_no,
|
|
otros_mov.cod_transp,
|
|
otros_mov.sec_transp,
|
|
otros_mov.cod_tarifa,
|
|
otros_mov.placa,
|
|
otros_mov.fecha,
|
|
otros_mov.conduce_no,
|
|
otros_mov.bodega,
|
|
otros_mov.bodega_destino,
|
|
otros_mov.detalle,
|
|
otros_mov.cod_sp,
|
|
otros_mov.cod_sp_sec,
|
|
otros_mov.departamento,
|
|
otros_mov.nombre_depto,
|
|
otros_mov.cod_mov1,
|
|
otros_mov.entrada,
|
|
otros_mov.descrip_mov1,
|
|
otros_mov.descrip4,
|
|
pnum_req WITHOUT DEFAULTS
|
|
BEFORE INPUT
|
|
|
|
SELECT a.bodega,a.sucid INTO otros_mov.bodega,sucid
|
|
FROM seg0001 a
|
|
WHERE a.usuario = usuarios
|
|
|
|
LET k1 = '1'
|
|
|
|
CALL bodegas(k1)
|
|
DISPLAY BY NAME otros_mov.bodega
|
|
#CALL localidades('1') -- sucid no existe en el form (usa cod_cia); combo omitido
|
|
#DISPLAY BY NAME sucid
|
|
CALL cmovimientos() -- llena el combo "Codigo Movimiento" con los movimientos (iptb00005)
|
|
|
|
ON KEY (F2)
|
|
LET reimpresion = "S"
|
|
CALL consulta()
|
|
ON KEY(CONTROL-W)
|
|
IF INFIELD(cod_sp_sec) OR INFIELD(cod_sp) THEN
|
|
CALL busca_cliente()
|
|
LET otros_mov.cod_sp = clientes[idx].tipo_cliente
|
|
LET otros_mov.cod_sp_sec = clientes[idx].sec_cliente
|
|
LET otros_mov.descrip4 = clientes[idx].nombre
|
|
|
|
DISPLAY BY NAME otros_mov.cod_sp,
|
|
otros_mov.cod_sp_sec,
|
|
otros_mov.descrip4
|
|
EXIT INPUT
|
|
END IF
|
|
AFTER FIELD cod_cia
|
|
IF otros_mov.cod_cia IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_cia
|
|
END IF
|
|
|
|
IF otros_mov.cod_cia = 1 THEN
|
|
LET nombre_cia = p_companias.nombre
|
|
ELSE
|
|
LET nombre_cia = ""
|
|
END IF
|
|
DISPLAY BY NAME nombre_cia
|
|
|
|
AFTER FIELD fecha
|
|
IF otros_mov.fecha > TODAY THEN
|
|
LET numero_msg = 189
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
LET p_fechas = otros_mov.fecha using "dd/mm/yyyy"
|
|
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
LET otros_mov.fecha = p_fechas
|
|
DISPLAY BY NAME otros_mov.fecha
|
|
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
AFTER FIELD fact_no
|
|
LET otros_mov.cod_sp = null
|
|
LET otros_mov.cod_sp_sec = null
|
|
|
|
IF otros_mov.cod_mov = 12 or otros_mov.cod_mov = 13 OR otros_mov.cod_mov=43 THEN
|
|
IF otros_mov.fact_no is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fact_no
|
|
END IF
|
|
DISPLAY "numero factura ",otros_mov.fact_no
|
|
{ IF otros_mov.conduce_no IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce_no
|
|
END IF }
|
|
DISPLAY "numero factura1 ",otros_mov.fact_no
|
|
SELECT UNIQUE a.tipo_cliente,a.sec_cliente,a.nombre_cliente
|
|
INTO otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.descrip4
|
|
FROM vetb00002 a WHERE a.factura=otros_mov.fact_no and a.status_t is null AND
|
|
CONVERT(CHAR(10),a.fecha_factura,101) >= '01/01/2007'
|
|
DISPLAY "numero factura2 ",otros_mov.descrip4
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 102
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_cia
|
|
END IF
|
|
# CONTROL `
|
|
LET cantidad_factura = 0
|
|
LET cantidad_devuelta = 0
|
|
SELECT SUM(a.cantidad) INTO cantidad_factura
|
|
FROM vetb00003 a
|
|
WHERE a.factura = otros_mov.fact_no AND
|
|
a.status_t IS NULL AND
|
|
a.fech_crea > '2009-01-01 08:00'
|
|
|
|
SELECT SUM(a.cantidad_2) INTO cantidad_devuelta
|
|
FROM iptb00006 a
|
|
WHERE a.fact_no = otros_mov.fact_no AND
|
|
a.status_t IS NULL AND
|
|
a.fech_crea > '2009-01-01 08:00' and
|
|
a.cod_mov in (12,13)
|
|
|
|
IF cantidad_devuelta + .05 > cantidad_factura THEN
|
|
LET numero_msg =238
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fact_no
|
|
END IF
|
|
END IF
|
|
|
|
IF otros_mov.fact_no is not null THEN
|
|
IF otros_mov.cod_mov = 32 THEN
|
|
|
|
SELECT unique cod_n FROM iptb00006
|
|
WHERE fact_no = otros_mov.fact_no and cod_mov = otros_mov.cod_mov and
|
|
CONVERT(CHAR(10), fecha,101) >= "01011994" AND status_t is null
|
|
|
|
IF status != NOTFOUND THEN
|
|
LET numero_msg = 103
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fact_no
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec
|
|
|
|
AFTER FIELD cod_transp
|
|
# Transporte OPCIONAL en ORDEL: ya no se obliga a digitar el transportista.
|
|
|
|
AFTER FIELD sec_transp
|
|
# Transporte OPCIONAL: solo se busca/valida el nombre si se digito el
|
|
# transportista (cod_transp + sec_transp). Si se deja en blanco, no bloquea.
|
|
IF otros_mov.cod_transp IS NOT NULL AND otros_mov.sec_transp IS NOT NULL THEN
|
|
SELECT nombre INTO descrip2 FROM vetb00015
|
|
WHERE cod_transp=otros_mov.cod_transp and
|
|
sec_transp=otros_mov.sec_transp and
|
|
status_t is null
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_transp
|
|
END IF
|
|
DISPLAY BY NAME descrip2
|
|
END IF
|
|
AFTER FIELD cod_tarifa
|
|
IF otros_mov.cod_tarifa is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
# NEXT FIELD cod_tarifa
|
|
END IF
|
|
SELECT descrip INTO descrip1 FROM vetb00023
|
|
WHERE cod_tarifa = otros_mov.cod_tarifa and status_t is null
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
#NEXT FIELD cod_tarifa
|
|
END IF
|
|
DISPLAY BY NAME descrip1
|
|
|
|
|
|
BEFORE FIELD num_doc
|
|
# Solo se MUESTRA el proximo numero (tentativo). El correlativo (iptb00043)
|
|
# se avanza AL GUARDAR, no al entrar al campo, para que abrir a reimprimir
|
|
# (F2) o cancelar NO consuma un numero de la secuencia.
|
|
LET tmpnumero = 0
|
|
SELECT a.num_doc INTO tmpnumero FROM iptb00043 a
|
|
WHERE usuario = usuarios
|
|
IF STATUS = NOTFOUND THEN
|
|
LET tmpnumero = 0
|
|
END IF
|
|
LET otros_mov.num_doc = tmpnumero + 1
|
|
DISPLAY BY NAME otros_mov.num_doc
|
|
|
|
LET otros_mov.fecha = TODAY
|
|
DISPLAY BY NAME otros_mov.fecha
|
|
|
|
AFTER FIELD cod_mov
|
|
|
|
LET pcontrol_cliente = NULL
|
|
LET Pcontrol_transferencia = NULL
|
|
SELECT a.descrip_mov,a.status_mov,a.control_clientes,a.control_despacho,a.control_devolucion,
|
|
a.control_transferencia
|
|
INTO otros_mov.descrip_mov,status_m,pcontrol_cliente,pcontrol_despacho,control_devolucion,
|
|
Pcontrol_transferencia
|
|
FROM iptb00005 a WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t is null
|
|
|
|
IF status >= 0 THEN
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
ELSE
|
|
CALL integridad()
|
|
|
|
if bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
end if
|
|
END IF
|
|
IF pcontrol_transferencia = 'SI' THEN
|
|
LET k1 = '2'
|
|
ELSE
|
|
LET k1 = '1'
|
|
END IF
|
|
|
|
CALL bodegas(k1)
|
|
|
|
SELECT num_doc INTO otros_mov.num_doc FROM iptb00007
|
|
WHERE cod_mov = otros_mov.cod_mov AND
|
|
bodega = otros_mov.bodega
|
|
IF otros_mov.num_Doc IS NULL THEN
|
|
LET otros_mov.num_doc = 1
|
|
END IF
|
|
LET otros_mov.num_Doc = otros_mov.num_doc + 1
|
|
DISPLAY BY NAME otros_mov.num_doc
|
|
|
|
DISPLAY BY NAME otros_mov.bodega
|
|
{C0NTROL DESPACHO}
|
|
LET pnum_req = NULL
|
|
IF pcontrol_despacho = "SI" THEN
|
|
CALL visualizacion_despacho() RETURNING otros_mov.conduce_no,
|
|
otros_mov.cod_sp,
|
|
otros_mov.cod_sp_sec,
|
|
pnum_req
|
|
IF Int_flag THEN
|
|
LET int_flag = FALSE
|
|
CALL msg(2)
|
|
DELETE FROM iptbexistencia WHERE us_crea = usuarios
|
|
RETURN
|
|
END IF
|
|
|
|
LET ordenx = otros_mov.conduce_no
|
|
|
|
SELECT a.tipo_cliente,a.sec_cliente,a.cerrada,a.cotizacion_no
|
|
INTO otros_mov.cod_sp,otros_mov.cod_sp_sec,pcerrada,xcotizacion
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = otros_mov.conduce_no AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce_no
|
|
END IF
|
|
|
|
SELECT a.mensaje INTO direccion_p FROM cctb00029 a
|
|
WHERE a.num_req = pnum_req
|
|
|
|
DISPLAY BY NAME otros_mov.conduce_no,otros_mov.cod_sp,otros_mov.cod_sp_Sec,
|
|
pnum_req,direccion_p,psec_vend,xcotizacion
|
|
|
|
|
|
END IF
|
|
|
|
{ CHEQUEO DE PERMISOS PARA EL USUARIO
|
|
SELECT * FROM iptb00005 where cod_mov = otros_mov.cod_mov and
|
|
us_crea = user
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 139
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
}
|
|
IF otros_mov.cod_mov = 13 or
|
|
otros_mov.cod_mov = 12
|
|
THEN
|
|
NEXT FIELD fact_no
|
|
ELSE
|
|
NEXT FIELD cod_transp
|
|
END IF
|
|
AFTER FIELD bodega
|
|
IF otros_mov.bodega IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD bodega
|
|
|
|
END IF
|
|
SELECT UNIQUE a.usuario FROM iptb00048 a
|
|
WHERE a.bodega = otros_mov.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
|
|
# (era AFTER FIELD sucid, campo muerto; cod_cia ya tiene su propio AFTER FIELD arriba)
|
|
# IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov=13 THEN
|
|
# NEXT FIELD fact_no
|
|
# END IF
|
|
AFTER FIELD cod_mov1
|
|
IF otros_mov.entrada IS NOT NULL THEN
|
|
IF otros_mov.cod_mov IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD entrada
|
|
END IF
|
|
SELECT a.descrip_mov INTO otros_mov.descrip_mov1 FROM iptb00005 a
|
|
WHERE a.cod_mov = otros_mov.cod_mov1
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_mov1
|
|
END IF
|
|
DISPLAY BY NAME otros_mov.descrip_mov1
|
|
END IF
|
|
|
|
BEFORE FIELD conduce_no
|
|
IF pcontrol_despacho = "SI" THEN
|
|
IF otros_mov.bodega IS NULL THEN
|
|
LET otros_mov.bodega = 1
|
|
DISPLAY BY NAME otros_mov.bodega
|
|
END IF
|
|
|
|
SELECT UNIQUE a.cod_mov
|
|
FROM vetb00060 a
|
|
WHERE a.tipo_cliente = otros_mov.cod_sp and
|
|
a.cod_mov = otros_mov.cod_mov
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 386
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_mov
|
|
END IF
|
|
|
|
|
|
SELECT nombre INTO otros_mov.descrip4
|
|
FROM vetb00004
|
|
WHERE tipo_cliente = otros_mov.cod_sp and
|
|
sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_Sec,
|
|
otros_mov.descrip4
|
|
NEXT FIELD detalle
|
|
END IF
|
|
AFTER FIELD conduce_no
|
|
LET ordenx = NULL
|
|
LET pnum_req=null
|
|
IF otros_mov.conduce_no IS NOT NULL THEN
|
|
|
|
LET ordenx = otros_mov.conduce_no
|
|
|
|
SELECT a.tipo_cliente,a.sec_cliente,a.cerrada,a.cotizacion_no
|
|
INTO otros_mov.cod_sp,otros_mov.cod_sp_sec,pcerrada,xcotizacion
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = otros_mov.conduce_no AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce_no
|
|
END IF
|
|
SELECT nombre INTO otros_mov.descrip4
|
|
FROM vetb00004
|
|
WHERE tipo_cliente = otros_mov.cod_sp and
|
|
sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_Sec,
|
|
otros_mov.descrip4
|
|
|
|
IF otros_mov.cod_mov <> 12 AND otros_mov.cod_mov <> 13 AND otros_mov.cod_mov <> 71 AND
|
|
otros_mov.cod_mov <> 43 THEN
|
|
IF pcerrada = "S" THEN
|
|
LET numero_msg = 74
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce_no
|
|
END IF
|
|
END IF
|
|
DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec
|
|
|
|
END IF
|
|
|
|
IF otros_mov.cod_mov = 30 OR otros_mov.conduce_no = 31 OR otros_mov.cod_mov = 55
|
|
THEN
|
|
IF otros_mov.conduce_no IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD conduce_no
|
|
END IF
|
|
END IF
|
|
|
|
# NEXT FIELD detalle
|
|
BEFORE FIELD cod_sp
|
|
IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN
|
|
CALL busca_vend()
|
|
LET otros_mov.cod_sp = 12
|
|
LET otros_mov.cod_sp_sec= busca_v.sec_cliente
|
|
LET otros_mov.descrip4 = busca_v.nombre
|
|
DISPLAY BY NAME otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.descrip4
|
|
NEXT FIELD cod_sp_sec
|
|
END IF
|
|
|
|
AFTER FIELD cod_sp
|
|
IF ac_cli = "S" AND otros_mov.cod_sp IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
IF pcontrol_cliente = "SI" THEN
|
|
SELECT a.cod_mov FROM vetb00060 a
|
|
WHERE a.cod_mov = otros_mov.cod_mov and
|
|
a.tipo_cliente = otros_mov.cod_sp
|
|
END IF
|
|
|
|
AFTER FIELD cod_sp_sec
|
|
IF ac_cli = "S" AND otros_mov.cod_sp_sec IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
|
|
IF otros_mov.cod_mov = 12 THEN
|
|
IF otros_mov.cod_sp_sec is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
END IF
|
|
|
|
IF otros_mov.cod_sp_sec is not null THEN
|
|
-- La existencia del cliente se valida SOLO contra vetb00004. El vendedor
|
|
-- (sec_vend) se busca aparte en vetb00028, porque no todos los clientes
|
|
-- tienen vendedor asignado; antes el JOIN a vetb00028 hacia que un cliente
|
|
-- valido sin vendedor diera "cliente no existe" (msg 3), p.ej. en mov 12.
|
|
SELECT a.nombre INTO otros_mov.descrip4
|
|
FROM vetb00004 a
|
|
WHERE a.tipo_cliente = otros_mov.cod_sp and
|
|
a.sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
|
|
LET psec_vend = NULL
|
|
SELECT b.sec_vend INTO psec_vend
|
|
FROM vetb00028 b
|
|
WHERE b.tipo_cliente = otros_mov.cod_sp and
|
|
b.sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
DISPLAY BY NAME otros_mov.descrip4,psec_vend
|
|
|
|
IF otros_mov.fact_no is not null THEN
|
|
SELECT sec_cliente FROM vetb00002
|
|
WHERE factura = otros_mov.fact_no and
|
|
sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 237
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp_sec
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN
|
|
|
|
SELECT unique sec_cliente FROM vetb00033
|
|
WHERE sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = -1301
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
END IF
|
|
BEFORE FIELD entrada
|
|
IF otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 THEN
|
|
IF otros_mov.entrada IS NULL THEN
|
|
# IF otros_mov.entrada IS NOT NULL THEN
|
|
SELECT MAX(a.num_doc),MAX(a.cod_mov) INTO otros_mov.entrada,otros_mov.cod_mov1
|
|
FROM iptb00006 a
|
|
WHERE (a.conduce_no = otros_mov.conduce_no) AND
|
|
(a.cod_mov in (70,71,72)) AND a.status_t IS NULL
|
|
# END IF
|
|
|
|
DISPLAY BY NAME otros_mov.entrada,otros_mov.cod_mov1
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD entrada
|
|
IF otros_mov.entrada IS NOT NULL THEN
|
|
SELECT UNIQUE a.num_doc FROM iptb00006 a
|
|
WHERE a.cod_mov= otros_mov.cod_mov1 and a.num_doc = otros_mov.entrada
|
|
AND a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD entrada
|
|
END IF
|
|
{
|
|
LET cantidad_entrada = 0
|
|
SELECT SUM(a.cantidad_2) INTO cantidad_entrada
|
|
FROM iptb00006 a
|
|
WHERE a.num_doc = otros_mov.placa AND
|
|
a.cod_mov IN(70,71,72) AND
|
|
a.status_t IS NULL
|
|
|
|
IF cantidad_entrada IS NULL THEN
|
|
LET cantidad_entrada = 0
|
|
END IF
|
|
|
|
LET cantidad_conduce = 0
|
|
SELECT SUM(a.cantidad_2) INTO cantidad_conduce
|
|
FROM iptb00006 a,iptb00028 b
|
|
WHERE b.entrada = otros_mov.entrada AND
|
|
a.num_doc = b.num_doc and
|
|
a.cod_mov = b.cod_mov AND
|
|
a.status_t IS NULL
|
|
|
|
IF cantidad_conduce IS NULL THEN
|
|
LET cantidad_conduce = 0
|
|
END IF
|
|
LET pendiente = cantidad_entrada + cantidad_conduce
|
|
DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
|
|
IF pendiente <= 0 THEN
|
|
LET numero_msg =46
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD entrada
|
|
END IF
|
|
}
|
|
END IF
|
|
|
|
|
|
AFTER FIELD departamento
|
|
IF otros_mov.cod_mov = 70 OR
|
|
otros_mov.cod_mov = 71 OR otros_mov.conduce_no = 72 THEN
|
|
IF otros_mov.departamento IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
SELECT a.nom_dpto INTO otros_mov.nombre_depto
|
|
FROM adtb00001 a
|
|
WHERE a.departamento = otros_mov.departamento AND
|
|
a.status_t IS NULL
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
DISPLAY BY NAME otros_mov.nombre_depto,otros_mov.cod_sp,otros_mov.cod_sp_sec
|
|
END IF
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET INT_FLAG = FALSE
|
|
DELETE FROM iptbexistencia WHERE us_crea = usuarios
|
|
EXIT PROGRAM
|
|
EXIT INPUT
|
|
END IF
|
|
|
|
IF otros_mov.bodega IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD bodega
|
|
END IF
|
|
IF Pcontrol_transferencia = 'SI' THEN
|
|
IF otros_mov.bodega_destino IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD bodega_destino
|
|
END IF
|
|
END IF
|
|
IF otros_mov.bodega IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD bodega
|
|
|
|
END IF
|
|
SELECT UNIQUE a.usuario FROM iptb00048 a
|
|
WHERE a.bodega = otros_mov.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 otros_mov.conduce_no IS NOT NULL THEN
|
|
|
|
LET ordenx = otros_mov.conduce_no
|
|
|
|
SELECT a.tipo_cliente,a.sec_cliente,a.cerrada,a.cotizacion_no,a.sec_vend
|
|
INTO otros_mov.cod_sp,otros_mov.cod_sp_sec,pcerrada,xcotizacion,psec_vend
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = otros_mov.conduce_no AND
|
|
a.status_t IS NULL
|
|
|
|
-- Solo se valida la existencia del cliente y se trae el nombre (vetb00004).
|
|
-- No se une a vetb00028 para no rechazar clientes sin vendedor asignado;
|
|
-- el vendedor (psec_vend) ya viene de la orden en prtb00012 (arriba).
|
|
SELECT a.nombre INTO otros_mov.descrip4
|
|
FROM vetb00004 a
|
|
WHERE a.tipo_cliente = otros_mov.cod_sp and
|
|
a.sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sp
|
|
END IF
|
|
|
|
DISPLAY BY NAME otros_mov.descrip4,psec_vend
|
|
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CALL movi2.clear()
|
|
|
|
SLEEP 1
|
|
RETURN
|
|
END IF
|
|
|
|
IF opc = "S" or opc = "s" OR opc IS NULL THEN
|
|
CALL movi2.clear()
|
|
|
|
END IF
|
|
|
|
|
|
IF otros_mov.conduce_no IS NOT NULL AND (otros_mov.cod_mov = 70 OR otros_mov.cod_mov = 71 OR
|
|
otros_mov.cod_mov = 72) THEN
|
|
DECLARE busca_orden CURSOR FOR
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,'0','0',a.cantidad,b.unidad_med,b.descrip_esp
|
|
FROM prtb00013 a,iptb00002 b
|
|
WHERE a.num_oc =ordenx AND
|
|
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
|
|
|
|
LET idx = 1
|
|
FOREACH busca_orden INTO movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].cantidad_p, movi2[idx].unidad_med, movi2[idx].descrip_esp, movi2[idx].codigo_bloque, movi2[idx].id_kit
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
|
|
IF otros_mov.entrada IS NOT NULL THEN
|
|
DECLARE busca_20 CURSOR FOR
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,'0','0',a.cantidad_2,b.unidad_med,b.descrip_esp
|
|
FROM iptb00006 a,iptb00002 b
|
|
WHERE a.conduce_no =ordenx AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov1 and a.num_doc = otros_mov.entrada AND
|
|
a.status_t IS NULL
|
|
|
|
LET idx = 1
|
|
FOREACH busca_20 INTO movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].cantidad_p, movi2[idx].unidad_med, movi2[idx].descrip_esp, movi2[idx].codigo_bloque, movi2[idx].id_kit
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
LET chconduce = 'N'
|
|
IF otros_mov.conduce_no IS NOT NULL AND (otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR
|
|
otros_mov.cod_mov = 55) THEN
|
|
LET chconduce = 'S'
|
|
IF otros_mov.entrada IS NOT NULL THEN
|
|
DECLARE busca_entrada CURSOR FOR
|
|
SELECT c.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,c.cantidad_1,
|
|
c.cantidad,c.cantidad*-1,b.unidad_med,b.descrip_esp,a.codigo_bloque,c.id_kit
|
|
|
|
FROM iptb00006 a,iptb00002 b,cctb00026 c
|
|
WHERE a.conduce_no = ordenx and a.status_t IS NULL AND
|
|
a.num_Doc = otros_mov.entrada AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec AND
|
|
a.cod_n = C.cod_n AND
|
|
a.cod_grupo = c.cod_grupo AND
|
|
a.cod_tipo = c.cod_tipo AND
|
|
a.cod_sec = c.cod_sec AND
|
|
a.area = c.area AND
|
|
c.num_req = pnum_req
|
|
|
|
|
|
|
|
LET idx = 1
|
|
|
|
FOREACH busca_entrada INTO movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].cantidad_p, movi2[idx].unidad_med, movi2[idx].descrip_esp, movi2[idx].codigo_bloque, movi2[idx].id_kit
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
END IF
|
|
|
|
IF otros_mov.entrada IS NULL THEN
|
|
DECLARE busca_orden1 CURSOR FOR
|
|
SELECT UNIQUE a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
c.cantidad_1,c.cantidad,c.cantidad,b.unidad_med,b.descrip_esp,
|
|
' ',c.id_kit
|
|
FROM prtb00013 a,iptb00002 b,cctb00026 c
|
|
WHERE a.num_oc = ordenx and
|
|
a.status_t IS NULL and
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec AND
|
|
a.cod_n = C.cod_n AND
|
|
a.cod_grupo = c.cod_grupo AND
|
|
a.cod_tipo = c.cod_tipo AND
|
|
a.cod_sec = c.cod_sec AND
|
|
a.area = c.area AND
|
|
c.num_req = pnum_req
|
|
|
|
|
|
|
|
LET idx = 1
|
|
FOREACH busca_orden1 INTO movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].cantidad_p, movi2[idx].unidad_med, movi2[idx].descrip_esp, movi2[idx].codigo_bloque, movi2[idx].id_kit
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
|
|
|
|
END IF
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
DECLARE busca_dev CURSOR FOR
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,a.cantidad,b.unidad_med,b.descrip_esp,' ',a.id_kit
|
|
FROM vetb00003 a,iptb00002 b
|
|
WHERE a.factura = otros_mov.fact_no and a.status_t IS NULL and
|
|
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
|
|
|
|
|
|
LET idx = 1
|
|
FOREACH busca_dev INTO movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].cantidad_p, movi2[idx].unidad_med, movi2[idx].descrip_esp, movi2[idx].codigo_bloque, movi2[idx].id_kit
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
CALL set_count(idx - 1)
|
|
INPUT ARRAY movi2 WITHOUT DEFAULTS FROM s_movi1.*
|
|
BEFORE INPUT
|
|
LET decide = NULL
|
|
LET selec_pt = NULL
|
|
LET hacerdocumento = TRUE
|
|
|
|
# Este BEFORE FIELD estaba en comentario por disposicion de alguien hace algun
|
|
# tiempo y ahora no se sabe porque se determino que cuando usted hace una
|
|
# devolucion le permita al usuario modificar el codigo del producto
|
|
|
|
# Hoy 13 de noviembre de 1993 el Ing. de informatica dispuso que
|
|
# cuando sea una devolucion a una factura no se permitiera la actualizacion
|
|
# del codigo del producto
|
|
|
|
BEFORE ROW
|
|
LET p_act = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
|
|
ON ACTION despiece
|
|
LET p_act = arr_curr()
|
|
LET scr_l = scr_line()
|
|
SELECT UNIQUE a.cod_n FROM iptb00027 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg =399
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
IF movi2[p_act].area IS NULL THEN
|
|
LET movi2[p_act].area = 1
|
|
# DISPLAY movi2[p_act].area TO smovi1[scr_l].area
|
|
END IF
|
|
CALL despiece()
|
|
|
|
# DISPLAY movi2[p_act].cantidad_1 TO smovi1[scr_l].cantidad_1
|
|
NEXT FIELD cantidad_1
|
|
ON ACTION producto
|
|
CASE
|
|
WHEN INFIELD (cod_n)
|
|
CALL busca_prod1()
|
|
|
|
LET movi2[p_act].cod_n = busca_p.cod_n
|
|
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
|
|
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
|
|
LET movi2[p_act].cod_sec = busca_p.cod_sec
|
|
LET movi2[p_act].descrip_esp= busca_p.descrip_esp
|
|
LET movi2[p_act].unidad_med = busca_p.unidad_med
|
|
|
|
|
|
DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
|
|
movi2[p_act].descrip_esp,movi2[p_act].unidad_med
|
|
TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo,
|
|
s_movi1[scr_l].cod_tipo,s_movi1[scr_l].cod_sec,
|
|
s_movi1[scr_l].descrip_esp,s_movi1[scr_l].unidad_med
|
|
|
|
|
|
WHEN INFIELD (cod_grupo)
|
|
CALL busca_prod1()
|
|
|
|
LET movi2[p_act].cod_n = busca_p.cod_n
|
|
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
|
|
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
|
|
LET movi2[p_act].cod_sec = busca_p.cod_sec
|
|
LET movi2[p_act].descrip_esp= busca_p.descrip_esp
|
|
LET movi2[p_act].unidad_med = busca_p.unidad_med
|
|
|
|
|
|
DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
|
|
movi2[p_act].descrip_esp,movi2[p_act].unidad_med
|
|
TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo,
|
|
s_movi1[scr_l].cod_tipo,s_movi1[scr_l].cod_sec,
|
|
s_movi1[scr_l].descrip_esp,s_movi1[scr_l].unidad_med
|
|
|
|
|
|
WHEN INFIELD (cod_tipo)
|
|
CALL busca_prod1()
|
|
|
|
LET movi2[p_act].cod_n = busca_p.cod_n
|
|
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
|
|
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
|
|
LET movi2[p_act].cod_sec = busca_p.cod_sec
|
|
LET movi2[p_act].descrip_esp= busca_p.descrip_esp
|
|
LET movi2[p_act].unidad_med = busca_p.unidad_med
|
|
|
|
|
|
DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
|
|
movi2[p_act].descrip_esp,movi2[p_act].unidad_med
|
|
TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo,
|
|
s_movi1[scr_l].cod_tipo,s_movi1[scr_l].cod_sec,
|
|
s_movi1[scr_l].descrip_esp,s_movi1[scr_l].unidad_med
|
|
|
|
|
|
WHEN INFIELD (cod_sec)
|
|
CALL busca_prod1()
|
|
|
|
LET movi2[p_act].cod_n = busca_p.cod_n
|
|
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
|
|
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
|
|
LET movi2[p_act].cod_sec = busca_p.cod_sec
|
|
LET movi2[p_act].descrip_esp= busca_p.descrip_esp
|
|
LET movi2[p_act].unidad_med = busca_p.unidad_med
|
|
|
|
DISPLAY movi2[p_act].cod_n, movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
|
|
movi2[p_act].descrip_esp,movi2[p_act].unidad_med
|
|
TO s_movi1[scr_l].cod_n, s_movi1[scr_l].cod_grupo,
|
|
s_movi1[scr_l].cod_tipo,s_movi1[scr_l].cod_sec,
|
|
s_movi1[scr_l].descrip_esp,s_movi1[scr_l].unidad_med
|
|
|
|
END CASE
|
|
CALL integridad()
|
|
if bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
end IF
|
|
|
|
AFTER FIELD codigo_bloque
|
|
IF LENGTH(movi2[p_act].codigo_bloque) > 2 THEN
|
|
SELECT UNIQUE a.codigo_bloque FROM intb00018 a
|
|
WHERE a.codigo_bloque = movi2[p_act].codigo_bloque
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD codigo_bloque
|
|
END IF
|
|
|
|
END IF
|
|
AFTER ROW
|
|
LET p_act = arr_curr()
|
|
IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and
|
|
movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null then
|
|
|
|
LET ant_art.area = movi2[p_act].area
|
|
LET ant_art.cod_n = movi2[p_act].cod_n
|
|
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
|
|
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
|
|
LET ant_art.cod_sec = movi2[p_act].cod_sec
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != p_act THEN
|
|
IF movi2[idx].area = ant_art.area AND
|
|
movi2[idx].cod_n = ant_art.cod_n AND
|
|
movi2[idx].cod_grupo = ant_art.cod_grupo AND
|
|
movi2[idx].cod_tipo = ant_art.cod_tipo AND
|
|
movi2[idx].cod_sec = ant_art.cod_sec THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
IF pcontrol_despacho = 'SI' THEN
|
|
IF movi2[p_act].area IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD area
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD cod_n
|
|
LET p_act = arr_curr()
|
|
IF movi2[p_act].cod_n is not null then
|
|
|
|
LET ant_art.area = movi2[p_act].area
|
|
LET ant_art.cod_n = movi2[p_act].cod_n
|
|
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
|
|
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
|
|
LET ant_art.cod_sec = movi2[p_act].cod_sec
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != p_act THEN
|
|
IF movi2[idx].area = ant_art.area AND
|
|
movi2[idx].cod_n = ant_art.cod_n AND
|
|
movi2[idx].cod_grupo = ant_art.cod_grupo AND
|
|
movi2[idx].cod_tipo = ant_art.cod_tipo AND
|
|
movi2[idx].cod_sec = ant_art.cod_sec THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END IF
|
|
|
|
AFTER FIELD cod_grupo
|
|
LET p_act = arr_curr()
|
|
IF movi2[p_act].cod_grupo is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
LET ant_art.area = movi2[p_act].area
|
|
LET ant_art.cod_n = movi2[p_act].cod_n
|
|
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
|
|
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
|
|
LET ant_art.cod_sec = movi2[p_act].cod_sec
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != p_act THEN
|
|
IF movi2[idx].area = ant_art.area AND
|
|
movi2[idx].cod_n = ant_art.cod_n AND
|
|
movi2[idx].cod_grupo = ant_art.cod_grupo AND
|
|
movi2[idx].cod_tipo = ant_art.cod_tipo AND
|
|
movi2[idx].cod_sec = ant_art.cod_sec THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
AFTER FIELD cod_tipo
|
|
LET p_act = arr_curr()
|
|
IF movi2[p_act].cod_tipo is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
LET ant_art.area = movi2[p_act].area
|
|
LET ant_art.cod_n = movi2[p_act].cod_n
|
|
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
|
|
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
|
|
LET ant_art.cod_sec = movi2[p_act].cod_sec
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != p_act THEN
|
|
IF movi2[idx].area = ant_art.area AND
|
|
movi2[idx].cod_n = ant_art.cod_n AND
|
|
movi2[idx].cod_grupo = ant_art.cod_grupo AND
|
|
movi2[idx].cod_tipo = ant_art.cod_tipo AND
|
|
movi2[idx].cod_sec = ant_art.cod_sec THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
AFTER FIELD cod_sec
|
|
LET p_act = arr_curr()
|
|
IF movi2[p_act].cod_sec is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
IF movi2[p_act].cod_n is null AND movi2[p_act].cod_sec is not null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and
|
|
movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null then
|
|
|
|
|
|
SELECT a.descrip_esp,a.unidad_med,a.control_existencia
|
|
INTO p_iptb02.descrip_esp,p_iptb02.unidad_med,p_iptb02.control_existencia
|
|
FROM iptb00002 a
|
|
WHERE a.cod_n=movi2[p_act].cod_n and
|
|
a.cod_grupo = movi2[p_act].cod_grupo and
|
|
a.cod_tipo=movi2[p_act].cod_tipo and
|
|
a.cod_sec = movi2[p_act].cod_sec and
|
|
a.status_t is null
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
|
|
SELECT UNIQUE a.factor_conv INTO factor_conv[p_act] FROM iptb00001 a
|
|
WHERE a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo
|
|
and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec
|
|
and a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(94)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
LET movi2[p_act].descrip_esp = p_iptb02.descrip_esp CLIPPED
|
|
LET movi2[p_act].unidad_med = p_iptb02.unidad_med CLIPPED
|
|
|
|
DISPLAY movi2[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp
|
|
ATTRIBUTE(CYAN)
|
|
DISPLAY movi2[p_act].unidad_med TO s_movi1[scr_l].unidad_med
|
|
ATTRIBUTE(CYAN)
|
|
|
|
LET ant_art.area = movi2[p_act].area
|
|
LET ant_art.cod_n = movi2[p_act].cod_n
|
|
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
|
|
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
|
|
LET ant_art.cod_sec = movi2[p_act].cod_sec
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != p_act THEN
|
|
IF movi2[idx].area = ant_art.area AND
|
|
movi2[idx].cod_n = ant_art.cod_n AND
|
|
movi2[idx].cod_grupo = ant_art.cod_grupo AND
|
|
movi2[idx].cod_tipo = ant_art.cod_tipo AND
|
|
movi2[idx].cod_sec = ant_art.cod_sec THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
# CONTROL ITEMS EN LA ORDEN
|
|
IF otros_mov.conduce_no IS NOT NULL THEN
|
|
SELECT UNIQUE a.cod_n FROM prtb00013 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.num_oc = ordenx
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg =397
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
|
|
IF pnum_req IS NOT NULL THEN
|
|
|
|
# CONTROL ITEM EN LA REQUISICION
|
|
|
|
{ LET hacerdocumento=TRUE
|
|
SELECT UNIQUE a.cod_n FROM cctb00026 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.num_oc = otros_mov.conduce_no AND
|
|
a.num_req = pnum_req
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg =397
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF }
|
|
END IF
|
|
|
|
# CONTROL DESPIECE
|
|
SELECT UNIQUE a.cod_n FROM iptb00027 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec
|
|
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
SELECT UNIQUE a.cod_n FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND
|
|
a.num_doc = otros_mov.num_Doc
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
# El producto lleva despiece y no se ha hecho: abrir la ventana
|
|
# sola (antes solo mostraba el mensaje 398)
|
|
IF NOT abre_despiece_si_falta() THEN
|
|
LET numero_msg =398
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
LET movi2[p_act].cantidad_p = cantidad_conduce - cantidad_orden
|
|
#CONTROL DEVOLUCION
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
IF movi2[p_Act].cantidad_2 > movi2[p_Act].cantidad_p then
|
|
LET numero_msg =28
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad_1
|
|
end if
|
|
DISPLAY movi2[p_Act].cantidad_2 TO s_movi1[scr_l].cantidad_2
|
|
END IF
|
|
|
|
END IF # CONTROL CODIGO EN BLANCO
|
|
|
|
BEFORE FIELD cantidad_1
|
|
# En devoluciones el cursor salta directo a la cantidad (no pasa por
|
|
# cod_sec): si el producto lleva despiece y no se ha hecho, abrirlo
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
LET p_act = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF NOT abre_despiece_si_falta() THEN
|
|
# se cancelo: avisa; al grabar igual lo exige (msg 398)
|
|
LET numero_msg = 398
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD cantidad_1
|
|
LET p_act = arr_curr()
|
|
|
|
IF movi2[p_act].cod_n is not null and movi2[p_act].cod_grupo is not null and
|
|
movi2[p_act].cod_tipo is not null and movi2[p_act].cod_sec is not null
|
|
THEN
|
|
|
|
IF movi2[p_act].cantidad_1 IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
|
|
SELECT UNIQUE a.factor_conv INTO factor_conv[p_act] FROM iptb00001 a
|
|
WHERE a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo
|
|
and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec
|
|
and a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(94)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
|
|
LET movi2[p_act].cantidad_2=movi2[p_act].cantidad_1*factor_conv[p_act]
|
|
DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
|
|
LET p_iptb06.cantidad_2 = 0
|
|
#CONTROL DEVOLUCION
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
|
|
LET cantidad_factura = 0
|
|
SELECT SUM(a.cantidad) INTO cantidad_factura
|
|
FROM vetb00003 a
|
|
WHERE a.factura = otros_mov.fact_no AND
|
|
a.status_t IS NULL AND
|
|
a.fech_crea > '2009-01-01 08:00' and
|
|
a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo
|
|
and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec
|
|
and a.status_t is null
|
|
|
|
SELECT SUM(a.cantidad_2) INTO cantidad_devuelta
|
|
FROM iptb00006 a
|
|
WHERE a.fact_no = otros_mov.fact_no AND
|
|
a.status_t IS NULL AND
|
|
a.fech_crea > '2009-01-01 08:00' and
|
|
a.cod_n=movi2[p_act].cod_n and a.cod_grupo=movi2[p_act].cod_grupo
|
|
and a.cod_tipo=movi2[p_act].cod_tipo and a.cod_sec=movi2[p_act].cod_sec and
|
|
a.cod_mov in (12,13)
|
|
|
|
|
|
IF cantidad_devuelta > cantidad_factura THEN
|
|
LET hacerdocumento = FALSE
|
|
LET numero_msg =238
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END IF
|
|
|
|
IF status_m = "2" THEN
|
|
# BUSCA LA EXISTENCIA
|
|
|
|
|
|
LET hacerdocumento=TRUE
|
|
|
|
IF p_iptb02.control_existencia = "SI" THEN
|
|
CALL existencia(movi2[p_act].cod_n,movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,movi2[p_act].cantidad_2,p_act,otros_mov.bodega)
|
|
RETURNING vexistencia
|
|
|
|
IF p_iptb06.cantidad_2 <0 THEN
|
|
LET hacerdocumento = FALSE
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
|
|
# IF vexistencia THEN
|
|
# CALL fgl_winmessage("ERROR","CANTIDAD EXCEDE EXISTENCIA","STOP")
|
|
# NEXT FIELD cantidad_1
|
|
# END IF
|
|
END IF
|
|
END IF
|
|
#================================================================================
|
|
# CONTROL CANTIDAD DESPIECE
|
|
LET total_medida = 0
|
|
IF otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR
|
|
otros_mov.cod_mov = 55 OR otros_mov.cod_mov = 56 OR otros_mov.cod_mov = 70 OR
|
|
otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 72 THEN
|
|
|
|
# CONTROL DESPIECE
|
|
SELECT UNIQUE a.cod_n FROM iptb00027 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec
|
|
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
SELECT UNIQUE a.cod_n FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND
|
|
a.num_doc = otros_mov.num_Doc
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg =398
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_n
|
|
END IF
|
|
END IF
|
|
SELECT UNIQUE a.num_doc
|
|
FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND
|
|
a.num_doc = otros_mov.num_doc
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
SELECT SUM(a.medida) INTO total_medida
|
|
FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND
|
|
a.area = movi2[p_act].area AND
|
|
a.num_doc = otros_mov.num_doc
|
|
|
|
IF total_medida <> movi2[p_act].cantidad_1 THEN
|
|
# Diferencia de redondeo (la requisicion guarda 4 decimales y
|
|
# el despiece 5): la linea toma el total exacto del despiece.
|
|
LET diferencia = total_medida - movi2[p_act].cantidad_1
|
|
IF diferencia < 0 THEN
|
|
LET diferencia = diferencia * -1
|
|
END IF
|
|
IF diferencia <= .01 THEN
|
|
LET movi2[p_act].cantidad_1 = total_medida
|
|
LET movi2[p_act].cantidad_2 = movi2[p_act].cantidad_1 * factor_conv[p_act]
|
|
DISPLAY movi2[p_act].cantidad_1 TO s_movi1[scr_l].cantidad_1
|
|
DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
|
|
ELSE
|
|
LET numero_msg = 152
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END IF
|
|
END IF
|
|
LET selec_pt = selec_pt CLIPPED,movi2[p_act].descrip_esp," CANTIDAD ",
|
|
movi2[p_act].cantidad_2," ",movi2[p_act].unidad_med
|
|
END IF
|
|
|
|
|
|
IF otros_mov.conduce_no IS NOT NULL THEN
|
|
# CONTROL ORDEN
|
|
IF otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 70 THEN
|
|
LET cantidad_conduce = 0
|
|
SELECT SUM(a.cantidad) INTO cantidad_conduce
|
|
FROM prtb00013 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.num_oc = otros_mov.conduce_no AND
|
|
a.status_t IS NULL
|
|
|
|
IF cantidad_conduce IS NULL THEN
|
|
LET cantidad_conduce = 0
|
|
END IF
|
|
|
|
LET cantidad_recibida = 0
|
|
SELECT SUM(a.cantidad_2) INTO cantidad_recibida
|
|
FROM iptb00006 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.conduce_no = otros_mov.conduce_no AND
|
|
a.cod_mov in(20,70,72,71) AND
|
|
a.status_t IS NULL
|
|
|
|
IF cantidad_Recibida IS NULL THEN
|
|
LET cantidad_Recibida = 0
|
|
END IF
|
|
LET hacerdocumento=TRUE
|
|
IF (cantidad_Recibida + movi2[p_act].cantidad_2) > cantidad_conduce THEN
|
|
LET numero_msg = 46
|
|
LET hacerdocumento = FALSE
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END IF
|
|
IF otros_mov.cod_mov <> 12 AND otros_mov.cod_mov <> 13 and otros_mov.cod_mov <> 43
|
|
THEN
|
|
# Pendiente de la orden = pedido - ya despachado (antes se calculaba
|
|
# el pedido pero NUNCA se comparaba con la cantidad digitada)
|
|
CALL pendiente_orden(movi2[p_act].cod_n,movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
|
|
movi2[p_act].id_kit)
|
|
RETURNING cantidad_conduce,cantidad_orden
|
|
LET movi2[p_act].cantidad_p = cantidad_conduce - cantidad_orden
|
|
DISPLAY movi2[p_act].cantidad_p TO s_movi1[scr_l].cantidad_p
|
|
IF pcontrol_despacho = "SI" THEN
|
|
IF NOT cantidad_cabe_en_orden(p_act) THEN
|
|
LET hacerdocumento = FALSE
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END IF
|
|
|
|
END IF # CONTROL CONDUCE_NO
|
|
END IF # CONTROL DEVOLUCION
|
|
#=================================================================================================
|
|
LET movi3[p_act].cantidad_2 = movi2[p_act].cantidad_2
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
|
|
IF int_flag THEN
|
|
DELETE FROM iptb00025 WHERE cod_mov = otros_mov.cod_mov and num_doc = otros_mov.num_Doc
|
|
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
# Todo producto que lleva despiece (iptb00027) debe tener su despiece
|
|
# abierto (iptb00025). Antes solo se validaba al salir de cod_sec, y los
|
|
# productos que vienen cargados de la orden nunca pasan por ese campo.
|
|
LET idx = falta_despiece()
|
|
IF idx > 0 THEN
|
|
CALL msg(398)
|
|
CALL fgl_set_arr_curr(idx)
|
|
NEXT FIELD cantidad_1
|
|
END IF
|
|
END INPUT
|
|
|
|
LABEL sale_boni:
|
|
PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc
|
|
|
|
IF OPC = "S" or OPC = "s" THEN
|
|
BEGIN WORK
|
|
# Actualiza tabla control ultimo documento
|
|
SELECT num_doc INTO otros_mov.num_doc FROM iptb00007
|
|
WHERE cod_mov = otros_mov.cod_mov AND
|
|
bodega = otros_mov.bodega
|
|
|
|
IF status = notfound THEN
|
|
LET otros_mov.num_doc = 0
|
|
INSERT INTO iptb00007 values(1,otros_mov.cod_mov,null,usuarios,getdate(),null,null,otros_mov.bodega)
|
|
END IF
|
|
|
|
LET otros_mov.num_doc = otros_mov.num_doc + 1
|
|
|
|
|
|
UPDATE iptb00007 set num_doc = otros_mov.num_doc,
|
|
us_crea = suser_sname(),
|
|
fech_crea = getdate()
|
|
WHERE cod_mov = otros_mov.cod_mov AND bodega = otros_mov.bodega
|
|
|
|
UPDATE iptb00025 SET num_doc = otros_mov.num_doc WHERE num_doc = tmpnueroExistencia AND
|
|
cod_mov = otros_mov.cod_mov
|
|
|
|
DISPLAY BY NAME otros_mov.num_doc ATTRIBUTE (BLUE)
|
|
UPDATE iptb00025 SET num_doc = otros_mov.num_doc
|
|
WHERE num_doc = tmpnumero AND cod_mov = otros_mov.cod_mov
|
|
|
|
# INSERTA REGISTROS DE ENTRADAS CON LOS CONDUCES
|
|
IF otros_mov.cod_mov1 IS NOT NULL THEN
|
|
INSERT INTO iptb00028 VALUES (otros_mov.cod_mov,otros_mov.num_doc,otros_mov.cod_mov1,
|
|
otros_mov.entrada,otros_mov.bodega)
|
|
END IF
|
|
# INFORMACIONES CUANDO EL MOVIMIENTO ES DE PRODUCCION
|
|
IF otros_mov.cod_mov = 70 OR otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 72 THEN
|
|
INSERT INTO iptb00026 VALUES (otros_mov.cod_mov,otros_mov.num_doc,otros_mov.departamento,otros_mov.bodega)
|
|
END IF
|
|
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
|
|
IF chconduce = 'S' OR control_devolucion = 'SI' THEN
|
|
LET subject = otros_mov.conduce_no,otros_mov.descrip_mov CLIPPED
|
|
LET cuerpo_correo = 'CLIENTE: ',otros_mov.descrip4 CLIPPED,", ",
|
|
otros_mov.detalle CLIPPED
|
|
END IF
|
|
|
|
FOR idx = 1 TO movi2.getLength()
|
|
IF movi2[idx].cod_n is not null and movi2[idx].cod_grupo is not null and
|
|
movi2[idx].cod_tipo is not null and movi2[idx].cod_sec is not null THEN
|
|
|
|
IF movi2[idx].cantidad_2 is not null THEN
|
|
|
|
IF status_m = "2" THEN
|
|
|
|
SELECT a.control_existencia
|
|
INTO p_iptb02.control_existencia
|
|
FROM iptb00002 a
|
|
WHERE a.cod_n = movi2[idx].cod_n and
|
|
a.cod_grupo = movi2[idx].cod_grupo and
|
|
a.cod_tipo = movi2[idx].cod_tipo and
|
|
a.cod_sec = movi2[idx].cod_sec
|
|
|
|
IF p_iptb02.control_existencia = "SI" THEN
|
|
CALL existencia(movi2[idx].cod_n,movi2[idx].cod_grupo,
|
|
movi2[idx].cod_tipo,movi2[idx].cod_sec,movi2[idx].cantidad_2,
|
|
idx,otros_mov.bodega)
|
|
RETURNING vexistencia
|
|
|
|
# IF p_iptb06.cantidad_2 <0 THEN
|
|
# ROLLBACK WORK
|
|
# CALL fgl_winmessage("ERROR","CANTIDAD EXCEDE EXISTENCIA","STOP")
|
|
# DISPLAY movi2[idx].cantidad_p TO s_movi1[scr_l].cantidad_p ATTRIBUTE(RED)
|
|
|
|
# GO TO vuelve
|
|
# END IF
|
|
|
|
# IF vexistencia THEN
|
|
# ROLLBACK WORK
|
|
# CALL fgl_winmessage("ERROR","CANTIDAD EXCEDE EXISTENCIA","STOP")
|
|
# GO TO vuelve
|
|
# END IF
|
|
END IF
|
|
IF pcontrol_despacho="SI" THEN
|
|
#=============================================================================
|
|
# CONTROL REQUISICION DESPACHO
|
|
#======================================================================
|
|
|
|
# pendiente de ESTE producto (incluye lo ya grabado en esta misma
|
|
# transaccion para renglones anteriores del mismo producto)
|
|
CALL pendiente_orden(movi2[idx].cod_n,movi2[idx].cod_grupo,
|
|
movi2[idx].cod_tipo,movi2[idx].cod_sec,
|
|
movi2[idx].id_kit)
|
|
RETURNING cantidad_conduce,cantidad_orden
|
|
|
|
|
|
LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden
|
|
|
|
IF movi2[idx].cantidad_2 > movi2[idx].cantidad_p + .01 THEN # .01 = tolerancia de redondeo
|
|
ROLLBACK WORK
|
|
DISPLAY movi2[idx].cantidad_p TO s_movi1[scr_l].cantidad_p ATTRIBUTE(RED)
|
|
CALL msg(46)
|
|
GOTO vuelve
|
|
END IF
|
|
|
|
CALL control_requisicion(movi2[idx].cantidad_2,
|
|
movi2[idx].cod_n,movi2[idx].cod_grupo,
|
|
movi2[idx].cod_tipo,movi2[idx].cod_sec,
|
|
movi2[idx].id_kit)
|
|
RETURNING estado_req
|
|
|
|
IF NOT estado_req THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","CANTIDAD MAYOR A CANTIDAD REQUISICION","INFO")
|
|
DISPLAY movi2[idx].cantidad_1 TO s_movi1[scr_l].cantidad_1 ATTRIBUTE(RED)
|
|
GOTO vuelve
|
|
END IF
|
|
|
|
END IF # CONTROL ORDENS
|
|
IF movi2[idx].cantidad_2 > 0 THEN
|
|
LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1
|
|
END IF
|
|
END IF
|
|
|
|
|
|
INSERT INTO iptb00006
|
|
(cod_cia,num_doc,fecha,fact_no,conduce_no,cod_sp,cod_sp_sec,cod_transp,sec_transp,placa,cod_tarifa,cod_mov,
|
|
detalle,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad_1,cantidad_2,bodega,us_crea,fech_crea,
|
|
num_req,codigo_bloque,sec_vend,direccion,num_oc,bodega_d) VALUES
|
|
(otros_mov.cod_cia,otros_mov.num_doc,otros_mov.fecha,
|
|
otros_mov.fact_no,otros_mov.conduce_no,otros_mov.cod_sp,
|
|
otros_mov.cod_sp_sec,otros_mov.cod_transp,
|
|
otros_mov.sec_transp,otros_mov.placa,otros_mov.cod_tarifa,
|
|
otros_mov.cod_mov,otros_mov.detalle,movi2[idx].area,movi2[idx].cod_n,
|
|
movi2[idx].cod_grupo,
|
|
movi2[idx].cod_tipo,movi2[idx].cod_sec,
|
|
movi2[idx].cantidad_1,movi2[idx].cantidad_2,
|
|
otros_mov.bodega,suser_sname(),getdate(),pnum_req,
|
|
movi2[idx].codigo_bloque,psec_vend,direccion_p,ordenx,sucid)
|
|
|
|
|
|
CALL integridad()
|
|
|
|
if bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
end if
|
|
|
|
END IF { if de cantidad_2 no NULL }
|
|
END IF {if cod_n cod_tipo ........ is not null }
|
|
END FOR
|
|
# Persiste el correlativo consumido SOLO al guardar (antes se avanzaba en
|
|
# BEFORE FIELD num_doc al entrar al campo, por lo que abrir a reimprimir/
|
|
# cancelar gastaba un numero de la secuencia).
|
|
LET tmpnumero = 0
|
|
SELECT a.num_doc INTO tmpnumero FROM iptb00043 a WHERE usuario = usuarios
|
|
IF STATUS = NOTFOUND THEN
|
|
INSERT INTO iptb00043 VALUES (otros_mov.num_doc, usuarios)
|
|
ELSE
|
|
UPDATE iptb00043 SET num_doc = otros_mov.num_doc WHERE usuario = usuarios
|
|
END IF
|
|
# Estado de la requisicion y cierre de la orden (como la version de junio)
|
|
CALL cierre_orden_requisicion()
|
|
COMMIT WORK
|
|
|
|
PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2
|
|
|
|
IF opt2 = "S" OR opt2 = "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
|
|
|
|
}
|
|
-- Carga el .4rp grafico nuevo (ipprmt044.4rp) en vez del default por
|
|
-- nombre del report. El cuerpo de formu4 ahora usa PRINTX.
|
|
IF fgl_report_loadCurrentSettings("ipprmt044.4rp") THEN
|
|
CALL fgl_report_selectDevice("PDF") -- el formulario sale en PDF
|
|
CALL fgl_report_selectPreview(TRUE)
|
|
LET handler = fgl_report_commitCurrentSettings()
|
|
ELSE
|
|
LET handler = NULL
|
|
END IF
|
|
START REPORT formu4 TO XML HANDLER handler
|
|
|
|
LET ya = null
|
|
FOR idx = 1 TO arr_count()
|
|
IF movi2[idx].cod_sec IS NOT NULL THEN
|
|
OUTPUT TO REPORT formu4(otros_mov.*,movi2[idx].*)
|
|
END IF
|
|
END FOR
|
|
|
|
FINISH REPORT formu4
|
|
|
|
END IF
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
CALL movi2.clear()
|
|
ELSE
|
|
GOTO otra_vez
|
|
END IF
|
|
|
|
GOTO vuelve
|
|
END FUNCTION
|
|
|
|
REPORT formu4(x,z)
|
|
|
|
DEFINE x RECORD
|
|
num_doc LIKE iptb00006.num_doc,
|
|
cod_cia LIKE iptb00006.cod_cia,
|
|
cod_mov LIKE iptb00006.cod_mov,
|
|
fact_no LIKE iptb00006.fact_no,
|
|
cod_transp LIKE iptb00006.cod_transp,
|
|
sec_transp LIKE iptb00006.sec_transp,
|
|
cod_tarifa LIKE iptb00006.cod_tarifa,
|
|
placa LIKE iptb00006.placa,
|
|
fecha LIKE iptb00006.fecha,
|
|
conduce_no LIKE iptb00006.conduce_no,
|
|
descrip_mov CHAR(40), #LIKE intb00005.descrip_mov,
|
|
bodega LIKE iptb00006.bodega,
|
|
bodega_destino SMALLINT,
|
|
detalle LIKE iptb00006.detalle,
|
|
cod_sp LIKE iptb00006.cod_sp,
|
|
cod_sp_sec LIKE iptb00006.cod_sp_sec,
|
|
departamento SMALLINT,
|
|
nombre_depto CHAR(30),
|
|
cod_mov1 SMALLINT,
|
|
entrada INT,
|
|
descrip_mov1 CHAR(40),
|
|
descrip4 CHAR(30)
|
|
END RECORD
|
|
|
|
DEFINE z RECORD
|
|
area SMALLINT,
|
|
cod_n LIKE intb00003.cod_n,
|
|
cod_grupo LIKE intb00003.cod_grupo,
|
|
cod_tipo LIKE intb00003.cod_tipo,
|
|
cod_sec LIKE intb00003.cod_sec,
|
|
cantidad_1 LIKE iptb00006.cantidad_1,
|
|
cantidad_2 LIKE iptb00006.cantidad_2,
|
|
cantidad_p DEC(12,5),
|
|
unidad_med LIKE iptb00002.unidad_med,
|
|
descrip_esp CHAR(80),
|
|
existencia DEC(12,5),
|
|
disponible DEC(12,5),
|
|
codigo_bloque CHAR(15),
|
|
id_kit INT
|
|
END RECORD,
|
|
etiqueta,detiqueta,ptelefono,ptelefono1,pcelular,nombre,apellido,pcalle CHAR(30),
|
|
plado1,plado2,plado3,pcantidad,pmedida DEC(12,5),
|
|
pprovincia SMALLINT,
|
|
nombre_provincia CHAR(30),
|
|
nombre_p CHAR(70),
|
|
total_unidades INT,
|
|
hora CHAR(5),
|
|
pubica CHAR(60),
|
|
porden_cliente varchar(25)
|
|
|
|
|
|
DEFINE usuario_c CHAR(9)
|
|
DEFINE signo CHAR(1)
|
|
DEFINE doce,normal,doble,doble_of,negras,negras_off CHAR(2)
|
|
DEFINE l,cuenta SMALLINT,
|
|
darea varchar(40)
|
|
|
|
OUTPUT
|
|
LEFT MARGIN 0
|
|
|
|
ORDER BY x.num_doc,z.area,z.cod_sec
|
|
FORMAT
|
|
|
|
BEFORE GROUP OF x.num_doc
|
|
#LET doble = ASCII 14
|
|
#LET doble_of = ASCII 20
|
|
#LET negras = ASCII 27, ASCII 69
|
|
#LET negras_off = ASCII 27, ASCII 70
|
|
#LET comp_on = ASCII 15
|
|
|
|
SELECT unique us_crea INTO usuario_c
|
|
FROM iptb00006 WHERE num_doc = x.num_doc AND
|
|
cod_mov = x.cod_mov AND
|
|
us_crea = user
|
|
|
|
# LET doce = ASCII 27, ASCII 77
|
|
# LET normal = ASCII 27, ASCII 80
|
|
LET hora = time
|
|
-- Cuerpo convertido a PRINTX para el .4rp grafico (ipprmt044.4rp).
|
|
IF x.detalle is null THEN
|
|
LET x.detalle = "**************************************"
|
|
END IF
|
|
{ COMENTARIO DE ESTAS DIRECCIONES PORQUE SOLO SE VA A TOMAR LA DIRECCION DEL PROYECTO
|
|
QUE ASU VEZ VIENE EN EL MENSAJE DE LA REQUISICION
|
|
|
|
SELECT a.calle,a.casa_num,a.urbanizacion,b.telefono,b.telex,c.nom1_emp,c.apell1_emp,b.cod_provincia
|
|
INTO pcalle,pcasa_num,purbanizacion,ptelefono,pcelular,nombre,apellido,pprovincia
|
|
FROM vetb00005 a,vetb00004 b,vetb00028 d,adtb00003 c
|
|
WHERE a.tipo_cliente = x.cod_sp AND
|
|
a.sec_cliente = x.cod_sp_sec AND
|
|
a.tipo_cliente = d.tipo_cliente AND
|
|
a.sec_cliente = d.sec_cliente AND
|
|
a.tipo_cliente = b.tipo_cliente AND
|
|
a.sec_cliente = b.sec_cliente AND
|
|
d.sec_vend = c.num_emp
|
|
|
|
SELECT a.nombre_proyecto,a.direccion_proyecto INTO nombre_p,direccion_p
|
|
FROM vetb00050 a
|
|
WHERE a.tipo_cliente = x.cod_sp AND
|
|
a.sec_cliente = x.cod_sp_Sec AND
|
|
a.cotizacion_no = xcotizacion
|
|
|
|
}
|
|
LET pcelular = NULL
|
|
LET ptelefono = NULL
|
|
LET ptelefono1 = NULL
|
|
LET nombre_p = null
|
|
|
|
LET nombre = NULL
|
|
SELECT a.nom1_emp+' '+a.apell1_emp INTO nombre
|
|
FROM adtb00003 a
|
|
WHERE a.num_emp = psec_vend
|
|
|
|
SELECT a.nombre_proyecto,a.telefono_r,a.telefono_o,a.celular1,a.direccion_proyecto
|
|
INTO nombre_p,ptelefono,ptelefono1,pcelular,pcalle
|
|
FROM vetb00050 a
|
|
WHERE a.cotizacion_no = xcotizacion
|
|
|
|
LET nombre_provincia = NULL
|
|
IF x.cod_mov = 30 OR x.cod_mov = 31 THEN
|
|
SELECT a.nombre_provincia INTO nombre_provincia
|
|
FROM vetb00020 a
|
|
WHERE a.cod_provincia = pprovincia
|
|
END IF
|
|
IF x.cod_mov = 55 THEN
|
|
SELECT unique a.nom_pais INTO nombre_provincia FROM cotb00018 a
|
|
WHERE a.cod_pais = pprovincia
|
|
END IF
|
|
|
|
|
|
SELECT a.direccion,a.nombre_file INTO pubica,porden_cliente FROM prtb00012 a
|
|
WHERE a.num_oc = x.conduce_no AND CONVERT (CHAR(10),a.fech_crea,103) > "01/01/2007"
|
|
|
|
# SELECT a.observacion INTO pobserva FROM prtb00014 a
|
|
# WHERE a.num_oc = x.conduce_no AND a.fech_crea > datetime (2007-01-01 08:00) year to minute
|
|
# BUSCA BODEGAS
|
|
SELECT a.descripcion INTO almacen_origen FROM intb00009 a
|
|
WHERE a.cod_bodega = x.bodega
|
|
|
|
SELECT a.descripcion INTO almacen_destino FROM intb00009 a
|
|
WHERE a.cod_bodega = x.bodega_destino
|
|
|
|
-- Encabezado del documento (una vez por num_doc)
|
|
PRINTX p_companias.nombre, p_companias.direccion, p_companias.rnc,
|
|
p_companias.telefono,
|
|
x.cod_mov, x.descrip_mov, almacen_origen, almacen_destino,
|
|
x.cod_sp, x.cod_sp_sec, x.descrip4, pcalle, ptelefono, ptelefono1,
|
|
nombre_p, x.fecha, x.num_doc, x.conduce_no
|
|
|
|
-- Cursor de medidas (despiece) por producto, desde iptb00025. Los valores
|
|
-- de z.* se enlazan al abrir (FOREACH) en cada ON EVERY ROW.
|
|
DECLARE cur_med CURSOR FOR
|
|
SELECT a.cantidad, a.etiqueta, b.descripcion, a.lado_1, a.lado_2, a.lado_3, a.medida
|
|
FROM iptb00025 a
|
|
LEFT JOIN vetb00026 b ON b.codid = CAST(a.etiqueta AS SMALLINT)
|
|
WHERE a.cod_mov = x.cod_mov AND a.num_doc = x.num_doc
|
|
AND 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
|
|
BEFORE GROUP OF z.area
|
|
|
|
|
|
ON EVERY ROW
|
|
IF z.cod_n is not null and z.cod_grupo is not null and
|
|
z.cod_tipo is not null and z.cod_sec is not null THEN
|
|
-- Producto
|
|
PRINTX z.cod_n, z.cod_grupo, z.cod_tipo, z.cod_sec,
|
|
z.descrip_esp, z.unidad_med, z.cantidad_1
|
|
-- Sub-detalle: medidas (despiece) de este producto desde iptb00025
|
|
FOREACH cur_med INTO pcantidad, etiqueta, detiqueta, plado1, plado2, plado3, pmedida
|
|
-- etiqueta = codigo guardado; detiqueta = descripcion (vetb00026, via JOIN del cursor)
|
|
PRINTX pcantidad, etiqueta, detiqueta, plado1, plado2, plado3, pmedida
|
|
END FOREACH
|
|
END IF
|
|
|
|
ON LAST ROW
|
|
PRINTX x.detalle, descrip2, x.placa
|
|
END REPORT
|
|
|
|
FUNCTION busca_vend()
|
|
|
|
DEFINE arr_vend ARRAY[200] OF RECORD
|
|
sec_cliente INTEGER,
|
|
num_emp INTEGER,
|
|
nombre CHAR(30)
|
|
END RECORD
|
|
|
|
OPEN WINDOW busca_1 AT 8,4 WITH FORM "ipfmwd004" ATTRIBUTE (BORDER,FORM LINE
|
|
FIRST + 1,PROMPT LINE LAST)
|
|
|
|
DECLARE busca_1 CURSOR FOR
|
|
SELECT a.sec_cliente,a.num_emp,b.nombre FROM vetb00033 a,vetb00004 b
|
|
WHERE a.sec_cliente = b.sec_cliente AND a.status_t IS NULL
|
|
ORDER BY 1
|
|
|
|
LET idx = 1
|
|
FOREACH busca_1 INTO arr_vend[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL SET_COUNT(idx - 1)
|
|
|
|
DISPLAY ARRAY arr_vend TO sc_vend.*
|
|
LET idx = ARR_CURR()
|
|
|
|
LET busca_v.sec_cliente = arr_vend[idx].sec_cliente
|
|
LET busca_v.nombre = arr_vend[idx].nombre
|
|
|
|
CLOSE WINDOW busca_1
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_prod1()
|
|
|
|
DEFINE arr_prod DYNAMIC ARRAY OF RECORD
|
|
cod_n INTEGER,
|
|
cod_grupo INTEGER,
|
|
cod_tipo INTEGER,
|
|
cod_sec INTEGER,
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(5)
|
|
END RECORD
|
|
|
|
OPEN WINDOW busca_2 AT 8,4 WITH FORM "ipfmwd001" ATTRIBUTE (BORDER,FORM LINE
|
|
FIRST + 1,PROMPT LINE LAST)
|
|
|
|
CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp
|
|
FROM cod_n,cod_grupo,cod_tipo,cod_sec,descrip_esp
|
|
|
|
LET selec_pt =
|
|
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
|
|
" a.unidad_med FROM iptb00002 a ",
|
|
"WHERE a.status_t IS NULL AND ",criterio CLIPPED," ORDER BY a.descrip_esp "
|
|
|
|
PREPARE comando_p FROM selec_pt
|
|
DECLARE busca_2 CURSOR FOR comando_p
|
|
|
|
LET idx = 1
|
|
FOREACH busca_2 INTO arr_prod[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL SET_COUNT(idx - 1)
|
|
|
|
DISPLAY ARRAY arr_prod TO s_prod.*
|
|
LET idx = ARR_CURR()
|
|
|
|
LET busca_p.cod_n = arr_prod[idx].cod_n
|
|
LET busca_p.cod_grupo = arr_prod[idx].cod_grupo
|
|
LET busca_p.cod_tipo = arr_prod[idx].cod_tipo
|
|
LET busca_p.cod_sec = arr_prod[idx].cod_sec
|
|
LET busca_p.descrip_esp = arr_prod[idx].descrip_esp
|
|
LET busca_p.unidad_med = arr_prod[idx].unidad_med
|
|
# para el precio
|
|
LET p_vetb25.cod_n = arr_prod[idx].cod_n
|
|
LET p_vetb25.cod_grupo = arr_prod[idx].cod_grupo
|
|
LET p_vetb25.cod_tipo = arr_prod[idx].cod_tipo
|
|
LET p_vetb25.cod_sec = arr_prod[idx].cod_sec
|
|
|
|
LET descrip1 = arr_prod[idx].descrip_esp
|
|
LET medida = arr_prod[idx].unidad_med
|
|
|
|
CLOSE WINDOW busca_2
|
|
END FUNCTION
|
|
|
|
FUNCTION despiece()
|
|
DEFINE cetiqueta VARCHAR(20),
|
|
vi INTEGER,
|
|
vtotal_piezas,vdespachado,vdif DEC(12,5),
|
|
vmensaje STRING
|
|
|
|
OPEN WINDOW wdespiece AT 5,3 WITH FORM "ipfmwd010" ATTRIBUTE (BORDER,FORM LINE
|
|
FIRST + 1,PROMPT LINE LAST)
|
|
|
|
DISPLAY BY NAME movi2[p_act].descrip_esp,movi2[p_act].unidad_med
|
|
|
|
CALL despiece.clear()
|
|
IF otros_mov.entrada IS NOT NULL THEN
|
|
|
|
|
|
DECLARE busca_ent CURSOR FOR
|
|
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
|
|
FROM iptb00025 a
|
|
WHERE a.cod_mov = otros_mov.cod_mov1 AND
|
|
a.num_doc = otros_mov.entrada AND
|
|
a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.area = movi2[p_act].area
|
|
UNION
|
|
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
|
|
FROM iptb00025 a
|
|
WHERE a.cod_mov = otros_mov.cod_mov AND
|
|
a.num_doc = tmpnumero AND
|
|
a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.area = movi2[p_act].area
|
|
|
|
LET idx = 1
|
|
FOREACH busca_ent INTO despiece[idx].*
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
ELSE
|
|
|
|
SELECT UNIQUE a.cod_n FROM iptb00025 a
|
|
WHERE a.cod_mov = otros_mov.cod_mov AND
|
|
a.num_doc = otros_mov.num_doc AND
|
|
a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.area = movi2[p_act].area
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
# DEVOLUCION: el despiece que realmente se DESPACHO para esa factura, o sea
|
|
# el de su(s) conduce(s) de salida (iptb00025 de los movs 30/31/55/56 con
|
|
# fact_no = factura). No el de la orden: si la orden no se despacho entera
|
|
# daria un valor errado. Primero con el area de la linea; si no hay, sin area.
|
|
DECLARE busca_despiece_dev CURSOR FOR
|
|
SELECT p.etiqueta,p.cod_n,p.cod_grupo,p.cod_tipo,p.cod_sec,p.lado_1,p.lado_2,p.lado_3,p.cantidad,p.medida
|
|
FROM iptb00025 p
|
|
WHERE p.cod_n = movi2[p_act].cod_n AND
|
|
p.cod_grupo = movi2[p_act].cod_grupo AND
|
|
p.cod_tipo = movi2[p_act].cod_tipo AND
|
|
p.cod_sec = movi2[p_act].cod_sec AND
|
|
p.area = movi2[p_act].area AND
|
|
p.cod_mov IN (30,31,55,56) AND
|
|
p.num_doc IN (SELECT d.num_doc FROM iptb00006 d
|
|
WHERE d.fact_no = otros_mov.fact_no AND d.cod_mov IN (30,31,55,56)
|
|
AND d.status_t IS NULL
|
|
AND d.cod_n = movi2[p_act].cod_n AND d.cod_grupo = movi2[p_act].cod_grupo
|
|
AND d.cod_tipo = movi2[p_act].cod_tipo AND d.cod_sec = movi2[p_act].cod_sec)
|
|
LET idx = 1
|
|
FOREACH busca_despiece_dev INTO despiece[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
IF idx = 1 THEN
|
|
DECLARE busca_despiece_dev2 CURSOR FOR
|
|
SELECT p.etiqueta,p.cod_n,p.cod_grupo,p.cod_tipo,p.cod_sec,p.lado_1,p.lado_2,p.lado_3,p.cantidad,p.medida
|
|
FROM iptb00025 p
|
|
WHERE p.cod_n = movi2[p_act].cod_n AND
|
|
p.cod_grupo = movi2[p_act].cod_grupo AND
|
|
p.cod_tipo = movi2[p_act].cod_tipo AND
|
|
p.cod_sec = movi2[p_act].cod_sec AND
|
|
p.cod_mov IN (30,31,55,56) AND
|
|
p.num_doc IN (SELECT d.num_doc FROM iptb00006 d
|
|
WHERE d.fact_no = otros_mov.fact_no AND d.cod_mov IN (30,31,55,56)
|
|
AND d.status_t IS NULL
|
|
AND d.cod_n = movi2[p_act].cod_n AND d.cod_grupo = movi2[p_act].cod_grupo
|
|
AND d.cod_tipo = movi2[p_act].cod_tipo AND d.cod_sec = movi2[p_act].cod_sec)
|
|
FOREACH busca_despiece_dev2 INTO despiece[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
IF idx = 1 THEN
|
|
CALL fgl_winmessage("DESPIECE",
|
|
"No se encontro el despiece de este producto en los conduces de la factura.",
|
|
"exclamation")
|
|
ELSE
|
|
# Control: la suma de las piezas debe cuadrar con lo despachado de ese
|
|
# producto en los conduces de la factura (conduces viejos pueden tener
|
|
# el despiece duplicado)
|
|
LET vtotal_piezas = 0
|
|
FOR vi = 1 TO idx - 1
|
|
IF despiece[vi].medida IS NOT NULL THEN
|
|
LET vtotal_piezas = vtotal_piezas + despiece[vi].medida
|
|
END IF
|
|
END FOR
|
|
LET vdespachado = 0
|
|
SELECT SUM(d.cantidad_2 * -1) INTO vdespachado FROM iptb00006 d
|
|
WHERE d.fact_no = otros_mov.fact_no AND d.cod_mov IN (30,31,55,56)
|
|
AND d.status_t IS NULL
|
|
AND d.cod_n = movi2[p_act].cod_n AND d.cod_grupo = movi2[p_act].cod_grupo
|
|
AND d.cod_tipo = movi2[p_act].cod_tipo AND d.cod_sec = movi2[p_act].cod_sec
|
|
IF vdespachado IS NULL THEN
|
|
LET vdespachado = 0
|
|
END IF
|
|
LET vdif = vtotal_piezas - vdespachado
|
|
IF vdif < 0 THEN
|
|
LET vdif = vdif * -1
|
|
END IF
|
|
IF vdif > .01 THEN
|
|
LET vmensaje = "El despiece del conduce suma ", vtotal_piezas USING "<<<,<<<,<<&.&&&&&",
|
|
" pero lo despachado de este producto fue ", vdespachado USING "<<<,<<<,<<&.&&&&&", ".",
|
|
"\nRevise las piezas antes de aceptar (el conduce puede tener piezas repetidas)."
|
|
CALL fgl_winmessage("DESPIECE",vmensaje,"exclamation")
|
|
END IF
|
|
END IF
|
|
ELSE
|
|
IF pcontrol_despacho = "SI" AND pnum_req IS NOT NULL THEN
|
|
# Despacho con requisicion: las piezas autorizadas en la requisicion
|
|
# (cctb00027, copia de las piezas de la orden con lo que se despacha).
|
|
# Antes se tomaban TODAS las piezas de la orden (prtb00022) y si la orden
|
|
# tenia mas de ese producto que la requisicion, la cantidad cambiaba
|
|
# (ej. requisicion 17, orden 19 -> el despiece ponia 19).
|
|
DECLARE busca_despiece_req CURSOR FOR
|
|
SELECT c.etiqueta,c.cod_n,c.cod_grupo,c.cod_tipo,
|
|
c.cod_sec,c.lado_1,c.lado_2,c.lado_3,
|
|
c.cantidad_r,c.medida_r
|
|
FROM cctb00027 c
|
|
WHERE c.num_req = pnum_req AND
|
|
c.area = movi2[p_act].area AND
|
|
c.cod_n = movi2[p_act].cod_n AND
|
|
c.cod_grupo = movi2[p_act].cod_grupo AND
|
|
c.cod_tipo = movi2[p_act].cod_tipo AND
|
|
c.cod_sec = movi2[p_act].cod_sec
|
|
LET idx = 1
|
|
FOREACH busca_despiece_req INTO despiece[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
ELSE
|
|
DECLARE busca_despiece CURSOR FOR
|
|
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
|
|
FROM prtb00022 a
|
|
WHERE
|
|
a.num_oc =ordenx AND
|
|
a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.area = movi2[p_act].area
|
|
LET idx = 1
|
|
|
|
FOREACH busca_despiece INTO despiece[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
END IF
|
|
ELSE
|
|
IF pcontrol_despacho <> "SI" THEN
|
|
DECLARE busca_despiece1 CURSOR FOR
|
|
SELECT b.descripcion,a.cod_n,a.cod_grupo,a.cod_tipo,
|
|
a.cod_sec,a.lado_1,a.lado_2,a.lado_3, a.cantidad,a.medida
|
|
FROM prtb00022 a,vetb00026 b
|
|
WHERE a.num_oc = otros_mov.conduce_no AND
|
|
a.area = movi2[p_act].area AND
|
|
a.cod_n = movi2[p_act].cod_n AND
|
|
a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND
|
|
a.cod_sec = movi2[p_act].cod_sec AND
|
|
CAST(a.etiqueta AS SMALLINT) = b.codid
|
|
LET idx = 1
|
|
FOREACH busca_despiece1 INTO despiece[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
ELSE
|
|
# Las piezas salen directo de la requisicion (cctb00027 ya trae etiqueta
|
|
# y lados). Antes se unia con prtb00022 solo por producto y cada pieza
|
|
# salia repetida tantas veces como piezas tuviera (4 x 4 = 16 filas).
|
|
DECLARE busca_despiece12 CURSOR FOR
|
|
SELECT c.etiqueta,c.cod_n,c.cod_grupo,c.cod_tipo,
|
|
c.cod_sec,c.lado_1,c.lado_2,c.lado_3,
|
|
c.cantidad_r,c.medida_r
|
|
FROM cctb00027 c
|
|
WHERE c.num_req = pnum_req AND
|
|
c.area = movi2[p_act].area AND
|
|
c.cod_n = movi2[p_act].cod_n AND
|
|
c.cod_grupo = movi2[p_act].cod_grupo AND
|
|
c.cod_tipo = movi2[p_act].cod_tipo AND
|
|
c.cod_sec = movi2[p_act].cod_sec
|
|
|
|
LET idx = 1
|
|
FOREACH busca_despiece12 INTO despiece[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
|
|
END IF
|
|
END IF
|
|
LET despiece[1].cod_n = movi2[p_act].cod_n
|
|
LET despiece[1].cod_grupo = movi2[p_act].cod_grupo
|
|
LET despiece[1].cod_tipo = movi2[p_act].cod_tipo
|
|
LET despiece[1].cod_sec = movi2[p_act].cod_sec
|
|
|
|
CALL set_count(idx-1)
|
|
INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.*
|
|
BEFORE ROW
|
|
LET curr1 = arr_curr()
|
|
LET fila = scr_line()
|
|
|
|
CALL cetiquetas()
|
|
|
|
LET despiece[curr1].cod_n = movi2[p_act].cod_n
|
|
LET despiece[curr1].cod_grupo = movi2[p_act].cod_grupo
|
|
LET despiece[curr1].cod_tipo = movi2[p_act].cod_tipo
|
|
LET despiece[curr1].cod_sec = movi2[p_act].cod_sec
|
|
|
|
IF curr1 > 1 THEN
|
|
IF despiece[curr1].etiqueta IS NULL THEN
|
|
LET despiece[curr1].etiqueta = despiece[curr1-1].etiqueta
|
|
END IF
|
|
END IF
|
|
DISPLAY cetiqueta TO sdespiece[fila].etiqueta
|
|
|
|
DISPLAY movi2[p_act].cod_n TO sdespiece[fila].cod_n
|
|
DISPLAY movi2[p_act].cod_grupo TO sdespiece[fila].cod_grupo
|
|
DISPLAY movi2[p_act].cod_tipo TO sdespiece[fila].cod_tipo
|
|
DISPLAY movi2[p_act].cod_sec TO sdespiece[fila].cod_sec
|
|
|
|
AFTER FIELD cantidad
|
|
|
|
IF movi2[p_act].unidad_med = "M2" THEN
|
|
LET despiece[curr1].medida =
|
|
despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2)
|
|
END IF
|
|
|
|
IF movi2[p_act].unidad_med = "M3" THEN
|
|
LET despiece[curr1].medida =
|
|
despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2 * despiece[curr1].lado_3)
|
|
END IF
|
|
|
|
IF movi2[p_act].unidad_med = "ML" THEN
|
|
LET despiece[curr1].medida =
|
|
despiece[curr1].cantidad * despiece[curr1].lado_1
|
|
LET despiece[curr1].lado_2 = 0
|
|
END IF
|
|
|
|
IF movi2[p_act].unidad_med = "UD" OR movi2[p_act].unidad_med = "GL" THEN
|
|
LET despiece[curr1].medida = despiece[curr1].cantidad
|
|
END IF
|
|
DISPLAY despiece[curr1].medida TO sdespiece[fila].medida
|
|
AFTER ROW
|
|
IF despiece[curr1].medida IS NULL AND despiece[curr1].lado_1 IS NOT NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD lado_1
|
|
END IF
|
|
LET total_medida = 0
|
|
FOR idx = 1 TO arr_count()
|
|
IF despiece[idx].medida IS NOT NULL THEN
|
|
LET total_medida = total_medida + despiece[idx].medida
|
|
END IF
|
|
|
|
END FOR
|
|
DISPLAY BY NAME total_medida
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT INPUT
|
|
END IF
|
|
LET total_medida = 0
|
|
FOR idx = 1 TO arr_count()
|
|
IF despiece[idx].medida IS NOT NULL THEN
|
|
LET total_medida = total_medida + despiece[idx].medida
|
|
END IF
|
|
END FOR
|
|
DISPLAY BY NAME total_medida
|
|
END INPUT
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
CLOSE WINDOW wdespiece
|
|
RETURN
|
|
END IF
|
|
DELETE FROM iptb00025 WHERE num_doc = otros_mov.num_doc AND
|
|
cod_mov = otros_mov.cod_mov AND
|
|
cod_n = movi2[p_act].cod_n AND
|
|
cod_grupo = movi2[p_act].cod_grupo AND
|
|
cod_tipo = movi2[p_act].cod_tipo AND
|
|
cod_sec = movi2[p_act].cod_sec AND
|
|
area = movi2[p_act].area
|
|
LET total_medida = 0
|
|
FOR idx = 1 TO arr_count()
|
|
IF despiece[idx].medida IS NOT NULL THEN
|
|
|
|
INSERT INTO iptb00025(etiqueta,cod_mov,num_doc,cod_n,cod_grupo,cod_tipo,cod_sec,
|
|
lado_1,lado_2,lado_3,cantidad,medida,us_crea,fech_crea,bodega,area)
|
|
VALUES(despiece[idx].etiqueta,otros_mov.cod_mov,otros_mov.num_doc,
|
|
movi2[p_act].cod_n,movi2[p_act].cod_grupo,
|
|
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
|
|
despiece[idx].lado_1,despiece[idx].lado_2,
|
|
despiece[idx].lado_3,despiece[idx].cantidad,
|
|
despiece[idx].medida,usuarios,getdate(),
|
|
otros_mov.bodega,movi2[p_act].area)
|
|
LET total_medida = total_medida + despiece[idx].medida
|
|
END IF
|
|
END FOR
|
|
LET movi2[p_act].cantidad_1 = total_medida
|
|
CLOSE WINDOW wdespiece
|
|
END FUNCTION
|
|
|
|
FUNCTION consulta()
|
|
|
|
CONSTRUCT CRITERIO ON iptb00006.num_Doc,iptb00006.cod_mov,iptb00006.fecha,iptb00006.conduce_no,
|
|
iptb00006.cod_sp,iptb00006.cod_sp_Sec,iptb00006.bodega
|
|
FROM num_doc,cod_mov,fecha,conduce_no,cod_sp,cod_sp_sec,bodega
|
|
CALL movi2.clear()
|
|
|
|
LET selec =
|
|
"SELECT DISTINCT iptb00006.num_doc, iptb00006.cod_cia , iptb00006.cod_mov , iptb00006.fact_no, iptb00006.cod_transp, ",
|
|
"iptb00006.sec_transp, iptb00006.cod_tarifa, iptb00006.placa , CONVERT(CHAR(10),iptb00006.fecha,103), iptb00006.conduce_no,",
|
|
"iptb00005.descrip_mov, iptb00006.bodega , iptb00006.bodega_d, iptb00006.detalle, iptb00006.cod_sp, ",
|
|
"iptb00006.cod_sp_sec, iptb00026.departamento, adtb00001.nom_dpto, iptb00028.cod_mov1,iptb00028.entrada ",
|
|
" ' ',' ',iptb00006.num_req,iptb00006.sec_vend ",
|
|
" FROM adtb00001 INNER JOIN ",
|
|
" iptb00026 ON adtb00001.departamento = iptb00026.departamento RIGHT OUTER JOIN ",
|
|
" iptb00006 INNER JOIN ",
|
|
" iptb00048 ON iptb00006.bodega = iptb00048.bodega AND iptb00048.usuario ='",usuarios,"'",
|
|
" LEFT OUTER JOIN iptb00005 ON iptb00006.cod_mov = iptb00005.cod_mov ON ",
|
|
" iptb00026.num_doc = iptb00006.num_doc AND ",
|
|
" iptb00026.cod_mov = iptb00006.cod_mov LEFT OUTER JOIN ",
|
|
" iptb00028 ON iptb00006.num_doc = iptb00028.num_doc AND iptb00006.cod_mov = iptb00028.cod_mov ",
|
|
"WHERE ", criterio CLIPPED, " and IPTB00006.status_t IS NULL and iptb00006.fecha > '01/01/2009'"
|
|
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE busca4 SCROLL CURSOR WITH HOLD FOR comando
|
|
OPEN busca4
|
|
|
|
FETCH FIRST busca4 INTO otros_mov.*,pnum_req,psec_vend
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL busca_info()
|
|
DISPLAY BY NAME otros_mov.num_doc,otros_mov.cod_cia,otros_mov.cod_mov,otros_mov.fact_no,otros_mov.cod_transp,otros_mov.sec_transp,otros_mov.cod_tarifa,otros_mov.placa,otros_mov.fecha,otros_mov.conduce_no,otros_mov.bodega,otros_mov.bodega_destino,otros_mov.detalle,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.departamento,otros_mov.nombre_depto,otros_mov.cod_mov1,otros_mov.entrada,otros_mov.descrip_mov1,otros_mov.descrip4,pnum_req,psec_vend
|
|
|
|
MENU "Busqueda "
|
|
COMMAND "Siguiete " "Sieguiente Registro Cumpla Condicion"
|
|
FETCH NEXT busca4 INTO otros_mov.*,pnum_req,psec_vend
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
CALL busca_info()
|
|
DISPLAY BY NAME otros_mov.num_doc,otros_mov.cod_cia,otros_mov.cod_mov,otros_mov.fact_no,otros_mov.cod_transp,otros_mov.sec_transp,otros_mov.cod_tarifa,otros_mov.placa,otros_mov.fecha,otros_mov.conduce_no,otros_mov.bodega,otros_mov.bodega_destino,otros_mov.detalle,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.departamento,otros_mov.nombre_depto,otros_mov.cod_mov1,otros_mov.entrada,otros_mov.descrip_mov1,otros_mov.descrip4,pnum_req,psec_vend
|
|
|
|
|
|
COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS busca4 INTO otros_mov.*,pnum_req,psec_vend
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
CALL busca_info()
|
|
DISPLAY BY NAME otros_mov.num_doc,otros_mov.cod_cia,otros_mov.cod_mov,otros_mov.fact_no,otros_mov.cod_transp,otros_mov.sec_transp,otros_mov.cod_tarifa,otros_mov.placa,otros_mov.fecha,otros_mov.conduce_no,otros_mov.bodega,otros_mov.bodega_destino,otros_mov.detalle,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.departamento,otros_mov.nombre_depto,otros_mov.cod_mov1,otros_mov.entrada,otros_mov.descrip_mov1,otros_mov.descrip4,pnum_req,psec_vend
|
|
|
|
|
|
|
|
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST busca4 INTO otros_mov.*,pnum_req,psec_vend
|
|
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
CALL busca_info()
|
|
DISPLAY BY NAME otros_mov.num_doc,otros_mov.cod_cia,otros_mov.cod_mov,otros_mov.fact_no,otros_mov.cod_transp,otros_mov.sec_transp,otros_mov.cod_tarifa,otros_mov.placa,otros_mov.fecha,otros_mov.conduce_no,otros_mov.bodega,otros_mov.bodega_destino,otros_mov.detalle,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.departamento,otros_mov.nombre_depto,otros_mov.cod_mov1,otros_mov.entrada,otros_mov.descrip_mov1,otros_mov.descrip4,psec_vend
|
|
|
|
|
|
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST busca4 INTO otros_mov.*,pnum_req,psec_vend
|
|
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
CALL busca_info()
|
|
DISPLAY BY NAME otros_mov.num_doc,otros_mov.cod_cia,otros_mov.cod_mov,otros_mov.fact_no,otros_mov.cod_transp,otros_mov.sec_transp,otros_mov.cod_tarifa,otros_mov.placa,otros_mov.fecha,otros_mov.conduce_no,otros_mov.bodega,otros_mov.bodega_destino,otros_mov.detalle,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.departamento,otros_mov.nombre_depto,otros_mov.cod_mov1,otros_mov.entrada,otros_mov.descrip_mov1,otros_mov.descrip4,pnum_req,psec_vend
|
|
|
|
COMMAND "Items" "Busca Items"
|
|
|
|
DECLARE busca1 CURSOR FOR
|
|
SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
|
|
a.cantidad_1,a.cantidad_2,'0',b.unidad_med,b.descrip_esp
|
|
FROM iptb00006 a,iptb00002 b
|
|
WHERE a.num_doc = otros_mov.num_doc AND
|
|
a.cod_mov = otros_mov.cod_mov AND
|
|
a.cod_n = b.cod_n AND
|
|
a.cod_grupo = b.cod_grupo AND
|
|
a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_Sec AND
|
|
a.bodega = otros_mov.bodega AND
|
|
a.fech_crea > '01/01/2009 08:00'
|
|
|
|
|
|
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
|
|
|
|
LET idx = 1
|
|
FOREACH busca1 INTO movi2[idx].area, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_1, movi2[idx].cantidad_2, movi2[idx].cantidad_p, movi2[idx].unidad_med, movi2[idx].descrip_esp, movi2[idx].codigo_bloque, movi2[idx].id_kit
|
|
IF movi2[idx].cantidad_2 < 0 THEN
|
|
LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1
|
|
END IF
|
|
|
|
SELECT SUM(a.cantidad) INTO cantidad_conduce FROM prtb00013 a
|
|
WHERE a.cod_n = movi2[idx].cod_n AND
|
|
a.cod_grupo = movi2[idx].cod_grupo AND
|
|
a.cod_tipo = movi2[idx].cod_tipo AND
|
|
a.cod_sec = movi2[idx].cod_sec AND
|
|
a.num_oc = otros_mov.conduce_no AND
|
|
a.status_t IS NULL
|
|
|
|
LET cantidad_orden =0
|
|
IF otros_mov.cod_mov = 30 AND otros_mov.cod_mov = 31 OR otros_mov.cod_mov = 55 THEN
|
|
SELECT SUM(a.cantidad_2*-1) INTO cantidad_orden
|
|
FROM iptb00006 a
|
|
WHERE a.cod_n=movi2[idx].cod_n and a.cod_grupo=movi2[idx].cod_grupo
|
|
and a.cod_tipo=movi2[idx].cod_tipo and a.cod_sec=movi2[idx].cod_sec
|
|
and a.conduce_no = otros_mov.conduce_no and cod_mov in (30,31,55)
|
|
and a.status_t IS NULL
|
|
END IF
|
|
|
|
IF cantidad_orden IS NULL THEN
|
|
LET cantidad_orden = 0
|
|
END IF
|
|
|
|
IF cantidad_conduce IS NULL THEN
|
|
LET cantidad_conduce = 0
|
|
END IF
|
|
|
|
LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY movi2 TO s_movi1.*
|
|
|
|
PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2
|
|
|
|
IF opt2 = "S" OR opt2 = "s" THEN
|
|
|
|
|
|
-- Carga el .4rp grafico nuevo (ipprmt044.4rp) en vez del default por
|
|
-- nombre del report. El cuerpo de formu4 ahora usa PRINTX.
|
|
IF fgl_report_loadCurrentSettings("ipprmt044.4rp") THEN
|
|
CALL fgl_report_selectDevice("PDF") -- el formulario sale en PDF
|
|
CALL fgl_report_selectPreview(TRUE)
|
|
LET handler = fgl_report_commitCurrentSettings()
|
|
ELSE
|
|
LET handler = NULL
|
|
END IF
|
|
START REPORT formu4 TO XML HANDLER handler
|
|
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF movi2[idx].cod_sec IS NOT NULL THEN
|
|
IF movi2[idx].cantidad_2 IS NOT NULL AND
|
|
movi2[idx].cantidad_2 != 0 THEN
|
|
|
|
OUTPUT TO REPORT formu4(otros_mov.*,movi2[idx].*)
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
FINISH REPORT formu4
|
|
END IF
|
|
CALL movi2.clear()
|
|
|
|
COMMAND "Retornar" "Retorna al menu anterior"
|
|
CLEAR FORM
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
FUNCTION busca_info()
|
|
|
|
SELECT nombre INTO descrip2 FROM vetb00015
|
|
WHERE cod_transp=otros_mov.cod_transp and
|
|
sec_transp=otros_mov.sec_transp and
|
|
status_t is null
|
|
|
|
SELECT nombre INTO otros_mov.descrip4 FROM vetb00004
|
|
WHERE tipo_cliente = otros_mov.cod_sp and
|
|
sec_cliente = otros_mov.cod_sp_sec
|
|
|
|
|
|
SELECT a.descrip_mov INTO otros_mov.descrip_mov1 FROM iptb00005 a
|
|
WHERE a.cod_mov = otros_mov.cod_mov1
|
|
|
|
|
|
SELECT a.tipo_cliente,a.sec_cliente,a.cerrada,a.cotizacion_no
|
|
INTO otros_mov.cod_sp,otros_mov.cod_sp_sec,pcerrada,xcotizacion
|
|
FROM prtb00012 a
|
|
WHERE a.num_oc = otros_mov.conduce_no AND
|
|
a.status_t IS NULL
|
|
|
|
|
|
SELECT a.mensaje INTO direccion_p FROM cctb00029 a
|
|
WHERE a.num_req = pnum_req
|
|
|
|
DISPLAY BY NAME descrip2,otros_mov.descrip4,otros_mov.descrip_mov1,direccion_p
|
|
END FUNCTION
|
|
|
|
FUNCTION actualiza_st(forden)
|
|
DEFINE forden INTEGER,
|
|
prod_total,vent_total DEC(12,5),
|
|
prtb09 RECORD LIKE prtb00009.*
|
|
|
|
SELECT SUM(a.cantidad) INTO prod_total FROM prtb00013 a
|
|
WHERE a.num_oc = forden
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET prod_total = 0
|
|
END IF
|
|
LET vent_total = 0
|
|
SELECT SUM(b.cantidad_2) INTO vent_total
|
|
FROM IPTB00006 a
|
|
WHERE a.conduce_no = forden AND CONVERT(CHAR(10),a.fecha,101) > "31122006"
|
|
AND a.cod_sp = otros_mov.cod_sp
|
|
AND a.sec_cliente = otros_mov.cod_sp_Sec
|
|
AND a.cod_mov in (30,31,55,12,13)
|
|
AND a.status_t IS NULL
|
|
|
|
|
|
IF vent_total IS NULL THEN
|
|
LET vent_total = 0
|
|
END IF
|
|
|
|
|
|
#-> Actualiza la fecha de cierre de la orden de corte vg Wednesday, 17 January, 200112:42:33 PM
|
|
IF vent_total = prod_total THEN
|
|
UPDATE prtb00012 SET fecha_cierre = otros_mov.fecha,
|
|
cerrada = "S"
|
|
WHERE @num_oc = forden
|
|
AND @tipo_cliente = otros_mov.cod_sp
|
|
AND @sec_cliente = otros_mov.cod_sp_Sec
|
|
|
|
LET prtb09.num_oc = forden
|
|
LET prtb09.fecha = otros_mov.fecha
|
|
LET prtb09.pendiente = "N"
|
|
LET prtb09.detalle = "CIERRE DE ORDEN DE PRODUCCION SEGUN CONDUCE # ",otros_mov.num_doc USING "<<<<<<<",
|
|
" DE FECHA : ",otros_mov.fecha USING "dd/mm/yyyy"
|
|
|
|
INSERT INTO prtb00009 VALUES (prtb09.num_oc,prtb09.fecha,null,prtb09.pendiente,
|
|
prtb09.detalle,NULL,USER,getdate(),NULL,NULL)
|
|
ELSE
|
|
LET prtb09.num_oc = forden
|
|
LET prtb09.fecha = otros_mov.fecha
|
|
LET prtb09.pendiente = "N"
|
|
LET prtb09.detalle = "DESPACHO ",otros_mov.descrip_mov CLIPPED,
|
|
" SEGUN CONDUCE # ",otros_mov.num_doc USING "<<<<<<<",
|
|
" DE FECHA : ",otros_mov.fecha USING "dd/mm/yyyy"," CONTIENE PRODUCTO(S): ",
|
|
selec_pt CLIPPED
|
|
|
|
INSERT INTO prtb00009 VALUES (prtb09.num_oc,prtb09.fecha,null,prtb09.pendiente,
|
|
prtb09.detalle,NULL,USER,getdate(),NULL,NULL)
|
|
|
|
END IF
|
|
|
|
END FUNCTION
|
|
FUNCTION visualizacion_despacho()
|
|
DEFINE arr_autoriza_desp DYNAMIC ARRAY OF RECORD
|
|
num_oc INT,
|
|
cliente CHAR(66),
|
|
fecha CHAR(10),
|
|
tipo_cliente SMALLINT,
|
|
sec_cliente INT,
|
|
num_req INT
|
|
END RECORD
|
|
OPEN WINDOW w1 AT 10,5 WITH FORM "ipfmwd011"
|
|
|
|
DECLARE busca_autoriza CURSOR FOR
|
|
|
|
SELECT DISTINCT a.num_oc,rtrim(CAST(b.tipo_cliente AS CHAR(2)) +
|
|
'-'+CAST(b.sec_cliente AS CHAR(6)) +' '+b.nombre),
|
|
CAST (d.fecha AS CHAR(10)) AS FECHA,
|
|
b.tipo_cliente,b.sec_cliente,a.num_req
|
|
FROM cctb00026 a,vetb00004 b,prtb00012 c,cctb00025 d
|
|
WHERE c.tipo_cliente = b.tipo_cliente AND
|
|
c.sec_cliente = b.sec_cliente AND
|
|
a.num_oc = c.num_oc AND
|
|
a.cotizacion_no = c.cotizacion_no AND
|
|
c.cerrada = 'N' AND
|
|
A.num_req = d.num_req AND
|
|
d.estado in ('AUTORIZADA') AND d.estado_despacho IN ('DESPACHO PARCIAL','NO DESPACHADA') and
|
|
c.status_t is null and a.status_t IS NULL
|
|
ORDER BY fecha
|
|
|
|
LET idx = 1
|
|
FOREACH busca_autoriza INTO arr_autoriza_desp[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY arr_autoriza_desp TO s_despachos.*
|
|
AFTER DISPLAY
|
|
LET idx = arr_curr()
|
|
IF Int_flag THEN
|
|
|
|
EXIT DISPLAY
|
|
|
|
END IF
|
|
END DISPLAY
|
|
CLOSE WINDOW w1
|
|
IF int_flag THEN
|
|
|
|
RETURN 0,0,0,0
|
|
ELSE
|
|
RETURN arr_autoriza_desp[idx].num_oc,
|
|
arr_autoriza_desp[idx].tipo_cliente,
|
|
arr_autoriza_desp[idx].sec_cliente,
|
|
arr_autoriza_desp[idx].num_req
|
|
|
|
END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION existencia(pcodn,pcodgrupo,pcodtipo,pcodsec,cantidad,pid,xbodega)
|
|
DEFINE pcodn,pcodgrupo,pcodtipo,pcodsec,pid,xbodega SMALLINT,
|
|
pexistencia,pexistencia1,cantidad DEC(12,5),
|
|
verdad BOOLEAN
|
|
|
|
LET verdad = FALSE
|
|
SELECT a.cod_n FROM iptbexistencia a
|
|
WHERE a.us_crea = usuarios AND
|
|
a.num_doc = tmpnueroExistencia AND
|
|
a.cod_n = pcodn AND
|
|
a.cod_grupo = pcodgrupo AND
|
|
a.cod_tipo = pcodtipo AND
|
|
a.cod_sec = pcodsec AND
|
|
a.id = pid
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
INSERT INTO iptbexistencia VALUES (pid,pcodn,pcodgrupo,pcodtipo,pcodsec,tmpnueroExistencia,cantidad,getdate(),usuarios)
|
|
ELSE
|
|
UPDATE iptbexistencia SET iptbexistencia.cantidad = cantidad
|
|
WHERE us_crea = usuarios AND
|
|
num_doc = tmpnueroExistencia AND
|
|
cod_n = pcodn AND
|
|
cod_grupo = pcodgrupo AND
|
|
cod_tipo = pcodtipo AND
|
|
cod_sec = pcodsec AND
|
|
id = pid
|
|
|
|
END IF
|
|
|
|
SELECT SUM(a.cantidad) INTO pexistencia1
|
|
FROM iptbexistencia a
|
|
WHERE a.cod_n=Pcodn and
|
|
a.cod_grupo=Pcodgrupo
|
|
and a.cod_tipo=Pcodtipo and
|
|
a.cod_sec=Pcodsec AND
|
|
a.us_crea = usuarios
|
|
|
|
|
|
SELECT SUM(a.cantidad_2) INTO pexistencia
|
|
FROM iptb00006 a
|
|
WHERE a.cod_n=Pcodn and
|
|
a.cod_grupo=Pcodgrupo
|
|
and a.cod_tipo=Pcodtipo and
|
|
a.cod_sec=Pcodsec AND
|
|
a.bodega = xbodega
|
|
and a.status_t IS NULL
|
|
|
|
IF pexistencia IS NULL THEN
|
|
LET pexistencia = 0
|
|
END IF
|
|
IF pexistencia1 IS NULL THEN
|
|
LET pexistencia1 = 0
|
|
END IF
|
|
|
|
IF pexistencia1 > pexistencia THEN
|
|
LET verdad = TRUE
|
|
END IF
|
|
|
|
RETURN verdad
|
|
END FUNCTION
|
|
|
|
FUNCTION cetiquetas()
|
|
DEFINE ketiquetas SMALLINT, detiquetas CHAR(30)
|
|
|
|
LET petiquetas = ui.combobox.forname("formonly.etiqueta")
|
|
|
|
DECLARE betiquetas CURSOR FOR
|
|
SELECT a.codid,a.descripcion FROM vetb00026 a
|
|
ORDER BY a.descripcion
|
|
CALL petiquetas.clear()
|
|
|
|
FOREACH betiquetas INTO ketiquetas,detiquetas
|
|
CALL petiquetas.additem(ketiquetas,detiquetas)
|
|
END FOREACH
|
|
|
|
END FUNCTION
|
|
|
|
# Llena el combobox "Codigo Movimiento" (iptb00006.cod_mov) con los movimientos
|
|
# de iptb00005 (codigo - descripcion) para poder buscarlos, en vez de teclear el codigo.
|
|
{FUNCTION cmovimientos()
|
|
DEFINE kmov SMALLINT, dmov CHAR(40), lmov CHAR(50)
|
|
DEFINE pmov ui.ComboBox
|
|
|
|
LET pmov = ui.ComboBox.forName("iptb00006.cod_mov")
|
|
IF pmov IS NULL THEN
|
|
RETURN
|
|
END IF
|
|
|
|
DECLARE bmovim CURSOR FOR
|
|
SELECT a.cod_mov, a.descrip_mov FROM iptb00005 a
|
|
ORDER BY a.cod_mov
|
|
CALL pmov.clear()
|
|
|
|
FOREACH bmovim INTO kmov, dmov
|
|
LET lmov = kmov USING "<<<<", " - ", dmov CLIPPED
|
|
CALL pmov.addItem(kmov, lmov)
|
|
END FOREACH
|
|
END FUNCTION}
|
|
|
|
FUNCTION control_requisicion(cantidad_Trx,xcodn,xcodgrupo,xcodtipo,xcodsec,xkit)
|
|
DEFINE cantidad_Trx dec(12,5),
|
|
xcodn,xcodgrupo,xcodtipo,xcodsec SMALLINT,
|
|
xkit INT
|
|
|
|
LET cantidadrequisicion = 0
|
|
SELECT SUM(a.cantidad) INTO cantidadRequisicion
|
|
FROM cctb00026 a
|
|
WHERE
|
|
a.cod_n = xcodn AND
|
|
a.cod_grupo = xcodgrupo AND
|
|
a.cod_tipo = xcodtipo AND
|
|
a.cod_sec = xcodsec AND
|
|
a.num_req = pnum_req AND
|
|
a.status_t IS NULL
|
|
LET Rcantidad_requisicion = 0
|
|
SELECT SUM(a.cantidad_2 * -1) INTO Rcantidad_requisicion # despachos se graban en negativo
|
|
FROM iptb00006 a
|
|
WHERE
|
|
|
|
a.cod_n = xcodn AND
|
|
a.cod_grupo = xcodgrupo AND
|
|
a.cod_tipo = xcodtipo AND
|
|
a.cod_sec = xcodsec AND
|
|
a.cod_mov IN (30,31,55,56,12,13) and
|
|
a.num_req = pnum_req AND
|
|
a.status_t IS NULL
|
|
IF Rcantidad_requisicion IS NULL THEN
|
|
LET Rcantidad_requisicion=0
|
|
END IF
|
|
|
|
IF cantidadRequisicion IS NULL THEN
|
|
LET cantidadRequisicion = 0
|
|
END IF
|
|
# .01 = tolerancia de redondeo (cctb00026.cantidad solo guarda 4 decimales)
|
|
IF (Rcantidad_requisicion)+cantidad_Trx > cantidadRequisicion + .01 THEN
|
|
RETURN FALSE
|
|
ELSE
|
|
RETURN true
|
|
END IF
|
|
|
|
|
|
END FUNCTION
|
|
|
|
# Cantidad pedida en la orden (ordenx) de un producto y lo ya despachado.
|
|
# Pedido: prtb00013 (o prtb00030 si es kit). Despachado: conduces de salida
|
|
# (30,31,55,56) neto de devoluciones/averias (12,13,43) en iptb00006.
|
|
FUNCTION pendiente_orden(pcod_n,pcod_grupo,pcod_tipo,pcod_sec,pid_kit)
|
|
DEFINE pcod_n,pcod_grupo,pcod_tipo,pcod_sec,pid_kit INTEGER,
|
|
vpedido,vdespachado DEC(12,5)
|
|
|
|
LET vpedido = 0
|
|
IF pid_kit IS NULL THEN
|
|
SELECT SUM(a.cantidad) INTO vpedido FROM prtb00013 a
|
|
WHERE a.cod_n = pcod_n AND a.cod_grupo = pcod_grupo AND
|
|
a.cod_tipo = pcod_tipo AND a.cod_sec = pcod_sec AND
|
|
a.num_oc = ordenx AND a.status_t IS NULL
|
|
ELSE
|
|
SELECT SUM(a.cantidad) INTO vpedido FROM prtb00030 a
|
|
WHERE a.cod_n = pcod_n AND a.cod_grupo = pcod_grupo AND
|
|
a.cod_tipo = pcod_tipo AND a.cod_sec = pcod_sec AND
|
|
a.num_oc = ordenx
|
|
END IF
|
|
IF vpedido IS NULL THEN
|
|
LET vpedido = 0
|
|
END IF
|
|
|
|
LET vdespachado = 0
|
|
SELECT SUM(a.cantidad_2*-1) INTO vdespachado FROM iptb00006 a
|
|
WHERE a.cod_n = pcod_n AND a.cod_grupo = pcod_grupo AND
|
|
a.cod_tipo = pcod_tipo AND a.cod_sec = pcod_sec AND
|
|
a.num_oc = ordenx AND
|
|
a.cod_mov IN (30,31,55,56,12,13,43) AND
|
|
a.status_t IS NULL
|
|
IF vdespachado IS NULL THEN
|
|
LET vdespachado = 0
|
|
END IF
|
|
RETURN vpedido,vdespachado
|
|
END FUNCTION
|
|
|
|
# TRUE si la cantidad del renglon (mas lo que llevan otros renglones del mismo
|
|
# producto en este documento) cabe en lo pendiente de la orden.
|
|
FUNCTION cantidad_cabe_en_orden(prow)
|
|
DEFINE prow,i INTEGER,
|
|
votros,vpedido,vdespachado,vpendiente DEC(12,5),
|
|
vmensaje STRING
|
|
|
|
CALL pendiente_orden(movi2[prow].cod_n,movi2[prow].cod_grupo,
|
|
movi2[prow].cod_tipo,movi2[prow].cod_sec,
|
|
movi2[prow].id_kit)
|
|
RETURNING vpedido,vdespachado
|
|
LET vpendiente = vpedido - vdespachado
|
|
|
|
LET votros = 0
|
|
FOR i = 1 TO movi2.getLength()
|
|
IF i <> prow AND movi2[i].cantidad_2 IS NOT NULL AND
|
|
movi2[i].cod_n = movi2[prow].cod_n AND movi2[i].cod_grupo = movi2[prow].cod_grupo AND
|
|
movi2[i].cod_tipo = movi2[prow].cod_tipo AND movi2[i].cod_sec = movi2[prow].cod_sec THEN
|
|
LET votros = votros + movi2[i].cantidad_2
|
|
END IF
|
|
END FOR
|
|
|
|
IF movi2[prow].cantidad_2 + votros > vpendiente + .01 THEN # .01 = tolerancia de redondeo
|
|
LET vmensaje = "La cantidad excede lo pendiente de la orden ", ordenx USING "<<<<<<<<<", ".",
|
|
"\nPedido en la orden: ", vpedido USING "<<<,<<<,<<&.&&&&&",
|
|
"\nYa despachado: ", vdespachado USING "<<<,<<<,<<&.&&&&&",
|
|
"\nPendiente: ", vpendiente USING "<<<,<<<,<<&.&&&&&"
|
|
IF votros > 0 THEN
|
|
LET vmensaje = vmensaje, "\nEn otras lineas de este documento: ", votros USING "<<<,<<<,<<&.&&&&&"
|
|
END IF
|
|
LET vmensaje = vmensaje, "\nDigitado: ", movi2[prow].cantidad_2 USING "<<<,<<<,<<&.&&&&&"
|
|
CALL fgl_winmessage("CANTIDAD",vmensaje,"stop")
|
|
RETURN FALSE
|
|
END IF
|
|
RETURN TRUE
|
|
END FUNCTION
|
|
|
|
# Despues de grabar un movimiento (dentro de la misma transaccion):
|
|
# - Requisicion (pnum_req): DESPACHADA si ya se despacho todo lo pedido en
|
|
# ella (cctb00026), si no DESPACHO PARCIAL (cctb00025.estado_despacho).
|
|
# - Orden (ordenx): si lo despachado (conduces 30,31,55,56 neto de
|
|
# devoluciones 12,13) cubre todo lo pedido (prtb00013), la orden queda
|
|
# cerrada = "S" / DESPACHADA y ya no deja despachar mas contra ella.
|
|
# - Devoluciones (12/13): la requisicion vuelve a DESPACHO PARCIAL y, si la
|
|
# devolucion es parcial, la orden se reabre (cerrada = 'N').
|
|
# Portado del ipprmt044 que decomarmol usaba hasta junio 2026.
|
|
FUNCTION cierre_orden_requisicion()
|
|
DEFINE vpedido_req,vdespachado_req,vpedido,vdespachado,vdif DEC(12,5)
|
|
|
|
IF pnum_req IS NOT NULL THEN
|
|
LET vpedido_req = 0
|
|
SELECT ISNULL(SUM(a.cantidad),0) INTO vpedido_req
|
|
FROM cctb00026 a
|
|
WHERE a.num_req = pnum_req AND a.status_t IS NULL
|
|
LET vdespachado_req = 0
|
|
SELECT ISNULL(SUM(a.cantidad_2 * -1),0) INTO vdespachado_req
|
|
FROM iptb00006 a
|
|
WHERE a.num_req = pnum_req AND a.status_t IS NULL
|
|
IF vpedido_req - vdespachado_req < .05 THEN
|
|
UPDATE cctb00025 SET estado_despacho = 'DESPACHADA',
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_req = pnum_req
|
|
ELSE
|
|
UPDATE cctb00025 SET estado_despacho = 'DESPACHO PARCIAL',
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_req = pnum_req
|
|
END IF
|
|
END IF
|
|
|
|
IF ordenx IS NULL THEN
|
|
RETURN
|
|
END IF
|
|
|
|
LET vpedido = 0
|
|
SELECT ISNULL(SUM(a.cantidad),0) INTO vpedido
|
|
FROM prtb00013 a
|
|
WHERE a.num_oc = ordenx
|
|
LET vdespachado = 0
|
|
SELECT ISNULL(SUM(a.cantidad_2 * -1),0) INTO vdespachado
|
|
FROM iptb00006 a
|
|
WHERE a.num_oc = ordenx
|
|
AND a.cod_mov IN (12,13,30,31,55,56)
|
|
AND a.status_t IS NULL
|
|
LET vdif = vpedido - vdespachado
|
|
IF vdif < 0 THEN
|
|
LET vdif = vdif * -1
|
|
END IF
|
|
|
|
IF vdif < .05 AND status_m <> 1 THEN
|
|
UPDATE prtb00012 SET cerrada = "S",
|
|
estado_despacho = 'DESPACHADA',
|
|
fecha_cierre = otros_mov.fecha,
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_oc = ordenx
|
|
IF pnum_req IS NOT NULL THEN
|
|
UPDATE cctb00025 SET estado_despacho = 'DESPACHADA',
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_req = pnum_req
|
|
END IF
|
|
END IF
|
|
|
|
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
|
|
IF pnum_req IS NOT NULL THEN
|
|
UPDATE cctb00025 SET estado_despacho = 'DESPACHO PARCIAL',
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_req = pnum_req AND status_t IS NULL
|
|
END IF
|
|
IF cantidad_devuelta > vpedido THEN
|
|
UPDATE prtb00012 SET estado_devolucion = 'DEVOLUCION COMPLETA',
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_oc = otros_mov.conduce_no
|
|
ELSE
|
|
UPDATE prtb00012 SET estado_devolucion = 'DEVOLUCION PARCIAL',
|
|
cerrada = 'N',
|
|
us_mod = usuarios, fech_mod = getdate()
|
|
WHERE num_oc = otros_mov.conduce_no
|
|
END IF
|
|
END IF
|
|
END FUNCTION
|
|
|
|
# Devuelve el primer renglon cuyo producto lleva despiece (iptb00027) y no
|
|
# tiene despiece grabado en iptb00025 para este movimiento/documento; 0 si todos
|
|
# estan bien.
|
|
FUNCTION falta_despiece()
|
|
DEFINE i INTEGER
|
|
|
|
FOR i = 1 TO movi2.getLength()
|
|
IF movi2[i].cod_n IS NULL OR movi2[i].cod_grupo IS NULL OR
|
|
movi2[i].cod_tipo IS NULL OR movi2[i].cod_sec IS NULL THEN
|
|
CONTINUE FOR
|
|
END IF
|
|
SELECT UNIQUE a.cod_n FROM iptb00027 a
|
|
WHERE a.cod_n = movi2[i].cod_n AND a.cod_grupo = movi2[i].cod_grupo AND
|
|
a.cod_tipo = movi2[i].cod_tipo AND a.cod_sec = movi2[i].cod_sec
|
|
IF STATUS = NOTFOUND THEN
|
|
CONTINUE FOR
|
|
END IF
|
|
SELECT UNIQUE a.cod_n FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[i].cod_n AND a.cod_grupo = movi2[i].cod_grupo AND
|
|
a.cod_tipo = movi2[i].cod_tipo AND a.cod_sec = movi2[i].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND a.num_doc = otros_mov.num_doc
|
|
IF STATUS = NOTFOUND THEN
|
|
RETURN i
|
|
END IF
|
|
END FOR
|
|
RETURN 0
|
|
END FUNCTION
|
|
|
|
# Si el producto del renglon actual (p_act) lleva despiece (iptb00027) y aun no
|
|
# tiene despiece en este documento (iptb00025), abre la ventana del despiece.
|
|
# Devuelve TRUE si al final el renglon tiene despiece (o no lo necesita).
|
|
FUNCTION abre_despiece_si_falta()
|
|
IF movi2[p_act].cod_n IS NULL OR movi2[p_act].cod_grupo IS NULL OR
|
|
movi2[p_act].cod_tipo IS NULL OR movi2[p_act].cod_sec IS NULL THEN
|
|
RETURN TRUE
|
|
END IF
|
|
SELECT UNIQUE a.cod_n FROM iptb00027 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec
|
|
IF STATUS = NOTFOUND THEN
|
|
RETURN TRUE
|
|
END IF
|
|
SELECT UNIQUE a.cod_n FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND a.num_doc = otros_mov.num_doc
|
|
IF STATUS != NOTFOUND THEN
|
|
RETURN TRUE
|
|
END IF
|
|
|
|
IF movi2[p_act].area IS NULL THEN
|
|
LET movi2[p_act].area = 1
|
|
END IF
|
|
CALL despiece()
|
|
DISPLAY movi2[p_act].cantidad_1 TO s_movi1[scr_l].cantidad_1
|
|
|
|
SELECT UNIQUE a.cod_n FROM iptb00025 a
|
|
WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND
|
|
a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND
|
|
a.cod_mov = otros_mov.cod_mov AND a.num_doc = otros_mov.num_doc
|
|
RETURN (STATUS != NOTFOUND)
|
|
END FUNCTION
|