jeudi 30 août 2012

Clipper: Creer un GUID

J'avais besoin de créer un GUID à partir de Clipper.
J'ai mis un certain temps à trouver l'exemple \contrib\hbwin\tests\testrpc.prg

#include "simpleio.ch"

PROCEDURE Main()
/*
 * Harbour Project source code:
 *
 * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
 * www - http://harbour-project.org
 *
 */

    ? win_UuidCreateString()

    RETURN

dimanche 26 août 2012

Comptabilité sous Linux

Introduction
MC Hobby grandit... et le besoin en comptabilité aussi!
Maintenir la comptabilité sur Calc d'Open Office commence à devenir un vrai challenge.
En effet, la quantité d'information devient vraiment très importante et OpenOffice Calc présente ses limites non pas sur la quantité d'information mais sur l'interface graphique permettant d'y accéder... la vue sous forme de tableau à aussi ses contrainte... et donc ses limites.
Nous partons donc à la recherche d'une vrai solution comptable fonctionnant sous Ubuntu... pour rappel, MC Hobby est encore entièrement "Open-Source".  

La solution pour MC Hobby
Besoins de MC Hobby
Le logiciel sélectionné doit répondre à nos besoins... mais les besoins de MC Hobby ne sont bien entendu pas ceux d'une PME de taille moyenne. C'est une précision importante que vous devez connaître si vous désirez vous inspirez de notre expérience.

Le logiciel doit répondre à nos besoins comptables et gestion de stock et eventuellement facturation (notre facturation client est prise en charge par notre WebShop www.mchobby.be).
MC Hobby est une petite société de deux personnes avec activité à temps partiel.

Logiciel sélectionné par MC Hobby 
Pour le moment, nous évaluons les différentes options (moi et mon épouse qui est "comptable").
Dès que celle-ci sera fixée, nous compléterons cette section avec notre choix.

Etat du marché des soft de comptabilité
Une petite recherche sur le NET m'indique qu'une option sous Ubuntu n'est pas si désespérée que cela.

Groupe de travail Comptabilité de l'APRIL
Pour commencer, j'aimerai mentionner le groupe de travail de l'April relatif à la gestion de la comptabilité en Open-Source.

http://wiki.april.org/w/Comptabilite

Il présente déjà un certain nombre d'options dont phpCompta (http://www.phpcompta.eu/) disponible en live démo. (user=demo , password=demo)

CommentCaMarche.Net
Ce fil de discussion relatif aux logiciel comptable sous Linux est également une source d'information intéressante.

Le commentaire  ci-dessous me laisse a penser que Laurux est un outil a tester. Il est d'ailleurs repris dans la liste des softs de l'APRIL (mentionné ci-dessus)

"Sans hésiter après avoir TOUT passé en revu:: http://www.laurux.fr/"


LinuxFR.org
L'article "Commercial Comptabilité sous linux... état des lieux" reprend également quelques références.
C'est en fait ma toute première source d'information.

Parmi les différents liens, j'ai trouvé Eurogiciel (Free Gica), en jetant un coup d'oeil sur le site, je suis tombé sur une news relative à InterVat et une mise-à-jour du logiciel pour supporter les modifications de format. Information très intéressante pour un Belge, cela signifiant sur le fond que le logiciel Gica pourrait fort bien convenir pour notre comptabilité 

jeudi 23 août 2012

QR-Code - IPad Mobile tag - Unitag.fr et QL-570

Introduction
Cet article va se concentrer sur la production de QR-Code (QRCode) sur une imprimante Brother QL-570.
Cela est possible à l'aide du soft & SDK P-Touch mais demande un minimum de formalisme.

Logiciel P-Touch pour QL-570
Le programme gratuit P-Touch editor de Brother permet de faire le design d'étiquette incluant un code barre.
Par la suite, il sera possible d'utiliser le SDK pour modifier le contenu du QR-Code (voir autre article).
Parmi les code barre supporté, j'ai déjà aborder le EAN128 (voir autre article) mais il est aussi possible de concevoir des QR-Code.

Lire le QR-Code
Sur IPad, il existe l'application "MobileTag" qui permet de lire des QR Code.
Il est également possible de générer des QR-Code depuis Internet depuis le site www.unitag.fr (référence exceptionnelle) très bien pour faire des premier tests de MobileTag.
Je constate assez vite qu'il est possible de produire des tags de type URL et adresse e-mail.
Testé avec la combinaison unitag.fr + MobileTag, un Tag URL fonctionne immédiatement.
Par contre, mon premier QR-Code avec adresse e-mail produit depuis P-Touch ne fonctionne pas comme attendu (snif).

Encoder un QR-Code
Après quelques recherches, j'ai trouvé cette excellente référence sur Google Code.
Comment encoder du contenu (e-mail, url, etc)

P-Touch QR-Code
Pour encoder un QR de type URL:
Simplement taper l'URL en la faisant précéder du protocole "http://". J'ai utiliser le code de contrôle LF en fin d'URL (il suffit de taper la touche [enter] en fin d'URL).
Ce qui produit:

Pour encoder un e-mail:
Se fait à l'aide de la structure:
MAILTO:email@ledomaine.be?subject=test&body=letexte

Malheureusement, je ne suis pas arrivé à obtenir un résultat intéressant même en produisant le tag depuis unitag.fr.

Ressources

mercredi 22 août 2012

Clipper: Comment imprimer un Code barre avec une imprimante HP

Introduction
Nous disposons d'un vieux soft Clipper que j'ai migré en multi-poste sur une DB PostGreSql.
A peine croyable, grâce à Mediator et aux projets Open-Sources Harbour et PostGreSql, ce logiciel connait une seconde vie.

Nous imprimons nos notes d'envoi sur une imprimante HP (LasetJet P2055), ce qui permet de faire quelques formatages en utilisant le language PCL toujours supporté en 2012 :-)

L'étape suivante consiste à imprimer un Code barre sur la note d'envoi pour automatiser le processus de préparation et suivit de Colis.
Figurez-vous que grâce à PCL, cela est possible, sous Clipper SANS UTILISER DE CARTE MEMOIRE IMPRIMANTE stockant les fonts.

J'ai trouver un très vieux code sur OASIS permettant de générer du BarCode39 en PCL.
Cela est bien suffisant pour de nombreux cas d'utilisation et lisible par de nombreux scanner!

Après quelques modifications du programme et l'écriture de compile.bat (pour compiler sous Harbour + Visual Studio 2008), j'ai réussi à générer le PCL correspondant au BarCode dans un fichier grâce à l'instruction SET ALTERNATE... voir le contenu du fichier BarCodeHPFile.txt

Quelques-manipulation à l'aide de PSPAD (qui supporte le mode binaire) m'aura permi d'intégrer le code barre à l'endroit approprié d'une note d'envoi... Hé HOP... imprimé :-)
Avec l'aimable autorisation de
la société Guy Gerard SPRL

Code Source
J'ai reconstitué une archive avec le code source modifié.
C'est un peu brouillon car toujours à l'état de prototype mais cela compile et fonctionne parfaitement.
Le code génère une fichier BarCodeHPFile.txt contenant le PCL code pour le code barre (intégré dans l'image ci-dessus) :-)

Le code source: BarCode39HpPcl.zip

Compile.bat permet de compiler le programme avec Harbour-Project (version 30) et utilise Visual Studio Express 2008.
Il faut absolument démarrer la compilation "compile.bat" depuis un "prompt visual studio 2008" (Start Menu | Programmes | Visual Studio 2008 Express edition | utilities ... ou quelque-chose de très similaire)

PSPad (encore Open-Source) est un outil pratique vous permettant de visualiser facilement le contenu du fichier généré... il support un affichage de fichier Binaire ainsi que les opérations de copier/couper/coller bien nécessaire  pour faire ce type de prototypage :-)

Crédits
  • Merci à Bill Wood  Milwaukee pour le code en VB, 1985
  • Merci à George T. Neill pour la source Clipper (portage)... probablement en 1989
Comme quoi, même du code écrit en 1985 peut toujours être exploité 2012

jeudi 9 août 2012

Clipper: fonctions de traitement des dates

Rien de tel qu'une bonne référence.... voici une liste des fonctions permettant de traiter les dates en Clipper (et Harbour).

TRUE || FALSE       BETWEEN(<TargetData>, <FirstData>, <SecondData>)
cDayName            CDOW(<dExp>)
cMonth              CMONTH(<dDate>)
dDate               CTOD(<cDate>)
dSystem             DATE()
nDay                DAY(<dDate>)
nDay                DOW(<dDate>)
cDate               DTOC(<dDate>)
cDate               DTOS(<dDate>)
lEmpty              EMPTY(<exp>)
dDate               FT_ACCTADJ( [ <dGivenDate> ], [ <lIsEnd> ] )
aDateInfo           FT_ACCTMONTH( [ <dGivenDate> ], [ <nMonthNum> ] )
aDateinfo           FT_ACCTQTR( [ <dGivenDate> ], [ <nQtrNum> ] )
aDateInfo           FT_ACCTWEEK( [ <dGivenDate> ], [ <nWeekNum> ] )
aDateInfo           FT_ACCTYEAR( [ <dGivenDate> ] )
nTrueDays           FT_ADDWKDY( <dStart>, <nWorkDays> )
aRetVal             FT_CALENDAR ( [ <nRow> ], [ <nCol> ], [ <cColor> ], [ <lShadow> ] , [ <lShowHelp> ] )
cMILTIME            FT_CIV2MIL( <cCIVTIME> )
aDateInfo           FT_DATECNFG( [ <cFYStart> ], [ <nDow> ] )
aDateInfo           FT_DAYOFYR( [ <dGivenDate> ], [ <nDayNum> ], [ <lIsAcct> ] )
nDays               FT_DAYTOBOW( [ <dGivenDate> ] )
<nResult>           FT_DOY( <dDate> )
dEdate              FT_EASTER( <xYear> )
nMINUTES            FT_ELAPMIN( <cTIME1>, <cTIME2> )
aTimedata           FT_ELAPSED([ <dStart> ], [ <dEnd> ], ; <cTimeStart>, <cTimeEnd>)
cDiff               FT_ELTIME( <cTime1>, <cTime2> )
dFirstDay           FT_FDAY( [ <dDateToChk> ] )
dLastDay            FT_LDAY( [ <dDateToChk> ] )
dDate               FT_MADD( [ <dGivenDate> ], [ <nAddMonths> ], [ <lMakeEOM> ] )
dMILTIME            FT_MIL2CIV( <cCIVTIME> )
nMINUTE             FT_MIL2MIN( <cMILTIME> )
aDHM_               FT_MIN2DHM( <nMinutes> )
cMILTIME            FT_MIN2MIL( <nMINUTE> )
aDateInfo           FT_MONTH( [ <dGivenDate> ], [nMonthNum] )
aDateInfo           FT_QTR( [ <dGivenDate> ], [ <nQtrNum> ] )
cMILTIME            FT_SYS2MIL()
aDateinfo           FT_WEEK( [ <dGivenDate> ], [ <nWeekNum> ] )
nDays               FT_WORKDAYS( [ <dStart> ], [ <dStop> ] )
<nResult>           FT_WOY( <dDate> )
aDateInfo           FT_YEAR( [ <dGivenDate> ] )
dLarger             MAX(<nExp1>, <nExp2>) --> nLarger MAX(<dExp1>, <dExp2>)
dSmaller            MIN(<nExp1>, <nExp2>) --> nSmaller MIN(<dExp1>, <dExp2>)
nMonth              MONTH(<dDate>)
NIL                 QOUT([<exp list>]) --> NIL QQOUT([<exp list>])
nSeconds            SECONDS()
NIL                 SLEEP(<nSec>)
cTimeString         TIME()
cFormatString       TRANSFORM(<exp>, <cSayPicture>)
cType               TYPE(<cExp>)
cType               VALTYPE(<exp>)
nYear               YEAR(<dDate>)