| 7 fabian, le 11 jun 2007 à 15:55:12Juste pour info, j'ai developper cette application pour mon utlisation dans mon entreprise en delphi si cela vous interesse, je vous la passe sans problème.
Sana, oui j'ai des procedure en Delphi toute faite mais elle sont assez simple, c'est du genre insert into
F_DOCENTE WHERE DO_DOMAINE=0 AND DO_TYPE=2 AND DO_PIECE='N° de piece'.
J'ai pas mal d'experience en Sage et je te conseille vivement d'utiliser le pilote ODBC, ce dernier permet non seulment de ne pas tipouiller l'integrité mais aussi via des DLL d'obtenir par exemple le prochain numero de BL dispo etc....
Ce qu'il faut savoir c'est d'abord créer l'entete de document, puis de créer les ligne de document.
Si tu passe par l'ODBC Un bon de livraison client (document des ventes) va deduire automatiquement ton stock, dans le cas des achats c'est le contraire. Répondre à fabian | 8 Olivier, le 12 jui 2007 à 23:12:16Bonjour Fabian,
Je galère pas mal dans l'utilisation du Kit ODBC de SAGE avec DELPHI. Je dois récupérer des commandes passées sur Internet pour les écrire automatiquement dans une Gescom SAGE. J'ai donc installé le kit ODBC. J'arrive à me connecter à la source ODBC exemple fournie avec le kit (bijoux) en utilisant un TADOConnection et à remplir un DBGrid avec un TADOQuery. En revanche, je n'arrive pas à utiliser les méthodes fournies par SAGE, ni par l'API (j'obtiens une erreur "-2013 dossier non ouvert"), ni par l'ActiveX (dll, j'obtiens une erreur "membre introuvable"). Or je me vois mal écrire directement dans la base (mise à jour des stocks, détection du prochain numéro de pièce, etc...). Ce que je ne comprends pas, c'est comment la librairie fait le lien avec la base de données, car si je me connecte par un TADOConnection ou par un TTable comme conseillé dans leur doc, je ne le dis pas aux méthodes...
J'aurai donc grand besoin d'aide !!
Merci pour vos conseils... Répondre à Olivier | 9 Fabain, le 13 jui 2007 à 14:59:30Salut olivier, ne t'inquiette pas d'ecrire dans la base de donnée, si tu ecrit via le KIT ODBC de sage. En effet le pilote est extremement bien fait, si par exemple tu ecrit une ligne de document dans F_DOCLIGNE, ton stock sera automatiquement implementé, tu te soucis de rien, l'integrité referentiel est assuré avec le pilote. Les problème se pose si par exemple tu ulise Sage sur un SQL serveur et qu'au lieu d'attaquer la DATABASE via le pilote ODBC tu l'attaque directement via les pilote SQL SERVEUR. Mais dans ton cas de soucis, tu sais pas te tromper...
Pour reponde a ta question de comment je fais pour trouver le prochain numero voici un exemple, pour delphi 6 ulisant les fonction du Kit ODBC
unit U_main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, CheckLst, ExtCtrls, ComCtrls, DB,
DBTables, Degradeur;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure selectpiece();
...............................
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
piece:string;
implementation
uses DMFACT;
{$R *.dfm}
function CIALDocNouvPiece(DO_Type: integer;DO_Souiche:Integer;Resultat:Pchar):smallint; stdcall; external 'cbodbc32.dll';
procedure TForm1.selectpiece();
var
resultat : Pchar;
begin
getmem(resultat,20);
CIALDocNouvPiece(0,0,resultat);
piece:=strpas(resultat);
freemem(resultat);
end;
En esperant t'avoir aider.... Bonne Vacance Répondre à Fabain | 10 Olivier, le 13 jui 2007 à 16:28:44Merci à toi... Ton code m'a permis de faire fonctionner un peu les choses.
Mais...
1/ Le resultat obtenu dans la variable "piece" n'est pas très explicite : "ÜiQ" !!
2/ Je ne comprends pas quelle connexion je dois faire avant l'appel à CIALDocNouvPiece. Par un TADOConnection ? Par un TTable ?
Merci en tout cas, grâce à toi, je commence à reprendre un peu espoir
Olivier Répondre à Olivier | 12 fabian, le 13 jui 2007 à 19:27:15Voila comment je travaille....
1. Creation d'un DSN ODBC dans le panneau de configuration.
2. Connection via un Tadoconnection (via ODBC) sur le connexion que j'ai créer.
Sage est en mono utilisateur ou multi ? La base est - elle sur un serveur ?
Si c'est la cas il te faut aussi le serveur d'appliucation Sage ainsi que client (C'est le même Exe en mode different).
Si ta base est en Mono utilisateur, et que Sage est ouvert alors tu n'arrivera pas a te connecter, faudra absolument le serveur d'application SAge (c'est une connection en même temps)
Bref tu dois pouvoir savoir tres simplement si tu arrive a te connecter a ta base avec ton Tadoconnection, tu clique sur la propriété connected et tu la mets a True, même pas besoin de compiler.
Toputefois si tu ne t'en sort pas , je te propose de t'aidder Lundi 16 Juillet via Skype, on verra bien ce qu'on peut faire. Laisse ton pseudo skype sur le formum et je prendrais contact des que j'ai 10 minutes.
Passe un Bon W-E, je suis certain qu'on va resoudre ton problème Répondre à fabian | 13 Olivier, le 14 jui 2007 à 16:38:26Merci Fabian. Finalement, je m'en suis sorti, mais pas en utilisant l'API du Kit ODBC mais l'ActiveX, que j'ai finalement tenté d'installer dans Delphi (sans que ce soit indiqué dans la doc Sage), et j'ai du coup pu accéder à un nouveau composant de type TCial et nécessitant un uses ASD100Lib_TLB. Ce composant contient toutes les propriétés décrites dans la doc du Kit ODBC. En faisant effectivement une connection avec un TADOConnection, ce composant marche. En revanche, les fonctions de l'API ne marchaient pas...
Bref, c'est bon maintenant, il ne me reste plus qu'à dérouler les étapes de création d'une nouvelle pièce commerciale en m'inspirant de ce qui est proposé dans la base Access exemple, je pense que ça devrait le faire.
En tout cas, merci à toi. J'ai comme l'impression que rares sont ceux qui ont fait tourné le kit ODBC de Sage avec Delphi.
Bonnes vacances à toi si tu en prends bientôt. Moi, encore 15 jours.
Olivier Répondre à Olivier |
| 14 fabian, le 16 jui 2007 à 15:17:49Salut olivier , ca m'interesse beaucoup de savoir comment tu as fais pour trouver cette ActiveX. Qu'elle est son nom et son emplacement....
Merci
Fabain Répondre à fabian | 15 olivier, le 16 jui 2007 à 15:37:39Salut Fabian. En fait, l'ActiveX est livré avec le kit ODBC sous la forme d'une DLL dénommée ASD100.dll et qui se trouve dans C:\WINDOWS\SYSTEM32. Pour l'installer dans Delphi, il faut lancer la fonction Projet > Importer une bibliothèque de types, cliquer sur "Ajouter", aller choisir la fameuse DLL, puis cliquer sur Installer.
Une fois cette installation faite, il y a alors dans l'onglet "ActiveX" de Delphi, de nouveaux composants Cpta, Cial, FSal, Param et PMS1 que tu peux poser sur un form, ou bien utiliser directement en les déclarant et en les créant par code (nécessite dans ce cas un Uses ASD100Lib_TLB). Exemple de ce que j'ai fait qui marche :
Uses ASD100Lib_TLB ;
var GCSage : TCial ;
sResult : string ;
begin
if Connexion_SAGE then
begin
GCSage:=TCial.Create(Nil);
sResult:=GCSage.DocNouvPiece[1,0] ;
if (GCSage.Erreur=0) then ShowMessage('='+sResult+'=') else ShowMessage('Erreur n°'+IntToStr(GCSage.Erreur)) ;
ADOSAGE.Connected:=False ;
Try GCSage.Free ; except end ;
end ;
end;
Ensuite, les différentes méthodes décrites dans la doc du kit ODBC sont accessibles par ces composants. J'avoue n'être pas allé encore jusqu'au bout de la création de commande, mais j'y travaille à partir de maintenant.
A+
Olivier Répondre à olivier |
| 16 olivier, le 18 jui 2007 à 18:06:30Salut Fabian. C'est encore moi. ça y'est, j'arrive à créer des documents (en-têtes et lignes). Tout se passe donc plutôt pas trop mal. Sauf qu'ensuite, la gestion commerciale SAGE qui est mono user, considère que j'y suis encore connecté, alors que j'ai bien déconnecté mon TADOConnection. J'ai tenté de faire un Disconnect, mais cela ne change rien. Il semble que la table cbUserSession (visible dans SQL Server) contient encore des enregistrements, que je pourrais éventuellement supprimer à la hussarde, sauf que le kit ODBC Sage ne me donne pas accès à cette table. J'envisage de le faire par un accès direct à SQL Server, mais aurais tu une solution plus "propre" ?
Merci.
A+
Olivier Répondre à olivier |
| 17 Fabian, le 20 jui 2007 à 10:02:47Plus propre non , moi je fais
TADOCONNECTION.CONNECTED:=False;
Et capasse.
Mais je travaille en Multi-utilisateurs.....
A propos il cherche des collaborateurs dans ta boite, car la mienne ici ca comence a craindre grave Répondre à Fabian | 18 olivier, le 20 jui 2007 à 11:19:10Finalement, j'ai fait la suppression "à la hussarde" des enregistrements de la table cbUserSession, et ça passe... Bon, c'est pas très orthodoxe mais tant pis.
Pour le boulot, qu'est-ce que tu cherches ? Tu es en région parisienne ?
A+
Olivier Répondre à olivier |
|
|
|
|
| 11 Olivier, le 13 jui 2007 à 17:25:55En fait - c'est encore moi - je ne plante pas mais j'ai toujours une erreur "-2013" documentée dans le manuel Sage comme "dossier non ouvert". J'ai donc très clairement un pb de connexion à la base.... Comment la fais-tu ? Répondre à Olivier |
| 19 Tanya, le 27 jui 2007 à 23:30:00Tu dois avoir un problème de DLL pas compatible le msjet40.dll Répondre à Tanya |
|
|
|