Insertion dans F_ECRITUREC - erreur 41149

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Insertion dans F_ECRITUREC - erreur 41149

de romulus001 » Dim 22 Nov 2015 13:17

Bonjour,

Je me suis créée une procédure stockée qui permet de générer de nouvelles écritures comptables, tout cela est fait dans une transaction, je rencontre l'erreur 41149 et je ne trouve aucune explication au problème que je rencontre, et de plus, j'ai SQL Server 2008 R2 qui plante à chaque fois :evil:

Le but est de générer de nouvelles écritures, permettant de payer des fournisseurs, pour cela, je dois générer une remise bancaire. Le contenu de ma procédure stockée:

Code: Tout sélectionner
ALTER PROCEDURE [dbo].[Z_PS_GenererEcrituresComptables2](@idSession varchar(50))
AS
BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
   -- interfering with SELECT statements.
   SET NOCOUNT ON;
   if @idSession is null
      raiserror('Null values not allowed for Z_PS_GenererEcrituresComptables', 16, 1)

   declare @lettrage varchar(3)
   declare @num int=1
   declare @ct_num varchar(17)
   declare @ct_numOLD varchar(17)=''
   declare @ct_numEnCours varchar(17)=''
   declare @jm_date smalldatetime
   declare @nbLigne int
   declare @annee int
   declare @listeECNO varchar(max)
   declare @req varchar(max)
   declare @DernierEcNo int
   declare @idTypePaiement numeric(18,0)
   declare @AnalytiqueEcartChange varchar(20)
   declare @Montant numeric(24,6)
   declare @TotalCredit numeric(38,6)
   declare @TotalDebit numeric(38,6)
   declare @CompteAnalytique varchar(13)
   declare @EC_LETTRE smallint
   declare @itermax int=(select max(numero) from ZIMPORTECRITURES where idSession=@idSession)


begin try
   begin tran
   while @num<=@itermax
   begin
      SELECT @CompteAnalytique=CompteAnalytique, @EC_LETTRE=EC_Lettre,
         @ct_num=ct_num, @annee=anneeRemise, @listeECNO=EC_NoOrigine
      from ZIMPORTECRITURES
      where idsession=@idSession and numero=@num

      if @EC_LETTRE=0 --cette écriture ne doit pas être lettrée
         begin
            INSERT INTO F_ECRITUREC (JO_Num,EC_No,CG_Num,CT_Num,EC_Intitule,EC_Sens,EC_Montant,JM_Date,EC_Jour,EC_Date,EC_Echeance,
            EC_RefPiece,remise_bancaire,EC_Piece,N_Devise,EC_Devise,
            EC_NoLink,EC_TresoPiece,N_Reglement,EC_Parite,EC_Quantite,EC_Point,EC_Pointage,EC_Impression,
            EC_Cloture,EC_CType,EC_Rappel,EC_LettreQ,EC_LettrageQ,EC_ANType,EC_RType,EC_Remise,EC_ExportExpert,
            EC_Norme,TA_Provenance,EC_PenalType,EC_DatePenal,EC_DateRelance,EC_DateRappro,
            EC_Reference,EC_StatusRegle,EC_MontantRegle,EC_DateRegle,EC_RIB,EC_DateOp,EC_NoCloture,EC_Lettre,EC_Lettrage)
            select JO_Num,0,CG_Num,CT_Num,EC_Intitule,EC_Sens,EC_Montant,JM_Date,EC_Jour,EC_Date,EC_Echeance,
            EC_RefPiece,remise_bancaire,EC_Piece,N_Devise,EC_Devise,
            EC_NoLink,EC_TresoPiece,N_Reglement,EC_Parite,EC_Quantite,EC_Point,EC_Pointage,EC_Impression,
            EC_Cloture,EC_CType,EC_Rappel,EC_LettreQ,EC_LettrageQ,EC_ANType,EC_RType,EC_Remise,EC_ExportExpert,
            EC_Norme,TA_Provenance,EC_PenalType,EC_DatePenal,EC_DateRelance,EC_DateRappro,
            EC_Reference,EC_StatusRegle,EC_MontantRegle,EC_DateRegle,EC_RIB,EC_DateOp,EC_NoCloture,0,''      
            FROM ZIMPORTECRITURES
            where idsession=@idSession and numero=@num
         end
      else
         begin
            set @ct_numEnCours=@ct_num
            --on met à jour les infos libre SAGE des écritures comptables
            set @req='UPDATE F_ECRITUREC SET Remise_bancaire=''@idsession@'', ecritureOrigine=1.0 WHERE EC_NO IN (@ecno@)'
            set @req=replace(@req,'@idsession@',@idSession)
            set @req=replace(@req,'@ecno@',@listeECNO)
            exec(@req)

            --on met à jour le lettrage si on change de tiers
            if @ct_numOLD<>@ct_numEnCours
            begin
            set @ct_numOLD=@ct_numEnCours
            set @lettrage=[dbo].[z_nouveauLettrage](@ct_numEnCours,@annee)
            end

            --mise à jour des codes de lettrages SAGE
            update F_ECRITUREC set ec_lettre=1, ec_lettrage=@lettrage
            where Remise_bancaire=@idSession and ct_num=@ct_numEnCours

            --inserer la nouvelle ligne dans SAGE
            INSERT INTO F_ECRITUREC (JO_Num,EC_No,CG_Num,CT_Num,EC_Intitule,EC_Sens,EC_Montant,JM_Date,EC_Jour,EC_Date,EC_Echeance,
            EC_RefPiece,remise_bancaire,EC_Piece,N_Devise,EC_Devise,
            EC_NoLink,EC_TresoPiece,N_Reglement,EC_Parite,EC_Quantite,EC_Point,EC_Pointage,EC_Impression,
            EC_Cloture,EC_CType,EC_Rappel,EC_LettreQ,EC_LettrageQ,EC_ANType,EC_RType,EC_Remise,EC_ExportExpert,
            EC_Norme,TA_Provenance,EC_PenalType,EC_DatePenal,EC_DateRelance,EC_DateRappro,
            EC_Reference,EC_StatusRegle,EC_MontantRegle,EC_DateRegle,EC_RIB,EC_DateOp,EC_NoCloture,EC_Lettre,EC_Lettrage)
            select JO_Num,0,CG_Num,CT_Num,EC_Intitule,EC_Sens,EC_Montant,JM_Date,EC_Jour,EC_Date,EC_Echeance,
            EC_RefPiece,remise_bancaire,EC_Piece,N_Devise,EC_Devise,
            EC_NoLink,EC_TresoPiece,N_Reglement,EC_Parite,EC_Quantite,EC_Point,EC_Pointage,EC_Impression,
            EC_Cloture,EC_CType,EC_Rappel,EC_LettreQ,EC_LettrageQ,EC_ANType,EC_RType,EC_Remise,EC_ExportExpert,
            EC_Norme,TA_Provenance,EC_PenalType,EC_DatePenal,EC_DateRelance,EC_DateRappro,
            EC_Reference,EC_StatusRegle,EC_MontantRegle,EC_DateRegle,EC_RIB,EC_DateOp,EC_NoCloture,1,@lettrage      
            FROM ZIMPORTECRITURES
            where idsession=@idSession and numero=@num
         end --if

      set @num=@num+1
   end --while

   --statut:
   --0 : non traité
   --1 : traité
   --2 : echec
   --3 : Supprimé
   update ZSESSIONIMPORTECRITURES set statut=1 where idSession=@idSession

   --test de cohérence : on doit avoit Total débit = Total crédit
   set @TotalDebit=(
      select sum(convert(numeric(38,6),ec_montant))
      from F_ECRITUREC
      where Remise_bancaire=@idSession
      and ec_sens=0
   )

   set @TotalCredit=(
      select sum(convert(numeric(38,6),ec_montant))
      from F_ECRITUREC
      where Remise_bancaire=@idSession
      and ec_sens=1
   )

   if @TotalDebit=@TotalCredit --la remise a été correctement générée
      begin
         commit
         select 0,'ok'
      end
   else
      begin
         declare @Message varchar(max)
         set @Message='An error occured in the generation of your delivery, total debit amount=@1, total credit amount=@2'
         set @Message=replace(@Message,'@1',@TotalDebit)
         set @Message=replace(@Message,'@2',@TotalCredit)

         raiserror(@Message, 16, 1)
      end

end try
begin catch
   select 99, ERROR_MESSAGE();
   rollback
   update ZSESSIONIMPORTECRITURES set statut=2 where idSession=@idSession
end catch

END


Dans mes tests , je sélectionne comme numéro de remise (paramètre de ma procédure stockée) N34L100177.
En PJ, je vous met le script permettant de créer et d'initialiser ma table ZIMPORTECRITURES.
Je n'envoie rien concernant la table ZSESSIONIMPORTECRITURES car c'est une juste une table décrivant l'en-tête de la remise, elle n'est pas très importante.
Le problème que je rencontre survient à la 3eme itération dans ma boucle, en faisant l'insertion dans mon 1er bloc.

Merci

PS: version 16.05 en comptabilité
Dernière édition par romulus001 le Mer 16 Déc 2015 14:58, édité 1 fois.
Super Contributeur
Super Contributeur
 
Messages: 176
Inscription: Sam 28 Juin 2014 20:48

Re: Insertion dans F_ECRITUREC - erreur 41149

de romulus001 » Dim 22 Nov 2015 22:39

le problème venait du fait que mon journal n'était pas mouvementé. Avant, seul mon journal de banque était mouvementé, mais depuis que j'ai modifié mon code où j'écris également sur un journal d'OD, je n'avais pas rendu ce dernier mouvementé, d'où l'erreur ainsi rencontrée
Super Contributeur
Super Contributeur
 
Messages: 176
Inscription: Sam 28 Juin 2014 20:48

Re: Insertion dans F_ECRITUREC - erreur 41149

de Sageokan » Ven 23 Oct 2020 16:41

Bonsoir,
J'aimerais connaitre plus sur votre code corrigé. Mais il faudrait que je sache si vous êtes encore présent dans le Forum.
Merci
Posteur néophyte
Posteur néophyte
 
Messages: 15
Inscription: Mar 18 Déc 2018 21:10


Qui est en ligne
Utilisateurs parcourant ce forum: Google [Bot] et 0 invités