PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → ServiceWeb Chronopost et impression étiquette [WinDev 19]
ServiceWeb Chronopost et impression étiquette [WinDev 19]
Iniciado por m.archambaud, 12,may. 2015 11:32 - 6 respuestas
Publicado el 12,mayo 2015 - 11:32
Bonjour,

J'utilise le service web de chronopost afin de générer des "lettres de transport". (Etiquettes avec code barre)
Le service web me renvoie bien un étiquette PDF sous forme de contenu binaire mais je ne trouve pas de solution pour l'imprimer.
J'utilise une imprimante thermique "Intermec EasyCoder PC4)

J'ai bien essayé d'ouvrir le PDF puis de l'imprimer via Adobe Reader mais l'étiquette PDF est au format A4. Il faut donc ajuster la page A4 au format des étiquettes de l'imprimante... la qualité n'est donc plus la même.

Pour ceux qui aimerait voir le code :

WS_Requete est un shippingV2
WS_Resultat est un shippingV2Response
strucHeaderValue est un headerValue
strucShipperValue est un shipperValue
strucCustomerValue est un customerValue
strucRecipientValue est un recipientValue
strucRefValue est un refValue
strucSkybillValue est un skybillValue

// ---------------------------------------------------------------
// Composition de la structure pour le header
// ---------------------------------------------------------------

strucHeaderValue.idEmit = "CHRFR"
strucHeaderValue.accountNumber = [Mon numéro de compte]

// ---------------------------------------------------------------
// Composition de la structure pour les données de l'expéditeur
// ---------------------------------------------------------------

strucShipperValue.shipperCivility = "M"
strucShipperValue.shipperName = "MonNom"
strucShipperValue.shipperName2 = ""
strucShipperValue.shipperAdress1 = "MonAdresse1"
strucShipperValue.shipperAdress2 = "MonAdresse2"
strucShipperValue.shipperZipCode = "44000"
strucShipperValue.shipperCity = "Nantes"
strucShipperValue.shipperCountry = "FR"
strucShipperValue.shipperContactName = "NomContact"
strucShipperValue.shipperPhone = "0202020202"

// ---------------------------------------------------------------
// Composition de la structure pour les données du client
// ---------------------------------------------------------------

strucCustomerValue.customerCivility = "M"
strucCustomerValue.customerName = "NomClient"
strucCustomerValue.customerName2 = ""
strucCustomerValue.customerAdress1 = "AdresseClient1"
strucCustomerValue.customerAdress2 = "AdresseClient2
strucCustomerValue.customerZipCode = "75000"
strucCustomerValue.customerCity = "Paris"
strucCustomerValue.customerCountry = "FR"

// ---------------------------------------------------------------
// Composition de la structure pour les données du destinataire
// ---------------------------------------------------------------

strucRecipientValue.recipientName = "NomDestinataire"
strucRecipientValue.recipientName2 = ""
strucRecipientValue.recipientAdress1 = "AdresseDestinataire1"
strucRecipientValue.recipientAdress2 = "AdresseDestinataire2"
strucRecipientValue.recipientZipCode = "75000"
strucRecipientValue.recipientCity = "Paris"
strucRecipientValue.recipientCountry = "FR"

// ---------------------------------------------------------------
// Composition de la structure pour les références expéditeur et destinataire
// ---------------------------------------------------------------

strucRefValue.shipperRef = "Ref Exp"
strucRefValue.recipientRef = "Ref Dest"
//strucRefValue.customerSkybillNumber = ""

// ---------------------------------------------------------------
// Composition de la structure pour les données du colis
// ---------------------------------------------------------------

strucSkybillValue.evtCode = "DC"
strucSkybillValue.productCode = SEL_Service
strucSkybillValue.shipDate = DateVersChaîne(DateSys(), "AAAAMMJJ" + HeureVersChaîne(Maintenant, "HHMMSS"))
strucSkybillValue.shipHour = 19
strucSkybillValue.weight = SAI_PoidsColis
strucSkybillValue.weightUnit = "KGM"
strucSkybillValue.service = DateVersJour(DateSys())
strucSkybillValue.objectType = SEL_Nature

// ---------------------------------------------------------------
// Composition de la structure principale de la requête
// ---------------------------------------------------------------

WS_Requete.headerValue = strucHeaderValue
WS_Requete.shipperValue = strucShipperValue
WS_Requete.customerValue = strucCustomerValue
WS_Requete.recipientValue = strucRecipientValue
WS_Requete.refValue = strucRefValue
WS_Requete.skybillValue = strucSkybillValue
WS_Requete.skybillParamsValue.mode = "THE"
WS_Requete.password = [Mon mot de passe]
//WS_Requete.modeRetour = "2"

// ---------------------------------------------------------------
// Consommation du service
// ---------------------------------------------------------------

WS_Resultat = shippingV2(WS_Requete)

PROC_VerifResultat(WS_Resultat)

PROCEDURE PROC_VerifResultat(WS_Resultat est un xsdEntité)

SI WS_Resultat.'return'.errorCode <> 0 ALORS
Info("errorCode : " + WS_Resultat.'return'.errorCode, "errorMessage : " + WS_Resultat.'return'.errorMessage)
FIN

fSauveBuffer("C:\Users\court\Desktop\" + WS_Resultat.'return'.skybillNumber + ".pdf", WS_Resultat.'return'.skybill)
Publicado el 12,mayo 2015 - 14:51
Bonjour Mickael

si j'ai bien compris, ton problème est que :
- tu récupère un pdf au format A4
- seule une PARTIE de la page correspond à ton étiquette (le reste est vide)
- tu ne dois imprimer QUE la partie étiquette

Dans ce cas, tu peux :
- Afficher ton pdf dans un champ image
- bien sur, ajuste le champ pour que seule la partie étiquette soit
visible (100%, et la bonne dimension)
- faire un dsauveimagexxx de ton champ image (uniquement l'étiquette,
maintenant)
- imprimer ton image/etiquette avec iimprimeImage
- la qualité de l'étiquette correspondra à la taille du champ image

Cordialement



--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com


On 5/12/2015 3:32 AM, Mickael wrote:
Bonjour,

J'utilise le service web de chronopost afin de générer des "lettres de
transport". (Etiquettes avec code barre)
Le service web me renvoie bien un étiquette PDF sous forme de contenu
binaire mais je ne trouve pas de solution pour l'imprimer.
J'utilise une imprimante thermique "Intermec EasyCoder PC4)

J'ai bien essayé d'ouvrir le PDF puis de l'imprimer via Adobe Reader
mais l'étiquette PDF est au format A4. Il faut donc ajuster la page A4
au format des étiquettes de l'imprimante... la qualité n'est donc plus
la même.

Pour ceux qui aimerait voir le code :
WS_Requete est un shippingV2
WS_Resultat est un shippingV2Response
strucHeaderValue est un headerValue
strucShipperValue est un shipperValue
strucCustomerValue est un customerValue
strucRecipientValue est un recipientValue
strucRefValue est un refValue
strucSkybillValue est un skybillValue

// ---------------------------------------------------------------
// Composition de la structure pour le header
// ---------------------------------------------------------------

strucHeaderValue.idEmit = "CHRFR"
strucHeaderValue.accountNumber = [Mon numéro de compte]

// ---------------------------------------------------------------
// Composition de la structure pour les données de l'expéditeur
// ---------------------------------------------------------------

strucShipperValue.shipperCivility = "M"
strucShipperValue.shipperName = "MonNom"
strucShipperValue.shipperName2 = ""
strucShipperValue.shipperAdress1 = "MonAdresse1"
strucShipperValue.shipperAdress2 = "MonAdresse2"
strucShipperValue.shipperZipCode = "44000"
strucShipperValue.shipperCity = "Nantes"
strucShipperValue.shipperCountry = "FR"
strucShipperValue.shipperContactName = "NomContact"
strucShipperValue.shipperPhone = "0202020202"

// ---------------------------------------------------------------
// Composition de la structure pour les données du client
// ---------------------------------------------------------------

strucCustomerValue.customerCivility = "M"
strucCustomerValue.customerName = "NomClient"
strucCustomerValue.customerName2 = ""
strucCustomerValue.customerAdress1 = "AdresseClient1"
strucCustomerValue.customerAdress2 = "AdresseClient2
strucCustomerValue.customerZipCode = "75000"
strucCustomerValue.customerCity = "Paris"
strucCustomerValue.customerCountry = "FR"

// ---------------------------------------------------------------
// Composition de la structure pour les données du destinataire
// ---------------------------------------------------------------

strucRecipientValue.recipientName = "NomDestinataire"
strucRecipientValue.recipientName2 = ""
strucRecipientValue.recipientAdress1 = "AdresseDestinataire1"
strucRecipientValue.recipientAdress2 = "AdresseDestinataire2"
strucRecipientValue.recipientZipCode = "75000"
strucRecipientValue.recipientCity = "Paris"
strucRecipientValue.recipientCountry = "FR"

// ---------------------------------------------------------------
// Composition de la structure pour les références expéditeur et
destinataire
// ---------------------------------------------------------------

strucRefValue.shipperRef = "Ref Exp"
strucRefValue.recipientRef = "Ref Dest"
//strucRefValue.customerSkybillNumber = ""

// ---------------------------------------------------------------
// Composition de la structure pour les données du colis
// ---------------------------------------------------------------

strucSkybillValue.evtCode = "DC"
strucSkybillValue.productCode = SEL_Service
strucSkybillValue.shipDate = DateVersChaîne(DateSys(), "AAAAMMJJ" +
HeureVersChaîne(Maintenant, "HHMMSS")) strucSkybillValue.shipHour = 19
strucSkybillValue.weight = SAI_PoidsColis
strucSkybillValue.weightUnit = "KGM"
strucSkybillValue.service = DateVersJour(DateSys())
strucSkybillValue.objectType = SEL_Nature

// ---------------------------------------------------------------
// Composition de la structure principale de la requête
// ---------------------------------------------------------------

WS_Requete.headerValue = strucHeaderValue
WS_Requete.shipperValue = strucShipperValue
WS_Requete.customerValue = strucCustomerValue
WS_Requete.recipientValue = strucRecipientValue
WS_Requete.refValue = strucRefValue
WS_Requete.skybillValue = strucSkybillValue
WS_Requete.skybillParamsValue.mode = "THE"
WS_Requete.password = [Mon mot de passe]
//WS_Requete.modeRetour = "2"

// ---------------------------------------------------------------
// Consommation du service
// ---------------------------------------------------------------

WS_Resultat = shippingV2(WS_Requete)

PROC_VerifResultat(WS_Resultat)

PROCEDURE PROC_VerifResultat(WS_Resultat est un xsdEntité)

SI WS_Resultat.'return'.errorCode <> 0 ALORS
Info("errorCode : " + WS_Resultat.'return'.errorCode, "errorMessage
: " + WS_Resultat.'return'.errorMessage)
FIN

fSauveBuffer("C:\Users\court\Desktop\" +
WS_Resultat.'return'.skybillNumber + ".pdf", WS_Resultat.'return'.skybill)
Miembro registrado
19 mensajes
Publicado el 12,mayo 2015 - 15:27
Avez-vous le lien du Webservice Chronopost ?
Publicado el 12,mayo 2015 - 15:58
@JFB :
Voici le lien qui m'a permis d'importer le service web dans WinDev 19.
https://www.chronopost.fr/shipping-cxf/ShippingServiceWS…

@Fabrice Harari :
Merci pour votre réactivité.
Le fichier PDF que je récupère n'est pas en deux parties. Au format THE je n'ai pas cette partie blanche, donc pas de problème. L'étiquette prend bien la totalité de la page A4.

La réponse de chronopost concernant ce même problème d'impression :
"Si vous souhaitez imprimer sur une imprimante thermique compatible ZPL, vous pouvez indiquer le <mode> ZPL et vous obtiendrez l'étiquette ZPL.
Pour une imprimante non ZPL, indiquez le <mode> THE et vous obtiendrez un PDF plein page, que vous n'aurez pas besoin d'ajuster, puisqu'il s'justera automatiquement à la taille du support de l'imprimante."

Je ne saisi pas comment l'imprimante pourrai comprendre comment imprimer correctement un PDF de 210x297mm sur un support de 101,3 x 152,4mm.
Publicado el 12,mayo 2015 - 19:40
Bonjour Mickael

c'est donc juste un problème d'échelle...

Tu peux facilement
1. transformer le pdf en image avec la méthode précédente
2. faire un imprimeImage sr l'imprimante étiquette en indiquant le
paramètre d'échelle souhaité

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com


On 5/12/2015 7:58 AM, Mickael wrote:
@JFB :
Voici le lien qui m'a permis d'importer le service web dans WinDev 19.
https://www.chronopost.fr/shipping-cxf/ShippingServiceWS…

@Fabrice Harari : Merci pour votre réactivité. Le fichier PDF que je
récupère n'est pas en deux parties. Au format THE je n'ai pas cette
partie blanche, donc pas de problème. L'étiquette prend bien la totalité
de la page A4.

La réponse de chronopost concernant ce même problème d'impression : "Si
vous souhaitez imprimer sur une imprimante thermique compatible ZPL,
vous pouvez indiquer le <mode> ZPL et vous obtiendrez l'étiquette ZPL.
Pour une imprimante non ZPL, indiquez le <mode> THE et vous obtiendrez
un PDF plein page, que vous n'aurez pas besoin d'ajuster, puisqu'il
s'justera automatiquement à la taille du support de l'imprimante."

Je ne saisi pas comment l'imprimante pourrai comprendre comment imprimer
correctement un PDF de 210x297mm sur un support de 101,3 x 152,4mm.
Miembro registrado
1 mensaje
Publicado el 13,mayo 2015 - 14:24
Merci pour l'aide mais j'ai trouvé.
Il existe deux drivers pour l'imprimante, un nommé "EasyCoder PC4 (203 dpi)" et un autre "EasyCoder PC4 (300 dpi)".
Seul le 203dpi fonctionne convenablement, le 300dpi n'imprimera jamais à la taille voulu.
(J'ai d'autres modèles d'imprimante thermique, j'espère ne pas être embêté. )

Et effectivement, peu importe la taille du PDF, si je lance l'impression l'imprimante se charge d'adapter le format.
Il faut tout de même au préalable sélectionner le bon support dans les options d'impression de l'imprimante. (A savoir 101.6mm x 152.4mm)

La qualité de la police d'écriture reste très moyenne et le temps avant l'impression est de 5 à 8 secondes.
Le logiciel de Chronopost n'a pas ces contraintes ! La qualité est parfaite, l'impression est instantané et l'installation des imprimantes thermiques, de leur drivers et de leur paramétrage est transparent.

Je pense qu'il me manque des éléments pour faire les choses correctement...
Miembro registrado
149 mensajes
Publicado el 03,enero 2020 - 14:16
Bonjour,

je déterre ce sujet qui m'a bien aidé pour chronopost mais j'ai une question.

Quand j'essaye d'utiliser l'exemple avec shippingMultiParcelV3, j’obtiens l'erreur :
Impossible de convertir un élément de type {http://cxf.shipping.soap.chronopost.fr/}:shipperValue en type shipperValue.

Qu'est-ce que le webservice attends comme paramètre pour shipperValue ?

cordialement.