Sage est un système de solutions de gestion et d’automatisation pour les petites et moyennes entreprises. Il est utilisé dans des secteurs tels que la comptabilité, la paie, la fabrication, la distribution, la vente, l’éducation et la finance. Sage propose de nombreux produits logiciels qui peuvent être classés par taille d’entreprise, secteur d’activité et besoins de l’entreprise. Les logiciels Sage incluent des solutions logicielles financières, des systèmes CRM, des solutions RH et des systèmes ERP. Creusons un peu plus l’un d’eux.
Sage Evolution
Sage Evolution est un système ERP qui offre une solution complète de gestion d’entreprise, permettant de contrôler la situation financière, ainsi que les relations avec les clients, les fournisseurs et les employés. Tous les composants et modules développés dans le cadre du Sage Evolution Framework sont entièrement intégrés et possèdent une interface commune.
Comment cela peut être utilisé
Nous avons utilisé Sage Evolution ERP lors de la réalisation d’un projet où nous devions créer/modifier des bons de commande, des clients et des inventaires, en synchronisant Sage ERP avec un autre ERP. Sage Evolution ne fonctionne que sur le système d’exploitation Windows. MS SQL Server est utilisé comme SGBD. Et bien que vous puissiez vous connecter directement à la base de données Sage Evolution, il est préférable d’interagir via le SDK Sage Pastel car c’est plus pratique et garantit l’intégrité des données.
Le SDK Sage Evolution est conditionné sous forme d’assembly Microsoft .NET et constitue la plateforme idéale pour utiliser le Framework .NET. Mais l’intégration via COM est possible en utilisant uniquement des langages tels que Visual Basic, C++ et Delphi.
Nous avons utilisé le SDK Sage pour synchroniser les clients, les produits, les transactions et les données des entrepôts d’une entreprise avec un autre système. Voyons comment vous pouvez procéder exactement.
Utilisation du SDK Sage
Pour commencer, assurez-vous d’utiliser les mêmes versions de Sage SDK et de Sage Evolution. Ainsi, si vous utilisez Sage Evolution 7.00.210, utilisez le SDK Sage 7.00.120.
De plus, rappelez-vous que vous avez besoin d’une licence développeur (numéro de série et code d’autorisation) pour utiliser le SDK Sage.
Maintenant que vous êtes prêt, passons aux exemples concrets.
1. Connexion à la base de données
Tout d’abord, vous devez vous connecter à la base de données. Nous avons deux bases de données : la base de données de l’entreprise/du client qui contient les données relatives à l’entreprise/au client et la base de données commune qui contient les informations d’enregistrement. Nous nous connectons dans cet ordre :
DatabafseContext.CreateCommonDBConnection(server, commonDatabase, String.Empty, String.Empty, true);
DatabaseContext.SetLicense(serialNumber, authKey);
DatabaseContext.CreateConnection(server, companyDatabase, login, password, true);
Ensuite, nous écrivons des requêtes à la base de données pour obtenir les sélections nécessaires.
2. Clients
Par exemple, voici une requête pour tous les clients, dont la date de création/modification est plus récente que la date de mise à jour :
string criteria = $"Client_dModifiedDate > '{updatedDate}'";
var customers = Customer.List(criteria);
foreach (DataRow matchP in customers.Rows) {
Customer customer = new Customer(matchP["Account"].ToString());
}
Il est préférable d’envoyer la date au format yyyy-MM-dd HH : mm : ss.fff, afin d’éviter l’erreur « SQL Server : datetime out of range error ».
Vous pouvez trouver un client par son code. S’il n’y a pas de client, la méthode renverra null.
Par exemple :
Customer searchCustomer = Customer.GetByCode(code);
Vous pouvez également mettre à jour les champs d’un client :
Customer customer = Customer.GetByCode(item.code);
customer.Description = item.name;
customer.Telephone = item.telephone;
customer.IsOnHold = item.status;
customer.Save();
3. Produits
Nous synchronisons maintenant l’Inventaire. Le SDK Sage a une Branche (Entreprise) par défaut Mondiale (BranchId = 0), mais il peut y avoir d’autres Branches.
Par exemple, nous pouvons sélectionner des produits pour une Branche spécifique :
var criteria = $"StkItem_iBranchID = {branchId}";
var inventories = InventoryItem.List(criteria);
foreach (DataRow matchP in inventories.Rows) {
InventoryItem inventory = new InventoryItem((Int32)matchP["StockLink"]);
}
Les produits ont un prix/ et nous pouvons obtenir à la fois les prix individuels (SellingPrice1, SellingPrice2 et SellingPrice3) et la collection SellingPrices. En termes de temps, l’obtention des prix pour certains produits peut prendre quelques secondes ou jusqu’à 5 à 10 minutes.
Par exemple, l’obtention du prix d’un produit depuis un entrepôt se présente comme suit :
SellingPriceCollection sellingPrices = inventory.SellingPrices;
double sellingPrice = 0;
foreach (SellingPrice sp in sellingPrices) {
if (sp.Warehouse != null && sp.Warehouse.Code.Equals(defaultWarehouse)) {
sellingPrice = sp.PriceIncl;
break;
}
}
4. Transactions
Nous synchronisons maintenant la Commande Client. Via le SDK Sage, nous pouvons recevoir des transactions non traitées, traitées et archivées.
Par exemple, obtenir une Commande Client traitée, DocState = 3 (Partiellement traitée) :
var criteria = $"DocState = {3} ORDER BY Client_dModifiedDate";
var orders = SalesOrder.List(criteria);
foreach (DataRow matchP in orders.Rows) {
SalesOrder order = new SalesOrder((Int32)matchP["AutoIndex"]);
}
Obtenir les transactions archivées :
var criteria = $"DocState = {4} ORDER BY Client_dModifiedDate";
var orders = SalesOrder.ListArchived(criteria);
Trouver une transaction par numéro de commande :
var order = SalesOrder.List("ordernum = 'searchOrder'");
Lors de la modification des transactions, vous pouvez modifier divers champs, y compris le numéro de commande, le client et les détails. Vous pouvez définir l’entrepôt de la manière suivante :
var order = new SalesOrder(id);
order.Customer = Customer.GetByCode(customerCode);
order.OrderNo = orderNumber;
order.Detail[i].InventoryItem = inventory;
order.Detail[i].Quantity = item.deals[i].sales_quantity;
order.Detail[i].Warehouse = warehouse;
order.Save();
5. Entrepôts
Nous avons utilisé InventoryTransaction pour détecter le nombre de pièces déplacées entre les entrepôts :
var criteria = $"PostST_dModifiedDate > '{updatedDate}'";
var inventories = InventoryTransaction.List(criteria);
foreach (DataRow matchP in inventories.Rows) {
InventoryItem inventoryItem = new InventoryItem((Int32)matchP["AccountLink"]);
Warehouse warehouse = new Warehouse((Int32)matchP["WarehouseID"]);
WarehouseContext context = new WarehouseContext(inventoryItem, warehouse);
double warehouseQuantity = context.QtyOnHand;
}
Alors, faut-il opter pour le SDK Sage ?
Il est plus facile d’utiliser le SDK Sage que de comprendre toute la base de données avec toutes ses relations. De plus, l’utilisation du SDK Sage garantit l’intégrité des données.
Mais tout de même, l’utilisation du SDK Sage conduit à écrire des requêtes qui ne sont pas du SQL pur et des champs qui ne correspondent pas aux champs du SDK Sage. Cela implique que vous devez obtenir une liste de tous les champs pour comprendre quels champs sélectionner. De plus, si quelqu’un a ouvert une commande pour la visualiser dans l’interface Sage, vous ne pouvez pas modifier cette commande via le SDK Sage ou l’interface Sage. Cela signifie que vous ne pouvez pas travailler en parallèle.
Dans l’ensemble, le SDK Sage offre aux développeurs tiers un accès aux entités de la base de données Sage. Il existe également une documentation du SDK Sage. C’est pourquoi nous recommandons d’utiliser le SDK Sage pour gagner du temps et assurer l’intégrité des données.
Découvrez comment nous avons étendu un logiciel ERP open source avec de nouvelles fonctionnalités
