Consulta lista de Datos
Utilizando Documentos dinámicos se puede leer datos de cualquier sección o informe.
¿Cómo se consultan listados desde documentos dinámicos?
Para trabajar con listados e informes mediante DinaScript, el proceso se desglosa en tres etapas
Inicialización de la Carga: Comienza con el método DataListLoad
, donde defines el identificador del conjunto de datos (sección o informe) y estableces los límites de la carga mediante parámetros de paginación. Este paso es crucial para preparar el entorno de datos sobre el cual trabajarás.
Filtrado de Datos: A continuación, el método DataListLoadAddFilter
te permite aplicar filtros específicos a los datos previamente cargados. Esta capacidad de filtrado es esencial para refinar los resultados y centrarse en la información más relevante para el análisis o la presentación que estés preparando.
Presentación de los Datos: Finalmente, la función ProcessDataList_Ini
ejecuta la consulta de datos con los filtros aplicados y los presenta. La versatilidad de este paso radica en la capacidad de acceder y manipular la información resultante, adaptándola a las necesidades específicas del usuario o del contexto de la aplicación.
F.DataListLoad(S.Secciones.ReunionesLista.ID,1,100000)
F.DataListLoadAddFilter(S.Secciones.ReunionesLista.ID,S.Campos.ReunionesLista.RelacionElementoContenedorListador.id,'=',V.Reunion)
num CantidadDeElementosEnListado = F.InformacionCarga_NumeroDeResultados(S.Secciones.ReunionesLista.ID)
If v.CantidadDeElementosEnListado > 0
F.ProcessDataList_Ini(S.Secciones.ReunionesLista.ID)
F.Write(' - ', I.ReunionesLista.ReferenciaAsistente.TextoPrincipal)
F.Write('<br>')
F.ProcessDataList_End
Else
F.Write('No hay elementos en este listado')
End If
Crear una tabla de datos
En el siguiente ejemplo se combianan consultar un listado con Tablas de datos en Dinaup.
@ ---- Tabla Conceptos ----
txt col_Concepto = 'Concepto'
txt col_ConceptoDtosConfig = 'Dtos'
txt col_PrecioUnidad = 'P. Unidad'
txt col_Unidades = 'Unidades'
txt col_Descuentos = 'Descuentos'
txt col_Total = 'Total'
num TablaID = F.DataTable_New(v.col_Concepto,v.col_PrecioUnidad,v.col_Unidades,v.col_ConceptoDtosConfig,v.col_Descuentos,v.col_Total)
F.DataListLoad(S.Secciones.VentasIngresosLista.ID,1,100000)
F.DataListLoadAddFilter(S.Secciones.VentasIngresosLista.ID,S.Campos.VentasIngresosLista.RelacionElementoContenedorListador.id,'=',V.Factura)
F.ProcessDataList_Ini(S.Secciones.VentasIngresosLista.ID)
F.DataTable_AddRow(v.TablaID)
F.DataTable_SetValueText(v.TablaID,v.col_Concepto,I.VentasIngresosLista.TextoPrincipal)
F.DataTable_SetValueMoney(v.TablaID,v.col_PrecioUnidad,I.VentasIngresosLista.ImportePrecioUnidad)
F.DataTable_SetValueNum(v.TablaID,v.col_Unidades,I.VentasIngresosLista.CantidadUnidades)
txt DtoFijo = F.FormatMoney(I.VentasIngresosLista.ImporteDescuentoFijoUnidad)
txt DtosPorciento = F.FormatPercentage(I.VentasIngresosLista.SumaDescuentosPorcientoPorciento)
if I.VentasIngresosLista.ImporteDescuentoFijoUnidad <> 0 y I.VentasIngresosLista.SumaDescuentosPorcientoPorciento<>0
F.DataTable_SetValue(v.TablaID,v.col_ConceptoDtosConfig,F.Texto_Unir(v.DtoFijo,'+',v.DtosPorciento))
elseif I.VentasIngresosLista.ImporteDescuentoFijoUnidad <> 0
F.DataTable_SetValue(v.TablaID,v.col_ConceptoDtosConfig,F.Texto_Unir(v.DtoFijo))
elseif I.VentasIngresosLista.SumaDescuentosPorcientoPorciento <> 0
F.DataTable_SetValue(v.TablaID,v.col_ConceptoDtosConfig,F.Texto_Unir(v.DtosPorciento))
end if
F.DataTable_SetValueMoney(v.TablaID,v.col_Descuentos,I.VentasIngresosLista.ImporteTotalDescuentos)
F.DataTable_SetValueMoney(v.TablaID,v.col_Total,I.VentasIngresosLista.ImporteTotalConcepto)
F.ProcessDataList_End
Puedes eliminar columnas vacías
F.DataTable_ColumnDeleteIfIsEmpty(v.TablaID,v.col_ConceptoDtosConfig)
F.DataTable_ColumnDeleteIfIsEmpty(v.TablaID,v.col_Descuentos)
Uso de tabla de datos
En el ejemplo anterior hemos visto como crear una tabla de datos, después tenemos varias formas de darle uso.
Para ello utilizamos F.DataTable_Build
F.Write(F.DataTable_Build(v.TablaResumen,'html| class=" w-100 rnd"'))
Preparar JSON para VUE
Cuando se van a realizar documentos HTML complejos con muchos datos debemos separar los datos del renderizado para aumentar la mantenibilidad. Para generar un JSON en DinaScript mediante el uso de una tabla de datos y luego renderizar esta tabla en formato JSON, sigue estos pasos:
Crear la Tabla de Datos: Utiliza la función DataTable_New para definir una nueva tabla de datos con las columnas que coincidan con la estructura de tu JSON deseado.
Llenar la Tabla de Datos: A medida que iteras sobre tus informes o datos, utiliza DataTable_AddRow y DataTable_SetValue (o una función similar dependiendo de la sintaxis exacta de DinaScript) para agregar datos a la tabla.
Renderizar la Tabla en JSON: Usa DataTable_Build con el formato 'json' para obtener una representación JSON de la tabla de datos.
Ejemplo de Implementación
Supongamos que quieres crear un JSON para una lista de tareas. Aquí te muestro cómo hacerlo paso a paso:
Crear la Tabla de Datos
txt col_NombreTarea = 'Nombre de la Tarea'
txt col_EstadoTarea = 'Estado de la Tarea'
num TablaID = F.DataTable_New(col_NombreTarea, col_EstadoTarea)
Llenar la Tabla de Datos
// Suponiendo que ya has cargado los datos necesarios y estás listo para iterar sobre ellos
F.ProcessDataList_Ini(S.Secciones.TareasDeProyectosBase.ID)
// Iterar sobre cada tarea en el informe
F.DataTable_AddRow(TablaID)
F.DataTable_SetValueText(TablaID, col_NombreTarea, I.TareasDeProyectosBase.TituloDeTarea)
F.DataTable_SetValueText(TablaID, col_EstadoTarea, I.TareasDeProyectosBase.ReferenciaEstado.TextoPrincipal)
// Repite para cada tarea...
F.ProcessDataList_End
Renderizar la Tabla en JSON
// Convertir la tabla de datos en JSON
txt jsonTareas = F.DataTable_Build(TablaID, 'json')
Una vez generado el JSON, puedes utilizarlo en tu código frontend. Si estás integrando este JSON con una aplicación Vue.js, podrías inyectar este JSON directamente en tus datos Vue o hacerlo accesible mediante una API o un endpoint específico, dependiendo de tu arquitectura y necesidades específicas.
<script>
var appData = {
tareas: <!--: F.Write(v.jsonTareas) :-->,
proyectos: <!--: F.Write(v.jsonProyectos) :-->
};
new Vue({
el: '#app',
data: appData
});
</script>
Last modified: 04 February 2025