Files
MBS/PROYECTO/codir/coprmt020.4gl
T

1826 lines
60 KiB
Plaintext

{
-------------------------------------------------------------------------
PROGRAMA : COPRMT020
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Ordenes de Compras
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Septiembre 07, 1992.
MODIFICADO POR : Tadeo A. Ferreras F.
FECHA : Septiembre 5, 1994.
DESCRIPCION : Agregar el tipo de orden en los UPDATE de la tabla de
datos generales de la orden, detalle de la orden y
entregas parciales
--------------------------------------------------------------------------
}
GLOBALS "coprgb000.4gl"
DEFINE descr1,descr2,descr3,descr4 CHAR(15)
DEFINE c_i_d,c_i_d1,nota,nota1,nombre_mon CHAR(30)
DEFINE simb_mon CHAR(4)
DEFINE nom_via CHAR(10)
DEFINE req_ant ARRAY[100] OF INTEGER
DEFINE opc1,opc2,opc4,salir,proce CHAR(1)
DEFINE cod_mon,control_linea,control_item,idx2,total_parc INTEGER
DEFINE fecha1 DATE
DEFINE valor2,total DECIMAL(12,2)
DEFINE j RECORD LIKE cotb00025.*
DEFINE requis INTEGER
DEFINE j1,k1 INTEGER
FUNCTION coprmt020()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 22,
PROMPT LINE 23,
MESSAGE LINE 22
OPEN FORM cofmmt020 FROM "cofmmt009"
DISPLAY FORM cofmmt020
CALL pantalla()
DISPLAY "coprmt020" AT 4,3
DISPLAY "Ordenes Voluminosas" AT 6,30
SELECT dia INTO dia_aduana FROM cotb00028
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Delete> Cancela Operacion"
CLEAR FORM
LET opc = "S"
LET existe = null
LET int_flag = FALSE
CALL copcad020()
COMMAND "Consultar"
"<Esc> Realiza Busqueda <Delete> Cancela Operacion"
CLEAR FORM
LET existe = null
LET int_flag = FALSE
CALL copcmf020()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION copcad020()
#WHENEVER ERROR CONTINUE
IF ordenes.num_oc is null THEN
LET ordenes.num_oc = 0
END IF
CLEAR FORM
DISPLAY " "
AT 24,1
#LABEL vuelve:
#IF opc = "S" THEN
INITIALIZE ordenes.* TO NULL
LET ordenes.cierre = "N"
LET ordenes.enviada = "N"
LET ordenes.pago = "N"
# END IF
# Captura las informaciones generales de la orden de compras
INPUT BY NAME ordenes.*,cod_mon WITHOUT DEFAULTS ATTRIBUTE (YELLOW)
ON KEY (CONTROL-W)
CASE
# Control de ventana para la busqueda de los suplidores
WHEN INFIELD (cod_sp)
LET identifica = "O"
CALL busca1_sup1()
LET int_flag = FALSE
IF existe = "N" then
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD cod_sp
END IF
DISPLAY BY NAME ordenes.cod_sp,ordenes.cod_sp_sec,
suplidor.nom_sp
LET identifica = NULL
NEXT FIELD cod_sp_sec
WHEN INFIELD (cod_sp_sec)
LET identifica = "O"
CALL busca1_sup1()
IF existe = "N" then
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD cod_sp
END IF
DISPLAY BY NAME ordenes.cod_sp,ordenes.cod_sp_sec,
suplidor.nom_sp
LET identifica = NULL
NEXT FIELD cod_sp_sec
# Ventana para los terminos de pagos
WHEN INFIELD (term_sp)
LET identifica = "O"
CALL busca1_terminos()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD term_sp
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD term_sp
END IF
LET ordenes.term_sp = pagos.term_sp
DISPLAY BY NAME pagos.term_sp,pagos.descrip_term
LET identifica = NULL
NEXT FIELD via
# Ventana para la busqueda de los puertos
WHEN INFIELD (cod_pt)
LET identifica = "O"
CALL busca1_puertos()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_pt
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD cod_pt
END IF
LET ordenes.cod_pt = puertos.cod_pt
DISPLAY BY NAME puertos.cod_pt,nombre_p
LET identifica = NULL
# Ventana para la busqueda de las monedas
WHEN INFIELD (cod_mon)
LET identifica = "O"
CALL busca1_monedas()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_mon
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD cod_mon
END IF
LET cod_mon = monedas.cod_mon
DISPLAY BY NAME cod_mon,nombre_mon
LET identifica = NULL
EXIT INPUT
END CASE
BEFORE FIELD tipo
SELECT MAX(a.num_oc) INTO ordenes.num_oc FROM cotb00030 a
IF ordenes.num_oc IS NULL THEN
LET ordenes.num_oc = 0
END IF
LET ordenes.num_oc = ordenes.num_oc + 1
DISPLAY BY NAME ordenes.num_oc ATTRIBUTE(YELLOW)
AFTER FIELD tipo
# Chequeo del numero del documento si el usuario elige numeracion manual
IF ordenes.tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
BEFORE FIELD fech_oc
LET ordenes.fech_oc = today using "dd/mm/yy"
DISPLAY BY NAME ordenes.fech_oc
AFTER FIELD fech_oc
IF ordenes.fech_oc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_oc
END IF
### AQUI CONTROLA LA FECHA DEL DOCUMENTO
{ LET p_fechas = ordenes.fech_oc using "ddmmyy"
CALL prd(p_fechas)
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fech_oc
END IF}
AFTER FIELD cod_sp
IF ordenes.cod_sp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
AFTER FIELD cod_sp_sec
# Chequeo del suplidor para el desplegue del nombre
IF ordenes.cod_sp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp_sec
ELSE
SELECT a.nom_sp,a.dir_sp,ciu_sp
INTO suplidor.nom_sp,suplidor.dir_sp,suplidor.ciu_sp
FROM cotb00001 a
WHERE a.cod_sp = ordenes.cod_sp and
a.cod_sp_sec = ordenes.cod_sp_sec 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_sp
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME suplidor.nom_sp
END IF
AFTER FIELD term_sp
# Chequeo de los terminos de pagos para desplegue de informacion
IF ordenes.term_sp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD term_sp
ELSE
IF ordenes.cod_sp = 23 THEN
SELECT b.descrip_term INTO pagos.descrip_term FROM cotb00024 b
WHERE b.term_sp = ordenes.term_sp and b.status_t is null
ELSE
SELECT b.descrip_ting INTO pagos.descrip_term FROM cotb00024 b
WHERE b.term_sp = ordenes.term_sp and b.status_t is null
END IF
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD term_sp
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME pagos.descrip_term
END IF
AFTER FIELD via
# Validacion de la via para determinar su via
IF ordenes.via IS NOT NULL THEN
IF ordenes.via = "01" THEN
LET nom_via = "MARITIMA"
END IF
IF ordenes.via = "02" THEN
LET nom_via = "AEREA"
END IF
IF ordenes.via = "03" THEN
LET nom_via = "TERRESTRE"
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD via
END IF
DISPLAY BY NAME nom_via
AFTER FIELD cod_pt
# Chequeo del puerto y busqueda del su descripcion
IF ordenes.cod_pt is not null THEN
SELECT a.nom_pt,a.duracion INTO nombre_p,m_articulos.dia_llegada
FROM cotb00019 a
WHERE cod_pt = ordenes.cod_pt
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_pt
END IF
DISPLAY BY NAME nombre_p
END IF
AFTER FIELD cod_mon
# Chequeo del cod_n de la moneda y busqueda del su descripcion
IF cod_mon is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_mon
END IF
SELECT a.descrip_mon,a.simbolo INTO nombre_mon,simb_mon
FROM cotb00031 a WHERE a.cod_mon = cod_mon AND a.status_t IS NULL
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mon
END IF
DISPLAY BY NAME nombre_mon
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
# Captura de los articulos requeridos
LET salir = null
IF opc = "S" THEN
FOR idx = 1 TO 200
LET arr_ordenes[idx].num_req = null
LET arr_ordenes[idx].cod_n = null
LET arr_ordenes[idx].cod_grupo = null
LET arr_ordenes[idx].cod_tipo = null
LET arr_ordenes[idx].cod_sec = null
LET arr_ordenes[idx].cantidad = null
LET arr_ordenes[idx].precio = null
LET arr_ordenes[idx].valor = null
END FOR
END IF
INPUT ARRAY arr_ordenes WITHOUT DEFAULTS FROM consart.* ATTRIBUTE (YELLOW)
ON KEY (CONTROL-W)
CASE
WHEN INFIELD(num_req)
IF existe = "N" THEN
LET numero_msg = 49
CALL msg(numero_msg)
NEXT FIELD num_req
END IF
LET identifica = "O"
LET curr = arr_curr()
LET scr_l = scr_line()
CALL busca_requi()
IF existe = "S" THEN
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD num_req
END IF
CALL repite3()
DISPLAY arr_ordenes[curr].cod_n TO consart[scr_l].cod_n
DISPLAY arr_ordenes[curr].cod_grupo TO consart[scr_l].cod_grupo
DISPLAY arr_ordenes[curr].cod_tipo TO consart[scr_l].cod_tipo
DISPLAY arr_ordenes[curr].cod_sec TO consart[scr_l].cod_sec
DISPLAY arr_ordenes[curr].cantidad TO consart[scr_l].cantidad
DISPLAY arr_ordenes[curr].precio TO consart[scr_l].precio
DISPLAY arr_ordenes[curr].valor TO consart[scr_l].valor
DISPLAY BY NAME articulos.descrip_esp
DISPLAY BY NAME articulos.unidad_med
SELECT a.cod_nab,a.descrip_esp INTO m_articulos.cod_nab,descrip1
FROM cotb00005 a, intb00002 b
WHERE b.cod_n=arr_ordenes[curr].cod_n and
b.cod_grupo=arr_ordenes[curr].cod_grupo and
b.cod_tipo=arr_ordenes[curr].cod_tipo and
b.cod_sec=arr_ordenes[curr].cod_sec and
a.cod_nab = b.cod_nab
DISPLAY BY NAME m_articulos.cod_nab,descrip1
IF verdad = "S" THEN
NEXT FIELD num_req
END IF
UPDATE cotb00008 SET procesada = "S"
WHERE @cod_n = arr_ordenes[curr].cod_n AND
@cod_grupo = arr_ordenes[curr].cod_grupo AND
@cod_tipo = arr_ordenes[curr].cod_tipo AND
@cod_sec = arr_ordenes[curr].cod_sec AND
@num_req = arr_ordenes[curr].num_req
NEXT FIELD num_parte
END IF
IF existe = "N" THEN
NEXT FIELD num_req
END IF
WHEN INFIELD (num_parte)
LET curr = arr_curr()
CALL parcial()
END CASE
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
LET ant_req.num_req = arr_ordenes[curr].num_req
LET busca_parte[curr].cod_n = arr_ordenes[curr].cod_n
LET busca_parte[curr].cod_grupo = arr_ordenes[curr].cod_grupo
LET busca_parte[curr].cod_tipo = arr_ordenes[curr].cod_tipo
LET busca_parte[curr].cod_sec = arr_ordenes[curr].cod_sec
AFTER ROW
LET curr = arr_curr()
LET valor_total = 0
FOR idx = 1 TO 200
IF valor_total > 0 THEN
LET valor_total = valor_total + arr_ordenes[idx].valor
END IF
END FOR
IF arr_ordenes[curr].num_req IS NOT NULL THEN
SELECT descrip_esp,unidad_med INTO articulos.descrip_esp,
articulos.unidad_med
FROM intb00001
WHERE cod_n=arr_ordenes[curr].cod_n and
cod_grupo=arr_ordenes[curr].cod_grupo and
cod_tipo=arr_ordenes[curr].cod_tipo and
cod_sec=arr_ordenes[curr].cod_sec
SELECT a.cod_nab,a.descrip_esp INTO m_articulos.cod_nab,descrip1
FROM cotb00005 a,intb00002 b
WHERE b.cod_n=arr_ordenes[curr].cod_n and
b.cod_grupo=arr_ordenes[curr].cod_grupo and
b.cod_tipo=arr_ordenes[curr].cod_tipo and
b.cod_sec=arr_ordenes[curr].cod_sec and
a.cod_nab = b.cod_nab
DISPLAY BY NAME m_articulos.cod_nab,descrip1,articulos.descrip_esp,
articulos.unidad_med
END IF
UPDATE cotb00008 SET procesada = "S"
WHERE @cod_n = arr_ordenes[curr].cod_n AND
@cod_grupo = arr_ordenes[curr].cod_grupo AND
@cod_tipo = arr_ordenes[curr].cod_tipo AND
@cod_sec = arr_ordenes[curr].cod_sec AND
@num_req = arr_ordenes[curr].num_req
BEFORE FIELD num_req
IF curr > 1 THEN
LET arr_ordenes[curr].num_req = arr_ordenes[curr-1].num_req
END IF
DISPLAY arr_ordenes[curr].num_req TO consart[scr_l].num_req
AFTER FIELD num_req
LET curr = arr_curr()
IF arr_ordenes[curr].num_req IS NOT NULL THEN
LET requi = arr_ordenes[curr].num_req
SELECT UNIQUE a.procesada INTO proce FROM cotb00008 a
WHERE a.num_req = requi AND a.cod_sp = ordenes.cod_sp AND
a.cod_sp_sec = ordenes.cod_sp_sec AND
a.procesada = "N"
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_req
END IF
IF proce = "S" THEN
LET numero_msg = 117
CALL msg(numero_msg)
NEXT FIELD num_req
END IF
END IF
SELECT a.descrip_esp,a.unidad_med INTO articulos.descrip_esp,
articulos.unidad_med
FROM intb00001 a
WHERE a.cod_n=arr_ordenes[curr].cod_n AND
a.cod_grupo=arr_ordenes[curr].cod_grupo AND
a.cod_tipo=arr_ordenes[curr].cod_tipo AND
a.cod_sec=arr_ordenes[curr].cod_sec
SELECT a.cod_nab,a.descrip_esp INTO m_articulos.cod_nab,descrip1
FROM cotb00005 a, intb00002 b
WHERE b.cod_n=arr_ordenes[curr].cod_n and
b.cod_grupo=arr_ordenes[curr].cod_grupo and
b.cod_tipo=arr_ordenes[curr].cod_tipo and
b.cod_sec=arr_ordenes[curr].cod_sec and a.cod_nab = b.cod_nab
DISPLAY BY NAME m_articulos.cod_nab,descrip1,articulos.descrip_esp,
articulos.unidad_med
UPDATE cotb00008 SET procesada = "S"
WHERE @cod_n = arr_ordenes[curr].cod_n AND
@cod_grupo = arr_ordenes[curr].cod_grupo AND
@cod_tipo = arr_ordenes[curr].cod_tipo AND
@cod_sec = arr_ordenes[curr].cod_sec AND
@num_req = arr_ordenes[curr].num_req
# Verifica que el cod_n este en el puerto y via
IF ordenes.via != "03" THEN
IF arr_ordenes[curr].cod_n is not null AND
arr_ordenes[curr].cod_grupo is not null AND
arr_ordenes[curr].cod_tipo is not null AND
arr_ordenes[curr].cod_sec is not null THEN
SELECT UNIQUE *FROM cotb00017
WHERE cod_n=arr_ordenes[curr].cod_n and
cod_grupo=arr_ordenes[curr].cod_grupo and
cod_tipo=arr_ordenes[curr].cod_tipo and
cod_sec=arr_ordenes[curr].cod_sec and
cod_pt = ordenes.cod_pt and via_t = ordenes.via
IF status = notfound THEN
LET numero_msg = 118
CALL msg(numero_msg)
NEXT FIELD num_req
END IF
END IF
END IF
IF arr_ordenes[curr].num_req IS NOT NULL THEN
SELECT a.num_req FROM cotb00006 a
WHERE a.num_req = arr_ordenes[curr].num_req and
a.status_t is null
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = "N"
NEXT FIELD num_req
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
CALL repite3()
IF verdad = "S" THEN
LET verdad = null
NEXT FIELD num_req
END IF
DISPLAY arr_ordenes[curr].cod_n TO consart[scr_l].cod_n
DISPLAY arr_ordenes[curr].cod_grupo TO consart[scr_l].cod_grupo
DISPLAY arr_ordenes[curr].cod_tipo TO consart[scr_l].cod_tipo
DISPLAY arr_ordenes[curr].cod_sec TO consart[scr_l].cod_sec
DISPLAY arr_ordenes[curr].cantidad TO consart[scr_l].cantidad
DISPLAY arr_ordenes[curr].precio TO consart[scr_l].precio
DISPLAY BY NAME articulos.descrip_esp
DISPLAY BY NAME articulos.unidad_med
DISPLAY BY NAME m_articulos.cod_nab
DISPLAY BY NAME descrip1
IF verdad = "S" THEN
NEXT FIELD num_req
END IF
LET identifica = "O"
CALL busca_requi()
CALL repite3()
DISPLAY arr_ordenes[curr].cod_n TO consart[scr_l].cod_n
DISPLAY arr_ordenes[curr].cod_grupo TO consart[scr_l].cod_grupo
DISPLAY arr_ordenes[curr].cod_tipo TO consart[scr_l].cod_tipo
DISPLAY arr_ordenes[curr].cod_sec TO consart[scr_l].cod_sec
DISPLAY arr_ordenes[curr].cantidad TO consart[scr_l].cantidad
DISPLAY arr_ordenes[curr].precio TO consart[scr_l].precio
DISPLAY BY NAME articulos.descrip_esp
DISPLAY BY NAME articulos.unidad_med
DISPLAY BY NAME m_articulos.cod_nab
DISPLAY BY NAME descrip1
IF verdad = "S" THEN
NEXT FIELD num_req
END IF
IF m_articulos.base is not null THEN
LET arr_ordenes[curr].valor = (arr_ordenes[curr].precio /
m_articulos.base) *
arr_ordenes[curr].cantidad
ELSE
LET arr_ordenes[curr].valor = arr_ordenes[curr].precio *
arr_ordenes[curr].cantidad
END IF
DISPLAY arr_ordenes[curr].valor TO consart[scr_l].valor
SELECT a.cod_nab,a.descrip_esp INTO m_articulos.cod_nab,descrip1
FROM cotb00005 a, intb00002 b
WHERE b.cod_n=arr_ordenes[curr].cod_n and
b.cod_grupo=arr_ordenes[curr].cod_grupo and
b.cod_tipo=arr_ordenes[curr].cod_tipo and
b.cod_sec=arr_ordenes[curr].cod_sec and
a.cod_nab = b.cod_nab
DISPLAY BY NAME m_articulos.cod_nab
DISPLAY BY NAME descrip1
IF verdad = "N" THEN
NEXT FIELD num_parte
END IF
END IF
LET valor_total = 0
FOR idx = 1 TO ARR_COUNT()
IF arr_ordenes[idx].valor > 0 THEN
LET valor_total = valor_total + arr_ordenes[idx].valor
END IF
END FOR
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
DELETE FROM cotb00025 WHERE @tipo = ordenes.tipo AND
@num_oc = ordenes.num_oc
FOR idx = 1 TO ARR_COUNT()
UPDATE cotb00008 SET procesada = "N"
WHERE @num_req = arr_ordenes[idx].num_req
END FOR
RETURN
END IF
LET flete1.total_b = valor_total
IF ordenes.cod_sp = 23 THEN
PROMPT "Esta Orden Paga ITBI (S/N)?" FOR CHAR opc2
LET opc2 = UPSHIFT(opc2)
IF opc2 = "S" THEN
LET flete1.valor = flete1.total_b * 0.08
ELSE
LET flete1.valor = 0
END IF
ELSE
LET flete1.valor = 0
END IF
LET flete1.ot_valor = 0
LET flete1.total_1 = flete1.total_b + flete1.valor + flete1.ot_valor
LET programa = 20
CALL notas20()
PROMPT "Toda la informacion esta correcta (S/N)?" FOR CHAR OPC
LET OPC = UPSHIFT(OPC)
IF OPC = "S" THEN
DISPLAY "Estoy actualizando las tablas" AT 24,1 ATTRIBUTE(BOLD)
INSERT INTO cotb00014 VALUES (ordenes.*,flete1.valor,flete1.ot_valor,
null,null,user,current,null,null)
IF ordenes.num_oc = 1 THEN
INSERT INTO cotb00030 (num_oc,us_crea,fech_crea)
VALUES (1,USER,CURRENT)
ELSE
UPDATE cotb00030 SET (num_oc,status_t,us_crea,fech_crea) =
(ordenes.num_oc,NULL,USER,CURRENT)
END IF
FOR idx = 1 TO 200
IF arr_ordenes[idx].num_req = 0 THEN
LET arr_ordenes[idx].num_req = null
END IF
IF arr_ordenes[idx].num_req IS NOT NULL THEN
IF arr_ordenes[idx].cod_n is not null THEN
INSERT INTO cotb00015 VALUES (ordenes.num_oc,arr_ordenes[idx].num_req,
ordenes.tipo,arr_ordenes[idx].cod_n,arr_ordenes[idx].cod_grupo,
arr_ordenes[idx].cod_tipo,arr_ordenes[idx].cod_sec,
arr_ordenes[idx].num_parte,arr_ordenes[idx].cantidad,
arr_ordenes[idx].precio,cod_mon,null,user,current,null,null)
END IF
END IF
UPDATE cotb00008 set procesada = "S"
WHERE @num_req = arr_ordenes[idx].num_req and
@cod_n = arr_ordenes[idx].cod_n and
@cod_grupo= arr_ordenes[idx].cod_grupo and
@cod_tipo = arr_ordenes[idx].cod_tipo and
@cod_sec = arr_ordenes[idx].cod_sec and @status_t is null
END FOR
DISPLAY " " AT 24,1
LET numero_msg = 1
CALL msg(numero_msg)
START REPORT orden20 TO "rpco20" #"%USHOME%\\archivo"
DISPLAY "Impresion en Proceso... Espere Por Favor" AT 23,1
ATTRIBUTE(YELLOW)
FOR idx = 1 TO arr_count()
IF arr_orden20[idx].descripcion IS NOT NULL THEN
OUTPUT TO REPORT orden20(ordenes.num_oc,
arr_orden20[idx].cantidad,
arr_orden20[idx].unidad,
arr_orden20[idx].descripcion,
arr_orden20[idx].valor1)
END IF
END FOR
FINISH REPORT orden20
CLEAR FORM
IF control_linea > 26 THEN
LET numero_msg = 218
CALL msg(numero_msg)
DECLARE bus_r CURSOR FOR
SELECT UNIQUE a.num_req INTO requis FROM cotb00015 a
WHERE a.num_oc = ordenes.num_oc AND a.tipo = ordenes.tipo
FOREACH bus_r
UPDATE cotb00008 SET procesada = NULL WHERE num_req = requis
END FOREACH
DELETE FROM cotb00014 WHERE @num_oc = ordenes.num_oc AND
@tipo = ordenes.tipo
DELETE FROM cotb00015 WHERE @num_oc = ordenes.num_oc AND
@tipo = ordenes.tipo
DELETE FROM cotb00025 WHERE @tipo = ordenes.tipo AND
@num_oc = ordenes.num_oc
DELETE FROM cotb00029 WHERE @tipo = ordenes.tipo AND
@num_oc = ordenes.num_oc
UPDATE cotb00030 SET num_oc = ordenes.num_oc - 1
ELSE
RUN "cat rpco20|lp -dlpt16"
END IF
ELSE
DISPLAY "Estoy actualizando las tablas" AT 24,1 ATTRIBUTE(BOLD)
DELETE FROM cotb00025 WHERE @tipo = ordenes.tipo AND
@num_oc = ordenes.num_oc
DELETE FROM cotb00029 WHERE @num_oc = ordenes.num_oc
UPDATE cotb00030 SET num_oc = ordenes.num_oc - 1
FOR idx = 1 TO 200
IF arr_ordenes[idx].cod_n IS NOT NULL THEN
UPDATE cotb00008 SET procesada = "N"
WHERE @cod_n = arr_ordenes[idx].cod_n AND
@cod_grupo = arr_ordenes[idx].cod_grupo AND
@cod_tipo = arr_ordenes[idx].cod_tipo AND
@cod_sec = arr_ordenes[idx].cod_sec AND
@num_req = arr_ordenes[idx].num_req
END IF
END FOR
END IF
FOR idx = 1 to 100
LET arr_orden20[idx].cantidad = NULL
LET arr_orden20[idx].unidad = NULL
LET arr_orden20[idx].descripcion = NULL
LET arr_orden20[idx].valor1 = NULL
END FOR
#GOTO vuelve
END FUNCTION
FUNCTION copcmf020()
#WHENEVER ERROR CONTINUE
# Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT criterio ON cotb00014.num_oc,cotb00014.tipo,cotb00014.fech_oc,
cotb00014.num_pr,cotb00014.cod_sp,
cotb00014.cod_sp_sec,cotb00014.term_sp,
cotb00014.enviada,cotb00014.fech_enviada,
cotb00014.pago,cotb00014.fech_pago,cotb00014.cierre
FROM num_oc,tipo,fech_oc,num_pr,cod_sp,cod_sp_sec,term_sp,
enviada,fech_enviada,pago,fech_pago,cierre
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec =
" SELECT UNIQUE cotb00014.num_oc,cotb00014.tipo,cotb00014.num_pr, ",
" cotb00014.cod_sp,cotb00014.cod_sp_sec,cotb00014.term_sp, ",
" cotb00014.via,cotb00014.enviada,cotb00014.fech_enviada, ",
" cotb00014.pago,cotb00014.fech_pago,cotb00014.cierre, ",
" cotb00014.cod_pt,cotb00015.cod_mon ",
" FROM cotb00014,cotb00015 ",
" WHERE cotb00014.num_oc = cotb00015.num_oc AND ",
" cotb00014.tipo = cotb00015.tipo AND ",
" cotb00014.status_t is null AND ",criterio clipped," ORDER BY 1"
PREPARE busca1 FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
DECLARE datos SCROLL CURSOR FOR busca1
OPEN datos
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
FETCH FIRST datos INTO
ordenes.num_oc,ordenes.tipo,ordenes.num_pr,ordenes.cod_sp,
ordenes.cod_sp_sec,ordenes.term_sp,ordenes.via,ordenes.enviada,
ordenes.fech_enviada,ordenes.pago,ordenes.fech_pago,ordenes.cierre,
ordenes.cod_pt,cod_mon
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
# Funcion para la busqueda de lo suplidores, Terminos ded pago,
# descripcion del puesto y la via
CALL escoge()
DISPLAY BY NAME ordenes.num_oc THRU ordenes.cod_pt,
suplidor.nom_sp,pagos.descrip_term,
nombre_p,nom_via,cod_mon,nombre_mon
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
# Menu para la busqueda de las informaciones en forma direccional
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO
ordenes.num_oc,ordenes.tipo,ordenes.num_pr,ordenes.cod_sp,
ordenes.cod_sp_sec,ordenes.term_sp,ordenes.via,ordenes.enviada,
ordenes.fech_enviada,ordenes.pago,ordenes.fech_pago,ordenes.cierre,
ordenes.cod_pt,cod_mon
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL escoge()
DISPLAY BY NAME ordenes.*,suplidor.nom_sp,pagos.descrip_term,
nombre_p,nom_via,cod_mon,nombre_mon
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO
ordenes.num_oc,ordenes.tipo,ordenes.num_pr,ordenes.cod_sp,
ordenes.cod_sp_sec,ordenes.term_sp,ordenes.via,ordenes.enviada,
ordenes.fech_enviada,ordenes.pago,ordenes.fech_pago,ordenes.cierre,
ordenes.cod_pt,cod_mon
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL escoge()
DISPLAY BY NAME ordenes.*,suplidor.nom_sp,pagos.descrip_term,
nombre_p,nom_via,cod_mon,nombre_mon
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO
ordenes.num_oc,ordenes.tipo,ordenes.num_pr,ordenes.cod_sp,
ordenes.cod_sp_sec,ordenes.term_sp,ordenes.via,ordenes.enviada,
ordenes.fech_enviada,ordenes.pago,ordenes.fech_pago,ordenes.cierre,
ordenes.cod_pt,cod_mon
CALL escoge()
DISPLAY BY NAME ordenes.*,suplidor.nom_sp,pagos.descrip_term,
nombre_p,nom_via,cod_mon,nombre_mon
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO
ordenes.num_oc,ordenes.tipo,ordenes.num_pr,ordenes.cod_sp,
ordenes.cod_sp_sec,ordenes.term_sp,ordenes.via,ordenes.enviada,
ordenes.fech_enviada,ordenes.pago,ordenes.fech_pago,ordenes.cierre,
ordenes.cod_pt,cod_mon
CALL escoge()
DISPLAY BY NAME ordenes.*,suplidor.nom_sp,pagos.descrip_term,
nombre_p,nom_via,cod_mon,nombre_mon
LET numero_msg = 4
CALL msg(numero_msg)
{ COMMAND "Ver"
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
}
# Comando para actualizar registro
COMMAND KEY ("N") "aNular"
# Actualizacion de la eliminacion logica de las tablas que intervienen el la
# orden de compras
DECLARE bus_l CURSOR FOR
SELECT UNIQUE a.num_req INTO requis FROM cotb00015 a
WHERE a.num_oc = ordenes.num_oc AND a.tipo = ordenes.tipo
FOREACH bus_l
UPDATE cotb00008 SET procesada = NULL WHERE num_req = requis
END FOREACH
UPDATE cotb00014 set status_t = "N",
us_mod = user,
fech_mod = current
WHERE @num_oc = ordenes.num_oc and
@tipo = ordenes.tipo
UPDATE cotb00015 set status_t = "N",
us_mod = user,
fech_mod = current
WHERE @num_oc = ordenes.num_oc and
@tipo = ordenes.tipo
UPDATE cotb00025 set status_t = "N",
us_mod = user,
fech_mod = current
WHERE @num_oc = ordenes.num_oc and
@tipo = ordenes.tipo
UPDATE cotb00029 set status_t = "N",
us_mod = user,
fech_mod = current
WHERE @num_oc = ordenes.num_oc AND
@tipo = ordenes.tipo
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
# Esta funcion no se esta utilizando actualmente al 08/09/93
# Su funcion es de enumerar las ordenes de forma automatica
FUNCTION busca1_sup1()
OPEN WINDOW busqueda AT 10,10 WITH FORM "cofmwd005"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
CONSTRUCT criterio ON cotb00001.nom_sp FROM cotb00001.nom_sp
LET selec = "SELECT cod_sp,cod_sp_sec,nom_sp FROM cotb00001 ",
" WHERE status_t is null AND ",
criterio clipped," ORDER BY 3 "
PREPARE busco FROM selec
DECLARE local CURSOR FOR busco
LET idx = 1
FOREACH local INTO buscar_wd[idx].*
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
LET despl_wd[idx].codigo = buscar_wd[idx].cod_sp using "&&","-",
buscar_wd[idx].cod_sp_sec using "&&&&"
LET despl_wd[idx].nom_sp = buscar_wd[idx].nom_sp clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY despl_wd TO s_muestra.*
LET curr = arr_curr()
IF identifica = "O" THEN
LET ordenes.cod_sp = despl_wd[curr].codigo[1,2]
LET ordenes.cod_sp_sec = despl_wd[curr].codigo[4,7]
LET suplidor.nom_sp = despl_wd[curr].nom_sp
END IF
CLOSE WINDOW busqueda
END FUNCTION
{
FUNCTION escoge()
SELECT nom_sp INTO suplidor.nom_sp FROM cotb00001
WHERE cod_sp = ordenes.cod_sp AND
cod_sp_sec = ordenes.cod_sp_sec AND
status_t is null
SELECT descrip_term INTO pagos.descrip_term FROM cotb00024
WHERE term_sp = ordenes.term_sp AND
status_t is null
LET nombre_mon = null
LET simb_mon = null
SELECT a.descrip_mon,a.simbolo INTO nombre_mon,simb_mon FROM cotb00031 a
WHERE a.cod_mon = cod_mon AND a.status_t is null
LET nombre_p = null
IF ordenes.cod_pt IS NOT NULL THEN
SELECT nom_pt INTO nombre_p FROM cotb00019
WHERE cod_pt = ordenes.cod_pt AND
status_t is null
END IF
IF ordenes.via = "01" THEN
LET nom_via = "MARITIMA"
END IF
IF ordenes.via = "02" THEN
LET nom_via = "AEREA"
END IF
IF ordenes.via = "03" THEN
LET nom_via = "TERRESTRE"
END IF
END FUNCTION
}
FUNCTION busca1_requi()
OPEN WINDOW busqueda1 AT 10,3 WITH FORM "cofmwd007"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
LET selec = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,",
" b.unidad_med,a.cantidad, a.precio,c.base ",
"FROM cotb00008 a,intb00001 b, OUTER intb00002 c ",
"WHERE a.cod_n=b.cod_n and a.cod_grupo=b.cod_grupo and ",
" a.cod_tipo = b.cod_tipo and a.cod_sec = b.cod_sec and ",
" 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.status_t is null AND a.num_req=? AND a.cod_sp_sec= ? ",
" AND (a.procesada IS NULL OR a.procesada='N') ORDER BY 1,2,3,4 "
PREPARE origen FROM selec
DECLARE proximo CURSOR FOR origen
OPEN proximo USING arr_ordenes[curr].num_req,ordenes.cod_sp_sec
IF status = notfound THEN
LET existe = "N"
ELSE
LET existe = "S"
END IF
LET idx2= 0
LET idx = 1
WHILE STATUS != NOTFOUND
FETCH proximo INTO localiza_wd[idx].*
IF status = notfound THEN
EXIT WHILE
END IF
LET idx2 = idx2 + 1
LET mostrar_wd[idx].cod_n = localiza_wd[idx].cod_n
LET mostrar_wd[idx].cod_grupo=localiza_wd[idx].cod_grupo
LET mostrar_wd[idx].cod_tipo =localiza_wd[idx].cod_tipo
LET mostrar_wd[idx].cod_sec =localiza_wd[idx].cod_sec
LET mostrar_wd[idx].descrip_esp = localiza_wd[idx].descrip_esp
LET mostrar_wd[idx].unidad_med = localiza_wd[idx].unidad_med
LET mostrar_wd[idx].cantidad = localiza_wd[idx].cantidad
LET mostrar_wd[idx].precio = localiza_wd[idx].precio
LET m_articulos.base = localiza_wd[idx].base
LET idx = idx + 1
END WHILE
CALL set_count(idx-1)
IF idx2 = 0 THEN
LET existe = "N"
END IF
DISPLAY ARRAY mostrar_wd TO muestra.*
LET curr1 = arr_curr()
IF identifica = "O" THEN
LET arr_ordenes[curr].cod_n = mostrar_wd[curr1].cod_n
LET articulos.descrip_esp = mostrar_wd[curr1].descrip_esp
LET articulos.unidad_med = mostrar_wd[curr1].unidad_med
LET arr_ordenes[curr].cantidad = mostrar_wd[curr1].cantidad
LET arr_ordenes[curr].precio = mostrar_wd[curr1].precio
IF m_articulos.base is null THEN
LET arr_ordenes[curr].valor = arr_ordenes[curr].precio *
arr_ordenes[curr].cantidad
END IF
IF m_articulos.base is not null THEN
LET arr_ordenes[curr].valor = (arr_ordenes[curr].precio / m_articulos.base) *
arr_ordenes[curr].cantidad
END IF
END IF
CLOSE WINDOW busqueda1
END FUNCTION
{
FUNCTION repite3()
LET verdad = null
LET num_req_a = arr_ordenes[curr].num_req
LET codigo = arr_ordenes[curr].cod_n USING "&","-",
arr_ordenes[curr].cod_grupo USING "&","-",
arr_ordenes[curr].cod_tipo USING "&&","-",
arr_ordenes[curr].cod_sec USING "&&&"
FOR idx = 1 TO curr
LET codigo1 = arr_ordenes[idx].cod_n USING "&","-",
arr_ordenes[idx].cod_grupo USING "&","-",
arr_ordenes[idx].cod_tipo USING "&&","-",
arr_ordenes[idx].cod_sec USING "&&&"
IF idx != curr THEN
IF codigo = codigo1 AND
num_req_a = arr_ordenes[idx].num_req THEN
LET verdad = "S"
LET numero_msg = 21
CALL msg(numero_msg)
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END FOR
END FUNCTION
}
FUNCTION busca1_terminos()
OPEN WINDOW busqueda AT 10,10 WITH FORM "cofmwd008"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last -1)
CONSTRUCT criterio ON cotb00024.descrip_term
FROM cotb00024.descrip_term
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec = "SELECT term_sp,descrip_term FROM cotb00024 ",
"WHERE status_t is null AND ",criterio clipped,
"ORDER BY 1 "
PREPARE localiza FROM selec
DECLARE pagar CURSOR FOR localiza
LET idx = 1
FOREACH pagar INTO termino_wd[idx].*
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
LET term_pago_wd[idx].term_sp = termino_wd[idx].term_sp
LET term_pago_wd[idx].descrip_term = termino_wd[idx].descrip_term clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY term_pago_wd TO consart.*
LET curr1 = arr_curr()
IF identifica = "O" THEN
LET pagos.term_sp = term_pago_wd[curr1].term_sp
LET pagos.descrip_term = term_pago_wd[curr1].descrip_term
END IF
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION busca1_puertos()
OPEN WINDOW busqueda_p AT 10,10 WITH FORM "cofmwd010"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last -1)
CONSTRUCT criterio ON cotb00019.nom_pt
FROM cotb00019.nom_pt
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec = "SELECT cod_pt,nom_pt FROM cotb00019 ",
" WHERE ",
" status_t is null AND ",
criterio clipped,
"ORDER BY 1 "
PREPARE localiza_p FROM selec
DECLARE puerto CURSOR FOR localiza_p
LET idx = 1
FOREACH puerto INTO puerto_wd[idx].*
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
LET puertos_wd[idx].cod_pt = puerto_wd[idx].cod_pt
LET puertos_wd[idx].nom_pt = puerto_wd[idx].nom_pt clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY puertos_wd TO consart.*
LET curr1 = arr_curr()
IF identifica = "O" THEN
LET puertos.cod_pt = puertos_wd[curr1].cod_pt
LET puertos.nom_pt = puertos_wd[curr1].nom_pt
END IF
LET nombre_p = puertos_wd[curr1].nom_pt
CLOSE WINDOW busqueda_p
END FUNCTION
FUNCTION busca1_monedas()
OPEN WINDOW busqueda_mon AT 10,10 WITH FORM "cofmwd013"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last -1)
CONSTRUCT criterio ON a.cod_mon FROM cod_mon
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec = "SELECT a.cod_mon,a.descrip_mon FROM cotb00031 a ",
" WHERE a.status_t is null AND ",
criterio clipped," ORDER BY 1 "
PREPARE localiza_mon FROM selec
DECLARE moneda CURSOR FOR localiza_mon
LET idx = 1
FOREACH moneda INTO monedas_wd[idx].*
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
LET monedas_wd[idx].cod_mon = monedas_wd[idx].cod_mon
LET monedas_wd[idx].nombre_mon = monedas_wd[idx].nombre_mon clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
DISPLAY ARRAY monedas_wd TO consart_mon.*
LET curr1 = arr_curr()
IF identifica = "O" THEN
LET monedas.cod_mon = monedas_wd[curr1].cod_mon
LET nombre_mon = monedas_wd[curr1].nombre_mon
END IF
LET cod_mon = monedas_wd[curr1].cod_mon
LET nombre_mon = monedas_wd[curr1].nombre_mon
CLOSE WINDOW busqueda_mon
END FUNCTION
FUNCTION notas20()
OPEN WINDOW apl1_notas AT 2,3 WITH FORM "cofmwd014"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last -1)
IF programa = 20 THEN
INPUT BY NAME notas.ship_to,notas.n_a_b,c_i_d,c_i_d1,nota,nota1,
desc1,flete1.total_b,desc2,flete1.valor,desc3,flete1.ot_valor,
desc4 WITHOUT DEFAULTS
BEFORE FIELD ship_to
IF ordenes.cod_sp = 23 THEN
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
DISPLAY BY NAME notas.ship_to
END IF
AFTER FIELD ship_to
IF ordenes.cod_sp != 23 THEN
IF notas.ship_to IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ship_to
END IF
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
BEFORE FIELD n_a_b
IF ordenes.cod_sp = 23 THEN
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
AFTER FIELD n_a_b
IF ordenes.cod_sp != 23 THEN
IF notas.n_a_b IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD n_a_b
END IF
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
BEFORE FIELD c_i_d
IF ordenes.cod_sp = 23 THEN
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
AFTER FIELD c_i_d
IF ordenes.cod_sp != 23 THEN
IF c_i_d IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD c_i_d
END IF
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
IF ordenes.cod_sp = 23 THEN
EXIT INPUT
END IF
AFTER INPUT
LET notas.nota = nota,nota1
LET notas.c_i_d= c_i_d,c_i_d1
EXIT INPUT
END INPUT
END IF
IF programa = 9 THEN
DISPLAY BY NAME flete1.total_b,flete1.valor,flete1.ot_valor,flete1.total_1
INPUT BY NAME notas.ship_to,notas.n_a_b,c_i_d,c_i_d1,nota,nota1,
desc1,desc2,flete1.valor,desc3,flete1.ot_valor,desc4
WITHOUT DEFAULTS
BEFORE FIELD ship_to
IF ordenes.cod_sp = 23 THEN
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
DISPLAY BY NAME notas.ship_to
END IF
AFTER FIELD ship_to
IF ordenes.cod_sp != 23 THEN
IF notas.ship_to IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ship_to
END IF
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
BEFORE FIELD n_a_b
IF ordenes.cod_sp = 23 THEN
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
AFTER FIELD n_a_b
IF ordenes.cod_sp != 23 THEN
IF notas.n_a_b IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD n_a_b
END IF
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
BEFORE FIELD c_i_d
IF ordenes.cod_sp = 23 THEN
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
AFTER FIELD c_i_d
IF ordenes.cod_sp != 23 THEN
IF c_i_d IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD c_i_d
END IF
ELSE
LET notas.ship_to = "RAY.O.VAC DOMINICANA, S. A."
LET notas.n_a_b = NULL
LET c_i_d = NULL
LET c_i_d1 = NULL
DISPLAY BY NAME notas.ship_to
NEXT FIELD nota
END IF
BEFORE FIELD valor
IF flete1.valor IS NULL THEN
LET flete1.valor = 0
END IF
{
Esto se puso en comentario porque el usuario desea cargarle otros gastos a
las ordenes de los suplidores locales (Laura fue el usuario. Fecha: 9/2/96
IF ordenes.cod_sp = 23 THEN
EXIT INPUT
END IF
}
AFTER FIELD valor
IF flete1.valor IS NULL THEN
LET flete1.valor = 0
END IF
AFTER FIELD ot_valor
IF flete1.ot_valor IS NULL THEN
LET flete1.ot_valor = 0
END IF
AFTER INPUT
IF int_flag THEN
LET int_flag = FALSE
END IF
EXIT INPUT
END INPUT
END IF
LET notas.nota = nota,nota1
LET notas.c_i_d= c_i_d,c_i_d1
IF flete1.total_b IS NULL THEN
LET flete1.total_b = 0
END IF
IF flete1.valor IS NULL THEN
LET flete1.valor = 0
END IF
IF flete1.ot_valor IS NULL THEN
LET flete1.ot_valor = 0
END IF
LET flete1.total_1 = flete1.total_b + flete1.valor + flete1.ot_valor
DISPLAY BY NAME flete1.total_1 SLEEP 2
IF programa = 20 THEN
INPUT ARRAY arr_orden20 FROM sc_orden20.*
BEFORE ROW
LET j1 = ARR_CURR()
LET k1 = SCR_LINE()
AFTER FIELD valor1
IF arr_orden20[j1].cantidad IS NULL OR
arr_orden20[j1].valor1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cantidad
END IF
{
LET flete1.total_b = 0
FOR idx = 1 TO ARR_COUNT()
IF flete1.valor > 0 THEN
LET flete1.total_b = flete1.total_b + arr_orden20[idx].valor1
END IF
END FOR
LET flete1.total_1 = flete1.total_b + flete1.valor + flete1.ot_valor
DISPLAY BY NAME flete1.total_1
}
END INPUT
IF int_flag THEN
LET int_flag = FALSE
END IF
END IF
DELETE FROM cotb00029 WHERE num_oc = 0 OR num_oc IS NULL
INSERT INTO cotb00029 VALUES (ordenes.num_oc,ordenes.tipo,ordenes.cod_sp,
ordenes.cod_sp_sec,notas.ship_to,notas.n_a_b,
notas.c_i_d,notas.nota,NULL,USER,CURRENT,
NULL,NULL)
CLOSE WINDOW apl1_notas
END FUNCTION
REPORT orden20(x)
DEFINE x RECORD
num_oc LIKE cotb00014.num_oc,
cantidad DECIMAL(12,2),
unidad CHAR(10),
descripcion CHAR(50),
valor DECIMAL(12,2)
END RECORD
DEFINE doble_on CHAR(2)
DEFINE doble_off CHAR(2)
DEFINE negrillas_on CHAR(2)
DEFINE negrillas_off CHAR(2)
DEFINE comp_on CHAR(2)
DEFINE comp_off CHAR(2)
DEFINE cuarto_off CHAR(2)
DEFINE cuarto CHAR(2)
DEFINE cuarto1 CHAR(2)
DEFINE cuarto2 CHAR(2)
DEFINE doce CHAR(2)
DEFINE hora CHAR(5)
DEFINE l SMALLINT
DEFINE varia CHAR(10)
DEFINE desc_tipo CHAR(11)
OUTPUT
PAGE LENGTH 50
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 7
ORDER BY x.num_oc
FORMAT
PAGE HEADER
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET cuarto = ASCII 27, ASCII 49
LET cuarto1= ASCII 27, ASCII 48
LET cuarto2= ASCII 27, ASCII 50
LET cuarto_off = ASCII 27, ASCII 50
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ASCII 77
LET hora = time
BEFORE GROUP OF x.num_oc
LET control_linea = 0
LET notas.c_i_d = notas.c_i_d CLIPPED
LET l = LENGTH(notas.c_i_d)
IF ordenes.tipo = "01" THEN
LET desc_tipo = "GENERALES"
END IF
IF ordenes.tipo = "02" THEN
LET desc_tipo = "ROV-LTD"
END IF
IF ordenes.tipo = "03" THEN
LET desc_tipo = "LOCALES"
END IF
IF ordenes.tipo = "04" THEN
LET desc_tipo = "MISCELANEAS"
END IF
PRINT COLUMN 1,comp_off,cuarto
PRINT COLUMN 67, "-",ordenes.tipo,
COLUMN 130,comp_on
IF ordenes.cod_sp = 23 THEN
PRINT COLUMN 80,ordenes.fech_oc USING "dd/mm/yy";
ELSE
PRINT COLUMN 80,ordenes.fech_oc USING "mmm dd/yy";
END IF
PRINT COLUMN 110,ordenes.num_oc USING "##&&&&"
SKIP 1 LINE
PRINT COLUMN 80,notas.ship_to CLIPPED,cuarto1
SKIP 3 LINE
PRINT COLUMN 80,nom_via CLIPPED,cuarto
SKIP 1 LINE
LET fecha1 = ordenes.fech_enviada
IF ordenes.cod_sp = 23 THEN
PRINT COLUMN 81,fecha1 USING "dd/mm/yy"
ELSE
PRINT COLUMN 81,fecha1 USING "mmm dd/yy"
END IF
SKIP 4 LINE
PRINT COLUMN 5, suplidor.nom_sp CLIPPED," (",
ordenes.cod_sp USING "&&","-",
ordenes.cod_sp_sec USING "&&&&",") ",
COLUMN 72, notas.n_a_b,cuarto_off
PRINT COLUMN 5, suplidor.dir_sp CLIPPED;
IF l <= 20 THEN
PRINT COLUMN 92,notas.c_i_d
{ELSE
PRINT COLUMN 05, " "}
END IF
PRINT COLUMN 5, suplidor.ciu_sp CLIPPED,
COLUMN 72,pagos.descrip_term,cuarto
PRINT COLUMN 98," "
PRINT COLUMN 98," "
SKIP 2 LINE
LET total = 0
ON EVERY ROW
IF control_linea IS NULL THEN
LET control_linea = 0
END IF
PRINT COLUMN 1, x.cantidad USING "###,###,###.##",
COLUMN 18, x.unidad CLIPPED," ",x.descripcion CLIPPED,
COLUMN 102, x.valor USING "###,###,###.##"
LET total = total + x.valor
LET control_linea = control_linea + 1
AFTER GROUP OF x.num_oc
PRINT COLUMN 102, "--------------"
LET control_linea = control_linea + 1
IF ordenes.cod_sp = 23 THEN
PRINT COLUMN 40, "MONTO BRUTO ",desc1 CLIPPED,
COLUMN 102, flete1.total_b USING "###,###,###.##"
LET control_linea = control_linea + 1
IF flete1.ot_valor IS NOT NULL AND flete1.ot_valor > 0 THEN
PRINT COLUMN 40, "ITBIS ",desc2 CLIPPED,
COLUMN 102, flete1.ot_valor USING "###,###,###.##"
LET control_linea = control_linea + 1
END IF
PRINT COLUMN 102, "--------------"
LET control_linea = control_linea + 1
PRINT COLUMN 40, "MONTO NETO ",desc4 CLIPPED,
COLUMN 97, simb_mon CLIPPED,
COLUMN 102, flete1.total_1 USING "###,###,###.##"
LET control_linea = control_linea + 1
PRINT COLUMN 102, "=============="
LET control_linea = control_linea + 1
SKIP 1 LINE
LET control_linea = control_linea + 1
ELSE
PRINT COLUMN 40, "FOB ",desc1 CLIPPED,
COLUMN 102, flete1.total_b USING "###,###,###.##"
LET control_linea = control_linea + 1
IF flete1.valor IS NOT NULL AND flete1.valor > 0 THEN
PRINT COLUMN 40, "FREIGHT ",desc2 CLIPPED,
COLUMN 102, flete1.valor USING "###,###,###.##"
LET control_linea = control_linea + 1
END IF
IF flete1.ot_valor IS NOT NULL AND flete1.ot_valor > 0 THEN
PRINT COLUMN 40, "OTHERS CHARGES ",desc3 CLIPPED,
COLUMN 102, flete1.ot_valor USING "###,###,###.##"
LET control_linea = control_linea + 1
END IF
PRINT COLUMN 102, "--------------"
LET control_linea = control_linea + 1
PRINT COLUMN 40, "C&F ",desc4 CLIPPED,
COLUMN 97, simb_mon CLIPPED,
COLUMN 102, flete1.total_1 USING "###,###,###.##"
LET control_linea = control_linea + 1
PRINT COLUMN 102, "=============="
LET control_linea = control_linea + 1
END IF
SKIP 1 LINE
LET control_linea = control_linea + 1
IF l > 20 THEN
IF notas.c_i_d IS NOT NULL THEN
PRINT COLUMN 15,"C. I. D.: ",notas.c_i_d CLIPPED
END IF
LET control_linea = control_linea + 1
END IF
IF notas.nota IS NOT NULL AND notas.nota != " " THEN
SKIP 1 LINE
LET control_linea = control_linea + 1
IF ordenes.cod_sp = 23 THEN
PRINT COLUMN 17,"NOTA: ",notas.nota
LET control_linea = control_linea + 1
ELSE
PRINT COLUMN 17,"NOTE: ",notas.nota
LET control_linea = control_linea + 1
END IF
END IF
PRINT comp_off,cuarto_off
PAGE TRAILER
PRINT COLUMN 1,negrillas_off
END REPORT