{ PROGRAMA: ipprmt020.4 OBEJETIVO: Administrar de una forma digital los requerimientos que se realizan a los diferentes almacenes DESARROLLADO POR: ING. JUAN SOTO FECHA DESARROLLO: ABRIL 21, 2022 } IMPORT os GLOBALS "ipprgb000.4gl" DEFINE Toemail, subject, cuerpo_correo, xusername, xsmtphost, xsmtpport, xpassword, emailadd, retorne STRING DEFINE d_tipos, mensaje, f_tipos, filepath, extension, xdestino, l_file, tmpdir_file, dir_file, url_destino, attachment STRING, tmpnumero, dcodn, dcodgrupo, dcodtipo, dcodsec INT MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave LET url_destino = fgl_getenv("URLIMAGENES") CALL usuarioSistema(usuarios) RETURNING nombreUsuario, email CALL ipprmt020() END MAIN FUNCTION ipprmt020() OPEN WINDOW w1 WITH FORM "ipfmmt020" DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY arr_busqueda TO busqueda.* BEFORE DISPLAY LET toemail = email LET xtiene = 'NO' SELECT from_address, puerto, nombre_servidor, clave INTO xusername, xsmtpport, xsmtphost, xpassword FROM tbperfil_mail WHERE cod_perfil = 2 # LET xusername ='notificacion@marmotech.com.do' # LET xsmtphost ='smtp.office365.com' # LET xsmtpport = '587' # LET xpassword = 'Lmmjvsd2020' CALL buscarData() ON ACTION nuevo ATTRIBUTE(TEXT = "Nuevo", IMAGE = "new") INITIALIZE p_iptb57.* TO NULL CALL arr_iptb58.clear() CLEAR FORM 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 opcion = "Adicionar" LET subject = 'CREACION REQUISICION PARA ALMACEN NO.' CALL entradas() { ON ACTION editar ATTRIBUTE(TEXT="Editar",IMAGE="edit") LET opcion="Actualializar" LET p_iptb57.numero_doc = arr_busqueda[arr_curr()].numeroid LET p_iptb57.estado = arr_busqueda[arr_curr()].estadp1 DISPLAY BY NAME p_iptb57.numero_doc,p_iptb57.estado SELECT DISTINCT a.numero_doc FROM iptb00006 a WHERE a.numero_doc = p_iptb57.numero_doc AND a.cod_mov = p_iptb57.cod_mov IF STATUS != NOTFOUND THEN CALL msg(1014) CONTINUE DIALOG END IF LET subject = 'MODIFICACION REQUISICION PARA ALMACEN NO.' CALL buscadoc(arr_busqueda[arr_curr()].numeroid,arr_busqueda[arr_curr()].cod_mov ) RETURNING p_iptb57.*,arr_iptb58 CALL entradas()} ON ACTION anular ATTRIBUTE(TEXT = "Anular", IMAGE = "garbage") LET p_iptb57.numero_doc = arr_busqueda[arr_curr()].numeroid LET p_iptb57.cod_mov = arr_busqueda[arr_curr()].cod_mov CALL anular() CALL buscarData() ON ACTION imprimir ATTRIBUTE(TEXT = "Imprimir", IMAGE = "printer") CALL buscadoc( arr_busqueda[arr_curr()].numeroid, arr_busqueda[arr_curr()].cod_mov) RETURNING p_iptb57.*, arr_iptb58 CALL impdocumento( arr_busqueda[arr_curr()].numeroid, arr_busqueda[arr_curr()].cod_mov) ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancelar", IMAGE = "quit") RETURN END DISPLAY END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION buscardata() DEFINE i INT DECLARE buscardata CURSOR FOR SELECT b.estado, f.descripcion, CAST(a.cod_mov AS VARCHAR(10)) || ' ' || a.descrip_mov, b.numero_doc, b.fecha, c.nombre, b.observacion, d.descripcion, ' ', b.cod_mov, b.bodega, b.bodega_destino FROM iptb00005 a, iptb00057 b INNER JOIN iptb00061 f ON b.idestado = f.idestado LEFT OUTER JOIN vetb00004 c ON c.tipo_cliente = b.tipo_cliente AND c.sec_cliente = b.sec_cliente, intb00009 d WHERE a.cod_mov = b.cod_mov AND b.bodega = d.cod_bodega AND b.us_crea = usuarios AND b.status_t IS NULL CALL arr_busqueda.clear() LET i = 1 FOREACH buscardata INTO arr_busqueda[i].* LET p_iptb57.cod_mov = arr_busqueda[i].cod_mov LET p_iptb57.num_oc = arr_busqueda[i].numeroid IF arr_busqueda[i].bodega2 IS NOT NULL THEN SELECT a.descripcion INTO arr_busqueda[i].bodega_destino FROM intb00009 a WHERE a.cod_bodega = arr_busqueda[i].bodega2 END IF LET i = i + 1 END FOREACH END FUNCTION FUNCTION codigomov() DEFINE ketiquetas SMALLINT, detiquetas STRING LET cbmovimiento = ui.combobox.forname("formonly.cod_mov") DECLARE bmovimiento_t CURSOR FOR SELECT a.cod_mov, RTRIM(a.descrip_mov) || '(' || CAST(a.cod_mov AS VARCHAR(6)) || ')' FROM iptb00005 a WHERE a.requisiciones = "SI" ORDER BY a.descrip_mov CALL cbmovimiento.clear() FOREACH bmovimiento_t INTO ketiquetas, detiquetas CALL cbmovimiento.additem(ketiquetas, detiquetas) END FOREACH END FUNCTION FUNCTION entradas() DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME p_iptb57.cod_mov, p_iptb57.num_oc, p_iptb57.observacion, p_iptb57.bodega, p_iptb57.bodega_destino, p_iptb57.url_file ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION abrirdocumento IF p_iptb57.url_file IS NOT NULL THEN CALL ui.Interface.frontCall( "standard", "launchURL", [p_iptb57.url_file], []) END IF ON ACTION atardocumento CALL ui.Interface.frontCall( "standard", "openfile", [dir_file, d_tipos, f_tipos, mensaje], [filepath]) IF filepath IS NOT NULL THEN IF downshift(os.Path.extension(filepath)) = "pdf" OR downshift(os.Path.extension(filepath)) = "jpg" OR downshift(os.Path.extension(filepath)) = "xls" OR downshift(os.Path.extension(filepath)) = "xlsx" OR downshift(os.Path.extension(filepath)) = "doc" OR downshift(os.Path.extension(filepath)) = "docx" OR downshift(os.Path.extension(filepath)) = "png" THEN LET dir_file = os.Path.basename(filepath) LET tmpdir_file = dir_file LET dir_file = fgl_getenv("IMAGENES"), "\\", dir_file CLIPPED DISPLAY "imagenes ", dir_file CALL fgl_getfile(filepath, dir_file) LET p_iptb57.url_file = url_destino CLIPPED, "/", tmpdir_file CLIPPED ELSE CALL fgl_winmessage( "ERROR", "EL FILE DEBE SER PDF, JPG, PNG", "INFO") END IF END IF BEFORE INPUT LET d_tipos = "PDF" LET f_tipos = "*.pdf *.jpg *.png, *.xls, *.xlsx, *.doc, *.docx" LET mensaje = %"Elige Documento" LET selec = "INSERT INTO iptb00060(id_etiqueta,id_despiece,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3, cantidad,medida,secuencia,bodega) SELECT id_etiqueta,?,cod_n,cod_grupo,cod_tipo,cod_sec,lado_1,lado_2,lado_3, cantidad,medida,secuencia,bodega FROM tmpdespiece WHERE id_despiece = ?" PREPARE insertad FROM selec DISPLAY BY NAME nombreUsuario, email CALL codigomov() CALL bodegas('2') IF opcion = "Adicionar" THEN LET p_iptb57.fecha = TODAY ELSE IF p_iptb57.estado = 'AUTORIZADA' THEN CALL msg(1004) EXIT DIALOG END IF END IF DISPLAY BY NAME p_iptb57.fecha IF p_iptb57.num_oc IS NOT NULL THEN LET ordenPedidos = TRUE ELSE LET ordenPedidos = FALSE END IF AFTER FIELD num_oc IF p_iptb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN SELECT a.tipo_cliente, a.sec_cliente, b.nombre INTO p_iptb57.tipo_cliente, p_iptb57.sec_cliente, p_iptb57.cliente FROM prtb00012 a, vetb00004 b WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.cerrada = 'N' AND a.num_oc = p_iptb57.num_oc AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_oc END IF DISPLAY BY NAME p_iptb57.tipo_cliente, p_iptb57.sec_cliente, p_iptb57.cliente END IF AFTER FIELD cod_mov IF p_iptb57.cod_mov IS NOT NULL THEN LET nombreMov = ui.ComboBox.forName('formonly.cod_mov') .getTextOf(p_iptb57.cod_mov) SELECT a.requiere_autorizacion, a.control_transferencia INTO requiere, transacc.control_transferencia FROM iptb00005 a WHERE a.cod_mov = p_iptb57.cod_mov IF requiere = "NO" THEN LET xestado = 'AUTORIZADA' ELSE LET xestado = 'NO AUTORIZADA' END IF END IF AFTER FIELD bodega IF p_iptb57.bodega IS NOT NULL THEN LET nombreBodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_iptb57.bodega) CALL emailbodegas() RETURNING emailadd END IF AFTER FIELD bodega_destino IF p_iptb57.bodega_destino IS NOT NULL THEN LET nombreBodegaDestino = ui.ComboBox.forName('formonly.bodega_destino') .getTextOf(p_iptb57.bodega_destino) END IF AFTER INPUT IF p_iptb57.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF IF p_iptb57.bodega IS NOT NULL THEN LET nombreBodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_iptb57.bodega) CALL emailbodegas() RETURNING emailadd END IF IF transacc.control_transferencia = "SI" THEN IF p_iptb57.bodega_destino IS NULL THEN CALL msg(16) NEXT FIELD bodega_destino END IF END IF IF p_iptb57.num_oc IS NOT NULL THEN SELECT a.tipo_cliente, a.sec_cliente, b.nombre INTO p_iptb57.tipo_cliente, p_iptb57.sec_cliente FROM prtb00012 a, vetb00004 b WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.cerrada = 'N' AND a.num_oc = p_iptb57.num_oc AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_oc END IF DISPLAY BY NAME p_iptb57.tipo_cliente, p_iptb57.sec_cliente, p_iptb57.cliente IF p_iptb57.cod_mov IS NOT NULL THEN LET nombreMov = ui.ComboBox.forName('formonly.cod_mov') .getTextOf(p_iptb57.cod_mov) END IF IF p_iptb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN LET idx = 1 DECLARE buscaOrden CURSOR FOR SELECT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, b.unidad_med, c.cantidad_1, c.cantidad, c.cantidad_1, c.cantidad, d.factor_conv FROM prtb00013 a, iptb00002 b, prtb00023 c, iptb00001 d WHERE a.num_oc = p_iptb57.num_oc AND a.num_oc = c.num_oc AND a.area = 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.cod_n = d.cod_n AND a.cod_grupo = d.cod_grupo AND a.cod_tipo = d.cod_tipo AND a.cod_sec = d.cod_sec) FOREACH buscaOrden INTO arr_iptb58[idx].* LET idx = idx + 1 END FOREACH END IF END IF END INPUT INPUT ARRAY arr_iptb58 FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION buscar LET idx = arr_curr() LET scr_l = scr_line() CALL busca_prod( '02') RETURNING arr_iptb58[idx].cod_n, arr_iptb58[idx].cod_grupo, arr_iptb58[idx].cod_tipo, arr_iptb58[idx].cod_sec, arr_iptb58[idx].descripcion CALL producto() IF tienedespiece THEN LET dcodn = arr_iptb58[idx].cod_n LET dcodgrupo = arr_iptb58[idx].cod_grupo LET dcodtipo = arr_iptb58[idx].cod_tipo LET dcodsec = arr_iptb58[idx].cod_sec CALL despiece() END IF NEXT FIELD cantidad_1 ON ACTION despiece ATTRIBUTE(TEXT = "Despiece", IMAGE = "") LET idx = arr_curr() CALL producto() IF tienedespiece THEN LET dcodn = arr_iptb58[idx].cod_n LET dcodgrupo = arr_iptb58[idx].cod_grupo LET dcodtipo = arr_iptb58[idx].cod_tipo LET dcodsec = arr_iptb58[idx].cod_sec CALL despiece() END IF NEXT FIELD cantidad_1 BEFORE ROW LET idx = arr_curr() IF arr_iptb58[idx].area IS NULL THEN LET arr_iptb58[idx].area = 1 END IF DISPLAY arr_iptb58[idx].area TO sdetalle[scr_line()].area AFTER FIELD cod_Sec LET idx = arr_curr() IF arr_iptb58[idx].cod_sec IS NOT NULL THEN CALL producto() IF NOT existe THEN CALL msg(3) NEXT FIELD cod_sec END IF IF tienedespiece THEN LET dcodn = arr_iptb58[idx].cod_n LET dcodgrupo = arr_iptb58[idx].cod_grupo LET dcodtipo = arr_iptb58[idx].cod_tipo LET dcodsec = arr_iptb58[idx].cod_sec CALL despiece() END IF IF p_iptb57.num_oc IS NOT NULL THEN SELECT DISTINCT a.cod_sec FROM prtb00013 a WHERE a.num_oc = p_iptb57.num_oc AND a.cod_n = arr_iptb58[idx].cod_n AND a.cod_grupo = arr_iptb58[idx].cod_grupo AND a.cod_tipo = arr_iptb58[idx].cod_tipo AND a.cod_sec = arr_iptb58[idx].cod_sec IF STATUS = NOTFOUND THEN CALL msg(397) NEXT FIELD cod_Sec END IF END IF END IF AFTER FIELD cantidad_1 IF arr_iptb58[idx].cantidad_1 IS NOT NULL THEN IF arr_iptb58[idx].cantidad_1 > arr_iptb58[idx].cantidad_o1 THEN CALL msg(46) NEXT FIELD cantidad_1 END IF LET arr_iptb58[idx].cantidad = arr_iptb58[idx].cantidad_1 * arr_iptb58[idx].factor_conv DISPLAY arr_iptb58[idx].cantidad TO sdetalle[scr_l].cantidad END IF ON ACTION guardar ATTRIBUTE(TEXT = opcion, IMAGE = "save") IF p_iptb57.bodega IS NOT NULL THEN LET nombreBodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_iptb57.bodega) END IF IF transacc.control_transferencia = "SI" THEN IF p_iptb57.bodega_destino IS NULL THEN CALL msg(16) NEXT FIELD bodega_destino END IF END IF IF p_iptb57.bodega_destino IS NOT NULL THEN LET nombreBodegaDestino = ui.ComboBox.forName('formonly.bodega_destino') .getTextOf(p_iptb57.bodega_destino) END IF IF emailadd IS NOT NULL THEN LET Toemail = toemail CLIPPED, ",", emailadd CLIPPED ELSE LET Toemail = toemail CLIPPED END IF IF opcion = "Adicionar" THEN IF p_iptb57.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF BEGIN WORK SELECT a.numero_doc INTO secuencia FROM iptb00059 a IF STATUS = NOTFOUND THEN INSERT INTO iptb00059( numero_doc, us_mod, fech_mod) VALUES(0, usuarios, getdate()) END IF LET secuencia = secuencia + 1 LET p_iptb57.numero_doc = secuencia UPDATE iptb00059 SET numero_doc = p_iptb57.numero_doc, us_mod = usuarios, fech_mod = getdate() LET subject = subject CLIPPED, p_iptb57.numero_doc USING "&&&&&&&&" INSERT INTO iptb00057( numero_doc, fecha, cod_mov, num_oc, tipo_cliente, sec_cliente, nombre, bodega, bodega_destino, estado, us_crea, fech_crea, observacion, url_destino, idestado) VALUES(p_iptb57.numero_doc, p_iptb57.fecha, p_iptb57.cod_mov, p_iptb57.num_oc, p_iptb57.tipo_cliente, p_iptb57.sec_cliente, p_iptb57.cliente, p_iptb57.bodega, p_iptb57.bodega_destino, xestado, usuarios, getdate(), p_iptb57.observacion, p_iptb57.url_file, 5) IF STATUS < 0 THEN ROLLBACK WORK RETURN END IF LET tieneDetalle = "NO" FOR idx = 1 TO arr_iptb58.getLength() IF arr_iptb58[idx].cantidad IS NOT NULL THEN LET tieneDetalle = "SI" IF arr_iptb58[idx].cantidad_1 > arr_iptb58[idx].cantidad_o1 THEN CALL msg(46) NEXT FIELD cantidad_1 END IF IF arr_iptb58[idx].area IS NULL THEN ROLLBACK WORK CALL msg(16) NEXT FIELD area END IF INSERT INTO iptb00058( numero_doc, cod_mov, area, cod_n, cod_grupo, cod_tipo, cod_Sec, descripcion, unidad_med, cantidad_1, cantidad_2, us_crea, fech_crea) VALUES(p_iptb57.numero_doc, p_iptb57.cod_mov, arr_iptb58[idx].area, arr_iptb58[idx].cod_n, arr_iptb58[idx].cod_grupo, arr_iptb58[idx].cod_tipo, arr_iptb58[idx].cod_sec, arr_iptb58[idx].descripcion, arr_iptb58[idx].unidad_med, arr_iptb58[idx].cantidad_1, arr_iptb58[idx].cantidad, usuarios, getdate()) IF STATUS < 0 THEN ROLLBACK WORK RETURN END IF END IF END FOR #DESPIECE DELETE FROM iptb00060 WHERE id_despiece = p_iptb57.numero_doc EXECUTE insertad USING p_iptb57.numero_doc, tmpnumero DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero IF tieneDetalle = "SI" THEN COMMIT WORK CALL msg(1) CALL buscarData() CALL impdocumento(p_iptb57.numero_doc, p_iptb57.cod_mov) CALL contenido() RETURNING cuerpo_correo LET attachment = NULL # CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword) #RETURNING mensajes ELSE ROLLBACK WORK CALL msg(1663) END IF ELSE LET subject = subject CLIPPED, p_iptb57.numero_doc USING "&&&&&&&&" BEGIN WORK UPDATE iptb00057 SET num_oc = p_iptb57.num_oc, tipo_cliente = p_iptb57.tipo_cliente, sec_cliente = p_iptb57.sec_cliente, nombre = p_iptb57.cliente, observacion = p_iptb57.observacion, bodega = p_iptb57.bodega, bodega_destino = p_iptb57.bodega_destino, us_mod = usuarios, fech_mod = getdate(), url_destino = p_iptb57.url_file, idestado = p_iptb57.idstado WHERE numero_doc = p_iptb57.numero_doc AND cod_mov = p_iptb57.cod_mov DELETE FROM iptb00058 WHERE numero_doc = p_iptb57.numero_doc AND cod_mov = p_iptb57.cod_mov LET tieneDetalle = "NO" FOR idx = 1 TO arr_iptb58.getLength() IF arr_iptb58[idx].cantidad IS NOT NULL THEN LET tieneDetalle = "SI" IF arr_iptb58[idx].cantidad_1 > arr_iptb58[idx].cantidad_o1 THEN CALL msg(46) NEXT FIELD cantidad_1 END IF IF arr_iptb58[idx].area IS NULL THEN ROLLBACK WORK CALL msg(16) NEXT FIELD area END IF INSERT INTO iptb00058( numero_doc, cod_mov, area, cod_n, cod_grupo, cod_tipo, cod_Sec, descripcion, unidad_med, cantidad_1, cantidad_2, us_crea, fech_crea) VALUES(p_iptb57.numero_doc, p_iptb57.cod_mov, arr_iptb58[idx].area, arr_iptb58[idx].cod_n, arr_iptb58[idx].cod_grupo, arr_iptb58[idx].cod_tipo, arr_iptb58[idx].cod_sec, arr_iptb58[idx].descripcion, arr_iptb58[idx].unidad_med, arr_iptb58[idx].cantidad_1, arr_iptb58[idx].cantidad, usuarios, getdate()) IF STATUS < 0 THEN ROLLBACK WORK RETURN END IF END IF END FOR #DESPIECE DELETE FROM iptb00060 WHERE id_despiece = p_iptb57.numero_doc EXECUTE insertad USING p_iptb57.numero_doc, tmpnumero DELETE FROM tmpdespiece WHERE id_despiece = p_iptb57.numero_doc IF tieneDetalle = "SI" THEN COMMIT WORK CALL msg(13) CALL buscarData() CALL impdocumento(p_iptb57.numero_doc, p_iptb57.cod_mov) CALL contenido() RETURNING cuerpo_correo # CALL enviaemail(Toemail,subject,cuerpo_correo,NULL,xusername,xsmtphost,xsmtpport,xpassword) # RETURNING retorne ELSE ROLLBACK WORK CALL msg(1663) END IF END IF END INPUT ON ACTION CANCEL ATTRIBUTE(TEXT = "Salir", IMAGE = 'quit') DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero EXIT DIALOG END DIALOG END FUNCTION FUNCTION anular() DEFINE respuesta STRING SELECT DISTINCT a.numero_doc FROM iptb00006 a WHERE a.numero_doc = p_iptb57.numero_doc AND a.cod_mov = p_iptb57.cod_mov IF STATUS != NOTFOUND THEN CALL msg(1014) RETURN END IF DISPLAY "ANULAR: ", p_iptb57.numero_doc LET respuesta = fgl_winquestion( "Borrar", "Esta seguro de elminiar esta requisicion?", "NO", "YES|NO", "QUESTION", 0) IF respuesta = "YES" THEN UPDATE iptb00057 SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() WHERE numero_doc = p_iptb57.numero_doc AND cod_mov = p_iptb57.cod_mov END IF END FUNCTION FUNCTION producto() DEFINE pcodn INT SELECT a.descrip_esp, a.unidad_med, b.factor_conv, c.cod_n INTO arr_iptb58[idx].descripcion, arr_iptb58[idx].unidad_med, arr_iptb58[idx].factor_conv, pcodn FROM iptb00002 a, iptb00001 b LEFT OUTER JOIN iptb00027 c ON c.cod_n = b.cod_n AND c.cod_grupo = b.cod_grupo AND c.cod_tipo = b.cod_tipo AND c.cod_sec = b.cod_sec WHERE a.cod_n = arr_iptb58[idx].cod_n AND a.cod_grupo = arr_iptb58[idx].cod_grupo AND a.cod_tipo = arr_iptb58[idx].cod_tipo AND a.cod_sec = arr_iptb58[idx].cod_sec 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 IF STATUS = NOTFOUND THEN LET existe = FALSE ELSE IF pcodn IS NOT NULL THEN LET tienedespiece = TRUE ELSE LET tienedespiece = FALSE END IF LET existe = TRUE END IF END FUNCTION FUNCTION contenido() DEFINE xcuerpo1, xcuerpo2 STRING LET xcuerpo1 = " " LET xcuerpo1 = xcuerpo1 CLIPPED, "

Solicitado por: ", nombreUsuario CLIPPED, "

" LET xcuerpo1 = xcuerpo1 CLIPPED, "

", nombreMov CLIPPED, "

" IF p_iptb57.num_oc IS NOT NULL THEN LET xcuerpo1 = xcuerpo1 CLIPPED, "

Orden:", p_iptb57.num_oc USING "&&&&&&&&", "

", "

Cliente:", p_iptb57.cliente CLIPPED, "

" END IF LET xcuerpo1 = xcuerpo1 CLIPPED, "

Bodega Origen:", nombreBodega CLIPPED, "

" LET xcuerpo1 = xcuerpo1 CLIPPED, "", "", "", "" END IF END FOR LET xcuerpo1 = xcuerpo1 CLIPPED, xcuerpo2 CLIPPED, "
ProductosUnidades cantidad" FOR idx = 1 TO arr_iptb58.getLength() IF arr_iptb58[idx].cod_sec IS NOT NULL THEN LET xcuerpo2 = xcuerpo2 CLIPPED, "
", arr_iptb58[idx].descripcion CLIPPED, "", arr_iptb58[idx].cantidad_1 USING "##,###.##", "", arr_iptb58[idx].cantidad USING "##,###.##", "
" RETURN xcuerpo1 END FUNCTION FUNCTION emailbodegas() DEFINE xemailadd, remailadd STRING, jj INT DECLARE bemails CURSOR FOR SELECT b.email FROM seg0001 b WHERE b.bodega = p_iptb57.bodega LET remailadd = NULL LET jj = 1 FOREACH bemails INTO xemailadd IF xemailadd IS NOT NULL THEN LET remailadd = xemailadd CLIPPED, ",", remailadd END IF LET jj = jj + 1 END FOREACH RETURN remailadd END FUNCTION FUNCTION despiece() DEFINE cetiqueta VARCHAR(20), idx1, curr2 INT OPEN WINDOW wdespiece AT 5, 3 WITH FORM "ipfmwd010" ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) DISPLAY arr_iptb58[idx].descripcion TO descrip_esp DISPLAY arr_iptb58[idx].unidad_med TO unidad_med CALL despiece.clear() IF opcion = "Adicionar" THEN DECLARE busca_despiece CURSOR FOR SELECT a.id_etiqueta, a.lado_1, a.lado_2, a.lado_3, a.cantidad, a.medida, a.secuencia, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec FROM tmpdespiece a, vetb00026 b WHERE a.id_despiece = tmpnumero AND a.id_etiqueta = b.codid AND a.cod_n = dcodn AND a.cod_grupo = dcodgrupo AND a.cod_tipo = dcodtipo AND a.cod_sec = dcodsec LET total_cantidad = 0 LET idx1 = 1 FOREACH busca_despiece INTO despiece[idx1].id_etiqueta, despiece[idx1].lado_1, despiece[idx1].lado_2, despiece[idx1].lado_3, despiece[idx1].cantidad, despiece[idx1].medida, despiece[idx1].secuencia, despiece[idx1].cod_n, despiece[idx1].cod_grupo, despiece[idx1].cod_tipo, despiece[idx1].cod_sec LET total_cantidad = total_cantidad + despiece[idx1].cantidad LET idx1 = idx1 + 1 END FOREACH ELSE DECLARE busca_despiecem CURSOR FOR SELECT a.id_etiqueta, a.lado_1, a.lado_2, a.lado_3, a.cantidad, a.medida, a.secuencia, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec FROM iptb00060 a, vetb00026 b WHERE a.id_despiece = p_iptb57.numero_doc AND a.id_etiqueta = b.codid AND a.cod_n = dcodn AND a.cod_grupo = dcodgrupo AND a.cod_tipo = dcodtipo AND a.cod_sec = dcodsec LET total_cantidad = 0 LET idx1 = 1 LET tmpnumero = p_iptb57.numero_doc FOREACH busca_despiecem INTO despiece[idx1].id_etiqueta, despiece[idx1].lado_1, despiece[idx1].lado_2, despiece[idx1].lado_3, despiece[idx1].cantidad, despiece[idx1].medida, despiece[idx1].secuencia, despiece[idx1].cod_n, despiece[idx1].cod_grupo, despiece[idx1].cod_tipo, despiece[idx1].cod_sec LET total_cantidad = total_cantidad + despiece[idx1].cantidad LET idx1 = idx1 + 1 END FOREACH END IF DISPLAY BY NAME total_cantidad INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.* BEFORE INPUT CALL cetiquetas() BEFORE ROW LET curr2 = arr_curr() LET fila = scr_line() CALL cetiquetas() IF curr2 > 1 THEN IF despiece[curr2].id_etiqueta IS NULL THEN LET despiece[curr2].id_etiqueta = despiece[curr2 - 1].id_etiqueta END IF END IF IF opcion = "Adicionar" THEN IF despiece[curr2].cod_sec IS NULL THEN LET despiece[curr2].cod_n = dcodn LET despiece[curr2].cod_grupo = dcodgrupo LET despiece[curr2].cod_tipo = dcodtipo LET despiece[curr2].cod_sec = dcodsec LET despiece[curr2].secuencia = curr2 END IF END IF AFTER FIELD etiqueta LET despiece[curr2].cod_n = dcodn LET despiece[curr2].cod_grupo = dcodgrupo LET despiece[curr2].cod_tipo = dcodtipo LET despiece[curr2].cod_sec = dcodsec DISPLAY despiece[curr2].cod_n TO sdespiece[fila].cod_n DISPLAY despiece[curr2].cod_grupo TO sdespiece[fila].cod_grupo DISPLAY despiece[curr2].cod_tipo TO sdespiece[fila].cod_tipo DISPLAY despiece[curr2].cod_sec TO sdespiece[fila].cod_sec AFTER FIELD cantidad IF arr_iptb58[idx].unidad_med = "M2" THEN LET despiece[curr2].medida = despiece[curr2].cantidad * (despiece[curr2].lado_1 * despiece[curr2].lado_2) END IF IF arr_iptb58[idx].unidad_med = "M3" THEN LET despiece[curr2].medida = despiece[curr2].cantidad * (despiece[curr2].lado_1 * despiece[curr2].lado_2 * despiece[curr2].lado_3) END IF IF arr_iptb58[idx].unidad_med = "ML" THEN LET despiece[curr2].medida = despiece[curr2].cantidad * despiece[curr2].lado_1 LET despiece[curr2].lado_2 = 0 END IF IF arr_iptb58[idx].unidad_med = "UD" OR arr_iptb58[idx].unidad_med = "GL" THEN LET despiece[curr2].medida = despiece[curr2].cantidad END IF DISPLAY despiece[curr2].medida TO sdespiece[fila].medida AFTER ROW IF despiece[curr2].medida IS NULL AND despiece[curr2].lado_1 IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD lado_1 END IF LET total_medida = 0 LET total_cantidad = 0 FOR idx1 = 1 TO despiece.getLength() IF despiece[idx1].medida IS NOT NULL THEN LET total_cantidad = total_cantidad + despiece[idx1].cantidad LET total_medida = total_medida + despiece[idx1].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 idx1 = 1 TO despiece.getLength() IF despiece[idx1].medida IS NOT NULL THEN LET total_medida = total_medida + despiece[idx1].medida LET total_cantidad = total_cantidad + despiece[idx1].cantidad END IF END FOR DISPLAY BY NAME total_medida, total_cantidad END INPUT IF int_flag THEN LET int_flag = FALSE CLOSE WINDOW wdespiece RETURN END IF DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero AND cod_n = dcodn AND cod_grupo = dcodgrupo AND cod_tipo = dcodtipo AND cod_sec = dcodsec LET total_medida = 0 FOR idx1 = 1 TO despiece.getLength() IF despiece[idx1].medida IS NOT NULL THEN LET despiece[idx1].secuencia = idx1 INSERT INTO tmpdespiece( id_etiqueta, id_despiece, cod_n, cod_grupo, cod_tipo, cod_sec, lado_1, lado_2, lado_3, cantidad, medida, secuencia, bodega) VALUES(despiece[idx1].id_etiqueta, tmpnumero, despiece[idx1].cod_n, despiece[idx1].cod_grupo, despiece[idx1].cod_tipo, despiece[idx1].cod_sec, despiece[idx1].lado_1, despiece[idx1].lado_2, despiece[idx1].lado_3, despiece[idx1].cantidad, despiece[idx1].medida, despiece[idx1].secuencia, p_iptb57.bodega) LET total_medida = total_medida + despiece[idx1].medida END IF END FOR LET arr_iptb58[idx].cantidad_1 = total_medida CLOSE WINDOW wdespiece END FUNCTION