unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#13548: Error in show-paren-mode
@ 2013-01-25 13:23 Dani Moncayo
  2013-01-25 16:10 ` Bastien
  0 siblings, 1 reply; 2+ messages in thread
From: Dani Moncayo @ 2013-01-25 13:23 UTC (permalink / raw)
  To: 13548

[-- Attachment #1: Type: text/plain, Size: 566 bytes --]

Recipe from "emacs -Q":
1. Visit the attached file.
2. M-x show-paren-mode RET
3. C-n

When I do it, I get this error:
  Error in timer: (wrong-type-argument integer-or-marker-p t)


In GNU Emacs 24.3.50.1 (i386-mingw-nt6.1.7601)
 of 2013-01-22 on ODIEONE
Bzr revision: 111584 dmantipov@yandex.ru-20130122114800-5m9xn29kwf5n9nwx
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --with-gcc (4.7) --no-opt --enable-checking --cflags
 -IC:/Devel/emacs/build/include --ldflags -LC:/Devel/emacs/build/lib'


-- 
Dani Moncayo

[-- Attachment #2: test --]
[-- Type: application/octet-stream, Size: 102403 bytes --]


{
  {
    {
      {
	{
	  {
	    {
	      {
		Retorno = EnviarCorreoHtml(EmailOrigen, Email_Coord_Ofi, "", Asunto, TextoMensaje,  "", "", 0, DescError);

                    if (Retorno != 0)
                     {
                      pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
                      pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
                      strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data , DescError);
                      AQ_FINALIZA_SVC(ERROR_APL);
                     }
                  }

                  if (Hay_Coord_Tecnico)
                  {
                    Retorno = EnviarCorreoHtml(EmailOrigen, Email_Coord_Tecnico, "", Asunto,
                          TextoMensaje,  "", "", 0, DescError);

                    if (Retorno != 0)
                     {
                      pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
                      pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
                      strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data , DescError);
                      AQ_FINALIZA_SVC(ERROR_APL);
                     }
                  }
               }

               EXEC SQL CLOSE Cursor_PtEm2;
               EXEC SQL FREE  Cursor_PtEm2;
             }
           }
           EXEC SQL CLOSE Cursor_PtEm1;
           EXEC SQL FREE  Cursor_PtEm1;

         }
       }

       EXEC SQL CLOSE Cursor_PtEm;
   }

   // Comprobar si la oferta es a gran cliente
   EXEC SQL
   SELECT FIRST 1 1
   FROM PTOFERCEN C, EMPRESAS E
   WHERE  E.REGPAT = C.REGPAT
      AND E.PRVCTR = C.PRVCTR
      AND E.NUMCTR = C.NUMCTR
      AND C.PRVOFER  = :PrvOferta
      AND C.DELOFER  = :DelOferta
      AND C.SECOFER  = :SecOferta
      AND C.YEAROFER = :YearOferta
      AND E.TIPOEMP = 2;

   if(sqlca.sqlcode == 0)
   {
      // El contrato es GRAN CLIENTE se env a correo notificando anulacin del contrato
      strcpy(dCorreosDest, "");

      // Recuperamos a los usuarios que pertenecen al departamento de grandes clientes
      // para el env o del correo notificando la anulacin de un contrato gran cliente
      EXEC SQL
         DECLARE CursorCorreo CURSOR FOR
            SELECT DESCRIP
            FROM PTDVAR
            WHERE TIPO = 28
            ORDER BY CODIGO;

      EXEC SQL
         OPEN CursorCorreo;
      EXEC SQL
         FETCH CursorCorreo
            INTO :Descrip :Descrip_IND;

      while(sqlca.sqlcode == 0)
      {
         if(strlen(dCorreosDest) > 0)
         {
            strcat(dCorreosDest, ",");
         }

         if(Descrip_IND >= 0)
         {
            strcat(dCorreosDest, Descrip);
         }

         EXEC SQL
            FETCH CursorCorreo
               INTO :Descrip :Descrip_IND;
      }

      EXEC SQL
         CLOSE CursorCorreo;

      // Recuperamos el motivo de la anulacin
      EXEC SQL
         SELECT DESCRIPCION
            INTO :Descripcion
         FROM PTMOTANU
         WHERE CODSIT = 98
           AND PROANU = :ProAnu
           AND MOTANU = :MotAnu;

      if(strlen(dCorreosDest) > 0)
      {
         sprintf(AsuntoCorreo, "Anulacin del contrato gran cliente %02hd-%02hd-%05ld-%04hd",
                 PrvContr, DelContr, SecContr, YearContr);
         sprintf(TextoMensaje, "Se ha anulado el contrato gran cliente %02hd-%02hd-%05ld-%04hd.<BR>",
                 PrvContr, DelContr, SecContr, YearContr);
         sprintf(TextoMensaje, "%s Motivo de la anulacin: %s."
                               "<br>Los datos del contrato son:<br><ul>",
                               TextoMensaje, Descripcion);

         strcat(TextoMensaje, TextoMensajeInfo);

         Retorno = EnviarCorreoHtml("dprevencion", dCorreosDest, "", AsuntoCorreo,
                          TextoMensaje,  "", "", 0, DescError);

         if (Retorno != 0)
         {
            pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
            pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
            strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data , DescError);
            AQ_FINALIZA_SVC(ERROR_APL);
         }
      }
   }

   /*Se recuperan los correos de las personas asignadas al contrato*/
   EXEC SQL DECLARE c_AsignadosContr CURSOR FOR
      SELECT UNIQUE EMAILUSU
        FROM USERS,
             PTOFERPER
       WHERE (PTOFERPER.TECNICOS = USERS.USUARIO OR
              PTOFERPER.TECNICOH = USERS.USUARIO OR
              PTOFERPER.TECNICOE = USERS.USUARIO OR
              PTOFERPER.MEDICO   = USERS.USUARIO OR
              PTOFERPER.ENFERTRA = USERS.USUARIO)
         AND USERS.EMAILUSU IS NOT NULL
         AND LENGTH(USERS.EMAILUSU) > 0
         AND PTOFERPER.PRVOFER  = :PrvOferta
         AND PTOFERPER.DELOFER  = :DelOferta
         AND PTOFERPER.YEAROFER = :YearOferta
         AND PTOFERPER.SECOFER  = :SecOferta;

   EXEC SQL OPEN c_AsignadosContr;

   EXEC SQL FETCH c_AsignadosContr INTO :EmailUsu;

   while (sqlca.sqlcode == 0)
   {

      /*Destinatario*/
      strcpy(dCorreosDest, EmailUsu);

      /*Origen*/
      strcpy(EmailOrigen, "dprevencion");

      /*Asunto*/
      sprintf(AsuntoCorreo, "Anulacin del contrato %02hd-%02hd-%05ld-%04hd",
                            PrvContr, DelContr, SecContr, YearContr);

      /*Texto del mensaje*/
      sprintf(TextoMensaje, "Se ha anulado el contrato %02hd-%02hd-%05ld-%04hd (%s) al que estaba asignado",
                            PrvContr, DelContr, SecContr, YearContr, PTOFERTA_NomEmp);

      Retorno = EnviarCorreoHtml(EmailOrigen, dCorreosDest, "", AsuntoCorreo,
                          TextoMensaje,  "", "", 0, DescError);

      if (Retorno != 0)
      {
         pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
         pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
         strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data , DescError);
         AQ_FINALIZA_SVC(ERROR_APL);
      }

      EXEC SQL FETCH c_AsignadosContr INTO :EmailUsu;
   }

   EXEC SQL CLOSE c_AsignadosContr;
   EXEC SQL FREE c_AsignadosContr;

   if (strcmp(CodModal, "DISP") == 0)
   {
      memset(EmailUsu, '\0', sizeof(EmailUsu));

      /*// Seleccionaremos al gerente de la direccin regional del contrato
      EXEC SQL
         SELECT FIRST 1 USERS.EMAILUSU
           INTO :EmailUsu
           FROM GISSUBCE, USERS, PTOFERTA
          WHERE USERS.PRVPER      = GISSUBCE.PROVIN
            AND USERS.DELPER      = GISSUBCE.DELEG
            AND USERS.TIPUSU      = 52
            AND USERS.EMAILUSU IS NOT NULL
            AND GISSUBCE.SUBCENT  = PTOFERTA.CODGRUSPA
            AND PTOFERTA.PRVOFER  = :PrvOferta
            AND PTOFERTA.DELOFER  = :DelOferta
            AND PTOFERTA.SECOFER  = :SecOferta
            AND PTOFERTA.YEAROFER = :YearOferta;

      // Si no existe gerente es poque se trata de central con lo que enviaremos
      // el correo a los usuarios definidos en la parametrizacin 24
      if ((sqlca.sqlcode != 0) || (strlen(EmailUsu) == 0))
      {
         EXEC SQL
            SELECT FIRST 1 USERS.EMAILUSU
              INTO :EmailUsu
              FROM USERS, PTDVAR
             WHERE USERS.USUARIO = PTDVAR.DESCRIP
               AND PTDVAR.TIPO = 24
               AND USERS.EMAILUSU IS NOT NULL;
      }*/

/*jipg*/
	   
	  /*Busco el director de la oficina de gestin*/
	  EXEC SQL
		 SELECT USUARIO
		   INTO :DirectorOfi
		   FROM OFISPA
		  WHERE CODPRV = :PrvDmOfer
		    AND CODDEL = :DelDmOfer;

			   
	  if ((sqlca.sqlcode != 0) || (strlen(DirectorOfi) == 0))
	  {
		 EXEC SQL
			SELECT FIRST 1 USUARIO
			  INTO :DirectorOfi
			  FROM USERS
			 WHERE TIPUSU = 65
			   AND PRVPER = :PrvDmOfer
			   AND DELPER = :DelDmOfer;

	  }

	  EXEC SQL
		 SELECT FIRST 1 EMAILUSU
			INTO :EmailUsu
			FROM USERS
		   WHERE USUARIO = :DirectorOfi;

	  EXEC SQL
		SELECT FIRST 1 NOMUSU
			INTO :NombreUsu
			FROM USERS
			WHERE USUARIO = :UsuarioI;
/*jipg*/


      // Comprobamos si hemos conseguido usuario para enviar correo
      if (strlen(EmailUsu) > 0)
      {
         // Se enviar correo en formato HTML
         memset(TextoMensaje, '\0', sizeof(TextoMensaje));
         memset(AsuntoCorreo, '\0', sizeof(AsuntoCorreo));
         memset(EmailOrigen, '\0', sizeof(EmailOrigen));
         memset(dCorreosDest, '\0', sizeof(dCorreosDest));
		 memset(dCorreosCopia, '\0', sizeof(dCorreosCopia));

         // Texto del mensaje
         sprintf(TextoMensaje, "Debido a que ha finalizado un contrato "
                               "DISP (%02hd-%02hd-%05ld-%04hd - %s) "
                               "es necesario enviar un email al siguiente "
                               "correo electrnico <A HREF='mailto:"
                               "avisosdisp"
                               "@prevencionfremap.es'>"
                               "avisosdisp"
                               "@prevencionfremap.es</A> "
                               "indicando la nueva cargabilidad del "
                               "personal que estaba asignado "
							   "(personal asignado y horas anuales dedicadas al contrato)."
							   "<BR><BR> Motivo de finalizacin: Contrato anulado por %s ",
                               PrvContr, DelContr, SecContr, YearContr, PTOFERTA_NomEmp, NombreUsu);

         // Direcciones
         strcpy(EmailOrigen, "dprevencion");
         strcpy(dCorreosDest, EmailUsu);
		 strcpy(dCorreosCopia, "avisosdisp@prevencionfremap.es");

         // Asunto
         sprintf(AsuntoCorreo, "Cargabilidad personal asignado contr. "
                               "DISP(%02hd-%02hd-%05ld-%04hd)",
                               PrvContr, DelContr, SecContr, YearContr);

         memset(DescError, '\0', sizeof(DescError));

         Retorno = EnviarCorreoHtml(
                     EmailOrigen,
                     dCorreosDest,
                     dCorreosCopia,
                     AsuntoCorreo,
                     TextoMensaje,
                     0,
                     "",
                     "",
                     "",
                     0,
                     DescError);

         if (Retorno != 0)
         {
            pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
            strcpy( pOutputMsg->AQE_ERROR_SVC.explan_data, DescError);
            pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
            AQ_FINALIZA_SVC(ERROR_APL)
         }
      }
   }

   for(i=0; i < pInputMsg->NumFilas; i++)
   {
       if (pInputMsg->LIAP1601[i].FecDesde4.day == -1)
       {
         FDesde_IND = -1;
       }
       else
       {
         FDesde_IND = 1;
         ConvFecha_deFCP_I4(&(pInputMsg->LIAP1601[i].FecDesde4), &FDesde);
       }

       if (pInputMsg->LIAP1601[i].FecHasta4.day == -1)
       {
         FHasta_IND = -1;
       }
       else
       {
         FHasta_IND = 1;
         ConvFecha_deFCP_I4(&(pInputMsg->LIAP1601[i].FecHasta4), &FHasta);
       }

       strcpy(SRefer, pInputMsg->LIAP1601[i].SRefer);
       if (strlen(SRefer) > 0)
       {
           SRefer_IND = 0;
       }
       else
       {
           SRefer_IND = -1;
       }
       strcpy(CodImpFEm, pInputMsg->LIAP1601[i].CodImpFem);
       if (strlen(pInputMsg->LIAP1601[i].CodImpFem) == 0)
       {
         CodImpFEm_IND = -1;
       }
       else
       {
         CodImpFEm_IND = 1;
       }

       ConvFecha_deFCP_I4(&(pInputMsg->LIAP1601[i].FechVen[0]), &FechVenIni);
       ConvFecha_deFCP_I4(&(pInputMsg->LIAP1601[i].FechVen[1]), &FechVen);
       NumPrefa = pInputMsg->LIAP1601[i].NumPrefa;
       strcpy(Usuario, pInputMsg->LIAP1601[i].Usuario);
       TipImpFEm = pInputMsg->LIAP1601[i].TipImpFem;
       BasePT = pInputMsg->LIAP1601[i].BasImpFem[0];
       CuoImpFEm = pInputMsg->LIAP1601[i].Impuestos;
       CuoImpFEmAux = pInputMsg->LIAP1601[i].Impuestos;
       PrvDm = pInputMsg->LIAP1601[i].PrvDM;
       DelDm = pInputMsg->LIAP1601[i].DelDM;
       BaseVS = pInputMsg->LIAP1601[i].BasImpFem[1];
       NumRegCen  = pInputMsg->LIAP1601[i].NumRegCen;
       strcpy(DesFac, pInputMsg->LIAP1601[i].Des255);
       if (strlen(DesFac) > 0)
       {
           DesFac_IND = 0;
       }
       else
       {
           DesFac_IND = -1;
       }

       Observac_IND = -1;


      if (CMEMPRE_codemp == 1)
      {
          PrvDMAux = PrvDm;
        DelDMAux = DelDm;
      }
      else
      {
          EXEC SQL
          SELECT PRVOFISP, DELOFISP
              INTO :PrvDMAux, :DelDMAux
           FROM CMROFI
          WHERE PRVOFI = :PrvDm
            AND DELOFI = :DelDm;

        if (sqlca.sqlcode == 100)
        {
             PrvDMAux = PrvDm;
           DelDMAux = DelDm;
        }
      }

       if (!strcmp(pInputMsg->LIAP1601[i].FlagAvis, "M"))
       {
            /* MODIFICAR PREFACTURA */
            NumPrefaIni = NumPrefa;
            /* Si se ha modificado la fecha de vencimiento tenemos que asegurarnos */
            /* de que no se va a producir un insert duplicado.                     */
            if (FechVen != FechVenIni)
            {
                EXEC SQL
                     SELECT *
                       FROM PTPREFA
                       WHERE  TIPOPREFA = :TipoPrefa
                       AND    PRVCONTR   = :PrvContr
                       AND    DELCONTR   = :DelContr
                       AND    YEARCONTR = :YearContr
                       AND    SECCONTR  = :SecContr
                       AND    FECVEN    = :FechVen
                       AND    NUMPREFA  = :NumPrefa
                       AND    USUARIO   = :Usuario;

               if (sqlca.sqlcode == 0)
               {
                  /* ya existe un registro con esa clave por lo que debemos buscar */
                  /* un nuevo Numprefa para que no nos de insert duplicado cuando  */
                  /* intentemos cambiar la fecha de vencimiento                    */
                  EXEC SQL
                   SELECT MAX(NUMPREFA)
                   INTO   :NumPrefa
                    FROM  PTPREFA
                   WHERE  TIPOPREFA = :TipoPrefa
                   AND    PRVCONTR   = :PrvContr
                   AND    DELCONTR   = :DelContr
                   AND    YEARCONTR = :YearContr
                   AND    SECCONTR  = :SecContr
                   AND    FECVEN    = :FechVen
                   AND    USUARIO   = :Usuario;

                   if (NumPrefa < 0)
                    NumPrefa = 1;
                   else
                    NumPrefa++;

               }

            }

            EXEC SQL
             UPDATE PTPREFA
              SET   FECVEN = :FechVen, NUMPREFA = :NumPrefa, FDESDE = :FDesde :FDesde_IND,
                    FHASTA = :FHasta :FHasta_IND, CODIMPFEM = :CodImpFEm :CodImpFEm_IND,
                    SREFER = :SRefer :SRefer_IND, DESFAC = :DesFac :DesFac_IND,
                    BASEPT = :BasePT, TIPIMPFEM = :TipImpFEm, CUOIMPFEM = :CuoImpFEm,
                    BASEVS = :BaseVS, OBSERVAC = :Observac :Observac_IND
             WHERE  TIPOPREFA = :TipoPrefa
             AND    PRVCONTR   = :PrvContr
             AND    DELCONTR   = :DelContr
             AND    YEARCONTR = :YearContr
             AND    SECCONTR  = :SecContr
             AND    FECVEN    = :FechVenIni
             AND    NUMPREFA  = :NumPrefaIni
             AND    USUARIO   = :Usuario;

            EXEC SQL
               DELETE FROM PTPREFARF
               WHERE TIPOPREFA = :TipoPrefa
                 AND PRVCONTR  = :PrvContr
                 AND DELCONTR  = :DelContr
                 AND YEARCONTR = :YearContr
                 AND SECCONTR  = :SecContr
                 AND FECVEN    = :FechVenIni
                 AND NUMPREFA  = :NumPrefaIni
                 AND USUARIO = :Usuario;

            EXEC SQL
               DELETE FROM PTPREFARF
               WHERE TIPOPREFA = :TipoPrefa
                 AND PRVCONTR  = :PrvContr
                 AND DELCONTR  = :DelContr
                 AND YEARCONTR = :YearContr
                 AND SECCONTR  = :SecContr
                 AND FECVEN    = :FechVen
                 AND NUMPREFA  = :NumPrefa
                 AND USUARIO = :Usuario;

            iFacturasRec = 0;

            while(strlen(pInputMsg->LIAP1601[i].Des15[iFacturasRec]) > 0)
            {
               sscanf(pInputMsg->LIAP1601[i].Des15[iFacturasRec], "%c%4hd%2hd%2hd%6ld",
                      &IdeFemR[0], &EjeFemR, &PrvFemR, &DelFemR, &SecFemR);

               EXEC SQL
                  INSERT INTO PTPREFARF (TIPOPREFA, PRVCONTR, DELCONTR,
                                         YEARCONTR, SECCONTR, FECVEN,
                                         NUMPREFA, USUARIO, IDEFEMR,
                                         EJEFEMR, PRVFEMR, DELFEMR,
                                         SECFEMR, TIPO, MOTANU)
                                 VALUES (:TipoPrefa, :PrvContr, :DelContr,
                                         :YearContr, :SecContr, :FechVen,
                                         :NumPrefa, :Usuario, :IdeFemR,
                                         :EjeFemR, :PrvFemR, :DelFemR,
                                         :SecFemR, "R", NULL);

               iFacturasRec++;
            }


       }  /* fin de modificacion */
       else if (!strcmp(pInputMsg->LIAP1601[i].FlagAvis, "A"))
       {
          /* ANULACIN */
           if(pInputMsg->LIAP1601[i].CodFem[0] == ' ' ||
              !strcmp(pInputMsg->LIAP1601[i].CodFem, "\0") )
           {   /* Prefactura sin factura emitida , en este caso */
               /* se borra la prefactura.                       */
               EXEC SQL
                DELETE
                 FROM PTPREFA
                WHERE TIPOPREFA = :TipoPrefa
                AND   PRVCONTR   = :PrvContr
                AND   DELCONTR   = :DelContr
                AND   YEARCONTR = :YearContr
                AND   SECCONTR  = :SecContr
                AND   FECVEN    = :FechVenIni
                AND   NUMPREFA  = :NumPrefa
                AND   USUARIO   = :Usuario;

               EXEC SQL
                  DELETE FROM PTPREFARF
                  WHERE TIPOPREFA = :TipoPrefa
                    AND PRVCONTR  = :PrvContr
                    AND DELCONTR  = :DelContr
                    AND YEARCONTR = :YearContr
                    AND SECCONTR  = :SecContr
                    AND FECVEN    = :FechVenIni
                    AND NUMPREFA  = :NumPrefa
                    AND USUARIO = :Usuario;


                if(NumRegCen >= 1)
                {
                    EXEC SQL
                     DELETE
                      FROM PTPREFACE
                     WHERE TIPOPREFA = :TipoPrefa
                       AND   PRVCONTR   = :PrvContr
                       AND   DELCONTR   = :DelContr
                       AND   YEARCONTR = :YearContr
                       AND   SECCONTR  = :SecContr
                       AND   FECVEN    = :FechVenIni
                       AND   NUMPREFA  = :NumPrefa
                       AND   USUARIO   = :Usuario;

                }

                 SumaImporte = BasePT + BaseVS + CuoImpFEm;
                 sprintf(Operacion,"Borrado de la prefactura con vcto. %02hd-%02hd-%04hd/%hd Imp. %.02lf por anulacin de contrato"
                         ,pInputMsg->LIAP1601[i].FechVen[0].day,
                         pInputMsg->LIAP1601[i].FechVen[0].month,
                         pInputMsg->LIAP1601[i].FechVen[0].year,NumPrefa,
                         SumaImporte);

                 sleep(1);
                 EXEC SQL
                    INSERT INTO PTRASTROSPA(PRVOFER,DELOFER,YEAROFER,SECOFER,FECHSIT,USUARIO,OPERACION)
                                     VALUES(:PrvOferta,:DelOferta,:YearOferta,:SecOferta,CURRENT,:UsuarioI,:Operacion);

           } /* fin prefactura sin factura emitida */
           else
           {   /* hay factura emitida */
               /* Recibo la clave de la factura */
               sscanf(pInputMsg->LIAP1601[i].CodFem, "%c%04hd%02hd%02hd%06ld",
                      &IdeFEm[0], &EjeFEm, &PrvFEm, &DelFEm, &SecFEm);


           /* Evitar Anulacion de facturas que esten en estado provisional */
           EXEC SQL
             SELECT COUNT(*)
               INTO :ContRegProv
               FROM CTMOPR
               WHERE IDEJUSMOV =:IdeFEm AND
                   EJEJUSMOV =:EjeFEm AND
                   DELJUSMOV =:DelFEm AND
                   PRVJUSMOV =:PrvFEm AND
                   SECJUSMOV =:SecFEm;

           if(ContRegProv > 0)
           {
            sprintf(Mensaje_error,"Factura : %c/%04hd/%02hd/%02hd/%06ld en asiento provisional.\nNo se puede anular la factura.",IdeFEm[0], EjeFEm, PrvFEm, DelFEm, SecFEm);
            pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
                strcpy( pOutputMsg->AQE_ERROR_SVC.explan_data, Mensaje_error);
                pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
                AQ_FINALIZA_SVC(ERROR_APL)
           }

              if (!strcmp(pInputMsg->LIAP1601[i].SitFEm, "E")  ||
                  !strcmp(pInputMsg->LIAP1601[i].SitFEm, "C") )
              {    /* la factura est  es situacin - EMITIDA o COBRADA */

                /* Hay que comprobar si ha cambiado el tipo de impuesto, porque se     */
                /* puede dar el caso de que la factura se emita en el 2000 y se anule  */
                /* en el 2001 y por ejemplo, para Canarias en el 2000 hay un 4,5% IGIC */
                /* y en el 2001 hay un 5% IGIC.                                        */
            if (CMEMPRE_codemp == 1)
            {
                   PrvFEmTra = PrvFEm;
               DelFEmTra = DelFEm;
            }
            else
            {
                   EXEC SQL
                SELECT PRVOFISP, DELOFISP
                       INTO :PrvFEmTra, :DelFEmTra
                  FROM CMROFI
                 WHERE PRVOFI = :PrvFEm
                   AND DELOFI = :DelFEm;

               if (sqlca.sqlcode == 100)
               {
                      PrvFEmTra = PrvFEm;
                  DelFEmTra = DelFEm;
               }
            }

            if (PrvFEm == 52)
            {
                   TipImpFEmNuevo = 4;
               strcpy(CodImpFEmNuevo, "P");
            }
            else
            {
               if (!strcmp(CodModal, "DISP"))
               {
                  EXEC SQL
                      SELECT TIPIMPFEM, CODIMPFEM
                        INTO :TipImpFEmNuevo, :CodImpFEmNuevo
                        FROM CTFEMP
                       WHERE IDEFEM = 'P'
                        AND EJEFEM = :Anio
                        AND PRVFEM = :PrvFEmTra
                        AND DELFEM = :DelFEmTra
                        AND APLFEM = 'P'
                        AND CODCONFEM = 'T';
               }
               else if (!strncmp(CodModal, "AU", 2))
               {
                  EXEC SQL
                      SELECT TIPIMPFEM, CODIMPFEM
                        INTO :TipImpFEmNuevo, :CodImpFEmNuevo
                        FROM CTFEMP
                       WHERE IDEFEM = 'P'
                        AND EJEFEM = :Anio
                        AND PRVFEM = :PrvFEmTra
                        AND DELFEM = :DelFEmTra
                        AND APLFEM = 'P'
                        AND CODCONFEM = 'N';
               }
               else
               {
                  EXEC SQL
                      SELECT TIPIMPFEM, CODIMPFEM
                        INTO :TipImpFEmNuevo, :CodImpFEmNuevo
                        FROM CTFEMP
                       WHERE IDEFEM = 'P'
                        AND EJEFEM = :Anio
                        AND PRVFEM = :PrvFEmTra
                        AND DELFEM = :DelFEmTra
                        AND APLFEM = 'P'
                        AND CODCONFEM = 'P';
               }
            }


               /*if(!strcmp(CodImpFEmNuevo,"I") && TipImpFEmNuevo !=0.0 && (!strcmp(TipoPrefa,"C") || !strcmp(TipoPrefa,"F")))*/
			   if(TipImpFEmNuevo !=0.0 && (!strcmp(TipoPrefa,"C") || !strcmp(TipoPrefa,"F")))
               {
                  ConvFecha_aFCP4(&(Fecha_Aux) , FDesde);
		          AnioDesde = Fecha_Aux.year;

                  EXEC SQL
                   SELECT  UNIQUE A.PORTIP
                   INTO  :TipImpFEmNuevo
                   FROM    CTTIPF A
                   WHERE  A.EJETIP = :AnioDesde
                     AND   A.TIPTIP =  "R"
                     AND   A.PRVTIP = :PrvFEmTra
                     AND   A.DELTIP = :DelFEmTra
                     AND   A.FECINITIP <= :FDesde
                     AND   A.CODTIP = :CodImpFEmNuevo
                     AND   NOT EXISTS (SELECT * FROM CTTIPF B
                                 WHERE A.FECINITIP < B.FECINITIP
                                   AND B.EJETIP = :AnioDesde
                                   AND B.TIPTIP =  "R"
                                   AND B.PRVTIP = :PrvFEmTra
                                   AND B.DELTIP = :DelFEmTra
                                   AND B.FECINITIP <= :FDesde
                                   AND B.CODTIP = :CodImpFEmNuevo);
                }

                if(sqlca.sqlcode != 0)
                {
                    pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                    AQ_FINALIZA_SVC(ERROR_APL)
                }



                /* si se trata de una factura en situacin EMITIDA      */
                /* se anular  la factura, pero si se trata de una       */
                /* factura en situacin COBRADA no se tocar  la factura */
                if (!strcmp(pInputMsg->LIAP1601[i].SitFEm, "E")  )
                {
                   /*******************************************************
                    ************* Anulo la factura actual *****************
                    *******************************************************/
                   EXEC SQL
                    UPDATE CTFEMI
                     SET   SITFEM = 'A', FECSITFEM = TODAY
                    WHERE  IDEFEM = :IdeFEm
                    AND    EJEFEM = :EjeFEm
                    AND    DELFEM = :DelFEm
                    AND    PRVFEM = :PrvFEm
                    AND    SECFEM = :SecFEm;

                   sprintf(Operacion,"Anulacin de la factura %s/%04hd/%02hd/%02hd/%06hd"
                          ,IdeFEm,EjeFEm,PrvFEm,DelFEm,SecFEm);

                   sleep(1);
                   EXEC SQL
                      INSERT INTO PTRASTROSPA(PRVOFER,DELOFER,YEAROFER,SECOFER,
                                              FECHSIT,USUARIO,OPERACION)
                                       VALUES(:PrvOferta,:DelOferta,:YearOferta,:SecOferta,
                                              CURRENT,:UsuarioI,:Operacion);
                }

                 /*******************************************************
                  ************* Emito la factura en negativo ************
                  *******************************************************/

                 EXEC SQL
                    SELECT LNIFCLI, NIFCLI, SITFEM, RAMCONFEM, REFFEM,
                           CODIMPFEM, PRVGESFEM, DELGESFEM
                      INTO :LNifCli :LNifCli_IND, :NifCli, :SitFEm,
                           :RamConFEm, :RefFEm :RefFEm_IND, :CodImpFEm,
                           :PrvGesFEm, :DelGesFEm
                      FROM CTFEMI
                     WHERE IDEFEM = :IdeFEm
                       AND EJEFEM = :EjeFEm
                       AND DELFEM = :DelFEm
                       AND PRVFEM = :PrvFEm
                       AND SECFEM = :SecFEm;

                 if (sqlca.sqlcode != 0)
             {
                    pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                    AQ_FINALIZA_SVC(ERROR_APL)
             }

             /* Si estamos en sociedad de prevencin, la oficina de gestin del cobro de la factura
                debe ser la cabecera de subcentral */
             if (CMEMPRE_codemp == 2)
             {
                EXEC SQL
                 SELECT SUBCENT
                        INTO :Subcent
                  FROM GISSUBCE
                  WHERE PROVIN = :PrvGesFEm
                    AND DELEG  = :DelGesFEm;

               if (sqlca.sqlcode != 0)
               {
                       pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
                       strcpy( pOutputMsg->AQE_ERROR_SVC.explan_data,
                      "Error al buscar la direccin regional de la oficina de gestin.");
                       pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
                       AQ_FINALIZA_SVC(ERROR_APL)
               }

               /* Si la subcentral no es la 13 (CENTRAL), convertimos la oficina de gestin
                  a la cabecera de subcentral. Si es la 13, la dejamos como est */
               if (Subcent != 13)
               {
                       EXEC SQL
                   SELECT PRVDES, DELDES
                           INTO :PrvDesAux, :DelDesAux
                     FROM TWOFI
                    WHERE SUBCENT = :Subcent
                      AND CODUPS = 2;

                  if (sqlca.sqlcode != 0)
                  {
                          pOutputMsg->AQE_ERROR_SVC.explan_code=10600;
                          strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data,
                                  "Error al buscar la oficina cabecera de direccin regional.");
                          pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                          AQ_FINALIZA_SVC(ERROR_APL)
                  }

                  /* Convertimos la oficina */
                  PrvGesFEm = PrvDesAux;
                  DelGesFEm = DelDesAux;
               }
             }

                  /* Calculo el SECFEM mximo para la factura */

                  ConvFecha_aFCP4(&(Fecha_Aux) , FecFEm);
                  sprintf(AnioCadena, "%04hd%02hd%02hd", Fecha_Aux.year, Fecha_Aux.month, Fecha_Aux.day);
                  AnioDesde = Fecha_Aux.year;

                  EXEC SQL
                     SELECT DESVAL
                        INTO :CTVALI_DesVal
                     FROM CTVALI
                     WHERE EJECON = :AnioDesde
                       AND CODCON = "fecrecti"
                       AND DATVAL = "F";

                  if(strlen(CTVALI_DesVal) > 0)
                  {
                     sscanf(CTVALI_DesVal, "%02hd%02hd%04hd", &(Fecha_Aux.day), &(Fecha_Aux.month), &(Fecha_Aux.year));
                     sprintf(CTVALI_DesValAux, "%04hd%02hd%02hd", Fecha_Aux.year, Fecha_Aux.month, Fecha_Aux.day);
                  }

                  if(sqlca.sqlcode == 0 && strcmp(CTVALI_DesValAux, AnioCadena) > 0)
                  {
                     strcpy(IdeFemRectificada, IdeFEm);
                  }
                  else
                  {
                     if(pInputMsg->LIAP1601[i].SitFEm[0] == 'C')
                     {
                        strcpy(IdeFemRectificada, "R");
                     }
                     else
                     {
                        strcpy(IdeFemRectificada, "A");
                     }
                  }


               EXEC SQL
                       SELECT MAX(SECFEM)
                       INTO   :SecFEmMax
                        FROM  CTFEMI
                       WHERE  IDEFEM = :IdeFemRectificada
                       AND    EJEFEM = :EjeFEmNew
                       AND    DELFEM = :DelFEmTra
                       AND    PRVFEM = :PrvFEmTra;

                  if (SecFEmMax < 0)
                   SecFEmMax = 1;
                  else
                   SecFEmMax++;
                  /* Asignamos a BasTotFEm y CuoTotFEm lo que hubiera en PTPREFA, que es lo que enva
                     la ventana */
                  BasTotFEm = BasePT+BaseVS;
                  CuoTotFEm = CuoImpFEmAux;

                  /* Pongo los valores a negativo */
                  BasTotFEm = BasTotFEm * -1;
                  CuoTotFEm = CuoTotFEm * -1;


                  /* Tanto si estamos anulando una factura EMITIDA o COBRADA en    */
                  /* ambos casos se emitir  una factura con el mismo importe en    */
                  /* negativo, en el caso de factura EMITIDA la nueva factura      */
                  /* quedar  en situacin ANULADA, y en el caso de factura COBRADA */
                  /* la nueva factura quedar  en situacin EMITIDA.                */
                  if (!strcmp(pInputMsg->LIAP1601[i].SitFEm, "C") )
                  {
                      strcpy(SitFEm, "E");
                  }

                  /* Inserto un registro en CTFEMI */
                  EXEC SQL WHENEVER SQLERROR CONTINUE;
                      Numero_Intentos = 0;
                      sql_insert = 100;
                      while (Numero_Intentos <= 10 && sql_insert)
                      {
                         Numero_Intentos ++;

                   EXEC SQL
                          INSERT
                           INTO CTFEMI (IDEFEM, EJEFEM, PRVFEM, DELFEM, SECFEM, FECREGFEM, FECSITFEM,
                                       BASTOTFEM, CUOTOTFEM, LNIFCLI, NIFCLI, FECFEM, SITFEM, RAMCONFEM,
                                       REFFEM, CODIMPFEM, PRVGESFEM, DELGESFEM, EJEASIEMI, PRVASIEMI,
                                       DELASIEMI, MESASIEMI, SECASIEMI, EJEASICOB, PRVASICOB, DELASICOB,
                                       MESASICOB, SECASICOB, TIPFEM, MONEDA,FECOPEFEM)
                          VALUES      (:IdeFemRectificada, :EjeFEmNew, :PrvFEmTra, :DelFEmTra, :SecFEmMax, TODAY, TODAY,
                                       :BasTotFEm, :CuoTotFEm, :LNifCli :LNifCli_IND, :NifCli,:FecFEm,
                                       :SitFEm, :RamConFEm, :RefFEm :RefFEm_IND, :CodImpFEm, :PrvGesFEm,
                                       :DelGesFEm, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'S', :MonedaBD,TODAY);
                         if (sqlca.sqlcode != -239 &&
                             sqlca.sqlcode != -346 &&
                             sqlca.sqlcode != 0)
                         {
                             goto AQ_SQL_ERROR;
                         }
                         else
                         {
                            sql_insert = sqlca.sqlcode;
                         }

                         if(sql_insert != 0)
                         {
                            SecFEmMax ++;
                         }
                      }
                      if (sql_insert != 0 )
                      {
                          pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
                          strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data,"No se ha podido anular la factura.");
                          pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
                          AQ_FINALIZA_SVC(ERROR_APL)
                      }

                      EXEC SQL WHENEVER SQLERROR GO TO AQ_SQL_ERROR;


                  /* Selecciono los datos necesarios de CTFEMD */
                  /* aqu tampoco selecciono BasImpFEm ni CuoImpFEm, sino que ponemos los correspondientes de
                  PTPREFA*/

                 EXEC SQL
                  DECLARE Cur_Ctfemd CURSOR FOR
                   SELECT CODCONFEM, TIPIMPFEM,
                          PRVGESFEM, DELGESFEM
                    FROM  CTFEMD
                   WHERE  IDEFEM = :IdeFEm
                   AND    EJEFEM = :EjeFEm
                   AND    DELFEM = :DelFEm
                   AND    PRVFEM = :PrvFEm
                   AND    SECFEM = :SecFEm;

                  EXEC SQL
                   OPEN Cur_Ctfemd;

                  EXEC SQL
                   FETCH Cur_Ctfemd
                   INTO   :CodConFEm, :TipImpFEm,
                          :PrvGesFEm, :DelGesFEm;

                  if (sqlca.sqlcode != 0)
                  {
                     pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                     AQ_FINALIZA_SVC(ERROR_APL)
                  }

                  BasTotFEmNuevo = 0;
                  CuoTotFEmNuevo = 0;

                  while (sqlca.sqlcode == 0)
                  {
                /* Si estamos en sociedad de prevencin, la oficina de gestin del cobro de la factura
                    debe ser la cabecera de subcentral */
                 if (CMEMPRE_codemp == 2)
                {
                    EXEC SQL
                     SELECT SUBCENT
                            INTO :Subcent
                      FROM GISSUBCE
                      WHERE PROVIN = :PrvGesFEm
                        AND DELEG  = :DelGesFEm;

                   if (sqlca.sqlcode != 0)
                  {
                           pOutputMsg->AQE_ERROR_SVC.explan_code = 10600;
                           strcpy( pOutputMsg->AQE_ERROR_SVC.explan_data,
                         "Error al buscar la direccin regional de la oficina de gestin.");
                           pOutputMsg->AQE_ERROR_SVC.severity = SEV_APPL;
                           AQ_FINALIZA_SVC(ERROR_APL)
                  }

                   /* Si la subcentral no es la 13 (CENTRAL), convertimos la oficina de gestin
                      a la cabecera de subcentral. Si es la 13, la dejamos como est */
                   if (Subcent != 13)
                  {
                           EXEC SQL
                       SELECT PRVDES, DELDES
                               INTO :PrvDesAux, :DelDesAux
                         FROM TWOFI
                        WHERE SUBCENT = :Subcent
                          AND CODUPS = 2;

                      if (sqlca.sqlcode != 0)
                     {
                              pOutputMsg->AQE_ERROR_SVC.explan_code=10600;
                              strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data,
                                     "Error al buscar la oficina cabecera de direccin regional.");
                              pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                              AQ_FINALIZA_SVC(ERROR_APL)
                     }

                      /* Convertimos la oficina */
                      PrvGesFEm = PrvDesAux;
                      DelGesFEm = DelDesAux;
                  }
                }

                     if(!strcmp(CodConFEm, "P") ||
                  !strcmp(CodConFEm, "T") ||
                  !strcmp(CodConFEm, "N"))
                     {
                         /* Asignamos los valores de BasImpFEm y CuoImpFEm */
                         BasImpFEm = BasePT;
                         CuoImpFEm = CuoImpFEmAux;
                     }
                     else
                     {
                         BasImpFEm = BaseVS;
                         CuoImpFEm = 0;
                     }
                      /* Pongo los valores a negativo */
                     BasImpFEm = BasImpFEm * -1;
                     CuoImpFEm = CuoImpFEm * -1;

                     BasTotFEmNuevo = BasTotFEmNuevo + BasImpFEm;
                     CuoTotFEmNuevo = CuoTotFEmNuevo + CuoImpFEm;

                     /* Inserto un registro en CTFEMD */

                EXEC SQL
                      INSERT
                      INTO CTFEMD (IDEFEM, EJEFEM, PRVFEM, DELFEM, SECFEM, BASIMPFEM,
                                   CUOIMPFEM, CODCONFEM, TIPIMPFEM, PRVGESFEM, DELGESFEM, MONEDA)
                      VALUES      (:IdeFemRectificada, :EjeFEmNew, :PrvFEmTra, :DelFEmTra, :SecFEmMax, :BasImpFEm,
                                   :CuoImpFEm, :CodConFEm, :TipImpFEm, :PrvGesFEm,
                                   :DelGesFEm, :MonedaBD);


                    EXEC SQL
                     FETCH Cur_Ctfemd
                      INTO :CodConFEm, :TipImpFEm,
                           :PrvGesFEm, :DelGesFEm;
                  }

                  EXEC SQL
                       CLOSE Cur_Ctfemd;

                  if(BasTotFEmNuevo != BasTotFEm ||
                     CuoTotFEmNuevo != CuoTotFEm)
                  {
                     EXEC SQL
                       UPDATE CTFEMI
                        SET   BASTOTFEM = :BasTotFEmNuevo,
                              CODIMPFEM = :CodImpFEmNuevo,
                              CUOTOTFEM = :CuoTotFEmNuevo
                       WHERE  IDEFEM = :IdeFemRectificada
                       AND    EJEFEM = :EjeFEmNew
                       AND    DELFEM = :DelFEmTra
                       AND    PRVFEM = :PrvFEmTra
                       AND    SECFEM = :SecFEmMax;
                  }

                  /*********************************************************
                   ************* Creo la Prefactura en negativo ************
                   *********************************************************/
                 EXEC SQL
                  SELECT TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR, SECCONTR,
                         FECVEN, NUMPREFA, USUARIO,NUMRENOVA,
                         FDESDE, FHASTA, LNIFCLI, NIFCLI, CODIMPFEM,
                         BASEPT, TIPIMPFEM, CUOIMPFEM, BASEVS,
                         SREFER, FPAGO, OTRFPAGO, ENTCCC,
                         OFICCC, DCCCC, CUECCC, DOMFAC, PRVFAC,
                         LOCFAC, CPFAC, DESFAC, IDEFEM,
                         EJEFEM, PRVFEM, DELFEM, SECFEM,
                         NUMREGCEN, OBSERVAC,
                         ATT,SECINSCRI
                  INTO   :TipoPrefa_Aux, :PrvContr_Aux, :DelContr_Aux, :YearContr_Aux, :SecContr_Aux,
                         :FechVen_Aux, :NumPrefa_Aux,:Usuario_Aux, :NumRenova,
                         :FDesde :FDesde_IND, :FHasta :FHasta_IND,
                         :LNifCli :LNifCli_IND, :NifCli, :CodImpFEm :CodImpFEm_IND,
                         :BasePT, :TipImpFEm, :CuoImpFEm, :BaseVS,:SRefer :SRefer_IND,
                         :FPago, :OtrFPago :OtrFPago_IND, :EntCCC :EntCCC_IND, :OfiCCC :OfiCCC_IND,
                         :DcCCC :DcCCC_IND, :CueCCC :CueCCC_IND, :DomFac, :PrvFac, :LocFac, :CPFac,
                         :DesFac :DesFac_IND,:IdeFEmAux :IdeFEmAux_IND, :EjeFEmAux :EjeFEmAux_IND,
                         :PrvFEmAux :PrvFEmAux_IND, :DelFEmAux :DelFEmAux_IND,
                         :SecFEmAux :SecFEmAux_IND, :NumRegCen, :Observac :Observac_IND,
                         :att :att_IND, :SecInscri
                   FROM  PTPREFA
                  WHERE  TIPOPREFA = :TipoPrefa
                  AND    PRVCONTR   = :PrvContr
                  AND    DELCONTR   = :DelContr
                  AND    YEARCONTR = :YearContr
                  AND    SECCONTR  = :SecContr
                  AND    FECVEN    = :FechVenIni
                  AND    NUMPREFA  = :NumPrefa
                  AND    USUARIO   = :Usuario;


                  if (sqlca.sqlcode)
                  {
                   pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                   AQ_FINALIZA_SVC(ERROR_APL)
                  }

                  /* Calculo el NUMPREFA mximo para la factura */
                  EXEC SQL
                   SELECT MAX(NUMPREFA)
                   INTO   :NumPrefaMax
                    FROM  PTPREFA
                   WHERE  TIPOPREFA  = :TipoPrefa
                   AND    PRVCONTR   = :PrvContr
                   AND    DELCONTR   = :DelContr
                   AND    YEARCONTR  = :YearContr
                   AND    SECCONTR   = :SecContr
                   AND    FECVEN     = :FechVenIni
                   AND    USUARIO    = :Usuario;

                   if (NumPrefaMax < 0)
                    NumPrefaMax = 1;
                   else
                    NumPrefaMax++;

                 sprintf(DesFac, "Anulacin factura %c/%04hd/%02hd/%02hd/%06ld",
                         IdeFEm[0], EjeFEm, PrvFEm, DelFEm, SecFEm);

                  /* Al anular facturas de domiciliacin, en la nueva prefactura negativa que */
                  /* se crea pondremos como forma de pago transferencia y el mismo banco que  */
                  /* tena en domiciliacin.                                                  */
/*                  if(!strcmp(FPago, "D"))
                  {
                     strcpy(FPago, "F");
                  }
*/
                  /* 03-10-2001 Al anular facturas de domiciliacin, cambiar la forma de pago a taln y
                     quitar el banco */
                  if(!strcmp(FPago, "D"))
                  {
                     strcpy(FPago, "T");
                     EntCCC     = 0;
                     EntCCC_IND = -1;
                     OfiCCC     = 0;
                     OfiCCC_IND = -1;
                     DcCCC      = 0;
                     DcCCC_IND  = -1;
                     CueCCC     = 0.0;
                     CueCCC_IND = -1;
                  }

                  BasePT = BasePT * -1;
                  CuoImpFEm = CuoImpFEm * -1;
                  BaseVS = BaseVS * -1;

                 /* Inserto un registro en PTREFA */
                 EXEC SQL
                  INSERT
                  INTO PTPREFA (TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR, SECCONTR, FECVEN,
                                NUMPREFA,USUARIO, NUMRENOVA, FDESDE,FHASTA, LNIFCLI, NIFCLI,
                                CODIMPFEM,BASEPT, TIPIMPFEM, CUOIMPFEM, BASEVS, SREFER,
                                FPAGO, OTRFPAGO, ENTCCC, OFICCC, DCCCC, CUECCC, DOMFAC,
                                PRVFAC, LOCFAC, CPFAC, DESFAC, IDEFEM, EJEFEM,
                                PRVFEM,DELFEM, SECFEM,FVENCIFA, FREMESA,
                                NUMREGCEN, OBSERVAC, ATT,SECINSCRI)
                  VALUES       (:TipoPrefa_Aux, :PrvContr_Aux, :DelContr_Aux,
                                :YearContr_Aux, :SecContr_Aux,:FechVen_Aux, :NumPrefaMax,
                                :Usuario_Aux, :NumRenova,:FDesde :FDesde_IND,
                                :FHasta :FHasta_IND,:LNifCli :LNifCli_IND, :NifCli,
                                :CodImpFEm :CodImpFEm_IND, :BasePT, :TipImpFEm,
                                :CuoImpFEm, :BaseVS, :SRefer :SRefer_IND,
                                :FPago, :OtrFPago :OtrFPago_IND, :EntCCC :EntCCC_IND,
                                :OfiCCC :OfiCCC_IND,:DcCCC :DcCCC_IND, :CueCCC :CueCCC_IND,
                                :DomFac, :PrvFac, :LocFac, :CPFac,:DesFac ,
                                :IdeFemRectificada ,:EjeFEmNew, :PrvFEmTra, :DelFEmTra, :SecFEmMax,
                                NULL, NULL,:NumRegCen, :Observac :Observac_IND,
                                :att :att_IND, :SecInscri);

                 if(pInputMsg->LIAP1601[i].SitFEm[0] == 'C')
                 {
                    strcpy(TipoRectificada, "R");
                 }
                 else
                 {
                    strcpy(TipoRectificada, "A");
                 }

                 EXEC SQL
                    INSERT INTO PTPREFARF (TIPOPREFA, PRVCONTR, DELCONTR,
                                           YEARCONTR, SECCONTR, FECVEN,
                                           NUMPREFA, USUARIO, IDEFEMR,
                                           EJEFEMR, PRVFEMR, DELFEMR,
                                           SECFEMR, TIPO, MOTANU)
                                   VALUES (:TipoPrefa_Aux, :PrvContr_Aux, :DelContr_Aux,
                                           :YearContr_Aux, :SecContr_Aux, :FechVen_Aux,
                                           :NumPrefaMax, :Usuario_Aux, :IdeFEm,
                                           :EjeFEm, :PrvFEm, :DelFEm,
                                           :SecFEm, :TipoRectificada, NULL);


                 if (!strcmp(pInputMsg->LIAP1601[i].SitFEm, "C") && Contador < FILAS_LB)
                 {
                    /* Para el caso de las facturas en situacin cobrada, emitimos   */
                    /* una factura con el mismo importe en negativo que queda en     */
                    /* situacin emitida. Todas estas facturas hay que reimprimirlas */
                    /* cuando volvamos al cliente.                                   */
                    ConvFecha_aFCP4(&(pOutputMsg->LOAP1601[Contador].FechVen), FechVen_Aux);
                    strcpy(pOutputMsg->LOAP1601[Contador].Usuario, Usuario_Aux);
                    pOutputMsg->LOAP1601[Contador].NumPrefa = NumPrefaMax;
                    Contador ++;
                 }

                 /* Compruebo si el campo NUMREGCEN es mayor o igual que 1 */
                 EXEC SQL
                  SELECT NUMREGCEN
                  INTO   :NumRegCen
                   FROM  PTPREFA
                  WHERE  TIPOPREFA = :TipoPrefa
                  AND    PRVCONTR   = :PrvContr
                  AND    DELCONTR   = :DelContr
                  AND    YEARCONTR = :YearContr
                  AND    SECCONTR  = :SecContr
                  AND    FECVEN    = :FechVenIni
                  AND    NUMPREFA  = :NumPrefa
                  AND    USUARIO   = :Usuario;

                 if (sqlca.sqlcode != 0)
                 {
                  pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                  AQ_FINALIZA_SVC(ERROR_APL)
                 }

                 if (NumRegCen > 0)
                 {
                  /* Creo el curso sobre PTPREFACE */
                  EXEC SQL
                   DECLARE Cur_Ptpreface CURSOR FOR
                    SELECT TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR, SECCONTR, FECVEN,
                           NUMPREFA, REGPAT, PRVCTR, NUMCTR, CENTRACEN,USUARIO,PRVDMCCC,DELDMCCC,
                           SECINSCRI
                     FROM  PTPREFACE
                    WHERE  TIPOPREFA = :TipoPrefa
                    AND    PRVCONTR   = :PrvContr
                    AND    DELCONTR   = :DelContr
                    AND    YEARCONTR = :YearContr
                    AND    SECCONTR  = :SecContr
                    AND    FECVEN    = :FechVenIni
                    AND    NUMPREFA  = :NumPrefa
                    AND    USUARIO   = :Usuario;

                  EXEC SQL
                   OPEN Cur_Ptpreface;

                  EXEC SQL
                   FETCH Cur_Ptpreface
                   INTO  :TipoPrefa_Aux, :PrvContr_Aux, :DelContr_Aux, :YearContr_Aux, :SecContr_Aux,
                         :FechVen_Aux, :NumPrefa_Aux, :RegPat, :PrvCtr, :NumCtr,
                         :CentraCen :CentraCen_IND,:Usuario_Aux,
                         :PrvDmCCC, :DelDmCCC, :SecInscri;

                  if (sqlca.sqlcode != 0)
                  {
                   pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                   AQ_FINALIZA_SVC(ERROR_APL)
                  }

                  while (sqlca.sqlcode == 0)
                  {
                   /* Inserto el registro en PTPREFACE */
                   EXEC SQL
                    INSERT
                    INTO PTPREFACE (TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR, SECCONTR, FECVEN,
                                    NUMPREFA, REGPAT, PRVCTR, NUMCTR, CENTRACEN,USUARIO,
                                    PRVDMCCC, DELDMCCC, SECINSCRI)
                    VALUES         (:TipoPrefa_Aux, :PrvContr_Aux, :DelContr_Aux, :YearContr_Aux, :SecContr_Aux,
                                    :FechVen_Aux, :NumPrefaMax, :RegPat, :PrvCtr, :NumCtr,
                                    :CentraCen :CentraCen_IND,:Usuario_Aux,
                                    :PrvDmCCC, :DelDmCCC, :SecInscri);

                   EXEC SQL
                    FETCH Cur_Ptpreface
                    INTO  :TipoPrefa_Aux, :PrvContr_Aux, :DelContr_Aux, :YearContr_Aux, :SecContr_Aux,
                          :FechVen_Aux, :NumPrefa_Aux, :RegPat, :PrvCtr, :NumCtr,
                          :CentraCen :CentraCen_IND,:Usuario_Aux,
                          :PrvDmCCC, :DelDmCCC, :SecInscri;
                  }


                  EXEC SQL
                   CLOSE Cur_Ptpreface;

                 }

              } /* fin anualcin factura EMITIDA o COBRADA */
           } /* fin hay factura emitida */
       }
       else if (!strcmp(pInputMsg->LIAP1601[i].FlagAvis, "C"))
       {
          EjeMod = pInputMsg->LIAP1601[i].FechVen[0].year;

          /* Seleccionar delegacin de hacienda del contrato *****************************/
          EXEC SQL
             SELECT UNIQUE(DELHACMOD)
             INTO :DelHacCod
             FROM CTENDH
             WHERE EJEMOD = :EjeMod
               AND CODMOD IN (320, 420)
               AND CODPRV = :PrvDm
               AND TIPPERMOD = 'T';

          /* Seleccionamos los datos necesarios para insertar en PTPREFA ************/
          EXEC SQL
             SELECT FPAGO, OTRFPAGO, ENTCCC, OFICCC,
                    DCCCC, CUECCC, DOMFAC, PRVFAC, LOCFAC, CPFAC, ATT
             INTO   :FPago, :OtrFPago :OtrFPago_IND, :EntCCC :EntCCC_IND, :OfiCCC :OfiCCC_IND,
                    :DcCCC :DcCCC_IND, :CueCCC :CueCCC_IND, :DomFac, :PrvFac, :LocFac, :CPFac, :att :att_IND
             FROM PTDATCONTR
             WHERE PRVCONTR   = :PrvContr
             AND    DELCONTR   = :DelContr
             AND    SECCONTR  = :SecContr
             AND    YEARCONTR = :YearContr;

          /*si la forma de pago es Domiciliacin y el importe es negativo
            ponemos en forma de pago "O" y en otrfpago "Devolucin" */
          if ( (strcmp(FPago, "D") == 0) &&
               (BasePT + BaseVS + CuoImpFEm < 0) )
          {
             strcpy(FPago,"O");
             strcpy(OtrFPago, "Devolucin");
             OtrFPago_IND = 1;
          }


          /* Comprobamos si hay que insertar prefacturas en otras delegaciones */
          Desglosar = FALSE;
          NumTerritorios = 0;
          ContadorCen = 0;

          EXEC SQL
             DECLARE CurDesglose CURSOR FOR

             SELECT UNIQUE CTENDH.DELHACMOD
             FROM CTENDH, PTOFERCEN, EICENT
             WHERE CTENDH.EJEMOD = :EjeMod
               AND CTENDH.CODMOD IN (320,420)
               AND CTENDH.CODPRV = EICENT.PRVCPCEN
               AND CTENDH.TIPPERMOD = 'T'
               AND PTOFERCEN.PRVOFER = :PrvOferta
               AND PTOFERCEN.DELOFER = :DelOferta
               AND PTOFERCEN.YEAROFER = :YearOferta
               AND PTOFERCEN.SECOFER = :SecOferta
               AND PTOFERCEN.REGPAT = EICENT.REGPAT
               AND PTOFERCEN.PRVCTR = EICENT.PRVCTR
               AND PTOFERCEN.NUMCTR = EICENT.NUMCTR
               AND PTOFERCEN.CENTRACEN = EICENT.CENTRACEN
              UNION
            SELECT UNIQUE CTENDH.DELHACMOD
              FROM CTENDH, PTADENCEN, PTADENDAS, EICENT
             WHERE CTENDH.EJEMOD = :EjeMod
               AND CTENDH.CODMOD IN (320,420)
               AND CTENDH.CODPRV = EICENT.PRVCPCEN
               AND CTENDH.TIPPERMOD = 'T'
               AND PTADENCEN.PRVOFER = :PrvOferta
               AND PTADENCEN.DELOFER = :DelOferta
               AND PTADENCEN.SECOFER = :SecOferta
               AND PTADENCEN.YEAROFER= :YearOferta
               AND PTADENDAS.PRVOFER = PTADENCEN.PRVOFER
               AND PTADENDAS.DELOFER = PTADENCEN.DELOFER
               AND PTADENDAS.SECOFER = PTADENCEN.SECOFER
               AND PTADENDAS.YEAROFER= PTADENCEN.YEAROFER
               AND PTADENDAS.NUMADEN = PTADENCEN.NUMADEN
               AND PTADENCEN.REGPAT = EICENT.REGPAT
               AND PTADENCEN.PRVCTR = EICENT.PRVCTR
               AND PTADENCEN.NUMCTR = EICENT.NUMCTR
               AND PTADENCEN.CENTRACEN = EICENT.CENTRACEN
               AND PTADENCEN.OPERACION = 'Q'
               AND PTADENDAS.FEFECTO  >= :FechIniRen
             ORDER BY 1;

          EXEC SQL OPEN CurDesglose;

          EXEC SQL FETCH CurDesglose INTO :DelHacModDH;

          while ( (sqlca.sqlcode == 0) && (NumTerritorios < 2) )
          {
             NumTerritorios ++;
             EXEC SQL FETCH CurDesglose
                INTO :DelHacModDH;
          }

          EXEC SQL CLOSE CurDesglose;
          EXEC SQL FREE  CurDesglose;

          /* Si Afecta a m s de un territorio fiscal, habr  que desglosar */
          if ( NumTerritorios == 2 )
          {
             Desglosar = TRUE;
          }
          /* Solo afecta a un nico territorio fiscal, no hay que desglosar */
          else
          {
             if(DelHacModDH != DelHacCod)
             {
                /* Si el territorio fiscal al que afecta la factura es distinto */
                /* del territorio fiscal de la provincia de gestin del contrato*/
                /* Se pondr  como prov-deleg de la factura la provincia de la   */
                /* cabecera del territorio fiscal al que afecta y delegacin 0  */

                PrvFEm = DelHacModDH;

            if (CMEMPRE_codemp == 1)
                   DelFEm = 0;
            else
                   DelFEm = 40;

                /* Al cambiar la prov-deleg y ya no ser la de gestin del contrato */
                /* hay que buscar cual es el impuesto para la nueva prov-deleg     */
                /* Para el caso de Ceuta va a ser 11 y IVA = 0%.                   */
                if (DelHacModDH == 11 || DelHacModDH == 51)
                {
                   TipImpFEm = 0;
                   strcpy(CodImpFEm, "I");
                   CodImpFEm_IND = 0;
                }
            else if (DelHacModDH == 52)
                {
                   TipImpFEm = 4;
                   strcpy(CodImpFEm, "P");
                   CodImpFEm_IND = 0;
                }
                else
                {
               if (CMEMPRE_codemp == 1)
               {
                      EXEC SQL
                         SELECT TIPIMPFEM, CODIMPFEM
                           INTO :TipImpFEm, :CodImpFEm
                           FROM CTFEMP
                          WHERE IDEFEM    = 'P'
                            AND EJEFEM    = :EjeMod
                            AND PRVFEM    = :DelHacModDH
                            AND DELFEM    =  0
                            AND APLFEM    = 'P'
                            AND CODCONFEM = 'P';
               }
               else
               {
                 if (!strcmp(CodModal, "DISP"))
                 {
                    EXEC SQL
                      SELECT TIPIMPFEM, CODIMPFEM
                        INTO :TipImpFEm, :CodImpFEm
                        FROM CTFEMP
                       WHERE IDEFEM    = 'P'
                        AND EJEFEM    = :EjeMod
                        AND PRVFEM    = :DelHacModDH
                        AND DELFEM    =  40
                        AND APLFEM    = 'P'
                        AND CODCONFEM = 'T';
                 }
                 else if (!strncmp(CodModal, "AU", 2))
                 {
                    EXEC SQL
                      SELECT TIPIMPFEM, CODIMPFEM
                        INTO :TipImpFEm, :CodImpFEm
                        FROM CTFEMP
                       WHERE IDEFEM    = 'P'
                        AND EJEFEM    = :EjeMod
                        AND PRVFEM    = :DelHacModDH
                        AND DELFEM    =  40
                        AND APLFEM    = 'P'
                        AND CODCONFEM = 'N';
                 }
                 else
                 {
                    EXEC SQL
                      SELECT TIPIMPFEM, CODIMPFEM
                        INTO :TipImpFEm, :CodImpFEm
                        FROM CTFEMP
                       WHERE IDEFEM    = 'P'
                        AND EJEFEM    = :EjeMod
                        AND PRVFEM    = :DelHacModDH
                        AND DELFEM    =  40
                        AND APLFEM    = 'P'
                        AND CODCONFEM = 'P';
                 }
               }

               /*if(!strcmp(CodImpFEm,"I") && TipImpFEm !=0.0 && (!strcmp(TipoPrefa,"C") || !strcmp(TipoPrefa,"F")))*/
			   if(TipImpFEm !=0.0 && (!strcmp(TipoPrefa,"C") || !strcmp(TipoPrefa,"F")))
               {
                  ConvFecha_aFCP4(&(Fecha_Aux) , FDesde);
		          AnioDesde = Fecha_Aux.year;

                   EXEC SQL
                   SELECT  UNIQUE A.PORTIP
                   INTO  :TipImpFEm
                   FROM    CTTIPF A
                   WHERE  A.EJETIP = :AnioDesde
                     AND   A.TIPTIP =  "R"
                     AND   A.PRVTIP = :DelHacModDH
                     AND   A.DELTIP = 40
                     AND   A.FECINITIP <= :FDesde
                     AND   A.CODTIP = :CodImpFEm
                     AND   NOT EXISTS (SELECT * FROM CTTIPF B
                                 WHERE A.FECINITIP < B.FECINITIP
                                   AND B.EJETIP = :AnioDesde
                                   AND B.TIPTIP =  "R"
                                   AND B.PRVTIP = :DelHacModDH
                                   AND B.DELTIP = 40
                                   AND B.FECINITIP <= :FDesde
                                   AND B.CODTIP = :CodImpFEm);
                }

                   if(sqlca.sqlcode == 100)
                   {
                      CodImpFEm_IND = -1;
                      TipImpFEm = 0;
                      strcpy(CodImpFEm, "\0");
                   }
                   else
                   {
                      CodImpFEm_IND = 0;
                   }
                }

                CuoImpFEm = (TipImpFEm * BasePT) / 100;

                if(!strcmp(FPago, "F"))
                {
               if (CMEMPRE_codemp == 1)
               {
                      EXEC SQL
                         SELECT ENTCCC,OFICCC,DCCCC,CUECCC
                           INTO :EntCCC, :OfiCCC, :DcCCC, :CueCCC
                           FROM PTPARSPA
                          WHERE PRVPAR = :DelHacModDH AND DELPAR = 0;
               }
               else
               {
                      EXEC SQL
                         SELECT ENTCCC,OFICCC,DCCCC,CUECCC
                           INTO :EntCCC, :OfiCCC, :DcCCC, :CueCCC
                           FROM PTPARSPA
                          WHERE PRVPAR = :DelHacModDH AND DELPAR = 40;
               }

                   if(sqlca.sqlcode == 0)
                   {
                      EntCCC_IND = 1;
                      OfiCCC_IND = 1;
                      DcCCC_IND  = 1;
                      CueCCC_IND = 1;
                   }
                } /*fin forma de pago="F"*/
             } /* fin DelHacModDH != DelHacCod */
             else /* Misma delegacin de hacienda de la de gestion del contrato */
             {
                PrvFEm = PrvDMAux;
                DelFEm = DelDMAux;
             }/*fin DelHacModDH = DelHacCod*/

             /* Inserto un registro en PTREFA con los datos de la copy y los seleccionados*/
             /* Primero se Calcula el numprefa para insertar la siguiente prefactura **********/
             EXEC SQL
                SELECT MAX(NUMPREFA)
                INTO   :NumPrefa :NumPrefa_IND
                FROM  PTPREFA
                WHERE TIPOPREFA = :TipoPrefa
                AND   PRVCONTR  = :PrvContr
                AND   DELCONTR  = :DelContr
                AND   SECCONTR  = :SecContr
                AND   YEARCONTR = :YearContr
                AND   FECVEN    = : FechVen
                AND   USUARIO   = : UsuarioI;

             if (NumPrefa_IND < 0)
                NumPrefa = 1;
             else
                NumPrefa++;

             PrvFEm_IND = 0;
             DelFEm_IND = 0;

             EXEC SQL
                INSERT INTO PTPREFA(TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR, SECCONTR,
                                    FECVEN, NUMPREFA, USUARIO, NUMRENOVA,FDESDE,
                                    FHASTA, LNIFCLI, NIFCLI,
                                    CODIMPFEM, BASEPT, TIPIMPFEM, CUOIMPFEM, BASEVS,
                                    SREFER, FPAGO, OTRFPAGO,
                                    ENTCCC, OFICCC, DCCCC,
                                    CUECCC, DOMFAC, PRVFAC, LOCFAC, CPFAC,
                                    DESFAC, IDEFEM, EJEFEM, PRVFEM, DELFEM, SECFEM, FVENCIFA,
                                    FREMESA, NUMREGCEN, OBSERVAC, ATT, SECINSCRI)
                            VALUES (:TipoPrefa, :PrvContr, :DelContr, :YearContr, :SecContr,
                                    :FechVen, :NumPrefa, :UsuarioI, :NumRenova,:FDesde :FDesde_IND,
                                    :FHasta :FHasta_IND, :LNifCli_CodDni :LNifCli_CodDni_IND, :NifCli_CodDni,
                                    :CodImpFEm :CodImpFEm_IND,:BasePT, :TipImpFEm, :CuoImpFEm, :BaseVS,
                                    :SRefer :SRefer_IND, :FPago, :OtrFPago :OtrFPago_IND,
                                    :EntCCC :EntCCC_IND, :OfiCCC :OfiCCC_IND, :DcCCC :DcCCC_IND,
                                    :CueCCC :CueCCC_IND, :DomFac, :PrvFac, :LocFac, :CPFac,
                                    :DesFac :DesFac_IND, NULL, NULL,:PrvFEm :PrvFEm_IND, :DelFEm :DelFEm_IND, NULL, NULL,
                                    NULL, 0, :Observac :Observac_IND,
                                    :att :att_IND, 0);

             iFacturasRec = 0;

             while(strlen(pInputMsg->LIAP1601[i].Des15[iFacturasRec]) > 0)
             {
                sscanf(pInputMsg->LIAP1601[i].Des15[iFacturasRec], "%c%4hd%2hd%2hd%6ld",
                       &IdeFemR[0], &EjeFemR, &PrvFemR, &DelFemR, &SecFemR);

                EXEC SQL
                   INSERT INTO PTPREFARF (TIPOPREFA, PRVCONTR, DELCONTR,
                                          YEARCONTR, SECCONTR, FECVEN,
                                          NUMPREFA, USUARIO, IDEFEMR,
                                          EJEFEMR, PRVFEMR, DELFEMR,
                                          SECFEMR, TIPO, MOTANU)
                                  VALUES (:TipoPrefa, :PrvContr, :DelContr,
                                          :YearContr, :SecContr, :FechVen,
                                          :NumPrefa, :UsuarioI, :IdeFemR,
                                          :EjeFemR, :PrvFemR, :DelFemR,
                                          :SecFemR, "R", NULL);

                iFacturasRec++;
             }


             /*Enviamos la factura emitida a la ventana para que la imprima */
             if (ContadorPrefa < FILAS_LBA)
             {
                ConvFecha_aFCP4(&(pOutputMsg->LOAP1601A[ContadorPrefa].FechVen), FechVen);
                strcpy(pOutputMsg->LOAP1601A[ContadorPrefa].Usuario, UsuarioI);
                pOutputMsg->LOAP1601A[ContadorPrefa].NumPrefa = NumPrefa;
                ContadorPrefa++;
             }
             else
             {
                /*De esta forma luego enviaremos en NumFilasA el
                  nmero de prefacturas creadas,
                  pero la ventana slo tratar  como m ximo 15. */
                ContadorPrefa++;
             }
          }/*Fin de Un Solo territorio*/

          /* Hay que desflosar la prefactura pues afecta a m s de un territorio fiscal */
          if(Desglosar)
          {
             /* recuperar coste total de la oferta para desglose de importes */
             /*Mod.4, incluimos EL NumRenova*/
             EXEC SQL
                SELECT COSTEPT, COSTEVS
                INTO :CostePT, :CosteVS
                FROM PTOFERTOT
                WHERE PRVOFER  = :PrvOferta
                  AND DELOFER  = :DelOferta
                  AND YEAROFER = :YearOferta
                  AND SECOFER  = :SecOferta;

             /* Si no hay importes (modalidad 8), contaremos el n centros del contrato */
             if( CostePT == 0 || CosteVS == 0 )
             {
                EXEC SQL
                  SELECT COUNT(*)
                  INTO :NumCenTot
                  FROM PTOFERCEN
                  WHERE PRVOFER  = :PrvOferta
                    AND DELOFER  = :DelOferta
                    AND YEAROFER = :YearOferta
                    AND SECOFER  = :SecOferta;
                EXEC SQL
                  SELECT COUNT(*)
                    INTO :NumCenTotAux
                    FROM PTADENCEN, PTADENDAS
                   WHERE PTADENCEN.PRVOFER = :PrvOferta
                     AND PTADENCEN.DELOFER = :DelOferta
                     AND PTADENCEN.SECOFER = :SecOferta
                     AND PTADENCEN.YEAROFER= :YearOferta
                     AND PTADENDAS.PRVOFER = PTADENCEN.PRVOFER
                     AND PTADENDAS.DELOFER = PTADENCEN.DELOFER
                     AND PTADENDAS.SECOFER = PTADENCEN.SECOFER
                     AND PTADENDAS.YEAROFER= PTADENCEN.YEAROFER
                     AND PTADENDAS.NUMADEN = PTADENCEN.NUMADEN
                     AND PTADENCEN.OPERACION = 'Q'
                     AND PTADENDAS.FEFECTO  >= :FechIniRen;
                NumCenTot += NumCenTotAux;
             }

             CosteTPCentro = 0;
             CostePSCentro = 0;

             /* Buscamos si hay centros eliminados en el periodo */
             EXEC SQL
                DECLARE CurCentrosElimin CURSOR FOR
                SELECT UNIQUE PTADENCEN.NUMADEN, FEFECTO
                FROM PTADENCEN, PTADENDAS
                WHERE PTADENDAS.PRVOFER = PTADENCEN.PRVOFER
                AND   PTADENDAS.DELOFER = PTADENCEN.DELOFER
                AND   PTADENDAS.SECOFER = PTADENCEN.SECOFER
                AND   PTADENDAS.YEAROFER = PTADENCEN.YEAROFER
                AND   PTADENDAS.NUMADEN = PTADENCEN.NUMADEN
                AND   PTADENCEN.PRVOFER   = :PrvOferta
                AND   PTADENCEN.DELOFER   = :DelOferta
                AND   PTADENCEN.SECOFER   = :SecOferta
                AND   PTADENCEN.YEAROFER  = :YearOferta
                AND   PTADENCEN.OPERACION = 'Q'
                AND   PTADENDAS.FEFECTO  >= :FechIniRen;

             EXEC SQL
                OPEN CurCentrosElimin;

             EXEC SQL FETCH CurCentrosElimin
                INTO :NumAdenElim,
                     :FeFecToElim;

             /* Si existen registros para cada fila (para cada adenda en la que se ha quitado centros) */
             while(sqlca.sqlcode == 0)
             {
                /* Abrir cursor para obtener los centros eliminados y a partir de
               ellos calcular los importes*/
                EXEC SQL
                   DECLARE CurImportCenElimin CURSOR FOR
                   SELECT UNIQUE CTENDH.DELHACMOD, PTADENCEN.HORASPT, PTADENCEN.HORASVS,
                    PTADENCEN.REGPAT, PTADENCEN.PRVCTR, PTADENCEN.NUMCTR, PTADENCEN.CENTRACEN
                   FROM CTENDH, PTADENCEN, EICENT
                   WHERE CTENDH.CODPRV = EICENT.PRVCPCEN
                   AND PTADENCEN.PRVOFER = :PrvOferta
                   AND PTADENCEN.DELOFER = :DelOferta
                   AND PTADENCEN.SECOFER = :SecOferta
                   AND PTADENCEN.YEAROFER = :YearOferta
                   AND PTADENCEN.NUMADEN = :NumAdenElim
                   AND PTADENCEN.OPERACION = 'Q'
                   AND PTADENCEN.REGPAT = EICENT.REGPAT
                   AND PTADENCEN.PRVCTR = EICENT.PRVCTR
                   AND PTADENCEN.NUMCTR = EICENT.NUMCTR
                   AND PTADENCEN.CENTRACEN = EICENT.CENTRACEN
                   AND CTENDH.EJEMOD = YEAR(TODAY)
                   AND CTENDH.CODMOD IN (320,420)
                   AND CTENDH.TIPPERMOD = 'T'
                   ORDER BY CTENDH.DELHACMOD;

                EXEC SQL
                   OPEN CurImportCenElimin;

                EXEC SQL FETCH CurImportCenElimin
                   INTO :DelHacModImportesElimin,
                        :SumaHorasPT,
                        :SumaHorasVS,
                    :RegPatElim,
                    :PrvCtrElim,
                    :NumCtrElim,
                    :CenTraCenElim :CenTraCenElim_IND;

                /* Si no encontramos registros */
                if (sqlca.sqlcode == 100)
                {
                        /* Salir del servicio */
                        pOutputMsg->AQE_ERROR_SVC.explan_code=10600;
                        strcpy(pOutputMsg->AQE_ERROR_SVC.explan_data, "No se encuentran los importes de los centros eliminados.");
                        pOutputMsg->AQE_ERROR_SVC.severity=SEV_APPL;
                        AQ_FINALIZA_SVC(ERROR_APL)
                }

                /* Para cada registro obtenido */
                iAux = 0;
                while (sqlca.sqlcode == 0)
                {
                  /* Clculo de los costes PT del centro eliminado en el periodo */
                  EXEC SQL
                    SELECT SUM(A.IMPORTE)
                      INTO :CosteTPCentro :CosteTPCentro_IND
                      FROM PTHOACTCEN A, PTACTCEN B
                     WHERE B.PRVOFER = :PrvOferta
                       AND B.DELOFER = :DelOferta
                       AND B.SECOFER = :SecOferta
                       AND B.YEAROFER = :YearOferta
                       AND B.REGPAT = :RegPatElim
                       AND B.PRVCTR = :PrvCtrElim
                       AND B.NUMCTR = :NumCtrElim
                       AND ((:CenTraCenElim_IND >= 0
                       AND B.CENTRACEN = :CenTraCenElim) OR
                           (:CenTraCenElim_IND < 0 AND B.CENTRACEN IS NULL))
                       AND A.PRVOFER = B.PRVOFER
                       AND A.DELOFER = B.DELOFER
                       AND A.SECOFER = B.SECOFER
                       AND A.YEAROFER = B.YEAROFER
                       AND A.REGPAT = B.REGPAT
                       AND A.PRVCTR = B.PRVCTR
                       AND A.NUMCTR = B.NUMCTR
                       AND ((:CenTraCenElim_IND >= 0
                       AND A.CENTRACEN = B.CENTRACEN) OR
                           (:CenTraCenElim_IND < 0 AND B.CENTRACEN IS NULL))
                       AND A.ACTPRVCREA = B.ACTPRVCREA
                       AND A.ACTDELCREA = B.ACTDELCREA
                       AND A.ACTSEC = B.ACTSEC
                       AND A.ACTYEAR = B.ACTYEAR
                       AND A.TIPOHORAS IN ('S', 'H', 'E', 'PT');

                  if (CosteTPCentro_IND < 0)
                     CosteTPCentro = 0;

                  /* Clculo de los costes VS del centro eliminado en el periodo */
                  EXEC SQL
                    SELECT SUM(A.IMPORTE)
                      INTO :CostePSCentro :CostePSCentro_IND
                      FROM PTHOACTCEN A, PTACTCEN B
                     WHERE B.PRVOFER = :PrvOferta
                       AND B.DELOFER = :DelOferta
                       AND B.SECOFER = :SecOferta
                       AND B.YEAROFER = :YearOferta
                       AND B.REGPAT = :RegPatElim
                       AND B.PRVCTR = :PrvCtrElim
                       AND B.NUMCTR = :NumCtrElim
                       AND ((:CenTraCenElim_IND >= 0
                       AND B.CENTRACEN = :CenTraCenElim) OR
                           (:CenTraCenElim_IND < 0 AND B.CENTRACEN IS NULL))
                       AND A.PRVOFER = B.PRVOFER
                       AND A.DELOFER = B.DELOFER
                       AND A.SECOFER = B.SECOFER
                       AND A.YEAROFER = B.YEAROFER
                       AND A.REGPAT = B.REGPAT
                       AND A.PRVCTR = B.PRVCTR
                       AND A.NUMCTR = B.NUMCTR
                       AND ((:CenTraCenElim_IND >= 0
                       AND A.CENTRACEN = B.CENTRACEN) OR
                           (:CenTraCenElim_IND < 0 AND B.CENTRACEN IS NULL))
                       AND A.ACTPRVCREA = B.ACTPRVCREA
                       AND A.ACTDELCREA = B.ACTDELCREA
                       AND A.ACTSEC = B.ACTSEC
                       AND A.ACTYEAR = B.ACTYEAR
                       AND A.TIPOHORAS = 'VS';

                  if (CostePSCentro_IND < 0)
                     CostePSCentro = 0;

                  YaIncluido=FALSE;
                  for (iAux=0; (iAux < 10) && (CostesAdenCen[iAux].Delegacion != 0 || CostesAdenCen[iAux].CostePT != 0 || CostesAdenCen[iAux].CosteVS != 0); iAux++)
                  {
                     if (CostesAdenCen[iAux].Delegacion == DelHacModImportesElimin)
                     {
                        CostesAdenCen[iAux].CostePT = CostesAdenCen[iAux].CostePT + CosteTPCentro;
                        CostesAdenCen[iAux].CosteVS = CostesAdenCen[iAux].CosteVS + CostePSCentro;
                        YaIncluido=TRUE;
                        break;
                     }
                     else
                     {
                        YaIncluido=FALSE;
                     }
                  }
                  if (!YaIncluido)
                  {
                     /*Informar nueva linea del array*/
                     CostesAdenCen[iAux].Delegacion = DelHacModImportesElimin;
                     CostesAdenCen[iAux].CostePT = CosteTPCentro;
                     CostesAdenCen[iAux].CosteVS = CostePSCentro;
                  }

                  EXEC SQL FETCH CurImportCenElimin
                           INTO  :DelHacModImportesElimin,
                                 :SumaHorasPT,
                                 :SumaHorasVS,
                                 :RegPatElim,
                                 :PrvCtrElim,
                                 :NumCtrElim,
                                 :CenTraCenElim :CenTraCenElim_IND;
                }

                /* Cierro cursor */
                EXEC SQL CLOSE CurImportCenElimin;
                EXEC SQL FREE CurImportCenElimin;

                EXEC SQL FETCH CurCentrosElimin
                   INTO :NumAdenElim,
                        :FeFecToElim;
             }

             /* Cierro cursor */
             EXEC SQL CLOSE CurCentrosElimin;
             EXEC SQL FREE CurCentrosElimin;


             /* Se recorren los territorios y para cada territorio se crea una prefactura con */
             /* la parte proporcional de importe en funcin del coste de los centros sobre  */
             /* el coste total del contrato, o en funcin del n de centros si no hay coste    */
             EXEC SQL
                DECLARE CursorDH CURSOR FOR
                SELECT UNIQUE CTENDH.DELHACMOD
                FROM CTENDH, PTOFERCEN, EICENT
                WHERE CTENDH.EJEMOD = :EjeMod
                  AND CTENDH.CODMOD IN (320,420)
                  AND CTENDH.CODPRV = EICENT.PRVCPCEN
                  AND CTENDH.TIPPERMOD = 'T'
                  AND PTOFERCEN.PRVOFER = :PrvOferta
                  AND PTOFERCEN.DELOFER = :DelOferta
                  AND PTOFERCEN.YEAROFER = :YearOferta
                  AND PTOFERCEN.SECOFER = :SecOferta
                  AND PTOFERCEN.REGPAT = EICENT.REGPAT
                  AND PTOFERCEN.PRVCTR = EICENT.PRVCTR
                  AND PTOFERCEN.NUMCTR = EICENT.NUMCTR
                  AND PTOFERCEN.CENTRACEN = EICENT.CENTRACEN
                  UNION
                SELECT UNIQUE CTENDH.DELHACMOD
                  FROM CTENDH, PTADENCEN, PTADENDAS, EICENT
                 WHERE CTENDH.EJEMOD = :EjeMod
                   AND CTENDH.CODMOD IN (320,420)
                   AND CTENDH.CODPRV = EICENT.PRVCPCEN
                   AND CTENDH.TIPPERMOD = 'T'
                   AND PTADENCEN.PRVOFER = :PrvOferta
                   AND PTADENCEN.DELOFER = :DelOferta
                   AND PTADENCEN.SECOFER = :SecOferta
                   AND PTADENCEN.YEAROFER= :YearOferta
                   AND PTADENDAS.PRVOFER = PTADENCEN.PRVOFER
                   AND PTADENDAS.DELOFER = PTADENCEN.DELOFER
                   AND PTADENDAS.SECOFER = PTADENCEN.SECOFER
                   AND PTADENDAS.YEAROFER= PTADENCEN.YEAROFER
                   AND PTADENDAS.NUMADEN = PTADENCEN.NUMADEN
                   AND PTADENCEN.REGPAT = EICENT.REGPAT
                   AND PTADENCEN.PRVCTR = EICENT.PRVCTR
                   AND PTADENCEN.NUMCTR = EICENT.NUMCTR
                   AND PTADENCEN.CENTRACEN = EICENT.CENTRACEN
                   AND PTADENCEN.OPERACION = 'Q'
                   AND PTADENDAS.FEFECTO  >= :FechIniRen
                  ORDER BY 1;

             EXEC SQL OPEN CursorDH;
             EXEC SQL FETCH CursorDH
                INTO :DelHacModDH;

             while(sqlca.sqlcode == 0)
             {
                ContadorCen=0;
                ContadorCenAux=0;
                /* Se cuentan los centros del territorio */
                EXEC SQL
                   SELECT COUNT(*)
                   INTO :ContadorCen
                    FROM PTOFERCEN, CTENDH, EICENT
                   WHERE CTENDH.EJEMOD      = :EjeMod
                     AND CTENDH.DELHACMOD   = :DelHacModDH
                     AND CTENDH.CODMOD IN (320,420)
                     AND CTENDH.CODPRV      = EICENT.PRVCPCEN
                     AND CTENDH.TIPPERMOD   = 'T'
                     AND PTOFERCEN.PRVOFER  = :PrvOferta
                     AND PTOFERCEN.DELOFER  = :DelOferta
                     AND PTOFERCEN.YEAROFER = :YearOferta
                     AND PTOFERCEN.SECOFER  = :SecOferta
                     AND PTOFERCEN.REGPAT = EICENT.REGPAT
                     AND PTOFERCEN.PRVCTR = EICENT.PRVCTR
                     AND PTOFERCEN.NUMCTR = EICENT.NUMCTR
                     AND PTOFERCEN.CENTRACEN = EICENT.CENTRACEN;

                EXEC SQL
                  SELECT COUNT(*)
                    INTO :ContadorCenAux
                    FROM PTADENCEN, PTADENDAS, CTENDH, EICENT
                   WHERE CTENDH.EJEMOD      = :EjeMod
                     AND CTENDH.DELHACMOD   = :DelHacModDH
                     AND CTENDH.CODMOD IN (320,420)
                     AND CTENDH.CODPRV      = EICENT.PRVCPCEN
                     AND CTENDH.TIPPERMOD   = 'T'
                     AND PTADENCEN.PRVOFER  = :PrvOferta
                     AND PTADENCEN.DELOFER  = :DelOferta
                     AND PTADENCEN.YEAROFER = :YearOferta
                     AND PTADENCEN.SECOFER  = :SecOferta
                     AND PTADENDAS.PRVOFER = PTADENCEN.PRVOFER
                     AND PTADENDAS.DELOFER = PTADENCEN.DELOFER
                     AND PTADENDAS.SECOFER = PTADENCEN.SECOFER
                     AND PTADENDAS.YEAROFER= PTADENCEN.YEAROFER
                     AND PTADENDAS.NUMADEN = PTADENCEN.NUMADEN
                     AND PTADENCEN.REGPAT = EICENT.REGPAT
                     AND PTADENCEN.PRVCTR = EICENT.PRVCTR
                     AND PTADENCEN.NUMCTR = EICENT.NUMCTR
                     AND PTADENCEN.CENTRACEN = EICENT.CENTRACEN
                     AND PTADENCEN.OPERACION = 'Q'
                     AND PTADENDAS.FEFECTO  >= :FechIniRen;
                ContadorCen += ContadorCenAux;

                CostePTSum=0;
                /* Se suma el coste PT de los centros del territorio */
                /* Modificacion fac08 */
                EXEC SQL
                  SELECT SUM(PTOFERCEN.COSTEPT)
                    INTO :CostePTSum
                    FROM PTOFERCEN, CTENDH, EICENT
                   WHERE CTENDH.EJEMOD      = :EjeMod
                     AND CTENDH.DELHACMOD   = :DelHacModDH
                     AND CTENDH.CODMOD IN (320,420)
                     AND CTENDH.CODPRV      = EICENT.PRVCPCEN
                     AND CTENDH.TIPPERMOD   = 'T'
                     AND PTOFERCEN.PRVOFER  = :PrvOferta
                     AND PTOFERCEN.DELOFER  = :DelOferta
                     AND PTOFERCEN.YEAROFER = :YearOferta
                     AND PTOFERCEN.SECOFER  = :SecOferta
                     AND PTOFERCEN.REGPAT = EICENT.REGPAT
                     AND PTOFERCEN.PRVCTR = EICENT.PRVCTR
                     AND PTOFERCEN.NUMCTR = EICENT.NUMCTR
                     AND PTOFERCEN.CENTRACEN = EICENT.CENTRACEN
                  HAVING SUM(PTOFERCEN.COSTEPT) != 0 ;

                CosteVSSum=0;
                /* Se suma el coste VS de los centros del territorio */
                /* Modificacion fac08 */
                EXEC SQL
                  SELECT SUM(PTOFERCEN.COSTEVS)
                    INTO :CosteVSSum
                    FROM PTOFERCEN, CTENDH, EICENT
                   WHERE CTENDH.EJEMOD      = :EjeMod
                     AND CTENDH.DELHACMOD   = :DelHacModDH
                     AND CTENDH.CODMOD IN (320,420)
                     AND CTENDH.CODPRV      = EICENT.PRVCPCEN
                     AND CTENDH.TIPPERMOD   = 'T'
                     AND PTOFERCEN.PRVOFER  = :PrvOferta
                     AND PTOFERCEN.DELOFER  = :DelOferta
                     AND PTOFERCEN.YEAROFER = :YearOferta
                     AND PTOFERCEN.SECOFER  = :SecOferta
                     AND PTOFERCEN.REGPAT = EICENT.REGPAT
                     AND PTOFERCEN.PRVCTR = EICENT.PRVCTR
                     AND PTOFERCEN.NUMCTR = EICENT.NUMCTR
                     AND PTOFERCEN.CENTRACEN = EICENT.CENTRACEN
                  HAVING SUM(PTOFERCEN.COSTEVS) != 0 ;


                /* Recuperar el tipo para la delegacin */
                /* Para el caso de Ceuta la DelHac va a ser 11  y IVA = 0%.    */
                if (DelHacModDH == 11 || DelHacModDH == 51)
                {
                   TipImpFEmAux = 0;
                   strcpy(CodImpFEm, "I");
                   CodImpFEm_IND = 0;
                }
                else if (DelHacModDH == 52)
                {
                   TipImpFEmAux = 4;
                   strcpy(CodImpFEm, "P");
                   CodImpFEm_IND = 0;
                }
            else
                {
               if (CMEMPRE_codemp == 1)
               {
                      EXEC SQL
                         SELECT  TIPIMPFEM, CODIMPFEM
                           INTO  :TipImpFEmAux, :CodImpFEm
                           FROM  CTFEMP
                          WHERE IDEFEM    = 'P'
                            AND EJEFEM    = :EjeMod
                            AND PRVFEM    = :DelHacModDH
                            AND DELFEM    =  0
                            AND APLFEM    = 'P'
                            AND CODCONFEM = 'P';
               }
               else
               {
                 if (!strcmp(CodModal, "DISP"))
                 {
                    EXEC SQL
                      SELECT  TIPIMPFEM, CODIMPFEM
                        INTO  :TipImpFEmAux, :CodImpFEm
                        FROM  CTFEMP
                       WHERE IDEFEM    = 'P'
                        AND EJEFEM    = :EjeMod
                        AND PRVFEM    = :DelHacModDH
                        AND DELFEM    =  40
                        AND APLFEM    = 'P'
                        AND CODCONFEM = 'T';
                 }
                 else if (!strncmp(CodModal, "AU", 2))
                 {
                    EXEC SQL
                      SELECT  TIPIMPFEM, CODIMPFEM
                        INTO  :TipImpFEmAux, :CodImpFEm
                        FROM  CTFEMP
                       WHERE IDEFEM    = 'P'
                        AND EJEFEM    = :EjeMod
                        AND PRVFEM    = :DelHacModDH
                        AND DELFEM    =  40
                        AND APLFEM    = 'P'
                        AND CODCONFEM = 'N';
                 }
                 else
                 {
                    EXEC SQL
                      SELECT  TIPIMPFEM, CODIMPFEM
                        INTO  :TipImpFEmAux, :CodImpFEm
                        FROM  CTFEMP
                       WHERE IDEFEM    = 'P'
                        AND EJEFEM    = :EjeMod
                        AND PRVFEM    = :DelHacModDH
                        AND DELFEM    =  40
                        AND APLFEM    = 'P'
                        AND CODCONFEM = 'P';
                 }
               }

               /*if(!strcmp(CodImpFEm,"I") && TipImpFEmAux !=0.0 && (!strcmp(TipoPrefa,"C") || !strcmp(TipoPrefa,"F")))*/
			   if(TipImpFEmAux !=0.0 && (!strcmp(TipoPrefa,"C") || !strcmp(TipoPrefa,"F")))
               {

                  ConvFecha_aFCP4(&(Fecha_Aux) , FDesde);
		          AnioDesde = Fecha_Aux.year;

                   EXEC SQL
                   SELECT  UNIQUE A.PORTIP
                   INTO  :TipImpFEmAux
                   FROM    CTTIPF A
                   WHERE  A.EJETIP = :AnioDesde
                     AND   A.TIPTIP =  "R"
                     AND   A.PRVTIP = :DelHacModDH
                     AND   A.DELTIP = 40
                     AND   A.FECINITIP <= :FDesde
                     AND   A.CODTIP = :CodImpFEm
                     AND   NOT EXISTS (SELECT * FROM CTTIPF B
                                 WHERE A.FECINITIP < B.FECINITIP
                                   AND B.EJETIP = :AnioDesde
                                   AND B.TIPTIP =  "R"
                                   AND B.PRVTIP = :DelHacModDH
                                   AND B.DELTIP = 40
                                   AND B.FECINITIP <= :FDesde
                                   AND B.CODTIP = :CodImpFEm);
                }

                   if(sqlca.sqlcode == 100)
                   {
                      CodImpFEm_IND = -1;
                      TipImpFEmAux = 0;
                      strcpy(CodImpFEm, "\0");
                   }
                   else
                   {
                      CodImpFEm_IND = 0;
                   }
                }

                /* Calcular importes de la prefactura a insertar */
                BasePTAux = 0;
                CuoImpFEmAux = 0;
                BaseVSAux = 0;

                /* Suma de los importes de territorios con centros eliminados */
                YaIncluido=FALSE;
            for (iAux=0; (iAux < 10) && CostesAdenCen[iAux].Delegacion != 0; iAux++)
            {
               if (CostesAdenCen[iAux].Delegacion == DelHacModDH)
               {
                  CostePTSumElim = CostesAdenCen[iAux].CostePT;
                  CosteVSSumElim = CostesAdenCen[iAux].CosteVS;
                  YaIncluido=TRUE;
                  break;
               }
               else
               {
                  YaIncluido=FALSE;
               }
            }
            if (!YaIncluido)
            {
               /*Informar nueva linea del array*/
               CostePTSumElim = 0;
                CosteVSSumElim = 0;
            }

                /* prevencin t cnica */
                if (pInputMsg->LIAP1601[i].BasImpFem[0] != 0)
                {
                   if( CostePT > 0 )
                   {
                      BasePTAux = (BasePT * (CostePTSum+CostePTSumElim)) / CostePT;
                   }
                   else   /* contrato abierto -> no tenemos costes en PTOFERTOT */
                   {
                      BasePTAux = (BasePT * ContadorCen) / NumCenTot;
                   }
                   CuoImpFEmAux = (TipImpFEmAux * BasePTAux) / 100;
                }
                /* vigilancia de la salud */
                if (pInputMsg->LIAP1601[i].BasImpFem[1] != 0)
                {
                   if( CosteVS > 0 )
                   {
                      BaseVSAux = (BaseVS * (CosteVSSum+CosteVSSumElim)) / CosteVS;
                   }
                   else     /* contrato abierto -> no tenemos costes en PTOFERTOT */
                   {
                      BaseVSAux = (BaseVS * ContadorCen) / NumCenTot;
                   }
                }

                /* Ver prvfem/delfem a insertar: Si el territorio de los centros coincide */
                /* con el de la oficina que crea el contrato, ser  la oficina de gestion  */
                if (DelHacModDH == DelHacCod)
                {
                   PrvFEm = PrvDMAux;
                   DelFEm = DelDMAux;
                }
                else
                {
                   PrvFEm = DelHacModDH;

               if (CMEMPRE_codemp == 1)
                      DelFEm = 0;
               else
                      DelFEm = 40;
                }

                /* Si es Transferencia, se recupera la cuenta de la oficina */
                if(!strcmp(FPago, "F") )
                {
                   EXEC SQL
                      SELECT ENTCCC,OFICCC,DCCCC,CUECCC
                      INTO :EntCCC, :OfiCCC, :DcCCC, :CueCCC
                      FROM PTPARSPA
                      WHERE PRVPAR = :PrvFEm
                        AND DELPAR = :DelFEm;

                   if(sqlca.sqlcode == 0)
                   {
                      EntCCC_IND = 1;
                      OfiCCC_IND = 1;
                      DcCCC_IND  = 1;
                      CueCCC_IND = 1;
                   }
                }
                /* Por ltimo se Crea la prefactura del territorio */
                EXEC SQL
                   SELECT MAX(NUMPREFA)
                   INTO   :NumPrefaNuevo :NumPrefaNuevo_IND
                   FROM  PTPREFA
                   WHERE  TIPOPREFA = :TipoPrefa
                   AND    PRVCONTR   = :PrvContr
                   AND    DELCONTR   = :DelContr
                   AND    SECCONTR  = :SecContr
                   AND    YEARCONTR = :YearContr
                   AND    FECVEN    = :FechVen
                   AND    USUARIO   = :UsuarioI;

                if (NumPrefaNuevo_IND < 0)
                   NumPrefaNuevo = 1;
                else
                   NumPrefaNuevo++;

                PrvFEm_IND = 0;
                DelFEm_IND = 0;

                EXEC SQL
                   INSERT INTO PTPREFA(TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR,
                                       SECCONTR, FECVEN, NUMPREFA, USUARIO,
                                       NUMRENOVA, FDESDE, FHASTA,
                                       LNIFCLI, NIFCLI, CODIMPFEM,
                                       BASEPT, TIPIMPFEM, CUOIMPFEM, BASEVS,
                                       SREFER, FPAGO, OTRFPAGO,
                                       ENTCCC, OFICCC, DCCCC,
                                       CUECCC, DOMFAC, PRVFAC, LOCFAC, CPFAC,
                                       DESFAC, IDEFEM, EJEFEM, PRVFEM,
                                       DELFEM, SECFEM, FVENCIFA, FREMESA,
                                       NUMREGCEN, OBSERVAC, ATT,SECINSCRI)
                               VALUES (:TipoPrefa, :PrvContr, :DelContr, :YearContr,
                                       :SecContr, :FechVen, :NumPrefaNuevo, :UsuarioI,
                                       :NumRenova, :FDesde :FDesde_IND, :FHasta :FHasta_IND,
                                       :LNifCli_CodDni :LNifCli_CodDni_IND, :NifCli_CodDni, :CodImpFEm :CodImpFEm_IND,
                                       :BasePTAux, :TipImpFEmAux, :CuoImpFEmAux, :BaseVSAux,
                                       :SRefer :SRefer_IND, :FPago, :OtrFPago :OtrFPago_IND,
                                       :EntCCC :EntCCC_IND, :OfiCCC :OfiCCC_IND, :DcCCC :DcCCC_IND,
                                       :CueCCC :CueCCC_IND, :DomFac,:PrvFac,:LocFac,:CPFac,
                                       :DesFac :DesFac_IND, NULL, NULL,:PrvFEm :PrvFEm_IND,
                                       :DelFEm :DelFEm_IND, NULL, NULL, NULL,
                                       :ContadorCen, :Observac :Observac_IND,
                                       :att :att_IND, 0);

                iFacturasRec = 0;

                while(strlen(pInputMsg->LIAP1601[i].Des15[iFacturasRec]) > 0)
                {
                   sscanf(pInputMsg->LIAP1601[i].Des15[iFacturasRec], "%c%4hd%2hd%2hd%6ld",
                          &IdeFemR[0], &EjeFemR, &PrvFemR, &DelFemR, &SecFemR);

                   EXEC SQL
                      INSERT INTO PTPREFARF (TIPOPREFA, PRVCONTR, DELCONTR,
                                             YEARCONTR, SECCONTR, FECVEN,
                                             NUMPREFA, USUARIO, IDEFEMR,
                                             EJEFEMR, PRVFEMR, DELFEMR,
                                             SECFEMR, TIPO, MOTANU)
                                     VALUES (:TipoPrefa, :PrvContr, :DelContr,
                                             :YearContr, :SecContr, :FechVen,
                                             :NumPrefaNuevo, :UsuarioI, :IdeFemR,
                                             :EjeFemR, :PrvFemR, :DelFemR,
                                             :SecFemR, "R", NULL);

                   iFacturasRec++;
                }

                /*Enviamos la factura emitida a la ventana para que la imprima */
                if (ContadorPrefa < FILAS_LBA)
                {
                   ConvFecha_aFCP4(&(pOutputMsg->LOAP1601A[ContadorPrefa].FechVen), FechVen);
                   strcpy(pOutputMsg->LOAP1601A[ContadorPrefa].Usuario, UsuarioI);
                   pOutputMsg->LOAP1601A[ContadorPrefa].NumPrefa = NumPrefaNuevo;
                   ContadorPrefa ++;
                }
                else
                {
                   /*De esta forma luego enviaremos en NumFilasA el nmero
                     de prefacturas creadas, pero la ventana slo tratar  como m ximo 15. */
                   ContadorPrefa++;
                }

                EXEC SQL
                  DECLARE CursorPtofercen CURSOR FOR
                  SELECT PTOFERCEN.REGPAT, PTOFERCEN.PRVCTR, PTOFERCEN.NUMCTR,
                         PTOFERCEN.CENTRACEN, PTOFERCEN.PRVDMCCC, PTOFERCEN.DELDMCCC
                   FROM PTOFERCEN, CTENDH, EICENT
                   WHERE CTENDH.EJEMOD      = :EjeMod
                     AND CTENDH.DELHACMOD   = :DelHacModDH
                     AND CTENDH.CODMOD IN (320,420)
                     AND CTENDH.CODPRV      = EICENT.PRVCPCEN
                     AND CTENDH.TIPPERMOD   = 'T'
                     AND PTOFERCEN.PRVOFER  = :PrvOferta
                     AND PTOFERCEN.DELOFER  = :DelOferta
                     AND PTOFERCEN.YEAROFER = :YearOferta
                     AND PTOFERCEN.SECOFER  = :SecOferta
                     AND PTOFERCEN.REGPAT = EICENT.REGPAT
                     AND PTOFERCEN.PRVCTR = EICENT.PRVCTR
                     AND PTOFERCEN.NUMCTR = EICENT.NUMCTR
                     AND PTOFERCEN.CENTRACEN = EICENT.CENTRACEN;

                EXEC SQL OPEN CursorPtofercen;
                EXEC SQL FETCH CursorPtofercen
                    INTO :Regpat_ptofercen, :PrvCtr_ptofercen,:NumCtr_ptofercen,
                         :CentraCen_ptofercen :CentraCen_ptofercen_IND, :PrvDMccc_ptofercen,
                         :DelDMccc_ptofercen;

                while (sqlca.sqlcode == 0)
                {
                   if (CentraCen_ptofercen_IND < 0)
                      strcpy(CentraCen_ptofercen,"");

                   /* Por ltimo se insertan los registros correspondientes en ptpreface
                      mediante un cursor */

                   EXEC SQL
                      INSERT INTO PTPREFACE(TIPOPREFA, PRVCONTR, DELCONTR, YEARCONTR,
                                            SECCONTR, FECVEN, NUMPREFA, REGPAT,
                                            PRVCTR, NUMCTR, CENTRACEN, USUARIO,
                                            PRVDMCCC, DELDMCCC, SECINSCRI)
                                   VALUES  ("C" , :PrvContr, :DelContr, :YearContr,
                                            :SecContr, :FechVen, :NumPrefaNuevo, :Regpat_ptofercen,
                                            :PrvCtr_ptofercen,:NumCtr_ptofercen,:CentraCen_ptofercen, :UsuarioI,
                                            :PrvDMccc_ptofercen, :DelDMccc_ptofercen, 0);

                   EXEC SQL FETCH CursorPtofercen
                       INTO :Regpat_ptofercen, :PrvCtr_ptofercen,:NumCtr_ptofercen,
                            :CentraCen_ptofercen :CentraCen_ptofercen_IND, :PrvDMccc_ptofercen,
                            :DelDMccc_ptofercen;
                }
                EXEC SQL CLOSE CursorPtofercen;
                EXEC SQL FREE  CursorPtofercen;

                EXEC SQL FETCH CursorDH
                   INTO :DelHacModDH;

             }/*Fin del while*/
             EXEC SQL CLOSE CursorDH;
             EXEC SQL FREE  CursorDH;

          }/*Fin desglosar*/
          /* Enviamos el nmero de prefacturas creadas */
          pOutputMsg->NumfilasA = ContadorPrefa;

       }

   } /* fin del for */

   /* Buscar las actividades del contrato cuya fecha de inicio sea mayor o igual
    que la fecha de efecto de la anulacin */
   EXEC SQL
      DECLARE CursorPTACTCEN CURSOR FOR
         SELECT ACTPRVCREA, ACTDELCREA, ACTSEC, ACTYEAR
         FROM PTACTCEN
         WHERE PRVOFER = :PrvOferta
         AND DELOFER = :DelOferta
         AND SECOFER = :SecOferta
         AND YEAROFER = :YearOferta
         AND ((ACTFESTINI IS NOT NULL AND ACTFESTINI >= :FEfecto) OR
              (ACTCOD = 23 AND ABIERTA = "S"));

   EXEC SQL OPEN CursorPTACTCEN;

   while ( 1 ) /* Bucle de Fetchs */
   {
      EXEC SQL FETCH CursorPTACTCEN INTO :ActPrvCrea, :ActDelCrea, :ActSec, :ActYear;

      /* Si no hay ms datos, salir del bucle */
      if ( sqlca.sqlcode ) break;

      /* Buscar horas imputadas a esa actividad */
      EXEC SQL
         SELECT UNIQUE 1
         FROM SATAR
         WHERE ACTPRVCREA = :ActPrvCrea
            AND ACTDELCREA = :ActDelCrea
            AND ACTYEAR = :ActYear
            AND ACTSEC = :ActSec;

      if ( sqlca.sqlcode==100 ) /* No existe registro (no hay horas imputadas) */
      {
         /* Borrar la actividad */
         EXEC SQL
            DELETE FROM SAACTCEN
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         EXEC SQL
            DELETE FROM SAACT
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         EXEC SQL
            DELETE FROM SAACTOFER
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         EXEC SQL
            DELETE FROM SAACTCONT
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         EXEC SQL
            DELETE FROM SAACTEST
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         EXEC SQL
            DELETE FROM SAACTSIT
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         EXEC SQL
            DELETE FROM SAACTUSU
            WHERE ACTPRVCREA = :ActPrvCrea
               AND ACTDELCREA = :ActDelCrea
               AND ACTYEAR = :ActYear
               AND ACTSEC = :ActSec;

         /*Mod.13, se borra el Delete sobre PTHOACTCEN y PTACTCEN*/

      } /* End if ( sqlca.sqlcode==100 ) */

   } /* Fin bucle de Fetchs */

   EXEC SQL CLOSE CursorPTACTCEN;
   EXEC SQL FREE  CursorPTACTCEN;

   pOutputMsg->NumFilas = Contador;
}

^ permalink raw reply	[flat|nested] 2+ messages in thread

* bug#13548: Error in show-paren-mode
  2013-01-25 13:23 bug#13548: Error in show-paren-mode Dani Moncayo
@ 2013-01-25 16:10 ` Bastien
  0 siblings, 0 replies; 2+ messages in thread
From: Bastien @ 2013-01-25 16:10 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: 13548-done

Hi Dani,

Dani Moncayo <dmoncayo@gmail.com> writes:

> Recipe from "emacs -Q":
> 1. Visit the attached file.
> 2. M-x show-paren-mode RET
> 3. C-n
>
> When I do it, I get this error:
>   Error in timer: (wrong-type-argument integer-or-marker-p t)

This has been fixed two days ago, please update your Emacs.

Thanks,

-- 
 Bastien





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2013-01-25 16:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-25 13:23 bug#13548: Error in show-paren-mode Dani Moncayo
2013-01-25 16:10 ` Bastien

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).