
DocteurClick
|
En fait, j'ai fini par résoudre mes problèmes : je devait en fait modifier des documents en les transformant et je n'avait pas rempli tous les champs obligatoires ... Par exemple,transformer un Bon de Commande en Bon de Livraison. J'utilise donc une base ODBC et j'ai ajouter les tables F_ARTICLES,F_DOCENTETE et F_DOCLIGNE ... Or, comme je suis novice dans ce domaine, je ne sais pas d'ou vient l'erreur qui t'embète ... je suis désolé mais je crain de ne pouvoir t'aider ... :-( Merci d'avoir lu mon message quand meme. voilà le code que j'utilise pour modifier les documents (si tu veu t'en inspirer ... 'Code de transformation de Document Dim L As Long L = 0 Dim i As Integer Dim pb As Boolean pb = False
'On remet la table temporaire à zéro : qExe = "DELETE * FROM TblListDocTmp;" BaseMdb.Execute (qExe)
'Je récupère dans TblListDocTmp les informations sur les documents et les articles des documents précédants suivant le domaine : qExe = "INSERT INTO TblListDocTmp (Piece,Code,Design,Qte,PU,[Date],[DteLivr],Client) SELECT F_DOCENTETE.DO_PIECE,F_DOCLIGNE.AR_REF,F_DOCLIGNE.DL_DESIGN,F_DOCLIGNE.DL_QTE,F_DOCLIGNE.DL_PRIXUNITAIRE,F_DOCENTETE.DO_DATE,F_DOCENTETE.DO_DATELIVR,F_DOCENTETE.DO_TIERS FROM F_DOCENTETE INNER JOIN F_DOCLIGNE ON (F_DOCENTETE.DO_DOMAINE=F_DOCLIGNE.DO_DOMAINE) AND (F_DOCENTETE.DO_TYPE=F_DOCLIGNE.DO_TYPE) AND (F_DOCENTETE.DO_PIECE=F_DOCLIGNE.DO_PIECE) WHERE ((F_DOCLIGNE.DO_DOMAINE=" & DomDoc & ")) AND ((F_DOCLIGNE.DO_TYPE=" & TypDoc & ")) AND ((F_DOCENTETE.DO_PIECE='" & NoPiece & "')) ORDER BY F_DOCLIGNE.AR_REF;" BaseMdb.Execute (qExe) 'Création de l'entête du nouveau document :
Select Case DomDoc Case 2 'Document de stock qExe = "INSERT INTO F_DOCENTETE (DO_DOMAINE, DO_TYPE, DO_PIECE, DO_DATE, DE_NO, DO_TIERS, DO_REF) SELECT " & DomDoc & "," & NouvTypDoc & ",'" & NouvRefPiece & "', DO_DATE,DE_NO,DO_TIERS,DO_REF FROM F_DOCENTETE WHERE DO_PIECE='" & NoPiece & "';" BaseMdb.Execute (qExe) Case Else 'ou autre document (vente, achat) qExe = "INSERT INTO F_DOCENTETE (DO_DOMAINE,DO_TYPE,DO_PIECE,DO_DATE,DE_NO,DO_TIERS,CT_NUMPAYEUR,DO_EXPEDIT,DO_CONDITION,DO_TARIF,DO_TYPECOLIS,N_CATCOMPTA,CG_NUM,DO_STATUT,DO_BLFACT,DO_PERIOD,LI_NO,DO_DATELIVR,RE_NO,DO_REF) SELECT " & DomDoc & "," & NouvTypDoc & ",'" & NouvRefPiece & "', DO_DATE,DE_NO,DO_TIERS,CT_NUMPAYEUR,DO_EXPEDIT,DO_CONDITION,DO_TARIF,DO_TYPECOLIS,N_CATCOMPTA,CG_NUM,DO_STATUT,DO_BLFACT,DO_PERIOD,LI_NO,DO_DATELIVR,RE_NO,DO_REF FROM F_DOCENTETE WHERE DO_PIECE='" & NoPiece & "';" BaseMdb.Execute (qExe) End Select
'Je recopie tous les articles du document précédant pour les utiliser dans le nouveau document : qSql = "SELECT * From TblListDocTmp;" Set RSArt = BaseMdb.OpenRecordset(qSql, dbOpenDynaset) qSql = "SELECT F_ARTICLE.AR_REF As [Code],F_ARTICLE.AR_SUIVISTOCK As [Suivi] From F_ARTICLE;" Set RSSerie = BaseMdb.OpenRecordset(qSql, dbOpenSnapshot) qSql = "SELECT F_ARTSTOCK.AR_REF As [Code],F_ARTSTOCK.AS_QTESTO As [Qte],F_ARTSTOCK.AS_QTERES As [QteR],F_ARTSTOCK.DE_NO as [No] From F_ARTSTOCK;" Set RSQteR = BaseMdb.OpenRecordset(qSql, dbOpenSnapshot) UpdateRSArt 'Insertion des articles dans le nouveau document : If Not RSArt.EOF Then RSArt.MoveLast RSArt.MoveFirst For i = 1 To RSArt.RecordCount L = L + 1 If ((RSArt("Suivi") = 1) Or (RSArt("Suivi") = 3)) Then NumSerie = "NS" & Mid(RSArt("Code"), 2) & (100 * i) End If 'If RSArt("Qte") > RSArt("QteR") Then 'Il n'y as plus assez de quantité en stock pour l'article en cours de traitement ' Msg = "Il n'y a plus assez d'articles en stock pour cette référence : " & RSArt("Code") & Chr(13) & "Quantité demandée : " & RSArt("Qte") & Chr(13) & "Quantité réelle en stock : " & RSArt("QteR") ' Style = vbOKOnly + vbCritical + vbDefaultButton1 ' Title = "Stock insufisant !" ' Rep = MsgBox(Msg, Style, Title) ' pb = True 'End If If Not pb Then Select Case DomDoc 'On effectue en fait une commande SQL différente suivant le domaine du document Case 2 'Si c'est un document de stock, alors on effectue cette requète qExe = "INSERT INTO F_DOCLIGNE (DL_MVTSTOCK,DE_NO,DO_DOMAINE,DO_TYPE,CT_NUM,DO_PIECE,DL_LIGNE,AR_REF,EU_QTE,DL_VALORISE,DL_PRIXUNITAIRE,DL_QTE,DO_DATE,DL_DESIGN,DL_NO,LS_NOSERIE) VALUES (" & MvtStock & ",1," & DomDoc & "," & NouvTypDoc & ",'" & RSArt("Client") & "','" & NouvRefPiece & "'," & L & ",'" & RSArt("Code") & "'," & RSArt("Qte") & ",1," & MontantToMontantSql(RSArt("PU")) & "," & RSArt("Qte") & "," & DateStrToDateSql(Format(RSArt("Date"), "dd/mm/yy")) & ",'" & RSArt("Design") & "',0,'" & NumSerie & "');" BaseMdb.Execute (qExe) Case Else 'Si c'est un autre document (vente,achat), on effectue cette requète. qExe = "INSERT INTO F_DOCLIGNE (DL_MVTSTOCK,DE_NO,DO_DOMAINE,DO_TYPE,CT_NUM,DO_PIECE,DL_LIGNE,AR_REF,EU_QTE,DL_VALORISE,DL_PRIXUNITAIRE,DL_QTE,DO_DATELIVR,DO_DATE,DL_DESIGN,DO_REF,DL_DATEBL,DL_NO,LS_NOSERIE) VALUES (" & MvtStock & ",1," & DomDoc & "," & NouvTypDoc & ",'" & RSArt("Client") & "','" & NouvRefPiece & "'," & L & ",'" & RSArt("Code") & "'," & RSArt("Qte") & ",1," & MontantToMontantSql(RSArt("PU")) & "," & RSArt("Qte") & "," & DateStrToDateSql(Format(RSArt("DteLivr"), "dd/mm/yy")) & "," & DateStrToDateSql(Format(RSArt("Date"), "dd/mm/yy")) & ",'" & RSArt("Design") & "','essais ODBC'," & DateStrToDateSql(Format(RSArt("Date"), "dd/mm/yy")) & ",0,'" & NumSerie & "');" BaseMdb.Execute (qExe) End Select End If RSArt.MoveNext Next i End If RSArt.Close 'Message d'avertissement pour l'utilisateur : on efface l'original du document. If Not pb Then Msg = "ATTENTION ! Le document original doit être effacé aprés la transformation." & Chr(13) & "Souhaitez-vous effacer le document " & NoPiece & " aprés avoir créer le document " & NouvRefPiece & " ?" Style = vbYesNo + vbExclamation + vbDefaultButton1 Title = "Avertissement !" Rep = MsgBox(Msg, Style, Title) If Rep = vbNo Then Exit Sub End If If Rep = vbYes Then 'Traitement d'effecement des données du document original qExe = "DELETE * FROM F_DOCLIGNE WHERE (F_DOCLIGNE.DO_PIECE='" & NoPiece & "') AND (F_DOCLIGNE.DO_DOMAINE=" & DomDoc & ") AND (F_DOCLIGNE.DO_TYPE=" & TypDoc & ");" BaseMdb.Execute (qExe) qExe = "DELETE * FROM F_DOCENTETE WHERE (F_DOCENTETE.DO_PIECE='" & NoPiece & "') AND (F_DOCENTETE.DO_DOMAINE=" & DomDoc & ") AND (F_DOCENTETE.DO_TYPE=" & TypDoc & ");" BaseMdb.Execute (qExe) End If End If
avant d'utiliser la base on doit faire : DoEvents CompacteDataBase ChemBase, True, True DoEvents Set BaseMdb = OpenDatabase(ChemBase, False, False) DoEvents
@+ et bonne chance pour la résolution de ton problème.
|