Files
MBS/PROYECTOS/ipdir/ipprmt044.4gl
T

8821 lines
335 KiB
Plaintext

{--------------------------------------------------------------------------
PROGRAMA : IPPRMT044
OBJETIVO : Programa Captura Documento Otros Movimientos de
Inventario de Producto Terminados.
PROGRAMADOR : Juan Soto.
FECHA REALIZACION : AGOSTO 1997.
--------------------------------------------------------------------------}
IMPORT util
GLOBALS "ipprgb000.4gl"
# <mbs name="Operacion Por Movimientos" type="V" program="ipprrp010" description="Sumatoria por codigo y tipo movimiento" />
# <mbs name="Operacion Movimientos Detallado" type="V" program="ipprrp004" description="Sumatoria por codigo y tipo movimiento Detallado" />
DEFINE
buf base.StringBuffer,
costoItem DEC(18, 4),
pano SMALLINT,
scodigo STRING,
pcodmov_transferencia, p_num_doc_transferencia SMALLINT,
l_sql_seq STRING,
prep_seq_docs SMALLINT,
xes_produccion SMALLINT
DEFINE out_cantidad_item DECIMAL(18, 5)
DEFINE out_cantidad_ubicacion DECIMAL(18, 5)
DEFINE idxUbic INTEGER
DEFINE idxJSON INTEGER
DEFINE movi10Dest_JSON DYNAMIC ARRAY OF RECORD
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
id_bodega, id_seccion1 INT,
id_tramo1 INT,
id_fila, id_pos INT,
cantidad1, cantidad2 DECIMAL(12, 5)
END RECORD
DEFINE documento_encabezado RECORD
tipoEcf,
eNcf,
indicadorMontoGravado,
tipoPago,
fechaLimitePago,
FormadePAgo,
montoPago,
FechaVencimientoSecuencia,
rncEmisor,
razonSocialEmisor,
direccionEmisor,
Municipio,
Provincia,
telefonoEmisor,
correoEmisor,
webSite,
codigoVendedor,
numeroFacturaInterna,
numeroPedidoInterno,
fechaEmision,
rncComprador,
razonSocialComprador,
montoGravadoTotal,
montoGravadoI1,
montoGravadoI2,
montoGravadoI3,
montoExento,
itbis1,
itbis2,
itbis3,
totalItbis,
totalItbis1,
totalItbis2,
totalItbis3,
montoTotal,
tipoIngreso,
terminoPago,
TipoCuentaPago,
NumeroCuentaPago,
IdentificadorExtranjero,
contactoComprador,
CorreoComprador,
DireccionComprador,
MunicipioComprador,
ProvinciaComprador,
FechaEntrega,
FechaOrdenCompra,
NumeroOrdenCompra,
CodigoInternoComprador,
nombreFile,
IndicadorNotaCredito,
NCFmodificado,
codigoModificacion,
fechaNCFmodificado
STRING
END RECORD
DEFINE despieceMem DYNAMIC ARRAY OF RECORD
id_etiqueta SMALLINT,
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT,
lado_1 DEC(12, 5),
lado_2 DEC(12, 5),
lado_3 DEC(12, 5),
cantidad DEC(12, 5),
medida DEC(12, 5),
secuencia, id_despiece INT,
bodega SMALLINT
END RECORD
DEFINE container DYNAMIC ARRAY OF RECORD
id_etiqueta SMALLINT,
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT,
lado_1 DEC(12, 5),
lado_2 DEC(12, 5),
lado_3 DEC(12, 5),
cantidad DEC(12, 5),
medida DEC(12, 5),
secuencia, id_despiece INT,
bodega SMALLINT
END RECORD
DEFINE moviD RECORD
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
descripcion, observacion STRING,
book VARCHAR(50),
tipos VARCHAR(50),
lado_1 DECIMAL(12, 5),
lado_2 DECIMAL(12, 5),
lado_3 DECIMAL(12, 5),
id_bodega, id_seccion1 INT,
d_seccion1 VARCHAR(50),
id_tramo1 INT,
id_fila, id_pos INT,
d_tramo1 VARCHAR(50),
id_producto VARCHAR(25),
tipo_material VARCHAR(30),
cantidad1, cantidad2, factor_conv DECIMAL(12, 5),
cod_mov INT,
control_transferencia_ubicaciones VARCHAR(2),
cod_mov_transferencia INT,
codigo STRING
END RECORD
DEFINE movi10 DYNAMIC ARRAY OF RECORD
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
descripcion, observacion STRING,
book VARCHAR(50),
tipos VARCHAR(50),
lado_1 DECIMAL(12, 5),
lado_2 DECIMAL(12, 5),
lado_3 DECIMAL(12, 5),
id_bodega, id_seccion1 INT,
d_seccion1 VARCHAR(50),
id_tramo1 INT,
d_tramo1 VARCHAR(50),
id_fila, id_pos INT,
id_producto VARCHAR(25),
tipo_material VARCHAR(30),
cantidad1, cantidad2, factor_conv DECIMAL(12, 5),
cod_mov INT,
de_seccion, de_tramo INT,
codigo STRING
END RECORD
DEFINE movi10Dest DYNAMIC ARRAY OF RECORD
area, cod_n, cod_Grupo, cod_tipo, cod_sec INT,
descripcion, observacion STRING,
book VARCHAR(50),
tipos VARCHAR(50),
lado_1 DECIMAL(12, 5),
lado_2 DECIMAL(12, 5),
lado_3 DECIMAL(12, 5),
id_bodega, id_seccion1 INT,
d_seccion1 VARCHAR(50),
id_tramo1 INT,
d_tramo1 VARCHAR(50),
id_fila, id_pos INT,
id_producto VARCHAR(25),
tipo_material VARCHAR(30),
cantidad1, cantidad2, factor_conv DECIMAL(12, 5),
cod_mov INT,
de_seccion, de_tramo INT,
codigo STRING
END RECORD
DEFINE documento_Detalle DYNAMIC ARRAY OF RECORD
indicadorFacturacion,
nombreItem,
indicadorBienoServicio,
cantidadItem,
precioUnitarioItem,
montoItem
STRING,
DescripcionItem VARCHAR(1000),
NumeroLinea INT
END RECORD
DEFINE jsonMovi STRING
DEFINE
num_cr_e,
num_doc_e,
factura_e,
num_doc_ret,
ordenx,
tmpnumero,
idtipo,
xnum_doc_c,
dias_factura,
pnumero_doc,
id_municipio_dgii,
id_provincia_dgii
INTEGER,
hacerdocumento BOOLEAN,
pperfil SMALLINT,
direccion_p VARCHAR(100),
pdescripmov VARCHAR(80),
xhas VARCHAR(6),
xtipo_orden, xfechaFirmaDigital VARCHAR(50),
nombre_sucursal VARCHAR(80),
existminima DYNAMIC ARRAY OF FLOAT,
existenciaact DYNAMIC ARRAY OF FLOAT,
porcientoControl DYNAMIC ARRAY OF FLOAT,
enviaCorreo VARCHAR(2),
enviaEmailProd DYNAMIC ARRAY OF CHAR(2),
estadoordenes VARCHAR(200),
xusername, xsmtphost, xsmtpport, xpassword STRING,
almacen_orden VARCHAR(10),
xhash, phash VARCHAR(6),
codigodgii, codigodgii_m VARCHAR(19),
descripcion_ncf VARCHAR(100),
desglose VARCHAR(1),
arr_iptb58 DYNAMIC ARRAY OF RECORD
area INT,
cod_n, cod_grupo, cod_tipo, cod_sec INT,
descripcion VARCHAR(100),
unidad_med VARCHAR(4),
cantidad_1, cantidad, cantidad_o1, cantidad1, factor_conv DEC(12, 5)
END RECORD,
arrcontrol_existencia DYNAMIC ARRAY OF CHAR(2)
DEFINE
factor_conv DYNAMIC ARRAY OF DECIMAL(12, 5),
cantidad_factura,
cantidad_devuelta,
total_medida,
cantidad_orden,
cantidad_recibida,
diferencia,
cantidadRequisicion,
Rcantidad_requisicion,
cantidad_orden1,
pcantidadConduce,
transito,
existencia,
reservado
DEC(12, 5)
DEFINE
ac_cli, reimpresion, pcerrada CHAR(1),
pnum_req, xcotizacion INTEGER,
pcontrol_cliente CHAR(3),
aplica_dev CHAR(2),
pcontrol_despacho,
pcontrol_transferencia,
chconduce,
control_devolucion,
pcontrol_departamento
CHAR(2),
procedimiento, PCCEMAIL VARCHAR(200),
TOemail STRING,
cuerpo_correo VARCHAR(230),
CCEmail, subject VARCHAR(450),
psec_vend INT,
almacen_destino, almacen_origen VARCHAR(40),
xbodega VARCHAR(30)
DEFINE
busca1, busca2, chitbis, _chitbis, prequisiciones CHAR(10),
pitbis, pdescuento, xporc_Desc DEC(12, 2)
DEFINE nombre_emp, nom_cli CHAR(30)
DEFINE p_num_doc INTEGER
DEFINE p_itbi, valor_fac, p_total DECIMAL(12, 2)
DEFINE
salir, via CHAR(1),
ptotalb, xdescuento DEC(12, 2)
DEFINE prtb09 RECORD LIKE prtb00009.*
DEFINE busca_v RECORD
sec_cliente INTEGER,
nombre CHAR(30)
END RECORD
DEFINE
despiece DYNAMIC ARRAY OF RECORD
id_etiqueta SMALLINT,
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT,
lado_1 DEC(12, 5),
lado_2 DEC(12, 5),
lado_3 DEC(12, 5),
cantidad DEC(12, 5),
medida DEC(12, 5),
secuencia, id_despiece INT,
bodega SMALLINT
END RECORD,
cantidad_conduce, xcantidad2, xcantidad1 DEC(12, 5),
psucid INT,
fechaVencimiento DATE
DEFINE despieceDest DYNAMIC ARRAY OF RECORD
id_etiqueta SMALLINT,
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT,
lado_1 DEC(12, 5),
lado_2 DEC(12, 5),
lado_3 DEC(12, 5),
cantidad DEC(12, 5),
medida DEC(12, 5),
secuencia, id_despiece INT,
bodega SMALLINT
END RECORD
DEFINE despiece_act DYNAMIC ARRAY OF RECORD
id_etiqueta SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
lado_1 DEC(12, 5),
lado_2 DEC(12, 5),
lado_3 DEC(12, 5),
cantidad DEC(12, 5),
medida DEC(12, 5),
secuencia INT
END RECORD
DEFINE arr_recibo RECORD
cod_mov LIKE iptb00006.cod_mov,
aplica_a LIKE cctb00001.aplica_a,
valor_pen DECIMAL(12, 2),
desc_p LIKE cctb00001.monto_desc,
val_desc DECIMAL(12, 2),
valor_pag DECIMAL(12, 2)
END RECORD
DEFINE fact_gral RECORD
cod_cia LIKE vetb00002.cod_cia,
ventas LIKE vetb00002.ventas,
--zona CHAR(3),
factura LIKE vetb00002.factura,
bodega SMALLINT,
--conduce LIKE vetb00002.conduce,
--fecha_conduce DATE,
--fecha_factura DATE,
--tipo_cliente LIKE vetb00002.tipo_cliente,
--sec_cliente LIKE vetb00002.sec_cliente,
--nombre CHAR(30),
direccion CHAR(80),
--ciudad CHAR(20),
--prima_us LIKE vetb00002.prima_us,
--porc_desc LIKE vetb00002.porc_desc,
--cond_pago LIKE vetb00002.cond_pago,
--orden INT,
--fecha_orden DATE,
--porc_itbi LIKE vetb00002.porc_itbi,
--sec_vend LIKE vetb00002.sec_vend,
--nombre_vend CHAR(60),
--cod_transp LIKE iptb00006.cod_transp,
--sec_transp LIKE iptb00006.sec_transp,
--cod_tarifa LIKE iptb00006.cod_tarifa,
--nombre_tran CHAR(30),
--fecha_embarque DATE,
--placa_transp LIKE iptb00006.placa,
--sub_total DECIMAL(12,2),
--desc_valor DECIMAL(12,2),
--itbi DECIMAL(12,2),
--total_fact DECIMAL(12,2)
fecha_despacho DATE
END RECORD
DEFINE
recibo RECORD
num_doc LIKE cctb00001.num_doc,
tipo_cliente LIKE cctb00001.tipo_cliente,
sec_cliente LIKE cctb00001.sec_cliente,
cod_emp_sec LIKE cctb00001.cod_emp_sec,
fecha_orig LIKE cctb00001.fecha_orig,
itbi DECIMAL(8, 2),
concepto CHAR(60)
END RECORD,
ptipoorden STRING,
sucnombre, direccion_sucursal, xnombre_provincia VARCHAR(100),
cantidadBultos, x2 INT,
ult_ncf, num_ncf, num_ncf_m, localidad INT
DEFINE
out_result, cod_mensaje INT,
out_msg STRING
DEFINE
normal,
negrilla_on,
negrillas_of,
comp_on,
comp_off,
doce,
doble_on,
doble_off
CHAR(3),
usuarios, clave CHAR(80),
HANDLER om.SaxDocumentHandler,
salida VARCHAR(4)
MAIN
DEFER INTERRUPT
CALL STARTLOG("ipmt044.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CALL ARG_VAL(4) RETURNING impresor1
CONNECT TO "marmotech" AS "SQL_E" USER usuarios USING clave
CONNECT TO "smarmotech" AS "SQL_C" USER usuarios USING clave
SET ISOLATION TO COMMITTED READ
SELECT * INTO p_companias.* FROM companias
SELECT controlOrdenesE
FROM seg0003
WHERE usuario = usuarios AND controlOrdenesE = "SI"
IF STATUS <> NOTFOUND THEN
LET ptipoorden = 'ECOMMERCE'
ELSE
LET ptipoorden = "GENERAL"
END IF
SELECT a.sucid,
b.sucnombre,
b.direccion,
c.nombre_provincia,
b.telefono,
b.fax,
b.rnc,
a.cod_perfil,
c.id_dgii,
c.id_municipio_dgii
INTO localidad,
sucnombre,
direccion_sucursal,
xnombre_provincia,
p_companias.telefono,
p_companias.fax,
p_companias.rnc,
pperfil,
id_provincia_dgii,
id_municipio_dgii
FROM seg0001 a, sucursales b, vetb00020 c
WHERE a.usuario = usuarios
AND a.sucid = b.sucid
AND b.localidad = c.cod_provincia
CALL ipprmt044()
END MAIN
FUNCTION busca_cliente()
LET int_flag = FALSE
OPEN WINDOW cliente
AT 10, 9
WITH FORM "ipfmwd009"
ATTRIBUTE(BORDER, FORM LINE FIRST + 2)
CONSTRUCT BY NAME criterio ON a.tipo_cliente, a.sec_cliente, a.nombre
LET selec =
"SELECT a.tipo_cliente,a.sec_cliente,a.nombre FROM vetb00004 a ",
"WHERE a.status_t IS NULL AND ",
criterio CLIPPED,
"ORDER BY 1,2"
PREPARE comando3 FROM selec
DECLARE comp3 CURSOR FOR comando3
LET idx = 1
FOREACH comp3 INTO clientes[idx].*
LET idx = idx + 1
IF idx = 49 THEN
EXIT FOREACH
END IF
END FOREACH
CALL SET_COUNT(idx - 1)
DISPLAY ARRAY clientes TO s_cliente.*
LET idx = ARR_CURR()
CLOSE WINDOW cliente
END FUNCTION
FUNCTION ipprmt044()
DEFINE fecha CHAR(8)
DEFINE hora CHAR(5)
OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 24, PROMPT LINE 24
LET fecha = TODAY USING "dd/mm/yyyy"
LET hora = TIME
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2
DISPLAY p_companias.nombre CLIPPED AT 1, lj ATTRIBUTE(REVERSE, BLUE)
DISPLAY fecha AT 1, 70 ATTRIBUTE(BLUE)
DISPLAY hora AT 2, 73 ATTRIBUTE(BLUE)
DISPLAY "ipprmt044" AT 1, 3 ATTRIBUTE(BLUE)
DISPLAY "Otros Movimientos" AT 2, 30
DISPLAY "<Esc> Adiciona Registro" AT 3, 2 ATTRIBUTE(BLUE, REVERSE)
OPEN FORM ipfmmt044 FROM "ipfmmt044"
DISPLAY FORM ipfmmt044
CALL ipprad44()
END FUNCTION
FUNCTION ipprad44()
DEFINE
vexistencia, estado_req, siDespiece BOOLEAN,
control_produce VARCHAR(2)
DEFINE data RECORD
rnumeroDoc,
rcodMov,
rtipo_cliente,
num_oc,
tipo_cliente,
sec_cliente,
bodega,
bodega_destino
INT,
nombre VARCHAR(100)
END RECORD
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME otros_mov.num_doc,
otros_mov.cod_cia,
pnumero_Doc,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
idtipo,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
num_doc_ret,
pnum_req
ATTRIBUTE(WITHOUT DEFAULTS)
AFTER FIELD pnumero_doc
IF pnumero_doc IS NOT NULL THEN
SELECT a.cod_mov,
a.num_oc,
a.nombre,
a.tipo_cliente,
a.sec_cliente,
a.bodega,
a.bodega_destino
INTO otros_mov.cod_mov,
otros_mov.conduce_no,
otros_mov.descrip4,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.bodega,
otros_mov.bodega_destino
FROM iptb00057 a
WHERE a.numero_doc = pnumero_doc
AND a.status_t IS NULL
AND a.estado = "AUTORIZADA"
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD pnumero_doc
END IF
DISPLAY BY NAME otros_mov.cod_mov,
pnumero_doc,
otros_mov.conduce_no,
otros_mov.descrip4,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.bodega,
otros_mov.bodega_destino
END IF
ON ACTION reqautorizadas
CALL ipautorizadas(usuarios) RETURNING data.*
LET otros_mov.cod_mov = data.rcodMov
LET pnumero_doc = data.rnumeroDoc
LET otros_mov.conduce_no = data.num_oc
LET otros_mov.descrip4 = data.nombre
LET otros_mov.cod_sp = data.rtipo_cliente
LET otros_mov.cod_sp_sec = data.sec_cliente
IF data.bodega IS NOT NULL THEN
LET otros_mov.bodega = data.bodega
END IF
LET otros_mov.bodega_destino = data.bodega_destino
DISPLAY BY NAME otros_mov.cod_mov,
pnumero_doc,
otros_mov.conduce_no,
otros_mov.descrip4,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.bodega,
otros_mov.bodega_destino
BEFORE INPUT
INITIALIZE otros_mov.* TO NULL
CALL tiposModificacion()
LET selec =
"SELECT ISNULL(a.material,0)+ISNULL(a.labor,0)+ISNULL(a.gastos,0) FROM iptb00004 a
WHERE a.ano = ? AND a.mes_fin=12 AND
a.cod_n = ? AND a.cod_grupo = ? AND
a.cod_tipo = ? AND a.cod_sec = ? AND a.status_t IS NULL
"
PREPARE bcosto FROM selec
CALL ipautorizadas(usuarios) RETURNING data.*
CALL piking(usuarios, clave, impresor, otros_mov.bodega, psucid)
LET otros_mov.cod_mov = data.rcodMov
LET pnumero_doc = data.rnumeroDoc
LET otros_mov.conduce_no = data.num_oc
LET otros_mov.descrip4 = data.nombre
LET otros_mov.cod_sp = data.rtipo_cliente
LET otros_mov.cod_sp_sec = data.sec_cliente
IF data.bodega IS NOT NULL THEN
LET otros_mov.bodega = data.bodega
END IF
LET otros_mov.bodega_destino = data.bodega_destino
LET otros_mov.fecha = TODAY
LET pnum_req = NULL
LET num_doc_ret = NULL
CALL despiece.clear()
LET otros_mov.cod_cia = 1
# IF pnumero_doc IS NULL THEN
SELECT a.bodega, a.sucid, b.ordenes
INTO otros_mov.bodega, psucid, almacen_orden
FROM seg0001 a
LEFT OUTER
JOIN intb00009 b
ON b.cod_bodega = a.bodega
WHERE a.usuario = usuarios
# END IF
LET k1 = '1'
CALL bodegas(k1)
LET k1 = '2'
CALL bodegas(k1)
DISPLAY BY NAME otros_mov.bodega
IF ptipoorden <> 'ECOMMERCE' THEN
IF otros_mov.cod_mov IS NULL OR otros_mov.cod_mov = 0 THEN
LET otros_mov.cod_mov = 30
END IF
ELSE
SELECT a.cod_mov
INTO otros_mov.cod_mov
FROM vetb00060 a
WHERE a.tipo_cliente = 25
END IF
CALL cmovimientos()
DISPLAY BY NAME otros_mov.cod_mov,
pnumero_doc,
otros_mov.conduce_no,
otros_mov.descrip4,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.bodega,
otros_mov.bodega_destino
NEXT FIELD cod_mov
{ COMENTARIO PARA EL CONTROL DEL DOCUMENTO DE RE-TRABAJO, SE VA A REALIZAR LUEGO DEL DOC DEVOLUCION}
{ AFTER FIELD num_doc_ret
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
IF num_doc_ret IS NULL THEN
CALL fgl_winmessage("ERROR","NO PUEDE DEJAR EN BLANCO NUMERO DOCUMENTO RE-TRABAJO","INFO")
NEXT FIELD num_doc_ret
END IF
END IF
IF num_doc_ret IS NOT NULL THEN
SELECT a.num_oc,a.tipo_cliente,a.sec_cliente,b.nombre,a.conduce_no,a.factura,a.num_req
INTO otros_mov.conduce_no,otros_mov.cod_sp,otros_mov.cod_sp_sec,otros_mov.descrip4,xconduce_no,
otros_mov.fact_no,pnum_req
FROM svtb00007 a,vetb00004 b
WHERE (a.num_doc = num_doc_ret) AND a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","DOCUMENTO RE-TRABAJO NO EXISTE","INFO")
NEXT FIELD num_doc_ret
END IF
IF otros_mov.fact_no IS NULL THEN
SELECT a.factura, a.fecha_factura INTO otros_mov.fact_no, fact_gral.fecha_despacho
FROM vetb00002 a WHERE (a.conduce = xconduce_no AND
a.tipo_cliente = otros_mov.cod_sp AND
a.sec_cliente = otros_mov.cod_sp_sec) AND
a.status_t IS NULL
ELSE
SELECT a.fecha_factura INTO fact_gral.fecha_despacho
FROM vetb00002 a WHERE (a.factura = otros_mov.fact_no AND
a.tipo_cliente = otros_mov.cod_sp AND
a.sec_cliente = otros_mov.cod_sp_sec) AND
a.status_t IS NULL
END IF
DISPLAY BY NAME otros_mov.fact_no,pnum_req,otros_mov.conduce_no
IF otros_mov.fact_no IS NULL THEN
NEXT FIELD fact_no
END IF
# CONSULTA QUE ESTE FORMULARIO NO EXISTA EN LA TABLA TRANSACCIONES INVENTARIOS
SELECT DISTINCT a.num_doc_retrabajo FROM iptb00006 a
WHERE a.num_doc_retrabajo = num_doc_ret AND
a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage("INFO","DOCUMENTO RETRABAJO YA TIENE DEVOLUCION","INFO")
NEXT FIELD num_doc_ret
END IF
END IF
}
ON ACTION buscar
ATTRIBUTES(TEXT = "Busca Documento", IMAGE = "find")
LET reimpresion = "S"
CALL consulta()
ON ACTION bconduces
CALL conduces(
otros_mov.conduce_no)
RETURNING otros_mov.conduce_no, pnum_req, otros_mov.factura
DISPLAY BY NAME otros_mov.factura,
otros_mov.conduce_no,
pnum_req
ON ACTION buscacliente
IF INFIELD(cod_sp_sec) OR INFIELD(cod_sp) THEN
CALL busca_cliente()
LET otros_mov.cod_sp = clientes[idx].tipo_cliente
LET otros_mov.cod_sp_sec = clientes[idx].sec_cliente
LET otros_mov.descrip4 = clientes[idx].nombre
DISPLAY BY NAME otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.descrip4
END IF
AFTER FIELD cod_cia
IF otros_mov.cod_cia IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_cia
END IF
IF otros_mov.cod_cia = 1 THEN
LET nombre_cia = p_companias.nombre
ELSE
LET nombre_cia = ""
END IF
DISPLAY BY NAME nombre_cia
AFTER FIELD pnum_req
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
IF pnum_req IS NULL THEN
CALL msg(16)
NEXT FIELD pnum_req
END IF
SELECT DISTINCT a.num_req
FROM iptb00006 a
WHERE a.num_req = pnum_req AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD pnum_req
END IF
END IF
# IF pcontrol_cliente = 'SI' AND verificaRequisicion(pnum_req) THEN
# CALL msg(1675)
# NEXT FIELD cod_mov
# END IF
AFTER FIELD fecha
IF otros_mov.fecha > TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = otros_mov.fecha USING "dd/mm/yyyy"
CALL prd(p_fechas, usuarios) RETURNING bandera
LET otros_mov.fecha = p_fechas
DISPLAY BY NAME otros_mov.fecha
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha
END IF
AFTER FIELD factura
# LET otros_mov.cod_sp = null
# LET otros_mov.cod_sp_sec = null
IF control_devolucion = "SI" THEN
IF otros_mov.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD factura
END IF
SELECT UNIQUE a.tipo_cliente,
a.sec_cliente,
a.orden,
MAX(b.num_req),
RTRIM(a.rnc),
a.fecha_factura
INTO otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.conduce_no,
pnum_req,
documento_encabezado.rncComprador,
fact_gral.fecha_despacho
FROM vetb00002 a, iptb00006 b
WHERE a.factura = otros_mov.factura
AND (a.tipo_cliente = b.cod_sp
AND a.sec_cliente = b.cod_sp_Sec)
AND a.factura = b.factura
AND b.cod_mov IN (30, 31, 55, 56, 94)
AND a.status_t IS NULL
AND b.num_req IS NOT NULL
AND CONVERT(CHAR(10), fecha_factura, 101)
>=
'01/01/2007'
GROUP BY a.tipo_cliente,
a.sec_cliente,
a.orden,
a.rnc,
a.fecha_factura
IF status = NOTFOUND THEN
LET numero_msg = 102
CALL msg(numero_msg)
NEXT FIELD factura
END IF
DISPLAY BY NAME otros_mov.conduce_no,
pnum_req,
otros_mov.cod_sp,
otros_mov.cod_sp_sec
# CONTROL FECHA
IF otros_mov.fecha < fact_gral.fecha_despacho THEN
CALL msg(64)
NEXT FIELD factura
END IF
# CONTROL `
LET cantidad_factura = 0
LET cantidad_devuelta = 0
SELECT SUM(a.cantidad)
INTO cantidad_factura
FROM vetb00003 a
WHERE a.factura = otros_mov.factura
AND a.status_t IS NULL
AND a.fech_crea > '2009-01-01 08:00'
SELECT SUM(a.cantidad_2)
INTO cantidad_devuelta
FROM iptb00006 a
WHERE a.fact_no = otros_mov.factura
AND a.status_t IS NULL
AND a.fech_crea > '2009-01-01 08:00'
AND a.cod_mov IN (12, 13)
IF cantidad_devuelta + .05 > cantidad_factura THEN
LET numero_msg = 238
CALL msg(numero_msg)
NEXT FIELD factura
END IF
END IF
{
IF otros_mov.fact_no is not null THEN
IF otros_mov.cod_mov = 32 THEN
SELECT unique cod_n FROM iptb00006
WHERE fact_no = otros_mov.fact_no and cod_mov = otros_mov.cod_mov and
CONVERT(CHAR(10), fecha,101) >= "01011994" AND status_t is null
IF status != NOTFOUND THEN
LET numero_msg = 103
CALL msg(numero_msg)
NEXT FIELD fact_no
END IF
END IF
END IF
}
DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec
AFTER FIELD cod_transp
IF otros_mov.cod_mov = 30
OR otros_mov.conduce_no = 31
OR otros_mov.cod_mov = 55
OR otros_mov.cod_mov = 12
OR otros_mov.cod_mov = 13 THEN
IF otros_mov.cod_transp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_transp
END IF
END IF
AFTER FIELD sec_transp
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
IF otros_mov.sec_transp IS NULL THEN
CALL msg(16)
NEXT FIELD sec_transp
END IF
END IF
IF pcontrol_despacho = "SI"
OR pcontrol_transferencia = "SI" THEN
IF otros_mov.sec_transp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_transp
END IF
SELECT nombre
INTO descrip2
FROM vetb00015
WHERE cod_transp = otros_mov.cod_transp
AND sec_transp = otros_mov.sec_transp
AND status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_transp
END IF
DISPLAY BY NAME descrip2
END IF
AFTER FIELD cod_tarifa
IF otros_mov.cod_tarifa IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
# NEXT FIELD cod_tarifa
END IF
SELECT descrip
INTO descrip1
FROM vetb00023
WHERE cod_tarifa = otros_mov.cod_tarifa AND status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
#NEXT FIELD cod_tarifa
END IF
DISPLAY BY NAME descrip1
# ON ACTION piking
# CALL piking(usuarios,clave,impresor,otros_mov.bodega,psucid)
BEFORE FIELD num_doc
LET tmpnumero = 0
SELECT a.num_doc
INTO tmpnumero
FROM iptb00043 a
WHERE usuario = usuarios
IF STATUS = NOTFOUND THEN
INSERT INTO iptb00043 VALUES(1, usuarios)
LET tmpnumero = 1
ELSE
LET tmpnumero = tmpnumero + 1
UPDATE iptb00043
SET num_doc = tmpnumero
WHERE usuario = usuarios
END IF
LET otros_mov.num_doc = tmpnumero
DISPLAY BY NAME otros_mov.num_doc
LET otros_mov.fecha = TODAY
DISPLAY BY NAME otros_mov.fecha
AFTER FIELD cod_mov
CALL despiece.clear()
LET pcontrol_cliente = NULL
LET Pcontrol_transferencia = NULL
SELECT a.status_mov,
a.control_clientes,
a.control_despacho,
a.control_devolucion,
a.control_transferencia,
a.control_departamento,
a.descrip_mov,
a.requisiciones,
a.control_produccion
INTO status_m,
pcontrol_cliente,
pcontrol_despacho,
control_devolucion,
Pcontrol_transferencia,
pcontrol_departamento,
otros_mov.descrip_mov,
prequisiciones,
control_produce
FROM iptb00005 a
WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t IS NULL
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
IF control_devolucion = 'SI' THEN
LET aplica_dev = 1
LET idtipo = 1
DISPLAY BY NAME aplica_Dev, idtipo
END IF
IF prequisiciones = "SI"
AND (pnumero_doc IS NULL OR pnumero_doc = 0) THEN
CALL msg(203)
NEXT FIELD pnumero_Doc
END IF
IF pcontrol_transferencia = 'SI' THEN
LET k1 = '2'
ELSE
LET k1 = '1'
END IF
CALL bodegas(k1)
SELECT num_doc
INTO otros_mov.num_doc
FROM iptb00007
WHERE cod_mov = otros_mov.cod_mov
AND bodega = otros_mov.bodega
IF otros_mov.num_Doc IS NULL THEN
LET otros_mov.num_doc = 1
END IF
# CONTROL CODIGO ENTRADA TRANSFERENCIA
SELECT a.codigo_mov_transferencia
FROM iptb00005 a
WHERE a.codigo_mov_transferencia = otros_mov.cod_mov
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage(
"INFO",
"NO PUEDES USAR EL CODIGO QUE VA A RECIBIR LA TRANSFERENCIA",
"INFO")
NEXT FIELD cod_mov
END IF
LET otros_mov.num_Doc = otros_mov.num_doc + 1
DISPLAY BY NAME otros_mov.num_doc
DISPLAY BY NAME otros_mov.bodega
--C0NTROL DESPACHO
LET pnum_req = NULL
IF pcontrol_despacho = "SI" THEN
TRY
CALL visualizacion_despacho()
RETURNING otros_mov.conduce_no,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
pnum_req
CATCH
LET numero_msg = 15
CALL msg(numero_msg)
NEXT FIELD cod_mov
END TRY
IF Int_flag THEN
LET int_flag = FALSE
CALL msg(2)
DELETE FROM iptbexistencia WHERE us_crea = usuarios
RETURN
END IF
IF otros_mov.cod_sp IS NULL THEN
NEXT FIELD cod_mov
END IF
IF otros_mov.cod_sp_sec IS NULL THEN
NEXT FIELD cod_mov
END IF
END IF
{ CHEQUEO DE PERMISOS PARA EL USUARIO}
SELECT a.cod_mov
FROM iptb00023 a
WHERE a.cod_mov = otros_mov.cod_mov AND a.usuario = usuarios
IF status = NOTFOUND THEN
LET numero_msg = 139
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
IF otros_mov.cod_mov = 35 OR otros_mov.cod_mov = 10 THEN
CALL fgl_winmessage(
"INFO",
"NO PUEDES EMITIR ESTE TIPO DE DOCUMENTO EN ESTE PROGRAMA",
"INFO")
NEXT FIELD cod_mov
END IF
# IF otros_mov.cod_mov = 32 or
# otros_mov.cod_mov = 12
# THEN
# NEXT FIELD num_doc_ret
# ELSE
# NEXT FIELD cod_transp
# END IF
AFTER FIELD bodega
IF otros_mov.bodega IS NULL THEN
CALL msg(16)
NEXT FIELD bodega
END IF
SELECT UNIQUE a.usuario
FROM iptb00048 a
WHERE a.bodega = otros_mov.bodega AND a.usuario = usuarios
IF STATUS = NOTFOUND THEN
CALL msg(503)
NEXT FIELD bodega
END IF
AFTER FIELD cod_mov1
IF otros_mov.entrada IS NOT NULL THEN
IF otros_mov.cod_mov IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD entrada
END IF
SELECT a.descrip_mov
INTO otros_mov.descrip_mov1
FROM iptb00005 a
WHERE a.cod_mov = otros_mov.cod_mov1
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_mov1
END IF
DISPLAY BY NAME otros_mov.descrip_mov1
END IF
BEFORE FIELD conduce_no
IF pcontrol_despacho = "SI" THEN
IF otros_mov.bodega IS NULL THEN
LET otros_mov.bodega = 1
DISPLAY BY NAME otros_mov.bodega
END IF
SELECT UNIQUE a.cod_mov
FROM vetb00060 a
WHERE a.tipo_cliente = otros_mov.cod_sp
AND a.cod_mov = otros_mov.cod_mov
IF STATUS = NOTFOUND THEN
LET numero_msg = 386
CALL msg(numero_msg)
NEXT FIELD cod_mov
END IF
SELECT a.nombre
INTO otros_mov.descrip4
FROM vetb00004 a
WHERE a.tipo_cliente = otros_mov.cod_sp
AND a.sec_cliente = otros_mov.cod_sp_sec
DISPLAY BY NAME otros_mov.cod_sp,
otros_mov.cod_sp_Sec,
otros_mov.descrip4
NEXT FIELD detalle
END IF
AFTER FIELD conduce_no
LET ordenx = NULL
LET pnum_req = NULL
IF otros_mov.conduce_no IS NOT NULL THEN
LET ordenx = otros_mov.conduce_no
LET pcerrada = 'N'
SELECT a.tipo_cliente,
a.sec_cliente,
a.cerrada,
a.cotizacion_no,
a.tipo_orden
INTO otros_mov.cod_sp,
otros_mov.cod_sp_sec,
pcerrada,
xcotizacion,
xtipo_orden
FROM prtb00012 a
WHERE a.num_oc = ordenx AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
SELECT a.nombre
INTO otros_mov.descrip4
FROM vetb00004 a
WHERE a.tipo_cliente = otros_mov.cod_sp
AND a.sec_cliente = otros_mov.cod_sp_sec
DISPLAY BY NAME otros_mov.cod_sp,
otros_mov.cod_sp_Sec,
otros_mov.descrip4
IF pcontrol_despacho = "SI" THEN
IF pcerrada = "S" THEN
LET numero_msg = 74
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
END IF
DISPLAY BY NAME otros_mov.cod_sp, otros_mov.cod_sp_sec
IF otros_mov.cod_mov = 44 THEN
IF xtipo_orden <> 'REPOSICION' THEN
CALL fgl_Winmessage(
"INFO",
"LA ORDEN DEBE SER DE REPOSICION",
"INFO")
NEXT FIELD conduce_no
END IF
END IF
END IF
IF otros_mov.cod_mov = 30
OR otros_mov.conduce_no = 31
OR otros_mov.cod_mov = 55 THEN
IF otros_mov.conduce_no IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
END IF
NEXT FIELD detalle
BEFORE FIELD cod_sp
IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN
CALL busca_vend()
LET otros_mov.cod_sp = 12
LET otros_mov.cod_sp_sec = busca_v.sec_cliente
LET otros_mov.descrip4 = busca_v.nombre
DISPLAY BY NAME otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.descrip4
NEXT FIELD cod_sp_sec
END IF
AFTER FIELD cod_sp
IF ac_cli = "S" AND otros_mov.cod_sp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
IF pcontrol_despacho = "SI" THEN
IF pcontrol_cliente = "SI" THEN
SELECT a.cod_mov
FROM vetb00060 a
WHERE a.cod_mov = otros_mov.cod_mov
AND a.tipo_cliente = otros_mov.cod_sp
IF STATUS = NOTFOUND THEN
CALL msg(240)
NEXT FIELD cod_sp
END IF
END IF
END IF
AFTER FIELD cod_sp_sec
IF ac_cli = "S" AND otros_mov.cod_sp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
IF otros_mov.cod_mov = 12 THEN
IF otros_mov.cod_sp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
END IF
IF otros_mov.cod_sp_sec IS NOT NULL THEN
SELECT a.nombre, b.sec_vend
INTO otros_mov.descrip4, psec_vend
FROM vetb00004 a, vetb00028 b
WHERE a.tipo_cliente = otros_mov.cod_sp
AND a.sec_cliente = otros_mov.cod_sp_sec
AND a.tipo_cliente = b.tipo_cliente
AND a.sec_cliente = b.sec_cliente
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
DISPLAY BY NAME otros_mov.descrip4, psec_vend
IF otros_mov.factura IS NOT NULL THEN
SELECT sec_cliente
FROM vetb00002
WHERE factura = otros_mov.factura
AND sec_cliente = otros_mov.cod_sp_sec
IF status = NOTFOUND THEN
LET numero_msg = 237
CALL msg(numero_msg)
NEXT FIELD cod_sp_sec
END IF
END IF
END IF
IF otros_mov.cod_mov = 33 OR otros_mov.cod_mov = 34 THEN
SELECT UNIQUE sec_cliente
FROM vetb00033
WHERE sec_cliente = otros_mov.cod_sp_sec
IF STATUS = NOTFOUND THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
END IF
BEFORE FIELD entrada
IF otros_mov.cod_mov = 30
OR otros_mov.cod_mov = 31
OR otros_mov.cod_mov = 55 THEN
IF otros_mov.entrada IS NULL THEN
# IF otros_mov.entrada IS NOT NULL THEN
SELECT MAX(a.num_doc), MAX(a.cod_mov)
INTO otros_mov.entrada, otros_mov.cod_mov1
FROM iptb00006 a
WHERE (a.num_oc = ordenx)
AND (a.cod_mov IN (70, 71, 72))
AND a.status_t IS NULL
# END IF
DISPLAY BY NAME otros_mov.entrada, otros_mov.cod_mov1
END IF
END IF
AFTER FIELD entrada
IF otros_mov.entrada IS NOT NULL THEN
SELECT UNIQUE a.num_doc
FROM iptb00006 a
WHERE a.cod_mov = otros_mov.cod_mov1
AND a.num_doc = otros_mov.entrada
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD entrada
END IF
END IF
AFTER FIELD departamento
IF pcontrol_departamento = "SI" THEN
IF otros_mov.departamento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
DISPLAY "DEPARTAMENTO AFTER FIELD: ",
pcontrol_departamento
NEXT FIELD departamento
END IF
SELECT a.nom_dpto
INTO otros_mov.nombre_depto
FROM adtb00001 a
WHERE a.departamento = otros_mov.departamento
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 16
CALL msg(numero_msg)
DISPLAY "DEPARTAMENTO AFTER FIELD NOT FOUND 1: ",
pcontrol_departamento
NEXT FIELD departamento
END IF
DISPLAY BY NAME otros_mov.nombre_depto,
otros_mov.cod_sp,
otros_mov.cod_sp_sec
ELSE
IF otros_mov.departamento IS NOT NULL THEN
CALL fgl_winmessage(
"INFO",
"ESTE CODIGO DE MOVIMIENTO NO SE LE PUEDE COLOCAR DEPARTAMENTO",
"INFO")
NEXT FIELD departamento
END IF
END IF
AFTER INPUT
IF INT_FLAG THEN
CALL msg(2)
LET INT_FLAG = FALSE
RETURN
END IF
LET pano = YEAR(otros_mov.fecha)
IF prequisiciones = "SI"
AND (pnumero_doc IS NULL OR pnumero_doc = 0) THEN
CALL msg(203)
NEXT FIELD pnumero_Doc
END IF
# IF pcontrol_cliente = 'SI' AND NOT verificaRequisicion(pnum_req) THEN
# CALL msg(1675)
# NEXT FIELD cod_mov
# END IF
IF pcontrol_departamento = "SI" THEN
IF otros_mov.departamento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
DISPLAY "DEPARTAMENTO AFTER INPUT 1: ",
pcontrol_departamento
NEXT FIELD departamento
END IF
SELECT a.nom_dpto
INTO otros_mov.nombre_depto
FROM adtb00001 a
WHERE a.departamento = otros_mov.departamento
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 16
CALL msg(numero_msg)
DISPLAY "DEPARTAMENTO AFTER INPUT NOT FOUND 2: ",
pcontrol_departamento
NEXT FIELD departamento
END IF
DISPLAY BY NAME otros_mov.nombre_depto,
otros_mov.cod_sp,
otros_mov.cod_sp_sec
ELSE
IF otros_mov.departamento IS NOT NULL THEN
CALL fgl_winmessage(
"INFO",
"ESTE CODIGO DE MOVIMIENTO NO SE LE PUEDE COLOCAR DEPARTAMENTO",
"INFO")
NEXT FIELD departamento
END IF
END IF
# CONTROL CODIGO ENTRADA TRANSFERENCIA
SELECT a.codigo_mov_transferencia
FROM iptb00005 a
WHERE a.codigo_mov_transferencia = otros_mov.cod_mov
AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage(
"INFO",
"NO PUEDES USAR EL CODIGO QUE VA A RECIBIR LA TRANSFERENCIA",
"INFO")
NEXT FIELD cod_mov
END IF
#--------------------- CONTROL DESPACHOS -------------------------------------------------
IF pcontrol_despacho = "SI" THEN
IF pcontrol_cliente = "SI" THEN
IF otros_mov.cod_sp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
IF ptipoorden = 'ECOMMERCE' THEN
SELECT a.sec_transp
FROM vetb00015 a
WHERE a.cod_transp = otros_mov.cod_transp
AND a.sec_transp = otros_mov.sec_transp
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD cod_transp
END IF
SELECT a.cantidad_bultos
INTO cantidadBultos
FROM iptb00056 a
WHERE a.num_oc = ordenx
IF otros_mov.detalle IS NULL
OR LENGTH(otros_mov.detalle) < 8 THEN
LET otros_mov.detalle =
'CONDUCE RELACIONADO CON TIENDA ONLINE, LA ORDEN CONTIENE ',
cantidadBultos USING "<<<",
' BULTOS '
ELSE
LET otros_mov.detalle =
otros_mov.detalle CLIPPED,
" CONTIENE ",
cantidadBultos USING "<<<",
' BULTOS '
END IF
DISPLAY BY NAME otros_mov.detalle
END IF
#--------------------- TERMINO DE ECOMMERCE ------------------------------------------------------
SELECT a.cod_mov
FROM vetb00060 a
WHERE a.cod_mov = otros_mov.cod_mov
AND a.tipo_cliente = otros_mov.cod_sp
IF STATUS = NOTFOUND THEN
CALL msg(240)
NEXT FIELD cod_mov
END IF
END IF
#---------------- TERMINO CONTROL CLIENTE ----------------------------------
# CONTROL ORDEN PERTENEZCA A LA REQUISICION
SELECT DISTINCT a.num_oc
FROM cctb00026 a
WHERE a.num_oc = otros_mov.conduce_no
AND a.num_req = pnum_req
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(1673)
NEXT FIELD conduce_no
END IF
END IF
#----------------- TERMINO CONTROL DESPACHO ----------------------------------
IF otros_mov.bodega IS NULL THEN
CALL msg(16)
NEXT FIELD bodega
END IF
IF control_devolucion = "SI" THEN
IF aplica_dev IS NULL THEN
NEXT FIELD aplica_dev
END IF
IF idtipo IS NULL OR idtipo = 0 THEN
CALL msg(16)
NEXT FIELD idtipo
END IF
END IF
IF Pcontrol_transferencia = 'SI' THEN
IF otros_mov.bodega_destino IS NULL
OR otros_mov.bodega_destino = 0 THEN
CALL msg(16)
NEXT FIELD bodega_destino
END IF
IF otros_mov.sec_transp IS NULL THEN
CALL msg(16)
NEXT FIELD sec_transp
END IF
IF otros_mov.placa IS NULL THEN
END IF
END IF
IF otros_mov.bodega IS NULL THEN
CALL msg(16)
NEXT FIELD bodega
END IF
SELECT UNIQUE a.usuario
FROM iptb00048 a
WHERE a.bodega = otros_mov.bodega AND a.usuario = usuarios
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage(
"ERROR",
"USTED NO TIENE PERMISOS PARA UTILIZAR BODEGA",
"INFO")
NEXT FIELD bodega
END IF
# BUSCA LOS ITEMS QUE TIENE LA REQUISICION
IF pnumero_doc > 0 THEN
DECLARE buscar_requisicion CURSOR FOR
SELECT a.area,
b.nombre_area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad_1,
a.cantidad_2,
a.cantidad_2,
a.unidad_med,
a.descripcion,
a.cantidad_1,
a.cantidad_2,
'',
''
FROM iptb00058 a, prtb00016 b
WHERE a.numero_doc = pnumero_doc
AND b.area_num = a.area
# Limpia el arreglo antes de cargar la requisicion para que no
# queden items "fantasma" de una carga anterior. El FOREACH solo
# sobreescribe los indices 1..N; sin este clear, los elementos
# sobrantes de una carga previa quedaban y se posteaban sin
# pertenecer a la requisicion de despacho.
CALL movi2.clear()
LET idx = 1
FOREACH buscar_requisicion INTO movi2[idx].*
LET idx = idx + 1
END FOREACH
ELSE
IF otros_mov.conduce_no IS NOT NULL THEN
LET ordenx = otros_mov.conduce_no
SELECT a.tipo_cliente,
a.sec_cliente,
a.cerrada,
a.cotizacion_no,
a.sec_vend,
a.tipo_orden
INTO otros_mov.cod_sp,
otros_mov.cod_sp_sec,
pcerrada,
xcotizacion,
psec_vend,
xtipo_orden
FROM prtb00012 a
WHERE a.num_oc = ordenx AND a.status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD conduce_no
END IF
SELECT a.nombre, b.sec_vend
INTO otros_mov.descrip4
FROM vetb00004 a, vetb00028 b
WHERE a.tipo_cliente = otros_mov.cod_sp
AND a.sec_cliente = otros_mov.cod_sp_sec
AND a.tipo_cliente = b.tipo_cliente
AND a.sec_cliente = b.sec_cliente
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_sp
END IF
SELECT a.mensaje
INTO direccion_p
FROM cctb00029 a
WHERE a.num_req = pnum_req
DISPLAY BY NAME otros_mov.conduce_no,
otros_mov.cod_sp,
otros_mov.cod_sp_Sec,
pnum_req,
direccion_p,
psec_vend,
xcotizacion,
otros_mov.descrip4,
psec_Vend
IF otros_mov.cod_mov = 44 THEN
IF xtipo_orden <> 'REPOSICION' THEN
CALL fgl_Winmessage(
"INFO",
"LA ORDEN DEBE SER DE REPOSICION",
"INFO")
NEXT FIELD conduce_no
END IF
END IF
END IF
IF opc = "YES" OR opc IS NULL THEN
CALL movi2.clear()
END IF
LET chconduce = 'N'
# ESTA DECICION SE COMENTO EN FECHA 30/1/2026. EL OBJETIVO ES USAR LA PROPIEDAD control_produccion de la
# tabla iptb00005 en lugar de los codigos hardcode
# IF otros_mov.conduce_no IS NOT NULL AND (otros_mov.cod_mov = 70 OR otros_mov.cod_mov = 71 OR
# otros_mov.cod_mov = 72 OR otros_mov.cod_mov = 79) THEN
IF control_produce = 'SI' THEN
DECLARE busca_orden CURSOR FOR
SELECT a.area,
c.nombre_area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
'0',
'0',
a.cantidad,
b.unidad_med,
b.descrip_esp
FROM prtb00013 a, iptb00002 b, prtb00016 c
WHERE a.num_oc = ordenx
AND c.area_num = a.area
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_sec
LET idx = 1
FOREACH busca_orden INTO movi2[idx].*
LET idx = idx + 1
END FOREACH
END IF
IF otros_mov.entrada IS NOT NULL THEN
DECLARE busca_20 CURSOR FOR
SELECT a.area,
c.nombre_area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
'0',
'0',
a.cantidad_2,
b.unidad_med,
b.descrip_esp
FROM iptb00006 a, iptb00002 b, prtb00016 c
WHERE a.conduce_no = ordenx
AND c.area_num = a.area
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_sec
AND a.cod_mov = otros_mov.cod_mov1
AND a.num_doc = otros_mov.entrada
AND a.status_t IS NULL
LET idx = 1
FOREACH busca_20 INTO movi2[idx].*
LET idx = idx + 1
END FOREACH
END IF
LET chconduce = 'N'
IF otros_mov.conduce_no IS NOT NULL
AND (otros_mov.cod_mov = 30
OR otros_mov.cod_mov = 31
OR otros_mov.cod_mov = 55
OR otros_mov.cod_mov = 56) THEN
LET chconduce = 'S'
IF otros_mov.entrada IS NOT NULL THEN
DECLARE busca_entrada CURSOR FOR
SELECT c.area,
d.nombre_area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
c.cantidad_1,
c.cantidad,
c.cantidad * - 1,
b.unidad_med,
b.descrip_esp,
a.codigo_bloque,
c.id_kit
FROM iptb00006 a,
iptb00002 b,
cctb00026 c,
prtb00016 d
WHERE a.conduce_no = ordenx
AND a.status_t IS NULL
AND a.num_Doc = otros_mov.entrada
AND d.area_num = c.area
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_sec
AND a.cod_n = C.cod_n
AND a.cod_grupo = c.cod_grupo
AND a.cod_tipo = c.cod_tipo
AND a.cod_sec = c.cod_sec
AND a.area = c.area
AND c.num_req = pnum_req
LET idx = 1
FOREACH busca_entrada INTO movi2[idx].*
LET idx = idx + 1
END FOREACH
END IF
IF otros_mov.entrada IS NULL THEN
DECLARE busca_orden1 CURSOR FOR
SELECT UNIQUE a.area,
d.nombre_area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
c.cantidad_1,
c.cantidad,
c.cantidad,
b.unidad_med,
b.descrip_esp,
' ',
c.id_kit
FROM prtb00013 a,
iptb00002 b,
cctb00026 c,
prtb00016 d
WHERE a.num_oc = ordenx
AND d.area_num = a.area
AND a.status_t IS NULL
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_sec
AND a.cod_n = C.cod_n
AND a.cod_grupo = c.cod_grupo
AND a.cod_tipo = c.cod_tipo
AND a.cod_sec = c.cod_sec
AND a.area = c.area
AND c.num_req = pnum_req
LET idx = 1
FOREACH busca_orden1 INTO movi2[idx].*
LET idx = idx + 1
END FOREACH
END IF
END IF
IF control_devolucion = "SI" THEN
IF otros_mov.conduce_no IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"DEBES DIGITAR NUMERO DE ORDEN DE PEDIDOS",
"INFO")
NEXT FIELD conduce_no
END IF
IF num_doc_ret IS NULL THEN
IF otros_mov.factura IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"FACTURA ESTA EN BLANCO, FAVOR DE COLOCAR NUMERO DE FACTURA",
"INFO")
NEXT FIELD factura
END IF
LET selec =
"SELECT a.area,'',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,a.cantidad,b.unidad_med,b.descrip_esp
FROM vetb00003 a,iptb00002 b
WHERE (a.factura = ", otros_mov.factura, " 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.status_t IS NULL "
# ELSE
# LET selec = "SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.cantidad,a.cantidad,b.unidad_med,b.descrip_esp
# FROM svtb00008 a,iptb00002 b
# WHERE a.num_doc = ",num_doc_ret," and a.status_t IS NULL and
# (a.cod_n = b.cod_n AND
# a.cod_grupo = b.cod_grupo AND
# a.cod_tipo = b.cod_tipo AND
# a.cod_Sec = b.cod_Sec)"
END IF
PREPARE devoluciones FROM selec
DECLARE busca_dev CURSOR FOR devoluciones
LET idx = 1
FOREACH busca_dev INTO movi2[idx].*
LET idx = idx + 1
END FOREACH
END IF
END IF
END INPUT
INPUT ARRAY movi2 FROM s_movi1.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
LET decide = NULL
LET selec_pt = NULL
LET hacerdocumento = TRUE
# Este BEFORE FIELD estaba en comentario por disposicion de alguien hace algun
# tiempo y ahora no se sabe porque se determino que cuando usted hace una
# devolucion le permita al usuario modificar el codigo del producto
# Hoy 13 de noviembre de 1993 el Ing. de informatica dispuso que
# cuando sea una devolucion a una factura no se permitiera la actualizacion
# del codigo del producto
ON ACTION ordenDisponible ATTRIBUTE(TEXT = "Disponible")
IF movi2[p_act].cod_Sec IS NOT NULL THEN
CALL busca_ordenes_reservadas(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_Sec)
END IF
{ BEFORE ROW
LET p_act = arr_curr()
LET scr_l = scr_line()
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
NEXT FIELD cantidad_1
END IF}
ON ACTION despiece ATTRIBUTE(TEXT = "Despiece")
LET p_act = arr_curr()
LET scr_l = scr_line()
SELECT UNIQUE a.cod_n
FROM iptb00027 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
IF STATUS = NOTFOUND THEN
LET numero_msg = 399
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi2[p_act].area IS NULL THEN
LET movi2[p_act].area = 1
# DISPLAY movi2[p_act].area TO smovi1[scr_l].area
END IF
CALL despiece(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].area)
# CALL adddespiece()
# BUSCA LA EXISTENCIA
LET p_act = arr_curr()
IF status_m = "2" THEN
LET hacerdocumento = TRUE
LET arrcontrol_existencia[p_act] =
p_iptb02.control_existencia
IF p_iptb02.control_existencia = "SI" THEN
CALL existencia(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].cantidad_2,
p_act,
otros_mov.bodega)
RETURNING vexistencia, movi2[p_act].existencia
DISPLAY movi2[p_act].cantidad_2
TO s_movi1[scr_l].cantidad_2
IF vexistencia THEN
CALL fgl_winmessage(
"ERROR", "CANTIDAD EXCEDE EXISTENCIA", "STOP")
NEXT FIELD cod_n
END IF
CALL disponibles(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
TODAY)
RETURNING cantidad_orden1,
pcantidadConduce,
transito,
existencia,
reservado,
valororden
LET cantidad_orden1 = cantidad_orden1 + pcantidadConduce
# LET movi2[p_act].existencia=existencia
# LET existencia=existencia-cantidad_orden1
# LET movi2[p_act].disponible=existencia
DISPLAY movi2[p_act].existencia
TO s_movi1[scr_l].existencia
DISPLAY movi2[p_act].disponible
TO s_movi1[scr_l].disponible
IF movi2[p_act].cantidad_2 > existencia THEN
CALL fgl_winmessage(
"info", "CANTIDAD EXCEDE DISPONIBLE", "INFO")
END IF
END IF
END IF
#================================================================================
# DISPLAY movi2[p_act].cantidad_1 TO smovi1[scr_l].cantidad_1
##NEXT FIELD cantidad_1
NEXT FIELD cod_sec
ON ACTION producto ATTRIBUTE(TEXT = "Producto")
CASE
WHEN INFIELD(cod_n)
CALL busca_prod1()
LET movi2[p_act].cod_n = busca_p.cod_n
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
LET movi2[p_act].cod_sec = busca_p.cod_sec
LET movi2[p_act].descrip_esp = busca_p.descrip_esp
LET movi2[p_act].unidad_med = busca_p.unidad_med
DISPLAY movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].descrip_esp,
movi2[p_act].unidad_med
TO s_movi1[scr_l].cod_n,
s_movi1[scr_l].cod_grupo,
s_movi1[scr_l].cod_tipo,
s_movi1[scr_l].cod_sec,
s_movi1[scr_l].descrip_esp,
s_movi1[scr_l].unidad_med
WHEN INFIELD(cod_grupo)
CALL busca_prod1()
LET movi2[p_act].cod_n = busca_p.cod_n
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
LET movi2[p_act].cod_sec = busca_p.cod_sec
LET movi2[p_act].descrip_esp = busca_p.descrip_esp
LET movi2[p_act].unidad_med = busca_p.unidad_med
DISPLAY movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].descrip_esp,
movi2[p_act].unidad_med
TO s_movi1[scr_l].cod_n,
s_movi1[scr_l].cod_grupo,
s_movi1[scr_l].cod_tipo,
s_movi1[scr_l].cod_sec,
s_movi1[scr_l].descrip_esp,
s_movi1[scr_l].unidad_med
WHEN INFIELD(cod_tipo)
CALL busca_prod1()
LET movi2[p_act].cod_n = busca_p.cod_n
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
LET movi2[p_act].cod_sec = busca_p.cod_sec
LET movi2[p_act].descrip_esp = busca_p.descrip_esp
LET movi2[p_act].unidad_med = busca_p.unidad_med
DISPLAY movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].descrip_esp,
movi2[p_act].unidad_med
TO s_movi1[scr_l].cod_n,
s_movi1[scr_l].cod_grupo,
s_movi1[scr_l].cod_tipo,
s_movi1[scr_l].cod_sec,
s_movi1[scr_l].descrip_esp,
s_movi1[scr_l].unidad_med
WHEN INFIELD(cod_sec)
CALL busca_prod1()
LET movi2[p_act].cod_n = busca_p.cod_n
LET movi2[p_act].cod_grupo = busca_p.cod_grupo
LET movi2[p_act].cod_tipo = busca_p.cod_tipo
LET movi2[p_act].cod_sec = busca_p.cod_sec
LET movi2[p_act].descrip_esp = busca_p.descrip_esp
LET movi2[p_act].unidad_med = busca_p.unidad_med
DISPLAY movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].descrip_esp,
movi2[p_act].unidad_med
TO s_movi1[scr_l].cod_n,
s_movi1[scr_l].cod_grupo,
s_movi1[scr_l].cod_tipo,
s_movi1[scr_l].cod_sec,
s_movi1[scr_l].descrip_esp,
s_movi1[scr_l].unidad_med
END CASE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
AFTER FIELD codigo_bloque
IF LENGTH(movi2[p_act].codigo_bloque) > 2 THEN
SELECT UNIQUE a.codigo_bloque
FROM intb00018 a
WHERE a.codigo_bloque = movi2[p_act].codigo_bloque
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD codigo_bloque
END IF
END IF
AFTER FIELD cod_n
LET p_act = arr_curr()
IF movi2[p_act].cod_n IS NOT NULL THEN
LET ant_art.area = movi2[p_act].area
LET ant_art.cod_n = movi2[p_act].cod_n
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
LET ant_art.cod_sec = movi2[p_act].cod_sec
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi2[idx].area = ant_art.area
AND movi2[idx].cod_n = ant_art.cod_n
AND movi2[idx].cod_grupo = ant_art.cod_grupo
AND movi2[idx].cod_tipo = ant_art.cod_tipo
AND movi2[idx].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END FOR
END IF
AFTER FIELD cod_grupo
LET p_act = arr_curr()
IF movi2[p_act].cod_grupo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET ant_art.area = movi2[p_act].area
LET ant_art.cod_n = movi2[p_act].cod_n
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
LET ant_art.cod_sec = movi2[p_act].cod_sec
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi2[idx].area = ant_art.area
AND movi2[idx].cod_n = ant_art.cod_n
AND movi2[idx].cod_grupo = ant_art.cod_grupo
AND movi2[idx].cod_tipo = ant_art.cod_tipo
AND movi2[idx].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END FOR
AFTER FIELD cod_tipo
LET p_act = arr_curr()
IF movi2[p_act].cod_tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET ant_art.area = movi2[p_act].area
LET ant_art.cod_n = movi2[p_act].cod_n
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
LET ant_art.cod_sec = movi2[p_act].cod_sec
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi2[idx].area = ant_art.area
AND movi2[idx].cod_n = ant_art.cod_n
AND movi2[idx].cod_grupo = ant_art.cod_grupo
AND movi2[idx].cod_tipo = ant_art.cod_tipo
AND movi2[idx].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END FOR
AFTER FIELD cod_sec
LET p_act = arr_curr()
IF movi2[p_act].cod_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi2[p_act].cod_n IS NULL
AND movi2[p_act].cod_sec IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi2[p_act].cod_n IS NOT NULL
AND movi2[p_act].cod_grupo IS NOT NULL
AND movi2[p_act].cod_tipo IS NOT NULL
AND movi2[p_act].cod_sec IS NOT NULL THEN
SELECT a.descrip_esp,
a.unidad_med,
a.control_existencia,
a.exist_min,
a.desglose,
a.es_produccion
INTO p_iptb02.descrip_esp,
p_iptb02.unidad_med,
p_iptb02.control_existencia,
existminima[p_act],
desglose,
xes_produccion
FROM iptb00002 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
# CONTROL PRODUCCION: si el codigo de movimiento tiene
# control_produccion = SI (control_produce), el item digitado
# debe estar marcado como es_produccion en la maestra iptb00002.
# Si no lo esta, se avisa con msg(1686) y se rechaza el item.
IF control_produce = "SI" THEN
IF xes_produccion IS NULL OR xes_produccion = 0 THEN
LET numero_msg = 1686
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
LET arrcontrol_existencia[p_act] =
p_iptb02.control_existencia
SELECT UNIQUE a.factor_conv
INTO factor_conv[p_act]
FROM iptb00001 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(94)
NEXT FIELD cod_n
END IF
LET movi2[p_act].descrip_esp = p_iptb02.descrip_esp CLIPPED
LET movi2[p_act].unidad_med = p_iptb02.unidad_med CLIPPED
DISPLAY movi2[p_act].descrip_esp
TO s_movi1[scr_l].descrip_esp
ATTRIBUTE(CYAN)
DISPLAY movi2[p_act].unidad_med
TO s_movi1[scr_l].unidad_med
ATTRIBUTE(CYAN)
LET ant_art.area = movi2[p_act].area
LET ant_art.cod_n = movi2[p_act].cod_n
LET ant_art.cod_grupo = movi2[p_act].cod_grupo
LET ant_art.cod_tipo = movi2[p_act].cod_tipo
LET ant_art.cod_sec = movi2[p_act].cod_sec
FOR idx = 1 TO arr_count()
IF idx != p_act THEN
IF movi2[idx].area = ant_art.area
AND movi2[idx].cod_n = ant_art.cod_n
AND movi2[idx].cod_grupo = ant_art.cod_grupo
AND movi2[idx].cod_tipo = ant_art.cod_tipo
AND movi2[idx].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END FOR
# CONTROL ITEMS EN LA ORDEN
IF otros_mov.conduce_no IS NOT NULL
AND pcontrol_cliente = "SI" THEN
SELECT UNIQUE a.cod_n
FROM prtb00013 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.num_oc = ordenx
IF STATUS = NOTFOUND THEN
LET numero_msg = 397
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
IF pnum_req IS NOT NULL THEN
# CONTROL ITEM EN LA REQUISICION
LET hacerdocumento = TRUE
SELECT UNIQUE a.cod_n
FROM cctb00026 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.num_oc = otros_mov.conduce_no
AND a.num_req = pnum_req
IF STATUS = NOTFOUND THEN
LET numero_msg = 397
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
# CONTROL DESPIECE
SELECT UNIQUE a.cod_n
FROM iptb00027 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
IF STATUS != NOTFOUND THEN
# IF NOT siDespiece THEN
CALL despiece(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].area)
# CALL adddespiece()
# END IF
DISPLAY movi2[p_act].cantidad_2
TO s_movi1[scr_l].cantidad_2
END IF
LET movi2[p_act].cantidad_p =
cantidad_conduce - cantidad_orden
# CONTROL UBICACION
# Normalizar el area ANTES de capturar la ubicacion.
# El "ON ACTION guardar" defaultea area NULL -> 1, asi que
# si aqui se captura la ubicacion con area NULL, al guardar
# el item queda con area 1 y la ubicacion con area NULL, y
# el filtro NVL(area,0) del JSON no matchea (error 1668).
IF movi2[p_act].area IS NULL THEN
LET movi2[p_act].area = 1
END IF
LET moviD.area = movi2[p_act].area
LET moviD.cod_n = movi2[p_act].cod_n
LET moviD.cod_grupo = movi2[p_act].cod_grupo
LET moviD.cod_tipo = movi2[p_act].cod_tipo
LET moviD.cod_sec = movi2[p_act].cod_sec
LET moviD.id_bodega = otros_mov.bodega
LET moviD.cod_mov = otros_mov.cod_mov
LET moviD.descripcion = movi2[p_act].descrip_esp CLIPPED
LET moviD.factor_conv = factor_conv[p_act]
LET moviD.cantidad1 = movi2[p_act].cantidad_1
LET moviD.cantidad2 = movi2[p_act].cantidad_2
LET scodigo =
movi2[p_act].area USING "<<<",
"-",
movi2[p_act].cod_n USING "<<<<",
"-",
movi2[p_act].cod_grupo USING "<<<<<",
"-",
movi2[p_act].cod_tipo USING "<<<<<<",
"-",
movi2[p_act].cod_sec USING "<<<<<<",
"-"
LET idx = movi10Dest.search("codigo", scodigo)
# CALL movi10Dest.deleteElement(idx)
DISPLAY "antes movi cantidad2: ", moviD.cantidad2
DISPLAY "antes movi cantidad1: ", moviD.cantidad1
CALL insertaUbicacion(
moviD.*, tmpnumero)
RETURNING movi2[p_act].cantidad_1,
movi2[p_act].cantidad_2,
tmpnumero,
movi10
# Si insertaUbicacion no devolvio ninguna fila de ubicacion
# (por ejemplo el usuario salio del dialogo con ESC/int_flag
# en vez de presionar "Guardar"), no se debe continuar como
# si el ITEM tuviera ubicacion. De lo contrario el ITEM queda
# sin registros en movi10Dest y el error 1668 solo aparece
# hasta el "Guardar" final del documento.
IF movi10.getLength() = 0 THEN
LET numero_msg = 1668
CALL msg(numero_msg)
NEXT FIELD cod_sec
END IF
DISPLAY movi2[p_act].cantidad_1 TO s_movi1[scr_l].cantidad_1
DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
CALL eliminaUbicacionesItem(
movi2[p_act].area,
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec)
CALL adicionaArray()
#CONTROL DEVOLUCION
IF control_devolucion = "SI" THEN
SELECT DISTINCT a.area
INTO movi2[p_act].area
FROM vetb00003 a
WHERE a.factura = otros_mov.factura
AND a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.area = movi2[p_act].area
IF STATUS = NOTFOUND THEN
CALL msg(502)
NEXT FIELD area
END IF
DISPLAY movi2[p_act].area
TO s_movi1[scr_l].area
ATTRIBUTE(RED)
IF movi2[p_Act].cantidad_2
> movi2[p_Act].cantidad_p THEN
LET numero_msg = 28
CALL msg(numero_msg)
##NEXT FIELD cantidad_1
NEXT FIELD cod_sec
END IF
DISPLAY movi2[p_Act].cantidad_2
TO s_movi1[scr_l].cantidad_2
END IF
IF desglose = 'S' THEN
# PROCESO DESGLOSE
CALL fotos(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].descrip_esp,
USUARIOS,
TRUE,
movi2[p_act].cantidad_2,
tmpnumero,
otros_mov.cod_mov,
otros_mov.bodega,
status_m)
RETURNING xcantidad2, xcantidad1
LET movi2[p_act].cantidad_1 = xcantidad1
LET movi2[p_act].cantidad_2 = xcantidad2
NEXT FIELD codigo_bloque
END IF
END IF # CONTROL CODIGO EN BLANCO
AFTER ROW
LET p_act = arr_curr()
LET scr_l = scr_line()
IF movi2[p_act].cod_n IS NOT NULL
AND movi2[p_act].cod_grupo IS NOT NULL
AND movi2[p_act].cod_tipo IS NOT NULL
AND movi2[p_act].cod_sec IS NOT NULL THEN
IF arrcontrol_existencia[p_act] = "SI" THEN
EXECUTE bcosto
USING pano,
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec
INTO costoItem
IF STATUS = NOTFOUND OR costoItem = 0 THEN
DISPLAY movi2[p_act].descrip_esp
TO s_movi1[scr_l].descrip_esp
ATTRIBUTE(RED)
LET numero_msg = 1674
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
ELSE
LET costoItem = 0
END IF
END IF
AFTER FIELD cantidad_1
LET p_act = arr_curr()
IF movi2[p_act].cod_n IS NOT NULL
AND movi2[p_act].cod_grupo IS NOT NULL
AND movi2[p_act].cod_tipo IS NOT NULL
AND movi2[p_act].cod_sec IS NOT NULL THEN
IF movi2[p_act].cantidad_1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
##NEXT FIELD cantidad_1
NEXT FIELD cod_sec
END IF
SELECT UNIQUE a.factor_conv
INTO factor_conv[p_act]
FROM iptb00001 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL msg(94)
NEXT FIELD cod_n
END IF
IF movi2[p_act].cantidad_1 < 0 THEN
CALL msg(16)
##NEXT FIELD cantidad_1
NEXT FIELD cod_sec
END IF
LET movi2[p_act].cantidad_2 =
movi2[p_act].cantidad_1 * factor_conv[p_act]
DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
LET p_iptb06.cantidad_2 = 0
# BUSCA LA EXISTENCIA
IF status_m = "2" THEN
LET hacerdocumento = TRUE
IF p_iptb02.control_existencia = "SI" THEN
CALL existencia(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].cantidad_2,
p_act,
otros_mov.bodega)
RETURNING vexistencia, movi2[p_act].existencia
IF vexistencia THEN
CALL fgl_winmessage(
"ERROR",
"CANTIDAD EXCEDE EXISTENCIA",
"STOP")
NEXT FIELD cod_n
END IF
CALL disponibles(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
TODAY)
RETURNING cantidad_orden1,
pcantidadConduce,
transito,
existencia,
reservado,
valororden
LET cantidad_orden1 =
cantidad_orden1 + pcantidadConduce
DISPLAY movi2[p_act].existencia
TO s_movi1[scr_l].existencia
DISPLAY movi2[p_act].disponible
TO s_movi1[scr_l].disponible
IF movi2[p_act].cantidad_2 > existencia THEN
CALL fgl_winmessage(
"info",
"CANTIDAD EXCEDE DISPONIBLE",
"INFO")
END IF
END IF
END IF
#================================================================================
# CONTROL CANTIDAD DESPIECE
LET total_medida = 0
IF otros_mov.cod_mov = 30
OR otros_mov.cod_mov = 31
OR otros_mov.cod_mov = 55
OR otros_mov.cod_mov = 70
OR otros_mov.cod_mov = 71
OR otros_mov.cod_mov = 72 THEN
# CONTROL DESPIECE
SELECT UNIQUE a.cod_n
FROM iptb00027 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
IF STATUS != NOTFOUND THEN
# IF NOT siDespiece THEN
CALL despiece(
movi2[p_act].cod_n,
movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,
movi2[p_act].area)
# CALL adddespiece()
# END IF
LET movi2[p_act].cantidad_2 =
movi2[p_act].cantidad_1
END IF
END IF
DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
LET selec_pt =
selec_pt CLIPPED,
movi2[p_act].descrip_esp,
" CANTIDAD ",
movi2[p_act].cantidad_2,
" ",
movi2[p_act].unidad_med
IF otros_mov.conduce_no IS NOT NULL
AND pcontrol_cliente = "SI" THEN
# CONTROL ORDEN
IF otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 70 THEN
LET cantidad_conduce = 0
SELECT ISNULL(SUM(a.cantidad), 0)
INTO cantidad_conduce
FROM prtb00013 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.num_oc = ordenx
AND a.status_t IS NULL
LET cantidad_recibida = 0
SELECT ISNULL(SUM(a.cantidad_2), 0)
INTO cantidad_recibida
FROM iptb00006 a
WHERE a.cod_n = movi2[p_act].cod_n
AND a.cod_grupo = movi2[p_act].cod_grupo
AND a.cod_tipo = movi2[p_act].cod_tipo
AND a.cod_sec = movi2[p_act].cod_sec
AND a.num_oc = ordenx
AND a.cod_mov IN (20, 70, 72, 71)
AND a.status_t IS NULL
LET hacerdocumento = TRUE
DISPLAY "CANTIDAD CONDUCE: ",
movi2[p_act].cod_sec,
" ",
cantidad_recibida,
" ",
movi2[p_act].cantidad_2,
" ",
cantidad_conduce
IF (cantidad_Recibida + movi2[p_act].cantidad_2)
> cantidad_conduce THEN
LET numero_msg = 46
LET hacerdocumento = FALSE
CALL msg(numero_msg)
##NEXT FIELD cantidad_1
NEXT FIELD cod_sec
END IF
END IF
END IF # CONTROL DEVOLUCION
# CONTROL REQUISICION
{ IF control_devolucion <>"SI" THEN
IF pnum_req IS NOT NULL THEN
IF NOT control_requisicion(movi2[p_act].cantidad_2,movi2[p_act].cod_n,
movi2[p_act].cod_grupo,movi2[p_act].cod_tipo,
movi2[p_act].cod_sec,movi2[p_act].id_kit,factor_conv[p_act])
THEN
CALL fgl_Winmessage("ERROR","CANTIDAD EXCEDE A CANTIDAD EN REQUISICION","INFO")
NEXT FIELD cantidad_1
END IF
END IF
END IF}
#=================================================================================================
LET movi3[p_act].cantidad_2 = movi2[p_act].cantidad_2
END IF
ON ACTION guardar ATTRIBUTE(TEXT = "Guardar", IMAGE = "save")
# RED DE SEGURIDAD (equivalente a un AFTER INPUT): antes de cualquier
# otra validacion, si el movimiento es de produccion (control_produce=SI)
# ningun item puede carecer de es_produccion en la maestra iptb00002.
# Atrapa el caso en que el usuario haya evadido el AFTER FIELD cod_sec.
IF control_produce = "SI" THEN
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].cod_n IS NOT NULL
AND movi2[idx].cod_grupo IS NOT NULL
AND movi2[idx].cod_tipo IS NOT NULL
AND movi2[idx].cod_sec IS NOT NULL THEN
SELECT a.es_produccion
INTO xes_produccion
FROM iptb00002 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.status_t IS NULL
IF xes_produccion IS NULL OR xes_produccion = 0 THEN
LET numero_msg = 1686
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END FOR
END IF
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].area IS NULL THEN
LET movi2[idx].area = 1
END IF
END FOR
# CONTROL ORDEN PEDIDOS EN FECHA 10/02/2026
{IF pcontrol_departamento = "SI" THEN
IF ordenx IS NOT NULL THEN
# BUSCA LA CANTIDAD DE LA ORDEN PARA ESTE ITEM
FOR idx = 1 TO movi2.getLength()
LET cantidad_orden =0
SELECT SUM(a.cantidad) INTO cantidad_orden FROM prtb00013 a
WHERE (a.num_oc = ordenx) AND
(a.cod_n = movi2[idx].cod_n AND
a.cod_grupo = movi2[idx].cod_grupo AND
a.cod_tipo = movi2[idx].cod_tipo AND
a.cod_sec = movi2[idx].cod_sec) # AND
# a.area = movi2[idx].area
#CANTIDAD PRODUCIDA
LET cantidad_recibida=0
SELECT SUM(a.cantidad_2) INTO cantidad_recibida
FROM iptb00006 a,iptb00005 b
WHERE (a.cod_mov = b.cod_mov) AND
b.control_departamento ='SI' AND
(a.num_oc = ordenx) AND
(a.cod_n = movi2[idx].cod_n AND
a.cod_grupo = movi2[idx].cod_grupo AND
a.cod_tipo = movi2[idx].cod_tipo AND
a.cod_sec = movi2[idx].cod_sec) AND
# a.area = movi2[idx].area AND
a.status_t IS NULL
IF cantidad_recibida >= cantidad_orden THEN
CALL msg(46)
NEXT FIELD cod_n
END IF
END FOR
END IF
END IF
} #-------------------------------------------------------------------------------
# CONTROL DESPIECE
FOR idx = 1 TO movi2.getLength()
SELECT UNIQUE a.cod_n
FROM iptb00027 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
IF STATUS != NOTFOUND THEN
IF despiece.getLength() = 1 THEN
CALL msg(398)
NEXT FIELD cod_n
END IF
END IF
END FOR
#---------------------------------------------------------------------------------------------
# CONTROL REQUISICION EN FECHA 10/02/2026
IF control_devolucion <> "SI" THEN
IF pcontrol_despacho = "SI" THEN
IF pnum_req IS NOT NULL THEN
LET hacerdocumento = TRUE
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].cod_n IS NOT NULL THEN
IF NOT control_requisicion(
movi2[idx].cantidad_2,
movi2[idx].cod_n,
movi2[idx].cod_grupo,
movi2[idx].cod_tipo,
movi2[idx].cod_sec,
movi2[idx].id_kit,
factor_conv[idx],
movi2[idx].area) THEN
CALL fgl_Winmessage(
"ERROR",
"CANTIDAD EXCEDE A CANTIDAD EN REQUISICION",
"INFO")
LET hacerdocumento = FALSE
EXIT FOR
END IF
END IF
END FOR
IF NOT hacerdocumento THEN
NEXT FIELD cod_sec
END IF
ELSE
CALL fgl_Winmessage(
"ERROR",
"NUMERO REQUISICION ESTA EN BLANCO",
"INFO")
NEXT FIELD cod_mov
END IF
END IF
END IF
#=================================================================================================
IF control_devolucion = "SI" THEN
IF otros_mov.factura IS NULL OR otros_mov.factura = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD factura
END IF
SELECT UNIQUE a.tipo_cliente,
a.sec_cliente,
a.orden,
b.codigo_dgii
INTO otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.conduce_no,
documento_encabezado.tipoPago
FROM vetb00002 a, vetb00012 b
WHERE factura = otros_mov.factura
AND a.status_t IS NULL
AND a.cond_pago = b.cond_pago
AND CONVERT(CHAR(10), a.fecha_factura, 101)
>=
'01/01/2007'
IF status = NOTFOUND THEN
LET numero_msg = 102
CALL msg(numero_msg)
NEXT FIELD fact_no
END IF
DISPLAY BY NAME otros_mov.conduce_no
# CONTROL `
LET cantidad_factura = 0
LET cantidad_devuelta = 0
SELECT SUM(a.cantidad)
INTO cantidad_factura
FROM vetb00003 a
WHERE a.factura = otros_mov.factura
AND a.status_t IS NULL
AND a.fech_crea > '2009-01-01 08:00'
SELECT SUM(a.cantidad_2)
INTO cantidad_devuelta
FROM iptb00006 a
WHERE a.factura = otros_mov.factura
AND a.status_t IS NULL
AND a.fech_crea > '2009-01-01 08:00'
AND a.cod_mov IN (12, 13)
IF cantidad_devuelta + .05 > cantidad_factura THEN
LET numero_msg = 238
CALL msg(numero_msg)
NEXT FIELD factura
END IF
END IF
IF pcontrol_cliente = "SI" THEN
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].cod_sec IS NOT NULL THEN
#CONTROL DEVOLUCION
IF control_devolucion = "SI" THEN
SELECT DISTINCT a.area
INTO movi2[idx].area
FROM vetb00003 a
WHERE a.factura = otros_mov.factura
AND a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.area = movi2[idx].area
IF STATUS = NOTFOUND THEN
CALL msg(502)
DISPLAY movi2[idx].area
TO s_movi1[idx].area
ATTRIBUTE(RED)
NEXT FIELD area
END IF
DISPLAY movi2[idx].area
TO s_movi1[idx].area
ATTRIBUTE(RED)
IF movi2[idx].cantidad_2
> movi2[idx].cantidad_p THEN
CALL msg(28)
NEXT FIELD cod_sec
END IF
DISPLAY movi2[idx].cantidad_2
TO s_movi1[idx].cantidad_2
END IF
#------------------------------------------------------------------------------------------
IF movi2[idx].area IS NULL THEN
CALL msg(16)
NEXT FIELD area
END IF
END IF
END FOR
END IF
#----------------------- CONTROL EXISTENCIAS ----------------------------------------
IF status_m = "2" THEN
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].cod_sec IS NOT NULL THEN
SELECT a.descrip_esp,
a.unidad_med,
a.control_existencia
INTO p_iptb02.descrip_esp,
p_iptb02.unidad_med,
p_iptb02.control_existencia
FROM iptb00002 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.status_t IS NULL
IF p_iptb02.control_existencia = "SI" THEN
LET vexistencia = FALSE
DISPLAY movi2[idx].cantidad_2
TO s_movi1[scr_l].cantidad_2
END IF
END IF
END FOR
END IF
#--------------------------------------------------------------------------------------------------------
LET hacerdocumento = TRUE
LET opc = "NO"
LET opc =
fgl_winquestion(
"INFORMACION",
"Toda la Informacion Esta Correcta?",
"YES",
"YES|NO",
"QUESTION",
0)
IF OPC = "YES" THEN
LET pano = YEAR(otros_mov.fecha)
ERROR "BUSCANDO SECUENCIA DOCS...."
# Actualiza tabla control ultimo documento
BEGIN WORK
# Serializa la obtencion del numero de documento para evitar
# duplicados bajo concurrencia (con RCSI activado los lectores
# ya no toman lock compartido). UPDLOCK + HOLDLOCK hace que un
# segundo usuario espere el COMMIT del primero antes de leer,
# de modo que dos usuarios nunca lean el mismo numero base.
IF NOT prep_seq_docs THEN
LET l_sql_seq =
"SELECT num_doc FROM iptb00007 WITH (UPDLOCK, HOLDLOCK)",
" WHERE cod_mov = ? AND bodega = ?"
PREPARE p_seq_docs FROM l_sql_seq
LET prep_seq_docs = TRUE
END IF
EXECUTE p_seq_docs
USING otros_mov.cod_mov, otros_mov.bodega
INTO otros_mov.num_doc
IF status = NOTFOUND THEN
LET otros_mov.num_doc = 0
INSERT INTO iptb00007
VALUES(1,
otros_mov.cod_mov,
NULL,
usuarios,
getdate(),
NULL,
NULL,
otros_mov.bodega)
END IF
LET otros_mov.num_doc = otros_mov.num_doc + 1
LET cuerpo_correo = "<table>"
LET idxJSON = 0
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].cod_n IS NOT NULL
AND movi2[idx].cod_grupo IS NOT NULL
AND movi2[idx].cod_tipo IS NOT NULL
AND movi2[idx].cod_sec IS NOT NULL THEN
# BUSCA NUEVAMENTE EL FACTOR DE CONVERSION
SELECT UNIQUE a.factor_conv
INTO factor_conv[idx]
FROM iptb00001 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
CALL msg(94)
NEXT FIELD cod_n
END IF
# BUSCA NUEVAMENTE EL CONTROL DE EXISTENCIA (fresco por idx).
# arrcontrol_existencia se llenaba por p_act solo en el input interactivo;
# los items cargados desde requisicion/conduce no pasan por ahi y el arreglo
# quedaba stale/vacio -> la app se saltaba la busqueda de costo y mandaba
# costoItem = 0 -> el SP devolvia 1674 aunque el item si tuviera costo.
SELECT a.control_existencia
INTO arrcontrol_existencia[idx]
FROM iptb00002 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
IF movi2[idx].cantidad_1 < 0 THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD cod_sec
END IF
LET movi2[idx].cantidad_2 =
movi2[idx].cantidad_1 * factor_conv[idx]
IF movi2[idx].cantidad_2 IS NULL
OR movi2[idx].cantidad_2 = 0 THEN
ROLLBACK WORK
CALL msg(16)
DISPLAY "estoy en cantidad_2 is null and 0"
NEXT FIELD cod_sec
END IF
IF movi2[idx].cantidad_2 = 0 THEN
ROLLBACK WORK
CALL msg(16)
DISPLAY "estoy en cantidad_2 =0"
NEXT FIELD cod_sec
END IF
IF movi2[idx].cantidad_2 IS NOT NULL
OR movi2[idx].cantidad_2 > 0 THEN
IF movi2[idx].cantidad_1 = 0 THEN
ROLLBACK WORK
CALL msg(16)
DISPLAY "estoy en cantidad_1 es cero"
NEXT FIELD cod_sec
END IF
END IF
IF pcontrol_despacho = "SI" THEN
SELECT UNIQUE a.cod_mov
FROM vetb00060 a
WHERE a.tipo_cliente = otros_mov.cod_sp
AND a.cod_mov = otros_mov.cod_mov
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
LET numero_msg = 386
CALL msg(numero_msg)
NEXT FIELD cod_Sec
END IF
END IF
IF ordenx IS NULL OR ordenx = 0 THEN
LET ordenx = otros_mov.conduce_no
END IF
IF arrcontrol_existencia[idx] = "SI" THEN
EXECUTE bcosto
USING pano,
movi2[idx].cod_n,
movi2[idx].cod_grupo,
movi2[idx].cod_tipo,
movi2[idx].cod_sec
INTO costoItem
IF STATUS = NOTFOUND OR costoItem = 0 THEN
ROLLBACK WORK
LET scr_l = scr_line()
DISPLAY movi2[idx].descrip_esp
TO s_movi1[scr_l].descrip_esp
ATTRIBUTE(RED)
LET numero_msg = 1674
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
ELSE
LET costoItem = 0
END IF
# Normalizar una sola vez el movimiento principal
IF status_m = 2 THEN
IF movi2[idx].cantidad_2 > 0 THEN
LET movi2[idx].cantidad_2 =
movi2[idx].cantidad_2 * -1
END IF
ELSE
IF status_m = 1 THEN
IF movi2[idx].cantidad_2 < 0 THEN
LET movi2[idx].cantidad_2 =
movi2[idx].cantidad_2 * -1
END IF
END IF
END IF
CALL movi10Dest_JSON.clear()
INITIALIZE jsonMovi TO NULL
LET idxJSON = 0
FOR idxUbic = 1 TO movi10Dest.getLength()
DISPLAY "COMPARANDO: ",
movi10Dest[idxUbic].cod_n,
"-",
movi10Dest[idxUbic].cod_grupo,
"-",
movi10Dest[idxUbic].cod_tipo,
"-",
movi10Dest[idxUbic].cod_sec,
" AREA UBIC: ",
movi10Dest[idxUbic].area,
" AREA ITEM: ",
movi2[idx].area
IF movi10Dest[idxUbic].cod_n = movi2[idx].cod_n
AND movi10Dest[idxUbic].cod_grupo
= movi2[idx].cod_grupo
AND movi10Dest[idxUbic].cod_tipo
= movi2[idx].cod_tipo
AND movi10Dest[idxUbic].cod_sec
= movi2[idx].cod_sec
AND NVL(movi10Dest[idxUbic].area, 0)
= NVL(movi2[idx].area, 0) THEN
LET idxJSON = idxJSON + 1
LET movi10Dest_JSON[idxJSON].area =
movi10Dest[idxUbic].area
LET movi10Dest_JSON[idxJSON].cod_n =
movi10Dest[idxUbic].cod_n
LET movi10Dest_JSON[idxJSON].cod_grupo =
movi10Dest[idxUbic].cod_grupo
LET movi10Dest_JSON[idxJSON].cod_tipo =
movi10Dest[idxUbic].cod_tipo
LET movi10Dest_JSON[idxJSON].cod_sec =
movi10Dest[idxUbic].cod_sec
LET movi10Dest_JSON[idxJSON].id_bodega =
movi10Dest[idxUbic].id_bodega
LET movi10Dest_JSON[idxJSON].id_seccion1 =
movi10Dest[idxUbic].id_seccion1
LET movi10Dest_JSON[idxJSON].id_tramo1 =
movi10Dest[idxUbic].id_tramo1
LET movi10Dest_JSON[idxJSON].id_fila =
movi10Dest[idxUbic].id_fila
LET movi10Dest_JSON[idxJSON].id_pos =
movi10Dest[idxUbic].id_pos
LET movi10Dest_JSON[idxJSON].cantidad1 =
movi10Dest[idxUbic].cantidad1
LET movi10Dest_JSON[idxJSON].cantidad2 =
movi10Dest[idxUbic].cantidad2
IF status_m = 2 THEN
IF movi10Dest_JSON[idxJSON].cantidad2
> 0 THEN
LET movi10Dest_JSON[idxJSON]
.cantidad2 =
movi10Dest_JSON[idxJSON]
.cantidad2
* -1
END IF
ELSE
IF status_m = 1 THEN
IF movi10Dest_JSON[idxJSON]
.cantidad2
< 0 THEN
LET movi10Dest_JSON[idxJSON]
.cantidad2 =
movi10Dest_JSON[idxJSON]
.cantidad2
* -1
END IF
END IF
END IF
END IF
END FOR
IF idxJSON = 0 THEN
DISPLAY "SIN UBICACION PARA ITEM: ",
movi2[idx].cod_n,
"-",
movi2[idx].cod_grupo,
"-",
movi2[idx].cod_tipo,
"-",
movi2[idx].cod_sec,
" AREA: ",
movi2[idx].area
ROLLBACK WORK
LET numero_msg = 1668
CALL msg(numero_msg)
NEXT FIELD cod_sec
END IF
LET jsonMovi = util.JSON.stringify(movi10Dest_JSON)
DISPLAY "JSON FINAL: ", jsonMovi
INITIALIZE out_result TO NULL
LET procedimiento =
"EXEC sp_insert_inventario ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?"
PREPARE smt FROM procedimiento
EXECUTE smt
USING ordenx IN,
--idx IN,
movi2[idx].cod_n IN,
movi2[idx].cod_grupo IN,
movi2[idx].cod_tipo IN,
movi2[idx].cod_sec IN,
movi2[idx].area IN,
movi2[idx].cantidad_1 IN,
movi2[idx].cantidad_2 IN,
otros_mov.cod_mov IN,
otros_mov.num_doc IN,
tmpnumero IN,
otros_mov.entrada IN,
otros_mov.fecha IN,
otros_mov.conduce_no IN,
otros_mov.cod_sp IN,
otros_mov.cod_sp_sec IN,
otros_mov.cod_transp IN,
otros_mov.sec_transp IN,
otros_mov.placa IN,
otros_mov.detalle IN,
otros_mov.bodega IN,
pcerrada IN,
usuarios IN,
pnum_req IN,
movi2[idx].codigo_bloque IN,
psec_vend IN,
direccion_p IN,
otros_mov.bodega_destino IN,
num_doc_ret IN,
aplica_dev IN,
otros_mov.departamento IN,
pcontrol_departamento IN,
otros_mov.factura IN,
pnumero_doc IN,
costoItem IN,
pcodmov_transferencia
IN, #CODMOV TRANSFERENCIA
p_num_doc_transferencia
IN, # NUMERO TRANSFERENCIA
otros_mov.bodega IN, #BODEGA TRANSFERENCIA
jsonMovi IN,
out_result OUT,
cod_mensaje OUT,
out_cantidad_item OUT,
out_cantidad_ubicacion OUT,
out_msg OUT
IF out_result <> 0 THEN
DISPLAY "============================================"
DISPLAY "ERROR sp_insert_inventario"
DISPLAY "ITEM: ",
movi2[idx].cod_n,
"-",
movi2[idx].cod_grupo,
"-",
movi2[idx].cod_tipo,
"-",
movi2[idx].cod_sec
DISPLAY "DOCUMENTO: ", otros_mov.num_doc
DISPLAY "MOVIMIENTO: ", otros_mov.cod_mov
DISPLAY "BODEGA: ", otros_mov.bodega
DISPLAY "AREA: ", movi2[idx].area
DISPLAY "OUT_RESULT: ", out_result
DISPLAY "COD_MENSAJE: ", cod_mensaje
DISPLAY "OUT_MSG: ", out_msg
DISPLAY "CANTIDAD1: ", out_cantidad_item
DISPLAY "CANTIDAD2: ", out_cantidad_ubicacion
DISPLAY "JSON: ", jsonMovi
DISPLAY "============================================"
ROLLBACK WORK
IF out_msg IS NOT NULL THEN
ERROR out_msg
ELSE
LET numero_msg = cod_mensaje
CALL msg(numero_msg)
END IF
NEXT FIELD cod_n
END IF
# CUERPO TRANSFERENCIA
IF pcontrol_transferencia = "SI" THEN
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<tr><td>",
movi2[idx].descrip_esp CLIPPED,
"</td>",
"<td>",
movi2[idx].cantidad_2 USING "##,###.##",
"</td>",
"</tr>"
END IF
# ACTUALIZA LISTA PARA DESPACHO EN STATUS_PRODUCCION
IF pcontrol_departamento = "SI" THEN
# BUSCA LA CANTIDAD DE LA ORDEN PARA ESTE ITEM
LET cantidad_orden = 0
SELECT SUM(a.cantidad)
INTO cantidad_orden
FROM prtb00013 a
WHERE (a.num_oc = ordenx)
AND (a.cod_n = movi2[idx].cod_n
AND a.cod_grupo
=
movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec)
#CANTIDAD PRODUCIDA
LET cantidad_recibida = 0
SELECT SUM(a.cantidad_2)
INTO cantidad_recibida
FROM iptb00006 a, iptb00005 b
WHERE (a.cod_mov = b.cod_mov)
AND b.control_departamento = 'SI'
AND (a.num_oc = ordenx)
AND (a.cod_n = movi2[idx].cod_n
AND a.cod_grupo
=
movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec)
AND a.status_t IS NULL
IF cantidad_recibida >= cantidad_orden THEN
LET chconduce = 'S'
LET estadoordenes = NULL
LET cuerpo_correo =
'ORDEN: ',
ordenx USING "&&&&&&",
'LISTA PARA DESPACHO PARA EL MATERIAL ',
movi2[idx].descrip_esp CLIPPED,
' ',
movi2[idx].unidad_med,
' ',
movi2[idx].cantidad_2
USING "<<<,<<<.####",
'; '
LET estadoordenes =
'CON EL DOCUMENTO ',
otros_mov.num_doc USING "<<<<<<",
" FUE ACTUALIZADA LA ORDEN ",
ordenx USING "<<<<<<",
" LISTA PARA DESPACHO "
ELSE
LET chconduce = 'S'
LET cuerpo_correo =
'ORDEN: ',
ordenx USING "&&&&&&",
'PRODUCCION PARCIAL PARA EL MATERIAL ',
movi2[idx].descrip_esp CLIPPED,
' ',
movi2[idx].unidad_med,
' ',
movi2[idx].cantidad_2
USING "<<<,<<<.####",
'; '
END IF
END IF
IF chconduce = 'S' OR control_devolucion = 'SI' THEN
LET cuerpo_correo =
cuerpo_correo CLIPPED,
' ',
movi2[idx].descrip_esp CLIPPED,
' ',
movi2[idx].unidad_med,
' ',
movi2[idx].cantidad_2 USING "<<<,<<<.####",
'; '
END IF
END IF { if de cantidad_2 no NULL }
# END IF {if cod_n cod_tipo ........ is not null }
END FOR
INITIALIZE numero_msg TO NULL
# CALL addUbicacion() RETURNING numero_msg
IF numero_msg IS NOT NULL AND numero_msg <> 0 THEN
ROLLBACK WORK
DISPLAY "ROLLBACK: ERROR AL REGISTRAR UBICACIONES"
CALL msg(numero_msg)
NEXT FIELD cod_sec
END IF
#-----------------------------------------------------------------------------------------
#DESPIECE
IF despiece.getLength() > 0 THEN
FOR idx = 1 TO despiece.getLength()
INSERT INTO iptb00025(
id_etiqueta,
cod_mov,
num_doc,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
lado_1,
lado_2,
lado_3,
cantidad,
medida,
us_crea,
fech_crea,
bodega)
VALUES(despiece[idx].id_etiqueta,
otros_mov.cod_mov,
otros_mov.num_doc,
despiece[idx].cod_n,
despiece[idx].cod_grupo,
despiece[idx].cod_tipo,
despiece[idx].cod_sec,
despiece[idx].lado_1,
despiece[idx].lado_2,
despiece[idx].lado_3,
despiece[idx].cantidad,
despiece[idx].medida,
usuarios,
GETDATE(),
otros_mov.bodega)
END FOR
END IF
# CALL autoFacturacion(datos.*,usuarios)
DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero
# ELIMINA DE LA TABLA TEMPORAL EL DOCUMENTO CON RELACION AL DESGLOSE
DELETE FROM tmpdesglose_master
WHERE num_Doc = tmpnumero
AND cod_mov = otros_mov.cod_mov
AND us_crea = usuarios
DELETE FROM tmpdesglose
WHERE num_Doc = tmpnumero
AND cod_mov = otros_mov.cod_mov
AND us_crea = usuarios
#ACTUALIZA LA REQUISICION TRANSACCIONES
IF pnumero_Doc > 0 THEN
IF actualizareqtrx(pnumero_doc) THEN
UPDATE iptb00057
SET estado = 'CERRADA',
us_mod = usuarios,
fech_mod = getdate()
WHERE numero_doc = pnumero_doc
END IF
END IF
# ENVIO AVISO EXISTENCIA MINIMA
CALL existenciaMinima()
# ACTUALIZA EL ESTADO DE LA REQUISICION DESPACHO
SELECT ISNULL(SUM(a.cantidad), 0)
INTO cantidadRequisicion
FROM cctb00026 a
WHERE (a.num_req = pnum_req) AND a.status_t IS NULL
SELECT ISNULL(SUM(a.cantidad_2 * - 1), 0)
INTO rcantidad_requisicion
FROM iptb00006 a
WHERE (a.num_req = pnum_req) AND a.status_t IS NULL
LET diferencia = cantidadRequisicion - rcantidad_Requisicion
IF diferencia < .05 THEN
UPDATE cctb00025
SET estado_despacho = 'DESPACHADA',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_req = pnum_req
ELSE
UPDATE cctb00025
SET estado_despacho = 'DESPACHO PARCIAL',
us_mod = usuarios,
fech_mod = getdate()
WHERE (num_req = pnum_req)
END IF
# CIERRE ORDENES
LET diferencia = 0
SELECT ISNULL(SUM(cantidad), 0)
INTO cantidad_orden
FROM prtb00013 a
WHERE (a.num_oc = ordenx)
SELECT ISNULL(SUM(cantidad_2 * - 1), 0)
INTO cantidad_conduce
FROM iptb00006 a
WHERE (a.num_oc = ordenx)
AND (a.cod_mov IN (12, 13, 30, 31, 55))
AND CONVERT(CHAR(10), a.fecha, 101) > "01/01/2007"
AND a.status_t IS NULL
LET diferencia = cantidad_orden - cantidad_conduce
IF diferencia < 0 THEN
LET diferencia = diferencia * -1
END IF
IF diferencia IS NULL THEN
LET diferencia = 0
END IF
IF diferencia < .05 THEN
IF status_m <> 1 THEN
TRY
UPDATE prtb00012
SET cerrada = "S",
estado_despacho = 'DESPACHADA',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_oc = ordenx
# ACTUALIZA EL ESTADO DE LA REQUISICION DESPACHO
UPDATE cctb00025
SET estado_despacho = 'DESPACHADA',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_req = pnum_req
CATCH
# ROLLBACK WORK
LET numero_msg = 1663
DISPLAY "ROLLBACK actualizar estado prtb12"
CALL msg(numero_msg)
NEXT FIELD cod_n
END TRY
END IF
END IF
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
UPDATE cctb00025
SET estado_despacho = 'DESPACHO PARCIAL',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_req = pnum_req AND status_t IS NULL
IF cantidad_devuelta > cantidad_orden THEN
UPDATE prtb00012
SET estado_devolucion = 'DEVOLUCION COMPLETA',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_oc = otros_mov.conduce_no
ELSE
UPDATE prtb00012
SET estado_devolucion = 'DEVOLUCION PARCIAL',
cerrada = 'N',
us_mod = usuarios,
fech_mod = getdate()
WHERE num_oc = otros_mov.conduce_no
END IF
END IF
SELECT a.descrip_mov
INTO pdescripmov
FROM iptb00005 a
WHERE a.cod_mov = otros_mov.cod_mov
#-> Actualiza la tabla de monitoreo de las ordenes de corte vg. Saturday, 03 March, 2001 10:51:42 AM
IF otros_mov.conduce_no IS NOT NULL THEN
LET prtb09.detalle =
pdescripmov CLIPPED,
" CON EL NUMERO DE DOCUMENTO: ",
otros_mov.num_doc USING "<<<<<<<",
" DE FECHA : ",
otros_mov.fecha USING "dd/mm/yyyy"
INSERT INTO prtb00009
VALUES(ordenx,
otros_mov.fecha,
NULL,
"S",
prtb09.detalle,
NULL,
usuarios,
getdate(),
NULL,
NULL)
END IF
COMMIT WORK
# INSERTA EN LA OTRA DB
IF control_devolucion = "SI" THEN
CALL insertaData()
END IF
# PROCEDIMIENTO ENVIO CORREO
IF chconduce = 'S'
OR pcontrol_departamento = "SI"
OR pcontrol_transferencia = "SI" THEN
LET TOEmail = NULL
IF psec_vend IS NOT NULL THEN
SELECT UNIQUE a.email
INTO TOEmail
FROM seg0000 a
WHERE a.sec_vend = psec_vend
END IF
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
LET subject =
'DOCUMENTO ',
otros_mov.num_doc USING "&&&&&&&&",
" CODIGO MOV ",
otros_mov.cod_mov USING "&&&",
" ",
pdescripmov CLIPPED,
"ORDEN: ",
ordenx USING "<<<<<<<"
IF TOEmail IS NULL THEN
LET TOEmail = "notificacion@marmotech.com.do"
ELSE
LET toemail = toemail CLIPPED
END IF
DECLARE buscaCorreos CURSOR FOR
SELECT DISTINCT a.correo
FROM seg0003 a
WHERE a.controldespacho = 'SI'
LET ccemail = NULL
FOREACH buscacorreos INTO PCCEMAIL
LET CCEmail = Pccemail CLIPPED, ',', CCEmail
END FOREACH
# LET toemail = 'jsoto@marmotech.com.do'
# LET ccemail = 'jsoto@marmotech.com.do'
IF ccemail IS NULL THEN
LET ccemail = 'notificacion@marmotech.com.do'
END IF
IF subject IS NULL THEN
LET subject =
'DOCUMENTO ',
otros_mov.num_doc USING "&&&&&&&&",
" CODIGO MOV ",
otros_mov.cod_mov USING "&&&"
END IF
IF TOemail IS NULL THEN
LET TOemail = "notificacion@marmotech.com.do"
END IF
IF pcontrol_transferencia = 'NO' THEN
LET cuerpo_correo =
'CLIENTE: ',
otros_mov.descrip4 CLIPPED,
", ",
otros_mov.detalle CLIPPED
END IF
LET cuerpo_correo = cuerpo_correo CLIPPED, "</table>"
DISPLAY "ccmail ", ccemail, " to ", Toemail
LET TOemail = toemail CLIPPED, ",", ccemail CLIPPED
LET buf = base.StringBuffer.create()
CALL buf.append(TOemail)
CALL buf.replace(',', ' ', 1)
LET TOemail = buf.toString()
# CALL envia_correo(TOemail,CCEmail,cuerpo_correo,
# subject, procedimiento )
END IF
LET opt2 =
fgl_winquestion(
"IMPRESION",
"Desea Imprimir Formulario Ahora?",
"YES",
"YES|NO",
"QUESTION",
0)
IF opt2 = "YES" THEN
CALL defecto(
usuarios, clave, impresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
{ IF usuarios = 'mabad' THEN
IF salida IS NULL THEN
LET salida = 'PDF'
END IF
CALL configureoutput(salida) RETURNING HANDLER
START REPORT formu4 TO XML HANDLER HANDLER
ELSE }
START REPORT formu4 TO archivo
-- END IF
LET ya = NULL
FOR idx = 1 TO arr_count()
IF movi2[idx].cod_sec IS NOT NULL THEN
OUTPUT TO REPORT formu4(
otros_mov.*, movi2[idx].*)
END IF
END FOR
FINISH REPORT formu4
-- IF usuarios <> 'mabad' THEN
RUN imprime
-- END IF
END IF
SET CONNECTION "SQL_C"
IF ordenx > 0 THEN
IF Toemail IS NOT NULL THEN
LET xusername = 'notificacion@marmotech.com.do'
LET xsmtphost = 'smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Lmmjvsd2020'
IF LENGTH(Toemail) > 2 THEN
CALL enviaemail(
Toemail,
subject,
cuerpo_correo,
NULL,
xusername,
xsmtphost,
xsmtpport,
xpassword)
# RETURNING retorne
# LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
END IF
END IF
END IF
END IF
LET numero_msg = 1
CALL msg(numero_msg)
CALL movi2.clear()
CALL movi10Dest.clear()
CALL despiece.clear()
CALL despiecedest.clear()
END INPUT
ON ACTION recibir
ATTRIBUTE(TEXT = "Recepcion Mercancia", IMAGE = "fa-ship")
CALL piking(usuarios, clave, impresor, otros_mov.bodega, psucid)
ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancel", IMAGE = "quit")
LET INT_FLAG = FALSE
CALL msg(2)
DELETE FROM tmpdesglose_master
WHERE num_Doc = tmpnumero
AND cod_mov = otros_mov.cod_mov
AND us_crea = usuarios
DELETE FROM tmpdesglose
WHERE num_Doc = tmpnumero
AND cod_mov = otros_mov.cod_mov
AND us_crea = usuarios
EXIT PROGRAM
END DIALOG
END FUNCTION
REPORT formu4(x, z)
DEFINE x RECORD
num_doc LIKE iptb00006.num_doc,
cod_cia LIKE iptb00006.cod_cia,
cod_mov LIKE iptb00006.cod_mov,
fact_no LIKE iptb00006.fact_no,
cod_transp LIKE iptb00006.cod_transp,
sec_transp LIKE iptb00006.sec_transp,
cod_tarifa LIKE iptb00006.cod_tarifa,
placa LIKE iptb00006.placa,
fecha LIKE iptb00006.fecha,
conduce_no LIKE iptb00006.conduce_no,
descrip_mov CHAR(80),
bodega LIKE iptb00006.bodega,
bodega_destino SMALLINT,
detalle VARCHAR(100),
cod_sp LIKE iptb00006.cod_sp,
cod_sp_sec LIKE iptb00006.cod_sp_sec,
departamento SMALLINT,
nombre_depto CHAR(30),
cod_mov1 SMALLINT,
entrada INT,
descrip_mov1 CHAR(40),
descrip4 CHAR(30),
factura INT
END RECORD
DEFINE
z RECORD
area SMALLINT,
descripcion_area VARCHAR(30),
cod_n LIKE intb00003.cod_n,
cod_grupo LIKE intb00003.cod_grupo,
cod_tipo LIKE intb00003.cod_tipo,
cod_sec LIKE intb00003.cod_sec,
cantidad_1 DEC(12, 5),
cantidad_2 DEC(12, 5),
cantidad_p DEC(12, 5),
unidad_med LIKE iptb00002.unidad_med,
descrip_esp CHAR(80),
existencia DEC(12, 5),
disponible DEC(12, 5),
codigo_bloque CHAR(15),
id_kit INT
END RECORD,
etiqueta, ptelefono, ptelefono1, pcelular, nombre, apellido CHAR(30),
plado1, plado2, plado3, pcantidad, pmedida DEC(12, 5),
pprovincia SMALLINT,
nombre_provincia CHAR(30),
nombre_p CHAR(70),
total_unidades INT,
hora CHAR(5),
pubica CHAR(60),
porden_cliente VARCHAR(25),
i INT
DEFINE kdatos DYNAMIC ARRAY OF RECORD
lado_2 DEC(8, 5),
lado_1 DEC(8, 5),
lado_3 DEC(8, 5),
cantidad FLOAT,
cantidad2 FLOAT,
tono VARCHAR(100),
calidad VARCHAR(100),
xobservacion VARCHAR(200),
id_producto CHAR(25),
seccion INT,
tramo INT
END RECORD
DEFINE usuario_c CHAR(9)
DEFINE signo CHAR(1)
DEFINE doce, normal, doble, doble_of, negras, negras_off CHAR(2)
DEFINE
l, cuenta SMALLINT,
darea VARCHAR(40)
OUTPUT
LEFT MARGIN 0
ORDER BY x.num_doc, z.area, z.cod_sec
FORMAT
BEFORE GROUP OF x.num_doc
LET doble = ASCII 14
LET doble_of = ASCII 20
LET negras = ASCII 27, ASCII 69
LET negras_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
SELECT UNIQUE us_crea
INTO usuario_c
FROM iptb00006
WHERE num_doc = x.num_doc
AND cod_mov = x.cod_mov
AND us_crea = user
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET hora = TIME
PRINT doce
#PRINT COLUMN 1, negras,doble,p_companias.nombre CLIPPED
IF x.cod_sp <> 19 AND x.cod_sp <> 18 THEN
PRINT COLUMN 1, doble, "M A R M O T E C H, S. A.", doble_of
END IF
PRINT COLUMN 71, "No. ", doble, x.num_doc USING "<<<<<<"
#LET l = (80 - LENGTH ("OTROS MOVIMIENTOS")) / 2
PRINT #COLUMN l, "OTROS MOVIMIENTOS",
COLUMN 71, x.fecha USING "dd/mm/yyyy"
PRINT COLUMN 71, hora
LET l = (70 - LENGTH(x.descrip_mov)) / 2
PRINT COLUMN l - 2,
doble,
negras,
"(",
x.cod_mov USING "&&",
") ",
x.descrip_mov,
doble_of
PRINT negras_off
IF x.cod_mov = 12 THEN
PRINT COLUMN 1, "Factura Venta: ", x.factura USING "&&&&&&"
END IF
IF x.detalle IS NULL THEN
LET x.detalle = "**************************************"
END IF
{ COMENTARIO DE ESTAS DIRECCIONES PORQUE SOLO SE VA A TOMAR LA DIRECCION DEL PROYECTO
QUE ASU VEZ VIENE EN EL MENSAJE DE LA REQUISICION
SELECT a.calle,a.casa_num,a.urbanizacion,b.telefono,b.telex,c.nom1_emp,c.apell1_emp,b.cod_provincia
INTO pcalle,pcasa_num,purbanizacion,ptelefono,pcelular,nombre,apellido,pprovincia
FROM vetb00005 a,vetb00004 b,vetb00028 d,adtb00003 c
WHERE a.tipo_cliente = x.cod_sp AND
a.sec_cliente = x.cod_sp_sec AND
a.tipo_cliente = d.tipo_cliente AND
a.sec_cliente = d.sec_cliente AND
a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND
d.sec_vend = c.num_emp
SELECT a.nombre_proyecto,a.direccion_proyecto INTO nombre_p,direccion_p
FROM vetb00050 a
WHERE a.tipo_cliente = x.cod_sp AND
a.sec_cliente = x.cod_sp_Sec AND
a.cotizacion_no = xcotizacion
}
LET pcelular = NULL
LET ptelefono = NULL
LET ptelefono1 = NULL
LET nombre_p = NULL
LET nombre = NULL
SELECT a.nom1_emp + ' ' + a.apell1_emp
INTO nombre
FROM adtb00003 a
WHERE a.num_emp = psec_vend
SELECT a.nombre_proyecto, a.telefono_r, a.telefono_o, a.celular1
INTO nombre_p, ptelefono, ptelefono1, pcelular
FROM vetb00050 a
WHERE a.cotizacion_no = xcotizacion
LET nombre_provincia = NULL
IF x.cod_mov = 30 OR x.cod_mov = 31 THEN
SELECT a.nombre_provincia
INTO nombre_provincia
FROM vetb00020 a
WHERE a.cod_provincia = pprovincia
END IF
IF x.cod_mov = 55 THEN
SELECT UNIQUE a.nom_pais
INTO nombre_provincia
FROM cotb00018 a
WHERE a.cod_pais = pprovincia
END IF
SELECT a.direccion, a.nombre_file
INTO pubica, porden_cliente
FROM prtb00012 a
WHERE a.num_oc = x.conduce_no
AND CONVERT(CHAR(10), a.fech_crea, 103) > "01/01/2007"
# SELECT a.observacion INTO pobserva FROM prtb00014 a
# WHERE a.num_oc = x.conduce_no AND a.fech_crea > datetime (2007-01-01 08:00) year to minute
# BUSCA BODEGAS
SELECT a.descripcion
INTO almacen_origen
FROM intb00009 a
WHERE a.cod_bodega = x.bodega
SELECT a.descripcion
INTO almacen_destino
FROM intb00009 a
WHERE a.cod_bodega = x.bodega_destino
PRINT COLUMN 1,
"ALMACEN : ",
"(",
x.bodega USING "<<<",
")",
almacen_origen
PRINT COLUMN 1,
"ALMACEN DESTINO : ",
"(",
x.bodega_destino USING "<<<",
")",
almacen_destino
PRINT COLUMN 1,
"CLIENTE : ",
negras,
x.descrip4,
" (",
x.cod_sp USING "&&",
"-",
x.cod_sp_sec USING "&&&&&&",
")",
negras_off
#PRINT COLUMN 1, "DIRECCION: ",pcalle CLIPPED," ",pcasa_num CLIPPED," ",purbanizacion CLIPPED,
# " TELEFONO: ",ptelefono CLIPPED," CELULAR: ",pcelular
PRINT COLUMN 1,
"Proyecto : ",
nombre_p CLIPPED,
" DIRECCION: ",
direccion_p CLIPPED
PRINT COLUMN 1,
"TELEFONO1: ",
ptelefono CLIPPED,
" TELEFONO2 :,",
ptelefono1,
" CELULAR: ",
pcelular
PRINT COLUMN 1, "Vendedor : ", nombre CLIPPED, " ", apellido
PRINT COLUMN 1,
"Entrada : ",
x.entrada USING "<<<<<<",
" (",
x.cod_mov1 USING "<<<",
") ",
x.descrip_mov1 CLIPPED
PRINT COLUMN 1,
"Orden : ",
x.conduce_no,
COLUMN 20,
"ORDEN CLIENTE: ",
porden_cliente,
" COTIZACION NO: ",
xcotizacion USING "&&&&&&"
#,"Observacion Orden: ",pobserva CLIPPED
PRINT COLUMN 1, "Requisicion: ", pnum_req USING "<<<<<<"
#PRINT COLUMN 1, "Ubicacion: ",pubica CLIPPED
PRINT COLUMN 1, "Otros Documentos : ", otros_mov.fact_no
IF x.departamento IS NOT NULL THEN
PRINT COLUMN 1,
"DEPARTAMENTO: ",
x.departamento USING "<<<<",
" ",
x.nombre_depto
END IF
PRINT comp_on
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-------------------------------------------------------------------"
PRINT COLUMN 2, doble, "PRODUCTO(S)", doble_of CLIPPED
PRINT COLUMN 123, "CANTIDAD"
PRINT COLUMN 108, "CANTIDAD", COLUMN 123, "PENDIENTE"
PRINT COLUMN 94,
"UNIDADES",
COLUMN 108,
"A DESPACHAR",
# COLUMN 123, "CON ESTA TRANSACCION",
2 SPACES,
"BLOQUE"
PRINT COLUMN 1,
"-----------------------------------------------------------------------------",
"-------------------------------------------------------------------"
SKIP 1 LINES
BEFORE GROUP OF z.area
SELECT a.nombre_Area
INTO darea
FROM prtb00016 a
WHERE a.area_num = z.area
PRINT COLUMN 2, "(" CLIPPED, z.area CLIPPED, ") ", darea CLIPPED
ON EVERY ROW
IF z.cod_n IS NOT NULL
AND z.cod_grupo IS NOT NULL
AND z.cod_tipo IS NOT NULL
AND z.cod_sec IS NOT NULL THEN
PRINT COLUMN 2,
z.cod_n USING "&&&&",
"-",
z.cod_grupo USING "&&&&&",
"-",
z.cod_tipo USING "&&&&&&&",
"-",
z.cod_sec USING "&&&&&&&&&&",
" ",
z.descrip_esp[1, 64],
" ";
IF cuenta = 1 THEN
LET signo = "+"
ELSE
LET signo = "-"
LET z.cantidad_2 = z.cantidad_2 * -1
END IF
IF z.cantidad_2 < 0 THEN
LET z.cantidad_2 = z.cantidad_2 * -1
END IF
PRINT COLUMN 69,
z.cantidad_1 USING "###,###.#####",
COLUMN 84,
z.cantidad_2 USING "###,###.#####",
" ",
z.unidad_med,
COLUMN 105,
z.cantidad_p USING "###,###.#####",
2 SPACES,
z.codigo_bloque
IF z.descrip_esp[65, 80] <> ' ' THEN
PRINT COLUMN 22, z.descrip_esp[65, 80]
END IF
SELECT DISTINCT a.cod_n
FROM iptb00025 a, vetb00026 b
WHERE # a.area = z.area 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.cod_mov = X.cod_mov
AND a.num_Doc = x.num_doc
AND a.bodega = x.bodega
AND a.id_etiqueta = b.codid
IF STATUS <> NOTFOUND THEN
PRINT "------------------------------- DESPIECE ----------------------------------------"
DECLARE busca_d1 CURSOR FOR
SELECT b.descripcion,
a.lado_1,
a.lado_2,
a.lado_3,
a.cantidad,
a.medida
FROM iptb00025 a, vetb00026 b
WHERE # a.area = z.area 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.cod_mov = X.cod_mov
AND a.num_Doc = x.num_doc
AND a.bodega = x.bodega
AND a.id_etiqueta = b.codid
LET total_unidades = 0
FOREACH busca_d1
INTO etiqueta,
plado1,
plado2,
plado3,
pcantidad,
pmedida
PRINT COLUMN 19,
pcantidad USING "<,<<<",
" ",
etiqueta,
" 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
PRINT
PRINT "---------------------------------------------------------------------------------"
END IF
# IMPRESION DESGLOSE
SELECT DISTINCT a.num_doc
FROM iptb00052 a
WHERE a.num_doc = x.num_doc AND a.cod_mov = x.cod_mov
IF STATUS <> NOTFOUND THEN
PRINT COLUMN 10,
"------------------------------------- DESGLOSE -----------------------------------"
DECLARE busca_desglose CURSOR FOR
SELECT a.lado_1,
a.lado_2,
a.lado_3,
a.cantidad,
a.cantidad2,
a.tono,
a.calidad,
b.descripcion,
c.descripcion
FROM iptb00050 a, intb00010 b, intb00043 c
WHERE a.cod_n = z.cod_n
AND a.cod_grupo = z.cod_grupo
AND a.cod_tipo = z.cod_tipo
AND a.cod_sec = z.cod_sec
AND a.num_doc = x.num_doc
AND a.cod_mov = x.cod_mov
AND a.cod_seccion = b.cod_seccion
AND a.cod_bodega = x.bodega
AND a.cod_bodega = b.cod_bodega
AND a.cod_seccion = b.cod_seccion
AND a.cod_tramo = c.cod_tramo
AND b.cod_seccion = c.cod_seccion
AND b.cod_bodega = c.cod_bodega
LET i = 1
FOREACH busca_desglose
INTO kdatos[i].lado_1,
kdatos[i].lado_2,
kdatos[i].lado_3,
kdatos[i].cantidad,
kdatos[i].cantidad2,
kdatos[i].tono,
kdatos[i].calidad
PRINT COLUMN 10,
kdatos[i].lado_1,
2 SPACES,
kdatos[i].lado_2,
2 SPACES,
kdatos[i].lado_3,
2 SPACES,
kdatos[i].cantidad,
2 SPACES,
kdatos[i].cantidad2,
2 SPACES,
kdatos[i].tono,
2 SPACES,
kdatos[i].calidad
LET i = i + 1
END FOREACH
PRINT COLUMN 10,
"----------------------------------------------------------------------------------"
END IF
END IF
PAGE TRAILER
SELECT a.nombre
INTO descrip2
FROM vetb00015 a
WHERE a.cod_transp = x.cod_transp
AND a.sec_transp = x.sec_transp
SKIP 1 LINE
PRINT COLUMN 1, "OBSERVACIONES: ", UPSHIFT(x.detalle)
SKIP 1 LINE
PRINT COLUMN 1,
"TRANSPORTISTA: ",
x.cod_transp USING "<<",
"-",
x.sec_transp USING "<<<<",
" ",
descrip2 CLIPPED
PRINT COLUMN 1, "PLACA : ", x.placa
SKIP 4 LINES
PRINT COLUMN 1,
"---------------------------",
6 SPACES,
"---------------------------",
6 SPACES,
"---------------------------"
PRINT COLUMN 1,
"Entregado Por ",
6 SPACES,
"Recibido Por ",
6 SPACES,
"Aprobado Por "
SKIP 1 LINE
PRINT COLUMN 2,
"Original: Contabilidad Copia: Vendedor Copia: Ventas Copia: Almacen"
PRINT normal
END REPORT
FUNCTION busca_vend()
DEFINE arr_vend ARRAY[200] OF RECORD
sec_cliente INTEGER,
num_emp INTEGER,
nombre CHAR(30)
END RECORD
OPEN WINDOW busca_1
AT 8, 4
WITH FORM "ipfmwd004"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST)
DECLARE busca_1 CURSOR FOR
SELECT a.sec_cliente, a.num_emp, b.nombre
FROM vetb00033 a, vetb00004 b
WHERE a.sec_cliente = b.sec_cliente AND a.status_t IS NULL
ORDER BY 1
LET idx = 1
FOREACH busca_1 INTO arr_vend[idx].*
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
DISPLAY ARRAY arr_vend TO sc_vend.*
LET idx = ARR_CURR()
LET busca_v.sec_cliente = arr_vend[idx].sec_cliente
LET busca_v.nombre = arr_vend[idx].nombre
CLOSE WINDOW busca_1
END FUNCTION
FUNCTION busca_prod1()
DEFINE arr_prod DYNAMIC ARRAY OF RECORD
cod_n INTEGER,
cod_grupo INTEGER,
cod_tipo INTEGER,
cod_sec INTEGER,
descrip_esp CHAR(30),
unidad_med CHAR(5)
END RECORD
OPEN WINDOW busca_2
AT 8, 4
WITH FORM "ipfmwd001"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST)
CONSTRUCT criterio
ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp
FROM cod_n, cod_grupo, cod_tipo, cod_sec, descrip_esp
LET selec_pt =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ",
" a.unidad_med FROM iptb00002 a ",
"WHERE ",
criterio CLIPPED,
" and a.status_t IS NULL ORDER BY a.descrip_esp "
PREPARE comando_p FROM selec_pt
DECLARE busca_2 CURSOR FOR comando_p
LET idx = 1
FOREACH busca_2 INTO arr_prod[idx].*
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
DISPLAY ARRAY arr_prod TO s_prod.*
LET idx = ARR_CURR()
LET busca_p.cod_n = arr_prod[idx].cod_n
LET busca_p.cod_grupo = arr_prod[idx].cod_grupo
LET busca_p.cod_tipo = arr_prod[idx].cod_tipo
LET busca_p.cod_sec = arr_prod[idx].cod_sec
LET busca_p.descrip_esp = arr_prod[idx].descrip_esp
LET busca_p.unidad_med = arr_prod[idx].unidad_med
# para el precio
LET p_vetb25.cod_n = arr_prod[idx].cod_n
LET p_vetb25.cod_grupo = arr_prod[idx].cod_grupo
LET p_vetb25.cod_tipo = arr_prod[idx].cod_tipo
LET p_vetb25.cod_sec = arr_prod[idx].cod_sec
LET descrip1 = arr_prod[idx].descrip_esp
LET medida = arr_prod[idx].unidad_med
CLOSE WINDOW busca_2
END FUNCTION
FUNCTION despiece(pcodn, pcodgrupo, pcodtipo, pcodsec, parea)
DEFINE
cetiqueta VARCHAR(20),
total_cantidad FLOAT,
i, pcodn, pcodgrupo, pcodtipo, pcodsec, parea INT,
xfactor DEC(12, 5)
OPEN WINDOW wdespiece
AT 5, 3
WITH FORM "ipfmwd010"
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST)
CALL despieceMem.clear()
CALL despiece.clear()
LET idx = 0
DISPLAY BY NAME movi2[p_act].descrip_esp, movi2[p_act].unidad_med
LET despiece[1].cod_n = pcodn
LET despiece[1].cod_grupo = pcodgrupo
LET despiece[1].cod_tipo = pcodtipo
LET despiece[1].cod_sec = pcodsec
#CONTROL EN CASO QUE UN PRODUCTO TENGA EN LA MAESTRA QUE DEBE DESPIEZARSE, EN SU FACTOR DE
# CONVERSION ES DIFERENTE A LA UNIDAD. TODO ARTICULO QUE SE DESPIECE DEBE TENER LA UNIDAD EN EL
# FACTOR DE CONVERSION
SELECT a.factor_conv
INTO Xfactor
FROM iptb00001 a
WHERE a.cod_n = pcodn
AND a.cod_grupo = pcodgrupo
AND a.cod_tipo = pcodtipo
AND a.cod_sec = pcodsec
IF xfactor <> 1 THEN
CALL msg(1021)
CLOSE WINDOW wdespiece
RETURN
END IF
CALL loadDespieceMemory(
pcodn, pcodgrupo, pcodtipo, pcodsec)
RETURNING container
IF container.getLength() = 0 THEN
CALL loadDespiece(
pcodn,
pcodgrupo,
pcodtipo,
pcodsec,
parea,
otros_mov.entrada,
otros_mov.cod_mov1,
pcontrol_despacho,
ordenx,
pnum_req)
RETURNING container
END IF
LET i = container.getLength()
IF i > 0 THEN
CALL despiece.clear()
FOR idx = 1 TO i
LET despiece[idx].* = container[idx].*
END FOR
END IF
IF idx > 1 THEN
DISPLAY BY NAME total_cantidad
CALL set_count(idx - 1)
END IF
INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.*
BEFORE ROW
LET curr1 = arr_curr()
LET fila = scr_line()
CALL cetiquetas()
IF curr1 > 1 THEN
IF despiece[curr1].id_etiqueta IS NULL THEN
LET despiece[curr1].id_etiqueta =
despiece[curr1 - 1].id_etiqueta
END IF
LET despiece[curr1].cod_n = pcodn
LET despiece[curr1].cod_grupo = pcodgrupo
LET despiece[curr1].cod_tipo = pcodtipo
LET despiece[curr1].cod_sec = pcodsec
DISPLAY despiece[curr1].cod_n TO sdespiece[fila].cod_n
DISPLAY despiece[curr1].cod_grupo TO sdespiece[fila].cod_grupo
DISPLAY despiece[curr1].cod_tipo TO sdespiece[fila].cod_tipo
DISPLAY despiece[curr1].cod_sec TO sdespiece[fila].cod_sec
END IF
DISPLAY cetiqueta TO sdespiece[fila].etiqueta
DISPLAY pcodn TO sdespiece[fila].cod_n
DISPLAY pcodgrupo TO sdespiece[fila].cod_grupo
DISPLAY pcodtipo TO sdespiece[fila].cod_tipo
DISPLAY pcodsec TO sdespiece[fila].cod_sec
AFTER FIELD cantidad
LET despiece[curr1].secuencia = arr_curr()
IF movi2[p_act].unidad_med = "M2" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad
* (despiece[curr1].lado_1 * despiece[curr1].lado_2)
END IF
IF movi2[p_act].unidad_med = "M3" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad
* (despiece[curr1].lado_1
* despiece[curr1].lado_2
* despiece[curr1].lado_3)
END IF
IF movi2[p_act].unidad_med = "ML" THEN
LET despiece[curr1].medida =
despiece[curr1].cantidad * despiece[curr1].lado_1
LET despiece[curr1].lado_2 = 0
END IF
IF movi2[p_act].unidad_med = "UD"
OR movi2[p_act].unidad_med = "GL" THEN
LET despiece[curr1].medida = despiece[curr1].cantidad
END IF
DISPLAY despiece[curr1].medida TO sdespiece[fila].medida
AFTER ROW
IF despiece[curr1].medida IS NULL
AND despiece[curr1].lado_1 IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD lado_1
END IF
IF despiece[curr1].id_etiqueta IS NULL
AND despiece[curr1].medida IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD etiqueta
END IF
LET total_medida = 0
LET total_cantidad = 0
FOR idx = 1 TO despiece.getLength()
IF despiece[idx].medida IS NOT NULL THEN
LET total_cantidad = total_cantidad + despiece[idx].cantidad
LET total_medida = total_medida + despiece[idx].medida
END IF
END FOR
DISPLAY BY NAME total_medida, total_cantidad
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
LET total_medida = 0
LET total_cantidad = 0
FOR idx = 1 TO despiece.getLength()
IF despiece[idx].id_etiqueta IS NOT NULL THEN
IF movi2[p_act].unidad_med = "M2" THEN
LET despiece[idx].medida =
despiece[idx].cantidad
* (despiece[idx].lado_1 * despiece[idx].lado_2)
END IF
IF movi2[p_act].unidad_med = "M3" THEN
LET despiece[idx].medida =
despiece[idx].cantidad
* (despiece[idx].lado_1
* despiece[idx].lado_2
* despiece[idx].lado_3)
END IF
IF movi2[p_act].unidad_med = "ML" THEN
LET despiece[idx].medida =
despiece[idx].cantidad * despiece[idx].lado_1
LET despiece[idx].lado_2 = 0
END IF
IF movi2[p_act].unidad_med = "UD"
OR movi2[p_act].unidad_med = "GL" THEN
LET despiece[idx].medida = despiece[idx].cantidad
END IF
DISPLAY despiece[idx].medida TO sdespiece[fila].medida
LET total_medida = total_medida + despiece[idx].medida
LET total_cantidad = total_cantidad + despiece[idx].cantidad
END IF
END FOR
DISPLAY BY NAME total_medida, total_cantidad
FOR i = 1 TO despiece.getLength()
LET despiece[i].cod_n = pcodn
LET despiece[i].cod_grupo = pcodgrupo
LET despiece[i].cod_tipo = pcodtipo
LET despiece[i].cod_sec = pcodsec
END FOR
CALL saveDespieceMemory(pcodn, pcodgrupo, pcodtipo, pcodsec)
END INPUT
IF int_flag THEN
LET int_flag = FALSE
CLOSE WINDOW wdespiece
RETURN
END IF
LET total_medida = 0
LET total_cantidad = 0
FOR idx = 1 TO despiece.getLength()
IF despiece[idx].medida IS NOT NULL THEN
LET total_cantidad = total_cantidad + despiece[idx].cantidad
LET total_medida = total_medida + despiece[idx].medida
END IF
END FOR
DISPLAY "EN FUNCION DESPIECE CANTIDAD1: ", total_cantidad
DISPLAY "EN FUNCION DESPIECE CANTIDAD2: ", total_medida
LET movi2[p_act].cantidad_1 = total_medida
LET movi2[p_act].cantidad_2 = total_medida
DISPLAY "DESPIECE AL FINAL: ", despiece[1].*
CLOSE WINDOW wdespiece
END FUNCTION
FUNCTION consulta()
CONSTRUCT CRITERIO
ON a.num_Doc,
a.cod_mov,
a.fecha,
a.conduce_no,
a.cod_sp,
a.cod_sp_Sec,
a.bodega,
a.detalle
FROM num_doc,
cod_mov,
fecha,
conduce_no,
cod_sp,
cod_sp_sec,
bodega,
detalle
BEFORE CONSTRUCT
CALL cmovimientos()
AFTER CONSTRUCT
IF INT_FLAG THEN
LET INT_FLAG = FALSE
RETURN
END IF
END CONSTRUCT
CALL movi2.clear()
LET selec =
"SELECT DISTINCT
a.num_doc, a.cod_cia, a.cod_mov, a.fact_no, a.cod_transp, a.sec_transp, a.cod_tarifa,
a.placa, a.fecha, a.conduce_no, a.bodega, a.bodega_d, a.detalle, a.cod_sp, a.cod_sp_sec,
a.departamento, d.nom_dpto, c.cod_mov1, c.entrada,
' ' , ' ' ,a.factura, a.num_req, a.sec_vend,a.num_oc,k.descrip_mov
FROM iptb00006 AS a LEFT OUTER JOIN
adtb00001 AS d ON a.departamento = d.departamento INNER JOIN
iptb00005 AS k ON a.cod_mov = k.cod_mov LEFT OUTER JOIN
iptb00028 AS c ON a.num_doc = c.num_doc AND a.cod_mov = c.cod_mov LEFT OUTER JOIN
iptb00048 AS b ON a.bodega = b.bodega
WHERE (b.usuario ='",
usuarios CLIPPED,
"' ",
") AND (a.status_t IS NULL) AND ",
criterio CLIPPED
PREPARE comando FROM selec
DECLARE busca4 SCROLL CURSOR WITH HOLD FOR comando
OPEN busca4
FETCH FIRST busca4
INTO otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend,
ordenx,
otros_mov.descrip_mov
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL busca_info()
DISPLAY BY NAME otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend
DISPLAY ordenx TO conduce_no
MENU "Busqueda "
ON ACTION exportar ATTRIBUTE(TEXT = "Exp PDF")
CALL toPDF()
COMMAND "Siguiete " "Sieguiente Registro Cumpla Condicion"
FETCH NEXT busca4
INTO otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend,
ordenx,
otros_mov.descrip_mov
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL busca_info()
DISPLAY BY NAME otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend
DISPLAY ordenx TO conduce_no
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS busca4
INTO otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend,
ordenx,
otros_mov.descrip_mov
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL busca_info()
DISPLAY BY NAME otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend
DISPLAY ordenx TO conduce_no
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST busca4
INTO otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend,
ordenx,
otros_mov.descrip_mov
LET numero_msg = 5
CALL msg(numero_msg)
CALL busca_info()
DISPLAY BY NAME otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
psec_vend
DISPLAY ordenx TO conduce_no
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST busca4
INTO otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend,
ordenx,
otros_mov.descrip_mov
LET numero_msg = 4
CALL msg(numero_msg)
CALL busca_info()
DISPLAY BY NAME otros_mov.num_doc,
otros_mov.cod_cia,
otros_mov.cod_mov,
otros_mov.fact_no,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_tarifa,
otros_mov.placa,
otros_mov.fecha,
otros_mov.conduce_no,
otros_mov.bodega,
otros_mov.bodega_destino,
otros_mov.detalle,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.departamento,
otros_mov.nombre_depto,
otros_mov.cod_mov1,
otros_mov.entrada,
otros_mov.descrip_mov1,
otros_mov.descrip4,
otros_mov.factura,
pnum_req,
psec_vend
DISPLAY ordenx TO conduce_no
COMMAND "Items" "Busca Items"
DECLARE busca1 CURSOR FROM "SELECT a.area, c.nombre_area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec,
a.cantidad_1, a.cantidad_2, '0', b.unidad_med, b.descrip_esp
FROM iptb00006 a
JOIN iptb00002 b ON a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_Sec
LEFT JOIN prtb00016 c ON a.area = c.area_num
WHERE a.num_doc = "
|| otros_mov.num_doc
|| "
AND a.cod_mov = "
|| otros_mov.cod_mov
|| "
AND a.bodega = "
|| otros_mov.bodega
|| "
AND a.fech_crea > '2009-01-01 08:00'
ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec"
{SELECT a.area,c.nombre_area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,
a.cantidad_1,a.cantidad_2,'0',b.unidad_med,b.descrip_esp
FROM iptb00006 a,iptb00002 b, prtb00016 c
WHERE a.num_doc = otros_mov.num_doc AND
a.cod_mov = otros_mov.cod_mov AND
a.cod_n = b.cod_n AND
a.cod_grupo = b.cod_grupo AND
a.cod_tipo = b.cod_tipo AND
a.cod_sec = b.cod_Sec AND
a.bodega = otros_mov.bodega AND
a.fech_crea > '01/01/2009 08:00' AND
a.area = c.area_num}
LET idx = 1
CALL movi2.clear()
FOREACH busca1 INTO movi2[idx].*
IF movi2[idx].cantidad_2 < 0 THEN
LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1
END IF
SELECT SUM(a.cantidad)
INTO cantidad_conduce
FROM prtb00013 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.num_oc = ordenx
AND a.status_t IS NULL
LET cantidad_orden = 0
IF otros_mov.cod_mov = 30 AND otros_mov.cod_mov = 31
OR otros_mov.cod_mov = 55 THEN
SELECT SUM(a.cantidad_2 * - 1)
INTO cantidad_orden
FROM iptb00006 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.conduce_no = otros_mov.conduce_no
AND cod_mov IN (30, 31, 55)
AND a.status_t IS NULL
END IF
IF cantidad_orden IS NULL THEN
LET cantidad_orden = 0
END IF
IF cantidad_conduce IS NULL THEN
LET cantidad_conduce = 0
END IF
LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden
IF movi2[idx].area IS NULL THEN
LET movi2[idx].area = 1
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY movi2 TO s_movi1.*
PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2
IF opt2 = "S" OR opt2 = "s" THEN
CALL defecto(
usuarios, clave, impresor)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
{ IF usuarios = 'mabad' THEN
IF salida IS NULL THEN
LET salida = 'PDF'
END IF
CALL configureoutput(salida) RETURNING HANDLER
START REPORT formu4 TO XML HANDLER HANDLER
ELSE }
START REPORT formu4 TO archivo
-- END IF
FOR idx = 1 TO arr_count()
IF movi2[idx].cod_sec IS NOT NULL THEN
IF movi2[idx].cantidad_2 IS NOT NULL
AND movi2[idx].cantidad_2 != 0 THEN
OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*)
END IF
END IF
END FOR
FINISH REPORT formu4
IF opt2 = "S" OR opt2 = "s" THEN
# LET filename = "TYPE ",archivo CLIPPED," > %USPRINT%"
# RUN filename
-- IF usuarios <> 'mabad' THEN
RUN imprime
-- END IF
END IF
END IF
CALL movi2.clear()
COMMAND "Retornar" "Retorna al menu anterior"
CLEAR FORM
INITIALIZE otros_mov.* TO NULL
LET otros_mov.fecha = TODAY
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_info()
SELECT nombre
INTO descrip2
FROM vetb00015
WHERE cod_transp = otros_mov.cod_transp
AND sec_transp = otros_mov.sec_transp
AND status_t IS NULL
SELECT nombre
INTO otros_mov.descrip4
FROM vetb00004
WHERE tipo_cliente = otros_mov.cod_sp
AND sec_cliente = otros_mov.cod_sp_sec
SELECT a.status_mov,
a.control_clientes,
a.control_despacho,
a.control_devolucion,
a.control_transferencia,
a.control_departamento
INTO status_m,
pcontrol_cliente,
pcontrol_despacho,
control_devolucion,
Pcontrol_transferencia,
pcontrol_departamento
FROM iptb00005 a
WHERE a.cod_mov = otros_mov.cod_mov AND a.status_t IS NULL
SELECT a.descrip_mov
INTO otros_mov.descrip_mov1
FROM iptb00005 a
WHERE a.cod_mov = otros_mov.cod_mov1
IF pcontrol_transferencia = 'SI' THEN
LET k1 = '2'
ELSE
LET k1 = '1'
END IF
CALL bodegas(k1)
SELECT a.tipo_cliente, a.sec_cliente, a.cerrada, a.cotizacion_no
INTO otros_mov.cod_sp, otros_mov.cod_sp_sec, pcerrada, xcotizacion
FROM prtb00012 a
WHERE a.num_oc = ordenx AND a.status_t IS NULL
SELECT a.mensaje
INTO direccion_p
FROM cctb00029 a
WHERE a.num_req = pnum_req
DISPLAY BY NAME descrip2,
otros_mov.descrip4,
otros_mov.descrip_mov1,
direccion_p
END FUNCTION
FUNCTION actualiza_st(forden)
DEFINE
forden INTEGER,
prod_total, vent_total DEC(12, 5),
prtb09 RECORD LIKE prtb00009.*
SELECT SUM(a.cantidad)
INTO prod_total
FROM prtb00013 a
WHERE a.num_oc = forden
IF STATUS = NOTFOUND THEN
LET prod_total = 0
END IF
LET vent_total = 0
SELECT SUM(b.cantidad_2)
INTO vent_total
FROM IPTB00006 a
WHERE a.conduce_no = forden
AND CONVERT(CHAR(10), a.fecha, 101) > "31122006"
AND a.cod_sp = otros_mov.cod_sp
AND a.sec_cliente = otros_mov.cod_sp_Sec
AND a.cod_mov IN (30, 31, 55, 12, 13)
AND a.status_t IS NULL
IF vent_total IS NULL THEN
LET vent_total = 0
END IF
#-> Actualiza la fecha de cierre de la orden de corte vg Wednesday, 17 January, 200112:42:33 PM
IF vent_total = prod_total THEN
UPDATE prtb00012
SET fecha_cierre = otros_mov.fecha, cerrada = "S"
WHERE @num_oc = forden
AND @tipo_cliente = otros_mov.cod_sp
AND @sec_cliente = otros_mov.cod_sp_Sec
LET prtb09.num_oc = forden
LET prtb09.fecha = otros_mov.fecha
LET prtb09.pendiente = "N"
LET prtb09.detalle =
"CIERRE DE ORDEN DE PRODUCCION SEGUN CONDUCE # ",
otros_mov.num_doc USING "<<<<<<<",
" DE FECHA : ",
otros_mov.fecha USING "dd/mm/yyyy"
INSERT INTO prtb00009
VALUES(prtb09.num_oc,
prtb09.fecha,
NULL,
prtb09.pendiente,
prtb09.detalle,
NULL,
USER,
getdate(),
NULL,
NULL)
ELSE
LET prtb09.num_oc = forden
LET prtb09.fecha = otros_mov.fecha
LET prtb09.pendiente = "N"
LET prtb09.detalle =
"DESPACHO ",
pdescripmov CLIPPED,
" SEGUN CONDUCE # ",
otros_mov.num_doc USING "<<<<<<<",
" DE FECHA : ",
otros_mov.fecha USING "dd/mm/yyyy",
" CONTIENE PRODUCTO(S): ",
selec_pt CLIPPED
INSERT INTO prtb00009
VALUES(prtb09.num_oc,
prtb09.fecha,
NULL,
prtb09.pendiente,
prtb09.detalle,
NULL,
USER,
getdate(),
NULL,
NULL)
END IF
END FUNCTION
FUNCTION visualizacion_despacho()
DEFINE arr_autoriza_desp DYNAMIC ARRAY OF RECORD
num_oc INT,
cliente CHAR(66),
fecha CHAR(10),
tipo_cliente SMALLINT,
sec_cliente INT,
num_req INT
END RECORD
OPEN WINDOW w1 AT 10, 5 WITH FORM "ipfmwd011"
DECLARE busca_autoriza CURSOR FOR
SELECT DISTINCT a.num_oc,
rtrim(
CAST(b.tipo_cliente AS CHAR(2)) + '-'
+ CAST(b.sec_cliente AS CHAR(6))
+ ' '
+ b.nombre),
CAST(d.fecha AS CHAR(10)) AS FECHA,
b.tipo_cliente,
b.sec_cliente,
a.num_req
FROM cctb00026 a, vetb00004 b, prtb00012 c, cctb00025 d
WHERE c.tipo_cliente = b.tipo_cliente
AND c.sec_cliente = b.sec_cliente
AND (a.num_oc = c.num_oc)
AND
# c.tipo_orden = ptipoorden AND
(a.cotizacion_no = c.cotizacion_no)
AND c.cerrada = 'N'
AND A.num_req = d.num_req
AND d.estado IN ('AUTORIZADA')
AND d.estado_despacho IN ('DESPACHO PARCIAL', 'NO DESPACHADA')
AND c.status_t IS NULL
AND a.status_t IS NULL
ORDER BY fecha
LET idx = 1
FOREACH busca_autoriza INTO arr_autoriza_desp[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY arr_autoriza_desp TO s_despachos.*
AFTER DISPLAY
LET idx = arr_curr()
IF Int_flag THEN
EXIT DISPLAY
END IF
END DISPLAY
CLOSE WINDOW w1
IF int_flag THEN
RETURN 0, 0, 0, 0
ELSE
RETURN arr_autoriza_desp[idx].num_oc,
arr_autoriza_desp[idx].tipo_cliente,
arr_autoriza_desp[idx].sec_cliente,
arr_autoriza_desp[idx].num_req
END IF
END FUNCTION
FUNCTION existencia(pcodn, pcodgrupo, pcodtipo, pcodsec, cantidad, pid, xbodega)
DEFINE
pcodn, pcodgrupo, pcodtipo, pcodsec, pid, xbodega SMALLINT,
pexistencia, pexistencia1, cantidad DEC(12, 5),
verdad BOOLEAN
LET verdad = FALSE
SELECT SUM(a.cantidad_2)
INTO pexistencia
FROM iptb00006 a
WHERE (a.cod_n = Pcodn
AND a.cod_grupo = Pcodgrupo
AND a.cod_tipo = Pcodtipo
AND a.cod_sec = Pcodsec)
AND (a.bodega = xbodega)
AND (a.status_t IS NULL)
DISPLAY "existencia ", pexistencia, " c ", cantidad
IF pexistencia IS NULL THEN
LET pexistencia = 0
END IF
IF pexistencia1 IS NULL THEN
LET pexistencia1 = 0
END IF
LET existenciaact[p_act] = pexistencia
# IF pexistencia < 0 THEN
# RETURN TRUE,pexistencia
# END IF
IF cantidad > pexistencia THEN
RETURN TRUE, pexistencia
END IF
RETURN verdad, pexistencia
END FUNCTION
FUNCTION cetiquetas()
DEFINE
ketiquetas SMALLINT,
detiquetas CHAR(30)
LET petiquetas = ui.combobox.forname("formonly.etiqueta")
DECLARE betiquetas CURSOR FOR
SELECT a.codid, a.descripcion FROM vetb00026 a ORDER BY a.descripcion
CALL petiquetas.clear()
FOREACH betiquetas INTO ketiquetas, detiquetas
CALL petiquetas.additem(ketiquetas, detiquetas)
END FOREACH
END FUNCTION
FUNCTION control_requisicion(
cantidad_Trx, xcodn, xcodgrupo, xcodtipo, xcodsec, xkit, fconv, xarea)
DEFINE
cantidad_Trx, fconv DEC(12, 5),
totalcantidad DEC(12, 5),
xcodn, xcodgrupo, xcodtipo, xcodsec, xarea SMALLINT,
xkit INT
# DISPLAY "otra data: ",pnum_req," ",xcodn," ",xcodsec
SELECT ISNULL(SUM(a.cantidad), 0)
INTO cantidadRequisicion
FROM cctb00026 a
WHERE a.cod_n = xcodn
AND a.cod_grupo = xcodgrupo
AND a.cod_tipo = xcodtipo
AND a.cod_sec = xcodsec
AND
# a.area = xarea AND
a.num_req = pnum_req
AND a.status_t IS NULL
SELECT ISNULL(SUM(a.cantidad_2), 0)
INTO Rcantidad_requisicion
FROM iptb00006 a
WHERE a.cod_n = xcodn
AND a.cod_grupo = xcodgrupo
AND a.cod_tipo = xcodtipo
AND a.cod_sec = xcodsec
AND
# a.area = xarea AND
a.cod_mov IN (30, 31, 55, 12, 13)
AND (a.num_req = pnum_req)
AND a.status_t IS NULL
IF rcantidad_requisicion < 0 THEN
LET rcantidad_requisicion = rcantidad_requisicion * -1
END IF
DISPLAY "cantidad req ",
cantidadRequisicion,
" cantidad trx ",
Rcantidad_requisicion,
" CANTIDAD TRX ",
cantidad_Trx
# IF fconv > 1 THEN
# LET cantidadRequisicion = cantidadRequisicion + .03
# END IF
LET totalcantidad = Rcantidad_requisicion + cantidad_Trx
DISPLAY totalcantidad
DISPLAY cantidadRequisicion
IF xcodn IS NOT NULL THEN
DISPLAY "TOTALES: ", totalcantidad, " req ", cantidadRequisicion
IF totalcantidad > cantidadRequisicion THEN
# INSERT EN ESTE LOG PARA MONITOREAR CUALES SON LOS VALORES
INSERT INTO iptb00006_log(
num_req,
fechatrx,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad_1,
cantidad_2,
num_oc,
cotizacion_no,
us_crea,
cod_mov,
totalCantidadControl,
totalCantidadReq,
totalCantidadReqInv,
retornado)
VALUES(pnum_req,
getdate(),
xarea,
xcodn,
xcodgrupo,
xcodtipo,
xcodsec,
cantidad_Trx,
cantidad_Trx,
ordenx,
xcotizacion,
usuarios,
otros_mov.cod_mov,
totalcantidad,
cantidadRequisicion,
Rcantidad_requisicion,
'FALSO')
RETURN FALSE
ELSE
INSERT INTO iptb00006_log(
num_req,
fechatrx,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad_1,
cantidad_2,
num_oc,
cotizacion_no,
us_crea,
cod_mov,
totalCantidadControl,
totalCantidadReq,
totalCantidadReqInv,
retornado)
VALUES(pnum_req,
getdate(),
xarea,
xcodn,
xcodgrupo,
xcodtipo,
xcodsec,
cantidad_Trx,
cantidad_Trx,
ordenx,
xcotizacion,
usuarios,
otros_mov.cod_mov,
totalcantidad,
cantidadRequisicion,
Rcantidad_requisicion,
'VERDADERO')
RETURN TRUE
END IF
END IF
END FUNCTION
FUNCTION insertaData()
DEFINE emp, codi_cia SMALLINT
DEFINE nom_cli, nombre_emp CHAR(30)
LET arr_recibo.cod_mov = otros_mov.cod_mov
LET recibo.fecha_orig = fecha1
# Control Secuencial de las notas de creditos
LET recibo.fecha_orig = otros_mov.fecha
LET recibo.tipo_cliente = otros_mov.cod_sp
LET recibo.sec_cliente = otros_mov.cod_sp_sec
LET recibo.itbi = 0
LET fact_gral.bodega = otros_mov.bodega
LET reimpresion = "N"
LET fecha1 = recibo.fecha_orig
# Busca el codigo del cliente y chequea que el documento de almacen exista
LET recibo.tipo_cliente = otros_mov.cod_sp
LET recibo.sec_cliente = otros_mov.cod_sp_sec
LET codi_cia = otros_mov.cod_cia
LET fact_gral.factura = otros_mov.factura
SET CONNECTION "SQL_C"
SELECT b.nombre,
a.calle || ' ' || a.casa_num || ' ' || a.urbanizacion || ' '
|| a.barrio,
c.ventas
INTO nom_cli, fact_gral.direccion, fact_gral.ventas
FROM vetb00004 b, vetb00060 c, OUTER vetb00005 a
WHERE (b.tipo_cliente = recibo.tipo_cliente)
AND (b.sec_cliente = recibo.sec_cliente)
AND b.tipo_cliente = a.tipo_cliente
AND b.sec_cliente = a.sec_cliente
AND b.tipo_cliente = c.tipo_cliente
IF STATUS = NOTFOUND THEN
LET nom_cli = "NO E X I S T E"
END IF
LET descrip2 = NULL
LET descrip3 = NULL
SELECT nom1_emp, apell1_emp
INTO descrip2, descrip3
FROM adtb00003
WHERE num_emp = psec_vend
--DISPLAY "descrip2 ",descrip2,"descrip3 ",descrip3
IF status = NOTFOUND THEN
LET nombre_emp = "NO E X I S T E"
ELSE
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
END IF
--DISPLAY nombre_emp
LET busca1 = "S"
SELECT SUM(a.cantidad_2 * b.precio)
INTO valor_fac
FROM iptb00006 a, vetb00003 b
WHERE (a.num_doc = otros_mov.num_doc)
AND (a.cod_n = b.cod_n)
AND (a.cod_grupo = b.cod_grupo)
AND (a.cod_tipo = b.cod_tipo)
AND (a.cod_sec = b.cod_sec)
AND (a.cod_mov = otros_mov.cod_mov)
AND (b.factura = otros_mov.factura)
AND a.area = b.area
AND (a.bodega = otros_mov.bodega)
--DISPLAY "valor_fac 1",valor_fac
LET arr_recibo.valor_pen = valor_fac
{ SE ESTA FORZANDO A QUE DEBE TENER UNA FACTURA UNA DEVOLUCION 13/3/2024
IF valor_fac IS NULL THEN
--DISPLAY "ESTA NULO "
LET busca2 = "S"
LET busca1 = "N"
SELECT SUM(a.cantidad_2*b.precio) INTO valor_fac
FROM iptb00006 a,vetb00025 b
WHERE (a.num_doc = otros_mov.num_doc) AND
(a.cod_n = b.cod_n) AND (a.cod_grupo = b.cod_grupo) AND
(a.cod_tipo = b.cod_tipo) AND (a.cod_sec = b.cod_sec) AND
(a.cod_mov = otros_mov.cod_mov) AND
a.bodega = otros_mov.bodega
AND b.ventas = "1" AND b.tipo_cliente IS NULL
END IF}
LET arr_recibo.valor_pen = valor_fac
LET pdescuento = 0
# BUSCA EL DESCUENTO
SELECT SUM(a.cantidad_2 * b.precio * (b.cantidad_2 / 100)),
AVG(b.cantidad_2)
INTO pdescuento, xporc_desc
FROM iptb00006 a, vetb00003 b
WHERE (a.num_doc = otros_mov.num_doc)
AND (a.cod_n = b.cod_n)
AND (a.cod_grupo = b.cod_grupo)
AND (a.cod_tipo = b.cod_tipo)
AND (a.cod_sec = b.cod_sec)
AND (a.cod_mov = otros_mov.cod_mov)
AND (b.factura = fact_gral.factura)
AND a.area = b.area
AND a.bodega = otros_mov.bodega
IF pdescuento IS NULL THEN
LET pdescuento = 0
END IF
LET arr_recibo.val_desc = pdescuento
LET arr_recibo.desc_p = xporc_Desc
# El campo VALOR_PEN gruarda el valor bruto de la nota de credito obtenida
# por la multiplicacion de las cantidades devueltas por el movimiento 12
# por el precio actual del producto
# LET arr_recibo[curr].val_desc = arr_recibo[curr].valor_pen * (arr_recibo[curr].desc_p / 100)
# Calcula el itbi despues de restar el descuento al monto bruto
# BUSCA PORCENTAJE ITBIS FACTURA
LET pitbis = 0
LET p_itbi = 0
DISPLAY fact_gral.factura
SELECT a.porc_itbi, a.fecha_factura
INTO pitbis, fact_gral.fecha_despacho
FROM vetb00002 a
WHERE a.factura = fact_gral.factura
IF STATUS = NOTFOUND THEN
DISPLAY "NO LA ENCONTRE"
ELSE
DISPLAY "LA ENCONTRE"
END IF
LET dias_factura = TODAY - fact_gral.fecha_despacho
{DISPLAY "fact_gral.fecha_despacho ", fact_gral.fecha_despacho
DISPLAY "chitbis", chitbis}
DISPLAY "dias factura ", dias_factura, " fecha: ", fact_gral.fecha_despacho
IF dias_factura <= 30 THEN
LET chitbis = "S"
LET p_itbi =
(arr_recibo.valor_pen - arr_recibo.val_desc) * (pitbis / 100)
LET recibo.itbi = recibo.itbi + p_itbi
DISPLAY "MENOS DE 30 ", recibo.itbi
ELSE
LET chitbis = "N"
LET recibo.itbi = 0
DISPLAY "MAS DE 30 ", recibo.itbi
END IF
LET chitbis = UPSHIFT(chitbis)
LET arr_recibo.valor_pag =
(arr_recibo.valor_pen - arr_recibo.val_desc) + p_itbi
LET p_total = arr_recibo.valor_pag
LET via = "S"
SELECT b.nombre,
a.calle || ' ' || a.casa_num || ' ' || a.urbanizacion || ' ' || a.barrio
INTO nom_cli, fact_gral.direccion
FROM vetb00004 b, vetb00005 a
WHERE (b.tipo_cliente = otros_mov.cod_sp)
AND (b.sec_cliente = otros_mov.cod_sp_sec)
AND b.tipo_cliente = a.tipo_cliente
AND b.sec_cliente = a.sec_cliente
IF fact_gral.direccion IS NULL THEN
LET fact_gral.direccion = 'NO ESPECIFICADA'
END IF
LET descrip2 = NULL
LET descrip3 = NULL
SELECT nom1_emp, apell1_emp
INTO descrip2, descrip3
FROM adtb00003
WHERE num_emp = psec_vend
IF STATUS = NOTFOUND THEN
LET nombre_emp = "NO E X I S T E"
ELSE
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
END IF
#SECUENCIA RECIBO
SELECT ult_recibo INTO p_num_doc FROM cctb00003 WHERE tipo_doc = "NC"
LET p_num_doc = p_num_doc + 1
LET recibo.num_doc = p_num_doc
LET recibo.cod_emp_sec = psec_vend
IF otros_mov.num_doc IS NOT NULL THEN
LET arr_recibo.aplica_a = otros_mov.num_doc
LET impresor = 47
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 cr_edito TO archivo
IF arr_recibo.aplica_a IS NOT NULL THEN
INSERT INTO tmpnotascr(
num_doc,
fecha,
tipo_cliente,
sec_cliente,
cod_mov,
factura,
num_doc_nc,
itbis,
us_crea,
fech_crea)
VALUES(arr_recibo.aplica_a,
otros_mov.fecha,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.cod_mov,
otros_mov.factura,
recibo.num_doc,
recibo.itbi,
usuarios,
getdate())
OUTPUT TO REPORT cr_edito(
recibo.*, arr_recibo.*, nom_cli, descrip2, descrip3, codi_cia)
END IF
FINISH REPORT cr_edito
RUN imprime
# IMPRESION EXTERIOR
#--------------------------------------------------------------------------------------------------------
######### ADICION A SQL_E CUANDO ES DEVOLUCION MERCANCIA
SET CONNECTION "SQL_E"
LET xnum_doc_c = otros_mov.num_doc
SELECT a.num_doc
INTO tmpnumero
FROM iptb00007 a
WHERE a.cod_mov = otros_mov.cod_mov #AND
# a.bodega = otros_mov.bodega
IF tmpnumero IS NULL THEN
INSERT INTO iptb00007(
num_doc, cod_mov, bodega)
VALUES(1, otros_mov.cod_mov, otros_mov.bodega)
ELSE
LET num_doc_e = tmpnumero + 1
END IF
LET factura_e = NULL
FOR idx = 1 TO movi2.getLength()
IF movi2[idx].cod_n IS NOT NULL THEN
SELECT MAX(
a
.factura) #,MAX(a.sucid),MAX(a.hash),MAX(fechafirmadigital)
INTO factura_e, psucid, xhas, xfechaFirmaDigital
FROM vetb00002 a, vetb00003 b
WHERE a.factura_c = otros_mov.factura
AND a.factura = b.factura
AND (b.cod_n = movi2[idx].cod_n
AND b.cod_grupo = movi2[idx].cod_grupo
AND b.cod_tipo = movi2[idx].cod_tipo
AND b.cod_sec = movi2[idx].cod_sec)
AND a.status_t IS NULL
DISPLAY "FACTURA: ", factura_e
IF factura_e IS NOT NULL THEN
INITIALIZE out_result TO NULL
INSERT INTO iptb00006(
cod_cia,
num_doc,
fact_no,
fecha,
cod_transp,
sec_transp,
cod_sp,
cod_sp_sec,
placa,
cod_tarifa,
cod_mov,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad_1,
cantidad_2,
bodega,
us_crea,
fech_crea,
num_oc,
cotizacion_no,
num_doc_c,
conduce_no,
detalle,
num_req,
sec_vend,
idtipo)
VALUES(otros_mov.cod_cia,
num_doc_e,
factura_e,
otros_mov.fecha,
otros_mov.cod_transp,
otros_mov.sec_transp,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.placa,
otros_mov.cod_tarifa,
otros_mov.cod_mov,
movi2[idx].area,
movi2[idx].cod_n,
movi2[idx].cod_grupo,
movi2[idx].cod_tipo,
movi2[idx].cod_sec,
movi2[idx].cantidad_1,
movi2[idx].cantidad_2,
'1',
usuarios,
getdate(),
ordenx,
xcotizacion,
xnum_doc_c,
otros_mov.conduce_no,
otros_mov.detalle,
pnum_req,
psec_vend,
idtipo)
END IF
END IF
END FOR
UPDATE iptb00007
SET num_doc = num_doc_e
WHERE cod_mov = otros_mov.cod_mov
END IF
#--------------------------------------------------------------------------------------------------------
LET impresor1 = 45
CALL defecto(
usuarios, clave, impresor1)
RETURNING imprime,
negrilla_on,
negrillas_of,
doble_on,
doble_off,
comp_on,
comp_off,
doce,
normal,
archivo,
copia
SELECT * INTO p_companias.* FROM companias
SELECT a.factura, b.sucnombre, a.sucid
INTO fact_gral.factura, nombre_sucursal, psucid
FROM vetb00002 a, sucursales b
WHERE a.factura_c = otros_mov.factura
AND a.sucid = b.sucid
AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
DISPLAY "dato e: ", recibo.num_doc
IF num_doc_e > 0 THEN
LET num_cr_e = recibo.num_doc
SELECT a.ult_recibo
INTO p_num_doc
FROM cctb00003 a
WHERE a.tipo_Doc = 'NC'
IF p_num_doc IS NULL THEN
INSERT INTO cctb00003(ult_recibo, tipo_doc) VALUES(1, 'NC')
LET p_num_doc = 1
END IF
LET recibo.num_doc = p_num_doc + 1
START REPORT cr_edito1 TO archivo
LET arr_recibo.aplica_a = num_doc_e
IF arr_recibo.aplica_a IS NOT NULL THEN
INSERT INTO tmpnotascr(
num_doc,
fecha,
tipo_cliente,
sec_cliente,
cod_mov,
factura,
num_doc_nc,
itbis,
us_crea,
fech_crea)
VALUES(arr_recibo.aplica_a,
otros_mov.fecha,
otros_mov.cod_sp,
otros_mov.cod_sp_sec,
otros_mov.cod_mov,
otros_mov.factura,
recibo.num_doc,
recibo.itbi,
usuarios,
getdate())
OUTPUT TO REPORT cr_edito1(
recibo.*,
arr_recibo.*,
nom_cli,
descrip2,
descrip3,
codi_cia)
END IF
FINISH REPORT cr_edito1
RUN imprime
{ # PARA LA NC ELECTRONICA
LET factura.fecha_factura = otros_mov.fecha
LET factura.nombre = nom_cli
LET r_filename = "veprmt022.4rp"
iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output="PDF"
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
RETURN
END IF
START REPORT cr_edito1_encf TO XML HANDLER HANDLER
OUTPUT TO REPORT cr_edito1_encf (recibo.*,arr_recibo.*,nom_cli,
descrip2,descrip3,codi_cia)
FINISH REPORT cr_edito1_encf}
END IF
END IF
SET CONNECTION "SQL_C"
LET emp = psec_vend
END FUNCTION
REPORT cr_edito(x, z, nombre_cli, nombre, apellido, cia)
DEFINE x RECORD
num_doc LIKE cctb00001.num_doc,
tipo_cliente LIKE cctb00001.tipo_cliente,
sec_cliente LIKE cctb00001.sec_cliente,
cod_emp_sec LIKE cctb00001.cod_emp_sec,
fecha_orig LIKE cctb00001.fecha_orig,
itbi DECIMAL(12, 2),
concepto CHAR(60)
END RECORD
DEFINE z RECORD
cod_mov LIKE iptb00006.cod_mov,
aplica_a LIKE cctb00001.aplica_a,
valor_pen DECIMAL(12, 2),
desc_p LIKE cctb00001.monto_desc,
valor_desc DECIMAL(12, 2),
valor_pag DECIMAL(12, 2)
END RECORD
DEFINE cia SMALLINT
DEFINE total_nc, total_bruto, total_desc, itbis DECIMAL(12, 2)
DEFINE nombre_cli, nombre, apellido CHAR(30)
DEFINE comp_on,
comp_off,
negrillas_on,
negrillas_off,
doble_on,
doble_off,
doce,
normal
CHAR(2)
DEFINE
reg_i RECORD
area SMALLINT,
cod_n INTEGER,
cod_grupo INTEGER,
cod_tipo INTEGER,
cod_sec INTEGER,
descrip_esp CHAR(100),
cantidad DEC(18, 5),
precio DECIMAL(12, 2),
descuento DEC(12, 2)
END RECORD,
lj, j, i, h SMALLINT,
factura_ncf INT,
xtipo_doc CHAR(2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 4
# PAGE LENGTH 33
ORDER BY x.num_doc
FORMAT
BEFORE GROUP OF x.num_doc
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET comp_off = ASCII 18
LET comp_on = ASCII 15
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2
LET j = (90 - LENGTH(p_companias.direccion CLIPPED)) / 2
LET i = (90 - LENGTH(p_companias.telefono CLIPPED)) / 2
LET h = (90 - LENGTH(p_companias.rnc CLIPPED)) / 2
PRINT comp_on
PRINT COLUMN lj, normal, doble_on, p_companias.nombre CLIPPED
PRINT COLUMN j + 3, p_companias.direccion
PRINT COLUMN i - 9,
"Tels : ",
p_companias.telefono,
" Fax : ",
p_companias.fax
PRINT COLUMN h - 1,
"RNC : ",
p_companias.rnc CLIPPED,
COLUMN 100,
"Pag. ",
PAGENO USING "###"
PRINT COLUMN h, "NOTAS DE CREDITOS"
IF reimpresion = "S" THEN
PRINT COLUMN i, "RE-IMPRESION"
ELSE
PRINT " "
END IF
PRINT negrillas_on
LET total_bruto = 0
LET total_Desc = 0
# DESCRIPCION BODEGA
SELECT a.descripcion
INTO xbodega
FROM intb00009 a
WHERE a.cod_bodega = fact_gral.bodega
PRINT COLUMN 1,
"Numero : ",
doble_on,
x.num_doc USING "&&&&&&",
doble_off,
negrillas_off
PRINT COLUMN 1,
"CLiente : ",
x.tipo_cliente USING "&&",
"-",
x.sec_cliente USING "&&&&&&&&",
" ",
nombre_cli
PRINT COLUMN 1, "Direccion: ", fact_gral.direccion
PRINT COLUMN 1,
"Vendedor : ",
x.cod_emp_sec USING "&&&&",
" ",
nombre CLIPPED,
",",
apellido
PRINT COLUMN 1,
"Fecha : ",
x.fecha_orig USING "dd/mm/yy",
negrillas_on
PRINT COLUMN 1,
"Doc. Dev : ",
z.aplica_a USING "&&&&&&",
" Factura : ",
fact_gral.factura USING "&&&&&&"
PRINT COLUMN 1,
"Bodega : ",
"(",
fact_gral.bodega USING "<<<",
")",
xbodega
PRINT COLUMN 1, "Concepto : ", x.concepto CLIPPED
PRINT COLUMN 1,
"-----------------------------------------------------------",
"------------------------------------------"
PRINT COLUMN 1,
"Producto",
COLUMN 53,
"Cantidad",
COLUMN 64,
"Precio",
COLUMN 74,
"%Desc",
COLUMN 86,
"Valor Desc",
COLUMN 97,
"Total"
PRINT COLUMN 1,
"-----------------------------------------------------------",
"------------------------------------------"
PRINT COLUMN 1, negrillas_off
AFTER GROUP OF x.num_doc
IF busca1 = "S" THEN
# DISPLAY "bodega ",fact_gral.bodega," COD_MOV ",z.cod_mov," aplica ",z.aplica_a
DECLARE venta1 CURSOR FOR
SELECT DISTINCT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
SUM(a.cantidad_2),
c.precio,
AVG(c.cantidad_2)
FROM iptb00006 a, iptb00002 b, vetb00003 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.factura = c.factura
AND a.cod_mov = z.cod_mov
AND a.num_doc = z.aplica_a
AND a.area = c.area
AND a.bodega = fact_gral.bodega
GROUP BY a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
c.precio
ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec
END IF
IF busca2 = "S" THEN
DECLARE venta2 CURSOR FOR
SELECT DISTINCT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
c.descrip_esp,
SUM(a.cantidad_2),
b.precio,
'0'
FROM iptb00006 a, vetb00025 b, iptb00002 c
WHERE (a.num_doc = z.aplica_a)
AND (a.cod_n = b.cod_n)
AND (a.cod_grupo = b.cod_grupo)
AND (a.cod_tipo = b.cod_tipo)
AND (a.cod_sec = b.cod_sec)
AND (a.cod_n = c.cod_n)
AND (a.cod_grupo = c.cod_grupo)
AND (a.cod_tipo = c.cod_tipo)
AND (a.cod_sec = c.cod_sec)
AND (a.cod_mov = z.cod_mov)
AND a.bodega = fact_gral.bodega
AND b.ventas = "1"
AND b.tipo_cliente IS NULL
GROUP BY a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.precio,
c.descrip_esp
END IF
LET total_bruto = 0
LET salir = "N"
IF busca1 = "S" THEN
FOREACH venta1
INTO reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
PRINT COLUMN 1,
reg_i.area,
" ",
reg_i.cod_n USING "&&&&",
'-',
reg_i.cod_grupo USING "&&&&",
"-",
reg_i.cod_tipo USING "&&&",
"-",
reg_i.cod_sec USING "&&&&",
" ",
reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45,
COLUMN 40,
reg_i.cantidad USING "###,###.#####",
2 SPACES,
reg_i.precio USING "##,###.##",
2 SPACES,
reg_i.descuento USING "##,###.##",
2 SPACES,
pdescuento USING "###,###.##",
COLUMN 88,
reg_i.cantidad * reg_i.precio USING "###,###,###.##"
# IF reimpresion = "N" THEN
INSERT INTO cctb00004(
tipo_Doc,
num_Doc,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
precio,
descuento,
cod_mov,
num_doc_almacen,
bodega,
porc_Desc)
VALUES('NC',
x.num_doc,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.cantidad,
reg_i.precio,
pdescuento,
z.cod_mov,
z.aplica_a,
fact_gral.bodega,
reg_i.descuento)
# END IF
END FOREACH
END IF
IF busca2 = "S" THEN
FOREACH venta2
INTO reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
#LET reg_i.descuento = pdescuento
IF reimpresion = "N" THEN
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
ELSE
LET total_bruto = ptotalb
END IF
PRINT COLUMN 1,
reg_i.cod_n USING "&&&&",
'-',
reg_i.cod_grupo USING "&&&&",
"-",
reg_i.cod_tipo USING "&&&&",
"-",
reg_i.cod_sec USING "&&&&",
" ",
reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45,
COLUMN 40,
reg_i.cantidad USING "###,###.####",
2 SPACES,
reg_i.precio USING "##,###.##",
2 SPACES,
reg_i.descuento USING "##,###.##",
2 SPACES,
pdescuento USING "###,###.##",
COLUMN 88,
(reg_i.cantidad * reg_i.precio) - pdescuento
USING "###,###,###.##"
# IF reimpresion = "N" THEN
INSERT INTO cctb00004(
tipo_Doc,
num_Doc,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
precio,
descuento,
cod_mov,
num_doc_almacen,
bodega,
porc_Desc)
VALUES('NC',
x.num_doc,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.cantidad,
reg_i.precio,
pdescuento,
z.cod_mov,
z.aplica_a,
fact_gral.bodega,
reg_i.descuento)
# END IF
END FOREACH
END IF
IF reimpresion = "S" THEN
DECLARE busca_codigos CURSOR FOR
SELECT a.cod_n,
a.cod_Grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
a.cantidad,
a.precio,
a.porc_desc
FROM cctb00004 a, iptb00002 b
WHERE a.tipo_doc = 'NC'
AND a.num_doc = x.num_doc
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_Sec
LET total_Desc = 0
LET total_bruto = 0
FOREACH busca_codigos
INTO reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
PRINT COLUMN 1,
reg_i.cod_n USING "&&&&",
'-',
reg_i.cod_grupo USING "&&&&",
"-",
reg_i.cod_tipo USING "&&&&",
"-",
reg_i.cod_sec USING "&&&&",
" ",
reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45,
COLUMN 40,
reg_i.cantidad USING "###,###.####",
2 SPACES,
reg_i.precio USING "##,###.##",
2 SPACES,
pdescuento USING "##,###.##",
COLUMN 88,
(reg_i.cantidad * reg_i.precio) - pdescuento
USING "###,###,###.##"
END FOREACH
END IF
IF z.valor_desc IS NULL THEN
LET z.valor_desc = 0
END IF
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
IF x.itbi IS NULL THEN
LET x.itbi = 0
END IF
DISPLAY "1", x.itbi
IF reimpresion = "N" THEN
IF chitbis = "S" THEN
LET x.itbi = (total_bruto - total_desc) * (pitbis / 100)
DISPLAY "2", x.itbi
ELSE
LET x.itbi = 0
DISPLAY "3", x.itbi
END IF
END IF
PRINT COLUMN 88, "--------------"
PRINT COLUMN 60,
" BRUTO : ",
COLUMN 88,
total_bruto USING "###,###,###.##"
PRINT COLUMN 60,
" DESC : ",
COLUMN 88,
total_Desc USING "---,---,###.##"
PRINT COLUMN 60,
"SUB-TOTAL : ",
COLUMN 88,
(total_bruto - total_desc) USING "---,---,###.##"
PRINT COLUMN 60,
" ITBIS : ",
pitbis USING "<<<.##",
"% : ",
COLUMN 88,
x.itbi USING "---,---,###.##"
PRINT COLUMN 60,
" NETO : ",
COLUMN 88,
total_bruto - total_desc + x.itbi USING "---,---,###.##"
LET total_nc = (total_bruto + x.itbi)
IF z.valor_desc IS NULL THEN
LET z.valor_desc = 0
END IF
IF x.itbi IS NULL THEN
LET x.itbi = 0
DISPLAY "4", x.itbi
END IF
{
ACTUALIZACION DE LA TABLA DE CUENTAS POR COBRAR
===============================================
VALOR NETO (total_nc) SE GUARDA EN EL CAMPO: valor,
ITBI (x.itbi) SE GUARDA EN EL CAMPO: valor_efectivo,
EL VALOR BRUTO (total_bruto) SE GUARDA EN EN CAMPO: valor_cheque,
MONTO DE DESCUENTO(total_desc) EN EL CAMPO: monto_desc
EL CAMPO NUM_CHEQUE SE UTILIZA PARA EL NUMERO DE DOCUMENTOS
DE INVENTARIO DEL MOVIMIENTO 12 DE PRODUCTO TERMINADOS}
IF reimpresion = "N" THEN
IF chitbis = 'YES' THEN
LET chitbis = 'SI'
ELSE
LET chitbis = 'NO'
END IF
SELECT a.ult_recibo
INTO p_num_doc
FROM cctb00003 a
WHERE a.tipo_Doc = 'NC'
IF p_num_doc IS NULL THEN
INSERT INTO cctb00003(ult_recibo, tipo_doc) VALUES(1, 'NC')
LET p_num_doc = 1
END IF
LET x.num_doc = p_num_doc + 1
{ INSERT INTO cctb00011 (num_doc,tipo_doc,tipo_cliente,sec_cliente,comentario,chitbis,bodega,porc_itbis,valor_recibo,descuento,
monto_itbis,valor_bruto,sucid)
VALUES (x.num_doc,"NC",x.tipo_cliente,x.sec_cliente,otros_mov.detalle,chitbis,fact_gral.bodega,pitbis,total_nc,
total_desc,x.itbi,total_bruto,psucid)
}
INSERT INTO cctb00011(
num_doc,
tipo_doc,
tipo_cliente,
sec_cliente,
comentario,
chitbis,
bodega,
porc_itbis)
VALUES(x.num_doc,
"NC",
x.tipo_cliente,
x.sec_cliente,
otros_mov.detalle,
chitbis,
fact_gral.bodega,
pitbis)
INSERT INTO log_devoluciones(
num_doc,
cod_mov,
fecha,
tipo_cliente,
sec_cliente,
num_oc,
cotizacion_no,
factura,
observacion,
fecha_trx)
VALUES(x.num_doc,
'NC',
otros_mov.fecha,
x.tipo_cliente,
x.sec_cliente,
ordenx,
xcotizacion,
otros_mov.factura,
'INSERTE EN LA TABLA CCTB00011',
getdate())
LET total_nc = total_nc * -1
LET total_bruto = total_bruto * -1
IF fact_gral.ventas = '1' THEN
LET xtipo_doc = 'FT'
ELSE
LET xtipo_Doc = 'FE'
END IF
IF total_nc > 0 THEN
LET total_nc = total_nc * -1
END IF
INSERT INTO cctb00001(
cod_cia,
tipo_doc,
num_doc,
tipo_cliente,
sec_cliente,
cod_emp_sec,
fecha_orig,
aplica_a,
banco,
num_cheque,
valor,
valor_efectivo,
valor_cheque,
monto_desc,
us_crea,
fech_crea,
bodega,
tipo_doc_aplica,
cod_emp,
num_oc,
documento_ref)
VALUES(cia,
"NC",
x.num_doc,
x.tipo_cliente,
x.sec_cliente,
x.cod_emp_sec,
x.fecha_orig,
fact_gral.factura,
z.cod_mov,
z.aplica_a,
total_nc,
x.itbi,
total_bruto,
total_desc,
usuarios,
GETDATE(),
fact_gral.bodega,
xtipo_doc,
psucid,
ordenx,
xcotizacion)
INSERT INTO log_devoluciones(
num_doc,
cod_mov,
fecha,
tipo_cliente,
sec_cliente,
num_oc,
cotizacion_no,
factura,
observacion,
fecha_trx)
VALUES(x.num_doc,
'NC',
otros_mov.fecha,
x.tipo_cliente,
x.sec_cliente,
ordenx,
xcotizacion,
fact_gral.factura,
'INSERTE EN LA TABLA CCTB00001',
getdate())
UPDATE cctb00003
SET ult_recibo = x.num_doc
WHERE tipo_Doc = 'NC'
END IF
PRINT normal
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 6, " Preparado Por", COLUMN 40, " Autorizado Por"
PRINT " "
PRINT COLUMN 6,
"---------------------------",
COLUMN 36,
"---------------------------"
ON LAST ROW
IF reimpresion = "N" THEN
UPDATE cctb00003
SET ult_recibo = x.num_doc,
us_crea = SUSER_SNAME(),
fech_crea = GETDATE(),
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE tipo_doc IN ("NC")
END IF
END REPORT
REPORT cr_edito1(x, z, nombre_cli, nombre, apellido, cia)
DEFINE x RECORD
num_doc LIKE cctb00001.num_doc,
tipo_cliente LIKE cctb00001.tipo_cliente,
sec_cliente LIKE cctb00001.sec_cliente,
cod_emp_sec LIKE cctb00001.cod_emp_sec,
fecha_orig LIKE cctb00001.fecha_orig,
itbi DECIMAL(12, 2),
concepto CHAR(60)
END RECORD
DEFINE z RECORD
cod_mov LIKE iptb00006.cod_mov,
aplica_a LIKE cctb00001.aplica_a,
valor_pen DECIMAL(12, 2),
desc_p LIKE cctb00001.monto_desc,
valor_desc DECIMAL(12, 2),
valor_pag DECIMAL(12, 2)
END RECORD
DEFINE cia SMALLINT
DEFINE total_nc, total_bruto, sub_total, total_desc, itbis DECIMAL(12, 2)
DEFINE nombre_cli, nombre, apellido CHAR(30)
DEFINE comp_on,
comp_off,
negrillas_on,
negrillas_off,
doble_on,
doble_off,
doce,
normal
CHAR(2)
DEFINE
reg_i RECORD
area SMALLINT,
cod_n INTEGER,
cod_grupo INTEGER,
cod_tipo INTEGER,
cod_sec INTEGER,
descrip_esp CHAR(100),
cantidad DEC(18, 5),
precio DECIMAL(12, 2),
descuento DEC(12, 2)
END RECORD,
lj, j, i, h SMALLINT,
idxecf, id_tipoProducto INT,
xtipo_doc CHAR(2),
xhash VARCHAR(10),
respuesta, xfechaFirma, xrespuesta, codigo STRING,
xfecha_modificada DATE,
ptasa DEC(12, 2),
montoFactura DEC(18, 2)
DEFINE p RECORD
trackId STRING,
codigo INT,
estado, rnc, encf, secuenciaUtilizada, fechaRecepcion STRING,
mensajes DYNAMIC ARRAY OF RECORD
valor STRING,
codigo INT
END RECORD
END RECORD
DEFINE p1 RECORD
trackId, ERROR, mensaje STRING
END RECORD
OUTPUT
TOP MARGIN 0
LEFT MARGIN 4
# PAGE LENGTH 33
ORDER BY x.num_doc
FORMAT
#marmotech tienda, santiago_
#baja y alta resolucion
BEFORE GROUP OF x.num_doc
LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET doce = ASCII 27, ASCII 77
LET normal = ASCII 27, ASCII 80
LET doble_on = ASCII 14
LET doble_off = ASCII 20
LET comp_off = ASCII 18
LET comp_on = ASCII 15
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2
LET j = (90 - LENGTH(p_companias.direccion CLIPPED)) / 2
LET i = (90 - LENGTH(p_companias.telefono CLIPPED)) / 2
LET h = (90 - LENGTH(p_companias.rnc CLIPPED)) / 2
PRINT comp_on
PRINT COLUMN lj, normal, doble_on, p_companias.nombre CLIPPED
PRINT COLUMN j + 3, p_companias.direccion
PRINT COLUMN i - 9,
"Tels : ",
p_companias.telefono,
" Fax : ",
p_companias.fax
PRINT COLUMN h - 1,
"RNC : ",
p_companias.rnc CLIPPED,
COLUMN 100,
"Pag. ",
PAGENO USING "###"
PRINT COLUMN h, "NOTAS DE CREDITOS"
IF reimpresion = "S" THEN
PRINT COLUMN i, "RE-IMPRESION"
ELSE
PRINT " "
END IF
PRINT negrillas_on
LET total_bruto = 0
LET total_Desc = 0
#BUSCA EL NCF DE LA FACTURA EN LA NC
# DE ESTA FORMA ES QUE EL QUERY ESTABA 1/2/2024
# SELECT a.codigo_dgii,a.ncf INTO codigodgii_m,num_ncf_m FROM vetb00072 a WHERE a.documento = fact_gral.factura AND
# a.tipo_doc = 'FT' AND a.sucid = psucid
SELECT a.ncf, a.fecha_factura, a.prima_us, a.porc_itbi, a.neto
INTO codigodgii_m,
xfecha_modificada,
ptasa,
pitbis,
montoFactura
FROM vetb00002 a
WHERE a.factura = fact_gral.factura AND a.sucid = psucid
#BUSCA EL NCF DE LA NC
SELECT a.codigo_dgii, a.tipo_ncf
INTO codigodgii, descripcion_ncf
FROM vetb00071 a
WHERE a.tipo_doc = 'NC' AND a.disponible = "S" AND a.sucid = 1
SELECT a.ncf
INTO ult_ncf
FROM vetb00073 a
WHERE a.tipo_doc = 'NC'
AND a.codigo_dgii = codigodgii
AND a.sucid = 1
IF ult_ncf IS NOT NULL THEN
LET num_ncf = ult_ncf + 1
END IF
# DESCRIPCION BODEGA
SELECT a.descripcion
INTO xbodega
FROM intb00009 a
WHERE a.cod_bodega = fact_gral.bodega
PRINT COLUMN 1,
"Numero : ",
doble_on,
x.num_doc USING "&&&&&&",
doble_off,
negrillas_off
PRINT COLUMN 1,
"CLiente : ",
x.tipo_cliente USING "&&",
"-",
x.sec_cliente USING "&&&&&&&&",
" ",
nombre_cli
PRINT COLUMN 1, "Direccion: ", fact_gral.direccion
PRINT COLUMN 1,
"Vendedor : ",
x.cod_emp_sec USING "&&&&",
" ",
nombre CLIPPED,
",",
apellido
PRINT COLUMN 1,
"Fecha : ",
x.fecha_orig USING "dd/mm/yy",
negrillas_on
PRINT COLUMN 1,
"Doc. Dev : ",
z.aplica_a USING "&&&&&&",
" Factura : ",
fact_gral.factura USING "&&&&&&",
" NCF MODIFICADO:",
codigodgii_m CLIPPED
PRINT COLUMN 1,
"Bodega : ",
"(",
fact_gral.bodega USING "<<<",
")",
xbodega
PRINT COLUMN 1,
"NCF : ",
codigodgii CLIPPED,
num_ncf USING "&&&&&&&&"
PRINT COLUMN 1, "Concepto : ", x.concepto CLIPPED
PRINT COLUMN 1,
"-----------------------------------------------------------",
"------------------------------------------"
PRINT COLUMN 1,
"Producto",
COLUMN 53,
"Cantidad",
COLUMN 64,
"Precio",
COLUMN 74,
"%Desc",
COLUMN 86,
"Valor Desc",
COLUMN 97,
"Total"
PRINT COLUMN 1,
"-----------------------------------------------------------",
"------------------------------------------"
PRINT COLUMN 1, negrillas_off
AFTER GROUP OF x.num_doc
LET dias_factura = TODAY - xfecha_modificada
IF dias_factura <= 30 THEN
LET chitbis = "S"
ELSE
LET chitbis = 'N'
END IF
IF chitbis = 'S' THEN
LET documento_encabezado.IndicadorNotaCredito = '0'
ELSE
LET documento_encabezado.IndicadorNotaCredito = '1'
LET pitbis = 0
END IF
DISPLAY "CHITBIS :", CHITBIS
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
LET total_bruto = 0
LET itbis = 0
LET pdescuento = 0
LET total_desc = 0
IF busca1 = "S" THEN
# DISPLAY "bodega ",fact_gral.bodega," COD_MOV ",z.cod_mov," aplica ",z.aplica_a
DECLARE venta11 CURSOR FOR
SELECT DISTINCT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
SUM(a.cantidad_2),
c.precio,
SUM(c.cantidad_2),
b.tipoproducto
FROM iptb00006 a, iptb00002 b, vetb00003 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 CAST(a.fact_no AS INT) = c.factura
AND a.cod_mov = z.cod_mov
AND a.num_doc = z.aplica_a
AND a.area = c.area
GROUP BY a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
c.precio,
b.tipoproducto
ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec
END IF
LET idxecf = 1
IF busca2 = "S" THEN
DECLARE venta21 CURSOR FOR
SELECT DISTINCT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
c.descrip_esp,
SUM(a.cantidad_2),
b.precio,
'0',
c.tipoproducto
FROM iptb00006 a, vetb00025 b, iptb00002 c
WHERE (a.num_doc = z.aplica_a)
AND (a.cod_n = b.cod_n)
AND (a.cod_grupo = b.cod_grupo)
AND (a.cod_tipo = b.cod_tipo)
AND (a.cod_sec = b.cod_sec)
AND (a.cod_n = c.cod_n)
AND (a.cod_grupo = c.cod_grupo)
AND (a.cod_tipo = c.cod_tipo)
AND (a.cod_sec = c.cod_sec)
AND (a.cod_mov = z.cod_mov)
AND b.ventas = "1"
AND b.tipo_cliente IS NULL
GROUP BY a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.precio,
c.descrip_esp,
c.tipoproducto
END IF
LET salir = "N"
IF busca1 = "S" THEN
FOREACH venta11
INTO reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento,
id_tipoProducto
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
LET total_desc =
(reg_i.precio * reg_i.cantidad)
* (reg_i.descuento / 100)
+ total_desc
LET pdescuento = reg_i.precio * (reg_i.descuento / 100)
LET itbis =
((reg_i.precio - pdescuento) * reg_i.cantidad)
* (pitbis / 100)
# LET reg_i.precio = reg_i.precio + itbis
PRINT COLUMN 1,
reg_i.area,
" ",
reg_i.cod_n USING "&&&&",
'-',
reg_i.cod_grupo USING "&&&&",
"-",
reg_i.cod_tipo USING "&&&",
"-",
reg_i.cod_sec USING "&&&&",
" ",
reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45,
COLUMN 40,
reg_i.cantidad USING "###,###.#####",
2 SPACES,
reg_i.precio USING "##,###.##",
2 SPACES,
reg_i.descuento USING "##,###.##",
2 SPACES,
pdescuento USING "###,###.##",
COLUMN 88,
reg_i.cantidad * reg_i.precio USING "###,###,###.##"
LET reg_i.precio = reg_i.precio - pdescuento
# IF reimpresion = "N" THEN
INSERT INTO cctb00010(
tipo_Doc,
num_Doc,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
precio,
descuento,
cod_mov,
num_doc_almacen,
bodega,
porc_Desc,
itbis,
us_crea,
fech_crea,
descripcion)
VALUES('NC',
x.num_doc,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.cantidad,
reg_i.precio,
'0',
z.cod_mov,
z.aplica_a,
fact_gral.bodega,
'0',
itbis,
usuarios,
getdate(),
reg_i.descrip_esp)
# END IF
----------->Documento Detalle OBLIGATORIO NC
LET documento_detalle[idxecf].DescripcionItem = NULL
LET documento_detalle[idxecf].cantidadItem =
reg_i.cantidad USING "<<<<<<<<<<<<<&.##"
LET documento_detalle[idxecf].montoItem =
(reg_i.precio * reg_i.cantidad) * ptasa
USING "<<<<<<<<<<<<<&.##"
LET documento_detalle[idxecf].precioUnitarioItem =
reg_i.precio * ptasa USING "<<<<<<<<<<<&.##"
LET documento_detalle[idxecf].indicadorFacturacion =
'1' --no s que campo colocar
LET documento_detalle[idxecf].nombreItem =
reg_i.descrip_esp[
1,
79] CLIPPED --Tengo la descripcion pero no el nombre del producto
LET documento_detalle[idxecf].indicadorBienoServicio =
id_tipoProducto --el generafile llena este campo, pero no estoy convencido
LET idxecf = idxecf + 1
END FOREACH
END IF
IF busca2 = "S" THEN
FOREACH venta21
INTO reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento,
id_tipoProducto
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
#LET reg_i.descuento = pdescuento
IF reimpresion = "N" THEN
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
ELSE
LET total_bruto = ptotalb
END IF
PRINT COLUMN 1,
reg_i.cod_n USING "&&&&",
'-',
reg_i.cod_grupo USING "&&&&",
"-",
reg_i.cod_tipo USING "&&&&",
"-",
reg_i.cod_sec USING "&&&&",
" ",
reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45,
COLUMN 40,
reg_i.cantidad USING "###,###.####",
2 SPACES,
reg_i.precio USING "##,###.##",
2 SPACES,
reg_i.descuento USING "##,###.##",
2 SPACES,
pdescuento USING "###,###.##",
COLUMN 88,
(reg_i.cantidad * reg_i.precio) - pdescuento
USING "###,###,###.##"
LET reg_i.precio = reg_i.precio - pdescuento
# IF reimpresion = "N" THEN
INSERT INTO cctb00010(
tipo_Doc,
num_Doc,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
precio,
descuento,
cod_mov,
num_doc_almacen,
bodega,
porc_Desc,
itbis,
us_crea,
fech_crea)
VALUES('NC',
x.num_doc,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.cantidad,
reg_i.precio,
'0',
z.cod_mov,
z.aplica_a,
fact_gral.bodega,
'0',
itbis,
usuarios,
getdate())
#
# END IF
----------->Documento Detalle OBLIGATORIO NC
LET documento_detalle[idxecf].DescripcionItem = NULL
LET documento_detalle[idxecf].cantidadItem =
reg_i.cantidad USING "<<<<<<<<<<<<<<.##"
LET documento_detalle[idxecf].montoItem =
(reg_i.precio * reg_i.cantidad) * ptasa
USING "<<<<<<<<<<<<<<.##"
LET documento_detalle[idxecf].precioUnitarioItem =
reg_i.precio * ptasa USING "<<<<<<<<<<<<.##"
LET documento_detalle[idxecf].indicadorFacturacion =
'1' --no s que campo colocar
LET documento_detalle[idxecf].nombreItem =
reg_i.descrip_esp[
1,
79] CLIPPED --Tengo la descripcion pero no el nombre del producto
LET documento_detalle[idxecf].indicadorBienoServicio =
id_tipoProducto --el generafile llena este campo, pero no estoy convencido
LET idxecf = idxecf + 1
END FOREACH
END IF
IF reimpresion = "S" THEN
DECLARE busca_codigos1 CURSOR FOR
SELECT a.cod_n,
a.cod_Grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
a.cantidad,
a.precio,
a.porc_desc,
b.tipoproducto
FROM cctb00004 a, iptb00002 b
WHERE a.tipo_doc = 'NC'
AND a.num_doc = x.num_doc
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_Sec
LET total_Desc = 0
LET total_bruto = 0
LET idxecf = 1
FOREACH busca_codigos1
INTO reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento,
id_tipoProducto
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
PRINT COLUMN 1,
reg_i.cod_n USING "&&&&",
'-',
reg_i.cod_grupo USING "&&&&",
"-",
reg_i.cod_tipo USING "&&&&",
"-",
reg_i.cod_sec USING "&&&&",
" ",
reg_i.descrip_esp WORDWRAP RIGHT MARGIN 45,
COLUMN 40,
reg_i.cantidad USING "###,###.####",
2 SPACES,
reg_i.precio USING "##,###.##",
2 SPACES,
pdescuento USING "##,###.##",
COLUMN 88,
(reg_i.cantidad * reg_i.precio) - pdescuento
USING "###,###,###.##"
LET reg_i.precio = reg_i.precio - pdescuento
----------->Documento Detalle OBLIGATORIO NC
LET documento_detalle[idxecf].DescripcionItem = NULL
LET documento_detalle[idxecf].cantidadItem =
reg_i.cantidad USING "<<<<<<<<<<<<<<.##"
LET documento_detalle[idxecf].montoItem =
(reg_i.precio * reg_i.cantidad) * ptasa
USING "<<<<<<<<<<<<<<.##"
LET documento_detalle[idxecf].precioUnitarioItem =
reg_i.precio * ptasa USING "<<<<<<<<<<<<.##"
LET documento_detalle[idxecf].indicadorFacturacion =
'1' --no s que campo colocar
LET documento_detalle[idxecf].nombreItem =
reg_i.descrip_esp[
1,
79] CLIPPED --Tengo la descripcion pero no el nombre del producto
LET documento_detalle[idxecf].indicadorBienoServicio =
id_tipoProducto --el generafile llena este campo, pero no estoy convencido
LET idxecf = idxecf + 1
END FOREACH
END IF
IF z.valor_desc IS NULL THEN
LET z.valor_desc = 0
END IF
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
IF x.itbi IS NULL THEN
LET x.itbi = 0
END IF
--_chitbis
IF reimpresion = "N" THEN
IF chitbis = "S" THEN
LET x.itbi = (total_bruto - total_desc) * (pitbis / 100)
ELSE
LET x.itbi = 0
END IF
END IF
LET total_nc = (total_bruto - total_Desc + x.itbi)
PRINT COLUMN 88, "--------------"
PRINT COLUMN 60,
" BRUTO : ",
COLUMN 88,
total_bruto USING "###,###,###.##"
PRINT COLUMN 60,
" DESC : ",
COLUMN 88,
total_Desc USING "---,---,###.##"
PRINT COLUMN 60,
"SUB-TOTAL : ",
COLUMN 88,
(total_bruto - total_desc) USING "---,---,###.##"
PRINT COLUMN 60,
" ITBIS : ",
pitbis USING "<<<.##",
"% : ",
COLUMN 88,
x.itbi USING "---,---,###.##"
PRINT COLUMN 60,
" NETO : ",
COLUMN 88,
total_nc USING "---,---,###.##"
IF z.valor_desc IS NULL THEN
LET z.valor_desc = 0
END IF
IF x.itbi IS NULL THEN
LET x.itbi = 0
END IF
{
ACTUALIZACION DE LA TABLA DE CUENTAS POR COBRAR
===============================================
VALOR NETO (total_nc) SE GUARDA EN EL CAMPO: valor,
ITBI (x.itbi) SE GUARDA EN EL CAMPO: valor_efectivo,
EL VALOR BRUTO (total_bruto) SE GUARDA EN EN CAMPO: valor_cheque,
MONTO DE DESCUENTO(total_desc) EN EL CAMPO: monto_desc
EL CAMPO NUM_CHEQUE SE UTILIZA PARA EL NUMERO DE DOCUMENTOS
DE INVENTARIO DEL MOVIMIENTO 12 DE PRODUCTO TERMINADOS}
IF reimpresion = "N" THEN
IF _chitbis = 'YES' THEN
LET _chitbis = 'SI'
ELSE
LET _chitbis = 'NO'
END IF
# BEGIN WORK
INSERT INTO cctb00011(
num_doc,
tipo_doc,
tipo_cliente,
sec_cliente,
comentario,
chitbis,
bodega,
porc_itbis,
valor_recibo,
descuento,
monto_itbis,
valor_bruto,
sucid,
tipo_nc)
VALUES(x.num_doc,
"NC",
x.tipo_cliente,
x.sec_cliente,
otros_mov.detalle,
chitbis,
fact_gral.bodega,
pitbis,
total_nc,
total_desc,
x.itbi,
total_bruto,
psucid,
'01')
LET total_nc = total_nc * -1
LET total_bruto = total_bruto * -1
IF fact_gral.ventas = '1' THEN
LET xtipo_doc = 'FT'
ELSE
LET xtipo_Doc = 'FE'
END IF
SELECT MAX(a.fecha_Ven)
INTO fechaVencimiento
FROM cctb00001 a
WHERE a.num_doc = fact_gral.factura
AND a.tipo_doc = xtipo_doc
AND a.tipo_cliente = x.tipo_cliente
AND a.sec_cliente = x.sec_cliente
IF num_ncf > 0 THEN
UPDATE vetb00073
SET ncf = num_ncf
WHERE tipo_doc = 'NC'
AND codigo_dgii = codigodgii
AND sucid = 1
INSERT INTO vetb00072(
documento,
tipo_doc,
codigo_dgii,
ncf,
us_crea,
fech_crea,
sucid)
VALUES(x.num_doc,
'NC',
codigodgii,
num_ncf,
usuarios,
getdate(),
psucid)
END IF
IF total_nc > 0 THEN
LET total_nc = total_nc * -1
END IF
LET documento_encabezado.eNcf =
"E", codigodgii CLIPPED, num_ncf USING "&&&&&&&&&&"
INSERT INTO cctb00001(
cod_cia,
tipo_doc,
num_doc,
tipo_cliente,
sec_cliente,
cod_emp_sec,
fecha_orig,
aplica_a,
banco,
num_cheque,
valor,
valor_efectivo,
valor_cheque,
monto_desc,
us_crea,
fech_crea,
bodega,
tipo_doc_aplica,
cod_emp,
sucid,
localidad_aplica_a,
num_oc,
documento_ref,
num_doc_c,
ncf,
itbis)
VALUES(cia,
"NC",
x.num_doc,
x.tipo_cliente,
x.sec_cliente,
x.cod_emp_sec,
x.fecha_orig,
fact_gral.factura,
z.cod_mov,
z.aplica_a,
total_nc,
total_bruto,
'0',
'0', # total_desc---COLOQUE ESTO EN COMENTARIO PORQUE ESTABA DISTORCIONANDO EL VALOR CUANDO SE IMPRIMEN LOS REPORTES,
usuarios,
GETDATE(),
fact_gral.bodega,
xtipo_doc,
psucid,
psucid,
psucid,
ordenx,
xcotizacion,
num_cr_e,
documento_encabezado.eNcf,
x.itbi)
UPDATE cctb00003
SET ult_recibo = x.num_doc
WHERE tipo_Doc = 'NC'
------->Documento Encabezado OBLIGATORIO
LET documento_encabezado.tipoEcf = '34'
LET documento_encabezado.rncEmisor = p_companias.rnc CLIPPED
LET documento_encabezado.razonSocialEmisor =
p_companias.nombre CLIPPED
LET documento_encabezado.direccionEmisor =
p_companias.direccion CLIPPED
LET documento_encabezado.Municipio =
id_municipio_dgii USING "&&&&&&"
LET documento_encabezado.Provincia =
id_provincia_dgii USING "&&&&&&"
LET documento_encabezado.fechaLimitePago =
fechaVencimiento USING "dd-mm-yyyy"
IF total_nc < 0 THEN
LET total_nc = total_nc * -1
END IF
LET documento_encabezado.montoTotal =
total_nc * ptasa USING "<<<<<<<<<<<<<<<&.##"
# IF x.itbi > 0 THEN
IF x.itbi IS NULL THEN
LET x.itbi = 0
END IF
LET documento_encabezado.montoGravadoTotal =
(total_nc - x.itbi) * ptasa USING "<<<<<<<<<<<<<&.##"
LET documento_encabezado.montoGravadoI1 =
(total_nc - x.itbi) * ptasa USING "<<<<<<<<<<<<<&.##"
LET documento_encabezado.itbis1 = pitbis USING "&&"
LET documento_encabezado.totalItbis =
x.itbi * ptasa USING "<<<<<<<<<<<<<<<&.##"
LET documento_encabezado.totalItbis1 =
x.itbi * ptasa USING "<<<<<<<<<<<<<<<&.##"
# END IF
LET documento_encabezado.tipoIngreso = '01'
LET documento_encabezado.indicadorMontoGravado = '0'
LET documento_encabezado.razonSocialComprador =
nombre_cli CLIPPED
LET documento_encabezado.codigoVendedor = x.cod_emp_sec
LET documento_encabezado.numeroFacturaInterna =
fact_gral.factura
LET documento_encabezado.fechaEmision =
x.fecha_orig
USING "dd-mm-yyyy" --Creo deberia usar getdate porque es una fecha diferente
{Si es un getdate entonces restar dias fecha emision de fecha_org, si es > 30 entonces llenar
IndicadorNotaCredito }
LET documento_encabezado.NCFmodificado = codigodgii_m CLIPPED
LET documento_encabezado.fechaNCFmodificado =
xfecha_modificada USING "dd-mm-yyyy"
# LET documento_encabezado.codigoModificacion = idtipo
LET documento_encabezado.nombreFile =
p_companias.rnc CLIPPED,
"E",
codigodgii CLIPPED,
num_ncf USING "&&&&&&&&&&",
".xml"
IF total_nc < 0 THEN
LET total_nc = total_nc * 1
END IF
IF montoFactura <> total_nc THEN
LET documento_encabezado.codigoModificacion = 3
ELSE
LET documento_encabezado.codigoModificacion = 1
END IF
#LET documento_encabezado.fechaEmision=NULL
IF (total_nc - x.itbi) * ptasa > 0 THEN
CALL generafile(
documento_encabezado.*,
documento_detalle,
psucid,
psucid,
'adicionar')
RETURNING xhash, respuesta, xfechaFirma, codigo
DISPLAY "Aqui es lo que viene IPPRMT044: ",
respuesta,
" codigo: ",
codigo
UPDATE cctb00001
SET hash = xhash,
ultima_respuesta = respuesta,
fechaFirmaDigital = xfechaFirma
WHERE num_doc = x.num_doc AND tipo_Doc = 'NC'
IF codigo = '200' THEN
CALL procesoEncf(
' ',
"produccion",
' ',
0,
0,
'consultatrackid',
respuesta)
RETURNING phash, xrespuesta, codigo
DISPLAY "consulta trackid: ", xrespuesta
IF codigo = '200' THEN
CALL util.JSON.parse(xrespuesta, p)
ELSE
DISPLAY "consulta trackid CON ERROR: ", xrespuesta
END IF
ELSE
CALL util.JSON.parse(respuesta, p1)
DISPLAY "consulta trackid CON ERROR DEL PRIMER IF: ",
xrespuesta
LET p.trackId = p1.trackId
END IF
# TRY
# CALL procesoEncf(' ',"test",' ',0,0,'consultatrackid',respuesta)
# RETURNING phash,xrespuesta
# CALL util.JSON.parse(xrespuesta,p)
# DISPLAY "estado respuesta: ",p.estado
# CATCH
# LET xtrack.mensaje="NO PUDE PARSEAR LA RESPUESTA EN EL PROGRAMA IPPRMT044"
# END TRY
UPDATE cctb00001
SET trackid = p.trackId,
estado_dgii = p.estado,
mensaje = p1.mensaje
WHERE num_doc = x.num_doc AND tipo_Doc = 'NC'
END IF
END IF
PRINT NORMAL
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 6, " Preparado Por", COLUMN 40, " Autorizado Por"
PRINT " "
PRINT COLUMN 6,
"---------------------------",
COLUMN 36,
"---------------------------"
ON LAST ROW
IF reimpresion = "N" THEN
UPDATE cctb00003
SET ult_recibo = x.num_doc,
us_crea = SUSER_SNAME(),
fech_crea = GETDATE(),
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE tipo_doc IN ("NC")
END IF
END REPORT
REPORT cr_edito1_encf(x, z, nombre_cli, nombre, apellido, cia)
DEFINE x RECORD
num_doc LIKE cctb00001.num_doc,
tipo_cliente LIKE cctb00001.tipo_cliente,
sec_cliente LIKE cctb00001.sec_cliente,
cod_emp_sec LIKE cctb00001.cod_emp_sec,
fecha_orig LIKE cctb00001.fecha_orig,
itbi DECIMAL(12, 2),
concepto CHAR(60)
END RECORD
DEFINE z RECORD
cod_mov LIKE iptb00006.cod_mov,
aplica_a LIKE cctb00001.aplica_a,
valor_pen DECIMAL(12, 2),
desc_p LIKE cctb00001.monto_desc,
valor_desc DECIMAL(12, 2),
valor_pag DECIMAL(12, 2)
END RECORD
DEFINE cia SMALLINT
DEFINE total_nc,
total_bruto,
sub_total,
total_desc,
itbis,
valor_neto,
valor_bruto,
total_neto
DECIMAL(12, 2)
DEFINE nombre_cli, nombre, apellido CHAR(30)
DEFINE
reg_i RECORD
area SMALLINT,
cod_n INTEGER,
cod_grupo INTEGER,
cod_tipo INTEGER,
cod_sec INTEGER,
descrip_esp CHAR(100),
cantidad DEC(18, 5),
precio DECIMAL(12, 2),
descuento DEC(12, 2)
END RECORD,
ch_ncf_m, ch_ncf STRING
ORDER BY x.num_doc
FORMAT
#marmotech tienda, santiago_
#baja y alta resolucion
BEFORE GROUP OF x.num_doc
PRINTX p_companias.nombre,
p_companias.direccion,
p_companias.telefono,
p_companias.rnc
LET total_bruto = 0
LET total_Desc = 0
#BUSCA EL NCF DE LA FACTURA EN LA NC
# SELECT a.ncf INTO codigodgii_m FROM vetb00072 a WHERE a.documento = fact_gral.factura AND
# a.tipo_doc = 'FT' AND a.sucid = psucid
#BUSCA EL NCF DE LA NC
SELECT a.codigo_dgii, a.tipo_ncf
INTO codigodgii, descripcion_ncf
FROM vetb00071 a
WHERE a.tipo_doc = 'NC' AND a.disponible = "S" AND a.sucid = 1
SELECT a.ncf
INTO ult_ncf
FROM vetb00073 a
WHERE a.tipo_doc = 'NC'
AND a.codigo_dgii = codigodgii
AND a.sucid = 1
IF ult_ncf IS NOT NULL THEN
LET num_ncf = ult_ncf + 1
END IF
# DESCRIPCION BODEGA
SELECT a.descripcion
INTO xbodega
FROM intb00009 a
WHERE a.cod_bodega = fact_gral.bodega
# LET ch_ncf = "E",codigodgii CLIPPED,num_ncf USING "&&&&&&&&&&"
LET ch_ncf_m = codigodgii_m CLIPPED
PRINTX x.tipo_cliente,
x.sec_cliente,
nombre_cli,
fact_gral.direccion,
x.cod_emp_sec,
nombre,
apellido,
x.fecha_orig,
z.aplica_a,
fact_gral.factura,
ch_ncf_m,
ch_ncf
PRINTX fact_gral.bodega, xbodega
PRINTX x.concepto
AFTER GROUP OF x.num_doc
IF busca1 = "S" THEN
# DISPLAY "bodega ",fact_gral.bodega," COD_MOV ",z.cod_mov," aplica ",z.aplica_a
DECLARE venta111 CURSOR FOR
SELECT DISTINCT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
SUM(a.cantidad_2),
c.precio,
AVG(c.cantidad_2)
FROM iptb00006 a, iptb00002 b, vetb00003 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 CAST(a.fact_no AS INT) = c.factura
AND a.cod_mov = z.cod_mov
AND a.num_doc = z.aplica_a
AND a.area = c.area
GROUP BY a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
c.precio
ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec
END IF
IF busca2 = "S" THEN
DECLARE venta211 CURSOR FOR
SELECT DISTINCT a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
c.descrip_esp,
SUM(a.cantidad_2),
b.precio,
'0'
FROM iptb00006 a, vetb00025 b, iptb00002 c
WHERE (a.num_doc = z.aplica_a)
AND (a.cod_n = b.cod_n)
AND (a.cod_grupo = b.cod_grupo)
AND (a.cod_tipo = b.cod_tipo)
AND (a.cod_sec = b.cod_sec)
AND (a.cod_n = c.cod_n)
AND (a.cod_grupo = c.cod_grupo)
AND (a.cod_tipo = c.cod_tipo)
AND (a.cod_sec = c.cod_sec)
AND (a.cod_mov = z.cod_mov)
AND b.ventas = "1"
AND b.tipo_cliente IS NULL
GROUP BY a.area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.precio,
c.descrip_esp
END IF
LET total_bruto = 0
LET salir = "N"
IF busca1 = "S" THEN
FOREACH venta111
INTO reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
LET valor_bruto = reg_i.cantidad * reg_i.precio
PRINTX reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento,
pdescuento,
valor_bruto
END FOREACH
END IF
IF busca2 = "S" THEN
FOREACH venta211
INTO reg_i.area,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
#LET reg_i.descuento = pdescuento
IF reimpresion = "N" THEN
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
ELSE
LET total_bruto = ptotalb
END IF
LET valor_neto =
(reg_i.cantidad * reg_i.precio) - pdescuento
PRINTX COLUMN 1,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento,
pdescuento,
valor_neto
IF reimpresion = "N" THEN
INSERT INTO cctb00004(
tipo_Doc,
num_Doc,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
precio,
descuento,
cod_mov,
num_doc_almacen,
bodega,
porc_Desc)
VALUES('NC',
x.num_doc,
reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.cantidad,
reg_i.precio,
pdescuento,
z.cod_mov,
z.aplica_a,
fact_gral.bodega,
reg_i.descuento)
END IF
END FOREACH
END IF
IF reimpresion = "S" THEN
DECLARE busca_codigos11 CURSOR FOR
SELECT a.cod_n,
a.cod_Grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
a.cantidad,
a.precio,
a.porc_desc
FROM cctb00004 a, iptb00002 b
WHERE a.tipo_doc = 'NC'
AND a.num_doc = x.num_doc
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_Sec
LET total_Desc = 0
LET total_bruto = 0
FOREACH busca_codigos11
INTO reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
reg_i.descuento
IF reg_i.cantidad IS NULL THEN
LET reg_i.cantidad = 0
END IF
IF reg_i.precio IS NULL THEN
LET reg_i.precio = 0
END IF
LET pdescuento =
(reg_i.cantidad * reg_i.precio)
* (reg_i.descuento / 100)
LET total_desc = pdescuento + total_desc
LET total_bruto =
total_bruto + (reg_i.cantidad * reg_i.precio)
LET valor_neto =
(reg_i.cantidad * reg_i.precio) - pdescuento
PRINTX reg_i.cod_n,
reg_i.cod_grupo,
reg_i.cod_tipo,
reg_i.cod_sec,
reg_i.descrip_esp,
reg_i.cantidad,
reg_i.precio,
pdescuento,
valor_neto
END FOREACH
END IF
IF z.valor_desc IS NULL THEN
LET z.valor_desc = 0
END IF
SELECT a.porc_itbi
INTO pitbis
FROM vetb00002 a
WHERE a.factura = fact_gral.factura
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
IF x.itbi IS NULL THEN
LET x.itbi = 0
END IF
--_chitbis
IF reimpresion = "N" THEN
IF chitbis = "S" THEN
LET x.itbi = (total_bruto - total_desc) * (pitbis / 100)
ELSE
LET x.itbi = 0
END IF
END IF
LET sub_total = (total_bruto - total_desc)
LET total_neto = sub_total + x.itbi
PRINTX total_bruto,
total_Desc,
sub_total,
pitbis,
x.itbi,
total_neto
LET total_nc = total_neto
IF z.valor_desc IS NULL THEN
LET z.valor_desc = 0
END IF
IF x.itbi IS NULL THEN
LET x.itbi = 0
END IF
{
ACTUALIZACION DE LA TABLA DE CUENTAS POR COBRAR
===============================================
VALOR NETO (total_nc) SE GUARDA EN EL CAMPO: valor,
ITBI (x.itbi) SE GUARDA EN EL CAMPO: valor_efectivo,
EL VALOR BRUTO (total_bruto) SE GUARDA EN EN CAMPO: valor_cheque,
MONTO DE DESCUENTO(total_desc) EN EL CAMPO: monto_desc
EL CAMPO NUM_CHEQUE SE UTILIZA PARA EL NUMERO DE DOCUMENTOS
DE INVENTARIO DEL MOVIMIENTO 12 DE PRODUCTO TERMINADOS}
IF reimpresion = "N" THEN
IF _chitbis = 'YES' THEN
LET _chitbis = 'SI'
ELSE
LET _chitbis = 'NO'
END IF
END IF
ON LAST ROW
END REPORT
{
FUNCTION integridad()
IF sqlca.sqlcode < 0 THEN
LET numero_msg = sqlca.sqlcode
CALL msg(numero_msg)
DISPLAY numero_msg AT 23,70
LET bandera = 1
LET status = 0
SLEEP 2
RETURN
END IF
RETURN
END FUNCTION
}
FUNCTION repetir1()
DEFINE ant_art RECORD
aplica_a INTEGER,
valor_pag INTEGER
END RECORD
LET ant_art.aplica_a = otros_mov.num_doc --CHEQUEAR SI ES FACTURA
LET ant_art.valor_pag = arr_recibo.valor_pag
--FOR idx = 1 to arr_count()
--IF idx != curr THEN
IF arr_recibo.aplica_a IS NOT NULL AND arr_recibo.valor_pag IS NOT NULL THEN
IF arr_recibo.aplica_a = ant_art.aplica_a
AND arr_recibo.valor_pag = ant_art.valor_pag THEN
--LET numero_msg = 21
--CALL msg(numero_msg)
LET bandera = 1
ELSE
IF bandera != 1 THEN
LET bandera = 0
END IF
END IF
END IF
--END IF
--END FOR
DISPLAY "REPITIENDO bandera", bandera
END FUNCTION
FUNCTION prod()
LET a_ano = YEAR(p_fechas)
LET mes_control = MONTH(TODAY)
LET mes_calc = mes_control
IF mes_calc = 01 THEN
LET mes_calc = 13
LET a_ano = YEAR(TODAY - 32)
END IF
--Aqui la funcion se posicionaba en dos meses
--para el control del documento
LET mes_calc = mes_calc - 2
IF mes_calc <= 0 THEN
LET mes_calc = 12
LET a_ano = YEAR(TODAY) - 1
END IF
LET c_ano = YEAR(TODAY)
SELECT MIN(fecha_corte)
INTO fecha_c
FROM prdtable
WHERE fecha_corte >= p_fechas
IF status = NOTFOUND THEN
LET numero_msg = 58
CALL msg(numero_msg)
LET bandera = 1
END IF
SELECT MIN(dias_gracia) INTO dia FROM prdtable WHERE fecha_corte = fecha_c
IF dia IS NULL THEN
LET dia = 0
END IF
SELECT UNIQUE a.usuario FROM seg0003 a WHERE a.usuario = SUSER_SNAME()
IF STATUS != NOTFOUND THEN
LET fecha_c = fecha_c + dia
END IF
LET comp_fech = fecha_c
LET comp_fech1 = TODAY
IF comp_fech < comp_fech1 THEN
LET numero_msg = 57
CALL msg(numero_msg)
LET bandera = 1
END IF
END FUNCTION
FUNCTION informacion()
CALL bodegas(1)
SELECT a.descripcion
INTO xbodega
FROM intb00009 a
WHERE a.cod_bodega = fact_gral.bodega
SELECT b.nombre,
a.calle || ' ' || a.casa_num || ' ' || a.urbanizacion || ' ' || a.barrio
INTO nom_cli, fact_gral.direccion
FROM vetb00004 b, vetb00005 a
WHERE (b.tipo_cliente = recibo.tipo_cliente)
AND (b.sec_cliente = recibo.sec_cliente)
AND b.tipo_cliente = a.tipo_cliente
AND b.sec_cliente = a.sec_cliente
SELECT a.nom1_emp, a.apell1_emp
INTO descrip2, descrip3
FROM adtb00003 a
WHERE a.num_emp = psec_vend
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
DISPLAY BY NAME recibo.*, nom_cli, nombre_emp, fact_gral.bodega
DISPLAY arr_recibo.cod_mov TO s_recibo[1].cod_mov
DISPLAY arr_recibo.aplica_a TO s_recibo[1].aplica_a
DISPLAY arr_recibo.valor_pag TO s_recibo[1].valor_pag
DISPLAY arr_recibo.valor_pag TO s_recibo[1].valor_pag
DISPLAY xdescuento TO s_recibo[1].val_desc
DISPLAY ptotalb TO s_recibo[1].valor_pen
END FUNCTION
FUNCTION existenciaMinima()
DEFINE
encabezado, cuerpo, aquienEmail, ccAquien STRING,
i INT
LET aquienEmail = "almacenplanta@marmotech.com.do"
LET ccAquien = "notificacion@marmotech.com.do"
LET encabezado = 'AVISO EXISTENCIA MINIMA ALMACENES PRODUCTOS TERMINADOS'
LET cuerpo =
"<style>",
" table, td, th {
border: 1px solid black;
}
</style>",
"<table align='right'>",
"<thead><tr><th colspan='3'>CON EL DOCUMENTO&nbsp",
otros_mov.num_doc USING "&&&&&&&&",
"PERTENECIENTE AL MOVIMIENTO&nbsp(",
otros_mov.cod_mov USING "&&&",
")",
pdescripmov CLIPPED,
"</th></tr></thead>",
"<tr>",
"<th>PRODUCTOS</th>",
"<th>CANTIDAD TRANSACC</th>",
"<th>CANTIDAD MINIMA</th>",
"<th>EXISTENCIA</th></tr>",
"<tbody>"
LET cuerpo = cuerpo CLIPPED, "<tr>"
FOR i = 1 TO movi2.getLength()
# PROCEDIMIENTO ENVIO CORREO PARA LA EXISTENCIA MINIMA
LET existenciaact[i] = (existenciaact[i] - (movi2[i].cantidad_2 * -1))
IF existminima[i] > 0 THEN
LET porcientocontrol[i] = (existminima[i] / existenciaact[i]) * 100
DISPLAY "PORCIENTO ",
existminima[i],
" ",
existenciaact[i],
" ",
porcientocontrol[i],
" ",
status_m
END IF
LET enviaCorreo = "NO"
IF porcientocontrol[i] >= 75
AND status_m = 2
AND existminIma[i] > 0 THEN
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
LET enviaCorreo = "SI"
LET cuerpo =
cuerpo CLIPPED,
"<td>",
movi2[i].descrip_esp CLIPPED,
"</td>",
"<td>",
movi2[i].cantidad_2 USING "##,###.##",
"</td>",
"<td>",
existminima[i] USING "##,###.##",
"</td>",
"<td>",
existenciaact[i] USING "##,###.##",
"</td>",
"</tr>"
LET enviaEmailProd[i] = "SI"
END IF
IF porcientocontrol[i] <= 0 AND status_m = 2 AND existminIma[i] > 0 THEN
# INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES
LET enviaCorreo = "SI"
LET cuerpo_correo =
cuerpo_correo CLIPPED,
"<td>",
movi2[i].descrip_esp CLIPPED,
"</td>",
"<td>",
movi2[i].cantidad_2 USING "##,###.##",
"</td>",
"<td>",
existminima[i] USING "##,###.##",
"</td>",
"<td>",
existenciaact[i] USING "##,###.##",
"</td>",
"</tr>"
LET enviaEmailProd[i] = "SI"
END IF
END FOR
IF enviaCorreo = "SI" THEN
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
# CALL envia_correo(aquienEmail,ccAquien,cuerpo,
# encabezado, procedimiento )
END IF
END FUNCTION
FUNCTION toPDF()
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
CALL configureOutput("PDF") RETURNING HANDLER
START REPORT formu4 TO XML HANDLER handler
DECLARE buscapdf CURSOR FOR
SELECT a.area,
c.nombre_area,
a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
a.cantidad_1,
a.cantidad_2,
'0',
b.unidad_med,
b.descrip_esp
FROM iptb00006 a, iptb00002 b, prtb00016 c
WHERE a.num_doc = otros_mov.num_doc
AND a.cod_mov = otros_mov.cod_mov
AND a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_grupo
AND a.cod_tipo = b.cod_tipo
AND a.cod_sec = b.cod_Sec
AND a.bodega = otros_mov.bodega
AND a.fech_crea > '01/01/2009 08:00'
AND a.area = c.area_num
ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec
LET idx = 1
FOREACH buscapdf INTO movi2[idx].*
IF movi2[idx].cantidad_2 < 0 THEN
LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1
END IF
SELECT SUM(a.cantidad)
INTO cantidad_conduce
FROM prtb00013 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.num_oc = ordenx
AND a.status_t IS NULL
LET cantidad_orden = 0
IF otros_mov.cod_mov = 30 AND otros_mov.cod_mov = 31
OR otros_mov.cod_mov = 55 THEN
SELECT SUM(a.cantidad_2 * - 1)
INTO cantidad_orden
FROM iptb00006 a
WHERE a.cod_n = movi2[idx].cod_n
AND a.cod_grupo = movi2[idx].cod_grupo
AND a.cod_tipo = movi2[idx].cod_tipo
AND a.cod_sec = movi2[idx].cod_sec
AND a.conduce_no = otros_mov.conduce_no
AND cod_mov IN (30, 31, 55)
AND a.status_t IS NULL
END IF
IF cantidad_orden IS NULL THEN
LET cantidad_orden = 0
END IF
IF cantidad_conduce IS NULL THEN
LET cantidad_conduce = 0
END IF
LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden
OUTPUT TO REPORT formu4(otros_mov.*, movi2[idx].*)
LET idx = idx + 1
END FOREACH
FINISH REPORT formu4
END FUNCTION
FUNCTION adicionaArray()
DEFINE x1, current_length INT
LET current_length = movi10Dest.getLength()
FOR x1 = 1 TO movi10.getLength()
IF movi10[x1].cantidad2 IS NOT NULL THEN
LET current_length = current_length + 1
LET movi10Dest[current_length].* = movi10[x1].*
END IF
END FOR
END FUNCTION
FUNCTION addDespiece()
DEFINE
x1, x2, current_length INT,
flag BOOLEAN
--LET current_length = despieceDest.getLength()
FOR x1 = 1 TO despiece.getLength()
--DISPLAY "DESPIECE: ", despiece[x1].*
LET flag = TRUE
IF despiece[x1].medida IS NOT NULL THEN
FOR x2 = 1 TO despieceDest.getLength()
IF despiece[x1].cod_n = despieceDest[x2].cod_n
AND despiece[x1].cod_grupo = despieceDest[x2].cod_grupo
AND despiece[x1].cod_tipo = despieceDest[x2].cod_tipo
AND despiece[x1].cod_sec = despieceDest[x2].cod_sec
AND despiece[x1].secuencia = despieceDest[x2].secuencia THEN
--DISPLAY "DESPIECEDEST: ", despieceDest[x2].*
LET despieceDest[x2].* = despiece[x1].*
LET flag = FALSE
END IF
END FOR
IF flag THEN
LET current_length = despieceDest.getLength() + 1
LET despieceDest[current_length].* = despiece[x1].*
END IF
END IF
END FOR
END FUNCTION
FUNCTION addUbicacion()
FOR x2 = 1 TO movi10Dest.getLength()
IF movi10Dest[x2].cantidad2 IS NOT NULL THEN
# IF movi10Dest[x2].id_seccion1 IS NOT NULL THEN
IF status_m = "2" THEN
IF movi10Dest[x2].cantidad2 > 0 THEN
LET movi10Dest[x2].cantidad2 = movi10Dest[x2].cantidad2 * -1
END IF
IF movi10Dest[x2].cantidad1 > 0 THEN
LET movi10Dest[x2].cantidad1 = movi10Dest[x2].cantidad1 * -1
END IF
END IF
TRY
DISPLAY otros_mov.num_doc
DISPLAY movi10Dest[x2].area
DISPLAY movi10Dest[x2].cod_n
DISPLAY movi10Dest[x2].cod_Grupo
DISPLAY movi10Dest[x2].cod_tipo
DISPLAY movi10Dest[x2].cod_sec
DISPLAY movi10Dest[x2].cod_mov
DISPLAY movi10Dest[x2].id_bodega
DISPLAY movi10Dest[x2].id_seccion1
DISPLAY movi10Dest[x2].id_tramo1
DISPLAY movi10Dest[x2].id_fila
DISPLAY movi10Dest[x2].id_pos
DISPLAY movi10Dest[x2].cantidad1
DISPLAY movi10Dest[x2].cantidad2
INSERT INTO iptb00062(
num_Doc,
cod_mov,
bodega,
fecha,
cod_seccion,
cod_tramo,
cod_fila,
cod_pos,
area,
cod_n,
cod_grupo,
cod_tipo,
cod_sec,
cantidad,
cantidad2,
us_crea,
fech_crea)
VALUES(otros_mov.num_doc,
otros_mov.cod_mov,
movi10Dest[x2].id_bodega,
otros_mov.fecha,
movi10Dest[x2].id_seccion1,
movi10Dest[x2].id_tramo1,
movi10Dest[x2].id_fila,
movi10Dest[x2].id_pos,
movi10Dest[x2].area,
movi10Dest[x2].cod_n,
movi10Dest[x2].cod_Grupo,
movi10Dest[x2].cod_tipo,
movi10Dest[x2].cod_sec,
movi10Dest[x2].cantidad1,
movi10Dest[x2].cantidad2,
usuarios,
getdate())
CATCH
LET numero_msg = 1663
DISPLAY "ROLLBACK addUbicacion"
EXIT FOR
END TRY
# END IF
END IF
END FOR
RETURN numero_msg
END FUNCTION
FUNCTION controlaDevolucion(
dcodn,
dcodgrupo,
dcodtipo,
dcodsec,
dfactura,
dcontrol_devolucion,
dcantidad)
DEFINE
dcodn, dcodgrupo, dcodtipo, dcodsec, dfactura INT,
dcantidad_factura, dcantidad_devuelta, dcantidad DEC(12, 5),
dcontrol_devolucion VARCHAR(2),
devolucion_correcta BOOLEAN
#CONTROL DEVOLUCION
IF dcontrol_devolucion = "SI" THEN
LET dcantidad_factura = 0
SELECT ISNULL(SUM(a.cantidad), 0)
INTO dcantidad_factura
FROM vetb00003 a
WHERE a.factura = dfactura
AND a.status_t IS NULL
AND a.fech_crea > '2009-01-01 08:00'
AND a.cod_n = dcodn
AND a.cod_grupo = dcodgrupo
AND a.cod_tipo = dcodtipo
AND a.cod_sec = dcodsec
AND a.status_t IS NULL
SELECT ISNULL(SUM(a.cantidad_2), 0)
INTO dcantidad_devuelta
FROM iptb00006 a
WHERE a.factura = dfactura
AND a.status_t IS NULL
AND a.fech_crea > '2009-01-01 08:00'
AND a.cod_n = dcodn
AND a.cod_grupo = dcodgrupo
AND a.cod_tipo = dcodtipo
AND a.cod_sec = dcodsec
AND a.cod_mov IN (12, 13)
DISPLAY "control dev: ",
dcantidad_devuelta,
" t ",
dcantidad,
" f ",
dcantidad_factura
IF dcantidad_devuelta + dcantidad > dcantidad_factura THEN
RETURN FALSE
END IF
END IF
RETURN TRUE
END FUNCTION
FUNCTION loadDespieceMemory(pcodn, pcodgrupo, pcodtipo, pcodsec)
DEFINE i, idx, pcodn, pcodgrupo, pcodtipo, pcodsec INT
LET idx = 1
FOR i = 1 TO despieceMem.getLength()
IF despieceMem[i].cod_n = pcodn
AND despieceMem[i].cod_grupo = pcodgrupo
AND despieceMem[i].cod_tipo = pcodtipo
AND despieceMem[i].cod_sec = pcodsec THEN
LET container[idx].* = despieceMem[i].*
LET idx = idx + 1
END IF
END FOR
RETURN container
END FUNCTION
FUNCTION saveDespieceMemory(pcodn, pcodgrupo, pcodtipo, pcodsec)
DEFINE i, x, pcodn, pcodgrupo, pcodtipo, pcodsec INT
-- borrar registros anteriores del producto
{ FOR x = despieceMem.getLength() TO 1 STEP -1
IF despieceMem[x].cod_n = pcodn
AND despieceMem[x].cod_grupo = pcodgrupo
AND despieceMem[x].cod_tipo = pcodtipo
AND despieceMem[x].cod_sec = pcodsec THEN
CALL despieceMem.deleteElement(x)
END IF
END FOR
}
-- guardar nuevos
FOR i = 1 TO despiece.getLength()
IF despiece[i].medida IS NOT NULL THEN
LET x = despieceMem.getLength() + 1
LET despieceMem[x].* = despiece[i].*
END IF
END FOR
END FUNCTION
FUNCTION eliminaUbicacionesItem(parea, pcod_n, pcod_grupo, pcod_tipo, pcod_sec)
DEFINE parea, pcod_n, pcod_grupo, pcod_tipo, pcod_sec, x INTEGER
FOR x = movi10Dest.getLength() TO 1 STEP -1
IF movi10Dest[x].cod_n = pcod_n
AND movi10Dest[x].cod_grupo = pcod_grupo
AND movi10Dest[x].cod_tipo = pcod_tipo
AND movi10Dest[x].cod_sec = pcod_sec
AND NVL(movi10Dest[x].area, 0) = NVL(parea, 0) THEN
CALL movi10Dest.deleteElement(x)
END IF
END FOR
END FUNCTION