Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Gestion de stock
Auteur Message
Répondre en citant
Message Gestion de stock 
Bonjour,

Voici un utilitaire basique de gestion d'un stock personnel.
Les données sont enregistrés dans un simple fichier au lieu d'une base de donnée sql pour permettre son fonctionnement en mode déconnecté.

Évidemment vous devez ajouter des pièces à votre stock pour pouvoir commencer à l'utiliser.

Code:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <GuiTab.au3>

#region initialisation
Global $src = "\\serveur\dernière version du fichier pour la fonction de mise à jour sur reseaux local.exe", $data_edit1, $l, $search, $l_piece
Global $data_def_name = "stock personnel - data.csv"
Global $def_data_1 = @UserProfileDir & "\" & $data_def_name, $def_data, $reg_def_data = "data_path"
Global $key = "HKEY_USERS\.DEFAULT\Software\stock personnel\chemin du fichier de donnée"
#endregion initialisation
#region déclaration des interfaces
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Gestion du stock personnel", 690, 435)
$touche1 = GUICtrlCreateButton("", -100, -100, 20, 20)
$Button7 = GUICtrlCreateButton("Configuration", 570, 5, 100, 25)
$Tab1 = GUICtrlCreateTab(0, 24, 689, 337)
$TabSheet1 = GUICtrlCreateTabItem("Piece")
$Group1 = GUICtrlCreateGroup("Référence", 8, 56, 673, 49)
$Input1 = GUICtrlCreateInput("", 16, 72, 201, 21)
GUICtrlSetTip(-1, "Le caractère * ou % est pris en charge")
$Button1 = GUICtrlCreateButton("Afficher", 230, 72, 100, 25)
$Button2 = GUICtrlCreateButton("Créer", 340, 72, 100, 25)
$Button3 = GUICtrlCreateButton("Modifier", 450, 72, 100, 25)
$Button4 = GUICtrlCreateButton("Supprimer", 560, 72, 100, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("Description", 8, 112, 57, 17)
$Edit2 = GUICtrlCreateEdit("", 80, 112, 601, 89)
$Label2 = GUICtrlCreateLabel("Catégorie", 8, 208, 49, 17)
$Input2 = GUICtrlCreateInput("", 80, 208, 601, 21)
$Label3 = GUICtrlCreateLabel("Emplacement", 8, 232, 68, 17)
$Input3 = GUICtrlCreateInput("", 80, 232, 601, 21)
$Label4 = GUICtrlCreateLabel("Quantité", 8, 256, 44, 17)
$Input4 = GUICtrlCreateInput("", 80, 256, 601, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
$Label5 = GUICtrlCreateLabel("Info", 8, 280, 22, 17)
$Edit3 = GUICtrlCreateEdit("", 80, 280, 601, 73)
$TabSheet2 = GUICtrlCreateTabItem("Recherche")
$Input5 = GUICtrlCreateInput("", 8, 56, 185, 21)
$Checkbox1 = GUICtrlCreateCheckbox("Recherche exacte", 8, 88, 121, 17)
$Label6 = GUICtrlCreateLabel("Dans", 152, 88, 29, 17)
$List2 = GUICtrlCreateList("", 200, 56, 153, 97, BitOR($GUI_SS_DEFAULT_LIST, $LBS_MULTIPLESEL))
GUICtrlSetData(-1, "Référence|Description|Catégorie|Emplacement|Quantité|Info")
$Button5 = GUICtrlCreateButton("Actualiser", 376, 88, 121, 25)
$Button6 = GUICtrlCreateButton("Afficher", 520, 88, 121, 25)
$List1 = GUICtrlCreateListView("Référence|Description|Catégorie|Emplacement|Quantité|Info", 8, 160, 673, 188, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS))
GUICtrlCreateTabItem("")
$Edit1 = GUICtrlCreateEdit("", 0, 360, 689, 73)
Local $AccelKeys[2][2] = [["{enter}", $touche1],["{^r}", $touche1]]
GUISetAccelerators($AccelKeys)
GUISetState(@SW_HIDE)
#endregion ### END Koda GUI section ###
#region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Mise à jours", 192, 39)
$Label21 = GUICtrlCreateLabel("Mise à jours ...", 0, 0, 188, 36)
GUICtrlSetFont(-1, 20, 800, 0, "MS Sans Serif")
GUISetState(@SW_HIDE)
#endregion ### END Koda GUI section ###
#region ### START Koda GUI section ### Form=
$Form3 = GUICreate("Configuration", 424, 88)
$Label31 = GUICtrlCreateLabel("Emplacement des fichiers de donnée", 8, 8, 178, 17)
$Input31 = GUICtrlCreateInput("Input1", 192, 8, 177, 21)
$Button31 = GUICtrlCreateButton("...", 376, 8, 41, 25)
$Button32 = GUICtrlCreateButton("OK", 272, 48, 137, 25)
$Button33 = GUICtrlCreateButton("Réinitialiser la configuration", 8, 48, 249, 25)
GUISetState(@SW_HIDE)
#endregion ### END Koda GUI section ###
#endregion déclaration des interfaces

#region initialisation
;SECTION MAJ
$src_name = StringSplit($src, "\")
$src_name = $src_name[$src_name[0]]
If @ScriptDir = @AppDataCommonDir Then
   GUISetState(@SW_SHOW, $Form2)
   If FileCopy($src, $CmdLine[1] & "\", 1) = 0 Then
      MsgBox(16, "Erreur", "Echec de la copie du nouveau fichier.")
      Exit
   EndIf
   If FileMove($CmdLine[1] & "\" & $src_name, $CmdLine[1] & "\" & @ScriptName, 1) = 0 Then
      Sleep(3000)
      If FileMove($CmdLine[1] & "\" & $src_name, $CmdLine[1] & "\" & @ScriptName, 1) = 0 Then
         Sleep(4000)
         If FileMove($CmdLine[1] & "\" & $src_name, $CmdLine[1] & "\" & @ScriptName, 1) = 0 Then
            MsgBox(48, "Erreur", "Echec de renommage du fichier.", 6)
            If Run($CmdLine[1] & "\" & $src_name & " 1") = 0 Then MsgBox(16, "Erreur", "Echec d'éxecution du nouveau fichier." & @CRLF & "Si vous exécutez le programme depuis internet, veuillez réessayer en enregistrant le programme.")
            Exit
         EndIf
      EndIf
   EndIf
   If Run($CmdLine[1] & "\" & @ScriptName & " 1") = 0 Then MsgBox(16, "Erreur", "Echec d'éxecution du nouveau fichier." & @CRLF & "Si vous exécutez le programme depuis internet, veuillez réessayer en enregistrant le programme.")
   Exit
EndIf
FileDelete(@AppDataCommonDir & "\" & @ScriptName)
If FileExists($src) Then
   $time_1 = FileGetTime($src, 0, 1)
   ;if $time_1 = 0 Then MsgBox(48,"Erreur","impossible de récupérer les informations de mise à jours.")
   $time_2 = FileGetTime(@ScriptFullPath, 0, 1)
   If $time_1 <> $time_2 And StringRight(@ScriptName, 4) = ".exe" And $time_1 <> 0 Then
      GUISetState(@SW_SHOW, $Form2)
      If FileCopy(@ScriptFullPath, @AppDataCommonDir & "\", 1) = 0 Then MsgBox(16, "Erreur", "Echec d'autocopie")
      If Run(@AppDataCommonDir & "\" & @ScriptName & ' "' & @ScriptDir & '"', @AppDataCommonDir) = 0 Then MsgBox(16, "Erreur", "Echec d'execution")
      Exit
   EndIf
EndIf
If $CmdLine[0] = 1 Then
   ;if $CmdLine[1] = 1 then MsgBox(64,"","Votre programme à été mis à jours")
EndIf
;SECTION MAJ
GUICtrlSetData($Input31, $def_data_1)
_charger_config($Input31)
GUISetState(@SW_SHOW, $Form1)
#endregion initialisation
While 1
   $nMsg = GUIGetMsg(1)
   Switch $nMsg[0]
      Case $GUI_EVENT_CLOSE, $Button32
         If $nMsg[1] = $Form1 Then Exit
         GUISetState(@SW_HIDE, $nMsg[1])
      Case $Button7
         GUISetState(@SW_SHOW, $Form3)
      Case $Input31
         _modif_config($nMsg[0])
      Case $Button33
         _reset_conf()
      Case $Button31
         _select_path()
      Case $touche1
         _enter()
      Case $Button1()
         _afficher(GUICtrlRead($Input1))
      Case $Button2
         _creer_piece()
      Case $Button3
         _modif_piece()
      Case $Button4
         _sup_piece()
      Case $Button5
         _afficher_tab(GUICtrlRead($Input5))
      Case $Button6
         _charger()
   EndSwitch
WEnd
#region fonctions

Func _charger($l = $l_piece, $list = $List1)
   If Not $l Or $l = 0 Or $l = "" Then
      _msg("ERREUR, tableau vide", 0)
      Return False
   EndIf
   For $i = 0 To $l
      If _GUICtrlListView_GetItemFocused($list, $i) = True Then
         _GUICtrlTab_ActivateTab($Tab1, 0)
         _afficher(_GUICtrlListView_GetItemText($list, $i, 0), 2)
         Return True
      EndIf
   Next
   _msg("ERREUR, Aucune pièce sélectionnée", 0)
   Return False
EndFunc   ;==>_charger

Func _afficher_tab($tmp_ref, $mode = 0)
   If $mode = 0 Then
      $mode = 1
      If GUICtrlRead($Checkbox1) = 1 Then $mode = 2
   EndIf
   $select_list = _GUICtrlListBox_GetSelItemsText($List2)
   Local $chp1 = 1, $chp2 = 1, $chp3 = 1, $chp4 = 1, $chp5 = 1, $chp6 = 1
   If $select_list[0] <> 0 Then
      $tmp = ""
      For $i = 1 To $select_list[0]
         $tmp &= $select_list[$i]
      Next
      If Not StringInStr($tmp, "Référence") Then $chp1 = 0
      If Not StringInStr($tmp, "Description") Then $chp2 = 0
      If Not StringInStr($tmp, "Catégorie") Then $chp3 = 0
      If Not StringInStr($tmp, "Emplacement") Then $chp4 = 0
      If Not StringInStr($tmp, "Quantité") Then $chp5 = 0
      If Not StringInStr($tmp, "Info") Then $chp6 = 0
   EndIf
   $tab = _tab($tmp_ref, $mode, $chp1, $chp2, $chp3, $chp4, $chp5, $chp6)
   If $l = 0 Then
      _msg("Erreur, Aucune pièce trouvée", 0)
      Return False
   EndIf
   _GUICtrlListView_DeleteAllItems($List1)
   For $i = 0 To $l - 1
      GUICtrlCreateListViewItem($tab[$i][0] & "|" & $tab[$i][1] & "|" & $tab[$i][2] & "|" & $tab[$i][3] & "|" & $tab[$i][4] & "|" & $tab[$i][5], $List1)
      If $tab[$i][4] <> 0 Then
         GUICtrlSetBkColor(-1, 0xC6FEBB)
      Else
         GUICtrlSetBkColor(-1, 0xFEBBBB)
      EndIf
   Next
   _msg($l & " pièces chargées.")
EndFunc   ;==>_afficher_tab

Func _afficher($tmp_ref, $mode = 2)
   If $tmp_ref = "" Then
      _msg("ERREUR, Veuillez entrer un numéro de référence", 0)
      Return False
   EndIf
   $tab = _tab($tmp_ref, $mode)
   If $l = 1 Then
      GUICtrlSetData($Input1, $tab[$l - 1][0])
      GUICtrlSetData($Edit2, $tab[$l - 1][1])
      GUICtrlSetData($Input2, $tab[$l - 1][2])
      GUICtrlSetData($Input3, $tab[$l - 1][3])
      GUICtrlSetData($Input4, $tab[$l - 1][4])
      GUICtrlSetData($Edit3, $tab[$l - 1][5])
      _msg("Pièce réf. " & $tab[$l - 1][0] & " chargée.")
      Return True
   EndIf
   If $l = 0 Then
      _msg("Erreur, Aucune pièce trouvée", 0)
      Return False
   EndIf
   If $l > 1 Then
      _GUICtrlTab_ActivateTab($Tab1, 1)
      _afficher_tab($tmp_ref, $mode)
      Return True
   EndIf
EndFunc   ;==>_afficher

Func _format1($var, $car = "%", $sup = "'", $mode = 0)
   Dim $text
   If $mode = 0 Then
      For $i = 1 To StringLen($var)
         $text = $text & StringLeft($var, 1) & $car
         $var = StringRight($var, StringLen($var) - 1)
      Next
      $text = $car & $text
   Else
      $text = $var
   EndIf
   Return StringReplace($text, $sup, "")
EndFunc   ;==>_format1

Func _tab($search, $mode = 1, $chp1 = 1, $chp2 = 0, $chp3 = 0, $chp4 = 0, $chp5 = 0, $chp6 = 0)
   ;mode2=recherche exacte
   _msg("Chargement ...")
   If $mode = 1 Then $search = _format1($search, "*")
   $search = StringReplace($search, "*", "(.*?)")
   $search = StringReplace($search, "%", "(.*?)")
   $read = FileRead($def_data)
   If @error Then
      _msg("Erreur de lecture du fichier de donnée", 0)
      Return False
   EndIf
   $read2 = StringSplit($read, @CRLF)
   Dim $tab[1][6]
   $l = 0
   For $i = 1 To $read2[0]
      If $read2[$i] <> "" Then
         $tmp = StringSplit($read2[$i], ";")
         $tmp_ref = _format($tmp[2], 2)
         $tmp_description = _format($tmp[3], 2)
         $tmp_categorie = _format($tmp[4], 2)
         $tmp_emplacement = _format($tmp[5], 2)
         $tmp_quantite = _format($tmp[6], 2)
         $tmp_info = _format($tmp[7], 2)
         ;recherche sur les champs
         $result = 0
         If $chp1 = 1 Then
            If StringRegExp($tmp_ref & ';', $search & ';') Then $result = 1
         EndIf
         If $chp2 = 1 And $result = 0 Then
            If StringRegExp($tmp_description & ';', $search & ';') Then $result = 1
         EndIf
         If $chp3 = 1 And $result = 0 Then
            If StringRegExp($tmp_categorie & ';', $search & ';') Then $result = 1
         EndIf
         If $chp4 = 1 And $result = 0 Then
            If StringRegExp($tmp_emplacement & ';', $search & ';') Then $result = 1
         EndIf
         If $chp5 = 1 And $result = 0 Then
            If StringRegExp($tmp_quantite & ';', $search & ';') Then $result = 1
         EndIf
         If $chp6 = 1 And $result = 0 Then
            If StringRegExp($tmp_info & ';', $search & ';') Then $result = 1
         EndIf
         ;si recherche positive sur cette entrée on l'ajoute au tableau
         If $result = 1 Then
            $l += 1
            ReDim $tab[$l][6]
            $tab[$l - 1][0] = $tmp_ref
            $tab[$l - 1][1] = $tmp_description
            $tab[$l - 1][2] = $tmp_categorie
            $tab[$l - 1][3] = $tmp_emplacement
            $tab[$l - 1][4] = $tmp_quantite
            $tab[$l - 1][5] = $tmp_info
         EndIf
      EndIf
   Next
   $l_piece = $l
   Return $tab
EndFunc   ;==>_tab

Func _sup_piece()
   If MsgBox(52, "Confirmation de suppression", "Voulez-vous vraiment supprimer cette pièce ?", 10, $Form1) = 6 Then
      $tmp_ref = _format(GUICtrlRead($Input1))
      $tmp_chaine = "[piece];" & $tmp_ref
      $read = FileRead($def_data)
      If @error Then
         _msg("Erreur de lecture du fichier de donnée", 0)
         Return False
      EndIf
      If Not StringInStr($read, $tmp_chaine) Then
         _msg("Erreur, la référence est inexistante", 0)
         Return False
      EndIf
      $read = StringRegExpReplace($read, "(.*?)piece(.*?);" & $tmp_ref & ";(.*?);(.*?);(.*?);(.*?);(.*?)" & @CRLF, "")
      If @error Then
         _msg("Erreur de suppression des données", 0)
         Return False
      EndIf
      $hwd = FileOpen($def_data, 2)
      If $hwd = -1 Then
         _msg("Erreur d'ouverture du fichier de donnée", 0)
         Return False
      EndIf
      If FileWrite($hwd, $read) = 0 Then
         _msg("Erreur à la validation de la suppression", 0)
         Return False
      EndIf
      FileClose($hwd)
      _msg("pièce supprimée.")
   EndIf
EndFunc   ;==>_sup_piece


Func _charger_config($ctrl)
   If $ctrl = $Input31 Then
      If RegRead($key, $reg_def_data) <> "" Then
         GUICtrlSetData($ctrl, RegRead($key, $reg_def_data))
         $def_data = RegRead($key, $reg_def_data)
         _msg("Fichier de données:" & $def_data)
         _test_data_file()
      Else
         GUICtrlSetData($ctrl, $def_data_1)
         $def_data = $def_data_1
         _msg("Fichier de données:" & $def_data_1)
         _test_data_file()
      EndIf
   EndIf
EndFunc   ;==>_charger_config

Func _modif_config($ctrl)
   If $ctrl = $Input31 Then
      If GUICtrlRead($Input31) = $def_data_1 Then
         RegDelete($key, $reg_def_data)
         $def_data = $def_data_1
         _msg("Fichier de données:" & $def_data)
         _test_data_file()
      Else
         RegWrite($key, $reg_def_data, "REG_SZ", GUICtrlRead($Input31))
         $def_data = GUICtrlRead($Input31)
         _msg("Fichier de données:" & $def_data)
         _test_data_file()
      EndIf
   EndIf
EndFunc   ;==>_modif_config

Func _select_path()
   $tmp = FileSelectFolder("Sélection du dossier", "", 7, "", $Form3)
   If $tmp <> "" Then
      GUICtrlSetData($Input31, $tmp & "\" & $data_def_name)
      _modif_config($Input31)
   EndIf
EndFunc   ;==>_select_path

Func _test_data_file()
   If Not FileExists($def_data) Then FileWrite($def_data, "")
   If FileExists($def_data) Then
      _msg("fichier de donnée ok")
   Else
      _msg("Erreur du fichier de donnée " & $def_data, 0)
   EndIf
EndFunc   ;==>_test_data_file

Func _reset_conf()
   RegDelete($key, $reg_def_data)
   GUICtrlSetData($Input31, $def_data_1)
   $def_data = $def_data_1
   _msg("Fichier de données" & $def_data)
EndFunc   ;==>_reset_conf

Func _enter()
   $tmp = ControlGetFocus(WinGetTitle($nMsg[1]))
   Switch $nMsg[1]
      Case $Form1
         If $tmp = "edit2" Then _crlf($Edit2)
         If $tmp = "edit6" Then _crlf($Edit3)
         If $tmp = "edit1" Then _afficher(GUICtrlRead($Input1))
         If $tmp = "edit3" Or $tmp = "edit4" Or $tmp = "edit5" Then _modif_piece()
         If $tmp = "Button9" Or $tmp = "ListBox1" Or $tmp = "Edit7" Then _afficher_tab(GUICtrlRead($Input5))
   EndSwitch
   ;_msg("focus " &$tmp)
EndFunc   ;==>_enter

Func _modif_piece()
   $tmp_ref = _format(GUICtrlRead($Input1))
   $tmp_description = _format(GUICtrlRead($Edit2))
   $tmp_categorie = _format(GUICtrlRead($Input2))
   $tmp_emplacement = _format(GUICtrlRead($Input3))
   $tmp_quantite = _format(GUICtrlRead($Input4))
   $tmp_info = _format(GUICtrlRead($Edit3))
   $tmp_chaine = "[piece];" & $tmp_ref
   If $tmp_quantite = "" Then
      _msg("Erreur, aucune quantité entrée", 0)
      Return False
   EndIf
   $read = FileRead($def_data)
   If @error Then
      _msg("Erreur de lecture du fichier de donnée", 0)
      Return False
   EndIf
   If Not StringInStr($read, $tmp_chaine) Then
      _msg("Erreur, la référence est inexistante", 0)
      Return False
   EndIf
   $read = StringRegExpReplace($read, "(.*?)piece(.*?);" & $tmp_ref & ";(.*?);(.*?);(.*?);(.*?);(.*?)" & @CRLF, "[piece];" & $tmp_ref & ";" & $tmp_description & ";" & $tmp_categorie & ";" & $tmp_emplacement & ";" & $tmp_quantite & ";" & $tmp_info & @CRLF)
   If @error Then
      _msg("Erreur de modification des données", 0)
      Return False
   EndIf
   $hwd = FileOpen($def_data, 2)
   If $hwd = -1 Then
      _msg("Erreur d'ouverture du fichier de donnée", 0)
      Return False
   EndIf
   If FileWrite($hwd, $read) = 0 Then
      _msg("Erreur à la validation de la modification", 0)
      Return False
   EndIf
   FileClose($hwd)
   _msg("pièce modifiée.")
EndFunc   ;==>_modif_piece

Func _creer_piece()
   $read = FileRead($def_data)
   If @error Then
      _msg("Erreur de lecture du fichier de donnée", 0)
      Return False
   EndIf
   $tmp_ref = _format(GUICtrlRead($Input1))
   $tmp_description = _format(GUICtrlRead($Edit2))
   $tmp_categorie = _format(GUICtrlRead($Input2))
   $tmp_emplacement = _format(GUICtrlRead($Input3))
   $tmp_quantite = _format(GUICtrlRead($Input4))
   $tmp_info = _format(GUICtrlRead($Edit3))
   If $tmp_quantite = "" Then
      _msg("Erreur, aucune quantité entrée", 0)
      Return False
   EndIf
   If $tmp_ref = "" Then
      _msg("Erreur, aucune référence entrée", 0)
      Return False
   EndIf
   $tmp_chaine = "[piece];" & $tmp_ref & ';' & $tmp_description & ';' & $tmp_categorie & ';' & $tmp_emplacement & ';' & $tmp_quantite & ';' & $tmp_info & ';'
   If StringInStr($read, $tmp_ref & ";") Then
      _msg("Erreur, cette référence existe déjà", 0)
      Return False
   EndIf
   If FileWriteLine($def_data, $tmp_chaine) = 0 Then
      _msg("Erreur à la création de la pièce", 0)
      Return False
   EndIf
   _msg("Pièce créée")
   Return True
EndFunc   ;==>_creer_piece

Func _format($tmp, $mode = 1)
   If $mode = 1 Then
      $tmp = StringReplace($tmp, ";", "[tag_pv_]")
      $tmp = StringReplace($tmp, @CRLF, "[tag_crlf_]")
   EndIf
   If $mode = 2 Then
      $tmp = StringReplace($tmp, "[tag_pv_]", ";")
      $tmp = StringReplace($tmp, "[tag_crlf_]", @CRLF)
   EndIf
   Return $tmp
EndFunc   ;==>_format

Func _crlf($control)
   $pos = _GUICtrlEdit_GetSel($control)
   $debut = StringLeft(GUICtrlRead($control), $pos[0])
   $fin = StringRight(GUICtrlRead($control), StringLen(GUICtrlRead($control)) - $pos[1])
   GUICtrlSetData($control, $debut & @CRLF & $fin)
   _GUICtrlEdit_SetSel($control, $pos[0] + 2, $pos[0] + 2)
EndFunc   ;==>_crlf

Func _msg($msg, $err = "1")
   $data_edit1 = "[" & @HOUR & "h" & @MIN & "m" & @SEC & "] " & $msg & @CRLF & $data_edit1
   GUICtrlSetData($Edit1, $data_edit1)
   If $err = 1 Then
      GUICtrlSetBkColor($Edit1, 0xC6FEBB)
   Else
      GUICtrlSetBkColor($Edit1, 0xFEBBBB)
   EndIf
EndFunc   ;==>_msg
#endregion fonctions
Stock personnel.au3
Stock personnel.exe




______________________________________________________
Mes principales réalisations: Cp (batch) et IPSvc (autoit)
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Gestion de stock 
Bonjour cautex
excellent je cherchais un truc identique pour gérer mes pieces informatiques occasions.




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Message Gestion de stock 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch