ATOUTFOX
    COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO

Forum AtoutFox

Le forum AtoutFox

Forum

RSS © www.atoutfox.org - Forum

Re: dbalias()
Francis,

Absolument, dbc() donne le correcte reponse, dbalias() donne que le nom du dbc, et fullpath(dbalias()) donne une, a mon opinion, fause information.
Cordialement,
Koen


Sun, 25 Jun 2017 08:57:18 GMT

Re: dbalias()
hummm....

dbalias() = database alias = le nom de la database ouverte
dbc() = Returns the name and path of the current database

dbalias() = JUSTSTEM(dbc()) = le nom de la database ouverte

bonnne lecture

Koen avait écrit le 2017-06-24 :
> Francis,

> Absolument, dbc() donne le correcte reponse, dbalias() donne que le nom du
> dbc, et fullpath(dbalias()) donne une, a mon opinion, fause information.
> Cordialement, Koen

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé

---
This email has been checked for viruses by AVG.
http://www.avg.com

Sat, 24 Jun 2017 08:57:18 GMT

Re: dbalias()
Bonjour Koen,

regarde :
[vfp]
? DBC()
[/vfp]

Cordialement
Francis


Sat, 24 Jun 2017 08:57:18 GMT

Re: dbalias()
Bonjour,

Voir fiche / impression du debugger ici:

http://www.cjoint.com/c/GFygBp0nvNW

Cordialement,
Koen



Sat, 24 Jun 2017 08:57:18 GMT

Re: dbalias()
tu peux envoyé un lien avec cjoint.com et on pourra visualiser ton jpg
:
> Francis,
> Comment envoyer une .jpg ici en forum ?
> Cordialement,
> Koen

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé

---
This email has been checked for viruses by AVG.
http://www.avg.com

Fri, 23 Jun 2017 08:57:18 GMT

Re: dbalias()
Koen : fonction non disponible actuellement
Mais bientôt...

Le ven. 23 juin 2017, 15h33 Koen a écrit :
> Francis,
> Comment envoyer une .jpg ici en forum ?
> Cordialement,
> Koen



Fri, 23 Jun 2017 08:57:18 GMT

Re: dbalias()
Francis,
Comment envoyer une .jpg ici en forum ?
Cordialement,
Koen


Fri, 23 Jun 2017 08:57:18 GMT

Re: dbalias()
Koen,
a) rien a voir avec DBALIAS()
car si pas de DBC DBALIAS() retourne ""

b) FULLPATH()
[vfp]
? FULLPATH("")
[/vfp]

selon la documentation :
"
If the file cannot be located in the Visual FoxPro path, FULLPATH( ) returns the current directory the path and file name as if the file was located in the current default directory.
"

Donc semble "normal"

Cordialement
Francis





Le ven. 23 juin 2017, 13h45 Koen a écrit :
> Bojnour,
> le Help, VFP Edition v.1.07 indique que DBALIAS() routourne le nome du database in use.
> J'ai trouver que FULLPATH(DBALIAS()) retourne, même, quand il n'est pas encore ouverture d'une database une part du set('path') soit quand une database est in use une part du path et le nom du database -> totalement par erreur et pas le correct fullpath + nom du database.
> Cordialement,
> Koen



Fri, 23 Jun 2017 08:57:18 GMT

dbalias()
Bojnour,
le Help, VFP Edition v.1.07 indique que DBALIAS() routourne le nome du database in use.
J'ai trouver que FULLPATH(DBALIAS()) retourne, même, quand il n'est pas encore ouverture d'une database une part du set('path') soit quand une database est in use une part du path et le nom du database -> totalement par erreur et pas le correct fullpath + nom du database.
Cordialement,
Koen


Fri, 23 Jun 2017 08:57:18 GMT

Re: dbalias()
et non translate ca donne quoi....
:
> Bojnour,
> le Help, VFP Edition v.1.07 indique que DBALIAS() routourne le nome du
> database in use. J'ai trouver que FULLPATH(DBALIAS()) retourne, même, quand
> il n'est pas encore ouverture d'une database une part du set('path') soit
> quand une database est in use une part du path et le nom du database ->
> totalement par erreur et pas le correct fullpath + nom du database.
> Cordialement, Koen

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé

---
This email has been checked for viruses by AVG.
http://www.avg.com

Fri, 23 Jun 2017 08:57:18 GMT

Re: Quid du respect des conditions fiscales et l=c3=a9gales des logiciels de gestion commerciale et ou de caisse =3f
Bonjour,

effectivement c'est ce que semble indiquer le communiqué de presse de notre ministre..
Cependant deux bémols:
1 - il faut un autre décret avant le 01-01-2018 pour annuler ou modifier celui existant et pour le moment TOUJOURS a appliquer. Le législateur aura-t-il le temps d'ici la fin de l'année de produire ce nouveau décret et les modifications de la loi qui en découlent ?
2 - Tous les logiciels de gestion commerciale et de vente qui incluent une gestion de caisse seront toujours au moins pour le module de caisse à certifier
3 - La notion de caisse est encore floue. Les services de l'état doivent m'indiquer si la notion de caisse se limite strictement à encaisser des montants financiers à partir d'un simple ticket de caisse (donc sans facture) ? Les premiers échanges par courriel semble percevoir la notion de caisse comme l'encaissement de règlements en espèces sur ticket ou sur facture

Cordialement
GLS


Thu, 22 Jun 2017 08:57:18 GMT

Re: Exécuter un script python depuis VFP
D'après l'aide,
run utilise cmd.exe
run /n utilise ShellExecute()

[vfp]
The RUN command (without /N parameter) uses the following sequence order to determine which program to use when executing the specified RUN command:

Named PIF file - if the program you specify in RUN does not have an extension, Visual FoxPro first looks for a Program Information File (PIF) with the name you specify. If the PIF file is found, the program specified in the PIF is executed with the PIF parameters.

FOXRUN.PIF file - if a Named PIF file can not be found, the RUN command searches for the default Foxrun.pif file. If this file is found, the program specified in Foxrun.pif is executed with the PIF parameters.

COMSPEC Environment Variable - if no PIF file is found which meets the above criteria, the RUN command uses the SHELL program specified by the Windows operating system COMSPEC environment variable. This variable typically points to Cmd.exe, however, in older operating systems such as Windows 98, it will point to Command.com.
[/vfp]



Tue, 20 Jun 2017 08:57:18 GMT

Re: Quid du respect des conditions fiscales et l=c3=a9gales des logiciels de gestion commerciale et ou de caisse =3f
Bonjour

La loi va semble t il évoluer pour ne plus concerner que les logiciels
de caisse... ce qui change grandement les choses...

http://proxy-pubminefi.diffusion.finances.gouv.fr/pub/document/18/22503.pdf

Cédric




Le 16/11/2016 à 19:06, GLS a écrit :
> Quid de vos choix pour le respect des conditions fiscales et légales des logiciels de gestion commerciale et ou de caisse ?
>
> La loi http://bofip.impots.gouv.fr/bofip/10691-PGP.html?identifiant=BOI-TVA-DECLA-30-10-30-20160803
>
> Extrait de la loi:
> ----------------------
> TVA - Régimes d'imposition et obligations déclaratives et comptables - Obligations d'ordre comptable - Obligation d'utiliser un logiciel de comptabilité ou de gestion ou un système de caisse satisfaisant à des conditions d'inaltérabilité, de sécurisation, de conservation et d'archivage des données en vue du contrôle de l'administration fiscale
>
> Les données concernées:
> Il s'agit de toutes les données qui concourent directement ou indirectement à la réalisation d'une transaction (y compris lorsque la transaction n'est que simulée au moyen d'un module de type « école » ou « test ») participant à la formation des résultats comptables et fiscaux
> - qu'il s'agisse d'une opération de vente ou d'une prestation de services (émission d'une note, d'un ticket, d'une facture), ainsi que de toutes les données liées à la réception (immédiate ou attendue) du paiement en contrepartie.
> Sont également concernées l'ensemble des données permettant d'assurer la traçabilité de ces données concourant à la réalisation de la transaction et de garantir l'intégrité de celles-ci.
> Pour plus de précisions, il convient de se reporter au BOI-BIC-DECLA-30-10-20-40.
>
> Nature des conditions à respecter:
> Les conditions d'inaltérabilité, de sécurisation, de conservation et d'archivage des données du logiciel de comptabilité ou de gestion ou du système de caisse doivent permettre à l'administration fiscale de contrôler les données enregistrées. Le logiciel ou le système doit donc prévoir un accès de l'administration fiscale à l'ensemble des données enregistrées.
> Lorsque le logiciel ou système sert à la tenue de la comptabilité de l'entreprise, celle-ci est soumise, en application du I de l'article L. 47 A du LPF, aux normes fixées par arrêté du ministre chargé du budget pour la remise des fichiers des écritures comptables. Pour plus de précisions, se reporter au BOI-CF-IOR-60-40.
>
> 1. Condition d'inaltérabilité
> -------------------------------------
> Le logiciel de comptabilité ou de gestion ou le système de caisse doit enregistrer toutes les données d'origine relatives aux règlements. Il doit conserver ces données d'origine enregistrées et les rendre inaltérables.
> Si des corrections sont apportées à des opérations de règlement, que ce soit au moyen du logiciel ou système lui-même ou d'un dispositif externe au logiciel ou système, ces corrections (modifications ou annulations) s'effectuent par des opérations de « plus » et de « moins » et non par modification directe des données d'origine enregistrées.
> Ces opérations de correction donnent également lieu à un enregistrement.
> Autrement dit, le logiciel de comptabilité ou de gestion ou le système de caisse doit prévoir que l'administration fiscale puisse accéder aux données d'origine enregistrées initialement ainsi qu'au détail daté (année, mois, jour, heure, minute) des opérations et des corrections apportées lorsque ces données ont fait l'objet de corrections.
> S'agissant des éventuelles corrections et annulations apportées par le logiciel ou le système ou par un dispositif externe, il est rappelé que les entreprises sont soumises aux obligations comptables suivantes :
> - principe du caractère intangible ou de l'irréversibilité des écritures comptables ;
> - principe d'une procédure de clôture périodique des enregistrements chronologiques ;
> - principe de la permanence du chemin de révision.
> Pour respecter la condition d'inaltérabilité, l'intégrité des données enregistrées doit être garantie dans le temps par tout procédé technique fiable.
>
> 2. Condition de sécurisation
> ----------------------------------------
> Le logiciel de comptabilité ou de gestion ou le système de caisse doit sécuriser les données d'origine, les données de modifications enregistrées et les données permettant la production des pièces justificatives émises.
> Cette sécurisation peut être assurée par tout procédé technique fiable, c'est-à-dire de nature à garantir la restitution des données de règlement dans l'état de leur enregistrement d'origine. Il peut notamment s'agir d'une technique de chaînage des enregistrements ou de signature électronique des données.
> L'emploi d'une fonction « école » ou « test » destinée à l'enregistrement d'opérations de règlement fictives aux fins de formation du personnel doit être sécurisé, par une identification très claire des données de règlement,
> des pièces justificatives (par exemple en apposant la mention « factice » ou « simulation » en trame de fond de ces documents) et de toutes les opérations enregistrées lors de l'utilisation de cette fonction, ainsi que par l'identification de l'opérateur sous la responsabilité duquel le personnel en formation enregistre les données.
>
> 3. Condition de conservation
> -----------------------------------------
> Le logiciel de comptabilité ou de gestion ou le système de caisse qui enregistre les données de règlement doit prévoir une clôture. Cette clôture doit intervenir à l'issue d'une période au minimum annuelle (ou par exercice lorsque l'exercice n'est pas calé sur l'année civile).
> Les systèmes de caisse doivent, de plus, prévoir obligatoirement une clôture journalière et une clôture mensuelle. Pour chaque clôture - journalière, mensuelle et annuelle (ou par exercice) - des données cumulatives et récapitulatives, intègres et inaltérables, doivent être calculées par le système de caisse,
> comme le cumul du grand total de la période et le total perpétuel pour la période comptable.
> Toutes les données mentionnées au I-A-3 § 50 doivent être conservées. Cette obligation de conservation porte sur toutes les données enregistrées ligne par ligne, ainsi que pour les systèmes de caisse, sur les données cumulatives et récapitulatives calculées par le système (cf. I-B-3 § 170).
> Cette conservation est opérée, soit en ligne, c'est-à-dire dans le logiciel ou système, soit dans une archive dans le respect des conditions d'archivage détaillées au I-B-4 § 220 à 260.
> Les données de règlement étant des données servant à l'établissement de la comptabilité de l'entreprise, elles doivent être conservées pendant le délai de six ans prévu au premier alinéa de l'article L.102 B du LPF. Se reporter au BOI-BIC-DECLA-30-10-20-40 pour plus de précisions.
> Lorsque l'assujetti utilise un système de caisse centralisé avec remontée des données de règlement depuis des points de vente vers un système centralisateur, la conservation des données enregistrées ligne par ligne et la conservation des données cumulées peut être réalisée au niveau du système centralisateur,
> à condition qu'une traçabilité de la remontée des données de règlement des points de vente vers le système centralisateur soit prévue. Cette traçabilité doit permettre à l'administration de vérifier l'exhaustivité du flux des données transférées.
>
> 4. Condition d'archivage
> ----------------------------------
> Le logiciel de comptabilité ou de gestion ou le système de caisse doit permettre d'archiver les données enregistrées selon une périodicité choisie, au maximum annuelle ou par exercice.
> La procédure d'archivage a pour objet de figer les données et de donner date certaine aux documents archivés.
> Elle doit prévoir un dispositif technique garantissant l'intégrité dans le temps des archives produites et leur conformité aux données initiales de règlement à partir desquelles elles sont créées.
> Les archives peuvent être conservées dans le système lui-même ou en dehors du système lorsqu'il existe une procédure de purge.
> Les archives doivent pouvoir être lues aisément par l'administration en cas de contrôle, y compris lorsque l'entreprise a changé de logiciel ou de système.
> Le logiciel ou système doit prévoir une traçabilité des opérations d'archivage, selon un procédé fiable.
> Au-delà de la périodicité choisie et au maximum annuelle ou par exercice, le logiciel ou le système peut prévoir une procédure de purge des données de règlement.
> Avant la mise en ouvre de cette procédure de purge, le logiciel ou le système doit garantir la production d'une archive complète des données de règlement (données d'origine et éventuelles modifications), avec la date de l'opération de règlement (année - mois - jour), sur un support physique externe sécurisé.
> Pour les systèmes de caisse, la purge n'est que partielle : le système doit conserver dans un état sécurisé « en ligne », c'est-à-dire dans le système lui-même, les données cumulatives et récapitulatives contenues dans le grand total de la période et le total perpétuel pour la période dont les données ont été purgées.
>
> --------------------------------------------------------
> Mes questions aux lecteurs d'AtoutFox:
> --------------------------------------------------------
> 1 Condition d'inaltérabilité: Les données sont stockées dans des tables VFP. Comment pensez-vous rendre inaltérable les données par vos applications VFP, par des applications logicielles tierces ?
>
> 2-3 Condition de sécurisation et Condition de conservation: Les données sont stockées dans des tables VFP. Comment pensez-vous sécuriser les données par vos applications VFP ? Utilisation d'une signature électronique dont le résultat est stocké dans un champ MEMO.
> Et pour quelles données ? (uniquement les règlements, les journaux de caisse, de clôture journalière, mensuelle et annuelle, les factures, autres??)
>
> 4 Condition d'archivage: Comment pensez-vous effectuer les opérations d'archivage qui consistent à purger de la base en cours les données qui précèdent l'exercice en cours ? Vers un ou plusieurs fichiers à 'plat', xml, dbf, pdf ? A stocker sur le cloud, autres ? A crypter ?
>
>
> Un grand merci a tous ceux qui auront le courage d'apporter des éléments de réflexion ou de réponses.
>
> Bien cordialement
> GLS
>
>

Tue, 20 Jun 2017 08:57:18 GMT

Re: Exécuter un script python depuis VFP
merci Robert

avant de me lancer dans ces API, je vais tenter de déboguer / mettre au point comme l'explique ma réponse à Jean

run sans '/n' étant synchrone, ça devrait me suffire car le script va écrire le résultat dans un fichier texte à un endroit convenu.


Tue, 20 Jun 2017 08:57:18 GMT

Re: Exécuter un script python depuis VFP
merci Jean

non seulement ça fonctionne et en prime python a le bon goût d'afficher les erreurs dans la fenêtre de commande

une fois que ce sera débogué, je tenterai la même opération depuis VFP avec RUN et là on sera fixés.

à suivre donc


Tue, 20 Jun 2017 08:57:18 GMT

Re: Exécuter un script python depuis VFP
Bonsoir Thierry,

la commande "RUN" de VFP effectue un appel api à ShellExecute...

Si tu veux un appel synchrone (attente du programme) tu peux essayer avec Wscript.shell
regarde dans les exemples de Mike :
http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000099
(le dernier)
en 2 lignes ce doit être ok : le paramétre important pour le synchrone est le 3eme de la méthode "Run"

Cordialement
Francis


Le mar. 20 juin 2017, 15h53 FoxInCloud a écrit :
> bonjour,
>
> J'ai besoin d'exécuter un script python de manière synchrone (pour obtenir le résultat).
>
> Je n'utilise pas ShellExecute car je veux une exécution SYNCHRONE.
>
> Ne trouvant rien dans la doc python, j'ai essayé:
>
> [vfp]
> run 'C:\Users\ThierryNivelet\AppData\Local\Programs\Python\Python36-32\python.exe "PodboxXmlParser.py"'
> [/vfp]
>
> où:
> - 'C:\Users\ThierryNivelet\AppData\Local\Programs\Python\Python36-32\python.exe' est l'adresse de l'interpréteur python
> - "PodboxXmlParser.py" est le nom du script à exécuter.
>
> j'ai ajouté quelques instructions pour écrire un laius dans un fichier texte mais, hélas, comme sour Anne je ne vois rien venir:
> f = open("C:\.\pod_box_xml_parser\test.txt")
> f.write("test")
> f.close()
>
> Une idée?
> Merci par avance
>
>
> .
>



Tue, 20 Jun 2017 08:57:18 GMT

Re: Exécuter un script python depuis VFP
Salut Thierry,

Le problème ne me semble pas lié à Python. Pour mon compte et pour avoir un retour synchrone je me suis fabriquer 2 ou 3 procedures qui utilisent les fonctions CreateProcess, GetExitCodeProcess, sleep et TerminateProcess de win32API.
L'idée étant que CreateProcess te donne (au travers d'une structure de retour) le n° du process que tu viens de lancer et que la fonction GetExitCodeProcess te permet d'interroger périodiquement le statut de ton process (en_cours, terminé, erreur, ...). Il faut prendre soin de gérer un timeout au bout duquel tu tue le process (si jamais tu boucles - mais cela n'arrive jamais!).

Robert


Tue, 20 Jun 2017 08:57:18 GMT

Re: Exécuter un script python depuis VFP
Bonjour Thierry,

si, dans le fenêtre de commande, tu te mets dans le répertoire de l'appli VFP
(CD C:\users ...) et que tu executes la même commande que dans VFP, cela
fonctionne ?

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Tue, 20 Jun 2017 08:57:18 GMT

Exécuter un script python depuis VFP
bonjour,

J'ai besoin d'exécuter un script python de manière synchrone (pour obtenir le résultat).

Je n'utilise pas ShellExecute car je veux une exécution SYNCHRONE.

Ne trouvant rien dans la doc python, j'ai essayé:

[vfp]
run 'C:\Users\ThierryNivelet\AppData\Local\Programs\Python\Python36-32\python.exe "PodboxXmlParser.py"'
[/vfp]

où:
- 'C:\Users\ThierryNivelet\AppData\Local\Programs\Python\Python36-32\python.exe' est l'adresse de l'interpréteur python
- "PodboxXmlParser.py" est le nom du script à exécuter.

j'ai ajouté quelques instructions pour écrire un laius dans un fichier texte mais, hélas, comme sour Anne je ne vois rien venir:
f = open("C:\.\pod_box_xml_parser\test.txt")
f.write("test")
f.close()

Une idée?
Merci par avance


Tue, 20 Jun 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8

Felix a couché sur son écran :
> Guy bonjour
> Prière m'envoyer votre procédure avec les indications cad là où l'intégrer.
>
>
>
> ---
> Cet email a fait l'objet d'une analyse antivirus par AVG.
> http://www.avg.com

Félix
Voici la proc popbr.txt
J'ai mis qqes notes en début de fichier.

Emplacement en fonction de ton programme mais avant l'affichage
de tes résultats, formulaires, vue etc..
En début de fichier, j'ai placé 2 appels d'une table (agent)bcontenantde simple nom+prénom le formulaire ou la vue est alimenté par les autrechamps de la table.
Je pense qu'il serait judicieux d'utiliser les vues et de dessiner tonformulaire et les outils tels liste déroulantes ou autres. Le temps
d'aprentissage vaut l'effort a consentir.(j'y suis passé aussi)
A+

--Guy BONEMME
Atoutfox
BEfox

Thu, 15 Jun 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
Guy bonjour
Prière m'envoyer votre procédure avec les indications cad là où l'intégrer.


Wed, 14 Jun 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
Felix vient de nous annoncer :
> Bonsoir Jean
> Merci d'avance pour vos efforts à nous aider pour cette migration.
> J'ai suivi vos instruction et j'ai pu passer l'étape SET LIBRAIRY donc j'ai
> utilisé les instructions suivantes:
>
> SET PROCEDURE TO JKEY.FLL ADDITIVE
> SET PROCEDURE TO CASES.FLL ADDITIVE.
>
> Maintenant un autre problème pour les écrans qui utlisent un liste browse
> dans laquelle il faut une sélection. A ce niveau c'est une fonction qui ne
> marche pas: =JKEYINIT("A","","*",""). A l'aide de la touche F5 le browse
> s'ouvre et on a la possibilité de sélectionner une ligne.
>
>
>
> ---
> Cet email a fait l'objet d'une analyse antivirus par AVG.
> http://www.avg.com

Bonjour,
Si mes souvenir sont exact, jkey est un programme de recherche
dichotomique pour un menu déroulant. Il souffre d'un pb de vitesse
lors de l'introduction des caractères recherchés ainsi que du nombre
limité à 3 ou 4, sur les PC modernes rapide son usage est frustant.
Perso j'ai remplacé ce dernier par une procédure ou la recherche attend
la validation par enter.(je peux la transmettre)
ou autre solution créer le menu déroulant dans la vue avec les outils
de fox.
a+

--
Guy BONEMME
Atoutfox
BEfox
Wed, 14 Jun 2017 08:57:18 GMT

Re: migrer une application développée en FPW26\foxprow.EXE vers VFP98\VFP6.EXE
As-tu créé un projet sous VFP6 pour compiler ton application ?

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Wed, 14 Jun 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
Bonsoir Felix,
tout d'abord, il faudrait ecrire, à condition que les fichiers jkey.prg et
cases.prg existent :
SET PROCEDURE TO JKEY.PRG ADDITIVE
SET PROCEDURE TO CASES.PRG ADDITIVE

cela peut être optimisé en
SET PROCEDURE TO JKEY.PRG, CASES.PRG ADDITIVE


Ensuite, il faut être plus précis, pourquoi la fonction JKEYINIT ne fonctionne
pas ? Il y a un message d'erreur ? est-ce que la fonction jkeyinit existe dans
jkey.prg ou dans un autre fichier .prg inclus dans un SET PROCEDURE ou bien
existe-t-il un jkeyinit.prg ?

A+
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Tue, 13 Jun 2017 08:57:18 GMT

Migration Foxpro2.6 à VFP8
Bonsoir Jean
Merci d'avance pour vos efforts à nous aider pour cette migration.
J'ai suivi vos instruction et j'ai pu passer l'étape SET LIBRAIRY donc j'ai utilisé les instructions suivantes:

SET PROCEDURE TO JKEY.FLL ADDITIVE
SET PROCEDURE TO CASES.FLL ADDITIVE.

Maintenant un autre problème pour les écrans qui utlisent un liste browse dans laquelle il faut une sélection.
A ce niveau c'est une fonction qui ne marche pas: =JKEYINIT("A","","*","").
A l'aide de la touche F5 le browse s'ouvre et on a la possibilité de sélectionner une ligne.


Tue, 13 Jun 2017 08:57:18 GMT

Re: migrer une application développée en FPW26\foxprow.EXE vers VFP98\VFP6.EXE
bonsoir

n'oublie pas les commmandes suivantes

set defaul to

set default to "c:\monprojet"
ou
set directory to "c:\monprojet"

set path to "data;form;progs;...." additive


pour connaitre ou tu te situes

curdir() pour les vielles versions
Set("directory") pour l'emplacement de travail de l'application
set("path") pour connaitres les sous répertoires

bonne soirée



Felix a couché sur son écran :
> J'ai toujours des difficultés à migrer une application développée sous
> FPW26\foxprow.EXE vers VFP98\VFP6.EXE

> Pour migrer j'ai procédé de la manière suivante:
> Modification du raccourci:
> 1. cible = VFP98\VFP6.EXE > 2. démarrer dans = .

> Si je lance l'application j'ai le message suivant
> 'jkey.prg' does not exist de l'instruction SET LIBRARY TO jkey ADDITIVE.
> si on fat ignorer un autre message erreur 'Object file c:\compta\cases.fxp
> was compiled in a different version of foxpro de l'instrcution SET LIBRARY TO
> cases ADDITIVE. Aidez nous à résoudre ce problème s'il vous plait.

--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)

---
This email has been checked for viruses by AVG.
http://www.avg.com

Tue, 13 Jun 2017 08:57:18 GMT

Re: migrer une application développée en FPW26\foxprow.EXE vers VFP98\VFP6.EXE
Bonjour Félix,

est-ce que jkey.prg existe réellement sur le disque dur ? Si oui, est que son
répertoire appartient au PATH (faire ? SET("PATH") dans la fenêtre de commande).

Si tout cela est bon, remplacer SET LIBRARY TO par SET PROCEDURE TO. L'aide
indique :
>You cannot use API libraries built for one version on another version. For
>example, you cannot use libraries built for FoxPro version 2.6 in Visual
>FoxPro. You must recompile and link.
Donc, si jkey.prg est un source (donc pas une librairie compilée), le fait de
mettre SET PROCEDURE provoquera sa compilation dans la bonne version.

Concernant c:\compta\cases.fxp c'est un objet compilé avec une version
précédente et il faut donc le recompiler sous VFP6. Normalement tu devrais avoir
un cases.prg quelque part (a priori dans c:\compta), il faut le recompiler sous
VFP6 (instruction COMPILE cases.prg)

Est-ce que le problème des écrans a avancé ?

A+
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Tue, 13 Jun 2017 08:57:18 GMT

migrer une application développée en FPW26\foxprow.EXE vers VFP98\VFP6.EXE
J'ai toujours des difficultés à migrer une application développée sous FPW26\foxprow.EXE vers VFP98\VFP6.EXE

Pour migrer j'ai procédé de la manière suivante:
Modification du raccourci:
1. cible = VFP98\VFP6.EXE 2. démarrer dans = .

Si je lance l'application j'ai le message suivant
'jkey.prg' does not exist de l'instruction SET LIBRARY TO jkey ADDITIVE.
si on fat ignorer un autre message erreur 'Object file c:\compta\cases.fxp was compiled in a different version of foxpro de l'instrcution SET LIBRARY TO cases ADDITIVE.
Aidez nous à résoudre ce problème s'il vous plait.



Tue, 13 Jun 2017 08:57:18 GMT

Re: Compteur sur un champ formulaire
Merci Monsieur Lévy


Mon, 12 Jun 2017 08:57:18 GMT

Re: Compteur sur un champ formulaire
Bonjour,

si tu es sur un SQL Server 2012 (ou supérieur), regarde l'objet SEQUENCE
https://msdn.microsoft.com/fr-fr/library/ff878091.aspx
[quote]
Une séquence est un objet lié par schéma défini par l'utilisateur qui génère une séquence de valeurs numériques d'après la spécification avec laquelle la séquence a été créée. La séquence de valeurs numériques est générée dans un ordre croissant ou décroissant à un intervalle défini et peut être configurée pour redémarrer (cycle) lorsque épuisée. Les séquences, contrairement aux colonnes d'identité, ne sont pas associées aux tables spécifiques. Les applications font référence à un objet séquence pour extraire sa valeur suivante. La relation entre les séquences et les tables est contrôlée par l'application. Les applications utilisateur peuvent référencer un objet séquence et coordonner les valeurs sur plusieurs lignes et tables.
[/quote]


Fri, 09 Jun 2017 08:57:18 GMT

Compteur sur un champ formulaire
bonjour à tous les Foxeurs
je cherche un code de compteur sur champ formulaire exemple n° de bon de commande, sachez que ma base de données et sur serveur SQL.
Merci.


Fri, 09 Jun 2017 08:57:18 GMT

Re: [HS] WINDEV
Bonjour,

Je n'ai malheureusement pas une grand expérience sur le produit. J'ai eu l'occasion de maintenir une application qui existait déjà, mais je n'ai pas encore eu le temps de me pencher sérieusement sur le sujet.


Tue, 06 Jun 2017 08:57:18 GMT

Re: [HS] WINDEV
bonsoir

vue que tu as Windev peux tu nous donner un p'tit retour (feedback) ton
expérience dans cet environnement

a+ eDDy



Après mûre réflexion, O.Abderrazak a écrit :
> BonjourJean,

> J'ai la licence WINDEV. Je peux essayer de voir ce que je peux faire.

> Abderrazak OMARI.

--
a+ Eddy
Merci de partager avec moi votre immense savoir que je me ferai plaisir
d'absorber... il va de soi que je vais vous en laisser un peu
Politesse et savoir vivre oblige ;0)

---
This email has been checked for viruses by AVG.
http://www.avg.com

Sat, 03 Jun 2017 08:57:18 GMT

Re: [HS] WINDEV
ok,

j'essaie de retouver les fichiers et je te les met sur Dropbox.

Merci beaucoup,
Jean

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Fri, 02 Jun 2017 08:57:18 GMT

Re: [HS] WINDEV
BonjourJean,

J'ai la licence WINDEV. Je peux essayer de voir ce que je peux faire.

Abderrazak OMARI.


Fri, 02 Jun 2017 08:57:18 GMT

[HS] WINDEV
Bonjour à tous,

j'ai récupéré une application VFP qui appelle un module de sauvegarde écrit sous
WINDEV. J'ai les sources de ce module mais pas WINDEV. Est-ce que quelqu'un peut
"m'imprimer" les sources WINDEV dans un fichier lisible (blocnote ?) ?

A priori, la sauvegarde se fait sur un serveur FTP, dont il faudrait modifier
les paramètres, ce serait possible dans un deuxième temps ?

Merci d'avance

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Fri, 02 Jun 2017 08:57:18 GMT

Re: migrer une application développée en foxpro2.6 à VFP8
Bonjour Felix,

le bouton recherche, c'est celui qui lance une messagebox "Veuillez choisir le
type de recherche désiré:" avec comme options "N° Entrée;N° Véhicule;N°
Facture;N° Reçu;Abandon" ?

Dans cette procédure, on appelle la procédure all_srch dont on n'a pas le listing.

Je me demande, si cela t'est possible, il ne serait pas interessant de mettre
l'ensemble des sources par exemple dans un 'disque' dropbox ou autre pour que
l'on puisse avoir toutes les billes.

J'ai une inquiétude : cette aplication est utilisée en réseau ?

A+
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Thu, 01 Jun 2017 08:57:18 GMT

migrer une application développée en foxpro2.6 à VFP8
Bonsoir

L'application est développée dans FPW26 avec foxprow.exe.
J'ai mis en place l'icone suivante pour lancer l'application dans le VFP98\vfp6.exe.
La conversion a été automatique mais avec certains problèmes:
Par exemple, le bouton de recherche ne fonctionne pas, en sélectionnant un critère de recherche il sort l'instruction =jkeyinit("A"

Exemple d'un formulaire de saisie des données du ciment

Le fichier .spr généré automatiquement est le suivant:

*- [CONVERTER] New INCLUDE file, with #DEFINEs
#INCLUDE ciment4.h

*- [CONVERTER] Declare variables for record pointers
PUBLIC _iconvChargeGoToPlaceHolder
PUBLIC _iconvContratGoToPlaceHolder
PUBLIC _iconvProduitGoToPlaceHolder
PUBLIC _iconvVehiculeGoToPlaceHolder
PUBLIC _iconvTransporGoToPlaceHolder
PUBLIC _iconvClientGoToPlaceHolder
PUBLIC _iconvDestinaGoToPlaceHolder
PUBLIC _iconvPaysGoToPlaceHolder
PUBLIC _iconvTable1GoToPlaceHolder
PUBLIC _iconvTable2GoToPlaceHolder
PUBLIC _iconvCompteurGoToPlaceHolder
PUBLIC _iconvDollarGoToPlaceHolder
PUBLIC _iconvPeriodeGoToPlaceHolder
PUBLIC _iconvElfGoToPlaceHolder
PUBLIC _iconvPrixGoToPlaceHolder
PUBLIC _iconvPayeGoToPlaceHolder
PUBLIC _iconvRepresGoToPlaceHolder
PUBLIC _iconvFchargeGoToPlaceHolder
PUBLIC _iconvDepartGoToPlaceHolder

EXTERNAL PROC ciment4.scx

DO FORM "ciment4.scx" NAME _4XJ0H331R LINKED

*- [CONVERTER] Begin CLEANUP and other procedures from 2.x Form


PROCEDURE readdeac
IF isediting
ACTIVATE WINDOW 'wz_win'
WAIT WINDOW c_edits NOWAIT
ENDIF
IF !WVISIBLE(WOUTPUT())
CLEAR READ
RETURN .T.
ENDIF
RETURN .F.

PROCEDURE readact
IF !isediting
SELECT (m.wzalias)
SHOW GETS
ENDIF
DO REFRESH
RETURN

PROCEDURE printrec
PRIVATE solderror,wizfname,saverec,savearea,tmpcurs,tmpstr
PRIVATE prnt_btn,p_recs,p_output,pr_out,pr_record
STORE 1 TO p_recs,p_output
STORE 0 TO prnt_btn
STORE RECNO() TO saverec
m.solderror=ON('error')
DO pdialog
IF m.prnt_btn = 2
RETURN
ENDIF

m.pr_out=IIF(m.p_output=1,'TO PRINT PROMPT NOCONSOLE','PREVIEW')
**** m.pr_record=IIF(m.p_recs=1,'NEXT 1','ALL')
m.pr_record='ALL'
** DO PrinTrav.spr
SELECT Fcharge
DELE ALL
SELECT Charge
DO CASE
CASE charge.cod_pro = "CIMENT"
IF Charge.cod_cli = "FORWAR"
DO borbli
ELSE
DO interne
ENDIF
CASE charge.cod_pro = "CIMENTE"
IF Charge.cod_cli = "FORWAR"
DO borbli
ELSE
DO EXTERNE
ENDIF
ENDCASE
SELECT CHARGE
REPLACE cod_imp WITH "O"
SELECT CHARGE
GO m.saverec
RETURN


PROCEDURE btn_val
PARAMETER m.btnfunction
DO CASE

CASE m.btnfunction='TOP'
GO TOP
WAIT WINDOW c_topfile NOWAIT

CASE m.btnfunction='PREV'
IF !BOF()
SKIP -1
ENDIF
IF BOF()
WAIT WINDOW c_topfile NOWAIT
GO TOP
ENDIF

CASE m.btnfunction='NEXT'
IF !EOF()
SKIP 1
ENDIF
IF EOF()
WAIT WINDOW c_endfile NOWAIT
GO BOTTOM
ENDIF

CASE m.btnfunction='END'
GO BOTTOM
WAIT WINDOW c_endfile NOWAIT

CASE m.btnfunction='LOCATE'
IF EOF() OR BOF()
WAIT WINDOW c_endfile NOWAIT
RETURN
ENDIF
DO loc_dlog

CASE m.btnfunction='ADD' AND !isediting &&add record
SELECT charge
isediting=.T.
isadding=.T.
=edithand('ADD')

mton_cha = 0
m.ref_fac = m.sav_ref_fac
m.dat_cha = m.sav_dat_cha
m.ref_cli = m.sav_ref_cli
m.con_pai = m.sav_con_pai
m.heu_ent = time()
m.num_pro = "1"

STOR date() TO m.dat_cha, m.dat_sre, m.dat_fac

SELECT charge

*---- modif SEMA
sprevget=""
_CUROBJ=OBJNUM(m.scnobj1) && avant= 1

*---
DO REFRESH
SHOW GETS
RETURN

CASE m.btnfunction='EDIT' AND !isediting &&edit record
SELECT charge
IF EOF() OR BOF()
WAIT WINDOW c_endfile NOWAIT
RETURN
ENDIF
IF RLOCK()
isediting=.T.

SELECT CHARGE

mton_cha = CHARGE.ton_cha
mcod_cli = CHARGE.cod_cli

*---- modif SEMA
sprevget=""

*=========----- avant, _curobj était 1.
* permet de rester dans l'écran d'où on a demandé la modif.
_CUROBJ=OBJNUM(m.scnobj1)

*=========------
DO REFRESH
RETURN
ELSE
WAIT WINDOW c_nolock
UNLOCK ALL
RETURN
ENDIF

CASE m.btnfunction='SAVE' AND isediting &&save record
SELECT charge
*---- modif SEMA
exe_browse = .F. && sera mis à .T. si un all_srch a été activé
=vld() && refait la validation COMPLETE
IF exe_browse OR !was_fld_valid
RETURN
ENDIF

*-------------
*** Faire appel à la procédure de mise à jour des fichiers

m.sav_ref_fac = m.ref_fac
m.sav_dat_cha = m.dat_cha
m.sav_ref_cli = m.ref_cli
m.sav_con_pai = m.con_pai

DO Majfile

SELECT CHARGE

*** Valeurs à proposer par défaut

m.existe=.F.
=edithand('SAVE')
IF m.existe=.T. AND isadding
RETURN
ENDIF
UNLOCK ALL
isediting=.F.
isadding=.F.

SELECT charge
SCATTER MEMVAR MEMO
SHOW GETS
DO REFRESH
_CUROBJ=OBJNUM(m.add_btn)

CASE m.btnfunction='CANCEL' AND isediting &&cancel record
IF isadding
=edithand('CANCEL')
ENDIF
UNLOCK ALL
isediting=.F.
isadding=.F.
WAIT WINDOW c_ecancel NOWAIT
DO REFRESH

CASE m.btnfunction='DELETE'
IF EOF() OR BOF()
WAIT WINDOW C_ENDFILE NOWAIT
RETURN
ENDIF

IF RLOCK() then
IF fox_alert(c_delrec)

SELECT CLIENT
IF SEEK(m.cod_cli)
REPLACE ton_cde WITH (ton_cde + m.ton_cha)
ENDIF

SELECT CHARGE
DELETE

UNLOCK ALL
SKIP
IF EOF()
WAIT WINDOW c_endfile NOWAIT
GO BOTTOM
ENDIF
ELSE
RETURN
ENDIF
ELSE
??CHR(7)
WAIT WIND "CHARGEMENT EN COURS D'UTILISATION !!! OPERATION IMPOSSIBLE" TIMEOUT 3
RETURN
ENDIF

CASE m.btnfunction='PRINT'
IF EOF() OR BOF()
WAIT WINDOW c_endfile NOWAIT
RETURN
ENDIF
DO printrec
RETURN

CASE m.btnfunction='EXIT'
m.bailout=.T. &&this is needed if used with FoxApp
CLEAR READ
RETURN

OTHERWISE
RETURN
ENDCASE

* place le record en mémoire, et réaffiche le tout

SELECT charge
SCATTER MEMVAR MEMO
SHOW GETS
RETURN


PROCEDURE edithand
PARAMETER m.paction
* procedure de manip des modifs,add,...
DO CASE
CASE m.paction = 'ADD'
SCATTER MEMVAR MEMO BLANK && crée des var. mémoire vides
*==== si nécessaire, créer un 'deleted()' à blanc
*---- ceci pour 'réinitialiser' tous les liens vers les tables
m.actualposi=RECNO() && pour repositionement si abandon
SET DELETED OFF
GOTO TOP
IF DELETED()
BLANK && s'assurer que tout est réinitialisé!
DELETE
ELSE
APPEND BLANK
DELETE
ENDIF
SET DELETED ON && le re-rend 'invisible'

CASE m.paction = 'SAVE'
m.cdernuser=GTuser
m.ddernmodif=date()
IF NOT RLOCK()
RETURN
ENDIF
SELECT charge
IF isadding
INSERT INTO (ALIAS()) FROM MEMVAR && insert SQL!
ELSE
GATHER MEMVAR MEMO && sauver modifs.
ENDIF

CASE m.paction = 'CANCEL'
* return to last record displayed
GOTO m.actualposi
ENDCASE
RETURN

*====== insertion de la gestion de l'affichage des boutons
#INSERT refresh.txt
*======

PROCEDURE fox_alert
PARAMETER wzalrtmess
PRIVATE alrtbtn
m.alrtbtn=2
DEFINE WINDOW _qec1ij2t7 AT 0,0 SIZE 8,50 ;
FONT "MS Sans Serif",10 STYLE 'B' ;
FLOAT NOCLOSE NOMINIMIZE DOUBLE TITLE WTITLE()
MOVE WINDOW _qec1ij2t7 CENTER
ACTIVATE WINDOW _qec1ij2t7 NOSHOW
@ 2,(50-TXTWIDTH(wzalrtmess))/2 SAY wzalrtmess;
FONT "MS Sans Serif", 10 STYLE "B"
@ 6,18 GET m.alrtbtn ;
PICTURE "@*HT \ SIZE 1.769,8.667,1.333 ;
FONT "MS Sans Serif", 8 STYLE "B"
ACTIVATE WINDOW _qec1ij2t7
READ CYCLE MODAL
RELEASE WINDOW _qec1ij2t7
RETURN m.alrtbtn=1


PROCEDURE pdialog
DEFINE WINDOW _qjn12zbvh ;
AT 0.000, 0.000 ;
SIZE 13.231,55.000 ;
TITLE "Microsoft FoxPro" ;
FONT "MS Sans Serif", 8 ;
FLOAT NOCLOSE MINIMIZE SYSTEM
MOVE WINDOW _qjn12zbvh CENTER
ACTIVATE WINDOW _qjn12zbvh NOSHOW
@ 2.846,20.000 SAY "Sortie:" ;
FONT "MS Sans Serif", 8 ;
STYLE "BT"
@ 4.692,20.000 GET m.p_output ;
PICTURE "@*RVN \ SIZE 1.308,12.000,0.308 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "BT"
@ 10.154,16.600 GET m.prnt_btn ;
PICTURE "@*HT Imp\ SIZE 1.769,8.667,0.667 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "B"
ACTIVATE WINDOW _qjn12zbvh
READ CYCLE MODAL
RELEASE WINDOW _qjn12zbvh
RETURN


PROCEDURE loc_dlog
actual_rec=RECNO()
mchoix=wmsgbox("Veuillez choisir le type de recherche désiré:", ;
"Choix du type de recherche","?","N° Entrée;N° Véhicule;N° Facture;N° Reçu;Abandon", ;
'','','','','','','',1)

IF mchoix > 0 && pas d'abandon dans le pop-up
IF mchoix=1
DO all_srch WITH "charge","num_ent","num_ent",'','',"","Chargement, (classés par N° Entrée)", "","","", ;
"num_ent","N° ENTREE", ;
"num_REC:w=GLfaux","N° Reçu", ;
"num_imm:w=GLfaux","N° Camion", ;
"num_fac:w=GLfaux","N° FACTURE", ;
"CLIENT.nom_cli:w=GLfaux","CLIENT"
ELSE
IF mchoix=2
DO all_srch WITH "charge","num_imm","num_imm",'','',"","Chargement, (classés par N° Camion)", "","","", ;
"num_imm","N° Camion", ;
"num_REC:w=GLfaux","N° Reçu", ;
"num_ent:w=GLfaux","N° ENTREE", ;
"num_fac:w=GLfaux","N° FACTURE", ;
"CLIENT.nom_cli:w=GLfaux","CLIENT"
ELSE
IF mchoix=3
DO all_srch WITH "charge","num_fac","num_fac",'','',"","Chargement, (classés par N° FACTURE)", "","","", ;
"num_REC:w=GLfaux","N° Reçu", ;
"num_imm:w=GLfaux","N° Camion", ;
"num_ent:w=GLfaux","N° ENTREE", ;
"num_fac","N° FACTURE", ;
"CLIENT.nom_cli:w=GLfaux","CLIENT"
ELSE
IF mchoix=4
DO all_srch WITH "charge","num_rec","num_rec",'','',"","Chargement, (classés par N° RECU)", "","","", ;
"num_REC","N° Reçu", ;
"num_imm:w=GLfaux","N° Camion", ;
"num_ent:w=GLfaux","N° ENTREE", ;
"num_fac:w=GLfaux","N° FACTURE", ;
"CLIENT.nom_cli:w=GLfaux","CLIENT"
ENDIF
ENDIF
ENDIF
ENDIF
IF LASTKEY() = ik_esc && abandon dans le browse
GOTO (actual_rec)
ENDIF
ENDIF

* déclenchée par F5 sur le champ N° CLIENT:
PROCEDURE pr_val_cli
IF valid_cli()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_cli
DO all_srch WITH "CLIENT","nom_cli","nom_cli", "","","", ;
"Choisir le Code Client","","","", ;
"cod_cli:w=GLfaux","CODE", ;
"nom_cli","NOM CLIENT"
IF LASTKEY() = ik_enter
m.cod_cli=Client.cod_cli
m.non_bic=Client.non_bic
SHOW GET m.cod_cli
ELSE
IF !SEEK(m.cod_cli,'CLIENT')
RETURN .F.
ENDIF
ENDIF
SHOW GET CLIENT.nom_cli
SHOW GET CLIENT.tel_cli
SHOW GET CLIENT.ton_cde
mton_cde = Client.ton_cde
mcod_ind = Client.cod_ind
m.non_bic=Client.non_bic
m.non_per = Client.non_per
m.ref_bve=Client.ref_bve
m.fra_div=ClienT.fra_div
RETURN .T.

* déclenchée par F5 sur le champ code transport:
PROCEDURE pr_val_tra
IF valid_tra()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_tra
DO all_srch WITH "transpor","nom_tra","nom_tra", "","","", ;
"Choisir le Code Transport","","","", ;
"cod_tra:w=GLfaux","CODE", ;
"nom_tra","NOM TRANSPORTEUR"
IF LASTKEY() = ik_enter
m.cod_tra=transpor.cod_tra
SHOW GET m.cod_tra
ELSE
IF !SEEK(m.cod_tra,'transpor')
RETURN .F.
ENDIF
ENDIF
SHOW GET transpor.nom_tra
RETURN .T.

* déclenchée par F5 sur le champ CODE PRODUIT:
PROCEDURE pr_val_pro
IF valid_pro()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_pro
DO all_srch WITH "PRODUIT","cod_pro","cod_pro", "","","", ;
"Choisir le Code Produit","","","", ;
"cod_pro","CODE", ;
"nom_pro:w=GLfaux","NOM PRODUIT"
IF LASTKEY() = ik_enter
m.cod_pro=Produit.cod_pro
SHOW GET m.cod_pro
ELSE
IF !SEEK(m.cod_pro,'produit')
RETURN .F.
ENDIF
ENDIF
SHOW GET Produit.nom_pro
RETURN .T.

* déclenchée par F5 sur le champ CODE REPRESENTANT:
PROCEDURE pr_val_rep
IF valid_rep()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_rep
DO all_srch WITH "REPRES","nom_rep","nom_rep", "","","", ;
"Choisir le Code Representant","","","", ;
"cod_rep:w=GLfaux","CODE REPR.", ;
"cod_cli:w=GLfaux","CODE CLIENT", ;
"nom_rep","REPRESENTANT", ;
"nom_cli:w=GLfaux","NOM CLIENT"
IF LASTKEY() = ik_enter
m.cod_rep=repres.cod_rep
SHOW GET m.cod_rep
ELSE
IF !SEEK(m.cod_rep,'repres')
RETURN .F.
ENDIF
ENDIF
SHOW GET repres.nom_rep
RETURN .T.

* déclenchée par F5 sur le champ Code Destination:
PROCEDURE pr_val_des
IF valid_des()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_des
DO all_srch WITH "DESTINA","nom_des","nom_des", "","","", ;
"Choisir le Code Destination","","","", ;
"cod_des:w=GLfaux","CODE", ;
"nom_des","NOM DESTINATION", ;
"PAYS.nom_pay","NOM PAYS"
IF LASTKEY() = ik_enter
m.cod_des=Destina.cod_des
SHOW GET m.cod_des
ELSE
IF !SEEK(m.cod_des,'DESTINA')
RETURN .F.
ENDIF
ENDIF
RETURN .T.

* déclenchée par F5 sur le champ N° Camion:
PROCEDURE pr_val_imm
IF valid_imm()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_imm
DO all_srch WITH "vehicule","num_imm","num_imm", "","","", ;
"Choisir le N° Camion","","","", ;
"num_imm","N° Camion", ;
"num_rem:w=GLfaux","N° Remorque", ;
"cod_tra:w=GLfaux","Code Transporteur"
IF LASTKEY() = ik_enter
m.num_imm=Vehicule.num_imm
SHOW GET m.num_imm
ELSE
IF !SEEK(m.num_imm,'Vehicule')
RETURN .F.
ENDIF
ENDIF
RETURN .T.

* déclenchée par F5 sur le champ N° Camion:
PROCEDURE pr_val_dep
IF valid_dep()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_dep
DO all_srch WITH "depart","cod_dep","cod_dep", "","","", ;
"Choisir le code depart","","","", ;
"cod_dep","CODE", ;
"lib_dep:w=GLfaux","LIBELLE"
IF LASTKEY() = ik_enter
m.cod_dep=depart.cod_dep
SHOW GET m.cod_dep
ELSE
IF !SEEK(m.cod_dep,'depart')
RETURN .F.
ENDIF
ENDIF
RETURN .T.


* déclenchée par F5 sur le champ N° Camion:
PROCEDURE pr_val_elf
IF valid_elf()
KEYBOARD '{TAB}'
ENDIF

FUNCTION valid_elf
DO all_srch WITH "elf","cod_elf","cod_elf", "","","", ;
"Choisir local, export ou Fowarehouse","","","", ;
"cod_elf","CODE", ;
"lib_elf:w=GLfaux","LIBELLE"
IF LASTKEY() = ik_enter
m.cod_elf=elf.cod_elf
SHOW GET m.cod_elf
ELSE
IF !SEEK(m.cod_elf,'elf')
RETURN .F.
ENDIF
ENDIF
SHOW GET elf.lib_elf
RETURN .T.

*------
* fonction contenant TOUTES les validations CRITIQUES de l'écran!!!

FUNCTION vld
was_fld_valid = .T. && défaut
ON KEY LABEL F5 && réinit F5

DO CASE
CASE VARREAD()=sprevget
*--- error trap. ne fait rien, mais DOIT exister, sous peine de LOOP infinie...
CASE "CAN_BTN" $ VARREAD()
*--- ne rien faire
OTHERWISE
PRIVATE n_vld_loops, ncurloop
IF "SAVE_BTN" $ VARREAD() AND Save_Btn_Click
Save_Btn_Click=.F.
n_vld_loops = 2
ELSE
n_vld_loops = 1
ENDIF
*---si n_vld_loops = 2, on refait TOUS les contrôles

*---Ci-après, la boucle contenant les contrôles:
FOR ncurloop = 1 TO n_vld_loops

*========= ELF OBLIGATOIRE
IF sprevget="cod_elf" ;
OR (ncurloop=2 AND "SAVE_BTN" $ VARREAD() AND was_fld_valid)
IF !SEEK((m.cod_elf),"elf") then
??CHR(7)
WAIT WIND NOWAIT "LOCAL, EXPORT OU FORWARE OBLIGATOIRE"
was_fld_valid = valid_elf()
exe_browse=.T.
ENDIF
SHOW GET elf.lib_elf
IF !was_fld_valid
was_fld_valid=.F.
??CHR(7)
WAIT WIND NOWAIT "LOCAL, EXPORT OU FORWARE OBLIGATOIRE"
_CUROBJ=OBJNUM(m.cod_elf) && retour au champ en erreur
ENDIF
ENDIF

*========= TRANSPORTEUR OBLIGATOIRE
IF sprevget="cod_tra" ;
OR (ncurloop=2 AND "SAVE_BTN" $ VARREAD() AND was_fld_valid)
IF !SEEK((m.cod_tra),"transpor") then
??CHR(7)
WAIT WIND NOWAIT "CODE TRANSPORTEUR OBLIGATOIRE"
was_fld_valid = valid_tra()
exe_browse=.T.
ENDIF
SHOW GET transpor.nom_tra
IF !was_fld_valid
was_fld_valid=.F.
??CHR(7)
WAIT WIND NOWAIT "CODE TRANSPORTEUR OBLIGATOIRE"
_CUROBJ=OBJNUM(m.cod_tra) && retour au champ en erreur
ENDIF
ENDIF

*========= N° ENTREE obligatoire
IF sprevget="num_ent" ;
OR (ncurloop=2 AND "SAVE_BTN" $ VARREAD() AND was_fld_valid)
m.clemand=m.num_ent
was_fld_valid = chkcode(m.clemand)
IF !was_fld_valid
was_fld_valid=.F.
WAIT WIND NOWAIT "LE N° D'ENTREE EXISTE DEJA !!! AJOUT IMPOSSIBLE"
sprevget="" && Cas spécial retour en arrière
_CUROBJ=OBJNUM(m.num_ent) && retour au champ en erreur
RETURN
ENDIF
IF was_fld_valid AND EMPTY(m.num_ent)
was_fld_valid=.F.
??CHR(7)
WAIT WIND NOWAIT "LE N° D'ENTREE EST OBLIGATOIRE"
_CUROBJ=OBJNUM(m.num_ent) && retour au champ en erreur
ENDIF
IF was_fld_valid AND (SUBSTR(m.num_ent,1,1)<>"L" AND ;
SUBSTR(m.num_ent,1,1)<>"E") AND ;
SUBSTR(m.num_ent,1,1)<>"S") AND ;

Thu, 01 Jun 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
C'est confirmé, je commence à vieillir !

Bonne journée à tous
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Wed, 31 May 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
moi aussi ca métonnerait et lire ce qui suit nous ramène a la base
d'une strcture de fichier pour un projet fe Vfp

durant la migration il faut vérifier les points suivants

les inclusions des fichiers

---creer un fichier d'entete Main.h et y inclure les autres fichiers
d'entetes

exemple:
** Fichier Main.h ""
include .\headers\Matt.h
include .\headers\string.h
include .\headers\xxxxxx.h

--- Pour chaque formulaire il faut inclure le fichier d'entete Main.h
ouvrir le formulaire et dans le menu form cliquer sur l'item Include
File...

y joindre le fichier Main.h

cependant si tu développes des classe tu peux développer un formulaire
maître dans le quel tu inclus le fichier Main.h et tous les formulaires
enfants derivant de cette classe auront cette inclusion

---de même pour les classes d'une librairie Menu Class et cliquer sur
l'item Include File...

---set default to
dans le programme Main.prg, celui qui sera noir dans la liste de tes
programme sur ton projet il faut situer l'emplacement du projet

ton projet a pour non "Uno_Projet.pjx"

il y a trois hic à ce que j'écris
- en développement du exécute le fichier principal Main.prg
- le set default est important
- tu exécutes l'application "Uno_Projet.app" la aussi le set default
est important
- tu exécutes l'exécutable "Uno_Projet.exe" là désolé j'en ai
toujour arraché ... le set default ne fonctionne pas

je vous invite tous à nous éclairer

--- on poursuit

partons de la struture suivante en supposant que tu es d'en
l'environnement Visual Foxpro ....

dans la fenetre Command Window tu fais
? set("directory") tu vas savoir ou vfp pointe sur ton disque

la commande suivante: set default to "c:/vfp/Perso/Uno_Projet" va
éguiller le pointer de répertoire sur "c:/vfp/Perso/Uno_Projet" et en
refaisant: ? set("directory") tu auras comme réponse
"c:/vfp/Perso/Uno_Projet" qui correspond a l'emplacement de ton projet

--- Set Path to "prgs;forms;labels;rapports;images;dbfs"

tu as fixé la racine de ton projet avec Set Default to et tout les
sous-répertoires avec Set Path to

comme ca Vfp ne voit qu'un seul répertoire ...

bonne chance

a+ eDDy















:
>> Attention, si les écrans sont en environnement de données privé, il faut
>> refaire les SET LIBRARY, SET PATH,

> Cela m'etonnerait

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé

---
This email has been checked for viruses by AVG.
http://www.avg.com

Tue, 30 May 2017 08:57:18 GMT

Re: Procédure Cryptage AES BY G. ADAM
Greg, effectivement, ça fonctionne bien mieux avec le passage par référence..


Méa Culpa pour ma mauvaise lecture du PDF (en Anglais quand même..)

Amicalement
Gilles


Tue, 30 May 2017 08:57:18 GMT

Re: Procédure Cryptage AES BY G. ADAM
Gilles,

Il faut passer le texte a encrypter par reference - voir derniere page du pdf


Tue, 30 May 2017 08:57:18 GMT

Procédure Cryptage AES BY G. ADAM
Bonjour,

Je suis complètement perdu avec le PRG Crypto fourni par Gregory.
Voici le code source de test (malheureusement ce que je récupère dans le messagebox() n'est pas crypté)
[VFP]
* Utilisation des fonctions de cryptage de Grégory ADAM
SET PROCEDURE TO Crypto
SET ASSERTS ON

#define BLOCKCIPHER_MODE_CBC 1
#define BLOCKPADDING_MODE_PKCS7 1
#define CRLF CHR(13) + CHR(10)
LOCAL oObj AS OBJECT, cTexte AS STRING

IF Crypto_Aes_Encryptor_Object( ;
@m.oObj,;
BLOCKCIPHER_MODE_CBC,;
BLOCKPADDING_MODE_PKCS7,;
PADR(' ',32), ; && length 16, 24 or 32
PADR(' ',16) ;
)
cTexte = PADR(REPLICATE("C'est mon texte à crypter..." + CRLF, 30) , 4096, SPACE(1))
=oObj.TransformBuffer(m.cTexte, .T.)
=MESSAGEBOX(m.cTexte)
ENDIF
[/VFP]

Une bonne âme serait-elle suffisamment charitable pour me dire ce que je n'utilise pas bien ou ce que je ne comprend pas bien ?

Amicalement
Gilles


Tue, 30 May 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8

> Attention, si les écrans sont en environnement de données privé, il faut refaire
> les SET LIBRARY, SET PATH,

Cela m'etonnerait


Tue, 30 May 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
Bonjour,

juste avant les deux lignes mettre un
WAIT WINDOW "path="+ SET("PATH") NOWAIT
et vérifier que le répertoire où sont les fichiers non trouvés soit bien présent.

Attention, si les écrans sont en environnement de données privé, il faut refaire
les SET LIBRARY, SET PATH, ... Mais je pense que l'environnement par défaut est
l'environnement publique.

A+
Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Tue, 30 May 2017 08:57:18 GMT

Re: Migration Foxpro2.6 à VFP8
Bonjour,

Qu'en est-il du SET PATH ? est-ce que le dossier contenant les librairies est connu du SET PATH ?

Cordialement
GLS


Tue, 30 May 2017 08:57:18 GMT

Migration Foxpro2.6 à VFP8
Bonjour

Par rapport aux écrans à refaire pas de problème. Seulement, l'exécution de l'application dans l'environnement VFP me signal des messages d'erreurs suivants:
File 'Jkey.prg' does not exist et le curseur se pointe sur les lignes suivantes dans le fichier publicprg:
SET LIBRAIRY TO JKEY ADDITIVE
SET LIBRAIRY TO CASES ADDITIVE
Quand je fais ignorer, le formulaire s'affiche bien mais les champs contenants des listes déroulantes ne s'exécute pas bien. Les listes déroulantes sont définies dans l'environnement FPW26 avant d'être converti en VFP.


Tue, 30 May 2017 08:57:18 GMT

Re: Problème de suppression dans une table fille
Pour le mouchard, STRTOFILE est bien plus simple que fopen, fwrite et compagnie (voir mes méthodes onTraceProc et onTraceTxt dans les sources de ma dernière session).



Sat, 27 May 2017 08:57:18 GMT

Re: Problème de suppression dans une table fille
Chers Collègues,
J'ai le plaisir de vous informer que j'ai trouvé une solution à mon problème. En faisant "MODIFY DATABASE", il fallait définir les relations entre "parents" et "enfants", en ce moment il est possible de faire "Edit Referential Integrity" et définir quel doit être le type de mise à jour en cas de: Insert, Update et Delete. Autrement si une création, une mise à jour ou une suppression doit être répercutée sur la table 'enfant' ou pas. Puisque mon problème était le DELETE, ça a marché parfaitement.
Je remercie tous pour les efforts fournis.
Je reste à la disposition du groupe pour toute question utile et complémentaire.
Bon Week End à tous.
Damonzon.


Sat, 27 May 2017 08:57:18 GMT

Re: Problème de suppression dans une table fille
A tous,
Le DELETE SQL ne fonctionne pas. J'ai décider de vérifier les triggers, en faisant MODIFY DATABASE, puis clic droit, il m'affiche un ensemble de choses, mais le "Edit Referential Integrity " est désactivé, donc impossible de le dérouler et voir comment les triggers définis. Cela veut dire que ma BD est dans état particulier. Que faire pour cela?
Bon Weekend à vous tous.
Damonzon.


Sat, 27 May 2017 08:57:18 GMT

Re: Probl=c3=a8me de suppression dans une table fille
Bonjour,
D'abord, vérifie tes triggers : y a t-il une règle de restriction
quelconque ? Tu as peut-être une table d'un niveau en dessous qui bloque
la suppression.
Si tu sélectionnes ta table dans l'environnement Fox et que tu fais un
simple DELETE dans la fenêtre commande, est-ce que l'enregistrement est
bien supprimé ?
Si c'est un DELETE FOR ou équivalent qui pose problème, tu devrais aussi
essayer de réindexer ta table "fille".

JC

Le 24/05/2017 à 15:30, Damonzon a écrit :
> Chers Collègues, dans un de mes formulaire ou j'utilise un ensemble tables dont la table mère principale et sa fille sur lesquelles je fais beaucoup de maj. Je constate que la suppression marche sur toutes les tables sauf la table fille. J'ai essayé DELETE sous toutes ses formes, et chaque fois que j'affiche la table fille, je vois que les records susceptibles d'être supprimés, sont toujours en place. Alors que dans les autres tables, les enregistrements sont bel et bien supprimés. C'est la toute première fois que je suis devant une telle situation. J'ai pensé au buffer mode un moment, celui ci était à 5=mode optimiste, je l'ai positionné à 1, le résultat est le même. Je suis à bout de solutions, je compte donc sur tout le monde.
> Merci d'avance.
> Damonzon.
>
>

Sat, 27 May 2017 08:57:18 GMT

Re: migrer une application développée en foxpro2.6 à VFP8
J'en reviens à ma première suggestion : il faut REFAIRE les écrans. Il y a une
telle différence entre FPW et VFP que cela vaut vraiement le coût. Je pense que
tu vas passer plus de temps à corriger les écrans FPW qu'à les reconstruire.

Sous VFP, les écrans sont construits 'visuellement' avec un générateur d'écran.
Tu devrais te lancer avec un écran simple pour voir.

Est-ce que tu utilises les clauses VALID, WHEN des commandes READ, GET de FPW ?

A+

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Sat, 27 May 2017 08:57:18 GMT

Re: Problème de suppression dans une table fille
Si le trigger ne fonctionne pas, le DELETE SQL ne fonctionnera pas non plus : ce
sera une bonne vérification.

Il faut absolument vérifier si le trigger fonctionne et j'en reviens à mon WAIT
WINDOW.

Question bête : dans la chronologie les lignes de la table fille sont bien
deletées avant la ligne de la table mère ?

mouchard : je suis un grand fan des mouchards : un simple fichier texte géré
avec fopen, fwrite .... dans lequel tu enregistres toutes les variables,
procédures utilisées. Cela m'a sauve des heures de recherche.

Bon courage

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Sat, 27 May 2017 08:57:18 GMT

Re: Problème de suppression dans une table fille
Je me sers souvent de _tally ! à tout propos : pour vérifier le nombre de mises
à jour (nbre de lignes mises à jour par un REPLACE ALL FOR WHILE), vérifier si
une requête ou une vue a donné un résultat (vérification des doublons, ...), etc ...

Bonne journée

Jean à Grenoble

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Sat, 27 May 2017 08:57:18 GMT

Re: Problème de suppression dans une table fille
curiose demande pour un gars d'expérience mais je n'ai jamais compris
le role de _taly

si tu peux m'éclairer ... cela serait apprécié

bonne fds

a+ eddy

:
> Bonjour,

> y-a-t-il un filtre posé sur la table enfant ?
> Perso le delete VFP je le substitue toujours par un DELETE FROM maTable WHERE
> xxxx (DELETE SQL)... Plus efficace (d'autant que _TALLY reçoit le nombre
> d'enregistrements traités..

> Cordialement
> GLS

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé

---
This email has been checked for viruses by AVG.
http://www.avg.com

Fri, 26 May 2017 08:57:18 GMT

Re: migrer une application développé en foxpro 2.6 à VFP8
bonjour felix

nous suivons tous cette conversation ici sur ce forum... Si Jean a du
temps pour te répondre il le fera certainement au meilleurs de ses
connaissances en gentleman comme je le connais depuis plus de 15 ans
sur ce forun

Pour poursuivre

comment codes-tu cette liste déroulante ?

a+ Eddy

PS: je suis le mouton noir de ce forum ;-) mais je suis sincère et
directe


Après mûre réflexion, Felix a écrit :
> Rebonjour Jean

> Mon mail c'est agbokou@gmail.com

--
a+ Eddy
L'incompréhensible se réalise toujour avant le compréhensible parce que
tout simplement on ne l'a pas encore assimilé

---
This email has been checked for viruses by AVG.
http://www.avg.com

Fri, 26 May 2017 08:57:19 GMT

Re: Problème de suppression dans une table fille
Bonjour Jean,
Le problème est arrivé seulement quand j'ai commencé à utiliser les triggers, et la base de données est très ancienne.
Merci.
Damonzon.


Fri, 26 May 2017 08:57:19 GMT

Re: Problème de suppression dans une table fille
Bonjour,
Pour m'assurer que j'ai les records de la table enfant, j'ai effectivement posé un filtre, même là ça ne n'a pas marché. Mais avant sans ce filtre ça ne marchait pas aussi. Je vais essayer DELETE SQL.
Merci GLS.
Damonzon.


Fri, 26 May 2017 08:57:19 GMT

Re: migrer une application développé en foxpro 2.6 à VFP8
Rebonjour Jean

Mon mail c'est agbokou@gmail.com


Fri, 26 May 2017 08:57:19 GMT

Re: migrer une application développé en foxpro 2.6 à VFP8
Rebonjour Jean

je souhaite avoir votre mail pour toute fin utile


Fri, 26 May 2017 08:57:19 GMT

Reproduction totale ou partielle strictement interdite • Propulsé par KitWeb • Hébergement Wan AgainValid XHTML 1.0 Transitional