Script d'export articles, prix, stock sur SageX3
Voici un exemple de script pour l'extraction des articles à destination d'un site prestashop
1 avril, 2022 par
Script d'export articles, prix, stock sur SageX3
GBi86 & GBAppli, Gérald BRILLETEAU
| aucun commentaire pour l'instant

Bonjour à tous,
dans cette article je voulais juste partager avec vous, un script relativement simple pour extraire les données articles, tarifs et stocks de votre base SageX3 V11.

Je partage car j'ai eu un peu de mal à trouver l'information sur le net.

A vous de le reprendre pour l'intégrer dans votre environnement.


#
# GBAPPLI 2021-10-01
# Extraction des lignes de données ZEXPBTOC
#
######################################################################
######################################################################
Gosub INIT
Gosub EXEC
End

$ACTION
    Case ACTION
        When "INIT"        : Gosub INIT
        When "OUVRE_BATCH" : Gosub INIT
        When "EXEC"        : Gosub EXEC
        When "TERMINE"     : Gosub TERMINE
        When Default
    Endcase
Return
######################################################################
######################################################################
$INIT
    Gosub DECLARE
Return

$EXEC
#--> VARIABLE

#Call OUINON("Voulez-vous lancer la mise à jour du site ?",OK) From GESECRAN
#If OK <> 2 Then End : Endif
Gosub GENERATION
#Call OUINON("Fichier généré, voulez-vous l'envoyer sur le serveur Shop ?",OK) From GESECRAN
#If OK <> 2 Then End : Endif
Gosub EMISSION

End

#-----------Lancement du programme génération du fichier -----------#
$GENERATION
#--> VERIFICATION DE L'EXISTANCE DU FICHIER
System "@DEL "+W_FICHIER

#--> INITIALISATION DES REQUETES
REQUETE(0)="SELECT art.[ITMREF_0] ,art.[EANCOD_0] as EAN,art.[VACITM_2] as DEEE,[SPRICLIST].[PRI_0] as PRIXTTC,[SPRICLIST].[DCGVAL_1] as PROMO,(ISNULL(SUM(st.QTYSTUACT_0),0)-ISNULL(cmd.QTEALL,0)) as QTE, STDFLG_0 "
REQUETE(1)="FROM [MABASE].[ITMMASTER] as art  "
REQUETE(2)="LEFT JOIN [MABASE].[SPRICLIST]  ON [SPRICLIST].[PLICRI1_0]= art.[ITMREF_0] AND [SPRICLIST].[PLICRI2_0]='1862676' AND [SPRICLIST].[PLISTRDAT_0] <= CURRENT_TIMESTAMP AND [SPRICLIST].[PLIENDDAT_0] > CURRENT_TIMESTAMP "
REQUETE(3)="LEFT JOIN [MABASE].[STOCK] as st ON st.ITMREF_0 = art.[ITMREF_0] AND st.STA_0='A' "
REQUETE(4)="LEFT JOIN (SELECT ITMREF_0, SUM(QTY_0) as QTEALL FROM [MABASE].[SORDERQ] WHERE SOQSTA_0=1 AND FMI_0=1 AND SORDERQ.DEMDLVDAT_0<DATEADD(day, 30, CURRENT_TIMESTAMP) GROUP BY ITMREF_0 ) as cmd ON cmd.ITMREF_0 = art.[ITMREF_0] "
REQUETE(5)="WHERE [SPRICLIST].[PRI_0] > 0 "
REQUETE(6)="GROUP BY art.[ITMREF_0] ,art.[EANCOD_0] ,art.[VACITM_2] ,[SPRICLIST].[PRI_0] ,[SPRICLIST].[DCGVAL_1] ,cmd.QTEALL, STDFLG_0 "


#Infbox (REQUETE)

Gosub OUVRE_FICHIER_EXPORT
#--> ECRITURE ENTETE
     Wrseq "ref" ; Using [ZOUT]
     Wrseq "ean"; Using [ZOUT]
     Wrseq "prix"; Using [ZOUT]
     Wrseq "promo"; Using [ZOUT]
     Wrseq "qte"; Using [ZOUT]
     Wrseq Using [ZOUT]
#--> ECRITURE LIGNES
For (Char ref, Char Ean, Char Vacitm, Double prix, Double promo, Decimal qte, Decimal flg ) From "5" Sql REQUETE As [REQ6]    

     If [REQ6]flg = 1 Then
        #Call ERREURT("Article : "+[REQ6]ref, 0) From GESECRAN
        QTETMP = 99999
        COMPOSE(0)= "SELECT [BOMD].ITMREF_0,(ISNULL(SUM(st.QTYSTUACT_0),0)-ISNULL(cmd.QTEALL,0))/BOMQTY_0 as QTE "
        COMPOSE(1)= "FROM [MABASE].[BOMD] "
        COMPOSE(2)= "LEFT JOIN [MABASE].[STOCK] as st ON st.ITMREF_0 = [BOMD].[CPNITMREF_0] AND st.STA_0='A' "
        COMPOSE(3)= "LEFT JOIN [MABASE].[ITMMASTER] as art ON art.ITMREF_0 = [BOMD].[ITMREF_0] "
        COMPOSE(4)= "LEFT JOIN (SELECT ITMREF_0, SUM(QTY_0) as QTEALL FROM [MABASE].[SORDERQ] WHERE SOQSTA_0=1 AND FMI_0=1 "
        COMPOSE(5)= "AND SORDERQ.DEMDLVDAT_0<DATEADD(day, 30, CURRENT_TIMESTAMP) GROUP BY ITMREF_0 ) as cmd ON cmd.ITMREF_0 = [BOMD].CPNITMREF_0  "
        COMPOSE(6)= "WHERE STDFLG_0 = 1 AND [BOMD].ITMREF_0 = '"+[REQ6]ref+"' "
        COMPOSE(7)= "GROUP BY [BOMD].ITMREF_0, BOMQTY_0,cmd.QTEALL "
        COMPOSE(8)= "ORDER BY [BOMD].ITMREF_0,QTE "
        For (Char reftmp, Decimal qtetmp) From "5" Sql COMPOSE As [REQ7]
          if QTETMP > [REQ7]qtetmp Then
             QTETMP = [REQ7]qtetmp
          endif
        Next
        if QTETMP = 99999 Then
          QTETMP = 0
        endif
       
        [REQ6]qte = QTETMP
   
     Endif
     If [REQ6]qte > 20 Then [REQ6]qte = 20: Endif
     If [REQ6]qte < 0 Then [REQ6]qte = 0: Endif
     Wrseq [REQ6]ref ; Using [ZOUT]
     Wrseq [REQ6]Ean; Using [ZOUT]
     Wrseq [REQ6]prix; Using [ZOUT]
     Wrseq [REQ6]promo; Using [ZOUT]
     Wrseq [REQ6]qte; Using [ZOUT]
   
     Wrseq Using [ZOUT]
Next

Gosub FERME_FICHIER_EXPORT
#Infbox 'Fichier généré, prêt pour émission sur serveur Shop'
Return
#-----------Traitement envoi FTP-----------#
$EMISSION
Local Char FICHIER_BAT(250) , RETOUR(250)(1..100)
[L]FICHIER_BAT = "D:\Sage\dossiers\MonDossier\ZSHOP\ZEXPBTOC\SendFTP.BAT"
System [L]RETOUR = '@cmd.exe /C " ' + [L]FICHIER_BAT + ' " '
Return
#-----------Fonction du traitement-----------#
$OUVRE_FICHIER_EXPORT
#--> Définition du fichier
   
    Openo W_FICHIER,-1 Using [ZOUT]
    adxifs = ";"
    adxirs = chr$(13)+chr$(10)
Return
$FERME_FICHIER_EXPORT
#--->
    Openo Using [ZOUT]
Return
$TERMINE
    If !GSERVEUR & Y_TRA=0
        Call FERME_TRACE From LECFIC
        Call LEC_TRACE From LECFIC
        TRA = 1
    Endif
Return

######################################################################
######################################################################
$DECLARE
    #---> déclaration des variables
    Local Integer OK    :    OK = 1
    Local Decimal QTETMP    :    QTETMP = 0
    Local Char REQUETE(255)(0..6)
    Local Char COMPOSE(255)(0..8)
    W_FICHIER = filpath("ZSHOP\ZEXPBTOC\toSend", "MAJ_Shop", "csv")
Return



Script Batch pour envoi FTP :

::Envoie le contenu d un repertoire sur un dossier FTP. Ecrase les fichiers déja existants si des noms sont concordants
::Ce script utilise Curl (pour le ftp). La licence se situe dans le dossier bin
cls
::On met un titre au shell
@title Envoie le contenu d un repertoire sur un dossier FTP. Ecrase les fichiers déja existants si des noms sont concordants
::Supprimer les retours écran
@echo off

IF "%time:~0,1%" LSS "1" (
   SET DATETIME=%date:~6,4%-%date:~3,2%-%date:~0,2%-0%time:~1,1%-%time:~3,2%-%time:~6,2%
) ELSE (
   SET DATETIME=%date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
)


::#### VARIABLES####
::PARTIE FTP
set user_ftp=prod
set pwd_ftp=***********
set ip_ftp=ftp.site.fr
set path_ftp=/var/www/prod/htdocs/modules/tmp/

::Définition des Chemins
::répertoire racine
set rep_root=D:\Sage\dossiers\MonDossier\ZSHOP\ZEXPBTOC
::chemin dossier de transfert
set local_path=%rep_root%\toSend
::chemin dossier d artchive
set rep_arch=%rep_root%\archives
::chemin des binaires
set rep_bin=%rep_root%\bin
::chemin des fichiers de journaux
set rep_log=%rep_root%\log
 
echo "%date%|%time:~0,2%h%time:~3,2% : Chemin de traitment : %local_path%" >> %rep_log%/infos.log

::On envoie
cd %local_path%

if exist %local_path%\*.csv (

    FOR %%f IN (%local_path%\*.csv) DO (
    echo "%date%|%time:~0,2%h%time:~3,2% : Fichier disponible %%f" >> %rep_log%/infos.log
        ::Envoi de chaque fichier sur le ftp
        %rep_bin%\curl.exe --insecure -u %user_ftp%:%pwd_ftp% -T "%%f" -k sftp://%ip_ftp%%path_ftp%
        ::On logue les infos dans un fichier
        echo "%date%|%time:~0,2%h%time:~3,2% : fichier %%f -- envoyé " >>%rep_log%/envois.log
        ::On archive le fichier
        move %%f %rep_arch%\%DATETIME%.csv
    )
)
GOTO FIN
 
:NO_LINK_SERV
::le serveur ne répond pas au ping
echo "%date%|%time:~0,2%h%time:~3,2% : Le serveur FTP n'est pas joignable - Aucun transfert effectué" >>%rep_log%/connexions.log
 
:FIN

::On quitte


Avec l'arborescence suivante avec l'exécutable de curl dans le dossier bin.





Script d'export articles, prix, stock sur SageX3
GBi86 & GBAppli, Gérald BRILLETEAU 1 avril, 2022
Partager ce poste
Étiquettes
Se connecter pour laisser un commentaire.