{ PROGRAMA: inprmt020 OBEJETIVO: Requisicion de Materia prima DESARROLLADO POR: ING. ELVIS GARCÍA FECHA DESARROLLO: MARZO 13, 2026 } IMPORT os GLOBALS "inprgb000.4gl" DEFINE fakeData RECORD LIKE cotb00001.* DEFINE answer STRING 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 "irfmmt020" 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_intb57.* TO NULL CALL arr_intb58.clear() CLEAR FORM LET tmpnumero = 0 SELECT a.num_doc INTO tmpnumero FROM intb00047 a WHERE usuario = usuarios IF STATUS = NOTFOUND THEN INSERT INTO intb00047 VALUES(0, usuarios) LET tmpnumero = 1 ELSE LET tmpnumero = tmpnumero + 1 UPDATE intb00047 SET num_doc = tmpnumero WHERE usuario = usuarios END IF LET p_intb57.numero_doc = tmpnumero DISPLAY BY NAME p_intb57.numero_doc LET p_intb57.bodega = 3 LET opcion = "Adicionar" LET subject = 'CREACION REQUISICION PARA ALMACEN NO.' CALL entradas() ON ACTION anular ATTRIBUTE(TEXT = "Anular", IMAGE = "garbage") LET p_intb57.numero_doc = arr_busqueda[arr_curr()].numeroid LET p_intb57.cod_mov = arr_busqueda[arr_curr()].cod_mov CALL anular() ON ACTION imprimir ATTRIBUTE(TEXT = "Imprimir", IMAGE = "printer") CALL buscadoc( arr_busqueda[arr_curr()].numeroid, arr_busqueda[arr_curr()] .cod_mov) #RETURNING p_intb57.*,arr_intb58 CALL impdocumentos_prima( 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.nom_sp AS nom_cliente, b.observacion, d.descripcion, ' ', b.cod_mov, b.bodega, b.bodega_destino FROM intb00005 a, intb00057 b INNER JOIN intb00061 f ON b.idestado = f.idestado LEFT OUTER JOIN cotb00001 c ON c.cod_sp = b.tipo_cliente AND c.cod_sp_sec = 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 LET i = 1 FOREACH buscardata INTO arr_busqueda[i].* LET p_intb57.cod_mov = arr_busqueda[i].cod_mov LET p_intb57.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 intb00005 a WHERE a.requisiciones = "SI" AND a.status_t IS NULL 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_intb57.cod_mov, p_intb57.num_oc, p_intb57.orden_trabajo, p_intb57.observacion, p_intb57.bodega, p_intb57.bodega_destino, p_intb57.url_file ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION abrirdocumento IF p_intb57.url_file IS NOT NULL THEN CALL ui.Interface.frontCall( "standard", "launchURL", [p_intb57.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_intb57.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 intb00060(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_intb57.fecha = TODAY ELSE IF p_intb57.estado = 'AUTORIZADA' THEN CALL msg(1004) EXIT DIALOG END IF END IF DISPLAY BY NAME p_intb57.fecha IF p_intb57.num_oc IS NOT NULL THEN LET ordenPedidos = TRUE ELSE LET ordenPedidos = FALSE END IF AFTER FIELD num_oc IF p_intb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN SELECT a.cod_sp, a.cod_sp_sec, b.nom_sp INTO p_intb57.tipo_cliente, p_intb57.sec_cliente, p_intb57.cliente FROM cotb00014 a, cotb00001 b WHERE a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec AND a.cierre = 'N' AND a.num_oc = p_intb57.num_oc AND a.tipo = '03' AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_oc END IF DISPLAY BY NAME p_intb57.tipo_cliente, p_intb57.sec_cliente, p_intb57.cliente END IF AFTER FIELD orden_trabajo IF p_intb57.orden_trabajo IS NOT NULL THEN INITIALIZE fakedata.* TO NULL CALL ApiMaintainC('CHECK', p_intb57.orden_trabajo, fakeData.*, usuarios) RETURNING answer IF answer IS NULL OR answer = 0 THEN CALL fgl_winmessage( "ORDEN DE TRABAJO EN MAINTAINX", "El ID de la orden de trabajo colocada no se encuentra en MaintainX", "stop") NEXT FIELD orden_trabajo END IF END IF AFTER FIELD cod_mov IF p_intb57.cod_mov IS NOT NULL THEN LET nombreMov = ui.ComboBox.forName('formonly.cod_mov') .getTextOf(p_intb57.cod_mov) SELECT a.requiere_autorizacion {,a.control_transferencia} INTO requiere {,transacc.control_transferencia } FROM intb00005 a WHERE a.cod_mov = p_intb57.cod_mov IF requiere = "NO" THEN LET xestado = 'AUTORIZADA' ELSE LET xestado = 'NO AUTORIZADA' END IF END IF AFTER FIELD bodega IF p_intb57.bodega IS NOT NULL THEN LET nombreBodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_intb57.bodega) CALL emailbodegas() RETURNING emailadd END IF AFTER FIELD bodega_destino IF p_intb57.bodega_destino IS NOT NULL THEN LET nombreBodegaDestino = ui.ComboBox.forName('formonly.bodega_destino') .getTextOf(p_intb57.bodega_destino) END IF AFTER INPUT IF p_intb57.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF IF p_intb57.bodega IS NOT NULL THEN LET nombreBodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_intb57.bodega) CALL emailbodegas() RETURNING emailadd END IF { IF transacc.control_transferencia = "SI" THEN IF p_intb57.bodega_destino IS NULL THEN CALL msg(16) NEXT FIELD bodega_destino END IF END IF } IF p_intb57.num_oc IS NOT NULL THEN SELECT a.cod_sp, a.cod_sp_sec, b.nom_sp INTO p_intb57.tipo_cliente, p_intb57.sec_cliente, p_intb57.cliente FROM cotb00014 a, cotb00001 b WHERE a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec AND a.cierre = 'N' AND a.num_oc = p_intb57.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_intb57.tipo_cliente, p_intb57.sec_cliente, p_intb57.cliente IF p_intb57.cod_mov IS NOT NULL THEN LET nombreMov = ui.ComboBox.forName('formonly.cod_mov') .getTextOf(p_intb57.cod_mov) END IF IF p_intb57.num_oc IS NOT NULL AND ordenPedidos = FALSE THEN LET idx = 1 DECLARE buscaOrden CURSOR FOR SELECT a.tipo, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, b.unidad_med, a.cantidad, a.cantidad, a.cantidad, a.cantidad FROM cotb00015 a, intb00001 b WHERE a.num_oc = p_intb57.num_oc AND a.tipo = 3 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 = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec) FOREACH buscaOrden INTO arr_intb58[idx].* LET idx = idx + 1 END FOREACH END IF END IF END INPUT INPUT ARRAY arr_intb58 FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION buscar LET idx = arr_curr() LET scr_l = scr_line() CALL busca_prod( '03') RETURNING arr_intb58[idx].cod_n, arr_intb58[idx].cod_grupo, arr_intb58[idx].cod_tipo, arr_intb58[idx].cod_sec, arr_intb58[idx].descripcion CALL producto() IF tienedespiece THEN LET dcodn = arr_intb58[idx].cod_n LET dcodgrupo = arr_intb58[idx].cod_grupo LET dcodtipo = arr_intb58[idx].cod_tipo LET dcodsec = arr_intb58[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_intb58[idx].cod_n LET dcodgrupo = arr_intb58[idx].cod_grupo LET dcodtipo = arr_intb58[idx].cod_tipo LET dcodsec = arr_intb58[idx].cod_sec CALL despiece() END IF NEXT FIELD cantidad_1 } BEFORE ROW LET idx = arr_curr() LET arr_intb58[idx].area = 1 DISPLAY arr_intb58[idx].area TO sdetalle[scr_line()].area AFTER FIELD cod_Sec LET idx = arr_curr() IF arr_intb58[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_intb58[idx].cod_n LET dcodgrupo = arr_intb58[idx].cod_grupo LET dcodtipo = arr_intb58[idx].cod_tipo LET dcodsec = arr_intb58[idx].cod_sec CALL despiece() END IF IF p_intb57.num_oc IS NOT NULL THEN {SELECT DISTINCT a.cod_sp FROM cotb00015 a WHERE a.num_oc = p_intb57.num_oc AND a.cod_n = arr_intb58[idx].cod_n AND a.cod_grupo = arr_intb58[idx].cod_grupo AND a.cod_tipo = arr_intb58[idx].cod_tipo AND a.cod_sec = arr_intb58[idx].cod_sec } SELECT DISTINCT a.cod_sp FROM cotb00014 a INNER JOIN cotb00015 b ON a.num_oc = b.num_oc WHERE a.num_oc = p_intb57.num_oc AND b.cod_n = arr_intb58[idx].cod_n AND b.cod_grupo = arr_intb58[idx].cod_grupo AND b.cod_tipo = arr_intb58[idx].cod_tipo AND b.cod_sec = arr_intb58[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_intb58[idx].cantidad_1 IS NOT NULL THEN IF arr_intb58[idx].cantidad_1 > arr_intb58[idx].cantidad_o1 THEN CALL msg(46) NEXT FIELD cantidad_1 END IF LET arr_intb58[idx].cantidad = arr_intb58[idx].cantidad_1 * 1 {arr_intb58[idx].factor_conv} DISPLAY arr_intb58[idx].cantidad TO sdetalle[scr_l].cantidad END IF ON ACTION guardar ATTRIBUTE(TEXT = "Adicionar", IMAGE = "save") IF p_intb57.bodega IS NOT NULL THEN LET nombreBodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(p_intb57.bodega) END IF { IF transacc.control_transferencia = "SI" THEN IF p_intb57.bodega_destino IS NULL THEN CALL msg(16) NEXT FIELD bodega_destino END IF END IF} IF p_intb57.bodega_destino IS NOT NULL THEN LET nombreBodegaDestino = ui.ComboBox.forName('formonly.bodega_destino') .getTextOf(p_intb57.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 LET p_intb57.fecha = TODAY IF p_intb57.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF BEGIN WORK SELECT a.numero_doc INTO secuencia FROM intb00059 a IF STATUS = NOTFOUND THEN INSERT INTO intb00059( numero_doc, us_mod, fech_mod) VALUES(0, usuarios, getdate()) END IF LET secuencia = secuencia + 1 LET p_intb57.numero_doc = secuencia UPDATE intb00059 SET numero_doc = p_intb57.numero_doc, us_mod = usuarios, fech_mod = getdate() LET subject = subject CLIPPED, p_intb57.numero_doc USING "&&&&&&&&" INSERT INTO intb00057( numero_doc, fecha, cod_mov, num_oc, orden_trabajo, tipo_cliente, sec_cliente, nombre, bodega, bodega_destino, estado, us_crea, fech_crea, observacion, url_destino, idestado) VALUES(p_intb57.numero_doc, p_intb57.fecha, p_intb57.cod_mov, p_intb57.num_oc, p_intb57.orden_trabajo, p_intb57.tipo_cliente, p_intb57.sec_cliente, p_intb57.cliente, p_intb57.bodega, p_intb57.bodega_destino, xestado, usuarios, getdate(), p_intb57.observacion, p_intb57.url_file, 5) IF STATUS < 0 THEN ROLLBACK WORK DISPLAY 'ROLLBACK 1' RETURN END IF LET tieneDetalle = "NO" FOR idx = 1 TO arr_intb58.getLength() IF arr_intb58[idx].cantidad IS NOT NULL THEN LET tieneDetalle = "SI" IF arr_intb58[idx].cantidad_1 > arr_intb58[idx].cantidad_o1 THEN CALL msg(46) ROLLBACK WORK END IF {IF arr_intb58[idx].area IS NULL THEN ROLLBACK WORK CALL msg(16) NEXT FIELD area END IF} INSERT INTO intb00058( 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_intb57.numero_doc, p_intb57.cod_mov, arr_intb58[idx].area, arr_intb58[idx].cod_n, arr_intb58[idx].cod_grupo, arr_intb58[idx].cod_tipo, arr_intb58[idx].cod_sec, arr_intb58[idx].descripcion, arr_intb58[idx].unidad_med, arr_intb58[idx].cantidad_1, arr_intb58[idx].cantidad, usuarios, getdate()) IF STATUS < 0 THEN ROLLBACK WORK DISPLAY 'ROLLBACK 2' RETURN END IF END IF END FOR #DESPIECE DELETE FROM intb00060 WHERE id_despiece = p_intb57.numero_doc EXECUTE insertad USING p_intb57.numero_doc, tmpnumero DELETE FROM tmpdespiece WHERE id_despiece = tmpnumero IF tieneDetalle = "SI" THEN COMMIT WORK CALL msg(1) CALL buscarData() CALL impdocumentos_prima( p_intb57.numero_doc, p_intb57.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_intb57.numero_doc USING "&&&&&&&&" BEGIN WORK UPDATE intb00057 SET num_oc = p_intb57.num_oc, tipo_cliente = p_intb57.tipo_cliente, sec_cliente = p_intb57.sec_cliente, nombre = p_intb57.cliente, observacion = p_intb57.observacion, bodega = p_intb57.bodega, bodega_destino = p_intb57.bodega_destino, us_mod = usuarios, fech_mod = getdate(), url_destino = p_intb57.url_file, idestado = p_intb57.idstado WHERE numero_doc = p_intb57.numero_doc AND cod_mov = p_intb57.cod_mov DELETE FROM intb00058 WHERE numero_doc = p_intb57.numero_doc AND cod_mov = p_intb57.cod_mov LET tieneDetalle = "NO" FOR idx = 1 TO arr_intb58.getLength() IF arr_intb58[idx].cantidad IS NOT NULL THEN LET tieneDetalle = "SI" IF arr_intb58[idx].cantidad_1 > arr_intb58[idx].cantidad_o1 THEN CALL msg(46) NEXT FIELD cantidad_1 END IF # IF arr_intb58[idx].area IS NULL THEN # ROLLBACK WORK # CALL msg(16) # NEXT FIELD area # END IF INSERT INTO intb00058( 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_intb57.numero_doc, p_intb57.cod_mov, arr_intb58[idx].area, arr_intb58[idx].cod_n, arr_intb58[idx].cod_grupo, arr_intb58[idx].cod_tipo, arr_intb58[idx].cod_sec, arr_intb58[idx].descripcion, arr_intb58[idx].unidad_med, arr_intb58[idx].cantidad_1, arr_intb58[idx].cantidad, usuarios, getdate()) IF STATUS < 0 THEN ROLLBACK WORK RETURN END IF END IF END FOR #DESPIECE DELETE FROM intb00060 WHERE id_despiece = p_intb57.numero_doc EXECUTE insertad USING p_intb57.numero_doc, tmpnumero DELETE FROM tmpdespiece WHERE id_despiece = p_intb57.numero_doc IF tieneDetalle = "SI" THEN COMMIT WORK CALL msg(13) CALL buscarData() CALL impdocumentos_prima( p_intb57.numero_doc, p_intb57.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.num_doc FROM intb00006 a WHERE a.num_req = p_intb57.numero_doc AND a.cod_mov = p_intb57.cod_mov IF STATUS != NOTFOUND THEN CALL msg(1014) RETURN END IF DISPLAY "ANULAR: ", p_intb57.numero_doc LET respuesta = fgl_winquestion( "Borrar", "Esta seguro de elminiar esta requisicion?", "NO", "YES|NO", "QUESTION", 0) IF respuesta = "YES" THEN UPDATE intb00057 SET status_t = 'E', us_mod = usuarios, fech_mod = getdate() WHERE numero_doc = p_intb57.numero_doc AND cod_mov = p_intb57.cod_mov IF STATUS < 0 THEN DISPLAY "nothing happened..." ELSE CALL msg(39) CALL arr_busqueda.clear() CALL buscarData() END IF END IF END FUNCTION FUNCTION producto() DEFINE pcodn INT SELECT a.descrip_esp, a.unidad_med, null INTO arr_intb58[idx].descripcion, arr_intb58[idx].unidad_med, pcodn FROM intb00001 a LEFT OUTER JOIN intb00028 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 WHERE a.cod_n = arr_intb58[idx].cod_n AND a.cod_grupo = arr_intb58[idx].cod_grupo AND a.cod_tipo = arr_intb58[idx].cod_tipo AND a.cod_sec = arr_intb58[idx].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_intb57.num_oc IS NOT NULL THEN LET xcuerpo1 = xcuerpo1 CLIPPED, "

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

", "

Cliente:", p_intb57.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_intb58.getLength() IF arr_intb58[idx].cod_sec IS NOT NULL THEN LET xcuerpo2 = xcuerpo2 CLIPPED, "
", arr_intb58[idx].descripcion CLIPPED, "", arr_intb58[idx].cantidad_1 USING "##,###.##", "", arr_intb58[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_intb57.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() END FUNCTION