ATOUTFOX
    COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO

Forum AtoutFox

Le forum AtoutFox

Forum

RSS © www.atoutfox.org - Forum

Re: Anomalie après compilation
Bonjour Grégory,

Merci de ta réponse.

Je vais voir pour générer mon exécutable à partir d'un disque local sur lequel j'aurai recopié touts les fichiers de l'application et voir si cela se reproduit de nouveau.

Cordialement,
Hervé.


Mon, 24 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
Comme GLS le suppose, je crois aussi qu'il y a un probleme de reseau (aleatoire)

Pour remedier au probleme, utiliser un loader voir http://www.atoutfox.com/articles.asp?ACTION=FCONSULTER&ID=0000000384
Avantage: l'appli se trouve sur le disque local de l'utilisateur


Autre avantage : tu peux mettre des MAJ ( une nouvelle appli.app ) sans que les utilisateurs doivent sortir du programme. IL auront la nouvelle version quand il demarreront la prochaine fois




Sat, 22 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
Merci de ta réponse.

Ce qui est inexplicable, à mon niveau, c'est que le fait de relancer la génération de l'exécutable va faire disparaître l'anomalie. Mais qu'éventuellement, le même type d'anomalie va apparaître sur un autre SCT.

Mystère...


Fri, 21 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
Bonjour

essaies de Compiler le Formulaire par la commande suivante:
compile form E:\Tetra\paye\salarie.scx
cela pourrait dans certain cas faire disparaitre ces anomalie citées

cordialement



Fri, 21 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
Les deux..

Si j'ai bien compris, chez les clients, l'exécutable est dans un dossier d'un serveur de fichiers et il est lancé depuis chaque poste de travail..
Dans tous les cas (lancement et exécution d'un exe depuis un disque local, lancement depuis un disque réseau) les dossiers utilisés par l'application doivent être sorties depuis toutes les machines du traitement des anti-virus..

Il m'est arrivé d'avoir des SCX complètement corrompu ou partiellement corrompu.. les ouvrir en mode table, les réindexer et les compacter n'y faisaient rien..les dupliquer sur un autre disque, les effacer sur le disque original, puis y remettre les copies n'y faisaient toujours rien..
En final, je n'ai pas trouvé d'autre solution que de les reconstruire totalement sans copier aucun des objets du SCX original..


Fri, 21 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
compiler : je veux dire générer le projet en exécutable à partir du gestionnaire de prjoet


Fri, 21 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
compilée


Fri, 21 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
Bonjour,

Parlez-vous de l'infrastructure sur laquelle est compilée l'application, ou sur celle où elle est exécutée.
Si c'est pour l'exécution, l'anomalie se produit chez tous mes clients auxquels j'aurais distribué l'exécutable.

Cordialement,
Hervé


Fri, 21 Jul 2017 12:16:11 GMT

Re: Anomalie après compilation
Bonjour,
Tous les dossiers VFP et applications VFP sont ils bien exclus de l'analyse anti-virus (disque local et disque réseau)?
La stabilité de la connexion réseau est elle assurée ?

Cordialement
GLS


Fri, 21 Jul 2017 12:16:11 GMT

Anomalie après compilation
Bonjour à tous,

Je rencontre depuis quelque temps un anomalie aléatoire (se produit sur un formulaire quelconque) après compilation de mon projet en exécutable.
Je reçois l'erreur 2005 : Erreur lors du chargement du fichier - enregistrement n° 99. Label8 . Parent : Le fichier Mémo E:\Tetra\paye\salarie.sct est absent ou n'est pas valide
Je relance la compilation et je n'ai plus l'erreur.

Je suis en Windows 10, Core I7, 16 GO de RAM, disque SSD. Le projet et tous les fichiers sont sur un partage réseau. L'exécutable dépasse les 30 Mo (je ne sais pas si il y a une limite de taille).

Merci de votre aide.



Fri, 21 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Francis,

Je viens de tester, tu as raison

Date devient DateTime

Je crois que je vais utiliser le contournement. Sans doute y aura-t-il d'autres surprises


Sat, 08 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Gregory,
Pour information :
d'après ce que je trouve sur la toile: _vfp.eval() est bien une méthode OLE (donc méthode d'une class COMM)
et je vois qu'il semble aussi y avoir des différences de mapping des données (comme tu l'a soulevé pour les Tableaux et références/valeurs) mais au niveau des "dates" de vfp : il semble que les dates COM deviennent des DATETIME en vfp: je n'ai pas encore vérifié.
Cordialement
Francis


Sat, 08 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Correction - il manque une parenthese

Remarks

Native foxpro classes instantiated with both _vfp.Eval() and _vfp.SetVar() are considered to be COM objects
and hence arrays are passed by value rather than by reference.

In order to pass arrays by reference you need to use ComArray(.., 11) after each instantiation of the class.

eg
obj = _vfp.Eval([createObject('MyClass', param1, ...)])
local myArray[1]
=comarray(obj, 11)
result = obj.Method(@myArray)


Sat, 08 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Salut Francis,

Cela te va ?


Remarks

Native foxpro classes instantiated with both _vfp.Eval() and _vfp.SetVar() are considered to be COM objects
and hence arrays are passed by value rather than by reference.

In order to pass arrays by reference you need to use ComArray(.., 11) after each instantiation of the class.

eg
obj = _vfp.Eval([createObject('MyClass', param1, ...)]
local myArray[1]
=comarray(obj, 11)
result = obj.Method(@myArray)




Sat, 08 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Hello Gregory,

Effectivement cela semble la bonne explication et donc bonne solution
dans la doc de VFP sur la méthode eval il est mentionné :
"Evaluates an expression and returns the result for an instance of the Visual FoxPro application automation server."

peut être il me faudrait ajouter à la doc une petite ligne concernant les tableaux dans la documentation de vfp ?
Si oui : quel serait, en bon anglais la ligne à ajouter ?

Cordialement
Francis



Le sam. 08 juillet 2017, 12h12 Gregory Adam a écrit :
> La solution
>
> Il me semble que tout objet créé par _vfp.Eval(), _vfpSetVar() est consideré comme un objet com
> Un tableau est passé par valeur
>
> Donc, après la création de l'objet avec _vfp.Eval(), il faut faire comarray(.., 11) pour forcer le passage du tableau par référence
>
> Et la, tout va bien
>
> Il faut bien initialiser naa avec une valeur, sinon naa est traité comme une variable logique


Sat, 08 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
La solution

Il me semble que tout objet créé par _vfp.Eval(), _vfpSetVar() est consideré comme un objet com
Un tableau est passé par valeur

Donc, après la création de l'objet avec _vfp.Eval(), il faut faire comarray(.., 11) pour forcer le passage du tableau par référence

Et la, tout va bien

Il faut bien initialiser naa avec une valeur, sinon naa est traité comme une variable logique

[vfp]
obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
=comArray(m.obj, 11) &&
[/vfp]

[vfp]
*_______________________________________________________________________________
function TestVfpEval()

local objResult1, objResult2, obj
obj = createobject('TestVfpEval')


local aa[1], naa
naa = 0 && needed
=m.obj.GetResultObject1(@m.objResult1)

=m.objResult1.GetArray(@m.aa, @m.naa)
?alen(aa) && 5
?m.naa && 5

assert false


endfunc
*_______________________________________________________________________________
define class TestVfpEval as Relation

function GetResultObject1(obj)
obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
=comArray(m.obj, 11) &&
endfunc
enddefine
*_______________________________________________________________________________
define class TestVfpEvalRelation as Relation
function GetArray(aa, naa)
external array aa
naa = 5
dimension aa[m.naa]
local i
for i = 1 to m.naa
aa[m.i] = m.i
endfor

enddefine
*_______________________________________________________________________________
[/vfp]


Sat, 08 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Bon, la solution ou plutôt le contournement

Problème
J'ai une classe qui est basée sur 'Session'
Une méthode retourne un objet crée dans cette classe session (avec createObject())
Tant que cet objet est en vie, la session ne disparait pas ( même après session= null)

Si la classe session fait obj = _vfp.Eval( [createobject('ClasseARetourner')]) j'ai les problèmes de tableau

Solution
Créer une classe avec une méthode pour créer un objet
Cette classe est si nécessaire instanciée et ajoutée quelque part a _screen
[vfp]
_screen.AddObject('NomDeLaClasse', _vfp.Eval([createObject('NomDeLaClasse')]))
[/vfp]

Donc, la classe session fait a peu près
[vfp]
If(vartype(_screen. NomDeLaClasse) <> T_OBJECT)
= _screen.AddObject('NomDeLaClasse', _vfp.Eval([createObject('NomDeLaClasse')]))
Endif
Obj = _screen. NomDeLaClasse.CreateObject('ClasseARetourner')
[/vfp]



Fri, 07 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Salut Jean,

J'ai tout vu dans le debugger avant de poster

Il y a une raison pourquoi je n'utilise ni evaluate() ni createobject()
( l'objet se cree dans une session de donnees privee. Tant que cet objet existe, la session de donnees va trainer)

Je crois que je vais devoir contourner


Thu, 06 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Si on remplace _vfp.eval() par EVALUATE(), cela fonctionne.

Dans l'aide, il n'est pas dit que EVALUATE et eval puisse retourner un objet ...
même si cela semble fonctionner.

Avec le debugger, _vfp.eval() donne un objet 'correct' et le tableau aa prend
bien la dimension 5. C'est au retour de la fonction, qu'il n'y a pas le
transfert vers l'appelant (suis-je clair ?)

A+
Jean

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

Thu, 06 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Salut Francis,

>si tu initialise tes variables locales dans TestVfpEval() avant création des objets, par exemple :
>aa[1]=0
>naa=0

Oui et non

apres naa est bien 5, mais le tableau ne change pas
[vfp]
function TestVfpEval()

local objResult1, objResult2, obj
obj = createobject('TestVfpEval')

local aa[1], naa


=m.obj.GetResultObject1(@m.objResult1)
naa=4
aa[1]=0
assert false

=m.objResult1.GetArray(@m.aa, @m.naa)
?alen(aa) && 1
?m.naa && 5

assert false
endfunc
[/vfp]


Thu, 06 Jul 2017 12:16:11 GMT

Re: _vfp.Eval() - curiosité
Bonjour Gregory,

si tu initialise tes variables locales dans TestVfpEval() avant création des objets, par exemple :
aa[1]=0
naa=0
alors ça marche.

autre solution : tu inverse les appels GetResultObject1() et GetResultObject2 ainsi les variables seront initialisées

Cordialement
Francis



Le jeu. 06 juillet 2017, 12h12 Gregory Adam a écrit :
>
> [vfp]
> *_______________________________________________________________________________
> function TestVfpEval()
>
> local objResult1, objResult2, obj
> obj = createobject('TestVfpEval')
>
> local aa[1], naa
>
> =m.obj.GetResultObject1(@m.objResult1)
> =m.objResult1.GetArray(@m.aa, @m.naa)
> ?alen(aa) && 1
> ?m.naa && .T.
>
>
> =m.obj.GetResultObject2(@m.objResult2)
> =m.objResult2.GetArray(@m.aa, @m.naa)
> ?alen(aa) && 5
> ?m.naa && 5
>
>
> endfunc
> *_______________________________________________________________________________
> define class TestVfpEval as Relation
>
> function GetResultObject1(obj)
> obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
> endfunc
> function GetResultObject2(obj)
> obj = createobject('TestVfpEvalRelation')
> endfunc
> enddefine
> *_______________________________________________________________________________
> define class TestVfpEvalRelation as Relation
> function GetArray(aa, naa)
> external array aa
> naa = 5
> dimension aa[m.naa]
> local i
> for i = 1 to m.naa
> aa[m.i] = m.i
> endfor
>
> enddefine
> *_______________________________________________________________________________
> [/vfp]
>
>
> .
>



Thu, 06 Jul 2017 12:16:11 GMT

_vfp.Eval() - curiosité

[vfp]
*_______________________________________________________________________________
function TestVfpEval()

local objResult1, objResult2, obj
obj = createobject('TestVfpEval')

local aa[1], naa

=m.obj.GetResultObject1(@m.objResult1)
=m.objResult1.GetArray(@m.aa, @m.naa)
?alen(aa) && 1
?m.naa && .T.


=m.obj.GetResultObject2(@m.objResult2)
=m.objResult2.GetArray(@m.aa, @m.naa)
?alen(aa) && 5
?m.naa && 5


endfunc
*_______________________________________________________________________________
define class TestVfpEval as Relation

function GetResultObject1(obj)
obj = _vfp.Eval([createobject('TestVfpEvalRelation')])
endfunc
function GetResultObject2(obj)
obj = createobject('TestVfpEvalRelation')
endfunc
enddefine
*_______________________________________________________________________________
define class TestVfpEvalRelation as Relation
function GetArray(aa, naa)
external array aa
naa = 5
dimension aa[m.naa]
local i
for i = 1 to m.naa
aa[m.i] = m.i
endfor

enddefine
*_______________________________________________________________________________
[/vfp]


Thu, 06 Jul 2017 12:16:11 GMT

Re: Développement en VFP
moi non plus !

Jean à Grenoble

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

Sun, 02 Jul 2017 12:16:11 GMT

Développement en VFP
Bonsoir tous les FOXEURS
Je n'abandonnerai jamais le développement en VFP.


Sun, 02 Jul 2017 12:16:11 GMT

Re: Développement en VFP
c bien

BENMAHAMED a couché sur son écran :
> Bonsoir tous les FOXEURS
> Je n'abandonnerai jamais le développement en VFP.

--
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, 01 Jul 2017 12:16:11 GMT

Re: Longueur de champ insuffisante dans une requête
Super !!

Merci Gregory.

/b


Tue, 27 Jun 2017 12:16:11 GMT

Re: Longueur de champ insuffisante dans une requête
[vfp]

SELECT ;
padr(SUBSTR(STRTRAN(cMemo,CHR(13), " "),1,130), 130) AS Ligne1 ;
padr(SUBSTR(STRTRAN(cMemo,CHR(13), " "),131,130), 130) AS Ligne2 ;
...
[/vfp]

ou
[vfp]

select cast(padr(cMemo, 10*130) as Memo) as cMemo into cursor xxx


SELECT SUBSTR(STRTRAN(cMemo,CHR(13), " "),1,130) AS Ligne1 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),131,130) AS Ligne2 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),261,130) AS Ligne3 ;
from xxx
[/vfp]



Tue, 27 Jun 2017 12:16:11 GMT

Longueur de champ insuffisante dans une requête
Bonjour,

Je sais que, pour une requête, VFP fait "un premier passage à vide" pour établir la longueur des champs. Mon problème est que je dois éclater un mémo en lignes de 130 caractères. Je fais donc :

SELECT SUBSTR(STRTRAN(cMemo,CHR(13), " "),1,130) AS Ligne1 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),131,130) AS Ligne2 ;
SUBSTR(STRTRAN(cMemo,CHR(13), " "),261,130) AS Ligne3 ;

etc jusqu'à 10 lignes.

Mais si le mémo du premier enregistrement a moins de 10 lignes, les champs vides se retrouvent avec une longueur de 1 et les mémos suivants ne me retournent qu'un caractère par ligne.

Comment faire pour m'assurer que chaque ligne va loger dans le champ approprié ?

Merci,

/b


Tue, 27 Jun 2017 12:16:11 GMT

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 12:16:11 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 12:16:11 GMT

Re: dbalias()
Bonjour Koen,

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

Cordialement
Francis


Sat, 24 Jun 2017 12:16:11 GMT

Re: dbalias()
Bonjour,

Voir fiche / impression du debugger ici:

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

Cordialement,
Koen



Sat, 24 Jun 2017 12:16:11 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 12:16:11 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 12:16:11 GMT

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


Fri, 23 Jun 2017 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 GMT

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


Mon, 12 Jun 2017 12:16:11 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 12:16:11 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 12:16:11 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 12:16:11 GMT

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