PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Impression sur imprimante étiquette
Impression sur imprimante étiquette
Iniciado por geo, 09,dic. 2014 16:27 - 10 respuestas
Publicado el 09,diciembre 2014 - 16:27
Binjour,

je me prends la têtes avec une petite imprimante pour étiquettes Brother QL-570.

Son utilisation avec les états n'est pas top, mais j'arrive assez bien a imprimer en Wlangage, mais j'ai deux petits soucis :

1 - impossible de configurer la hauteur du papier au vol. Le texte imprimé peut varier , c'est le contenu des boites à étiqueter.

Exemple :
10 pièces en métal
20 bidules
35 truc
etc.


J'ai tenté en vain d'utiliser les fonction ihauteurZone() pour trouver la hauteur de papier a avoir, mais il semble que si je fais un iParamètre() après avoir fais un iAperçu( i100), la nouvelle hauteur n'est pas prise en compte ... pas vraiment pratique ..


2- un fois l'étiquette affichée, si je clique sur impression, le programme "plante", j'ai la fenêtre "Impression en cours, page 1", mais il reste planté jusqu'à ce que je fasse un ctrl-alt-del => fin application , même si je clique sur annuler , la fenêtre "impression en cours" se ferme, mais impossible de quitter l'aperçu avant impression.

Si vous avez une idée, je suis en train de perdre patience avec cette imprimante ( ... pas mon choix ...)

Merci d'avance

Olivier
Miembro registrado
11 mensajes
Publicado el 09,diciembre 2014 - 17:32
bonsoir,

ton problème dépend de beaucoup de facteurs (format de l'état, réglages de l'imprimante, marges réglées sur l'imprimantes, marges sur l'état etc...)
impossible de te répondre précisément; mais le fait de vouloir changer quoi que ce soit par iParamètre() surtout après avoir demandé l'aperçu, il me semble que c'est pas du tout dans ce sens là que tu dois procéder.
et aussi , est ce que les champs sont des champs RTF parce que si c'est le cas tu vas vraiment en chier ... pour calculer la hauteur que ce soit avec
les fonctions iHauteur.... pour peu que ce soit même possible ?

bon courage
Publicado el 09,diciembre 2014 - 18:20
Hello,

merci pour la réponse, même si c'est pour dire que je vais en c.... :(

Pour donner plus de précision , mon impression me semble assez simple :

- 1 code barre => OK
- 1 champ n° article => OK
- 1 champ nom d'article => OK
- 1 champ texte ( pas rtf) avec le contenu de la boite ( de 0 à x lignes)

A vrai dire ce qui m'emm... le plus , c'est le plantage de l'aperçu avant impression (testé sur plusieurs PC) car au pire, comme j'arrive a modifier la hauteur avant l'aperçu, il est possible de ne pas imprimer si l'impression devait se faire sur 2 pages et de relancer avec du rab de hauteur et d'imprimer si c'est OK (c'est pas le top mais au pont ou j'en suis ...)

A quoi servent ces fonctions iHauteurZone et compagnie si ce n'est pas pour calculer les hauteurs d’impression ...

Je patauge un peu ...


Amicalement

Olivier
Publicado el 10,diciembre 2014 - 03:46
Le 09/12/2014 15:27, Olivier a écrit :
Binjour,
je me prends la têtes avec une petite imprimante pour étiquettes Brother
QL-570.

Son utilisation avec les états n'est pas top, mais j'arrive assez bien a
imprimer en Wlangage, mais j'ai deux petits soucis :

1 - impossible de configurer la hauteur du papier au vol. Le texte
imprimé peut varier , c'est le contenu des boites à étiqueter.

Exemple :
10 pièces en métal 20 bidules
35 truc etc.


J'ai tenté en vain d'utiliser les fonction ihauteurZone() pour trouver
la hauteur de papier a avoir, mais il semble que si je fais un
iParamètre() après avoir fais un iAperçu( i100), la nouvelle hauteur
n'est pas prise en compte ... pas vraiment pratique ..


2- un fois l'étiquette affichée, si je clique sur impression, le
programme "plante", j'ai la fenêtre "Impression en cours, page 1", mais
il reste planté jusqu'à ce que je fasse un ctrl-alt-del => fin
application , même si je clique sur annuler , la fenêtre "impression en
cours" se ferme, mais impossible de quitter l'aperçu avant impression.

Si vous avez une idée, je suis en train de perdre patience avec cette
imprimante ( ... pas mon choix ...)
Merci d'avance
Olivier


Un peu étonné que tu n'arrives pas à faire tes étiquettes
Voici un code mis à l'ouverture de mon état
sTemp est une chaîne
sTemp=INILit("ADMIN","A4_Long","99.1",MF_IniGWFile)
MoiMême..LargeurEtiquette =Val(sTemp)
sTemp=INILit("ADMIN","A4_Haut","38.1",MF_IniGWFile)
MoiMême..HauteurEtiquette=Val(sTemp)
sTemp=INILit("ADMIN","A4_MargHaut","15",MF_IniGWFile)
MoiMême..MargeHaute = Val(sTemp)

sTemp=INILit("ADMIN","A4_MargGau","5",MF_IniGWFile)

MoiMême..MargeGauche = Val(sTemp)
sTemp=INILit("ADMIN","A4_InterH","2.5",MF_IniGWFile)
MoiMême..EspaceH = Val(sTemp)
sTemp=INILit("ADMIN","A4_InterV","0",MF_IniGWFile)
MoiMême..EspaceV = Val(sTemp)
sTemp = INILit("ADMIN", "A4_NB","2", MF_IniGWFile)
MoiMême..NbEtiquette = Val(sTemp)

sTemp = INILit("ADMIN","A4_MargBas","0", MF_IniGWFile)
MoiMême..MargeBasse = Val(sTemp)

Et cela marche parfaitement
je peux avoir une planche d'étiquette comme les AVERY labels
je tape les mesures dans une fenêtre d'initialisation
et mon client peut paramétrer au début et cela garde celle-ci
Miembro registrado
5 mensajes
Publicado el 10,diciembre 2014 - 13:18
Bonjour et merci pour ta réponse.

Si j'ai bien lut le code que tu m'as envoyé, il s'agit d'impression de planches d'étiquettes ( une feuille A4 avec pleins de petites étiquettes).

Mon soucis concerne l'impression d'étiquettes sur une imprimante à étiquettes de type Brother QL-570






C'est donc dans le format -- /------------ 62 mm ------------/-- de largeur et de X mm de hauteur ( selon ce que je dois imprimer ) qui me pose de gros soucis ( et c'est la version polie :) )

Amicalement

Bonne journée

Olivier
Publicado el 10,diciembre 2014 - 14:06
Le 10/12/2014 12:18, "géo" a écrit :
Bonjour et merci pour ta réponse.

Si j'ai bien lut le code que tu m'as envoyé, il s'agit d'impression de
planches d'étiquettes ( une feuille A4 avec pleins de petites étiquettes).

Mon soucis concerne l'impression d'étiquettes sur une imprimante à
étiquettes de type Brother QL-570






C'est donc dans le format -- /------------ 62 mm ------------/-- de
largeur et de X mm de hauteur ( selon ce que je dois imprimer ) qui me
pose de gros soucis ( et c'est la version polie :) )
Amicalement
Bonne journée

Olivier

Alors là c'est encore le plus simple
voici un code pour pour une étiquette
tu peux aussi te faire un format désiré dans l'editeur d'etat
tu défini ton étiquettes toi même ... je ne vois vraiment rien de sorcie
Ici j'ai fait mon étiquette moimeme
Format papier ... personnel et tu mets tes mesures... rien de plus simple

iParamètre("FORMATPAPIER = A4")
iParamètre("ORIENTATION = PORTRAIT")
SI G_TM_L60_GRANDE ALORS
/// Etiquette TM60 100mm * 50
G_EtiL=29
SELON G_EtiTaille
CAS 1:
G_EtilDeb=1
CAS 2:
G_EtilDeb=3
AUTRE CAS :
G_EtilDeb=5
FIN
iCréePolice(1,13, iGras, iRoman )
iCréePolice(2,13, iGras, iRoman )
iCréePolice(3,13, iGras,iRoman )
iCréePolice(4,13, iGras,iRoman)
// si pas i=1 alors isautePage
iPolice(3)
POUR j=1 A 1
iSauteLigne
FIN
SI G_B_BAS_ETIQUETTE ALORS
SINON
iPolice(3)
iImprime(" " + Gauche(_l1,G_EtiL)+" ")
iPolice(2)
FIN
SI G_B_CIVILITE ALORS
iImprime(" " + Gauche(_l2,G_EtiL)+" " + Gauche(_l3,G_EtiL)+" ")
SINON
iImprime( Gauche(_l3,G_EtiL)+" ")
FIN
iImprime(" " + Gauche(_l4,G_EtiL)+" ")
SI G_EtiTaille > 1 ALORS
SI _l5 <> "" ALORS
iImprime(" " +Gauche(_l5,G_EtiL)+" ")//2eme ligne adresse
FIN
FIN
iImprime(" " +Gauche(_l6,G_EtiL)+" ")
iCréePolice(4,13,iGras, iRoman)
iImprime(" " +Gauche(_l7,G_EtiL)+" ")
SI G_B_BAS_ETIQUETTE ALORS
iPolice(3)
iImprime(" " + RC +Gauche(_l1,G_EtiL)+" ")
FIN
iFinImprime
Miembro registrado
5 mensajes
Publicado el 10,diciembre 2014 - 21:29
Bonjour,

j'ai parcouru ton code ( pas facile vu que tu utilises pas mal de constantes) , mais si je lis "en travers", tu définis ton format "A4" et ensuite tu envoies des "iImprime()" / "iSauteLigne" / etc ...

Mais comment gérer un :

iImprime( iPolice(1) + SAI_MonTexte )

sachant que mon texte peut être un texte de 1 , 2 , ou 10 lignes ... donc ma hauteur d'étiquette (j'imprime sur du ruban , donc l'étiquette peut avoir 10, 20 , 50 mm de long) peut varier et c'est justement avant de définir le iApercu().

Voici mon code, il est un peu complexe car j'utilise la fonction Compile() pour garder la main sur l'impression sans avoir a recompiler l'appli.
Le code d'impression est contenu dans les options du soft.

L'utilisateur clique sur "imprimer étiquette" :

- l'étiquette est affichée en aperçu avant impression et l'utilisateur ne peut que cliquer pour fermer la fenêtre ( pas de boutons pour imprimer)
- le programme affiche "Voulez-vous imprimer ? " OUI / NON
- si le résultat est OK => OUI => l'imprimante imprime l'étiquette
- si le résultat est mauvais ( sur deux pages ) ==> NON
- l'utilisateur clique a nouveau sur "imprimer étiquette" avec la touche Shift enfoncée
- le soft affiche "Ajouter des mm ?" , => saisie d'un entier
- l'étiquette est affichée en aperçu avant impression (avec les mm en plus ) et l'utilisateur ne peut que cliquer pour fermer la fenêtre ( pas de boutons pour imprimer)
- si le résultat est OK => OUI => l'imprimante imprime l'étiquette
- si le résultat est mauvais ( sur deux pages ) ==> NON


OK , pas franchement élégant , mais vous voyez au point ou j'en suis .....


Bonne journée


Olivier

sImprimanteDefaut, sImprimanteEtiquette sont des chaînes

// je controle si la touche Shift est enfoncée
bAjouterLongueur est un booléen = Faux
SI ToucheEnfoncée(teShift) ALORS
bAjouterLongueur = Vrai
FIN

// je récupère l'imprimante par défaut pour la remettre à la fin
sImprimanteDefaut = iInfoImprimante(Faux)

//-- voir si une impimante pour étiquettes est définie --
// je garde dans les paramètres du soft le nom de l'imprimante étiquettes
sImprimanteEtiquette = val_preference( "Option_Imprimante_Etiquette")

// selectionner l'imprimante pour etiquettes si elle est définie
SI sImprimanteEtiquette <> "" ALORS
iConfigure(sImprimanteEtiquette,Vrai)
FIN

//...
//Le code suivant appelle un script WL compilé à la volée pour
//me garder la possibilité de modifier les impressions sans recompiler le soft.
//en paramètres les valeurs à imprimer sous forme de tableau associatif et un boleen bAjouterLongeur = vrai
//si on appuie sur la touche Shift lors du clic sur le bouton "imprimer étiquette"
//

// ici une fonction qui me met dans un tableau associatif les valeurs de la base HF

sTabArticle["Numero"] = Article.Numero
sTabArticle["Contenu"] = Article.Contenu
sTabArticle["nom"] = Article.Nom


sRésultat est une chaîne
sRésultatCompile est une chaîne
sRésultatCompile = Compile("Imprimer_Etiquette","Procedure Imprimer_Etiquette (nArt sTabArticle ,bAjouterLongueur )" + RC + sScript + RC + "RENVOYER vrai")

SELON sRésultatCompile
CAS "" : sRésultat= ExécuteTraitement("Imprimer_Etiquette",trtProcedure,SAI_Numero, sTabArticle,bAjouterLongueur)
CAS "ERR" : sRésultat = "Compilation impossible." + RC + ErreurInfo()
AUTRE CAS : sRésultat = sRésultatCompile
FIN
SINON
Erreur("Impossible de trouver le script d'impression !")
FIN

// je remets l'imprimante par défaut
iConfigure(sImprimanteDefaut, Vrai)



Voici le code que je compile à la volée, il est contenu dans les options sous forme de texte dans la base HF

// contenu de la boite
stexte est une chaîne =sTabArticle["Contenu"]
// je calcule le nombre de retours chariots dans le contenu
nRC est un entier = ChaîneOccurrence(stexte, RC )
// 1 retour chariot = 6.5 mm de haut / trouvé par tests au pif
nHauteur est un entier = nRC * 65


// -- si bAjouterLongeur ==> appui sur shift lors du clic sur le bouton imprimer ...
// je propose d'ajouter manuellement des mm à la hauteur de l'étiquette si
// l'aperçu avant impresssion donnait sur 2 feuilles
nAjout est un entier
SI bAjouterLongueur = 1 ALORS
Saisie("Ajouter : ", nAjout )
FIN

//-- paramètre portrait --
iParamètre(iOrientation,1)
// -- hauteur du papier => nombre de RC * 6.5 mm + éventuel ajout manuel --
iParamètre(iHauteurPapier, nHauteur + nAjout )

// -- largeur du papier 62 mm => toujours la même chose --
iParamètre(iLargeurPapier,620)

// -- aperçu avant impression --
// je cache les boutons de l'aperçu avant impression car
// si l'utilisateur clique sur imprimer, le programme affiche "impression page 1"
// et reste figé, si on clique sur annuler ... on ne peut plus quitter l'aperçu avant
// impression, il faut tuer le programme en passant par le task manager
iParamètreAperçu(iBoutonAucun)
// affichage à 100 %
iAperçu(iapZoom100)
// je crée une police 11 et j'imprime mon texte ( dans l'aperçu)
iCréePolice(1, 11 , iNormal,iRoman )
iImprime(iPolice(1) + stexte )
iFinImprime()

//******************************************************************************************
// **** ici l'aperçu avant impression est affiché et bloque l'execution du script **
//******************************************************************************************

// l'utilisateur a "vu" son étiquette, il peut choisir de l'imprimer en cliquant sur "oui" ou de quitter
// en cliquant sur non ( il pourra recliquer sur imprimer avec Shift pour ajouter de la hauteur
// si il a vu que son impression allait se faire sur deux pages ( 2 étiquettes en fait)
SI OuiNon(2,"Imprimer ?") = Non ALORS
// -- si je quitte , je fait un iRaz() pour remettre a 0 mes changements ( pas de boutons dans les aperçus, etc..)
iRAZ()
// renvoyer "" car je suis dans une fonction ( celle compilée à la volée)
RENVOYER ""
FIN

// si je clique sur "oui" et que je veux imprimer , le relance sur l'imprimante
// -- imprimer sur l'imprimante --
iImprime(iPolice(1) + stexte )
iFinImprime()

iRAZ()
Publicado el 11,diciembre 2014 - 13:15
Le 10/12/2014 13:06, Feiereisen Marcel a écrit :
Le 10/12/2014 12:18, "géo" a écrit :
Bonjour et merci pour ta réponse.

Si j'ai bien lut le code que tu m'as envoyé, il s'agit d'impression de
planches d'étiquettes ( une feuille A4 avec pleins de petites
étiquettes).

Mon soucis concerne l'impression d'étiquettes sur une imprimante à
étiquettes de type Brother QL-570






C'est donc dans le format -- /------------ 62 mm ------------/-- de
largeur et de X mm de hauteur ( selon ce que je dois imprimer ) qui me
pose de gros soucis ( et c'est la version polie :) )
Amicalement
Bonne journée

Olivier
Alors là c'est encore le plus simple

voici un code pour pour une étiquette
tu peux aussi te faire un format désiré dans l'editeur d'etat
tu défini ton étiquettes toi même ... je ne vois vraiment rien de sorcie
Ici j'ai fait mon étiquette moimeme
Format papier ... personnel et tu mets tes mesures... rien de plus simple

iParamètre("FORMATPAPIER = A4")
iParamètre("ORIENTATION = PORTRAIT")
SI G_TM_L60_GRANDE ALORS
/// Etiquette TM60 100mm * 50
G_EtiL=29
SELON G_EtiTaille
CAS 1:
G_EtilDeb=1
CAS 2:
G_EtilDeb=3
AUTRE CAS :
G_EtilDeb=5
FIN
iCréePolice(1,13, iGras, iRoman )
iCréePolice(2,13, iGras, iRoman )
iCréePolice(3,13, iGras,iRoman )
iCréePolice(4,13, iGras,iRoman)
// si pas i=1 alors isautePage
iPolice(3)
POUR j=1 A 1
iSauteLigne
FIN
SI G_B_BAS_ETIQUETTE ALORS
SINON
iPolice(3)
iImprime(" " + Gauche(_l1,G_EtiL)+" ")
iPolice(2)
FIN
SI G_B_CIVILITE ALORS
iImprime(" " + Gauche(_l2,G_EtiL)+" " +
Gauche(_l3,G_EtiL)+" ")
SINON
iImprime( Gauche(_l3,G_EtiL)+" ")
FIN
iImprime(" " + Gauche(_l4,G_EtiL)+" ")
SI G_EtiTaille > 1 ALORS
SI _l5 <> "" ALORS
iImprime(" " +Gauche(_l5,G_EtiL)+" ")//2eme ligne adresse
FIN
FIN
iImprime(" " +Gauche(_l6,G_EtiL)+" ")
iCréePolice(4,13,iGras, iRoman)
iImprime(" " +Gauche(_l7,G_EtiL)+" ")
SI G_B_BAS_ETIQUETTE ALORS
iPolice(3)
iImprime(" " + RC +Gauche(_l1,G_EtiL)+" ")
FIN
iFinImprime

Tus dois aussi réaliser... que si tu as
20 lignes tu ne peux pas imprimer sur une etiquette de 50 mm de hauteur
faut que tu fasse attention à cela

L1
c'est une ligne etc ... en fonction du nombre de ligne
j'autorise la grandeur de l'étiquette et ou je mets une point de moins
dans la taille de la police
Miembro registrado
5 mensajes
Publicado el 11,diciembre 2014 - 19:36
Bonjour,

.. et bien oui, dans mon cas, si il y a 20 lignes , je veux les imprimer les 20.

Au pire dans l'aperçu avant impression l'utilisateur n'imprime pas.

Comme c'est du papier continu dans l'imprimante étiquette, 20 mm ou 50 mm de haut pas de soucis.

Bonne journée

Amicalement

Olivier
Publicado el 12,diciembre 2014 - 03:30
Le 11/12/2014 18:36, "géo" a écrit :
Bonjour,
... et bien oui, dans mon cas, si il y a 20 lignes , je veux les
imprimer les 20.

Au pire dans l'aperçu avant impression l'utilisateur n'imprime pas.

Comme c'est du papier continu dans l'imprimante étiquette, 20 mm ou 50
mm de haut pas de soucis.

Bonne journée

Amicalement
Olivier

à ce moment là
UN compteur tu lis tes lignes et à chaquer RC
tu rajoute une ligne ... rien de trop compliqué je trouve
Au nombre désiré exemple la 6 sième ligne tu peux envoyé et faire un
iimprime la première étiquette la deuxième etc.
Miembro registrado
5 mensajes
Publicado el 12,diciembre 2014 - 11:55
hello,

c'est bien ce que je fais ici :

...
stexte est une chaîne =sTabArticle["Contenu"]
// je calcule le nombre de retours chariots dans le contenu
nRC est un entier = ChaîneOccurrence(stexte, RC )
// 1 retour chariot = 6.5 mm de haut / trouvé par tests au pif
nHauteur est un entier = nRC * 65
...
// -- hauteur du papier => nombre de RC * 6.5 mm + éventuel ajout manuel --
iParamètre(iHauteurPapier, nHauteur + nAjout )


mais si la longueur de la ligne dépasse la largeur de l'étiquette ... pas de RC et une ligne supplémentaire quand même ...

Olivier