La version 8.5 de Mercator apporte ces nouvelles fonctionnalités au niveau de la gestion des soldes et promotions ("Outils > Remises") :
- notion de pied : les lignes de remise peuvent ainsi être groupées et gérées de façon distincte, par groupe partageant un même "pied" (par exemple, cela permet de gérer les folders publicitaires)
- mise en place de ce concept au niveau des achats (remises fournisseurs)
- gestion des remises 2 à 4
- possibilité d'importer les articles avec le terminal portable ou Excel
- possibilité de recherche de lignes, dans n'importe quelle colonne, via clic-droit dans la grille ou via le bouton "Rechercher" présent dans le bas de l'écran.
Pour disposer de ces nouvelles fonctionnalités, il faut
Une fois l'interface complète activée, le menu "Outils > Remises" montre une liste de pieds (entêtes) de remises. Une nouvelle ligne peut être ajoutée via le bouton "Ajouter Ligne". Pour éditer les remises de cette ligne, il suffit de double-cliquer sur celle-ci. Dans l'écran de liste des remises, l'ordre des lignes peut être changé aisément par simple déplacement effectué avec la souris. L'ordre des lignes dans cette grille est essentiel dans la mesure où il détermine aussi l'ordre des lignes qui sera pris en compte lors de l'application des remises dans les documents de la gestion commerciale.
L'onglet de pied contient par défaut une zone permettant de sélectionner le client/fournisseur. Cette zone est optionnelle. Si elle est complétée, alors les colonnes relatives aux clients/fournisseurs (client/fournisseur, catégorie de clients/fournisseurs, tarif) sont masquées dans le second onglet. Cela permet, par exemple, d'encoder un jeu de remises propre à un fournisseur.
Il est possible d'ajouter des zones supplémentaires dans le premier onglet de l'écran des remises. Cela peut être fait avec un customizer tel que celui-ci. L'exemple est fait pour un champ INFO de type char(50) ajouté dans la table BAREMESV_PIEDS.
alter table BAREMESV_PIEDS add INFO char(50) not null default ''
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
namespace Gescom
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer
{
public void FormLoadCustomize(Form WindowsForm)
{
if (WindowsForm is MercatorUi.Forms.Gescom.GescomAllowancesForm)
{
MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm = (MercatorUi.Forms.Gescom.GescomAllowancesForm)WindowsForm;
if ((gescomAllowancesForm.TabControl != null) // TabControl est null si on est en gestion simplifiée
&& (gescomAllowancesForm.TypeVA == MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V)) // uniquement pour les remises clients
{
MercatorUi._BaseClasses.MercatorLabelX labelInfo = new MercatorUi._BaseClasses.MercatorLabelX();
labelInfo.BackgroundStyle.Class = "";
labelInfo.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
labelInfo.Location = new System.Drawing.Point(9, 130);
labelInfo.Size = new System.Drawing.Size(80, 23);
labelInfo.TabIndex = 8;
labelInfo.Text = "Info :";
labelInfo.TextAlignment = System.Drawing.StringAlignment.Far;
MercatorUi._BaseClasses.BindableTextBox bindableTextBoxInfo = new MercatorUi._BaseClasses.BindableTextBox();
bindableTextBoxInfo.Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right);
bindableTextBoxInfo.Border.Class = "TextBoxBorder";
bindableTextBoxInfo.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
bindableTextBoxInfo.Location = new System.Drawing.Point(109, 132);
bindableTextBoxInfo.Size = new System.Drawing.Size(398, 20);
bindableTextBoxInfo.Source = "info"; // nom de la colonne ajoutée dans la table BAREMESV_PIEDS
bindableTextBoxInfo.TabIndex = 9;
bindableTextBoxInfo.MaxLength = 50;
gescomAllowancesForm.TabControl.TabPages[0].Controls.AddRange(new Control[2] { labelInfo, bindableTextBoxInfo });
}
}
}
}
}
Si on souhaite gérer les remises 2 à 4, il suffit d'ajouter ces champs :
- pour les remises sur vente : REMISE2, REMISE3, REMISE4 : float dans la table BAREMES
alter table BAREMES add REMISE2 float not null default 0
alter table BAREMES add REMISE3 float not null default 0
alter table BAREMES add REMISE4 float not null default 0
- pour les remises sur achat : REMISE2, REMISE3, REMISE4 : float dans la table BAREMESA
alter table BAREMESA add REMISE2 float not null default 0
alter table BAREMESA add REMISE3 float not null default 0
alter table BAREMESA add REMISE4 float not null default 0
La prise en compte de ces champs optionnels au niveau des ventes ne requiert pas de passer en mode "complet". Seuls les champs réellement nécessaires peuvent être ajoutés.
Remarques :
- La table BAREMESV_PIEDS est ajoutée automatiquement lorsqu'on rentre pour la première fois dans la fonctionnalité "Remises Clients" en mode complet. En Aruba, cela requiert un accès exclusif à la base de données parce que le champ ID_PIED est aussi ajouté dans la table BAREME. Dès lors, tous les autres utilisateurs devront quitter le programme. (En Majuro, cette exigence n'existe pas).
- Les tables BAREMESA et BAREMESA_PIEDS sont créées automatiquement lorsqu'on rentre pour la première fois dans la fonctionnalité "Remises Fournisseurs".
- En Aruba, les tables BAREMESV_PIEDS, BAREMESA et BAREMESA_PIEDS ne sont pas créées en DBF. Cela veut dire que leur contenu sera perdu si on effectue une "démigration" vers DBF.
- Le passage du mode "complet" vers le mode "normal" a pour conséquence que toutes les informations de pieds sont définitivement perdues et que toutes les lignes de remises sont à nouveau regroupées.
- Le champ INTITULE de la table BAREMES peut être allongé mais il doit toujours avoir la même longueur que ce même champ dans BAREMESV_PIEDS.
Idem pour BAREMEA - BAREMESA_PIEDS.
Exemple d'application : Gérer des prix d'achat différents en fonction du dépôt
Depuis la version 8.5.314 de MercatorUi.dll, ces champs de la table BAREMES - BAREMESA peuvent être ajoutés dans la table des pieds de remises (BAREMESV_PIEDS et BAREMESA_PIEDS) :
- Tarif : TARIF smallint (uniquement pour les remises sur ventes)
alter table BAREMESV_PIEDS add TARIF smallint not null default 0
- Catégories : respectivement ID_CAT_CLI ou ID_CAT_FOU char(12)
alter table BAREMESV_PIEDS add ID_CAT_CLI CHAR(12) not null default ''
alter table BAREMESA_PIEDS add ID_CAT_FOU CHAR(12) not null default ''
- Dépôt : ID_DEPOT char(10)
alter table BAREMESV_PIEDS add ID_DEPOT CHAR(10) not null default ''
alter table BAREMESA_PIEDS add ID_DEPOT CHAR(10) not null default ''
Une fois ces champs ajoutés dans la base de données, les contrôles correspondant apparaissent automatiquement dans le premier onglet de l'écran des remises. Dès qu'un de ces contrôles contient une information non vide, la ou les colonnes associées sont masquées dans le second onglet.
Le code ci-dessous montre comment ne pas copier la valeur d'un champ de pied (dans cet exemple "remise") vers les lignes, si sa valeur est égale à zéro.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using MercatorExtensions;
// <CompileWithRoslyn />
namespace Gescom
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.IFormClosedCustomizer
{
public void FormLoadCustomize(Form form)
{
if (form is MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm)
gescomAllowancesForm.MergingDataRows += GescomAllowancesForm_MergingDataRows;
}
public void FormClosedCustomize(Form form)
{
if (form is MercatorUi.Forms.Gescom.GescomAllowancesForm gescomAllowancesForm)
gescomAllowancesForm.MergingDataRows -= GescomAllowancesForm_MergingDataRows;
}
private void GescomAllowancesForm_MergingDataRows(object sender, MercatorUi.Forms.Gescom.GescomAllowancesForm.MergingDataRowsEventArgs e)
{
if (Convert.ToDouble(e.DataRowPied["remise"]).CompareTo(0d, 2) == 0)
e.ColumnsToIgnore = new string[1] { "remise" };
}
}
}
Informations complémentaires :