Lógica - logica en un reporte

 
Vista:

logica en un reporte

Publicado por sonite (1 intervención) el 26/10/2007 20:10:07
tengo una lista de registros y necesito que me ayuden en como puedo totalizar por grupos, ejemplo: tengo un grupo que se repite
y luego viene otro grupo diferente al anterior como hago para que al terminar de imprimir un grupo totalice?

aqui les muestro un trozo de reporte:
J-00005000-1 Inversiones El Triangulo, C.a. 6.352,50 127,05 0000063522
J-00005000-1 Inversiones El Triangulo, C.a. 96.547,00 1.930,94 0000095478
J-00005000-1 Inversiones El Triangulo, C.a. 30.521,00 610,42 0000009875
J-00005000-1 Inversiones El Triangulo, C.a. 65.422,00 1.308,44 0000365422
J-00005000-1 Inversiones El Triangulo, C.a. 65.444,00 1.308,88 0000054654
J-00005000-1 Inversiones El Triangulo, C.a. 2.000,00 40,00 0000098788
J-00005000-1 Inversiones El Triangulo, C.a. 80.000.000,00 1.600.000,00 0000365214
J-00005000-1 Inversiones El Triangulo, C.a. 3.000.000,00 60.000,00 0000965555
J-00005000-1 Inversiones El Triangulo, C.a. 20.000.000,00 400.000,00 0000965666
J-00005000-1 Inversiones El Triangulo, C.a. 2.000,00 40,00 0005474744
J-00005000-1 Inversiones El Triangulo, C.a. 9.548,00 190,96 0000007483
J-00005000-1 Inversiones El Triangulo, C.a. 98.798,00 1.975,96 0000087876
J-00005000-1 Inversiones El Triangulo, C.a. 52.000,00 1.040,00 0055555555
Total por: ------->J000000050001
J-00093482-3 Cooperativa El Retruque R.l. 654,00 13,08 0000654533
Total por: ------->J000000050001
J-00093482-3 Cooperativa El Retruque R.l. 50.111,00 1.002,22 0000009548
Total por: ------->J000000050001
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Totalización por grupos en un reporte

Publicado por Alejandro (49 intervenciones) el 25/01/2024 21:27:47
Sonite, para totalizar por grupos en un reporte, necesitarás llevar un seguimiento de los totales mientras procesas los registros. Aquí hay un ejemplo en C++ que puedes adaptar según tus necesidades:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
 
struct Registro {
    std::string grupo;
    double monto1;
    double monto2;
    std::string referencia;
};
 
// Función para imprimir el total por grupo
void imprimirTotalPorGrupo(const std::string& grupo, double totalMonto1, double totalMonto2) {
    std::cout << "Total por: ------->" << grupo << std::endl;
    std::cout << "Total Monto1: " << totalMonto1 << std::endl;
    std::cout << "Total Monto2: " << totalMonto2 << std::endl;
    std::cout << std::endl;
}
 
int main() {
    // Lista de registros
    std::vector<Registro> registros = {
        {"J-00005000-1", 6352.50, 127.05, "0000063522"},
        {"J-00005000-1", 96547.00, 1930.94, "0000095478"},
        // ... otros registros ...
        {"J-00093482-3", 654.00, 13.08, "0000654533"},
        // ... otros registros ...
        {"J-00093482-3", 50111.00, 1002.22, "0000009548"}
        // ... otros registros ...
    };
 
    // Mapa para mantener los totales por grupo
    std::map<std::string, std::pair<double, double>> totalesPorGrupo;
 
    // Variables para el seguimiento del grupo actual
    std::string grupoActual;
    double totalMonto1Actual = 0.0;
    double totalMonto2Actual = 0.0;
 
    // Procesar los registros
    for (const auto& registro : registros) {
        // Verificar si cambió el grupo
        if (registro.grupo != grupoActual) {
            // Imprimir el total por el grupo anterior
            if (!grupoActual.empty()) {
                imprimirTotalPorGrupo(grupoActual, totalMonto1Actual, totalMonto2Actual);
            }
 
            // Iniciar el nuevo grupo
            grupoActual = registro.grupo;
            totalMonto1Actual = 0.0;
            totalMonto2Actual = 0.0;
        }
 
        // Sumar al total del grupo actual
        totalMonto1Actual += registro.monto1;
        totalMonto2Actual += registro.monto2;
    }
 
    // Imprimir el último total por grupo
    if (!grupoActual.empty()) {
        imprimirTotalPorGrupo(grupoActual, totalMonto1Actual, totalMonto2Actual);
    }
 
    return 0;
}

Este código utiliza un mapa para mantener los totales por grupo y procesa los registros para calcular estos totales. Al cambiar de grupo, imprime el total del grupo anterior y comienza el seguimiento del nuevo grupo. Al final del bucle, también imprime el total del último grupo. Adaptarás esto según la estructura exacta de tu archivo y cómo almacenas y procesas los datos en tu aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar