Files
MBS/PROYECTO/PRDIR/Copia de prprmt008.4gl
T

2212 lines
81 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : PRPRMT008
OBJETIVO : Ordenes de Pedidos
PROGRAMADOR : Oscar Castillo
FECHA REALIZACION : Sábado 12 de Agosto de 2000
MODIFICADO POR : Victor Gomez C
FECHA MODIFICACION: Wednesday, 10 January, 2001
MODIFICADO POR : Victor Gomez C
FECHA MODIFICACION: Tuesday, January 16, 2001
Crear campos observacion y fecha de cierre de la
orden de produccion.
MODIFICACION : CONTROL DSPICE DE LOS PRODUCTOS
FECHA MODIFICACION:
MODIFICADO POR : JUAN SOTO
MODIFIACION : ADICION OPCION DE MODIFICAR LA ORDEN DE PEDIDOS
FECHA MODIFICACION : 29 DE OCTUBRE 2008
MODIFICADO POR : JUAN SOTO
------------------------------------------------------------------
}
GLOBALS "prprgb000.4gl"
DEFINE despiece ARRAY[100] OF RECORD
etiqueta CHAR(20),
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)
END RECORD,
total_medida DEC(12,5),
factor_conv DEC(12,5),
tmpnumero INTEGER,
arrcuenta SMALLINT,
nuevo,cliente1,conduce CHAR(1)
DEFINE ptipocliente ui.combobox,
ttipo SMALLINT,tdescripcion CHAR(30)
DEFINE nombre LIKE vetb00004.nombre,
descrip_esp LIKE iptb00002.descrip_esp,
unidad LIKE iptb00002.unidad_med,
esta,opt4 CHAR(15),
nombre_vend,nombres,apellidos CHAR(40),fcalle CHAR(25),
fcasa_num CHAR(5), fbarrio,furbanizacion CHAR(15),
monto_desc,total1,p_costos1,total_i,total_mo DECIMAL(12,2),
ult_numero,cuenta INTEGER,
vetb05 RECORD LIKE vetb00005.*,
cuenta_p,ridx SMALLINT,
pbalance1,pbalance2 DEC(12,2),
descripcion_ventas CHAR(30),simbolo CHAR(5)
DEFINE prtb15 ARRAY[10] OF RECORD
num_oc LIKE prtb00015.num_oc,
cod_n LIKE prtb00015.cod_n,
cod_grupo LIKE prtb00015.cod_grupo,
cod_tipo LIKE prtb00015.cod_tipo,
cod_sec LIKE prtb00015.cod_sec,
cantidad_1 DEC(12,5),
cantidad LIKE prtb00015.cantidad,
fecha LIKE prtb00015.fecha
END RECORD
DEFINE p_prtb14 RECORD LIKE prtb00014.*
DEFINE f_itbis DEC(3,2)
DEFINE sub_total,sub_total1,balance DECIMAL(10,2),
descrip_p CHAR(30)
DEFINE p_totales RECORD
sub_total DEC(8,2), #-> Sub-Total de los Productos menos descuento
unidad_med CHAR(4), #-> Unidad de medida del producto
total_v DEC(10,2) #-> Total de la venta
END RECORD
DEFINE arr_prtb08 ARRAY[200] OF RECORD
fila SMALLINT,
cod_n LIKE prtb00013.cod_n,
cod_grupo LIKE prtb00013.cod_grupo,
cod_tipo LIKE prtb00013.cod_tipo,
cod_sec LIKE prtb00013.cod_sec,
descrip_esp LIKE iptb00002.descrip_esp,
unidad_med LIKE iptb00002.unidad_med,
altura_zocalo LIKE prtb00013.altura_zocalo,
terminacion CHAR(1),
bisel LIKE prtb00013.bisel,
cantidad_1 DEC(12,5),
cantidad LIKE prtb00013.cantidad,
precio LIKE prtb00013.precio,
descuento LIKE prtb00013.descuento,
total_p DECIMAL(10,2)
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
CALL prprmt008()
END MAIN
FUNCTION prprmt008()
# WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 23
OPEN WINDOW ctfmmt008 AT 4,3 WITH FORM "prfmmt008"
MENU "OPCIONES"
COMMAND "Adicionar" "<Esc> Adiciona Registro <Supr> Cancela Operacion"
LET INT_FLAG = FALSE
CLEAR FORM
LET nuevo = "S"
CALL prpcad008()
COMMAND "Consultar"
LET INT_FLAG = FALSE
CLEAR FORM
CALL prpcmf008()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION prpcad008()
## Captura los datos que va a contener el registro
LET INT_FLAG = false
LABEL vuelve:
IF nuevo = "S" THEN
INITIALIZE prtb08.* TO NULL
LET prtb08.num_oc = 0
LET prtb08.fecha_entrega = TODAY + 20
SELECT a.num_oc INTO tmpnumero FROM prtb00024 a
LET tmpnumero = tmpnumero + 1
UPDATE prtb00024 set num_oc = tmpnumero
END IF
CALL ui.ComboBox.setDefaultInitializer("cventas")
CALL ui.ComboBox.setDefaultInitializer("ccondicion")
INPUT BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.ventas,prtb08.cotizacion_no,
prtb08.tipo_cliente,
prtb08.sec_cliente,prtb08.fecha_entrega,
prtb08.cond_pago,prtb08.ubicacion WITHOUT DEFAULTS
ON ACTION sec_cliente
IF prtb08.tipo_cliente iS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
CALL busca_cliente8()
DISPLAY BY NAME prtb08.tipo_cliente,prtb08.sec_cliente,nombre ATTRIBUTE(BLUE)
AFTER FIELD ventas
DECLARE busca_tipo CURSOR FOR
SELECT UNIQUE a.tipo_cliente,a.tipo_cliente INTO prtb08.tipo_cliente FROM vetb00060 a
WHERE a.ventas = prtb08.ventas
LET ptipocliente = ui.ComboBox.forName("formonly.tipo_cliente")
CALL ptipocliente.clear()
FOREACH busca_tipo
CALL ptipocliente.additem(prtb08.tipo_cliente,prtb08.tipo_cliente)
END FOREACH
DISPLAY BY NAME prtb08.tipo_cliente
AFTER FIELD cotizacion_no
BEFORE FIELD tipo_cliente
IF nuevo <> "S" THEN
CALL controlact()
IF cliente1 = "N" THEN
ERROR "NO PUEDE MODIFICAR DATOS DEL CLIENTE, ESTA ORDEN TIENE AVANCE"
NEXT FIELD fecha_entrega
END IF
END IF
{ AFTER FIELD sec_cliente
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.telefono, prtb08.fax, prtb08.direccion
AFTER FIELD parchivo
IF parchivo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD parchivo
END IF
LET karchivo = "dir ",FGL_GETENV("FILEPATH"),"\\",parchivo CLIPPED,".bmp"
RUN karchivo RETURNING perror
IF perror != 0 THEN
LET numero_msg = 385
CALL msg(numero_msg)
NEXT FIELD parchivo
END IF
}
AFTER FIELD fecha_entrega
IF prtb08.fecha_entrega IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_entrega
END IF
IF prtb08.fecha_entrega < prtb08.fecha_oc THEN
LET numero_msg =51
CALL msg(numero_msg)
NEXT FIELD fecha_entrega
END IF
{ AFTER FIELD nombre_file
LET nombmp = FGL_GETENV("FGLBMP")
LET nombmp = nombmp CLIPPED,prtb08.nombre_file CLIPPED,".bmp"
DISPLAY nombmp TO bmpfld
AFTER FIELD sec_vend
IF prtb08.sec_vend IS NOT NULL THEN
SELECT a.nom1_emp,a.apell1_emp INTO nombres,apellidos
FROM adtb00003 a
WHERE a.num_emp = prtb08.sec_vend
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD sec_vend
END IF
LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED
DISPLAY BY NAME nombre_vend ATTRIBUTE(BLUE)
END IF
}
BEFORE FIELD fecha_oc
IF nuevo = "S" THEN
LET prtb08.fecha_oc = TODAY
DISPLAY BY NAME prtb08.fecha_oc ATTRIBUTE(BLUE)
END IF
AFTER FIELD fecha_oc
IF prtb08.fecha_oc > TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD fecha_oc
END IF
{
AFTER FIELD cond_pago
IF prtb08.cond_pago IS NULL THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD cond_pago
END IF
SELECT a.descrip INTO descrip_p
FROM vetb00012 a
WHERE a.cond_pago = prtb08.cond_pago AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cond_pago
END IF
DISPLAY BY NAME descrip_p ATTRIBUTE(BLUE)
}
AFTER FIELD sec_cliente
SELECT a.nombre,a.telefono,a.fax
INTO nombre,prtb08.telefono,prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
SELECT a.* INTO vetb05.*
FROM vetb00005 a
WHERE a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = vetb05.calle CLIPPED," ",vetb05.casa_num CLIPPED,vetb05.barrio CLIPPED
DISPLAY BY NAME prtb08.direccion,prtb08.telefono,nombre ATTRIBUTE(BLUE)
SELECT a.sec_vend,b.nom1_emp,b.apell1_emp INTO prtb08.sec_vend,nombres,apellidos
FROM vetb00028 a,adtb00003 b
WHERE a.sec_vend = b.num_emp AND a.tipo_cliente = prtb08.tipo_cliente and
a.sec_cliente = prtb08.sec_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg =119
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
IF prtb08.sec_vend IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
LET nombre_vend ="NO TIENE VENDEDOR"
DISPLAY BY NAME nombre_vend ATTRIBUTE(RED)
END IF
LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED
DISPLAY BY NAME nombre_vend,prtb08.sec_vend
SELECT SUM(a.valor) INTO pbalance1
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente AND
a.tipo_doc NOT IN ("PC","AV")
AND a.status_t IS NULL
IF pbalance1 IS NULL THEN
LET pbalance1 = 0
END IF
SELECT SUM(a.valor) INTO pbalance2
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente AND
a.tipo_doc IN ("AV")
AND a.status_t IS NULL
IF pbalance2 IS NULL THEN
LET pbalance2 = 0
END IF
LET balance = pbalance1 - pbalance2
DISPLAY BY NAME balance
AFTER INPUT
IF INT_FLAG THEN
LET opt4 = FGL_WINQUESTION("Pregunta","Esta seguro que desea salir del programa?","no","yes|no|cancel","question",0)
LET opt4 = UPSHIFT(opt4)
IF opt4 = "NO" THEN
LET INT_FLAG = FALSE
LET opt4 = NULL
CONTINUE INPUT
END IF
LET numero_msg = 2
CALL msg(numero_msg)
LET INT_FLAG = FALSE
RETURN
END IF
END INPUT
IF nuevo = "S" THEN
LET p_totales.sub_total = 0
LET prtb08.cantidad_i = 0
LET prtb08.precio_i = 0
LET prtb08.cantidad_mo = 0
LET prtb08.precio_mo = 0
LET prtb08.transporte = 0
LET prtb08.itbis = 0
LET p_totales.total_v = 0
FOR idx =1 to 10
LET arr_prtb08[idx].fila = null
LET arr_prtb08[idx].cod_n = null
LET arr_prtb08[idx].cod_grupo= null
LET arr_prtb08[idx].cod_tipo = null
LET arr_prtb08[idx].cod_sec = null
LET arr_prtb08[idx].cantidad_1 = null
LET arr_prtb08[idx].cantidad = null
LET arr_prtb08[idx].precio = null
LET arr_prtb08[idx].descuento = null
LET arr_prtb08[idx].total_p = null
END FOR
END IF
IF nuevo <> "S" THEN
CALL controlact()
IF conduce = "N" THEN
ERROR "ESTA ORDEN TIENE CONDUCES ACTIVOS, NO PUEDE SER MODIFICADA"
RETURN
END IF
END IF
ERROR "<F9> PARA LOS DESPACHOS PARCIALES"
INPUT ARRAY arr_prtb08 WITHOUT DEFAULTS FROM s_pedido.*
ON KEY(F9)
CALL parciales()
ON KEY(F10)
# CONTROL DESPIECE
IF nuevo <> "S" THEN
SELECT UNIQUE a.cod_n FROM iptb00027 a
WHERE a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec
IF STATUS != NOTFOUND THEN
SELECT UNIQUE a.cod_n FROM prtb00022 a
WHERE a.secuencia = arr_prtb08[curr].fila AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec AND
a.num_oc = prtb08.num_oc
IF STATUS = NOTFOUND THEN
LET numero_msg =398
CALL msg(numero_msg)
CALL despiece()
END IF
ELSE
ERROR "ESTE PRODUCTO NO SE DESPIEZA"
NEXT FIELD cod_n
END IF
###---------------------------------------------------------------
END IF
CALL despiece()
DISPLAY arr_prtb08[curr].cantidad_1 TO s_pedido[scr_l].cantidad_1
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
IF nuevo = "S" THEN
LET sub_total = 0
END IF
ON ACTION cod_n
CALL ccodn()
DISPLAY arr_prtb08[curr].* TO s_pedido[scr_l].*
BEFORE FIELD cod_n
IF nuevo = "S" THEN
LET arr_prtb08[curr].fila = arr_curr()
DISPLAY arr_prtb08[curr].fila TO s_pedido[scr_l].fila
END IF
AFTER FIELD cod_sec
LET descrip_esp = NULL
LET p_totales.unidad_med = NULL
IF arr_prtb08[curr].cod_sec IS NOT NULL THEN
SELECT a.descrip_esp, a.unidad_med INTO descrip_esp,p_totales.unidad_med
FROM iptb00002 a
WHERE a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_sec = arr_prtb08[curr].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
LET arr_prtb08[curr].descrip_esp = descrip_esp
LET arr_prtb08[curr].unidad_med = p_totales.unidad_med
DISPLAY arr_prtb08[curr].descrip_esp TO s_pedido[scr_l].descrip_esp
DISPLAY arr_prtb08[curr].unidad_med TO s_pedido[scr_l].unidad_med
{ BUSCA LOS PRECIOS DEL PRODUCTO, ESTO NO ESTA FUNCIONANDO HASTA QUE SE AUTORICE
IF nuevo = "S" THEN
LET p_costos1 = 0
SELECT precio INTO p_costos1 FROM vetb00025 a
WHERE a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec AND
a.ventas = prtb08.ventas AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
SELECT precio INTO p_costos1 FROM vetb00025 a
WHERE a.tipo_cliente IS NULL AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_sec = arr_prtb08[curr].cod_sec AND
a.ventas = prtb08.ventas AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 85
CALL msg(numero_msg)
# NEXT FIELD cod_n
END IF
END IF
END IF
}
IF nuevo = "S" THEN
# CONTROL DESPIECE
SELECT UNIQUE a.cod_n FROM iptb00027 a
WHERE a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec
IF STATUS != NOTFOUND THEN
SELECT UNIQUE a.cod_n FROM prtb00022 a
WHERE a.secuencia = arr_prtb08[curr].fila AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec AND
a.num_oc = tmpnumero
IF STATUS = NOTFOUND THEN
LET numero_msg =398
CALL msg(numero_msg)
CALL despiece() #NEXT FIELD cod_n
END IF
END IF
###---------------------------------------------------------------
ELSE
# CONTROL DESPIECE
SELECT UNIQUE a.cod_n FROM iptb00027 a
WHERE a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec
IF STATUS != NOTFOUND THEN
SELECT UNIQUE a.cod_n FROM prtb00022 a
WHERE a.secuencia = arr_prtb08[curr].fila AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec AND
a.num_oc = prtb08.num_oc
IF STATUS = NOTFOUND THEN
LET numero_msg =398
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END IF
### FACTOR CONVERSION
SELECT UNIQUE a.factor_conv INTO factor_conv FROM iptb00001 a
WHERE a.cod_n=arr_prtb08[curr].cod_n and a.cod_grupo=arr_prtb08[curr].cod_grupo
and a.cod_tipo=arr_prtb08[curr].cod_tipo and a.cod_sec=arr_prtb08[curr].cod_sec
and a.status_t IS NULL
IF STATUS = NOTFOUND THEN
ERROR "NO EXISTE FACTOR DE CONVERSION"
NEXT FIELD cod_n
END IF
# IF nuevo = "S" THEN
#LET arr_prtb08[curr].precio = p_costos1 ESTO ES PARA EL PRECIO
# END IF
DISPLAY arr_prtb08[curr].precio TO s_pedido[scr_l].precio
END IF
AFTER FIELD terminacion
IF arr_prtb08[curr].terminacion IS NOT NULL THEN
IF arr_prtb08[curr].terminacion <> "R" AND
arr_prtb08[curr].terminacion <> "P" AND
arr_prtb08[curr].terminacion <> "B" AND
arr_prtb08[curr].terminacion <> "A" THEN
NEXT FIELD terminacion
END IF
END IF
DISPLAY arr_prtb08[curr].terminacion TO s_pedido[scr_l].terminacion ATTRIBUTE(BLUE)
AFTER FIELD bisel
{ IF arr_prtb08[curr].bisel IS NOT NULL THEN
IF arr_prtb08[curr].bisel <> "DBN" AND
arr_prtb08[curr].bisel <> "SDN" THEN
NEXT FIELD bisel
END IF
END IF }
DISPLAY arr_prtb08[curr].bisel TO s_pedido[scr_l].bisel ATTRIBUTE(BLUE)
AFTER FIELD cantidad_1
IF arr_prtb08[curr].cantidad_1 IS NULL OR
arr_prtb08[curr].cantidad_1 < 0 THEN
LET arr_prtb08[curr].descuento = 0
END IF
LET arr_prtb08[curr].cantidad = arr_prtb08[curr].cantidad_1 * factor_conv
DISPLAY arr_prtb08[curr].cantidad TO s_pedido[scr_l].cantidad
AFTER FIELD precio
IF arr_prtb08[curr].precio IS NULL OR
arr_prtb08[curr].precio < 0 THEN
LET arr_prtb08[curr].descuento = 0
END IF
LET bandera = 0
LET ridx = curr
CALL codigoRepite()
IF bandera = 1 THEN
NEXT FIELD cod_n
END IF
BEFORE FIELD descuento
LET monto_desc = 0
LET total1 = 0
AFTER FIELD descuento
IF arr_prtb08[curr].descuento IS NULL THEN
LET arr_prtb08[curr].descuento = 0
END IF
LET monto_desc = (arr_prtb08[curr].precio * arr_prtb08[curr].cantidad) *
(arr_prtb08[curr].descuento /100)
LET total1 = (arr_prtb08[curr].precio * arr_prtb08[curr].cantidad) - monto_desc
LET arr_prtb08[curr].total_p = total1
LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[curr].total_p
DISPLAY arr_prtb08[curr].total_p TO s_pedido[scr_l].total_p
DISPLAY BY NAME p_totales.sub_total
AFTER ROW
IF nuevo = "S" THEN
LET p_totales.sub_total = 0
LET arr_prtb08[curr].total_p = arr_prtb08[curr].cantidad *
arr_prtb08[curr].precio
END IF
FOR idx = 1 TO arr_count()
IF arr_prtb08[idx].total_p IS NOT NULL THEN
LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p
END IF
END FOR
DISPLAY BY NAME p_totales.sub_total
AFTER INPUT
IF INT_FLAG THEN
LET opt4 = FGL_WINQUESTION("Pregunta","Esta seguro que desea salir del programa?","no","yes|no|cancel","question",0)
LET opt4 = UPSHIFT(opt4)
IF opt4 = "NO" THEN
LET INT_FLAG = FALSE
LET opt4 = NULL
CONTINUE INPUT
END IF
LET numero_msg = 2
CALL msg(numero_msg)
DELETE FROM prtb00022 where num_oc = tmpnumero
LET INT_FLAG = FALSE
RETURN
END IF
# CALCULO DE LOS TOTALES
LET p_totales.sub_total = 0
LET scr_l = scr_line()
FOR idx = 1 TO arr_count()
# IF arr_prtb08[idx].total_p IS NULL THEN
IF arr_prtb08[idx].precio IS NOT NULL OR
arr_prtb08[idx].cantidad IS NOT NULL THEN
IF arr_prtb08[idx].precio = 0 THEN
LET numero_msg = 207
CALL msg(numero_msg)
CONTINUE INPUT
END IF
LET monto_desc = (arr_prtb08[idx].precio * arr_prtb08[idx].cantidad) *
(arr_prtb08[idx].descuento /100)
LET arr_prtb08[idx].total_p = (arr_prtb08[idx].cantidad *
arr_prtb08[idx].precio)-
monto_desc
LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p
END IF
DISPLAY arr_prtb08[idx].total_p TO s_pedido[scr_l].total_p
# END IF
# IF arr_prtb08[idx].total_p IS NOT NULL THEN
LET bandera = 0
LET ridx = idx
# END IF
END FOR
IF p_totales.sub_total IS NULL OR p_totales.sub_total = 0 THEN
LET numero_msg =207
CALL msg(numero_msg)
CONTINUE INPUT
END IF
#-> Registra las observaciones de la orden corte vg Tuesday, 13 March, 2001 11:08:14 AM
display "Observaciones " at 23,15 SLEEP 4
CALL oc_detalles()
EXIT INPUT
END INPUT
LET arrcuenta = arr_count()
LET p_totales.total_v = p_totales.sub_total
DISPLAY BY NAME p_totales.sub_total,p_totales.total_v
INPUT BY NAME prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis WITHOUT DEFAULTS
AFTER FIELD cantidad_i
IF prtb08.cantidad_i IS NULL THEN
LET prtb08.cantidad_i = 0
END IF
AFTER FIELD precio_i
IF prtb08.precio_i IS NULL THEN
LET prtb08.precio_i = 0
END IF
LET total_i = (prtb08.cantidad_i * prtb08.precio_i)
AFTER FIELD cantidad_mo
IF prtb08.cantidad_mo IS NULL THEN
LET prtb08.cantidad_mo = 0
END IF
AFTER FIELD precio_mo
IF prtb08.precio_mo IS NULL THEN
LET prtb08.precio_mo = 0
END IF
LET total_mo = (prtb08.cantidad_mo * prtb08.precio_mo)
AFTER FIELD transporte
LET sub_total = (total_i + total_mo)+ p_totales.sub_total
LET sub_total1 = sub_total + prtb08.transporte
#-> Bsuca el itbis disponible para la fecha actual vg
IF prtb08.tipo_cliente <> 17 THEN
SELECT i.itbi/100 INTO f_itbis FROM vetb00019 i
WHERE i.disponible = "S"
LET prtb08.itbis = (sub_total1 * f_itbis)
ELSE
LET prtb08.itbis = 0
END IF
DISPLAY BY NAME prtb08.itbis
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.total_v
AFTER INPUT
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET INT_FLAG = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
LABEL correcto:
LET opt4 = FGL_WINQUESTION("Pregunta","Toda La informacion Esta Correcta","yes","yes|no|cancel","question",0)
# PROMPT "TODA LA INFORMACION ESTA CORRECTA? " FOR opt4
LET opt4 = upshift(opt4)
IF opt4 IS NULL THEN
go to correcto
END IF
IF opt4 = "YES" THEN
# SE COLOCO QUE EL NUMERO SE GENERARA A PARTIR DEL 01/01/2003 HACIA ATRAS POR MODIFICACION DEL
# SISTEMA Y LA INCLUSION DEL NCF A PARTIR DEL 01/01/2007
# FECHA MODIFICACION: 11/01/2007
SELECT num_oc INTO ult_numero FROM prtb00020
IF nuevo = "S" THEN
IF ult_numero IS NULL THEN
LET ult_numero = 0
END IF
LET ult_numero = ult_numero + 1
LET prtb08.num_oc = ult_numero
DISPLAY BY NAME prtb08.num_oc
#LET archivo = FGL_GETENV("USORDEN")
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT o_pedido TO archivo
END IF
#LET prtb08.nombre_file = parchivo CLIPPED,".bmp"
LET prtb08.fecha_cierre = NULL
#-> Actualiza archivo para el monitoreo de las ordenes vg Wednesday, 14 February, 2001
LET prtb09.num_oc = prtb08.num_oc
LET prtb09.fecha = prtb08.fecha_oc
LET prtb09.pendiente = "S"
LET prtb09.detalle = "SE GENERO LA ORDEN DE PEDIDO"
LET prtb09.status_t = NULL
IF nuevo = "S" THEN
LET prtb08.cerrada = "N"
INSERT INTO prtb00012 VALUES (prtb08.*)
INSERT INTO prtb00009 (num_oc,fecha,fecha_fabricacion,pendiente,detalle,us_crea,fech_crea)
VALUES (prtb09.num_oc,prtb09.fecha,prtb09.fecha_fabricacion,prtb09.pendiente,prtb09.detalle,SUSER_SNAME(),GETDATE())
DELETE FROM prtb00014 WHERE num_oc = prtb08.num_oc
INSERT INTO prtb00014 VALUES (prtb08.num_oc,p_prtb14.observacion,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL)
UPDATE prtb00012 SET us_crea = SUSER_SNAME(),
fech_crea = GETDATE()
WHERE @num_oc = prtb08.num_oc
UPDATE prtb00009 SET us_crea = SUSER_SNAME(),
fech_crea = GETDATE()
WHERE @num_oc = prtb09.num_oc
UPDATE prtb00020 SET num_oc = ult_numero,
us_Crea = SUSER_SNAME(),
fech_crea = GETDATE()
# ACTUALIZA NUMERO TEMPORAL PARA EL DESPIECE
UPDATE prtb00022 SET num_oc = prtb08.num_oc WHERE num_oc = tmpnumero
UPDATE prtb00024 SET num_oc = num_oc + 1
# SE ESTA VALIDANDO EL PRODUCTO TERMINADO EN EL CODIGO DE LA MATERIA PRIMA
# PARA CUANDO LA ORDEN SEA PARA PRODUCTOS IMPORTADOS QUE NO TIENEN COMPOSICION
FOR idx = 1 TO arr_count()
IF arr_prtb08[idx].total_p IS NOT NULL THEN
INSERT INTO prtb00013 VALUES (prtb08.num_oc,arr_prtb08[idx].fila,
arr_prtb08[idx].cod_n,
arr_prtb08[idx].cod_grupo,
arr_prtb08[idx].cod_tipo,
arr_prtb08[idx].cod_sec,
arr_prtb08[idx].altura_zocalo,
arr_prtb08[idx].terminacion,
arr_prtb08[idx].bisel,
arr_prtb08[idx].precio,
arr_prtb08[idx].cantidad,
arr_prtb08[idx].descuento,
null,SUSER_SNAME(),GETDATE(),null,null)
INSERT INTO prtb00023 VALUES (prtb08.num_oc,arr_prtb08[idx].fila,
arr_prtb08[idx].cod_n,
arr_prtb08[idx].cod_grupo,
arr_prtb08[idx].cod_tipo,
arr_prtb08[idx].cod_sec,
arr_prtb08[idx].cantidad_1,
arr_prtb08[idx].cantidad)
OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*)
END IF
END FOR
# Actualizacion Parcialidades
FOR idx = 1 TO cuenta_p
INSERT INTO prtb00015 VALUES (prtb08.num_oc,
prtb15[idx].cod_n,
prtb15[idx].cod_grupo,
prtb15[idx].cod_tipo,
prtb15[idx].cod_sec,
prtb15[idx].cantidad,
prtb15[idx].fecha,
null,SUSER_SNAME(),GETDATE())
END FOR
FINISH REPORT o_pedido
{
LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO")
DISPLAY "IMP ",cmd
RUN cmd
LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO1")
RUN cmd
}
RUN imprime
LET cmd = "TYPE ",archivo CLIPPED," ",copia
RUN cmd
LET numero_msg = 1
CALL msg(numero_msg)
ELSE
# ACTUALIZACION DE LA ORDEN
UPDATE prtb00012 SET prtb00012.* = prtb08.* WHERE prtb00012.num_oc = prtb08.num_oc
UPDATE prtb00014 SET (observacion,us_mod,fech_mod)=
(p_prtb14.observacion,SUSER_SNAME(),GETDATE()) WHERE prtb00014.num_oc = p_prtb14.num_oc
UPDATE prtb00012 SET us_mod = SUSER_SNAME(),
fech_mod= GETDATE()
WHERE @num_oc = prtb08.num_oc
#LET archivo = FGL_GETENV("USORDEN")
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT o_pedido TO archivo
DELETE FROM prtb00013 WHERE Num_oc = prtb08.num_oc
DELETE FROM prtb00023 WHERE Num_oc = prtb08.num_oc
FOR idx = 1 TO arr_count()
IF arr_prtb08[idx].total_p IS NOT NULL THEN
INSERT INTO prtb00013 VALUES (prtb08.num_oc,arr_prtb08[idx].fila,
arr_prtb08[idx].cod_n,
arr_prtb08[idx].cod_grupo,
arr_prtb08[idx].cod_tipo,
arr_prtb08[idx].cod_sec,
arr_prtb08[idx].altura_zocalo,
arr_prtb08[idx].terminacion,
arr_prtb08[idx].bisel,
arr_prtb08[idx].precio,
arr_prtb08[idx].cantidad,
arr_prtb08[idx].descuento,
null,SUSER_SNAME(),GETDATE(),null,null)
INSERT INTO prtb00023 VALUES (prtb08.num_oc,arr_prtb08[idx].fila,
arr_prtb08[idx].cod_n,
arr_prtb08[idx].cod_grupo,
arr_prtb08[idx].cod_tipo,
arr_prtb08[idx].cod_sec,
arr_prtb08[idx].cantidad_1,
arr_prtb08[idx].cantidad)
OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*)
END IF
END FOR
DELETE FROM prtb00015 WHERE num_oc = prtb08.num_oc
# Actualizacion Parcialidades
FOR idx = 1 TO cuenta_p
INSERT INTO prtb00015 VALUES (prtb08.num_oc,
prtb15[idx].cod_n,
prtb15[idx].cod_grupo,
prtb15[idx].cod_tipo,
prtb15[idx].cod_sec,
prtb15[idx].cantidad,
prtb15[idx].fecha,
null,SUSER_SNAME(),GETDATE())
END FOR
FINISH REPORT o_pedido
{LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO")
DISPLAY "IMP ",cmd
RUN cmd
LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO1")
RUN cmd
}
RUN imprime
LET cmd = "TYPE ",archivo CLIPPED," ",copia
display "CMD ",cmd
RUN cmd
LET numero_msg = 1
CALL msg(numero_msg)
END IF # DECICION ACTUALIZACION
ELSE
GOTO vuelve
END IF
CLEAR FORM
END FUNCTION
FUNCTION prpcmf008()
## Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT BY NAME criterio ON a.num_oc,a.tipo_cliente,a.sec_cliente
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET INT_FLAG = FALSE
RETURN
END IF
LET SELEC = " SELECT UNIQUE a.* FROM prtb00012 a ",
" WHERE ",criterio CLIPPED, " AND a.status_t IS NULL "," ORDER BY a.num_oc "
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO prtb08.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
SELECT SUM(a.valor) INTO balance
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
AND a.status_t IS NULL
IF balance IS NULL THEN
LET balance = 0
END IF
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,prtb08.ventas,
prtb08.sec_cliente,prtb08.direccion,prtb08.telefono,
prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago,
balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE)
CALL busca_cliente8m()
CALL busca_vendm8()
#CALL limpia8()
CALL busca_detalle8()
LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) +
prtb08.transporte
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.total_v
MENU "OPCIONES "
COMMAND "Siguiente" "Presenta en pantalla el proprtb08.mo registro encontrado"
FETCH NEXT datos INTO prtb08.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
NEXT OPTION "anterior"
END IF
SELECT SUM(a.valor) INTO balance
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
AND a.status_t IS NULL
IF balance IS NULL THEN
LET balance = 0
END IF
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,
prtb08.sec_cliente,prtb08.direccion,prtb08.telefono,
prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago,
balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE)
CALL busca_cliente8m()
CALL busca_vendm8()
#CALL limpia8()
CALL busca_detalle8()
LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) +
prtb08.transporte
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.total_v
COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO prtb08.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
NEXT OPTION "siguiente"
END IF
SELECT SUM(a.valor) INTO balance
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
AND a.status_t IS NULL
IF balance IS NULL THEN
LET balance = 0
END IF
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,
prtb08.sec_cliente,prtb08.direccion,prtb08.telefono,
prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago,
balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE)
CALL busca_cliente8m()
CALL busca_vendm8()
#CALL limpia8()
CALL busca_detalle8()
LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) +
prtb08.transporte
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.total_v
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO prtb08.*
SELECT SUM(a.valor) INTO balance
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
AND a.status_t IS NULL
IF balance IS NULL THEN
LET balance = 0
END IF
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,
prtb08.sec_cliente,prtb08.direccion,prtb08.telefono,
prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago,
balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE)
CALL busca_cliente8m()
CALL busca_vendm8()
#CALL limpia8()
CALL busca_detalle8()
LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) +
prtb08.transporte
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.total_v
NEXT OPTION "primero"
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO prtb08.*
SELECT SUM(a.valor) INTO balance
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
AND a.status_t IS NULL
IF balance IS NULL THEN
LET balance = 0
END IF
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,prtb08.ventas,
prtb08.sec_cliente,prtb08.direccion,prtb08.telefono,
prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago,
balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE)
CALL busca_cliente8m()
CALL busca_vendm8()
#CALL limpia8()
CALL busca_detalle8()
NEXT OPTION "anterior"
{ COMMAND KEY ("T") "Actualizar"
LET nuevo = "N"
CALL prpcad008()}
COMMAND KEY ("N") "aNular"
# VERIFICA SI LA ORDEN TIENE AVANCE
SELECT UNIQUE a.num_cheque FROM cctb00001 a
WHERE a.num_cheque = prtb08.num_oc AND
a.tipo_cliente = prtb08.tipo_cliente and
a.sec_cliente = prtb08.sec_cliente and
a.tipo_doc = "AV"
IF STATUS != NOTFOUND THEN
ERROR "NO PUEDE ANULAR ORDEN, TIENE AVANCES"
RETURN
END IF
# VERIFICA SI ESTA FACTURADA LA ORDEN
SELECT UNIQUE a.orden FROM vetb00002 a
WHERE a.orden = prtb08.num_oc AND
a.tipo_cliente = prtb08.tipo_cliente and
a.sec_cliente = prtb08.sec_cliente and
a.status_t is null
IF STATUS != NOTFOUND THEN
ERROR "NO PUEDE ANULAR ORDEN, TIENE FACTURAS"
RETURN
END IF
# VERIFICACION DESPACHO
SELECT UNIQUE a.conduce_no FROM iptb00006 a
WHERE a.conduce_no = prtb08.num_oc AND
a.cod_sp = prtb08.tipo_cliente and
a.cod_sp_sec = prtb08.sec_cliente and
a.status_t is null
IF STATUS != NOTFOUND THEN
ERROR "NO PUEDE ANULAR ORDEN, TIENE CONDUCE"
RETURN
END IF
PROMPT "Esta seguro?" FOR esta
LET esta = UPSHIFT(esta)
IF esta = "S" THEN
LET prtb09.num_oc = prtb08.num_oc
LET prtb09.fecha = prtb08.fecha_oc
LET prtb09.pendiente = "S"
LET prtb09.detalle = "SE CANCELO LA ORDEN DE PEDIDO"
LET prtb09.status_t = "E"
INSERT INTO prtb00009 VALUES (prtb09.*)
UPDATE prtb00012 set status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @num_oc = prtb08.num_oc
UPDATE prtb00014 set status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @num_oc = prtb08.num_oc
UPDATE prtb00009 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @num_oc = prtb08.num_oc
UPDATE prtb00015 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE @num_oc = prtb08.num_oc
LET numero_msg = 39
CALL msg(numero_msg)
END IF
COMMAND KEY ("I") "rImprimir"
SELECT SUM(a.valor) INTO balance
FROM cctb00001 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
AND a.status_t IS NULL
IF balance IS NULL THEN
LET balance = 0
END IF
SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente
AND a.sec_cliente = prtb08.sec_cliente
SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion
INTO fcalle,fcasa_num,fbarrio,furbanizacion
FROM vetb00005 b
WHERE b.tipo_cliente = prtb08.tipo_cliente
AND b.sec_cliente = prtb08.sec_cliente
SELECT * INTO p_prtb14.* FROM prtb00014
WHERE @num_oc = prtb08.num_oc
LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",",
fbarrio CLIPPED,",",furbanizacion CLIPPED
DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,prtb08.sec_cliente,
prtb08.direccion,prtb08.telefono,prtb08.fax,prtb08.fecha_entrega,
prtb08.cond_pago,balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo,
prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE)
LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) +
prtb08.transporte
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.total_v
CALL busca_cliente8m()
CALL busca_vendm8()
#CALL limpia8()
CALL busca_detalle8()
#LET archivo = FGL_GETENV("USORDEN")
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT o_pedido TO archivo
# OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*)
SELECT COUNT(*) INTO cuenta
FROM prtb00013 a
WHERE a.num_oc = prtb08.num_oc
FOR idx = 1 TO cuenta
OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*)
END FOR
FINISH REPORT o_pedido
{LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO")
DISPLAY "IMP ",cmd
RUN cmd
LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO1")
RUN cmd
}
RUN imprime
LET cmd = "TYPE ",archivo CLIPPED," ",copia
display "CMD ",cmd
RUN cmd
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
COMMAND "Retornar" "Retorna al menu anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION limpia8()
FOR idx = 1 TO 10
LET arr_prtb08[idx].fila = NULL
LET arr_prtb08[idx].cod_n = NULL
LET arr_prtb08[idx].cod_grupo = NULL
LET arr_prtb08[idx].cod_tipo = NULL
LET arr_prtb08[idx].cod_sec = NULL
LET arr_prtb08[idx].bisel = NULL
LET arr_prtb08[idx].cantidad = NULL
LET arr_prtb08[idx].precio = NULL
LET arr_prtb08[idx].descuento = NULL
LET arr_prtb08[idx].total_p = NULL
END FOR
FOR idx = 1 TO 10
DISPLAY arr_prtb08[idx].fila TO s_pedido[idx].fila
DISPLAY arr_prtb08[idx].cod_n TO s_pedido[idx].cod_n
DISPLAY arr_prtb08[idx].cod_grupo TO s_pedido[idx].cod_grupo
DISPLAY arr_prtb08[idx].cod_tipo TO s_pedido[idx].cod_tipo
DISPLAY arr_prtb08[idx].cod_sec TO s_pedido[idx].cod_sec
DISPLAY arr_prtb08[idx].bisel TO s_pedido[idx].bisel
DISPLAY arr_prtb08[idx].cantidad TO s_pedido[idx].cantidad
DISPLAY arr_prtb08[idx].precio TO s_pedido[idx].precio
DISPLAY arr_prtb08[idx].descuento TO s_pedido[idx].descuento
DISPLAY arr_prtb08[idx].total_p TO s_pedido[idx].total_p
END FOR
END FUNCTION
FUNCTION busca_detalle8()
DECLARE busca_d CURSOR FOR
SELECT a.secuencia,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,c.descrip_esp,c.unidad_med,a.terminacion,
a.bisel,b.cantidad_1,a.cantidad,a.precio,a.descuento
FROM prtb00013 a,iptb00002 c,outer prtb00023 b
WHERE a.num_oc = prtb08.num_oc AND
a.secuencia = b.secuencia AND
a.num_oc = b.num_oc 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
LET idx = 1
LET p_totales.sub_total = 0
LET p_totales.total_v = 0
FOREACH busca_d INTO arr_prtb08[idx].*
IF arr_prtb08[idx].cod_n IS NOT NULL THEN
SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,p_totales.unidad_med
FROM iptb00002 a
WHERE a.cod_n = arr_prtb08[idx].cod_n AND
a.cod_grupo = arr_prtb08[idx].cod_grupo AND
a.cod_tipo = arr_prtb08[idx].cod_tipo AND
a.cod_sec = arr_prtb08[idx].cod_sec AND
a.status_t IS NULL
LET monto_desc = 0
LET total1 = 0
IF arr_prtb08[idx].descuento != 0 THEN
LET monto_desc = (arr_prtb08[idx].precio * arr_prtb08[idx].cantidad) *
(arr_prtb08[idx].descuento /100)
END IF
LET total1 = (arr_prtb08[idx].precio * arr_prtb08[idx].cantidad) - monto_desc
LET arr_prtb08[idx].total_p = total1
LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p
LET idx = idx + 1
END IF
END FOREACH
LET total_i = (prtb08.cantidad_i * prtb08.precio_i)
LET total_mo = (prtb08.cantidad_mo * prtb08.precio_mo)
LET sub_total = (total_i + total_mo)+ p_totales.sub_total
LET sub_total1 = sub_total + prtb08.transporte
LET p_totales.total_v = sub_total1 + prtb08.itbis
DISPLAY BY NAME p_totales.sub_total,p_totales.unidad_med
DISPLAY BY NAME prtb08.itbis
DISPLAY BY NAME p_totales.total_v
CALL SET_COUNT(IDX-1)
DISPLAY ARRAY arr_prtb08 TO s_pedido.*
LET idx = arr_curr()
LET scr_l = scr_line()
{
DISPLAY arr_prtb08[idx].fila TO s_pedido[scr_l].fila ATTRIBUTE(BLUE)
DISPLAY arr_prtb08[idx].cod_n TO s_pedido[scr_l].cod_n
DISPLAY arr_prtb08[idx].cod_grupo TO s_pedido[scr_l].cod_grupo
DISPLAY arr_prtb08[idx].cod_tipo TO s_pedido[scr_l].cod_tipo
DISPLAY arr_prtb08[idx].cod_sec TO s_pedido[scr_l].cod_sec
DISPLAY arr_prtb08[idx].terminacion TO s_pedido[scr_l].terminacion ATTRIBUTE(BLUE)
DISPLAY arr_prtb08[idx].bisel TO s_pedido[scr_l].bisel ATTRIBUTE(BLUE)
DISPLAY arr_prtb08[idx].cantidad TO s_pedido[scr_l].cantidad
DISPLAY arr_prtb08[idx].precio TO s_pedido[scr_l].precio ATTRIBUTE(BLUE)
DISPLAY arr_prtb08[idx].descuento TO s_pedido[scr_l].descuento
DISPLAY arr_prtb08[idx].total_p TO s_pedido[scr_l].total_p
}
#LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p
LET cuenta = arr_count()
END FUNCTION
REPORT o_pedido(xnumero,z,y)
DEFINE z RECORD
fila SMALLINT,
cod_n LIKE prtb00013.cod_n,
cod_grupo LIKE prtb00013.cod_grupo,
cod_tipo LIKE prtb00013.cod_tipo,
cod_sec LIKE prtb00013.cod_sec,
descrip_esp LIKE iptb00002.descrip_esp,
unidad_med LIKE iptb00002.unidad_med,
altura_zocalo LIKE prtb00013.altura_zocalo,
terminacion LIKE prtb00013.terminacion,
bisel LIKE prtb00013.bisel,
cantidad_1 DEC(12,5),
cantidad LIKE prtb00013.cantidad,
precio LIKE prtb00013.precio,
descuento LIKE prtb00013.descuento,
total_p DECIMAL(10,2)
END RECORD,
y RECORD LIKE prtb00014.*,
i,xnumero INTEGER,
normal,comp_on,comp_off,doce,negrillas_on,negrillas_off,
doble_on,doble_off CHAR(2),raya CHAR(120),rayita CHAR(35),
total_inst,subtotal DEC(8,2),
ult_pago INTEGER,
plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5),
etiqueta,prnc,ptelefono CHAR(20)
OUTPUT
LEFT MARGIN 0
ORDER BY xnumero
FORMAT
PAGE HEADER
LET normal = ASCII 27, ASCII 80
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET doce = ASCII 27, ascii 77
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET doble_on = ASCII 14
LET doble_off = ASCII 20
SELECT a.* INTO p_compania.* FROM companias a
LET l = (90 - LENGTH(p_compania.nombre CLIPPED))/2
PRINT comp_on
PRINT COLUMN l, p_compania.nombre CLIPPED,
COLUMN 72, TODAY USING "DD/MM/YYYY"
LET l = (100 - LENGTH("Ordenes de Pedido Corte a la Medida"))/2
PRINT COLUMN l, "ORDENES DE PEDIDOS",
COLUMN 72, TIME
LET prnc ="RNC:",p_compania.rnc
LET l = (90 - LENGTH(prnc))/2
PRINT COLUMN l, prnc
LET l = (90 - LENGTH(p_compania.direccion))/2
PRINT COLUMN l, p_compania.direccion
LET ptelefono = p_compania.telefono
LET l = (90 - LENGTH(ptelefono))/2
PRINT COLUMN l, ptelefono
IF nuevo = "N" THEN
PRINT COLUMN l, "ACTUALIZADA"
ELSE
PRINT " "
END IF
PRINT COLUMN 001, "ORDEN NO.: ",doble_on,xnumero USING "<<<<<<",doble_off
SKIP 1 LINE
PRINT COLUMN 001, "Fecha de la Orden : ",prtb08.fecha_oc USING "DD/MMM/YYYY",
COLUMN 62, "Fecha de Entrega : ",prtb08.fecha_entrega USING "DD/MM/YYYY"
# Busca el ultimo pago realizado
LET ult_pago = NULL
SELECT MAX(a.num_doc) INTO ult_pago
FROM cctb00001 a
WHERE a.tipo_doc IN ("AV","PG") AND
a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente AND
a.status_t IS NULL
PRINT COLUMN 001, "CLIENTE : ",nombre CLIPPED
PRINT COLUMN 001, "CODIGO CLIENTE : ",prtb08.tipo_cliente USING "<<","-",
prtb08.sec_cliente USING "<<<<"
PRINT COLUMN 001, "Direccion : ",prtb08.direccion CLIPPED,
COLUMN 62, "Ubicacion : ",prtb08.ubicacion CLIPPED
PRINT COLUMN 001, "Telefono : ",prtb08.telefono CLIPPED,
COLUMN 62, "Fax : ",prtb08.fax CLIPPED
PRINT COLUMN 001, "Condiciones : ", descrip_p CLIPPED,
COLUMN 62, "Vendedor : ", prtb08.sec_vend USING "<<<<"," ",
nombres CLIPPED," ",apellidos CLIPPED
FOR i = 1 TO 120
LET raya[i] = "-"
END FOR
FOR i = 1 TO 35
LET rayita[i] = "-"
END FOR
# PRINT "Nombre Archivo dibujo: ",parchivo
PRINT doce
PRINT raya
PRINT COLUMN 033, "|ALTURA",
COLUMN 040, "|TERMINACION",
COLUMN 64,"|CANTIDAD"
PRINT COLUMN 001, " CODIGO ",
COLUMN 012, "|DESCRIPCION",
COLUMN 033, "|ZOCALO|",
# COLUMN 047, "|TERMINACION",
COLUMN 048, "|BISEL",
COLUMN 55, "|UNID.",
COLUMN 64, "|UNIDADES",
COLUMN 78, "|CANTIDAD",
COLUMN 91, "|PRECIO",
COLUMN 101, "|%DESC.",
COLUMN 108, " |TOTAL"
PRINT raya
ON EVERY ROW
SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,p_totales.unidad_med
FROM iptb00002 a
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec
{ LET z.cantidad_1 = 0
SELECT AVG(a.cantidad_1) INTO z.cantidad_1 FROM prtb00023 a
WHERE a.num_oc = xnumero 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}
PRINT COLUMN 1, z.cod_n USING "&&","-",z.cod_grupo USING "&&","-",
z.cod_tipo USING "&&&","-",z.cod_sec USING "&&&"," ",
COLUMN 12, z.descrip_esp wordwrap right margin 40,
COLUMN 36, z.altura_zocalo USING "&.&&",
COLUMN 46, z.terminacion,
COLUMN 50, z.bisel CLIPPED,
COLUMN 57, p_totales.unidad_med clipped,
COLUMN 63, z.cantidad_1 USING "#,###.####",
COLUMN 75, z.cantidad USING "#,###,###.#&&&",
COLUMN 87, z.precio USING "#,###,###.#&",
COLUMN 99, z.descuento USING "###.&&",
COLUMN 106, z.total_p USING "##,###,###.&&"
display " FILA ",z.fila," codigo ",z.cod_sec
DECLARE busca_d1 CURSOR FOR
SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
FROM prtb00022 a
WHERE a.secuencia = z.fila 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 AND
a.num_oc = xnumero
LET total_unidades = 0
FOREACH busca_d1 INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida
PRINT COLUMN 5,pcantidad USING "<,<<<"," ",etiqueta clipped," DE ",plado1 USING "<<.#####"," X ",
plado2 USING "<<.#####"," X ",plado3 USING "<<.#####"," = ",pmedida USING "<<<.#####"
LET total_unidades = total_unidades + pcantidad
END FOREACH
IF total_unidades > 0 THEN
PRINT COLUMN 19, "TOTAL UNIDADES ",total_unidades USING "<,<<<"
END IF
ON LAST ROW
# Control Despachos Parciales
SELECT unique a.num_oc FROM prtb00015 a
WHERE a.num_oc = xnumero
IF STATUS != NOTFOUND THEN
PRINT rayita
PRINT "DESPACHOS PARCIALES"
PRINT COLUMN 1, "CODIGOS",
COLUMN 15, "CANTIDAD",
COLUMN 26, "FECHA"
PRINT rayita
DECLARE busca_p CURSOR FOR
SELECT ' ',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.fecha
FROM prtb00015 a
WHERE a.num_oc = xnumero
LET idx = 1
FOREACH busca_p INTO prtb15[idx].*
PRINT COLUMN 1,prtb15[idx].cod_n USING "&","-",
prtb15[idx].cod_grupo USING "&","-",
prtb15[idx].cod_tipo USING "&&","-",
prtb15[idx].cod_sec USING "&&&",
COLUMN 15, prtb15[idx].cantidad USING "##,###.##",
COLUMN 26, prtb15[idx].fecha USING "dd/mm/yyyy"
LET idx = idx + 1
END FOREACH
END IF
PRINT raya
PRINT COLUMN 060, "Total Material",
COLUMN 106, p_totales.sub_total USING "#,###,###.&&"
SKIP 1 LINE
PRINT COLUMN 075, "INSTALACION"
PRINT COLUMN 065, rayita
PRINT COLUMN 065,"|"," Cantidad |",
COLUMN 075, " Precio |",
COLUMN 085," Total "
PRINT COLUMN 045, "Instalacion Tope",
COLUMN 068, prtb08.cantidad_i USING "####.#&",
COLUMN 078, prtb08.precio_i USING "#,###.#&",
COLUMN 088,(prtb08.cantidad_i * prtb08.precio_i) USING "#,###,###.#&"
PRINT COLUMN 045, "Mano de Obra",
COLUMN 068, prtb08.cantidad_mo USING "####.#&",
COLUMN 078, prtb08.precio_mo USING "#,###.#&",
COLUMN 088,(prtb08.cantidad_mo * prtb08.precio_mo) USING "#,###,###.#&"
PRINT COLUMN 065, rayita
LET total_inst = (prtb08.cantidad_i * prtb08.precio_i) +
(prtb08.cantidad_mo * prtb08.precio_mo)
PRINT COLUMN 065, "Total Instalacion",
COLUMN 088, total_inst USING "#,###,###.#&"
PRINT COLUMN 060, "Transporte",
COLUMN 088, prtb08.transporte USING "#,###,###.#&"
PRINT COLUMN 060, "Sub-Total",
COLUMN 088, p_totales.sub_total + total_inst USING "#,###,###.#&"
PRINT COLUMN 060, "Itbis",
COLUMN 088, prtb08.itbis USING "#,###,###.#&"
PRINT COLUMN 060, "Total Ventas",
COLUMN 088, p_totales.total_v USING "#,###,###.#&"
PRINT normal
SKIP 2 LINES
PRINT COLUMN 003, y.observacion wordwrap right margin 50
PAGE TRAILER
PRINT COLUMN 10, "-------------------",
COLUMN 35, "-------------------",
COLUMN 57, "-------------------"
PRINT COLUMN 13, "VENDEDOR",
COLUMN 39, "CLIENTE",
COLUMN 61, "APROBADO POR"
END REPORT
FUNCTION busca_cliente8()
OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd002"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET INT_FLAG = false
CONSTRUCT criterio ON a.nombre FROM nombre
LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre ",
" FROM vetb00004 a",
" WHERE ",
"a.status_t is NULL AND ",
criterio clipped," AND a.tipo_cliente = ",prtb08.tipo_cliente,
" ORDER BY a.nombre "
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_c
END IF
PREPARE busca_cliente8s FROM selec2
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
END IF
END IF
DECLARE buscar_clientes CURSOR FOR busca_cliente8s
LET idx = 1
FOREACH buscar_clientes INTO arr_clientes[idx].*
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
DISPLAY ARRAY arr_clientes TO s_clientes.*
LET curr1 = arr_curr()
LET prtb08.tipo_cliente = arr_clientes[curr1].tipo_cliente
LET prtb08.sec_cliente = arr_clientes[curr1].sec_cliente
LET nombre = arr_clientes[curr1].nombre
LABEL salir_consulta_c:
CLOSE WINDOW busqueda
END FUNCTION
FUNCTION busca_cliente8m()
SELECT a.nombre INTO nombre
FROM vetb00004 a
WHERE a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente AND
a.status_t IS NULL
# CALL ui.combobox.setdefaultinitializer("cventas")
# CALL ui.combobox.setdefaultinitializer("ccondicion")
DISPLAY BY NAME nombre ATTRIBUTE(BLUE)
END FUNCTION
FUNCTION busca_product8()
SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,unidad
FROM iptb00002 a
WHERE a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec
DISPLAY BY NAME unidad,descrip_esp ATTRIBUTE(BLUE)
END FUNCTION
FUNCTION vendedor8es()
DEFINE descrip6 LIKE adtb00003.nom1_emp
OPEN WINDOW busqueda2 AT 7,12 WITH FORM "vefmwd001"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET INT_FLAG = false
CONSTRUCT criterio ON a.nom1_emp FROM descrip6
LET selec2 = "SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp ",
" FROM adtb00003 a,vetb00028 b",
" WHERE a.num_emp = b.sec_vend AND ",
"a.status_t is NULL AND ",
criterio clipped,
"ORDER BY 1 "
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_e
END IF
PREPARE busca_empleados FROM selec2
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
END IF
END IF
DECLARE buscar_empleados CURSOR FOR busca_empleados
LET idx = 1
FOREACH buscar_empleados INTO arr_empleados[idx].*
IF status = NOTFOUND THEN
EXIT FOREACH
END IF
IF INT_FLAG THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET empleados[idx].cod_emp_sec = arr_empleados[idx].num_emp
LET empleados[idx].descrip6 =
arr_empleados[idx].nom1_emp clipped," ",arr_empleados[idx].apell1_emp clipped
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Empleado donde esta el cursor"
DISPLAY ARRAY empleados TO s_empleados.*
LET curr1 = scr_line()
LET prtb08.sec_vend = empleados[curr1].cod_emp_sec
LET nombre_vend = empleados[curr1].descrip6
LABEL salir_consulta_e:
CLOSE WINDOW busqueda2
END FUNCTION
FUNCTION busca_vendm8()
IF prtb08.sec_vend IS NOT NULL THEN
SELECT a.nom1_emp,a.apell1_emp INTO nombres,apellidos
FROM adtb00003 a
WHERE a.num_emp = prtb08.sec_vend
LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED
DISPLAY BY NAME nombre_vend ATTRIBUTE(BLUE)
END IF
END FUNCTION
FUNCTION oc_detalles()
OPEN WINDOW wobserva AT 14,2 WITH FORM "prfmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST +1)
INITIALIZE p_prtb14.* TO NULL
SELECT a.* INTO p_prtb14.* FROM prtb00014 a WHERE a.num_oc = prtb08.num_oc
INPUT BY NAME p_prtb14.observacion WITHOUT DEFAULTS
CLOSE WINDOW wobserva
END FUNCTION
FUNCTION parciales()
OPEN WINDOW wdparciales AT 14,2 WITH FORM "prfmwd003"
ATTRIBUTE (BORDER,FORM LINE FIRST +1)
FOR idx = 1 TO 10
LET prtb15[idx].num_oc = NULL
LET prtb15[idx].cod_n = NULL
LET prtb15[idx].cod_grupo = NULL
LET prtb15[idx].cod_tipo = NULL
LET prtb15[idx].cod_sec = NULL
LET prtb15[idx].fecha = NULL
LET prtb15[idx].cantidad = NULL
END FOR
LET prtb15[1].num_oc = prtb08.num_oc
LET prtb15[1].cod_n = arr_prtb08[curr].cod_n
LET prtb15[1].cod_grupo = arr_prtb08[curr].cod_grupo
LET prtb15[1].cod_tipo = arr_prtb08[curr].cod_tipo
LET prtb15[1].cod_sec = arr_prtb08[curr].cod_sec
LET prtb15[1].fecha = today
LET prtb15[1].cantidad = arr_prtb08[curr].cantidad
INPUT ARRAY prtb15 WITHOUT DEFAULTS FROM sprtb15.*
IF int_flag THEN
LET int_flag = FALSE
LET numero_msg = 2
CALL msg(numero_msg)
GOTO salir
END IF
LET cuenta_p = ARR_COUNT()
LABEL salir:
CLOSE WINDOW wdparciales
END FUNCTION
FUNCTION codigoRepite()
DEFINE ant_art RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
precio DEC(12,3)
END RECORD
LET ant_art.cod_n = arr_prtb08[ridx].cod_n
LET ant_art.cod_grupo = arr_prtb08[ridx].cod_grupo
LET ant_art.cod_tipo = arr_prtb08[ridx].cod_tipo
LET ant_art.cod_sec = arr_prtb08[ridx].cod_sec
LET ant_art.precio = arr_prtb08[ridx].precio
FOR idx = 1 TO arr_count()
IF idx != ridx THEN
IF arr_prtb08[idx].cod_n = ant_art.cod_n AND
arr_prtb08[idx].cod_grupo = ant_art.cod_grupo AND
arr_prtb08[idx].cod_tipo = ant_art.cod_tipo AND
arr_prtb08[idx].cod_sec = ant_art.cod_sec AND
arr_prtb08[idx].precio = ant_art.precio THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET bandera = 1
EXIT FOR
END IF
END IF
END FOR
END FUNCTION
FUNCTION despiece()
OPEN WINDOW wdespiece AT 5,3 WITH FORM "prfmwd004" ATTRIBUTE (BORDER,FORM LINE
FIRST + 1,PROMPT LINE LAST)
DISPLAY BY NAME descrip_esp
DISPLAY BY NAME p_totales.unidad_med
IF nuevo = "S" THEN
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 = tmpnumero AND
a.secuencia = arr_prtb08[curr].fila AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec
LET idx = 1
FOREACH busca_despiece INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
ELSE
DECLARE busca_despiece1 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 =prtb08.num_oc AND
a.secuencia = arr_prtb08[curr].fila AND
a.cod_n = arr_prtb08[curr].cod_n AND
a.cod_grupo = arr_prtb08[curr].cod_grupo AND
a.cod_tipo = arr_prtb08[curr].cod_tipo AND
a.cod_sec = arr_prtb08[curr].cod_sec
LET idx = 1
FOREACH busca_despiece1 INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
END IF
LET despiece[1].cod_n = arr_prtb08[curr].cod_n
LET despiece[1].cod_grupo = arr_prtb08[curr].cod_grupo
LET despiece[1].cod_tipo = arr_prtb08[curr].cod_tipo
LET despiece[1].cod_sec = arr_prtb08[curr].cod_sec
CALL set_count(idx-1)
INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.*
BEFORE ROW
LET curr1 = arr_curr()
LET fila = scr_line()
LET despiece[curr1].cod_n = arr_prtb08[curr].cod_n
LET despiece[curr1].cod_grupo = arr_prtb08[curr].cod_grupo
LET despiece[curr1].cod_tipo = arr_prtb08[curr].cod_tipo
LET despiece[curr1].cod_sec = arr_prtb08[curr].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 despiece[curr1].etiqueta TO sdespiece[fila].etiqueta
DISPLAY arr_prtb08[curr].cod_n TO sdespiece[fila].cod_n
DISPLAY arr_prtb08[curr].cod_grupo TO sdespiece[fila].cod_grupo
DISPLAY arr_prtb08[curr].cod_tipo TO sdespiece[fila].cod_tipo
DISPLAY arr_prtb08[curr].cod_sec TO sdespiece[fila].cod_sec
AFTER FIELD cantidad
IF p_totales.unidad_med= "M2" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2)
END IF
IF p_totales.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 p_totales.unidad_med= "ML" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad * despiece[curr1].lado_1
LET despiece[curr1].lado_2 = 0
END IF
IF p_totales.unidad_med= "UD" OR p_totales.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
RETURN
END IF
# CONTROL NUMERICO
IF nuevo <> "S" THEN
LET tmpnumero = prtb08.num_oc
END IF
DELETE FROM PRTB00022 WHERE num_oc = tmpnumero AND
secuencia = arr_prtb08[curr].fila AND
cod_n = arr_prtb08[curr].cod_n AND
cod_grupo = arr_prtb08[curr].cod_grupo AND
cod_tipo = arr_prtb08[curr].cod_tipo AND
cod_sec = arr_prtb08[curr].cod_sec
LET total_medida = 0
FOR idx = 1 TO arr_count()
IF despiece[idx].medida IS NOT NULL THEN
INSERT INTO PRTB00022 VALUES (despiece[idx].etiqueta,tmpnumero,arr_prtb08[curr].fila,
arr_prtb08[curr].cod_n,arr_prtb08[curr].cod_grupo,
arr_prtb08[curr].cod_tipo,arr_prtb08[curr].cod_sec,
despiece[idx].lado_1,despiece[idx].lado_2,
despiece[idx].lado_3,despiece[idx].cantidad,
despiece[idx].medida,null,SUSER_SNAME(),GETDATE(),null,null)
LET total_medida = total_medida + despiece[idx].medida
END IF
END FOR
LET arr_prtb08[curr].cantidad_1 = total_medida
CLOSE WINDOW wdespiece
END FUNCTION
FUNCTION controlact()
# CONTROL AVANCES
SELECT UNIQUE a.num_cheque FROM cctb00001 a WHERE a.num_cheque = prtb08.num_oc and tipo_doc = "AV" and
a.num_doc = a.aplica_a and a.tipo_cliente = prtb08.tipo_cliente and
a.sec_cliente = prtb08.sec_cliente and a.status_t is null
IF STATUS <> NOTFOUND THEN
LET cliente1 = "N"
DISPLAY "TIENE AVANCE"
END IF
# CONTROL INVENTARIO
SELECT UNIQUE a.conduce_no FROM iptb00006 a WHERE a.conduce_no = prtb08.num_oc AND cod_mov in (30,31,55) and
a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
LET conduce = "N"
END IF
END FUNCTION
FUNCTION cventas(pventas)
DEFINE pventas ui.combobox,
kventas smallint,
pdescrip CHAR(30)
CALL pventas.clear()
DECLARE bventas CURSOR FOR
SELECT a.ventas,a.descripcion FROM vetb00061 a
ORDER BY a.ventas
FOREACH bventas INTO kventas,pdescrip
CALL pventas.additem(kventas,pdescrip)
END FOREACH
END FUNCTION
FUNCTION ccondicion(pcondicion)
DEFINE pcondicion ui.combobox,kcondicion SMALLINT,kdescripcion CHAR(30)
CALL pcondicion.clear()
DECLARE busca_cond CURSOR FOR
SELECT a.cond_pago,a.descrip FROM vetb00012 a
WHERE a.status_t IS NULL
ORDER BY a.descrip
FOREACH busca_cond INTO kcondicion,kdescripcion
CALL pcondicion.additem(kcondicion,kdescripcion)
END FOREACH
END FUNCTION
FUNCTION ccodn()
DEFINE arr_busca DYNAMIC ARRAY OF RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_Sec SMALLINT,
descrip_esp CHAR(30),
unidad_med CHAR(4)
END RECORD
OPEN WINDOW w1 WITH FORM "prfmwd013"
CONSTRUCT BY NAME criterio ON a.descrip_esp
LET selec =
"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 FROM selec
DECLARE busca_codn CURSOR FOR comando
LET idx = 1
FOREACH busca_codn INTO arr_busca[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx)
DISPLAY ARRAY arr_busca TO s_codigos.*
AFTER DISPLAY
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
EXIT DISPLAY
END IF
LET idx = arr_curr()
LET arr_prtb08[curr].cod_n = arr_busca[idx].cod_n
LET arr_prtb08[curr].cod_grupo = arr_busca[idx].cod_grupo
LET arr_prtb08[curr].cod_tipo = arr_busca[idx].cod_tipo
LET arr_prtb08[curr].cod_sec = arr_busca[idx].cod_sec
LET arr_prtb08[curr].descrip_esp = arr_busca[idx].descrip_esp
LET arr_prtb08[curr].unidad_med = arr_busca[idx].unidad_med
EXIT DISPLAY
END DISPLAY
CLOSE WINDOW w1
END FUNCTION