PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → SAGE GESCOM 100 SQL WINDEV
SAGE GESCOM 100 SQL WINDEV
Débuté par stéphane, 30 déc. 2005 11:24 - 1 réponse
Posté le 30 décembre 2005 - 11:24
Bonjour,
Je suis sur un projet Windev9 effectuant des opérations sur les fichiers d'une BD Sage L100 SQL.
Je transforme des pièces de vente de BC en BL.
Je travaille avec des articles à gammes, sérialisés et à lot.
J'effectue avec succès les opérations d'ajout et de modification sur les fichiers.

La validité de ces opérations est vérifiée, cependant par l'intermédiaire de Sage GESCOM, l'affichage n'est mis à jour que partiellement.
Par exemple, les numéro de lot n'apparaissent pas lorsque je consulte la pièce transformée.

Questions:
1/ Quelqu'un peut-il m'aider ?
2/ Comment faire pour obtenir un affichage raffrachit.
3/ Dois-je utiliser les TRIGGERS ?
4/ Les requettes SQL suffisent-elles ?
5/ En SQL, la mise à jour des stock est-elle gérée par SAGE ou doit-on gérer la ventilation du stock à travers toutes les tables les gérant ?
6/ Est-il possible de déclencher le rafraichissement des fenêtres ouvertes dans la Gescom : par exemple la liste pièces de ventes; le statut des pièces ...

Merci par avance à ceux qui me consacreront un peu de temps.

Vu la période, mes Meilleurs voeux à ceux qui liront ce message.
Posté le 02 janvier 2006 - 10:09
Un extrait de mes codes à ce sujet

PROCEDURE F_DOCLIGNE_Ajoute_ligne()

::MessageErreurSAGE=""

Requete est chaîne = "INSERT INTO f_docligne ("+...

"do_domaine,do_type,ct_num,do_piece,dl_pieceBC,dl_pieceBL,do_date,dl_dateBC,dl_dateBL,dl_ligne,do_ref,dl_TNomencl,dl_TRemPied,dl_tremexep,ar_ref,dl_design,dl_qte,dl_qteBC,dl_qteBL,"+...

"dl_PoidsNet,dl_PoidsBrut,dl_Remise01REM_Valeur,dl_Remise01REM_Type,dl_Remise02REM_Valeur,dl_Remise02REM_Type,dl_Remise03REM_Valeur,dl_Remise03REM_Type,dl_PrixUnitaire,dl_PUBC,dl_Taxe1,"+...

"dl_TypeTaux1,dl_TypeTaxe1,dl_Taxe2,dl_TypeTaux2,dl_TypeTaxe2,re_no,ag_no1,ag_no2,dl_PrixRU,dl_CMUP,dl_MvtStock,gl_no,af_RefFourniss,eu_Enumere,eu_Qte,dl_TTC,de_no,dl_noref,"+...

"dl_TypePL,dl_PUDevise,dl_PUTTC,dl_no,do_DateLivr,ca_num,dl_Taxe3,dl_TypeTaux3,dl_TypeTaxe3,dl_Frais,dl_Valorise,ar_RefCompose,dl_NonLivre,ac_refClient,dl_MontantHT,dl_MontantTTC,"+...

"dl_FactPoids,dl_Escompte, qte_autorisee, qte_envoyee_bics"+...

") VALUES ("+...

::F_DOCLIGNE_do_domaine+","+::F_DOCLIGNE_do_type+","+:EntreCotes(::F_DOCLIGNE_ct_num)+","+:EntreCotes(::F_DOCLIGNE_do_piece)+","+...

:EntreCotes(::F_DOCLIGNE_dl_pieceBC)+","+:EntreCotes(::F_DOCLIGNE_dl_pieceBL)+","+:EntreCotes(::F_DOCLIGNE_do_date)+","+...

:EntreCotes(::F_DOCLIGNE_dl_dateBC)+","+:EntreCotes(::F_DOCLIGNE_dl_dateBL)+","+::F_DOCLIGNE_dl_ligne+","+:EntreCotes(::F_DOCLIGNE_do_ref)+","+...

::F_DOCLIGNE_dl_TNomencl+","+::F_DOCLIGNE_dl_TRemPied+","+::F_DOCLIGNE_dl_tremexep+","+:EntreCotes(::F_DOCLIGNE_ar_ref)+","+...

:EntreCotes(::F_DOCLIGNE_dl_design)+","+::F_DOCLIGNE_dl_qte+","+::F_DOCLIGNE_dl_qteBC+","+::F_DOCLIGNE_dl_qteBL+","+::F_DOCLIGNE_dl_PoidsNet+","+...

::F_DOCLIGNE_dl_PoidsBrut+","+::F_DOCLIGNE_dl_Remise01REM_Valeur+","+::F_DOCLIGNE_dl_Remise01REM_Type+","+::F_DOCLIGNE_dl_Remise02REM_Valeur+","+...

::F_DOCLIGNE_dl_Remise02REM_Type+","+::F_DOCLIGNE_dl_Remise03REM_Valeur+","+::F_DOCLIGNE_dl_Remise03REM_Type+","+::F_DOCLIGNE_dl_PrixUnitaire+","+...

::F_DOCLIGNE_dl_PUBC+","+::F_DOCLIGNE_dl_Taxe1+","+::F_DOCLIGNE_dl_TypeTaux1+","+::F_DOCLIGNE_dl_TypeTaxe1+","+::F_DOCLIGNE_dl_Taxe2+","+...

::F_DOCLIGNE_dl_TypeTaux2+","+::F_DOCLIGNE_dl_TypeTaxe2+","+::F_DOCLIGNE_re_no+","+::F_DOCLIGNE_ag_no1+","+::F_DOCLIGNE_ag_no2+","+...

::F_DOCLIGNE_dl_PrixRU+","+::F_DOCLIGNE_dl_CMUP+","+::F_DOCLIGNE_dl_MvtStock+","+::F_DOCLIGNE_gl_no+","+:EntreCotes(::F_DOCLIGNE_af_RefFourniss)+","+...

:EntreCotes(::F_DOCLIGNE_eu_Enumere)+","+::F_DOCLIGNE_eu_Qte+","+::F_DOCLIGNE_dl_TTC+","+::F_DOCLIGNE_de_no+","+::F_DOCLIGNE_dl_noref+","+...

::F_DOCLIGNE_dl_TypePL+","+::F_DOCLIGNE_dl_PUDevise+","+::F_DOCLIGNE_dl_PUTTC+","+::F_DOCLIGNE_dl_no+","+:EntreCotes(::F_DOCLIGNE_do_DateLivr)+","+...

:EntreCotes(::F_DOCLIGNE_ca_num)+","+::F_DOCLIGNE_dl_Taxe3+","+::F_DOCLIGNE_dl_TypeTaux3+","+::F_DOCLIGNE_dl_TypeTaxe3+","+...

::F_DOCLIGNE_dl_Frais+","+::F_DOCLIGNE_dl_Valorise+","+:EntreCotes(::F_DOCLIGNE_ar_RefCompose)+","+::F_DOCLIGNE_dl_NonLivre+","+...

:EntreCotes(::F_DOCLIGNE_ac_refClient)+","+::F_DOCLIGNE_dl_MontantHT+","+::F_DOCLIGNE_dl_MontantTTC+","+::F_DOCLIGNE_dl_FactPoids+","+...

::F_DOCLIGNE_dl_Escompte+","+::F_DOCLIGNE_qte_autorisee+","+::F_DOCLIGNE_qte_envoyee_bics+...

")"

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Requête AJOUT DOCLIGNE "+SQL.Erreur+" -
"+SQL.MesErreur+RC+Requete

RENVOYER Faux

FIN

SQLFerme("Query512")

SI ::TracerRequete ALORS Trace(Requete)

SI SansEspace(::F_DOCLIGNE_ar_ref)="ZPORT" ALORS RENVOYER Vrai

SELON c_SAGE::F_DOCLIGNE_do_type

CAS 1

// BON DE COMMANDE

// Réservation du stock dans le fichier F_ARTSTOCK

SI PAS SQLExec("UPDATE f_artstock SET
as_qteres=as_qteres+"+::F_DOCLIGNE_dl_qte+" WHERE
ar_ref="+:EntreCotes(::F_DOCLIGNE_ar_ref),"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Résa stock AJOUT DOCLIGNE "+SQL.Erreur+" -
"+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Query512")


CAS 2

// BON DE LIVRAISON

SI ::F_DOCLIGNE_dl_pieceBC<>"" ALORS

// Mise à jour des stocks réservés

Requete="UPDATE f_artstock SET as_qteres=as_qteres-"+::F_DOCLIGNE_dl_qte+"
WHERE ar_ref="+:EntreCotes(::F_DOCLIGNE_ar_ref)

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Supp résa stock AJOUT DOCLIGNE "+SQL.Erreur+" -
"+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Query512")

SI ::TracerRequete ALORS Trace(Requete)


// Mise à jour de la ligne de commande

// si pas sqlexec("UPDATE f_docligne SET
dl_qte=dl_qte-"+::F_DOCLIGNE_dl_qte+",
qte_envoyee_bics=qte_envoyee_bics-"+::F_DOCLIGNE_dl_qte+" WHERE
ar_ref="+:EntreCotes(::F_DOCLIGNE_ar_ref)+" AND
do_piece="+:entrecotes(::F_DOCLIGNE_dl_pieceBC),"Query512") ALORS

Requete="UPDATE f_docligne SET
dl_qte=dl_qte-"+::F_DOCLIGNE_dl_qte+",dl_qtebl=dl_qtebl-"+::F_DOCLIGNE_dl_qte+",
qte_envoyee_bics=0 WHERE ar_ref="+:EntreCotes(::F_DOCLIGNE_ar_ref)+" AND
do_piece="+:EntreCotes(::F_DOCLIGNE_dl_pieceBC)

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Supp résa stock AJOUT DOCLIGNE "+SQL.Erreur+" -
"+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Query512")


SI ::TracerRequete ALORS Trace(Requete)


// Suppression des lignes de commandes vides

Requete="DELETE FROM f_docligne WHERE dl_qte<=0 AND
do_piece="+:EntreCotes(::F_DOCLIGNE_dl_pieceBC)

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Supp lignes cdes vides AJOUT DOCLIGNE
"+SQL.Erreur+" - "+SQL.MesErreur+RC+RC+requete

RENVOYER Faux

FIN

SQLFerme("Query512")


SI ::TracerRequete ALORS Trace(Requete)


// Suppression des commandes vides

NbLignes est entier = 0

requete="SELECT count(do_piece) FROM f_docligne WHERE
do_piece="+:EntreCotes(::F_DOCLIGNE_dl_pieceBC)

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Supp lignes cdes vides AJOUT DOCLIGNE
"+SQL.Erreur+" - "+SQL.MesErreur+RC+RC+requete

RENVOYER Faux

FIN


SI ::TracerRequete ALORS Trace(Requete)


SI SQLAvance("Query512")=0 ALORS

NbLignes=Val(SQLLitCol("Query512",1))

FIN

SQLFerme("Query512")


SI NbLignes=0 ALORS

Requete="DELETE FROM f_docregl WHERE
do_piece="+:EntreCotes(::F_DOCLIGNE_dl_pieceBC)

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Supp rgl associés des cdes vides AJOUT DOCLIGNE
"+::F_DOCLIGNE_dl_pieceBC+")"+SQL.Erreur+TAB+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Query512")


SI ::TracerRequete ALORS Trace(Requete)


Requete="DELETE FROM f_docentete WHERE
do_piece="+:EntreCotes(::F_DOCLIGNE_dl_pieceBC)

SI PAS SQLExec(Requete,"Query512") ALORS

SQLInfoGene("Query512")

SI EnModeTest() ALORS

Info(SQL.Erreur+" - "+SQL.MesErreur+RC+Requete)

// stop

FIN

::MessageErreurSAGE = "Supp cde vides AJOUT DOCLIGNE
"+::F_DOCLIGNE_dl_pieceBC+")"+SQL.Erreur+TAB+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Query512")


SI ::TracerRequete ALORS Trace(Requete)

FIN

FIN

SI PAS :MAJStockArticle(::F_DOCLIGNE_ar_ref,...

c_SAGE::F_DOCLIGNE_dl_lot,...

c_SAGE::F_DOCLIGNE_dl_lotperemption,...

-::F_DOCLIGNE_dl_qte,...

c_SAGE::F_DOCLIGNE_do_piece,...

::F_DOCLIGNE_dl_no,...

Faux) ALORS

RENVOYER Faux

FIN

FIN

RENVOYER Vrai





PROCEDURE
MAJStockArticle(CodeArticle="",Lot="",DatePeremption=DateSys(),Qte=0,NumPiece="",dl_no=0,IncrementerLignePiece=Faux)

SI CodeArticle="" ALORS

::MessageErreurSAGE = "Le code article est vide"

RENVOYER Faux

FIN

//si Qte=0 alors

// ::MessageErreurSAGE = "La quantité est nulle"

// renvoyer faux

//FIN

CodeArticle=SansEspace(CodeArticle)

Lot = Remplace(SansEspace(Lot)," ","_")

LibelleArticle est chaîne

PieceTrouvee est booléen = Faux

NumLigne est un entier

SuiviStock est entier

cbmarq est entier

dl_noin est entier

Requete est une chaîne

DlMvtStock est entier

_On est chaîne

QuantiteEnCommande est réel

QuantiteEnstock est réel

QuantiteRestante est réel

SI Qte>0 ALORS

DlMvtStock=1

SINON

DlMvtStock=3

FIN

SI PAS SQLExec("SELECT ar_design,ar_suivistock FROM f_article WHERE
ar_ref="+:EntreCotes(CodeArticle),"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete verif article (stocks)
"+TAB+SQL.MesErreur

RENVOYER Faux

FIN

SI SQLAvance("Q") <> 0 ALORS

::MessageErreurSAGE="L'article "+CodeArticle+" n'existe pas"

SQLFerme("Q")

RENVOYER Faux

FIN

LibelleArticle=SQLLitCol("Q",1)

SuiviStock=Val(SQLLitCol("Q",2))

SQLFerme("Q")

SI SuiviStock=0 ALORS

::MessageErreurSAGE="Cet article n'est pas géré en stock"

RENVOYER Vrai

FIN

SI SuiviStock=5 ET Lot="" ALORS

Lot="AUCUN"

// ::MessageErreurSQL="Pas de lot alors que l'article est en suivi de lot"

// renvoyer faux

FIN

:F_DOCENTETE_raz()

SI NumPiece="" ALORS

SI Qte>=0

NumPiece=:ProchainNumPiece("MVT+")

SINON

NumPiece=:ProchainNumPiece("MVT-")

FIN


SI NumPiece="" ALORS

::MessageErreurSAGE="N° de pièce vide"

RENVOYER Faux

FIN

SINON

Requete = "SELECT de_no FROM f_docentete WHERE
do_piece="+:EntreCotes(NumPiece)

SI PAS SQLExec(Requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete recherche de_no (stocks)
"+RC+Requete+RC+SQL.MesErreur

RENVOYER Faux

FIN


SI SQLAvance("Q")= 0 ALORS

::F_DOCENTETE_de_no = Val(SQLLitCol("Q",1))


SQLFerme("Q")

PieceTrouvee=Vrai

FIN

FIN

SI ::F_DOCENTETE_de_no=0 ALORS ::F_DOCENTETE_de_no=1

::F_DOCENTETE_do_domaine=2

::F_DOCENTETE_do_piece = NumPiece

::F_DOCENTETE_do_date = DateVersChaîne(DateSys(),"JJ/MM/AA")

::F_DOCENTETE_do_ref = ""

::F_DOCENTETE_do_tiers = 1

::F_DOCENTETE_re_no=0

::F_DOCENTETE_do_transaction = 0

SI Qte>=0

::F_DOCENTETE_do_type

SINON

::F_DOCENTETE_do_type!

FIN

SI PieceTrouvee = Faux ALORS

SI PAS :F_DOCENTETE_Ajoute_ligne() ALORS

::MessageErreurSAGE="Erreur lors de l'ajout dans
DOCENTETE"+RC+::MessageErreurSAGE

RENVOYER Faux

FIN

FIN

//si enmodetest() et CodeArticle="UG32256" alors stop

SI dl_no=0 ALORS

// on recherche la correspondance entre une éventuelle ligne de DOCLIGNE et
son lot

_On = " ON f_docligne.dl_no=f_lotserie."

SI Qte>=0 ALORS

_On = _On+"dl_noin"

SINON

_On = _On+"dl_noout"

FIN

Requete = "SELECT f_docligne.dl_no, f_docligne.dl_mvtstock"+...

" FROM f_lotserie LEFT JOIN f_docligne "+...

_On+...

" WHERE f_docligne.do_piece="+:EntreCotes(NumPiece)+" AND
f_lotserie.ar_ref="+:EntreCotes(CodeArticle)+" AND
f_lotserie.ls_noserie="+:EntreCotes(lot)

SI PAS SQLExec(Requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete correspondance docligne et son lot
(stocks) "+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

SI SQLAvance("Q") = 0 ALORS

dl_no = SQLLitCol("Q",1)

DlMvtStock=SQLLitCol("Q",2)

FIN

SQLFerme("Q")

FIN

SI dl_no=0 ALORS

:F_DOCLIGNE_Raz()

::F_DOCLIGNE_dl_MvtStock = DlMvtStock

dl_no = :F_DOCLIGNE_dl_no_en_cours()+1

SI dl_no = -1 ALORS

::MessageErreurSAGE = "Impossible de récupérer le dl_no"

RENVOYER Faux

FIN

NumLigne=:F_DOCLIGNE_dl_ligne_en_cours (c_SAGE::F_DOCENTETE_do_piece)+1


SI NumLigne = -1 ALORS

::MessageErreurSAGE = "le n° de ligne est introuvable pour la pièce
"+c_SAGE::F_DOCENTETE_do_piece

RENVOYER Faux

FIN


c_SAGE::F_DOCLIGNE_dl_no = dl_no

::F_DOCLIGNE_do_domaine = 2

::F_DOCLIGNE_do_type = c_SAGE::F_DOCENTETE_do_type

::F_DOCLIGNE_ct_num = c_SAGE::F_DOCENTETE_do_tiers

::F_DOCLIGNE_do_piece = c_SAGE::F_DOCENTETE_do_piece

::F_DOCLIGNE_dl_ligne = 10000*NumLigne

::F_DOCLIGNE_do_ref = c_SAGE::F_DOCENTETE_do_ref

::F_DOCLIGNE_ar_ref = CodeArticle

::F_DOCLIGNE_dl_design = LibelleArticle

::F_DOCLIGNE_de_no = c_SAGE::F_DOCENTETE_de_no // n° de dépôt

::F_DOCLIGNE_re_no = c_SAGE::F_DOCENTETE_re_no // Représentant

// ::F_DOCLIGNE_dl_qte = Qte

// ::F_DOCLIGNE_dl_qtebc = c_SAGE::F_DOCLIGNE_dl_qte

// ::F_DOCLIGNE_dl_qtebl = c_SAGE::F_DOCLIGNE_dl_qte


SI PAS :F_DOCLIGNE_Ajoute_ligne() ALORS

::MessageErreurSAGE="ERREUR LORS DE L'AJOUT DANS
DOCLIGNE"+RC+::MessageErreurSAGE

RENVOYER Faux

FIN

FIN

SI dl_no=0 ALORS

::MessageErreurSAGE="Le dl_no est toujours vide!"

RENVOYER Faux

FIN

SI IncrementerLignePiece ALORS

QteAAjouter est réel =Abs(Qte)


Requete="UPDATE f_docligne SET
dl_qte=dl_qte+"+QteAAjouter+",dl_qteBC=dl_qteBC+"+QteAAjouter+",dl_qteBL=dl_qteBL+"+QteAAjouter+"
WHERE dl_no="+dl_no


SI PAS SQLExec(Requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete incrément pièce (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN


SQLFerme("Q")

FIN

Requete="SELECT as_qtesto-as_qteres FROM f_artstock WHERE
ar_ref="+:EntreCotes(CodeArticle)

SI PAS SQLExec(Requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete select ar_ref article (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

SI SQLAvance("Q") <> 0 ALORS

QuantiteEnCommande=SQLLitCol("Q",1)

SQLFerme("Q")

:F_ARTSTOCK_Raz()


::F_ARTSTOCK_AR_Ref = CodeArticle


SI PAS :F_ARTSTOCK_Ajoute_ligne() ALORS

::MessageErreurSAGE="ERREUR LORS DE L'AJOUT DANS
ARTSTOCK"+RC+::MessageErreurSAGE

RENVOYER Faux

FIN

FIN

SQLFerme("Q")

SELON SuiviStock

CAS 5

// Gestion par lot

:F_LOTSERIE_Raz()


::F_LOTSERIE_ar_ref = CodeArticle

::F_LOTSERIE_ls_noserie = Lot

::F_LOTSERIE_ls_peremption = DatePeremption


::F_LOTSERIE_ls_mvtstock = DlMvtStock


cbmarq=0

// On recherche si il n'y a pas déjà une entrée en stock pour cet article et
on récupère le cbmarq

Requete = "SELECT dl_noin,cbmarq FROM f_lotserie WHERE
ar_ref="+:EntreCotes(CodeArticle)+" AND ls_noserie="+:EntreCotes(Lot)+" AND
ls_mvtstock=1"

SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete verif si entrée stock (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN


SI SQLAvance("Q") = 0

dl_noin = SQLLitCol("Q",1)

cbmarq = SQLLitCol("Q",2)

FIN

SQLFerme("Q")

SI cbmarq=0

SI DlMvtStock<>1 ALORS

::MessageErreurSAGE = "Impossible de trouver le DL_NOIN pour l'article
"+CodeArticle+" - lot "+Lot+RC+"Quantité : "+Qte

SI Qte=0 ALORS

// Pas grave si pas d'entrée car le stock est nul

RENVOYER Vrai

SINON

RENVOYER Faux

FIN

FIN


::F_LOTSERIE_dl_noin = dl_no


SI PAS :F_LOTSERIE_Ajoute_ligne() ALORS

::MessageErreurSAGE="ERREUR LORS DE L'AJOUT DANS
LOTSERIE"+RC+::MessageErreurSAGE

RENVOYER Faux

FIN


Requete = "SELECT dl_noin,cbmarq FROM f_lotserie WHERE
ar_ref="+:EntreCotes(CodeArticle)+"AND ls_noserie="+:EntreCotes(Lot)+" AND
ls_mvtstock=1"


SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete dl_noin dans f_lotserie (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN


SI SQLAvance("Q") = 0

dl_noin = SQLLitCol("Q",1)

cbmarq = SQLLitCol("Q",2)

SINON

::MessageErreurSAGE = "Impossible de trouver le cbmarq pour l'article
"+CodeArticle+" - lot "+Lot

SQLFerme("Q")

RENVOYER Faux

FIN

SQLFerme("Q")

SINON

SI Qte<0

SI Qte>=0 ALORS

::F_LOTSERIE_ls_qte = Qte

SINON

::F_LOTSERIE_ls_qte = -Qte

FIN


SI DlMvtStock=1 ALORS

// Entrée

::F_LOTSERIE_dl_noin = dl_no

SINON

// Sortie

::F_LOTSERIE_dl_noin = dl_noin

::F_LOTSERIE_dl_noout = dl_no

FIN


SI PAS :F_LOTSERIE_Ajoute_ligne() ALORS

::MessageErreurSAGE="ERREUR LORS DE L'AJOUT DANS
LOTSERIE"+RC+::MessageErreurSAGE

RENVOYER Faux

FIN

FIN

FIN

SI Qte>=0 ALORS

Requete="UPDATE f_lotserie SET
ls_lotepuise=0,ls_qte=ls_qte+"+Qte+",ls_qterestant=ls_qterestant+"+Qte+"
WHERE cbmarq="+cbmarq

SINON

Requete="UPDATE f_lotserie SET
ls_lotepuise=0,ls_qterestant=ls_qterestant+"+Qte+" WHERE cbmarq="+cbmarq

FIN


// Modification de l'enregistrement

SI PAS SQLExec(Requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete modif f_lotserie (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

:F_ARTSTOCK_RecalculStock(CodeArticle,5)


AUTRE CAS

::MessageErreurSAGE="La gestion du suivi de stock "+SuiviStock+" n'a pas été
développée !"

RENVOYER Faux

FIN

RENVOYER Vrai





PROCEDURE F_ARTSTOCK_RecalculStock(CodeArt,TypeRecalcul)

// Mise à jour du stock dans F_ARTSTOCK

Requete est chaîne

QuantiteEnstock est réel

QuantiteEnCommande est réel

SI TypeRecalcul=-1

SI PAS SQLExec("SELECT ar_suivistock FROM f_article WHERE
ar_ref="+:EntreCotes(CodeArt),"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete verif article (stocks)
"+TAB+SQL.MesErreur

RENVOYER Faux

FIN

SI SQLAvance("Q") <> 0 ALORS

::MessageErreurSAGE="L'article "+CodeArt+" n'existe pas"

SQLFerme("Q")

RENVOYER Faux

FIN

TypeRecalcul=Val(SQLLitCol("Q",1))

SQLFerme("Q")

FIN

SELON TypeRecalcul

CAS 5

// Gestion de l'épuisé : remise à 0 si encore du stock

requete="UPDATE f_lotserie SET ls_lotepuise=0 WHERE
ar_ref="+:EntreCotes(CodeArt)+" AND ls_mvtstock=1 AND ls_qterestant>0"

SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete lot epuise article (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Q")

// Recherche de la quantité en stock

Requete="SELECT sum(ls_qterestant) FROM f_lotserie WHERE
ar_ref="+:EntreCotes(CodeArt)+" AND ls_mvtstock=1 AND ls_lotepuise=0"


SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete as_qtesto article (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

SI SQLAvance("Q")=0

QuantiteEnstock=SQLLitCol("Q",1)

FIN

SQLFerme("Q")


// Calcul de la quantité en commande

Requete="SELECT sum(dl_qte) FROM f_docligne WHERE do_type=1 AND
ar_ref="+:EntreCotes(CodeArt)

SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete as_qtesto article (stocks en commande)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

SI SQLAvance("Q")=0

QuantiteEnCommande=SQLLitCol("Q",1)

FIN


SQLFerme("Q")

Requete="UPDATE f_artstock SET
as_qtesto="+QuantiteEnstock+",as_qteres="+QuantiteEnCommande+" WHERE
ar_ref="+:EntreCotes(CodeArt)


SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete as_qtesto article (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN


SQLFerme("Q")

// Gestion de l'épuisé : remise à 0 si plus de stock

requete="UPDATE f_lotserie SET ls_lotepuise=1 WHERE
ar_ref="+:EntreCotes(CodeArt)+" AND ls_lotepuise=0 AND ls_mvtstock=1 AND
ls_qterestant=0"

SI PAS SQLExec(requete,"Q") ALORS

SQLInfoGene("Q")

::MessageErreurSAGE = "Erreur requete lot epuise article (stocks)
"+RC+requete+RC+SQL.MesErreur

RENVOYER Faux

FIN

SQLFerme("Q")

FIN

RENVOYER Vrai





"stéphane" <s.sgame@wanadoo.fr> a écrit dans le message de news:
43b61475$1@news.pcsoft.fr...

Bonjour,
Je suis sur un projet Windev9 effectuant des opérations sur les fichiers
d'une BD Sage L100 SQL.
Je transforme des pièces de vente de BC en BL.
Je travaille avec des articles à gammes, sérialisés et à lot.
J'effectue avec succès les opérations d'ajout et de modification sur les
fichiers.

La validité de ces opérations est vérifiée, cependant par l'intermédiaire
de Sage GESCOM, l'affichage n'est mis à jour que partiellement.
Par exemple, les numéro de lot n'apparaissent pas lorsque je consulte la
pièce transformée.

Questions:
1/ Quelqu'un peut-il m'aider ?
2/ Comment faire pour obtenir un affichage raffrachit.
3/ Dois-je utiliser les TRIGGERS ?
4/ Les requettes SQL suffisent-elles ?
5/ En SQL, la mise à jour des stock est-elle gérée par SAGE ou doit-on
gérer la ventilation du stock à travers toutes les tables les gérant ?
6/ Est-il possible de déclencher le rafraichissement des fenêtres ouvertes
dans la Gescom : par exemple la liste pièces de ventes; le statut des
pièces ...

Merci par avance à ceux qui me consacreront un peu de temps.

Vu la période, mes Meilleurs voeux à ceux qui liront ce message.