/*************************************************************************\ |* *| |* HERM_LST *| |* *| |* Descripcin: *| |* Listados por pantalla e impresos (RAPIDOS) *| |* *| \*************************************************************************/ #include #include #include #include #include #include "..\libs\make_bot\make_bot.h" #include "..\libs\bdatos\bdatos.hh" #include "Herm.h" #define AVANCES_DE_PAGINA 37 void ImprimeEtiquetas(void); void ImprimeFacturas(void); void OptenPaginasIniFin( int *Inicio, int *Fin, int NRegistros ); void ImprimeListaSitios(void); void MuestraLinea(int Tipo_de_Listado); void ImprimeLinea( int Tipo_de_Listado, FILE *file_out ); void ImprimePaginas( int Tipo_de_Listado ); void MuestraPagina( int adelante_atras, int Tipo_de_Listado ); void Escr_Mensaje(char *Encabezado, char lineas, char Mensaje[][50] ); extern void ImprimeFicha(void); extern void CodigoImpresora( char *codigo ); extern int ComparaRegistros( const void *A, const void *B ); extern char FICHA_REGISTRO; extern struct date FechaActual; extern CONFIG Config; extern BDatos BConfig; extern BDatos BHerm; extern HermStruct SHerm, BHtmp; extern BDatos BHBorrados; extern HERMBORRADOS HermanosBorrados; void ListadosRapidos( int Tipo_de_Listado ) { char Mensaje[][50] = { "La base de Datos", "esta vacia." }; char File[80]; int ok = 0, BPush; True_Push = 0; int HnoHna; if ( Optar( 1, "BASE A LISTAR", "Aceptar: HERMANOS", "Cancelar: HERMANAS", NULL ) ) HnoHna = HERMANOS; else HnoHna = HERMANAS; getdate( &FechaActual ); strcpy( BHerm.MyHeader.ProgName, "Hermadad" ); BHerm.MyHeader.VerHi = 1; BHerm.MyHeader.VerLow = 0; Imprime_Estaticos(60, "Herm.img"); settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); // Base de Datos if ( HnoHna == HERMANOS ) { strcpy( File, "datos\\hermanos.dbf" ); FICHA_REGISTRO = 0; } else { strcpy( File, "datos\\hermanas.dbf" ); FICHA_REGISTRO = 1; } if ( BHerm.AbrirReg( File, sizeof( HermStruct ) ) != OK ) Error(BHerm.cError); if ( BHerm.Registros() == 0 ) { Escr_Mensaje( "ERROR", 2, Mensaje ); BHerm.CerrarReg(); } else { if ( Tipo_de_Listado == TUNICA_HDAD && Config.item_ordenado[FICHA_REGISTRO] != 9 ) { Imprime_Estaticos(20, "Herm.img"); settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); setcolor( 63 ); outtextxy( 172, 165, " Comando Ordenar" ); setcolor( ROJO ); outtextxy( 172, 200+20*1, " Preparando base de Datos" ); outtextxy( 172, 200+20*2, " Por favor, espere..." ); Config.item_ordenado[FICHA_REGISTRO] = 8; if ( BConfig.EscribeReg((void *)&Config, 0) != OK ) Error(BConfig.cError); BHerm.SortReg(ComparaRegistros); Imprime_Estaticos(60, "Herm.img"); settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); } else if ( Tipo_de_Listado == FACTURAS ) { ImprimeFacturas(); BHerm.CerrarReg(); return ; } else if ( Tipo_de_Listado == ETIQUETAS ) { ImprimeEtiquetas(); BHerm.CerrarReg(); return ; } } BHerm.LeeReg( (void *)&SHerm, 0 ); MuestraLinea(Tipo_de_Listado); MuestraPagina( 1, Tipo_de_Listado); while( !ok ) { BPush = Comprueba_Secuencia( 4, NULL ); switch ( BPush ) { case 0: // No se pulso ningun BOTON while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER // El raton todava sigue pulsado break; case -2: if ( (BPush = getch()) != 27 ) { while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER } else { ok = 1; } break; // Tecla Normal case -1: // Hay una tecla especial en BUFFER // La eliminamos while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER break; // INICIO DE BOTONES // Retroceso case 1: MuestraPagina( -1, Tipo_de_Listado ); break; // Imprimir case 2: if ( Tipo_de_Listado == PAPELETAS_SITIO ) ImprimeListaSitios(); else ImprimePaginas( Tipo_de_Listado ); break; // Avance case 3: MuestraPagina( 1, Tipo_de_Listado ); break; } } BHerm.CerrarReg(); } void MuestraPagina( int adelante_atras, int Tipo_de_Listado ) { long i, CurrReg; static long antigua_pos = 0; int virtual_pos = 0; char buffer[500]; CurrReg = BHerm.RegActual(); if ( (CurrReg == 0 && adelante_atras == -1) ) return; setfillstyle(SOLID_FILL, BLANCO); bar( 11, 66, 634, 449 ); setcolor( AZUL ); if ( adelante_atras == -1 ) { CurrReg = antigua_pos; virtual_pos = AVANCES_DE_PAGINA-1; } else { virtual_pos = 0; antigua_pos = BHerm.RegActual(); } for( i=CurrReg; ( virtual_pos >= 0 && virtual_pos < AVANCES_DE_PAGINA && i >= 0 && i < BHerm.Registros() ) ; i+= adelante_atras ) { if ( BHerm.LeeReg( (void *)&SHerm, i ) != OK ) return; switch( Tipo_de_Listado ) { case VOTANTES: // si cumple los requisitos if ( SHerm.Varios.PuedVotar ) { // 12345 123456789-12345 123456789-12345 123456789-12345 123456789-123456789- 12-12-1234 12-12-1234 sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre ); outtextxy( 10, 75+10*virtual_pos, buffer ); // Los apellidos seran unidos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[21] = '\0'; outtextxy( 140, 75+10*virtual_pos, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); outtextxy( 265, 75+10*virtual_pos, buffer ); sprintf( buffer, "%02d-%02d-%04d %02d-%02d-%04d" ,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year, (int)SHerm.FechaN.da_day, (int)SHerm.FechaN.da_mon, SHerm.FechaN.da_year ); outtextxy( 505, 75+10*virtual_pos, buffer ); virtual_pos +=adelante_atras; } break; case PAPELETAS_SITIO: if ( SHerm.Varios.RealPenit ) { // si cumple los requisitos // 12345 123456789-12345 123456789-12345 123456789-12345 123456789-123456789- 12-12-1234 12-12-1234 sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre ); outtextxy( 10, 75+10*virtual_pos, buffer ); // Los apellidos seran unidos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[21] = '\0'; outtextxy( 140, 75+10*virtual_pos, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); outtextxy( 265, 75+10*virtual_pos, buffer ); sprintf( buffer, "%02d-%02d-%04d %s" ,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year, SHerm.Telefono1 ); outtextxy( 505, 75+10*virtual_pos, buffer ); virtual_pos +=adelante_atras; } break; case GRAL_HERMANOS: case GRAL_HERM_RAP: // si cumple los requisitos // 12345 123456789-12345 123456789-12345 123456789-12345 123456789-123456789- 12-12-1234 12-12-1234 sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre ); outtextxy( 10, 75+10*virtual_pos, buffer ); // Los apellidos seran unidos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[21] = '\0'; outtextxy( 140, 75+10*virtual_pos, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); outtextxy( 265, 75+10*virtual_pos, buffer ); sprintf( buffer, "%02d-%02d-%04d %s" ,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, (int)SHerm.Antig.da_year, SHerm.Telefono1 ); outtextxy( 505, 75+10*virtual_pos, buffer ); virtual_pos +=adelante_atras; break; case RECIBE_NOTIFIC: // si cumple los requisitos if ( SHerm.Varios.Notific ) { sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre ); outtextxy( 10, 75+10*virtual_pos, buffer ); // Los apellidos seran unidos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[21] = '\0'; outtextxy( 140, 75+10*virtual_pos, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); outtextxy( 265, 75+10*virtual_pos, buffer ); sprintf( buffer, "%-15s", SHerm.Poblacion ); outtextxy( 505, 75+10*virtual_pos, buffer ); virtual_pos +=adelante_atras; } break; case ACOGIDOS_CUOT: // si cumple los requisitos if ( SHerm.Varios.CuotaFam ) { sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre ); outtextxy( 10, 75+10*virtual_pos, buffer ); // Los apellidos seran unidos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[21] = '\0'; outtextxy( 120, 75+10*virtual_pos, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); outtextxy( 265, 75+10*virtual_pos, buffer ); sprintf( buffer, "%-15s", SHerm.Poblacion ); outtextxy( 505, 75+10*virtual_pos, buffer ); virtual_pos +=adelante_atras; } break; case TUNICA_HDAD: // si cumple los requisitos if ( SHerm.Varios.TunicaHd ) { sprintf( buffer, "%5ld %-15s", SHerm.NHno, SHerm.Nombre ); outtextxy( 10, 75+10*virtual_pos, buffer ); // Los apellidos seran unidos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[21] = '\0'; outtextxy( 140, 75+10*virtual_pos, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? "," : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); outtextxy( 265, 75+10*virtual_pos, buffer ); sprintf( buffer, "%02d-%02d-%04d %4ld" ,(int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year, (int)SHerm.NTunica ); outtextxy( 505, 75+10*virtual_pos, buffer ); virtual_pos +=adelante_atras; } break; } } if ( adelante_atras == -1 ) antigua_pos = BHerm.RegActual(); } void MuestraLinea(int Tipo_de_Listado) { char buffer[500]; buffer[0] = '\0'; switch( Tipo_de_Listado ) { case VOTANTES: sprintf( buffer, "NHno Nombre (completo) Direccion Antigedad F.Nacimiento"); break; case GRAL_HERMANOS: sprintf( buffer, "NHno Nombre (completo) Direccion Antigedad Telefono"); break; case GRAL_HERM_RAP: sprintf( buffer, "NHno Nombre (completo) Direccion Antigedad Telefono"); break; case ACOGIDOS_CUOT: sprintf( buffer, "NHno Nombre (completo) Direccion Poblacion"); break; case RECIBE_NOTIFIC: sprintf( buffer, "NHno Nombre (completo) Direccion Poblacion"); break; case TUNICA_HDAD: sprintf( buffer, "NHno Nombre (completo) Direccion Antigedad N Tunica"); break; case PAPELETAS_SITIO: sprintf( buffer, "NHno Nombre (completo) Direccion Antigedad Telefono"); break; } outtextxy( 12, 45, buffer ); } void ImprimePaginas( int Tipo_de_Listado ) { long i, CurrReg, lineas_impresas = 0; char buffer[500]; FILE *file_out; CurrReg = BHerm.RegActual(); while ( !Comprueba_Impresora() ) { if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) ) return; }; switch ( Tipo_de_Listado ) { case ACOGIDOS_CUOT: case VOTANTES: // Miramos si desea mandar el informe a un archivo if ( Config.ImpCompr[0] == '-' && Config.ImpCompr[1] == '>' ) { strcpy( buffer, Config.ImpCompr ); strrev( buffer ); buffer[ strlen( buffer ) - 2 ] = '\0'; strrev( buffer ); if ( ( file_out = fopen( buffer, "w" ) ) == NULL ) return; } else { // Mandar codigo caracteres grandes CodigoImpresora( Config.ImpCompr ); file_out = stdprn; } break; default: file_out = stdprn; break; } ImprimeLinea( Tipo_de_Listado, file_out ); for( i=0; i < BHerm.Registros() && i >= 0; i++ ) { if ( Config.LineasImpresion != 0 && lineas_impresas > Config.LineasImpresion ) { fputc( 12, file_out ); lineas_impresas = 0; while ( !Comprueba_Impresora() ) { if ( !Optar( 1, "ERROR IMPRESORA", "Coloque la siguiente pgina", "y pulse ACEPTAR para continuar", NULL ) ) i = -1; }; } if ( BHerm.LeeReg( (void *)&SHerm, i ) != OK ) break; switch( Tipo_de_Listado ) { case VOTANTES: // si cumple los requisitos if ( SHerm.Varios.PuedVotar ) { sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[20] = '\0'; fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso ); buffer[34] = '\0'; fprintf( file_out, "%-34s %02d-%02d-%02d %02d-%02d-%02d\n\r", buffer, (int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, ( SHerm.Antig.da_year - (SHerm.Antig.da_year/100)*100 ) , (int)SHerm.FechaN.da_day, (int)SHerm.FechaN.da_mon, ( SHerm.FechaN.da_year - (SHerm.FechaN.da_year/100)*100 ) ); lineas_impresas++; } break; case GRAL_HERMANOS: // // D i R e C t O // si cumple los requisitos ImprimeFicha(); lineas_impresas++; break; case PAPELETAS_SITIO: // // D i R e C t O if ( SHerm.Varios.RealPenit ) { sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[20] = '\0'; fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer ); fprintf( file_out, "%02d-%02d-%04d %s\n\r", (int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year, SHerm.Telefono1 ); } break; case GRAL_HERM_RAP: // // D i R e C t O // si cumple los requisitos sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[20] = '\0'; fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso ); buffer[40] = '\0'; fprintf( file_out, "%-40s\n\r", buffer ); lineas_impresas++; break; case RECIBE_NOTIFIC: // si cumple los requisitos if ( SHerm.Varios.Notific ) { sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[20] = '\0'; fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? "," : "", SHerm.Piso ); buffer[32] = '\0'; fprintf( file_out, "%-30s %02d-%02d-%02d %s\n\r", buffer, (int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, ( SHerm.Antig.da_year - (SHerm.Antig.da_year/100)*100), SHerm.Telefono1 ); lineas_impresas++; } break; case ACOGIDOS_CUOT: // si cumple los requisitos if ( SHerm.Varios.CuotaFam ) { sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 ); buffer[20] = '\0'; fprintf( file_out, "%4ld %-10s %-20s ", SHerm.NHno, SHerm.Nombre, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso ); buffer[33] = '\0'; fprintf( file_out, "%-33s %02d-%02d-%04d %s\n\r", buffer, (int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, ( SHerm.Antig.da_year - (SHerm.Antig.da_year/100)*100), SHerm.Telefono1 ); lineas_impresas++; } break; case TUNICA_HDAD: // // D i R e C t O // si cumple los requisitos if ( SHerm.Varios.TunicaHd ) { sprintf( buffer, "%s %s %s", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 ); buffer[33] = '\0'; fprintf( file_out, "%4ld %-33s ", SHerm.NHno, buffer ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, ( SHerm.Num[0] != '\0' ) ? ", " : "", SHerm.Num, ( SHerm.Piso[0] != '\0' ) ? ", " : "", SHerm.Piso ); buffer[32] = '\0'; fprintf( file_out, "%-32s ", buffer ); if ( SHerm.NTunica == 0 ) fprintf( stdprn, " %04ld\n\r", SHerm.NTunica ); else fprintf( stdprn, " HDAD\n\r" ); lineas_impresas++; } break; } if ( kbhit() && getch() == 27 && Optar( 1, "CANCELAR IMPRESION", "Desea cancelar el trabajo", "de impresion actual?", NULL ) ) break; } // Nueva pagina fputc( 12, file_out ); if ( Tipo_de_Listado != PAPELETAS_SITIO && Tipo_de_Listado != TUNICA_HDAD && Tipo_de_Listado != GRAL_HERM_RAP) { // Miramos si desea mandar el informe a un archivo if ( Config.ImpCompr[0] == '-' && Config.ImpCompr[1] == '>' ) { fclose( file_out ); } else // Mandar codigo caracteres pequeos CodigoImpresora( Config.ImpNormal ); } // Regresamos a la posicion original if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK ) return; } void ImprimeLinea( int Tipo_de_Listado, FILE *file_out ) { char buffer[500]; switch( Tipo_de_Listado ) { case VOTANTES: fprintf( file_out, "Listado General de Votantes\n\r\n\r"); fprintf( file_out, "NHno Nombre (completo) Direccion Antigedad F.Nacimiento\n\r\n\r"); break; case GRAL_HERMANOS: break; case GRAL_HERM_RAP: fprintf( file_out, "Listado Rpido de hermanos\n\r\n\r"); fprintf( file_out, "NHn Nombre (completo) Direccion \n\r\n\r"); //123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789- // 123456789-123456789-123456789- 123456789-123456789-123456789-123456789- break; case ACOGIDOS_CUOT: fprintf( file_out, "Listado de Hermanos acogidos a cuota\n\r\n\r"); fprintf( file_out, "NHno Nombre (completo) Direccion Antigedad Telfono\n\r\n\r"); break; case RECIBE_NOTIFIC: fprintf( file_out, "Listado de hermanos que reciben notificaciones\n\r\n\r"); fprintf( file_out, "NHno Nombre (completo) Direccion Antigedad Telfono\n\r\n\r"); break; case TUNICA_HDAD: fprintf( file_out, "Listado de hermanos que poseen tunica de la hermandad\n\r\n\r"); fprintf( file_out, "NHno Nombre (completo) Direccion Tnica\n\r\n\r"); //123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789- // 123456789-123456789-123456789-123 56789-123456789-123456789-123456789- break; case PAPELETAS_SITIO: fprintf( file_out, "Listado de hermanos que Realizan la estacion de Penitencia\n\r\n\r"); fprintf( file_out, "NHno Nombre (completo) Antigedad Telefono\n\r\n\r"); break; } } void ImprimeListaSitios(void) { char buffer[500]; BDatos Hnos, Hnas; char CMen; struct textsettingstype texttypeinfo; void *Imagen; int ok = 0, enc, CtoVirgen, Insignia; long i, j; HermStruct A, B; FILE *file_out; file_out = stdprn; if ( (Imagen = malloc( imagesize(170, 165, 470, 315) ) ) == NULL ) return; getimage( 170, 165, 470, 315, Imagen ); Imprime_Estaticos(20, "Herm.img"); gettextsettings( &texttypeinfo ); settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); setcolor( BLANCO ); outtextxy( 172+((296 - textwidth( "Listado de P. Sitios" ) ) / 2 ), 165, "Listado de P. Sitios" ); setcolor( NEGRO ); outtextxy( 172, 200, "Reordenando Hermanos" ); Hnos.AbrirReg( "datos\\hermanos.dbf", sizeof( HermStruct ) ); FICHA_REGISTRO = 0; if ( Config.item_ordenado[FICHA_REGISTRO] != 8 ) { Config.item_ordenado[FICHA_REGISTRO] = 8; if ( BConfig.EscribeReg((void *)&Config, 0) != OK ) Error(BConfig.cError); Hnos.SortReg(ComparaRegistros); } outtextxy( 172, 225, "Reordenando Hermanas" ); Hnas.AbrirReg( "datos\\hermanas.dbf", sizeof( HermStruct ) ); FICHA_REGISTRO = 1; if ( Config.item_ordenado[FICHA_REGISTRO] != 8 ) { Config.item_ordenado[FICHA_REGISTRO] = 8; if ( BConfig.EscribeReg((void *)&Config, 0) != OK ) Error(BConfig.cError); Hnas.SortReg(ComparaRegistros); } outtextxy( 172, 250, "Fusionando Bases " ); ////////////// Dos Recorridos 1 Cribar CRISTO ////////////// 2 Cribar VIRGEN for ( CtoVirgen = 0; CtoVirgen < 2; CtoVirgen++ ) { fprintf( file_out, "\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r"); fprintf( file_out, "> Listado de Hermanos que realizan penitencia" ); fprintf( file_out, "\n\r\n\r\n\r%s", (CtoVirgen==0) ? "C R I S T O" : "V I R G E N"); fprintf( file_out, "\n\r\n\r\n\r> Ordenado por antiguedad y segn insignia"); Insignia = -1; i=0; j=0; ok = 0; // Empezamos a comparar con los primeros datos validos while( Hnos.LeeReg( (void *)&A, i ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++; while( Hnas.LeeReg( (void *)&B, j ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++; // Solo si es cierto que los datos de ambos son validos if ( Hnos.LeeReg( (void *)&A, i ) == OK && Hnas.LeeReg( (void *)&B, j ) == OK ) while( !ok ) { // Mientras A < B if ( ComparaRegistros( (void *)&A, (void *)&B ) < 0 ) { // Si es una nueva insignia. Digo cual... if ( Insignia != A.Insignia ) { Insignia = A.Insignia; fputc( 12, file_out ); fprintf( file_out, "\n\r>Hermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia ); } // Imprimo y avanzo hermanos sprintf( buffer, "%s %s", A.Apellido1, A.Apellido2 ); buffer[22] = '\0'; fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r", A.NHno, A.Nombre, buffer, (int)A.Antig.da_day, (int)A.Antig.da_mon, (int)A.Antig.da_year, A.Telefono1 ); i++; // Me coloco en el siguiente registro valido de HERMANOS while( ( enc = Hnos.LeeReg( (void *)&A, i ) ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++; // que no hay, po fale, me salgo if ( enc != OK ) ok = 1; } else { // Si es una nueva insignia. Digo cual... if ( Insignia != B.Insignia ) { Insignia = B.Insignia; fputc( 12, file_out ); fprintf( file_out, "\n\rHermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia ); } // Imprimo y avanzo hermanas sprintf( buffer, "%s %s", B.Apellido1, B.Apellido2 ); buffer[22] = '\0'; fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r", B.NHno, B.Nombre, buffer, (int)B.Antig.da_day, (int)B.Antig.da_mon, (int)B.Antig.da_year, B.Telefono1 ); j++; // Me coloco en el siguiente registro valido de HERMANAS while( ( enc = Hnas.LeeReg( (void *)&B, j ) ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++; // que no hay, po fale, me salgo if ( enc != OK ) ok = 1; } }; // Imprimo la base que quede por imprimir if ( Hnos.LeeReg( (void *)&A, i ) == OK ) { // Siguiente dato valido de hermanos while( ( enc = Hnos.LeeReg( (void *)&A, i ) ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++; while ( enc == OK ) { // Falta mostrar la insignia ??? if ( Insignia != A.Insignia ) { Insignia = A.Insignia; fputc( 12, file_out ); fprintf( file_out, "\n\rHermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia ); } // Imprimo hermanos sprintf( buffer, "%s %s", A.Apellido1, A.Apellido2 ); buffer[22] = '\0'; fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r", A.NHno, A.Nombre, buffer, (int)A.Antig.da_day, (int)A.Antig.da_mon, (int)A.Antig.da_year, A.Telefono1 ); i++; // Siguiente dato valido while( ( enc = Hnos.LeeReg( (void *)&A, i ) ) == OK && ( A.Varios.RealPenit==0 || (A.Varios.RealPenit && A.Varios.CtoVirgen != CtoVirgen ) ) ) i++; } } else { // Siguiente dato valido de HERMANAS while( ( enc = Hnas.LeeReg( (void *)&B, j ) ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++; while ( enc == OK ) { // Se conoce la insignia??? if ( Insignia != B.Insignia ) { Insignia = B.Insignia; fputc( 12, file_out ); fprintf( file_out, "\n\rHermanos con insignia: %s\n\r\n\r", Config.Insignia[Insignia+20*CtoVirgen].NInsignia ); } // Imprimo hermanos sprintf( buffer, "%s %s", B.Apellido1, B.Apellido2 ); buffer[22] = '\0'; fprintf( file_out, "%4ld %-15s %-22s %02d-%02d-%04d %-15s\n\r", B.NHno, B.Nombre, buffer, (int)B.Antig.da_day, (int)B.Antig.da_mon, (int)B.Antig.da_year, B.Telefono1 ); j++; while( ( enc = Hnas.LeeReg( (void *)&B, j ) ) == OK && ( B.Varios.RealPenit==0 || (B.Varios.RealPenit && B.Varios.CtoVirgen != CtoVirgen ) ) ) j++; }; } } Hnos.CerrarReg(); Hnas.CerrarReg(); settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize ); putimage( 170, 165, Imagen, COPY_PUT ); free( Imagen ); } void ImprimeFacturas(void) { long i; char pag; int Center, lineas = 2, CMen, PagInicio, PagFin; char Mensaje[][50] = { "Para interrumpir", "pulse una tecla" }; OptenPaginasIniFin( &PagInicio, &PagFin, BHerm.Registros() ); Imprime_Estaticos(20, "Herm.img"); settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); setcolor( 63 ); outtextxy( 172, 165, "Imprimiendo Facturas" ); setcolor( ROJO ); for ( CMen = 0; CMen < lineas; CMen++ ) { Center= (296 - textwidth( Mensaje[CMen] ) ) / 2; outtextxy( 172+Center, 200+20*CMen, Mensaje[CMen] ); } while ( !Comprueba_Impresora() ) { if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) ) return; } pag = 0; PagInicio--; for ( i=PagInicio; i < BHerm.Registros() && i < PagFin; i++, pag++ ) { if ( pag == 3 ) { pag = 0; fputc( 12, stdprn ); } BHerm.LeeReg( (void *)&SHerm, i ); //123456789-123456789-1234567 fprintf( stdprn, "\n\r" ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, " %4ld Alcal de Guadaira #%ld#", SHerm.NHno, Config.CuotaBaseFam[ SHerm.Varios.CuotaFam == 0 ? 0 : 1 ] ); fprintf( stdprn, "\n\r\n\r" ); fprintf( stdprn, " %02d-%02d-%04d %d / %d", (int)FechaActual.da_day, (int)FechaActual.da_mon, (int)FechaActual.da_year, FechaActual.da_year + 1, FechaActual.da_year); fprintf( stdprn, "\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r" ); fprintf( stdprn, " %s %s %s", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, " %s%s%s%s%s", SHerm.Direccion, (SHerm.Num[0]=='\0')?"":",", SHerm.Num, (SHerm.Piso[0]=='\0')?"":",", SHerm.Piso ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, " %s (%s)", SHerm.Poblacion, SHerm.Provincia ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, " C.P. %ld", SHerm.CodP ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, "\n\r" ); if ( kbhit() ) { getch(); if ( Optar( 1, "CANCELAR TRABAJO?", "Desea Cancelar la impresion", "el trabajo aun no ha concluido", NULL ) ) break; } } } void ImprimeEtiquetas(void) { long i; char pag, buffer[80]; int Center, lineas = 2, CMen; int PagInicio, PagFin; char Mensaje[][50] = { "Para interrumpir", "pulse una tecla" }; OptenPaginasIniFin( &PagInicio, &PagFin, BHerm.Registros() ); Imprime_Estaticos(20, "Herm.img"); settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); setcolor( 63 ); outtextxy( 172, 165, "Imprimiendo Etiquetas" ); setcolor( ROJO ); for ( CMen = 0; CMen < lineas; CMen++ ) { Center= (296 - textwidth( Mensaje[CMen] ) ) / 2; outtextxy( 172+Center, 200+20*CMen, Mensaje[CMen] ); } while ( !Comprueba_Impresora() ) { if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) ) return; } pag = 0; PagInicio--; for ( i=PagInicio; i < BHerm.Registros() && i < PagFin; /*i+=2, */pag++ ) { if ( pag >= 3*12*2 ) { if ( !Optar( 1, "NUEVA PAGINA", "Por favor, realinee la pagina", "y pulse una tecla", NULL ) ) return; pag = 0; } do { BHerm.LeeReg( (void *)&SHerm, i ); i++; } while( !SHerm.Varios.Notific && i < BHerm.Registros() ); do { BHerm.LeeReg( (void *)&BHtmp, i ); i++; } while( !SHerm.Varios.Notific && i < BHerm.Registros() ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, "N Hermano: %4ld N de Hermano: %4ld", SHerm.NHno, BHtmp.NHno ); fprintf( stdprn, "\n\r" ); sprintf( buffer, "%s %s %s", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 ); fprintf( stdprn, "%-37s ", buffer ); sprintf( buffer, "%s %s %s", BHtmp.Nombre, BHtmp.Apellido1, BHtmp.Apellido2 ); fprintf( stdprn, "%-37s", buffer ); fprintf( stdprn, "\n\r" ); sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, (SHerm.Num[0]=='\0')?"":",", SHerm.Num, (SHerm.Piso[0]=='\0')?"":",", SHerm.Piso ); fprintf( stdprn, "%-37s ", buffer ); sprintf( buffer, "%s%s%s%s%s", BHtmp.Direccion, (BHtmp.Num[0]=='\0')?"":",", BHtmp.Num, (BHtmp.Piso[0]=='\0')?"":",", BHtmp.Piso ); fprintf( stdprn, "%-37s", buffer ); fprintf( stdprn, "\n\r" ); sprintf( buffer, "%s (%s)", SHerm.Poblacion, SHerm.Provincia ); fprintf( stdprn, "%-37s ", buffer ); sprintf( buffer, "%s (%s)", BHtmp.Poblacion, BHtmp.Provincia ); fprintf( stdprn, "%-37s", buffer ); fprintf( stdprn, "\n\r" ); fprintf( stdprn, "C.P. %5ld C.P. %5ld", SHerm.CodP, BHtmp.CodP ); fprintf( stdprn, "\n\r" ); if ( kbhit() ) { getch(); if ( Optar( 1, "CANCELAR IMPRESION ?", "Desea Cancelar la impresion", "el trabajo aun no ha concluido ?", NULL ) ) break ; } } } void OptenPaginasIniFin( int *Inicio, int *Fin, int NRegistros ) { void far *Imagen; char buffer[80]; struct textsettingstype texttypeinfo; *Inicio = 1; *Fin = NRegistros; if ( (Imagen = malloc( JD_imagesize(170, 165, 470, 315) ) ) != NULL ) { getimage( 170, 165, 470, 315, Imagen ); gettextsettings( &texttypeinfo ); Imprime_Estaticos(20, "Herm.img"); settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); outtextxy( 175, 220, "Ficha inicial:"); outtextxy( 175, 260, "Ficha final:"); sprintf( buffer, "%d", (*Inicio) ); InputCadenaG_T5(buffer, 0, 5, BLANCO, AZUL, 320, 220, 460, 240 ); (*Inicio) = atoi(buffer); if ( *Inicio < 0 ) *Inicio = 0; sprintf( buffer, "%d", (*Fin) ); InputCadenaG_T5(buffer, 0, 5, BLANCO, AZUL, 320, 260, 460, 280 ); (*Fin ) = atoi(buffer); if ( *Fin > NRegistros ) *Fin = NRegistros; putimage( 170, 165, Imagen, COPY_PUT ); settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize ); farfree( Imagen ); } }