Traitement Factures/chéque reçu recherche algorithme

Résolu/Fermé
FoxLeRenard Messages postés 49 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 24 avril 2024 - 25 oct. 2020 à 13:34
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 25 oct. 2020 à 19:31
Bonjour,
Pour une entreprise importante, je traites l'arrivée des chèques de ses gros clients qui flemmards, envoient souvent un chèque en règlement pour souvent trois quatre factures sans les préciser les références.
Ors il y a des milliers de factures.

Tout le site des opérateurs, est en AJAX et les factures chèques etc... sont
dans MYSQL (PDO)
Ce que je souhaites réaliser se fera en Javascript ,si le module que je cherches à réaliser est faisable ???

Donc a chaque requête, je reçois
Le montant du chèque,
l'Array des facture
et l'array des montants.

Je dois préciser qu'il y a dans les "factures" des "avoirs" ce qui complique l'ALGO à réaliser,
J'ais cherché par google mais la question est pas facile à formuler, et je ne suis pas assez pointu pour réaliser ceci moi-même.
Alors je suis venu chez les pros .... ;-)


Un exemple le client Durand à en impayé les factures

1) 1815.80
2) 899.15
3) 1400.00
4) 789.65
5) 412.18

Son Chèque est de 2100.98 (donc je devrai trouver 2 + 4 + 5)

Bon courage et merci d'avance si vous acceptez ce défi ,en me mettant au moins sur une piste.. a moins que par miracle vous ayez traité ce type de recherche ;-)


Configuration: Windows / Chrome 86.0.4240.111

A voir également:

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 oct. 2020 à 15:44
Bonjour,

Déjà, si les données sont stockées dans la BDD, le javascript seul ne suffira pas.
Il faudra, en effet, utiliser l'ajax. (il y a donc des choses à coder également côté serveur (en php )

Ensuite, .. ben.. on ne sait pas ce que tu veux ... ou du moins.. quelle est réellement la question...

Tu dis :

Donc a chaque requête, je reçois
Le montant du chèque,
l'Array des facture
et l'array des montants.

Donc.. ça c'est déjà fait ?
Tu reçois les données... sous quel format .. en JSON ?
Tu les reçois bien dans ton javascript ??

Je dois préciser qu'il y a dans les "factures" des "avoirs" ce qui complique l'ALGO à réaliser,

Ben, tu dois bien avoir une info permettant de savoir si c'est un avoir ou non. ( le montant négatif par exemple ou l'inverse par rapports aux factures.. )
Et dans ce cas, il suffit d'omettre ces montants dans la requête qui te retourne les factures à payer..


Son Chèque est de 2100.98 (donc je devrai trouver 2 + 4 + 5)

Quand tu dis que "tu devrais trouver".. tu veux dire... le code devra trouver pour toi ?

Et que fais tu si tu as plusieurs factures du même montant, ou que plusieurs combinaisons donnent le même total ? Laquelle tu dois prendre ??

A minima, ce traitement, je le ferai côté serveur ( php )
tu pourrais, par exemple, t'inspirer de ce code :
https://codes-sources.commentcamarche.net/source/100161-php-liste-des-combinaisons-possibles-somme

Une fois toutes les combinaisons trouvées et la somme calculée, il te suffit de faire une boucle pour déterminer quelle(s) combinaison(s) correspondrai(en)t au montant voulu....

Quoi qu'il en soit, ta question est trop vague.
On ne connait pas la structure de tes données
On ne sait pas ce que tu as déjà commencé à coder
On ne sait pas ce que tu es capable de coder par toi même.

Pour rappel, ici, on ne fourni pas de code sur demande.
Pour maximiser tes chances d'avoir de l'aide, tu dois montrer ce que tu as commencé à faire ET expliquer sur quel point technique PRECIS tu bloques.




1
FoxLeRenard Messages postés 49 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 24 avril 2024 2
25 oct. 2020 à 16:25
Bonjour et merci,
J'ai posé une question uniquement sur le module Javascript (l'algorithme
que je cherche à écrire) tel que j'ai décrit mon environnement tout est expliqué AJAX avec MYSQL etc... J'aurais mieux fait de ne rien dire puisque je n'ai besoins de rien sur tout ces domaines que je maitrise parfaitement (hum ... un peut prétentieux ;-) ).
Donc pour poser ma question, j'aurais du dire:
Pouvez vous m'aider en m'indiquant ver quelle méthode de logique récursive ? en Javascript (pas de Jquery ou autre) je pourrait résoudre le problème suivant:

Je reçoit dans mon JavaScript:
un array "factures" contenant entre 2 et 25 montant de factures.
Et un montant représentant un chèque reçu
Il me faut trouver la série de ces factures donnant ce montant. Merci d'avance. (nota le client n'ayant rien préciser, si plusieurs combinaisons sont valides nous prendront la première !

Loin de moi l'idée de demander un code tout fait sauf si ça existe .
Merci encore.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 oct. 2020 à 17:26
Comme je te l'ai dit je pense que le faire en PHP serait préférable.
Maintenant, si tu tiens à le faire en javascript, il te suffit d'étudier le code que je t'ai fourni et essayer de le reproduire en javascript.
Vu ta maîtrise des langages tu devrais y parvenir.

Niveau algo, c'est juste des maths...Ce n'est que de la logique combinatoire..
0
FoxLeRenard Messages postés 49 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 24 avril 2024 2
25 oct. 2020 à 18:20
Oui ton modul parait la bonne piste ,sur ce que tu as écrit j'ai une erreur sans doute pas grave mais je ne la comprends pas ...

Array contenant les valeurs à utiliser :
Array
(
[0] => 12.51
[1] => 45.62
[2] => 10
[3] => 25.9
)

Notice: Undefined offset: 15 in C:\jpbhtml\1 web les-astuces-du-web\algox2.php on line 74

Notice: Undefined offset: 15 in C:\jpbhtml\1 web les-astuces-du-web\algox2.php on line 76
Nb Combinaisons : 15
COMBINAISON SOMME
12.51 12.51
45.62 45.62
10 10
25.9 25.9
12.51,45.62 58.13
12.51,10 22.51
12.51,25.9 38.41
45.62,10 55.62
45.62,25.9 71.52
10,25.9 35.9
12.51,45.62,10 68.13
12.51,45.62,25.9 84.03
12.51,10,25.9 48.41
45.62,10,25.9 81.52
12.51,45.62,10,25.9 94.03
0

0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 oct. 2020 à 18:33
En effet une erreur.. que personne n'avait vu jusqu'à maintenant.
Ligne 72, il faut retirer le = du $i<=$n
 for($i=0;$i<$n;$i++) {  
0
FoxLeRenard Messages postés 49 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 24 avril 2024 2
25 oct. 2020 à 19:14
Ah oui bien sur t'es un chef et serviable en plus, bien sur < à 15 = 14 puisque le premier est 0 alors j'ai vraiment ma solution et en augmentant à 50 factures, le serveur est si puissant que le temps de réponse reste extra !
Tiens cadeau, sais tu comment je peux faire tourner mon PHP toute la nuit ?
à l'ouverture de PHP je mets
<?PHP
ini_set ('max_execution_time', 0);
/* ___ puis dans la bocle de traitement ____ */
 for($i=0;$i<$n;$i++) {  
/* action */
set_time_limit ( 10 );
}

HOP THIS HELP et bonne semaine
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 oct. 2020 à 19:31
Je pense qu'il est préférable de découper les données à traiter par "paquets" puis d'utiliser une tache cron qui tourne toutes les X minutes pour faire le traitement...
mais bon, là ça sort du thème de la question initiale.

N'oublie pas de mettre le sujet en Résolu.

Bonne soirée.
0