Partage
  • Partager sur Facebook
  • Partager sur Twitter

création de numéro de facture

Sujet résolu
    26 avril 2017 à 23:33:37

    Bonjour à tous,

    J'aurai besoin de votre aide pour créer des numéro de facture à partir d'info de ma bdd

    Dans ma bdd j'ai une colonne avec des noms que je voudrai comparer les uns avec les autres et si les noms sont identiques mettre le même numéro.

    Le problème c'est que j'ai une ligne d'achat ou il y a par exemple "Sergio" et la ligne de règlement "Sergio cb" ou "Sergio esp" , il faudrait que j'arrive à faire un truc pour dire que le nom "Sergio" est égale à "Sergio cb" ou "Sergio esp" pour pouvoir mettre le même numéro sur les deux lignes.

    J'ai essayé avec ça

    <?php
    $mystring = ''.trim(rtrim($data_test['nom'])).'';
    $findme   = 'cb';
    $pos = strpos($mystring, $findme);
    if ($pos === false) {
    	echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'";
    } else {
    	echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring'";
    	echo " et débute à la position $pos";
    }
    ?>

    Le souci c'est que je ne compare que cb alors que j'ai aussi esp, chq, virement et je ne vois pas comment faire un array.

    Merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter

    Création de site internet dansle7.fr Référencement et publicité gratuites sur commercesdu7.fr

      26 avril 2017 à 23:44:33

      Bonsoir, 

      Et en utilisant LIKE dans ta requête à ta bdd ? 

      • Partager sur Facebook
      • Partager sur Twitter
      pensez au "+1" si ça vous a aider, ça fait toujours plaisir ;)
        26 avril 2017 à 23:53:38

        C'est à dire ? je comprend pas ou tu veux en venir.

        Un truc de ce style m'irait bien sauf que je peux comparer qu'une chaine de caractères et j'en ai cinq différentes

        <?php
        $mystring = ''.trim(rtrim($data_test['nom'])).'';
        $findme   = 'cb';
        $pos = strpos($mystring, $findme);
        if ($pos === false) {
        	echo "La chaîne '$findme' ne se trouve pas dans la chaîne '$mystring'";
        } else {
        	echo "La chaine '$findme' a été trouvée dans la chaîne '$mystring'";
        	echo " et débute à la position $pos";
        }
        ?>
        'cb', 'esp', 'chq', 'virement', 'ancv'

        -
        Edité par sergio_zero 26 avril 2017 à 23:56:23

        • Partager sur Facebook
        • Partager sur Twitter

        Création de site internet dansle7.fr Référencement et publicité gratuites sur commercesdu7.fr

          27 avril 2017 à 0:50:02

          Et avec explode ? 

          // la variable a vérifier 
          $test = 'Sergio cb';
          
          //on passe chaque thermes dans un array 
          $array = explode(" ", $test);
          
          // maintenant on a :
          // $array[0] = Sergio
          // et $array[1] = cb
          

          En comparant $array[0] ça devrait faire ce sue tu veux 

          • Partager sur Facebook
          • Partager sur Twitter
          pensez au "+1" si ça vous a aider, ça fait toujours plaisir ;)
            27 avril 2017 à 9:11:32

            Bonjour,

            Avec explode je n'arriverais pas à ce que je veux.

            je vais essayer d'expliquer ce que je dois faire.

            Dans une bdd j'ai des lignes ou il y a 5 colonne :

            il faudrait que je cré des numéros de facture depuis la date ex : la date 04/01/2016 donnerait 201601001 mais ça je sais faire.

            voici un exemple de ligne :

            date | numéro de facture (vide) | nom | dédit | crédit

            02/01/2016 | numéro facture (a faire) | Sergio |500  | (vide)

            05/01/2016 | numéro facture (a faire) | Sergio cb | (vide) | 500

            05/01/2016 | numéro facture (a faire) | paolo |300  | (vide)

            12/02/2016 | numéro facture (a faire) | paolo esp | (vide) | 150

            12/03/2016 | numéro facture (a faire) | paolo chq | (vide) | 150

            il faudrait que ça donne :

            02/01/2016 | 201601001 | Sergio |500  | (vide)

            05/01/2016 | 201601001 | Sergio cb | (vide) | 500

            02/01/2016 | 201601002 | paolo |300| (vide)

            12/02/2016 |201601002 | paolo esp | (vide) | 150

            12/03/2016 |201601002 | paolo chq | (vide) | 150

            Pour faire ça j'ai pensé comparer les noms et les montants débit crédit.

            Si les noms étaient identiques et si le crédit correspond au débit je mes le même numéro de facture.

            Problème je n'arrive pas à comparer les noms

            Quelqu'un pour m'aider SVP.

            -
            Edité par sergio_zero 27 avril 2017 à 9:26:42

            • Partager sur Facebook
            • Partager sur Twitter

            Création de site internet dansle7.fr Référencement et publicité gratuites sur commercesdu7.fr

              27 avril 2017 à 14:33:52

              C'est pour ça que je parlais de LIKE pour sélectionner toutes les lignes avec le même nom:

              SELECT * FROM table WHERE nom LIKE 'Sergio%' 



              • Partager sur Facebook
              • Partager sur Twitter
              pensez au "+1" si ça vous a aider, ça fait toujours plaisir ;)
                28 avril 2017 à 7:35:15

                Bonjour rincevent01,

                Le souci du like c'est qu'il y a des tonnes de nom différent

                • Partager sur Facebook
                • Partager sur Twitter

                Création de site internet dansle7.fr Référencement et publicité gratuites sur commercesdu7.fr

                  28 avril 2017 à 8:53:49

                  Bonjour,

                  Ta base de données est mal conçue : que ce passe-t-il si deux clients Sergio différents ?

                  Est-ce qu'il est pertinent d'enregistrer le nom d'un client dans une table qui traite des factures ?

                  Et pour répondre à ta question, il te suffit de faire un CONCAT() lors de la sélection des données avec la date formatée et l'ID.

                  Reste à savoir qu'elles sont les colonnes qui te permettront d'effectuer une recherche dans la table ?

                  -
                  Edité par adrienrosi 28 avril 2017 à 8:55:03

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2017 à 9:18:19

                    Oui je sais que la table est mal conçue et qu'il est préférable de faire deux tables avec numéro id, jointure etc... mais c'est ce que l'on ma donné pour créer des numéros de facture.

                    Mon idée été de comparer les noms, le crédit et débit.

                    Si le nom et identique et si le montant du crédit correspond au montant du débit alors je met le même numéro si il y a un truc qui diffère j'incrémente le numéro mais je bloque.

                    J'ai remplacé le while par un foreach voici mon nouveau code si tu pouvais m'aider ce serai cool.

                    <?php
                    $reponse_billets = $bdd->prepare('SELECT * FROM creation_num_facture ORDER BY id ASC');
                    $reponse_billets->execute();
                    function multipleExplode($separateurs = array(), $recherche_du_nom = ''){
                    	$leseparateur=$separateurs[count($separateurs)-1];
                    	array_pop($separateurs);
                    	foreach($separateurs as $separateur){
                    		$recherche_du_nom= str_replace($separateur, $leseparateur, $recherche_du_nom);
                    	}
                    	$result= explode($leseparateur, $recherche_du_nom);
                    	return $result;
                    }
                    $i = 0; $m = 0;
                    $num = 1;
                    $tableau = array();
                    
                    while( $data = $reponse_billets->fetch() )
                        {
                    		$recherche_du_nom =''.trim(rtrim($data['nom'])).'';
                    		$type_reglement = multipleExplode(array('cb', 'esp', 'chq', 'virement', 'ancv'), $recherche_du_nom);
                            $tableau[$data['id']][] = $data;// alimente le tableau
                        }
                    echo'<table>
                    	<tr>
                    		<td>Date</td>
                    		<td>num facture</td>
                    		<td>nom</td>
                    		<td>Debit</td>
                    		<td>Credit</td>
                    		<td>lettrage</td>
                    	</tr>';
                    foreach ($tableau as $key => $resultat)
                    	{
                    		echo'<tr>';
                    		foreach($resultat as $cle => $values)
                    			{
                    				$date = DateTime::createFromFormat('d/m/Y', $values['date']); // Extraire la date dans le bon format
                    				$annee_mois = $date->format('Ym'); // Récupérer l'annee + mois (ex: 201704 pour XX/04/2017)
                    				if( $m != $annee_mois ){ // Si $annee_mois est different du dernier mois enregistré.
                    					$m = $annee_mois; // On met à jour le dernier mois enregistré.
                    					$i = 0; // On reset le compteur.
                    				}
                    				$num_facture = 'M'.$annee_mois.str_pad(++$i, 3, '0', STR_PAD_LEFT); // création du num de facture.
                    				echo'<td>'.$values['date'].'</td>';
                    				echo'<td>';
                    				echo $num_facture.'';
                    				echo'</td>';
                    				echo'<td>';
                    					echo''.$values['nom'].'';
                    				echo'</td>
                    				<td>'.$values['debit'].'</td>
                    				<td>'.$values['credit'].'</td>
                    				<td>'.$values['lettrage'].'</td>';
                    			}
                    		echo'</tr>';
                    	}
                    echo'</table>';
                    $reponse_billets->closeCursor();
                    ?>



                    • Partager sur Facebook
                    • Partager sur Twitter

                    Création de site internet dansle7.fr Référencement et publicité gratuites sur commercesdu7.fr

                      28 avril 2017 à 9:30:15

                      Bonjour,

                      J'entends, mais bidouiller une mauvaise base revient à faire du mauvais travail, modifie le fichier d'origine ce sera plus propre et plus efficace que ce que tu tentes de faire.

                      Qui plus est tu ne pourras tout simplement pas garantir l'unicité de tes numéros de factures si tu traites en PHP des données redondantes issues de ta base. Tu pourras le faire avec ton script, mais si tu dois pouvoir par exemple retrouver un numéro de facture pour une date et un nom donné, tu ne pourras plus.

                      Edit : modifier la base est d'autant plus simple que tu as toutes les données nécessaires pour y parvenir.

                      -
                      Edité par adrienrosi 28 avril 2017 à 9:31:09

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 avril 2017 à 9:42:29

                        Tes postes mon fait penser à un truc, en assemblant les deux fichiers pourri du départ j'ai créé une colonne avec un lettrage qui est unique pour chaque clients.

                        je vais essayer avec ça.

                        franchement je n'ai pas le courage de revenir sur les fichiers de départ ou les noms étaient mal saisi parfois avec un - parfois sans avec des fautes de frappe etc...

                        J'ai tout contrôlé ligne par ligne et il y en a plus de 5000 pour essayer d'avoir un semblant de fichier propre.

                        Le but de la manœuvre et juste de mettre des numéros de facture et de sortir un tableau ensuite il est bien évident que je ne travaillerai pas comme ça.

                        En tout cas merci de ton aide

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Création de site internet dansle7.fr Référencement et publicité gratuites sur commercesdu7.fr

                        création de numéro de facture

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown