**********************************************************
*  genere bilan resultat
*  Vanessa
*  fvrier 2005
**********************************************************
* Ouvertures des fichiers

EXECUTE "DATE.FORMAT"
OPEN "","BALANCEANAL" TO F.BALANCEANAL ELSE PRINT "OUVERTURE BALANCEANAL"
OPEN "","BALANCEANALARCHIVE" TO F.BALANCEANALARCHIVE ELSE PRINT "OUVERTURE BALANCEANALARCHIVE"
OPEN "","BALANCEANALTEMPO" TO F.BALANCEANALTEMPO ELSE PRINT "OUVERTURE BALANCEANALTEMPO"

OPEN "","BALANCEGENE" TO F.BALANCEGENE ELSE PRINT "OUVERTURE BALANCEGENE"
OPEN "","BALANCEGENEARCHIVE" TO F.BALANCEGENEARCHIVE ELSE PRINT "OUVERTURE BALANCEGENEARCHIVE"
OPEN "","BALANCEGENETEMPO" TO F.BALANCEGENETEMPO ELSE PRINT "OUVERTURE BALANCEGENETEMPO"

OPEN "","CPTADOCDETAIL" TO F.CPTADOCDETAIL ELSE PRINT "OUVERTURE CPTADOCDETAIL"
OPEN "","CPTADOCDETAILPARAM" TO F.CPTADOCDETAILPARAM ELSE PRINT "OUVERTURE CPTADOCDETAILPARAM"
OPEN "","CPTADOCREGROUP" TO F.CPTADOCREGROUP ELSE PRINT "OUVERTURE CPTADOCREGROUP"

OPEN "","LIENCOMPTA" TO F.LIENCOMPTA ELSE PRINT "OUVERTURE LIENCOMPTA"
OPEN "","PARAMENTITECOMPTA" TO F.PARAMENTITECOMPTA ELSE PRINT "OUVERTURE PARAMENTITECOMPTA"
OPEN "","TABLES" TO F.TABLES ELSE PRINT "OUVERTURE TABLES"
OPEN "","TEMPO" TO F.TEMPO ELSE PRINT "OUVERTURE TEMPO"

*********************************************************
* Recuperation des arguments

PROCREAD ARGUMENTS ELSE STOP
W_Traitement=FIELD(ARGUMENTS,"|",2)
W_Entite=FIELD(ARGUMENTS,"|",3)
W_Exer=FIELD(ARGUMENTS,"|",4)
W_MoisDeb=FIELD(ARGUMENTS,"|",5)
W_MoisFin=FIELD(ARGUMENTS,"|",6)
W_Edition=FIELD(ARGUMENTS,"|",7)
W_Brouillard=FIELD(ARGUMENTS,"|",8)
W_Section=FIELD(ARGUMENTS,"|",9)
W_RegroupSect=FIELD(ARGUMENTS,"|",10)
W_TouteSection=FIELD(ARGUMENTS,"|",11)
W_User=FIELD(ARGUMENTS,"|",12)
*********************************************************
* variables

W_CleSect=""
ENR_TEMPO=""
W_Ligne=1
W_MontDetailRegroup=0
W_MontPos=0
W_MontNeg=0
W_TabDyn=""
ENR_LIENCOMPTA=""
W_REQUETEBALANCE=""
*********************************************************
* PROGRAMME PRINCIPAL

EXECUTE 'SET-DEC ,'
EXECUTE 'SET-THOUS .'

	READ ENR_TABLES FROM F.TABLES,"SECTANAL" ELSE ENR_TABLES=""
	IF W_Section # "" THEN
   		W_CountSect = LEN(W_Section)

   		i=1
		j=1
   		LOOP
   		UNTIL i >= W_CountSect DO
			W_CleSect<j>=W_Section[i,3]
			j=j+1
			i=i+3
		REPEAT
	END

	* DATE DEBUT ET FIN
	READ ENR_PARAMENTITECOMPTA FROM F.PARAMENTITECOMPTA,W_Entite ELSE ENR_PARAMENTITECOMPTA=""
	IF W_Exer = "N0" THEN
		x=1
		y=2
	END ELSE
		x=3
		y=4
	END

	W_MoisDebExer=OCONV(ENR_PARAMENTITECOMPTA<x>,"D4/")
	W_MoisDebExer=W_MoisDebExer[4,2]
	W_MoisFinExer=OCONV(ENR_PARAMENTITECOMPTA<y>,"D4/")
	W_MoisFinExer=W_MoisFinExer[4,2]

	* CHERCHE CLE REGROUPEMENT
	IF W_Traitement="A" THEN
		W_Traitement="BA"
	END ELSE
		IF W_Traitement="P" THEN
			W_Traitement="BP"
		END ELSE
			W_Traitement="CR"
		END
	END

      	READ ENR_TEMPO FROM F.TEMPO,W_Traitement:W_User THEN
      		DELETE F.TEMPO,W_Traitement:W_User
	END ELSE
		ENR_TEMPO=""
	END
	IF W_Edition = "2" THEN
		ENR_TEMPO<1>="Regroupement;Dtail;"
		W_An=OCONV(ENR_PARAMENTITECOMPTA<x>,"D4/")
		W_An=W_An[7,4]	
		IF W_Traitement="BA" THEN
			ENR_TEMPO<1>=ENR_TEMPO<1>:"BRUT ":W_An:";"
			ENR_TEMPO<1>=ENR_TEMPO<1>:"A DEDUIRE ":W_An:";"
			ENR_TEMPO<1>=ENR_TEMPO<1>:"NET ":W_An:";"
			ENR_TEMPO<1>=ENR_TEMPO<1>:W_An-1:";"
		END ELSE
			ENR_TEMPO<1>=ENR_TEMPO<1>:W_An:";":W_An-1
		END
		IF W_Traitement="CR" AND W_RegroupSect="0" THEN
			ENR_TEMPO<1>=ENR_TEMPO<1>:";Section analytique"
		END
		W_Ligne=2
	END

	* SI PARAMETRAGE DES REGROUPEMENTS PAS FAIT --> SORT DU PROG
	READ ENR_CPTADOCREGROUP FROM F.CPTADOCREGROUP,W_Traitement ELSE STOP
	
	IF W_Traitement="CR" AND W_RegroupSect="0" THEN
		W_CountSect=DCOUNT(W_CleSect,CHAR(254))
	END ELSE
		W_CountSect=1
	END

	FOR iSect=1 TO W_CountSect

		W_CountRegroup=DCOUNT(ENR_CPTADOCREGROUP<1>,CHAR(253))
		* SI PARAMETRAGE DES DETAILS PAS FAIT --> SORT DU PROG
		IF W_CountRegroup = 0 THEN
			STOP
		END

		FOR iRegroup= 1 TO W_CountRegroup

			READ ENR_CPTADOCDETAIL FROM F.CPTADOCDETAIL,W_Traitement:ENR_CPTADOCREGROUP<2,iRegroup> ELSE ENR_CPTADOCDETAIL=""

			W_CountDetail=DCOUNT(ENR_CPTADOCDETAIL<1>,CHAR(253))

			FOR iDetail= 1 TO W_CountDetail

				READ ENR_CPTADOCDETAILPARAM FROM F.CPTADOCDETAILPARAM,W_Traitement:ENR_CPTADOCREGROUP<2,iRegroup>:ENR_CPTADOCDETAIL<2,iDetail> ELSE ENR_CPTADOCDETAILPARAM=""

				W_CountParam=DCOUNT(ENR_CPTADOCDETAILPARAM<2>,CHAR(253))

				W_MontantExerN=0
				W_MontantExerAnt=0
				W_MontPos=0
				W_MontNeg=0

				* iExer=1 --> exercice slectionn
				* iExer=2 --> exercice prcdent
				FOR iExer=1 TO 2
					W_Archive="FAUX"
					W_Tempo="FAUX"
					IF iExer=1 THEN
						IF W_Exer="N0" THEN
							W_Exercice="N0"
						END ELSE
							W_Exercice="N1"
						END	
					END ELSE
						IF W_Exer="N0" THEN
							W_Exercice="N0"
							W_Archive="VRAI"
						END ELSE
							W_Exercice="N0"
						END
					END

					FOR iParam= 1 TO W_CountParam

						IF W_Edition="2" AND ENR_CPTADOCDETAILPARAM<5>="0" THEN
							* ne pas tenir compte de la ligne dans le fichier graphique car pas  totaliser dans le regroupement
						END ELSE
					
							W_MontDetailRegroup=0

							IF W_Traitement="BA" OR W_Traitement="BP" OR (W_Traitement="CR" AND W_TouteSection="1" AND W_RegroupSect="1") THEN
								W_Tempo="FAUX"
								GOSUB 10
								IF W_Brouillard="1" AND iExer=1 THEN
									W_Tempo="VRAI"
									GOSUB 10
								END
							END ELSE
								W_Tempo="FAUX"
								GOSUB 20
								IF W_Brouillard="1" AND iExer=1 THEN
									W_Tempo="VRAI"
									GOSUB 20
								END
							END
							IF W_MontDetailRegroup < 0 AND ENR_CPTADOCDETAILPARAM<4,iParam> # "" THEN
								W_MontDetailRegroup = 0
							END
							IF ENR_CPTADOCDETAILPARAM<1,iParam>="-" THEN
								W_MontNeg=W_MontNeg+W_MontDetailRegroup
							END ELSE
								W_MontPos=W_MontPos+W_MontDetailRegroup
							END
							
							IF iExer # 1 AND W_Traitement="BA" THEN
								W_MontDetailRegroup=W_MontDetailRegroup
							END ELSE
								W_MontDetailRegroup=ABS(W_MontDetailRegroup)
							END

							IF iExer=1 THEN
								IF ENR_CPTADOCDETAILPARAM<1,iParam>="-" THEN
									W_MontantExerN=W_MontantExerN-W_MontDetailRegroup
								END ELSE
									W_MontantExerN=W_MontantExerN+W_MontDetailRegroup
								END
							END ELSE
								IF W_Traitement="BA" THEN
									W_MontantExerAnt=W_MontantExerAnt+W_MontDetailRegroup
								END ELSE
									IF ENR_CPTADOCDETAILPARAM<1,iParam>="-" THEN
										W_MontantExerAnt=W_MontantExerAnt-W_MontDetailRegroup
									END ELSE
										W_MontantExerAnt=W_MontantExerAnt+W_MontDetailRegroup
									END
								END
							END

						END

					NEXT iParam

					IF iExer=1 THEN
						W_MontPosExerN=W_MontPos
						W_MontNegExerN=W_MontNeg
					END

				NEXT iExer

				GOSUB 50

			NEXT iDetail

		NEXT iRegroup

	NEXT iSect

	IF W_Edition = "1" THEN
		WRITE ENR_TEMPO ON F.TEMPO,W_Traitement:W_User
	END ELSE
		IF W_Traitement="BA" THEN
			W_Fichier="BILANACTIF":W_Entite:".csv"
		END ELSE
			IF W_Traitement="BP" THEN
				W_Fichier="BILANPASSIF":W_Entite:".csv"
			END ELSE
				W_Fichier="CPTERESULTAT":W_Entite:".csv"
			END
		END

		WRITE ENR_TEMPO ON F.LIENCOMPTA,W_Fichier
		ENR_TEMPO=""
		ENR_TEMPO<1>=W_Fichier
		WRITE ENR_TEMPO ON F.TEMPO,W_Traitement:W_User
	END

EXECUTE 'SET-DEC .'
EXECUTE 'SET-THOUS ,'

STOP

****************************************************************************************************
* REQUETE BALANCEGENE
10

	IF W_Tempo="VRAI" THEN
		W_Temp='SSELECT BALANCEGENETEMPO'
	END ELSE
		IF W_Archive="VRAI" THEN
			W_Temp='SSELECT BALANCEGENEARCHIVE'
		END ELSE
			W_Temp='SSELECT BALANCEGENE'
		END
	END

	W_Temp=W_Temp:' AVEC @ID = "':W_Exercice:W_Entite:']"'

	IF W_MoisFin="" THEN
		W_Temp=W_Temp:' AND AVEC 4 <= "':W_MoisDeb:'"'
	END ELSE
		W_Temp=W_Temp:' AND AVEC 4 >= "':W_MoisDeb:'" AND AVEC 4 <= "':W_MoisFin:'"'
	END

	IF ENR_CPTADOCDETAILPARAM<2,iParam>=ENR_CPTADOCDETAILPARAM<3,iParam> THEN
		W_Temp=W_Temp:' AND AVEC @ID = "[':ENR_CPTADOCDETAILPARAM<2,iParam>:'"'
	END ELSE
		W_Temp=W_Temp:' AND AVEC @ID >= "[':ENR_CPTADOCDETAILPARAM<2,iParam>:'" AND AVEC @ID <= "[':ENR_CPTADOCDETAILPARAM<3,iParam>:'"'
	END

	EXECUTE W_Temp
	EXECUTE 'SAUVE-LISTE W_REQUETEBALANCE'
	EXECUTE "LISTE W_REQUETEBALANCE" RETURNING MSGCODE	

	IF MSGCODE<1>#209 THEN

		IF W_Tempo="VRAI" THEN
			SELECT F.BALANCEGENETEMPO TO W_REQUETEBALANCE
		END ELSE
			IF W_Archive="VRAI" THEN
				SELECT F.BALANCEGENEARCHIVE TO W_REQUETEBALANCE
			END ELSE
				SELECT F.BALANCEGENE TO W_REQUETEBALANCE
			END
		END

		W_FINI="FAUX"
		LOOP
			READNEXT W_CLE FROM W_REQUETEBALANCE ELSE W_FINI="VRAI"
		WHILE W_FINI="FAUX" DO
			IF W_Tempo="VRAI" THEN
				READ ENR_BALANCEGENE FROM F.BALANCEGENETEMPO,W_CLE ELSE ENR_BALANCEGENE=""
			END ELSE
				IF W_Archive="VRAI" THEN
					READ ENR_BALANCEGENE FROM F.BALANCEGENEARCHIVE,W_CLE ELSE ENR_BALANCEGENE=""
				END ELSE
					READ ENR_BALANCEGENE FROM F.BALANCEGENE,W_CLE ELSE ENR_BALANCEGENE=""
				END
			END
			W_TabDyn=ENR_BALANCEGENE
			GOSUB 30
		REPEAT
	END

RETURN

****************************************************************************************************
* REQUETE BALANCEANAL
20

	IF W_Tempo="VRAI" THEN
		W_Temp='SSELECT BALANCEANALTEMPO'
	END ELSE
		IF W_Archive="VRAI" THEN
			W_Temp='SSELECT BALANCEANALARCHIVE'
		END ELSE
			W_Temp='SSELECT BALANCEANAL'
		END
	END

	W_Temp=W_Temp:' AVEC @ID = "':W_Exercice:W_Entite:']"'

	IF W_MoisFin="" THEN
		W_Temp=W_Temp:' AND AVEC 4 <= "':W_MoisDeb:'"'
	END ELSE
		W_Temp=W_Temp:' AND AVEC 4 >= "':W_MoisDeb:'" AND AVEC 4 <= "':W_MoisFin:'"'
	END

	IF W_RegroupSect="1" THEN
		W_Temp=W_Temp:' AND AVEC CodeSectBalAnal = "':W_CleSect<1>:'"'
		i=2
		LOOP
		UNTIL W_CleSect<i>="" 
			W_Temp=W_Temp:' OR = "':W_CleSect<i>:'"'
			i=i+1
		REPEAT

	END ELSE
		W_Temp=W_Temp:' AND AVEC CodeSectBalAnal = "':W_CleSect<iSect>:'"'
	END

	IF ENR_CPTADOCDETAILPARAM<2,iParam>=ENR_CPTADOCDETAILPARAM<3,iParam> THEN
		W_Temp=W_Temp:' AND AVEC CompteBalAnal = "':ENR_CPTADOCDETAILPARAM<2,iParam>:'"'
	END ELSE
		W_Temp=W_Temp:' AND AVEC CompteBalAnal >= "':ENR_CPTADOCDETAILPARAM<2,iParam>:'" AND AVEC CompteBalAnal <= "':ENR_CPTADOCDETAILPARAM<3,iParam>:'"'
	END

	
	IF W_RegroupSect="1" THEN
		W_Temp=W_Temp:' PAR CompteBalAnal'
	END ELSE
		W_Temp=W_Temp:' PAR CodeSectBalAnal'
	END

	EXECUTE W_Temp
	EXECUTE 'SAUVE-LISTE W_REQUETEBALANCE'
	EXECUTE "LISTE W_REQUETEBALANCE" RETURNING MSGCODE	

	IF MSGCODE<1>#209 THEN
		IF W_Tempo="VRAI" THEN
			SELECT F.BALANCEANALTEMPO TO W_REQUETEBALANCE
		END ELSE
			IF W_Archive="VRAI" THEN
				SELECT F.BALANCEANALARCHIVE TO W_REQUETEBALANCE
			END ELSE
				SELECT F.BALANCEANAL TO W_REQUETEBALANCE
			END
		END

		W_FINI="FAUX"
		LOOP
			READNEXT W_CLE FROM W_REQUETEBALANCE ELSE W_FINI="VRAI"
		WHILE W_FINI="FAUX" DO
			IF W_Tempo="VRAI" THEN
				READ ENR_BALANCEANAL FROM F.BALANCEANALTEMPO,W_CLE ELSE ENR_BALANCEANAL=""
			END ELSE
				IF W_Archive="VRAI" THEN
					READ ENR_BALANCEANAL FROM F.BALANCEANALARCHIVE,W_CLE ELSE ENR_BALANCEANAL=""
				END ELSE
					READ ENR_BALANCEANAL FROM F.BALANCEANAL,W_CLE ELSE ENR_BALANCEANAL=""
				END
			END

			W_TabDyn=ENR_BALANCEANAL

			GOSUB 30

		REPEAT
	END

RETURN

****************************************************************************************************
* PARCOURT LE FICHIER BALANCE
30


	IF (W_MoisDeb=W_MoisDebExer AND W_MoisFin=W_MoisFinExer AND W_Traitement="CR") OR (W_MoisDeb=W_MoisFinExer AND W_Traitement[1,1]="B") THEN
		W_AttDeb=1
		W_AttCred=2
		W_MV=1
		GOSUB 40
	
	END ELSE
		W_AttDeb=5
		W_AttCred=6
		W_CountBal=DCOUNT(W_TabDyn<4>,CHAR(253))
		FOR iBal=1 TO W_CountBal
			IF (W_MoisDeb <= W_TabDyn<4,iBal> AND W_MoisFin >= W_TabDyn<4,iBal> AND W_Traitement="CR") OR (W_MoisDeb >= W_TabDyn<4,iBal> AND W_Traitement[1,1]="B") THEN
				W_MV=iBal
				GOSUB 40
			END
		NEXT iBal
	END

RETURN

****************************************************************************************************
* CUMULE LES VALEURS
40

	W_Montant=0
	IF W_TabDyn<W_AttDeb,W_MV>="" THEN
		W_TabDyn<W_AttDeb,W_MV>=0
	END
	IF W_TabDyn<W_AttCred,W_MV>="" THEN
		W_TabDyn<W_AttCred,W_MV>=0
	END
	IF ENR_CPTADOCDETAILPARAM<4,iParam>="" THEN
 		W_Montant = W_TabDyn<W_AttDeb,W_MV> - W_TabDyn<W_AttCred,W_MV>
	END ELSE
		IF ENR_CPTADOCDETAILPARAM<4,iParam>="D" THEN
 			W_Montant = W_TabDyn<W_AttDeb,W_MV> - W_TabDyn<W_AttCred,W_MV>
			*IF W_Montant < 0 THEN
			*	W_Montant=0
			*END
		END ELSE
 			W_Montant = W_TabDyn<W_AttCred,W_MV> - W_TabDyn<W_AttDeb,W_MV>
			*IF W_Montant < 0 THEN
			*	W_Montant=0
			*END
		END
	END

	W_MontDetailRegroup=W_MontDetailRegroup + W_Montant

RETURN

****************************************************************************************************
* REMPLIT TEMPO
50

	IF W_Edition = "1" THEN
		ENR_TEMPO<W_Ligne,1>=W_Traitement:ENR_CPTADOCREGROUP<2,iRegroup>
		ENR_TEMPO<W_Ligne,2>=ENR_CPTADOCREGROUP<1,iRegroup>
		ENR_TEMPO<W_Ligne,3>=ENR_CPTADOCDETAIL<1,iDetail>

		ENR_TEMPO<W_Ligne,4>=W_MontantExerN
		ENR_TEMPO<W_Ligne,5>=W_MontantExerAnt

		ENR_TEMPO<W_Ligne,6>=ENR_CPTADOCDETAILPARAM<5>

		IF W_Traitement="CR" AND W_RegroupSect="0" THEN
			ENR_TEMPO<W_Ligne,7>=W_CleSect<iSect>
		END

		ENR_TEMPO<W_Ligne,8>=W_MontPosExerN
		ENR_TEMPO<W_Ligne,9>=ABS(W_MontNegExerN)

		IF W_Traitement="BA" THEN
			IF ENR_TEMPO<W_Ligne,8> < 0 AND ENR_TEMPO<W_Ligne,9>="0" THEN
				ENR_TEMPO<W_Ligne,4>=-ENR_TEMPO<W_Ligne,4>
			END
		END

		W_Ligne=W_Ligne+1
	END ELSE
		ENR_TEMPO<W_Ligne>=ENR_CPTADOCREGROUP<1,iRegroup>:";"
		ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:ENR_CPTADOCDETAIL<1,iDetail>:";"
		IF W_Traitement="BA" THEN
			ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:W_MontPosExerN/100:";"
			ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:ABS(W_MontNegExerN/100):";"
		END

		ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:W_MontantExerN/100:";"
		ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:W_MontantExerAnt/100:";"

		IF W_Traitement="CR" AND W_RegroupSect="0" THEN
			i=1
			LOOP
			UNTIL W_CleSect<iSect>=ENR_TABLES<2,i> OR ENR_TABLES<2,i>=""
				i=i+1
			REPEAT
			ENR_TEMPO<W_Ligne>=ENR_TEMPO<W_Ligne>:ENR_TABLES<3,i>
		END
		W_Ligne=W_Ligne+1
	END

RETURN
