====== Compromisos - Consulta ====== La siguiente funcionalidad permite realizar la consulta de los compromisos. ===== Pestaña: Lista Compromisos ===== {{:ada:sicoferp:financiero:presupuesto:compromisos:compromiso_lista.png?400|}} En esta pestaña se listan los compromisos. ===== Pestaña: Compromisos ===== {{ :ada:sicoferp:financiero:presupuesto:compromisos:2021-10-06_19h47_58.png?nolink&600 |}} En esta pestaña se encuentra la información asociada al compromiso ==== Contratos ==== {{:ada:sicoferp:financiero:presupuesto:compromisos:captura_contrato1.png?400|}} ===== Pestaña: Rubros ===== {{ :ada:sicoferp:financiero:presupuesto:compromisos:2021-10-06_19h49_27.png?nolink&600 |}} En esta pestaña se encuentra el rubro, la disponibilidad y el articulo que quedara asociado al compromiso. ===== Implementación del Botón "Exportar a PDF" ===== === 1. Propósito === Se ha implementado una funcionalidad que permite a los usuarios exportar los detalles de los registros consultados a formato PDF. Esta característica mejora la portabilidad y el archivo de los documentos generados por el sistema. === 2. Módulos Afectados === La funcionalidad se ha agregado a las siguientes ventanas de consulta: Disponibilidades (w_disponibilidad_cons) Compromisos (w_compromiso_cons) Recepciones de pedido (w_causacion_documento) Órdenes de pago (w_ordenes_pago_cons) === 3. Componentes Técnicos Clave === La implementación se basa en los siguientes elementos de PowerBuilder: Botón: cb_exportar_pdf Evento clicked: Llama a la función principal de generación de PDF. Función Principal: wf_generar_pdf() Responsabilidad: Contiene toda la lógica para iterar sobre los registros seleccionados, configurar las propiedades del PDF y generar los archivos. === 4. Flujo de Ejecución === El proceso que sigue el sistema al hacer clic en el botón es el siguiente: Verificación de Directorios: El sistema comprueba si la ruta C:\COMPROBANTES\[Modulo] existe. Si no, la crea. Iteración de Registros: Se recorre la lista principal (dw_lista) para identificar todas las filas que el usuario ha seleccionado. Preparación del DataStore: Para cada registro seleccionado: Se crea un uo_datastore en memoria. Se le asigna el DataObject del reporte correspondiente (ej: f_formato_documento(2, '01')). Se ejecuta el Retrieve() para cargar los datos específicos del registro. Configuración de Exportación a PDF: Se establecen las propiedades del DataWindow para la correcta generación del PDF. Este es el paso más crítico. Generación del Archivo: Se invoca la función ldw_dw.SaveAs(ls_pathfilename, PDF!, TRUE). Notificación: Al finalizar el bucle, se informa al usuario si la exportación fue exitosa o si no se seleccionó ningún registro. === 5. Configuración Técnica y Dependencias (¡Muy Importante!) === Para que la exportación a PDF funcione correctamente en los equipos de los usuarios, se deben cumplir los siguientes requisitos, ya que se utiliza el método Distill!. Método de Exportación: DataWindow.Export.PDF.Method = Distill! Este método utiliza un motor externo para "destilar" un archivo PostScript a PDF, lo que ofrece alta fidelidad con el diseño original. Dependencia 1: Ghostscript Requisito: Debe estar instalado en cada máquina cliente que vaya a utilizar esta funcionalidad. Configuración: La carpeta bin de la instalación de Ghostscript (que contiene gswin32c.exe) debe estar agregada a la variable de entorno PATH del sistema. De lo contrario, PowerBuilder no lo encontrará y el SaveAs devolverá un error -1. Dependencia 2: Impresora Virtual "Sybase DataWindow PS" Requisito: Debe existir una impresora con el nombre exacto Sybase DataWindow PS. Instalación Manual: Ir a Dispositivos e Impresoras y Agregar una impresora. Seleccionar "Agregar una impresora local o de red con configuración manual". Elegir "Usar un puerto existente" y seleccionar FILE: (Imprimir a un archivo). Seleccionar un controlador (driver) PostScript (PS). Uno genérico como HP LaserJet 2200 Series PS es una opción segura. Asignar el nombre exacto: Sybase DataWindow PS. No compartirla y finalizar la instalación. === 6. Solución a Problemas Comunes Implementada en el Código === Durante el desarrollo, se encontraron y solucionaron los siguientes inconvenientes: Problema: El contenido del reporte se cortaba horizontalmente, generando una segunda página en blanco a la derecha. Causa: Discrepancias entre el tamaño de papel del diseño del DataWindow y la configuración de la impresora virtual o los márgenes por defecto del motor de PDF. Solución: Se realiza configuración con la resolución de la pantalla para que permita la exportación correcta resolución de 1366 x 768. == continuación, se muestra el fragmento de código relevante de la función wf_generar_pdf en w_causacion_documentos.srw: == String ls_tipo, ls_ruta, ls_pathfilename,ls_valor,ls_estado long ll_selected, ll_count, ll_reintentos, ll_filesize, i, ll_estado_valido Decimal ld_cod_documento, ld_consecutivo_recep_pedido integer li_ret uo_datastore ldw_dw ldw_dw = Create uo_datastore ll_count = carpeta.pagina1.dw_lista.RowCount() ll_selected = 0 ls_ruta = "C:\COMPROBANTES\Causaciones" IF NOT DirectoryExists("C:\COMPROBANTES") THEN CreateDirectory("C:\COMPROBANTES") IF NOT DirectoryExists(ls_ruta) THEN CreateDirectory(ls_ruta) FOR i = 1 TO ll_count ll_estado_valido = 0 ld_consecutivo_recep_pedido = carpeta.pagina1.dw_lista.GetItemDecimal(i, "consecutivo") ls_estado = carpeta.pagina1.dw_lista.GetItemString(i, "estado") IF carpeta.pagina1.dw_lista.IsSelected(i) AND ld_consecutivo_recep_pedido <> 0 THEN IF ls_estado = 'Y' or ls_estado = 'P' or ls_estado = 'p' THEN MessageBox("Error", "No se pudo exportar la causación: " + String(ld_consecutivo_recep_pedido) & + " El estado actual no es válido para este proceso.") ll_estado_valido = 1 END IF ld_cod_documento = carpeta.pagina1.dw_lista.GetItemDecimal(i, "codigo_documento") guo_app.of_sql_embedded_context( sqlca ) SELECT VALOR_ALFA INTO :ls_valor FROM M_CONSTANTES WHERE TRIM(DESCRIPCION) = 'CAUSACION CONTABLE' USING SQLCA; ldw_dw.DataObject = ls_valor // f_formato_documento(4, '01') ldw_dw.SetTransObject(ts_transaccion) li_ret = ldw_dw.Retrieve(ld_cod_documento) ls_pathfilename = ls_ruta + "\CXP" +' '+ String(ld_consecutivo_recep_pedido) + ".pdf" ldw_dw.Object.DataWindow.Export.PDF.Method = Distill! ldw_dw.Object.DataWindow.Printer = "Sybase DataWindow PS" ldw_dw.Modify("DataWindow.PDF.XSLFOP.Print=NO") ldw_dw.object.DataWindow.Export.PDF.Distill.CustomPostScript = "YES" li_ret = ldw_dw.SaveAs(ls_pathfilename, PDF!, TRUE) IF li_ret <> 1 OR ll_estado_valido = 1 THEN MessageBox("Error", "No se pudo exportar la recepción de pedido: " + String(ld_consecutivo_recep_pedido)) END IF ll_selected++ END IF NEXT IF ll_selected > 0 THEN MessageBox("Información", "Se finalizó la exportación.") ELSE MessageBox("Sin acción", "No se seleccionó ningún documento válido para ser exportado.") END IF RETURN 1 === Desarrollado por: [Miguel Muñoz] Fecha: [02/07/2026] Versión de PB: 12.5 === ===== Inclusión de Código CPC DANE - Reporte de Compromisos ===== === 1. Descripción del Cambio === Se integró el campo "Código CPC DANE" en el reporte de detalles de compromiso. Para lograr una visualización limpia, se optimizó el diseño del reporte ocultando espacios innecesarios y priorizando la aparición de este nuevo dato. === 2. Solución Funcional === Nueva Información: Ahora el reporte muestra el Código CPC DANE asociado a los artículos del compromiso, un dato necesario para la clasificación y reportes de la entidad. Mejora Visual: Se ajustó el diseño del reporte para ocultar campos que estaban en blanco o sin uso. Esto permitió liberar espacio y "pintar" el nuevo código de forma clara y ordenada sin saturar el documento. === 3. Solución Técnica === Librería Modificada: sf01cmps.pbl Objeto Modificado: DataWindow r_compromiso_doc_det_cefit Detalles del Cambio: Consulta SQL: Se modificó la sentencia SQL del DataWindow para incluir un nuevo campo proveniente de la tabla maestra de artículos: MAESTRO_ARTICULOS.CODIGO_DANE. Ajuste de Layout: En el diseñador del DataWindow, se reorganizaron los objetos. Se ocultaron los campos que no contenían información para posicionar y hacer visible el nuevo campo de código DANE en el espacio recuperado. === 4. Datos del Objeto === Módulo: Presupuesto Reporte: Detalle de Compromisos (CEFIT). DataWindow: r_compromiso_doc_det_cefit.