1059 lines
34 KiB
Plaintext
1059 lines
34 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------------
|
|
PROGRAMA : prprmt003
|
|
OBJETIVO : Mantenimiento de Produccion por Centro de Costos
|
|
REALIZADO POR : Ing. Juan F. Soto.
|
|
FECHA : Junio 17, 1993
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "prprgb000.4gl"
|
|
DEFINE nomb_mq ARRAY[200] OF CHAR(30)
|
|
DEFINE dep_ant,p_codigo,sidx SMALLINT
|
|
DEFINE medida,nomb1,nomb2 CHAR(20)
|
|
DEFINE descrip2,nombre,nombre_mq,descrip_ant,descripcion CHAR(30)
|
|
DEFINE hoy,fecha1 DATE
|
|
DEFINE tiene,modifica CHAR(1)
|
|
DEFINE temporero RECORD LIKE adtb00036.*,
|
|
tmpnumero INT,
|
|
usuario_c CHAR(40),
|
|
fecha_c LIKE cttb00003.fech_crea,
|
|
tdescripcion CHAR(40),
|
|
cherror STRING
|
|
|
|
|
|
DEFINE datos_c RECORD
|
|
num_doc INTEGER,
|
|
fecha DATE,
|
|
#factor DEC(12,2),
|
|
departamento SMALLINT
|
|
END RECORD
|
|
|
|
DEFINE arr_costos ARRAY[200] OF RECORD
|
|
tipo LIKE cttb00003.cod_mq,
|
|
emp_no LIKE cttb00003.emp_no,
|
|
h_directa LIKE cttb00003.h_directa,
|
|
h_indirecta LIKE cttb00003.h_indirecta,
|
|
e_directa LIKE cttb00003.e_directa,
|
|
e_indirecta LIKE cttb00003.e_indirecta,
|
|
cod_prod LIKE cttb00011.cod_prod,
|
|
cantidad LIKE cttb00003.cantidad,
|
|
codigo_bloque LIKE cttb00003.codigo_bloque,
|
|
turno SMALLINT
|
|
END RECORD
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
# LET usuarios = "JSOTO" LET CLAVE = "lmmjvsd2009"
|
|
#CONNECT to "decomarmol" USER usuarios USING clave
|
|
CONNECT to "decomarmol" USER usuarios USING clave
|
|
CALL prprmt003()
|
|
END MAIN
|
|
|
|
FUNCTION prprmt003()
|
|
|
|
OPTIONS
|
|
FORM LINE 5,
|
|
ERROR LINE 24,
|
|
PROMPT LINE 1
|
|
|
|
CLEAR SCREEN
|
|
|
|
OPEN FORM prfmmt003 FROM "prfmmt003"
|
|
DISPLAY FORM prfmmt003
|
|
DISPLAY "Registro de Produccion Diaria" AT 4,25
|
|
DISPLAY "prprmt003" AT 4,3
|
|
# CALL pantalla1()
|
|
MENU "OPCION"
|
|
ON ACTION NUEVO
|
|
|
|
LET modifica = "N"
|
|
CALL prpradd()
|
|
ON ACTION BUSCAR
|
|
|
|
LET modifica = "S"
|
|
CALL prprmod()
|
|
ON ACTION anular
|
|
CALL prpranula()
|
|
ON ACTION Salir
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION prpradd()
|
|
LET hoy = null
|
|
LET datos_c.num_doc = 0
|
|
LABEL volver:
|
|
LET nombre = null
|
|
DISPLAY BY NAME nombre
|
|
LET idx = 1
|
|
INPUT BY NAME datos_c.* WITHOUT DEFAULTS
|
|
|
|
# Permanece la ultima fecha que el introdujo
|
|
BEFORE FIELD fecha
|
|
LET datos_c.fecha = hoy
|
|
DISPLAY BY NAME datos_c.fecha
|
|
|
|
AFTER FIELD fecha
|
|
IF datos_c.fecha is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
IF datos_c.fecha > today THEN
|
|
LET numero_msg = 189
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
{
|
|
# Control del registro de produccion diaria para la no duplicidad
|
|
SELECT UNIQUE a. fecha FROM cttb00003 a
|
|
WHERE a.fecha = datos_c.fecha and
|
|
a.num_doc = datos_c.num_doc
|
|
|
|
IF status != notfound THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
}
|
|
SELECT DISTINCT a.mes FROM prtb00002 a WHERE
|
|
datos_c.fecha BETWEEN a.semana_del AND a.semana_al
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("INFO","NO EXISTEN PERIODOS PARA CONTROLAR ESTA FECHA, DEBE DIGITAR PERIODO PARA ESTA FECHA","INFO")
|
|
NEXT FIELD fecha
|
|
END IF
|
|
# Control busqueda departamento
|
|
AFTER FIELD departamento
|
|
|
|
IF datos_c.departamento is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
IF status >= 0 THEN
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
ELSE
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
|
|
DISPLAY BY NAME descrip2
|
|
|
|
|
|
# Busqueda del nombre del empleado
|
|
|
|
|
|
END INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
FOR idx = 1 to 100
|
|
LET arr_costos[idx].tipo = null
|
|
LET arr_costos[idx].emp_no = null
|
|
LET arr_costos[idx].h_directa = null
|
|
LET arr_costos[idx].h_indirecta = null
|
|
LET arr_costos[idx].e_directa = null
|
|
LET arr_costos[idx].e_indirecta = null
|
|
LET arr_costos[idx].cod_prod = null
|
|
LET arr_costos[idx].cantidad = null
|
|
END FOR
|
|
|
|
# Arreglo para la captura de la produccion
|
|
INPUT ARRAY arr_costos WITHOUT DEFAULTS FROM scr_costos.*
|
|
ON KEY(F10)
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF arr_costos[curr].cod_prod IS NOT NULL THEN
|
|
IF arr_costos[curr].codigo_bloque IS NULL THEN
|
|
LET numero_msg =16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD codigo_bloque
|
|
END IF
|
|
CALL medidas()
|
|
DISPLAY arr_costos[curr].cantidad TO scr_costos[scr_l].cantidad
|
|
END IF
|
|
ON KEY(CONTROL-W)
|
|
LET curr = arr_curr()
|
|
IF INFIELD(cod_prod) THEN
|
|
CALL buscaProd()
|
|
DISPLAY BY NAME descripcion,medida
|
|
DISPLAY arr_costos[curr].cod_prod TO scr_costos[scr_l].cod_prod
|
|
END IF
|
|
IF INFIELD(emp_no) THEN
|
|
CALL buscaemp()
|
|
DISPLAY BY NAME nombre
|
|
DISPLAY arr_costos[curr].emp_no TO scr_costos[scr_l].emp_no
|
|
END IF
|
|
BEFORE ROW
|
|
# Variables para controlar el indice del vector
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
AFTER FIELD turno
|
|
IF arr_costos[curr].turno IS NOT NULL THEN
|
|
SELECT a.descripcion INTO tdescripcion FROM cttb00018 a
|
|
WHERE a.turno = arr_costos[curr].turno
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD turno
|
|
END IF
|
|
DISPLAY BY NAME tdescripcion
|
|
END IF
|
|
|
|
# Busca descripcion de la maquina
|
|
AFTER FIELD tipo
|
|
|
|
IF arr_costos[curr].tipo is not null THEN
|
|
SELECT a.descripcion INTO nombre_mq FROM prtb00005 a
|
|
WHERE a.codigo = arr_costos[curr].tipo and a.status_t is null
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo
|
|
END IF
|
|
|
|
DISPLAY BY NAME nombre_mq
|
|
LET nomb_mq[curr] = nombre_mq
|
|
END IF
|
|
|
|
|
|
# Busca el nombre del empleado
|
|
AFTER FIELD emp_no
|
|
IF arr_costos[curr].emp_no is not null THEN
|
|
SELECT a.nom1_emp,a.apell1_emp INTO nomb1,nomb2
|
|
FROM adtb00003 a
|
|
WHERE a.num_emp = arr_costos[curr].emp_no
|
|
# and a.nomina = "S"
|
|
|
|
IF status = notfound THEN
|
|
|
|
SELECT * INTO temporero.* FROM adtb00036
|
|
WHERE num_emp = arr_costos[curr].emp_no
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD emp_no
|
|
END IF
|
|
LET nomb1 = temporero.nom1_emp
|
|
LET nomb2 = temporero.apell1_emp
|
|
|
|
END IF
|
|
|
|
LET nombre = nomb1 clipped,",",nomb2 clipped
|
|
DISPLAY BY NAME NOMBRE ATTRIBUTE (BOLD)
|
|
END IF
|
|
|
|
# Control del codigo de la produccion que estan acumulando
|
|
AFTER FIELD cod_prod
|
|
IF arr_costos[curr].cod_prod is not null THEN
|
|
# Busca la descripcion de la pila de la formula que se introdujo
|
|
# anteriormente
|
|
SELECT unique a.cod_prod,a.descripcion,a.unidad_med
|
|
INTO p_codigo,descripcion,medida
|
|
FROM cttb00001 a
|
|
WHERE
|
|
a.cod_prod = arr_costos[curr].cod_prod 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_prod
|
|
END IF
|
|
ELSE
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
DISPLAY BY NAME medida
|
|
DISPLAY BY NAME descripcion
|
|
|
|
# BUSCA COSTO SEMI-ELABORADO
|
|
|
|
LET selec =
|
|
"SELECT CONVERT(CHAR(10),MAX(a.fecha),103) ",
|
|
" FROM cttb00034 a ",
|
|
" WHERE CONVERT(DATE,a.fecha,103) < ? "," AND ",
|
|
" a.cod_prod = ? and ",
|
|
" a.status_t IS NULL"
|
|
|
|
PREPARE busca_fecha FROM selec
|
|
EXECUTE busca_fecha USING datos_c.fecha,arr_costos[curr].cod_prod INTO fecha1
|
|
|
|
|
|
LET pcosto_labor[curr] = 0
|
|
SELECT AVG(a.costo_lab) INTO pcosto_labor[curr]
|
|
FROM cttb00034 a
|
|
WHERE a.fecha = fecha1 and
|
|
a.cod_prod = arr_costos[curr].cod_prod and
|
|
a.status_t is null
|
|
|
|
IF pcosto_labor[curr] is null THEN
|
|
LET pcosto_labor[curr] = 0
|
|
END IF
|
|
|
|
LET pcosto_gasto[curr] = 0
|
|
SELECT AVG(a.costo_ga) INTO pcosto_gasto[curr]
|
|
FROM cttb00034 a
|
|
WHERE a.fecha = fecha1 AND
|
|
a.cod_prod = arr_costos[curr].cod_prod and
|
|
a.status_t IS NULL
|
|
|
|
IF pcosto_gasto[curr] is null THEN
|
|
LET pcosto_gasto[curr] = 0
|
|
END IF
|
|
|
|
|
|
END IF
|
|
#--------------------------------------------------------------------------
|
|
AFTER FIELD cantidad
|
|
IF arr_costos[curr].cantidad is null THEN
|
|
LET arr_costos[curr].cantidad = 0
|
|
END IF
|
|
# IF datos_c.factor > 0 THEN
|
|
# LET arr_costos[curr].h_directa =
|
|
# datos_c.factor / arr_costos[curr].cantidad
|
|
# DISPLAY arr_costos[curr].h_directa TO scr_costos[scr_l].h_directa
|
|
# END IF
|
|
AFTER INPUT
|
|
# Control de la cancelacion de la operacion que se esta realizando en
|
|
# el momento.
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
#----------------------------------------------------------------------------
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
# CONTROL SECUENCIAL
|
|
SELECT ult_num INTO datos_c.num_doc FROM cttb00010
|
|
LET datos_c.num_doc = datos_c.num_doc + 1
|
|
DISPLAY BY NAME datos_c.num_doc
|
|
|
|
UPDATE cttb00012 SET documento = datos_c.num_doc WHERE documento = tmpnumero
|
|
# Control para chequeo de las informaciones si estan correctas
|
|
# da oportunidad al usuario de arreglar en el momento errores
|
|
LABEL atras:
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF arr_costos[idx].emp_no is not null THEN
|
|
IF arr_costos[idx].h_directa is null THEN
|
|
LET arr_costos[idx].h_directa = 0
|
|
END IF
|
|
IF arr_costos[idx].h_indirecta is null THEN
|
|
LET arr_costos[idx].h_indirecta = 0
|
|
END IF
|
|
IF arr_costos[idx].e_directa is null THEN
|
|
LET arr_costos[idx].e_directa = 0
|
|
END IF
|
|
IF arr_costos[idx].e_indirecta is null THEN
|
|
LET arr_costos[idx].e_indirecta = 0
|
|
END IF
|
|
INSERT INTO cttb00003 values
|
|
(datos_c.num_doc,datos_c.fecha,datos_c.departamento,
|
|
arr_costos[idx].emp_no,arr_costos[idx].tipo,nomb_mq[idx],
|
|
arr_costos[idx].h_directa,arr_costos[idx].h_indirecta,
|
|
arr_costos[idx].e_directa,arr_costos[idx].e_indirecta,
|
|
arr_costos[idx].cod_prod,
|
|
arr_costos[idx].cantidad,arr_costos[idx].codigo_bloque,
|
|
pcosto_labor[idx],pcosto_gasto[idx],arr_costos[idx].turno,
|
|
null,SUSER_SNAME(),GETDATE(),null,null)
|
|
END IF
|
|
END FOR
|
|
display " "
|
|
UPDATE cttb00010 set ult_num = datos_c.num_doc
|
|
DISPLAY BY NAME datos_c.num_doc
|
|
|
|
CALL integridad()
|
|
IF bandera = "1" THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
|
|
# Vuelve hacia el campo inicial de la pantalla para proseguir con el
|
|
# siguiente documento
|
|
GOTO volver
|
|
#---------------------------------------------------------------------------
|
|
END FUNCTION
|
|
|
|
# -------------------------- FUNCION DE MODIFICACION --------------------
|
|
|
|
FUNCTION prprmod()
|
|
|
|
CONSTRUCT BY NAME criterio ON a.num_doc,a.fecha,a.departamento
|
|
|
|
LET selec =
|
|
"SELECT UNIQUE a.num_doc,CONVERT(CHAR(10),a.fecha,103),a.departamento ",
|
|
"FROM cttb00003 a ",
|
|
"WHERE ",criterio clipped, " And a.status_t is null",
|
|
" ORDER BY a.num_doc,CONVERT(CHAR(10),a.fecha,103),a.departamento"
|
|
DISPLAY selec
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE buscate SCROLL CURSOR FOR comando
|
|
OPEN buscate
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
FETCH FIRST buscate INTO datos_c.*
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
DISPLAY BY NAME datos_c.*,descrip2
|
|
|
|
MENU "OPCIONES "
|
|
COMMAND "Siguiente"
|
|
"Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT buscate INTO datos_c.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
DISPLAY BY NAME descrip2 ATTRIBUTE (BOLD)
|
|
DISPLAY BY NAME datos_c.*
|
|
|
|
COMMAND "Anterior"
|
|
"Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS buscate INTO datos_c.*
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
DISPLAY BY NAME descrip2 ATTRIBUTE (BOLD)
|
|
DISPLAY BY NAME datos_c.*
|
|
|
|
COMMAND "Primero"
|
|
"Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST buscate INTO datos_c.*
|
|
DISPLAY BY NAME datos_c.*
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
DISPLAY BY NAME descrip2 ATTRIBUTE (BOLD)
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
COMMAND "Ultimo"
|
|
"Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST buscate INTO datos_c.*
|
|
DISPLAY BY NAME datos_c.*
|
|
LET numero_msg = 4
|
|
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
DISPLAY BY NAME descrip2 ATTRIBUTE (BOLD)
|
|
COMMAND "Escoger"
|
|
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
|
|
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
DISPLAY BY NAME descrip2 ATTRIBUTE (BOLD)
|
|
|
|
INPUT BY NAME datos_c.fecha THRU datos_c.departamento
|
|
WITHOUT DEFAULTS
|
|
AFTER FIELD fecha
|
|
IF datos_c.fecha is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
IF datos_c.fecha > today THEN
|
|
LET numero_msg = 189
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
SELECT DISTINCT a.mes FROM prtb00002 a WHERE
|
|
datos_c.fecha BETWEEN a.semana_del AND a.semana_al
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage("INFO","NO EXISTEN PERIODOS PARA CONTROLAR ESTA FECHA, DEBE DIGITAR PERIODO PARA ESTA FECHA","INFO")
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET int_flag = false
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
DECLARE busca10 CURSOR FOR
|
|
SELECT a.cod_mq,a.emp_no,a.h_directa,a.h_indirecta,a.e_directa,a.e_indirecta,
|
|
a.cod_prod,a.cantidad,a.codigo_bloque,a.turno
|
|
FROM cttb00003 a
|
|
WHERE a.num_doc =datos_c.num_doc
|
|
|
|
LET idx = 1
|
|
FOREACH busca10 INTO arr_costos[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx-1)
|
|
|
|
# Arreglo para la captura de la produccion
|
|
INPUT ARRAY arr_costos WITHOUT DEFAULTS FROM scr_costos.*
|
|
ON KEY(F10)
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF arr_costos[curr].cod_prod IS NOT NULL THEN
|
|
IF arr_costos[curr].codigo_bloque IS NULL THEN
|
|
LET numero_msg =16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD codigo_bloque
|
|
END IF
|
|
CALL medidas()
|
|
DISPLAY arr_costos[curr].cantidad TO scr_costos[scr_l].cantidad
|
|
END IF
|
|
|
|
|
|
BEFORE ROW
|
|
# Variables para controlar el indice del vector
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
AFTER FIELD turno
|
|
IF arr_costos[curr].turno IS NOT NULL THEN
|
|
SELECT a.descripcion INTO tdescripcion FROM cttb00018 a
|
|
WHERE a.turno = arr_costos[curr].turno
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD turno
|
|
END IF
|
|
DISPLAY BY NAME tdescripcion
|
|
END IF
|
|
|
|
|
|
# Busca descripcion de la maquina
|
|
AFTER FIELD tipo
|
|
|
|
IF arr_costos[curr].tipo is not null THEN
|
|
SELECT a.descripcion INTO nombre_mq FROM prtb00005 a
|
|
WHERE a.codigo = arr_costos[curr].tipo and a.status_t is null
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo
|
|
END IF
|
|
|
|
DISPLAY BY NAME nombre_mq
|
|
LET nomb_mq[curr] = nombre_mq
|
|
END IF
|
|
|
|
# Busca el nombre del empleado
|
|
AFTER FIELD emp_no
|
|
IF arr_costos[curr].emp_no is not null THEN
|
|
SELECT a.nom1_emp,a.apell1_emp INTO nomb1,nomb2
|
|
FROM adtb00003 a
|
|
WHERE a.num_emp = arr_costos[curr].emp_no
|
|
# and a.nomina = "S"
|
|
|
|
IF status = notfound THEN
|
|
SELECT * INTO temporero.* FROM adtb00036
|
|
WHERE num_emp = arr_costos[curr].emp_no
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD emp_no
|
|
END IF
|
|
LET nomb1 = temporero.nom1_emp
|
|
LET nomb2 = temporero.apell1_emp
|
|
|
|
END IF
|
|
|
|
LET nombre = nomb1 clipped," ",nomb2 clipped
|
|
DISPLAY BY NAME NOMBRE ATTRIBUTE (BOLD)
|
|
END IF
|
|
|
|
# Control del codigo de la produccion que estan acumulando
|
|
AFTER FIELD cod_prod
|
|
IF arr_costos[curr].cod_prod is not null THEN
|
|
# Busca la descripcion de la pila de la formula que se introdujo
|
|
# anteriormente
|
|
SELECT unique a.cod_prod,a.descripcion,a.unidad_med
|
|
INTO p_codigo,descripcion,medida
|
|
FROM cttb00001 a
|
|
WHERE
|
|
a.cod_prod = arr_costos[curr].cod_prod 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_prod
|
|
END IF
|
|
ELSE
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
END IF
|
|
DISPLAY BY NAME medida
|
|
DISPLAY BY NAME descripcion
|
|
|
|
# BUSCA COSTO SEMI-ELABORADO
|
|
|
|
LET selec =
|
|
"SELECT CONVERT(CHAR(10),MAX(a.fecha),103) ",
|
|
" FROM cttb00034 a ",
|
|
" WHERE CONVERT(DATE,a.fecha,103) < ? "," AND ",
|
|
" a.cod_prod = ? and ",
|
|
" a.status_t IS NULL"
|
|
|
|
PREPARE busca_fecha1 FROM selec
|
|
EXECUTE busca_fecha1 USING datos_c.fecha,arr_costos[curr].cod_prod INTO fecha1
|
|
|
|
|
|
LET pcosto_labor[curr] = 0
|
|
SELECT AVG(a.costo_lab) INTO pcosto_labor[curr]
|
|
FROM cttb00034 a
|
|
WHERE a.fecha = fecha1 and
|
|
a.cod_prod = arr_costos[curr].cod_prod and
|
|
a.status_t is null
|
|
|
|
|
|
IF pcosto_labor[curr] is null THEN
|
|
LET pcosto_labor[curr] = 0
|
|
END IF
|
|
|
|
LET pcosto_gasto[curr] = 0
|
|
SELECT AVG(a.costo_ga) INTO pcosto_gasto[curr]
|
|
FROM cttb00034 a
|
|
WHERE a.fecha = fecha1 AND
|
|
a.cod_prod = arr_costos[curr].cod_prod and
|
|
a.status_t IS NULL
|
|
|
|
IF pcosto_gasto[curr] is null THEN
|
|
LET pcosto_gasto[curr] = 0
|
|
END IF
|
|
|
|
|
|
END IF
|
|
#--------------------------------------------------------------------------
|
|
AFTER FIELD cantidad
|
|
IF arr_costos[curr].cantidad is null THEN
|
|
LET arr_costos[curr].cantidad = 0
|
|
END IF
|
|
|
|
#IF datos_c.factor > 0 THEN
|
|
# LET arr_costos[curr].h_directa =
|
|
# datos_c.factor / arr_costos[curr].cantidad
|
|
# DISPLAY arr_costos[curr].h_directa TO scr_costos[scr_l].h_directa
|
|
#END IF
|
|
AFTER INPUT
|
|
|
|
# Control de la cancelacion de la operacion que se esta realizando en
|
|
# el momento.
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
#----------------------------------------------------------------------------
|
|
EXIT INPUT
|
|
END INPUT
|
|
{
|
|
# REALIZA UNA COPIA DE LOS REGISTROS ANTES DE BORRARLOS
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF arr_costos[idx].emp_no is not null THEN
|
|
INSERT INTO cttb00017 values
|
|
(datos_c.num_doc,datos_c.fecha,datos_c.departamento,
|
|
arr_costos[idx].emp_no,arr_costos[idx].tipo,nomb_mq[idx],
|
|
arr_costos[idx].h_directa,arr_costos[idx].h_indirecta,
|
|
arr_costos[idx].e_directa,arr_costos[idx].e_indirecta,
|
|
arr_costos[idx].cod_prod,arr_costos[idx].cantidad,arr_costos[idx].codigo_bloque,
|
|
pcosto_labor[idx],pcosto_gasto[idx],
|
|
arr_costos[idx].turno,null,usuario_c,fecha_c,SUSER_SNAME(),GETDATE())
|
|
END IF
|
|
END FOR
|
|
}
|
|
|
|
BEGIN WORK
|
|
DELETE FROM cttb00003 WHERE @num_doc = datos_c.num_doc
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF arr_costos[idx].emp_no is not null THEN
|
|
INSERT INTO cttb00003 values
|
|
(datos_c.num_doc,datos_c.fecha,datos_c.departamento,
|
|
arr_costos[idx].emp_no,arr_costos[idx].tipo,nomb_mq[idx],
|
|
arr_costos[idx].h_directa,arr_costos[idx].h_indirecta,
|
|
arr_costos[idx].e_directa,arr_costos[idx].e_indirecta,
|
|
arr_costos[idx].cod_prod,arr_costos[idx].cantidad,arr_costos[idx].codigo_bloque,
|
|
pcosto_labor[idx],pcosto_gasto[idx], arr_costos[idx].turno,
|
|
null,SUSER_SNAME(),GETDATE(),SUSER_SNAME(),GETDATE())
|
|
|
|
IF STATUS < 0 THEN
|
|
LET cherror = "Ocurrio un error, favor verifique el error ",SQLCA.sqlerrd[2], SQLERRMESSAGE
|
|
CALL fgl_winmessage("ERROR", cherror, "stop")
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("STOP","TRANSACCIONES NO ACTUALIZADAS","INFO")
|
|
EXIT MENU
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
COMMIT WORK
|
|
CALL integridad()
|
|
IF bandera = "1" THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
COMMAND "Retornar"
|
|
"Retorna al menu Anterior"
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
{
|
|
FUNCTION repite()
|
|
DEFINE producto,codigo SMALLINT
|
|
LET codigo = arr_costos[curr].departamento
|
|
LET producto = arr_costos[curr].cod_prod
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != curr THEN
|
|
IF arr_costos[idx].departamento IS NOT NULL THEN
|
|
|
|
IF arr_costos[idx].departamento = codigo and
|
|
arr_costos[idx].cod_prod = producto THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
LET existe = "S"
|
|
ELSE
|
|
IF existe != "S" THEN
|
|
LET existe = "N"
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
}
|
|
FUNCTION prpranula()
|
|
INPUT BY NAME datos_c.num_doc,datos_c.fecha WITHOUT DEFAULTS
|
|
# Permanece la ultima fecha que el introdujo
|
|
BEFORE FIELD fecha
|
|
LET datos_c.fecha = TODAY
|
|
DISPLAY BY NAME datos_c.fecha
|
|
|
|
AFTER FIELD fecha
|
|
LET hoy = datos_c.fecha
|
|
IF datos_c.fecha is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
SELECT unique a.departamento INTO datos_c.departamento FROM cttb00003 a
|
|
WHERE a.fecha = datos_c.fecha and
|
|
a.num_doc = datos_c.num_doc and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
SELECT a.nom_dpto INTO descrip2 FROM adtb00001 a
|
|
WHERE a.departamento = datos_c.departamento and
|
|
a.status_t is null
|
|
|
|
|
|
DISPLAY BY NAME datos_c.departamento,descrip2
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
IF datos_c.fecha is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
LET opcion = fgl_winquestion("PREGUNTA","DESA ANULAR ESTE DOCUMENTO?","no","yes|no","QUESTION",0)
|
|
LET opcion = upshift (opcion)
|
|
|
|
IF opcion = "YES" THEN
|
|
UPDATE cttb00003 SET status = "E",
|
|
us_mod = SUSER_SNAME(),
|
|
fecha_mod = GETDATE()
|
|
WHERE fecha = datos_c.fecha and
|
|
num_doc = datos_C.num_doc and
|
|
departamento = datos_c.departamento
|
|
|
|
LET numero_msg = 82
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION buscaProd()
|
|
|
|
DEFINE aproducto DYNAMIC ARRAY OF RECORD
|
|
cod_prod INT,
|
|
descripcion CHAR(40),
|
|
unidad_med CHAR(3)
|
|
END RECORD
|
|
|
|
|
|
OPEN WINDOW prfmwd010 AT 8,7 WITH FORM "prfmwd010" ATTRIBUTE (BORDER)
|
|
|
|
CONSTRUCT BY NAME criterio ON a.descripcion
|
|
|
|
LET selec = "SELECT a.cod_prod,a.descripcion,a.unidad_med FROM cttb00001 a WHERE ",criterio CLIPPED,
|
|
" AND a.status_t IS NULL ORDER BY a.descripcion"
|
|
|
|
PREPARE comando10 FROM selec
|
|
DECLARE buscap10 CURSOR FOR comando10
|
|
LET idx = 1
|
|
FOREACH buscap10 INTO aproducto[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY aproducto TO sprod.*
|
|
LET idx = arr_curr()
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
END IF
|
|
|
|
LET arr_costos[curr].cod_prod = aproducto[idx].cod_prod
|
|
LET descripcion = aproducto[idx].descripcion
|
|
LET medida = aproducto[idx].unidad_med
|
|
CLOSE WINDOW prfmwd010
|
|
END FUNCTION
|
|
|
|
FUNCTION buscaEMP()
|
|
|
|
DEFINE aempleado ARRAY[500] OF RECORD
|
|
num_emp INT,
|
|
nom1_emp CHAR(40),
|
|
apell1_emp CHAR(40)
|
|
END RECORD
|
|
|
|
|
|
OPEN WINDOW prfmwd011 AT 8,7 WITH FORM "prfmwd011" ATTRIBUTE (BORDER)
|
|
|
|
CONSTRUCT BY NAME criterio ON a.nom1_emp,a.apell1_emp
|
|
|
|
LET selec = "SELECT a.num_emp,a.nom1_emp,a.apell1_emp FROM adtb00003 a WHERE ",criterio CLIPPED,
|
|
" AND a.status_t IS NULL ORDER BY a.nom1_emp"
|
|
|
|
PREPARE comando11 FROM selec
|
|
DECLARE buscap11 CURSOR FOR comando11
|
|
LET idx = 1
|
|
FOREACH buscap11 INTO aempleado[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY aempleado TO sficha.*
|
|
LET idx = arr_curr()
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
END IF
|
|
|
|
LET arr_costos[curr].emp_no = aempleado[idx].num_emp
|
|
LET nombre = aempleado[idx].nom1_emp," ",aempleado[idx].apell1_emp
|
|
|
|
CLOSE WINDOW prfmwd011
|
|
END FUNCTION
|
|
FUNCTION medidas()
|
|
DEFINE arrmedida ARRAY[20] OF RECORD
|
|
ancho1 DEC(12,5),
|
|
largo1 DEC(12,5),
|
|
espesor1 DEC(12,5),
|
|
medida1 DEC(12,5),
|
|
ancho2 DEC(12,5),
|
|
largo2 DEC(12,5),
|
|
espesor2 DEC(12,5),
|
|
medida2 DEC(12,5),
|
|
cantidad DEC(12,5)
|
|
END RECORD,
|
|
total_medida DEC(12,5)
|
|
|
|
OPEN WINDOW prfmwd012 AT 8,3 WITH FORM "prfmwd012" ATTRIBUTE (BORDER)
|
|
|
|
DISPLAY arr_costos[curr].cod_prod TO cod_prod
|
|
DISPLAY arr_costos[curr].codigo_bloque TO codigo_bloque
|
|
|
|
DISPLAY BY NAME descripcion,medida
|
|
IF modifica = "S" THEN
|
|
DECLARE busca_m CURSOR FOR
|
|
SELECT a.ancho1,a.largo1,a.espesor1,a.medida1,
|
|
a.ancho2,a.largo2,a.espesor2,a.medida2,a.cantidad
|
|
FROM cttb00012 a
|
|
WHERE a.documento = datos_c.num_doc AND
|
|
a.cod_prod = arr_costos[curr].cod_prod and
|
|
a.codigo_bloque = arr_costos[curr].codigo_bloque
|
|
|
|
LET idx = 1
|
|
FOREACH busca_m INTO arrmedida[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
END IF
|
|
SELECT MAX(numero) INTO tmpnumero FROM cttb00016
|
|
IF tmpnumero IS NULL THEN
|
|
LET tmpnumero = 9999999
|
|
END IF
|
|
LET tmpnumero = tmpnumero + 1
|
|
|
|
INSERT INTO cttb00016 values (SUSER_SNAME(),tmpnumero,GETDATE())
|
|
FOR idx = 1 TO 10
|
|
LET arrmedida[idx].ancho1 = 0
|
|
LET arrmedida[idx].largo1 = 0
|
|
LET arrmedida[idx].espesor1 = 0
|
|
LET arrmedida[idx].ancho2 = 0
|
|
LET arrmedida[idx].largo2 = 0
|
|
LET arrmedida[idx].espesor2 = 0
|
|
END FOR
|
|
INPUT ARRAY arrmedida WITHOUT DEFAULTS FROM sdespiece.*
|
|
BEFORE ROW
|
|
LET idx = arr_curr()
|
|
LET sidx = scr_line()
|
|
|
|
|
|
AFTER FIELD cantidad
|
|
IF arrmedida[idx].espesor1 = 0 THEN
|
|
LET arrmedida[idx].medida1 = arrmedida[idx].ancho1 * arrmedida[idx].largo1
|
|
END IF
|
|
|
|
IF arrmedida[idx].espesor1 <> 0 THEN
|
|
LET arrmedida[idx].medida1 = arrmedida[idx].ancho1 * arrmedida[idx].largo1 *
|
|
arrmedida[idx].espesor1
|
|
END IF
|
|
IF arrmedida[idx].espesor2 = 0 THEN
|
|
LET arrmedida[idx].medida2 = arrmedida[idx].ancho2 * arrmedida[idx].largo2
|
|
END IF
|
|
IF arrmedida[idx].espesor2 <> 0 THEN
|
|
LET arrmedida[idx].medida2 = arrmedida[idx].ancho2 * arrmedida[idx].largo2 *
|
|
arrmedida[idx].espesor2
|
|
END IF
|
|
|
|
DISPLAY arrmedida[idx].medida1 TO sdespiece[sidx].medida1
|
|
DISPLAY arrmedida[idx].medida2 TO sdespiece[sidx].medida2
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT INPUT
|
|
END IF
|
|
|
|
END INPUT
|
|
IF int_flag THEN
|
|
CLOSE WINDOW prfmwd012
|
|
RETURN
|
|
END IF
|
|
LET total_medida = 0
|
|
IF modifica = "N" THEN
|
|
FOR idx =1 TO arr_count()
|
|
IF arrmedida[idx].cantidad IS NOT NULL THEN
|
|
INSERT INTO cttb00012 VALUES (tmpnumero,datos_c.fecha,arr_costos[idx].codigo_bloque,
|
|
arr_costos[idx].cod_prod,arrmedida[idx].ancho1,arrmedida[idx].largo1,
|
|
arrmedida[idx].espesor1,arrmedida[idx].medida1,
|
|
arrmedida[idx].largo2,arrmedida[idx].ancho2,arrmedida[idx].espesor2,
|
|
arrmedida[idx].medida2,arrmedida[idx].cantidad)
|
|
LET total_medida = arrmedida[idx].medida1 + total_medida
|
|
END IF
|
|
END FOR
|
|
ELSE
|
|
DELETE FROM cttb00012
|
|
WHERE documento = datos_c.num_doc AND cod_prod = arr_costos[curr].cod_prod and
|
|
codigo_bloque = arr_costos[curr].codigo_bloque
|
|
|
|
FOR idx =1 TO arr_count()
|
|
IF arrmedida[idx].cantidad IS NOT NULL THEN
|
|
INSERT INTO cttb00012 VALUES (datos_c.num_doc,datos_c.fecha,arr_costos[curr].codigo_bloque,
|
|
arr_costos[curr].cod_prod,arrmedida[idx].ancho1,arrmedida[idx].largo1,
|
|
arrmedida[idx].espesor1,arrmedida[idx].medida1,
|
|
arrmedida[idx].largo2,arrmedida[idx].ancho2,arrmedida[idx].espesor2,
|
|
arrmedida[idx].medida2,arrmedida[idx].cantidad)
|
|
LET total_medida = arrmedida[idx].medida1 + total_medida
|
|
END IF
|
|
END FOR
|
|
END IF
|
|
LET arr_costos[curr].cantidad = total_medida
|
|
CLOSE WINDOW prfmwd012
|
|
END FUNCTION |