Insertion dans F_ECRITUREC - erreur 41149
Modérateurs: Super-Apogea, Super Modérateur
3 messages
|Page 1 sur 1
Insertion dans F_ECRITUREC - erreur 41149
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
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:
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é
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
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
- Messages: 176
- Inscription: Sam 28 Juin 2014 20:48
Re: Insertion dans F_ECRITUREC - erreur 41149
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
- Messages: 176
- Inscription: Sam 28 Juin 2014 20:48
Re: Insertion dans F_ECRITUREC - erreur 41149
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
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
- Messages: 15
- Inscription: Mar 18 Déc 2018 21:10
3 messages
|Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités