[ASP] scaricare articoli

Discussione in 'Classic ASP' iniziata da djjunior, 29 Marzo 2019.

  1. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    83
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    Ciao a tutti,
    devo creare un sistema che scarica gli articoli da uguale prodotto in pratica:
    Ho un form dove ho 2 campi
    NOME ARTICOLO e QUANTITA' DA SCARICARE.
    Nel db ho gli articoli con nome, quantità massima da consumare e quantita consumata.
    Esempio: ho 2(o piu) Prodotti con id diverso ma con lo stesso nome : BORSE e possono avere quantità diverse tipo:
    id: 1 - BORSE - qta 300 - qtaconsumata:0
    id: 3 - BORSE - qta 100 - qtaconsumata:0
    id: 6 - BORSE - qta 230 - qtaconsumata:0
    ora dovrei scaricare la quantità....Se nel form faccio un richiesta tipo:
    NOME ARTICOLO: BORSE
    QUANTITA DA SCARICARE: 650
    Se la QUANTITA' DA SCARICARE è maggiore cioè 650 deve elaborarmi:
    id: 1 - BORSE - qta 300 - qtaconsumata:300
    id: 3 - BORSE - qta 100 - qtaconsumata:100
    id: 6 - BORSE - qta 230 - qtaconsumata:230
    o
    NOME ARTICOLO: BORSE
    QUANTITA DA SCARICARE: 420
    Se la QUANTITA' DA SCARICARE è minore cioè 420 deve elaborarmi:
    id: 1 - BORSE - qta 300 - qtaconsumata:300
    id: 3 - BORSE - qta 100 - qtaconsumata:100
    id: 6 - BORSE - qta 230 - qtaconsumata:20
    o
    NOME ARTICOLO: BORSE
    QUANTITA DA SCARICARE: 250
    Se la QUANTITA' DA SCARICARE è ancora minore cioè 250 deve elaborarmi:
    id: 1 - BORSE - qta 300 - qtaconsumata:250 (eliminare dal record con qta più alta)
    id: 3 - BORSE - qta 100 - qtaconsumata:0
    id: 6 - BORSE - qta 230 - qtaconsumata:0

    Il tutto deve essere salvato su db
    Grazie a può aiutarmi
     
    Ultima modifica: 29 Marzo 2019
  2. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    83
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    nessun aiuto?
     
  3. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    32
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    Per fare quello che chiedi, devi creare un piccolo sottoprogramma
    1. impostare un array bidimensionale
    2. caricare l'array con id e qta per ognun id
    3. usare un ciclo do until fino a che la qtarichiesta = qtaprelevata
    e scaricare qta l'elemento inlinea nel ciclo
    4. all'uscita dal ciclo ci possono avere piu condizioni
    a) la qta è stata trovata tutta e in tal caso aggiornare i record che sono stati scaricati fino all'elemento che ha uguale la qtaprelevata con la qtarichiestam in uscita la qta è stata presa tutta

    b) la qta non è stata trovata tutta, in qual caso aggiornare tutto a zero perche li hai presi tutti ma ti mancano ancora articoli
    in uscita la qta è stata prelevata parzialmente
    ora bisogna
    ... scrivere la sub.....
    ciao
     
  4. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    83
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    purtroppo non saprei come farlo mi puoi aiutare?
     
  5. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    32
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    ti ho scritto un piccolo programma per fare quello che mi hai chiesto dato che avevo qualche minuto libero ... dagli una occhiata, la tabella access è in descrizione nel codice... e presumo la debba costruire uguale alla mia versione o adattarla
    io ci ho messo qualche record per prova ma tu ci devi mettere lo stesso un po di record se la crei
    il programma usa la tecnica di richiamare se stesso per elaborare i dati... il db sta nella cartella DB e si chiama database.accdb
    presumo che tu lo crei è un access 2007 o successivo
    Codice:
    <%
    Public SQL,RS,conn,DB
    DB="DB/DATABASE.Accdb"
    Set conn = Server.CreateObject("ADODB.Connection")
    Set RS = Server.CreateObject("ADODB.Recordset")
    CurrentProject ="Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" &Server.MapPath(DB) & ";Persist Security Info=False;"
    conn.Open CurrentProject
    '
    'connessione al DB ACCESS effettuata
    '
    Dim Descrizione,idarticolo,prezzo,qtapresente,qtaprelevata,SW
    Dim ThisProgram,formname
    ThisProgram="ScaricaArticoli.asp"
    formname=left(ThisProgram, len(ThisProgram) - 4)
    descrizione="borse"
    SW=""
    for i=1 to Request.form("SW").Count
      SW= Request.form("SW")(i)
    next
    for i=1 to Request.QueryString("descrizione").Count
      descrizione=Request.QueryString("descrizione")(i)
    next
    for i=1 to Request.QueryString("qta").Count
      qta=Request.QueryString("qta")(i)
    next
    for i=1 to Request.QueryString("idarticolo").Count
      idarticolo=Request.QueryString("idarticolo")(i)
    next
    
    if SW="SCARICO" then
     Scarica descrizione, qta
    end if
    if SW="SCARICO" then
     Ricarica idarticolo, qta
    end if
    
    %>
    <html>
    <head>
    <title>Scarico articoli</title>
    <script type="text/javascript" language="javascript">
    function Seleziona(pagina) {
     document.<%=formname%>.action = pagina;
     document.<%=formname%>.submit();
     return true;
    }
    function PrelevaArticolo() {
    var descrizione;
     descrizione=prompt("descrizione articolo da scaricare","");
     if (descrizione){
      var qta=prompt("quanti pezzi ?",0);
      Scarica(qta,descrizione)
      }
    }
    function CaricaArticolo(){
     var idArticolo;
     document.getElementById("SW").value="CARICO";
     idArticolo=prompt("idArticolo da ricaricare","");
     if (idArticolo) {
      var qta=prompt("quanti pezzi ?",0);
      Ricarica(qta,idArticolo);
      }
    }
    function Scarica(Q,D){
      alert("vuoi scaricare n."+Q+" "+D);
      document.getElementById("SW").value="SCARICO";
      Seleziona("ScaricaArticoli.asp?descrizione="+D+"&qta="+Q);
    }
    function Ricarica(Q,I){
      alert("vuoi caricare n."+Q+" pezzi all'articolo id="+I);
      document.getElementById("SW").value="CARICO";
      Seleziona("ScaricaArticoli?idarticoloe="+I+"&qta="+Q);
    
    }
    function RicercaArticolo(des){
    Seleziona("ScaricaArticoli.asp?descrizione="+des);
    }
    </script>
    
    <style type="text/css">
    div.box
    {
        width:99.6% !important;  width /**/:99.6%;
        height:450px !important; height /**/: 450px;
        padding: 4px;
        border:1px solid #EEE; border-right:0 solid;
        overflow:auto;
       background-color:#CCCCCC;
    }
    .txt1 {
     color:blue;
     font-family:Verdana, Geneva, Tahoma, sans-serif;
     font-size: 14px;
    }
    .auto-style1 {
       color: #008000;
       text-align: center;
    }
    .auto-style2 {
       font-family: Verdana, Geneva, Tahoma, sans-serif;
       font-size: xx-small;
    }
    </style>
    
    </head>
    
    <body>
    <form name="<%=formname%>" id="<%=formname%>" action="" method="post"  >
    <input type="hidden" id="SW" name="SW" value="" />
    <%
    '
    ' struttura tabella Articoli
    '
    ' idArticolo    numerico long int
    ' descrizione   text  255 char
    ' qtaPresent    numerico long int
    ' qtaPrelevata  numerico long int
    ' prezzo        numerico double 2 decimali
    '
    '
    if descrizione="*" then
     SQL="select * from Articoli where qtapresente>0"
    else
    SQL="select * from Articoli where  descrizione='"& descrizione & "' and qtaPresente > 0 order by idArticolo ASC"
    end if
    RS.Open SQL, conn, 3, 3
    %>
    <p align="center"><h2 class="auto-style1">Programma di test - scarico articoli dal magazzino</h2></p>
    <h3 class="txt1">RICERCA ARTICOLI:
    <input type="text" class="txt1" id="descrizione" name="descrizione" value="<%=descrizione%>" maxlength="50" size="50" /> <input type="button" value=" ricerca " class="txt1" onclick="RicercaArticolo(descrizione.value)" /></h3>
    &nbsp;
    <table width="99.6%" border="0" cellspacing="2" cellpadding="3">
      <tr bgcolor="#ff9999" class="txt1">
                     <th width="15%" align="center">ID.ARTICOLO</th>
                     <th width="40%">DESCRIZIONE</th>
                     <th width="15%">Q.TA'PRESENTE</th>
                     <th width="15%">Q.TA'PRELEVATA</th>
                     <th width="15%">PREZZO UNI.</th>
        </tr>
    </table>
    <div class="box">
    <table width="99.6%" border="0" cellspacing="2" cellpadding="3">   
    <%
    
    if not RS.EOF then
       do until RS.EOF
         idArticolo=RS("idArticolo")
         StampaRiga(RS)
         RS.Movenext
       loop
    end if  
    RS.Close
    %>
    </table>
    </div>
    <p>
    <input type="button" value="RICARICO" onclick="CaricaArticolo()" class="auto-style2" ><span class="auto-style2">&nbsp;&nbsp;
    </span>
    <input type="button" value="PRELIEVO" onclick="PrelevaArticolo()" class="auto-style2" ></p>
       <p class="auto-style2"> free software by vic53 2019</p>
    </form>
    </body>
    
    </html>
    <%
    sub StampaRiga(RS)
    prezzo=formatNumber(RS("prezzo"),2)
    response.write("<tr bgcolor=""#ffff99""> ")
    response.write("<td  align=""center"" width=""15%"">" & RS("idArticolo") & "</td>")
    response.write("<td  width=""40%"">" & RS("descrizione") & "</td>")
    response.write("<td  align=""center"" width=""15%"">" & RS("qtaPresente") & "</td>")
    response.write("<td  align=""center"" width=""15%"">" & RS("qtaPrelevata") & "</td>")
    response.write("<td  align=""right"" width=""15%"">" & prezzo & "</td>")
    response.write("</tr> ")
    end sub
    
    sub  Scarica(descrizione, qta)
    'limite al numero degli articoli nella matrice articoli "Mart" con descrizione uguale = 200
    Dim Mart(200,2), ctr,qtascarico,idx
    qtascarico=qta
    SQL="select * from Articoli where descrizione = '"&descrizione&"' order by idarticolo ASC"
    RS.Open SQL, conn, 3, 3
    ctr=0
    if not RS.EOf then
     do until RS.EOF
      ctr=ctr+1 'numero di articoli da cui scaricare
      Mart(ctr,0)=RS("idArticolo")
      Mart(ctr,1)=RS("qtaPresente") - RS("qtaPrelevata")
      Mart(ctr,2)=0
      RS.Movenext
     loop
    end if
    RS.Close
    'la matrice contiene i record da scaricare le qta
    ' questo è l'agoritmo che fara' lo scarico
    
    idx=0
    do until qtascarico = 0
     idx=idx+1
     if (idx > ctr) then '** fine matrice caricata con le qta
      exit do
     end if
     if (Mart(idx,1) > qtascarico) then   ' qta - qtascarico è la qta rimanente da scaricare
      Mart(idx,2)=qtascarico 'registra la qta prelevata in Mart(idx,2)
      qtascarico=Mart(idx,2) - qtascarico 'diventa zero
      exit do
     else
      if (Mart(idx,1) = qtascarico) then
         Mart(idx,2)=qtascarico 'registra la qta prelevata in Mart(idx,2)
         qtascarico=Mart(idx,2) - qtascarico 'diventa zero
         Mart(idx,2)=Mart(idx,1)
         exit do
      else
         Mart(idx,2)=Mart(idx,1)
         qtascarico=qtascarico - Mart(idx,2)
      end if   
     end if  
    loop
    'ora stampa la matrice
    W "matrice articoli - n.righe="&ctr
    W " id articolo | qtapresente | qtaprelevata|"
    for idx=1 to ctr
     W Mart(idx,0)&" | "&Mart(idx,1)&" | "&Mart(idx,2)
    next
    
    end sub
    
    sub W(msg)
    response.write "<br>"&msg
    end sub
    
    sub Ricarica(idarticolo, qta)
    
    end sub
    
    'chiusura connessione al DB
    conn.Close
    Set conn = nothing
    Set RS = nothing
    
    %>
    
    
     
  6. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    32
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    naturalmente il programma si chiama ScaricaArticoli.asp e il nome deve stare nella variabile ThisProgram in testa al codice dato che richiama se stesso... una altra cosa, volevo fare anche il ricarico per aggiornare le qta sugli articoli ma non l'ho terminato, poi lo riproseguirò se ti serve l'esempio.....
     
    Ultima modifica: 6 Aprile 2019
  7. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    83
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    grazie dello script Vic53 utilizzo mysql e ho fatto qualcosa nel frattempo anche io di più semplice ma adatto alla mia piattaforma, senza richiamo pagina etc.
    Codice:
    articolo = request.form("descrizione")
    qta_da_scaricare = request.form("qta_da_scaricare")
    
    
    sql="SELECT * FROM db WHERE Articolo ="
    sql=sql & "'" & articolo & "' and (qta_articolo-qta_spuntata>0) "
    Set rsa = Server.CreateObject("ADODB.Recordset")
    rsa.Open sql, Conn, 3, 3
    
    do while not rsa.eof
    
    qtadoc = rsa.fields("qta_articolo")
    qtaspu = rsa.fields("qta_spuntata")
    
    qtarest = qtadoc-qtaspu
    
    rsa.fields("qta_spuntata") = "" & qtarest & ""
    rsa.update
    
    qtaultima = qta_da_scaricare-qtarest
    
    rsa.fields("qta_Spuntata") = "" & qtaultima & ""
    rsa.update
    
    
    rsa.MoveNext
    loop
    rsa.close
    
    Ma ha un errore cui non riesco a risolvere:
    Su 4 prodotti uguali mi fa:
    al primo mi toglie la quantità giusta, al secondo la quantità restante, ma la quantità restante me la toglie anche agli altri 2 prodotti quindi 3 prodotti hanno la quantità restante, tipo:
    Cerco prodottoa e imposto come quantità da scaricare 600, me ne trova 4:
    1) PRODOTTOA : 538 ---> 538
    2) PRODOTTOA : 538 ---_> 62
    3) PRODOTTOA : 538 ----> 62
    4) PRODOTTOA : 538 ----> 62
    Naturalmente al punto 3 e punto 4 non doveva scaricare nulla, come posso ovviare?
    Puoi aiutarmi su questo mio script scovando l'errore che commetto e dove?
    Ti ringrazio
     
  8. vic53

    vic53 Nuovo Utente

    Registrato:
    9 Febbraio 2019
    Messaggi:
    32
    Mi Piace Ricevuti:
    0
    Punteggio:
    6
    Sesso:
    Maschio
    Occupazione:
    in pensione ( ex sistemista Alitalia Servizi)
    Località:
    Fonte Nuova
    Home Page:
    perchè non usi la tecnica che ti ho indicato? carichi la matrice e poi esegui le sottrazioni sulla matrice aggiornando il database....
    la subroutine che ti ho messo "Scarica(descrizione, qta)" se la modifichi risolvi iltuoo problema
    Prima utilizzi un ciclo per caricare la matrice con gli oggetti con nome uguale poi se guardi la routine quella alla fine del ciclo scarica le qta correttamente...
    tu non hai voluto provare a eseguire il programma che ti ho fatto altrimenti avivi gia risolto... puoi vreare un access alocale e guardare l'esecuzione...
    al termine la matrice contiene i prodotti come idarticolo qtaoriginale e qta da prelevare...
    quelli da non aggiornare sono a zero le qta prelevate e quindi non li tocchi.
    al termine della routine basta scorrere la matrice caricata e aggiornare solo quelli che hanno qta prelevata > di zero e hai finito...
    Se non riesci ti ritraduco la routine in Mysql dato che lo uso anche io,,,,
    ciao

    ps nel punto dove sta scritto
    ora stampa la matrice... li puoi fare un ciclo per aggiornare il db ai record che hanno Mart(idx,2) > 0
    che sarebbe la qta che togli a quel record (la somma di tutti i Mart(idx,2) > zero corrisponse alla qta prelevata) l'idArticolo sta nel Mart(idx,0)
    ***
     
    Ultima modifica: 10 Aprile 2019
  9. djjunior

    djjunior Utente Attivo

    Registrato:
    24 Luglio 2004
    Messaggi:
    83
    Mi Piace Ricevuti:
    1
    Punteggio:
    8
    Grazie Vic53 per il tuo aiuto, l'aggiornamento dello scarico della quantità avviene tramite caricamento pagina mediante ajax dove aggiorna db mysql con le quantità , in pratica ho un elenco di tutti gli articoli ogni articolo ha un campo input QUANTITA' DA SCARICARE con funzione onchange e li imposto il nr da scaricare che come ti dicevo carica una pagina tramite ajax e mi aggiorna agli articoli di uguale nome la quantità da scaricare , vedi esempio allegato.
     

    Files Allegati:

    • test.jpg
      test.jpg
      Dimensione del file:
      58,2 KB
      Visite:
      7
Sto caricando...

Condividi questa Pagina