• Moderatore

    Boh, prova a ripostare il codice così com'è adesso...


  • User
    
    articolo = request.form("descrizione") 
    qta_da_scaricare = request.form("qta_da_scaricare")   
    
    sql="SELECT * FROM db WHERE Articolo = & "'" & articolo & "' and (QtaDoc-QtaSpuntata>0) " 
    Set rsa = Server.CreateObject("ADODB.Recordset")
    
       qtadoc = rsa.fields("QtaDoc")
       qtaspu = rsa.fields("QtaSpuntata")
       qtarest = qtadoc-qtaspu
    
        if qta_da_scaricare < qtarest Then   
        qtarest = qta_da_scaricare
        End If   
        
        rsa.fields("QtaSpuntata") = "" & qtarest + qtaspu & ""   
        qta_da_scaricare = qta_da_scaricare-qtarest
    
    rsa.update
    rsa.MoveNext
    loop
    
    

    Ho provato però mettendo un valore minore della quantità dell'articolo tipo 25 e succede che il primo articolo scarica sempre 538 al secondo ancora 538 e al terzo -513 e agli altri correttamento zero


  • User

    ho trovato scusami c'era prima di questo codice un'altro che creava il loop del primo articolo e lo ripeteva.... ora va benissimo, scusami....
    ma resta il fatto se si mette un valore minore come spiegato su


  • Moderatore

    Scusa, ma queste righe?

    
    rsa.Open sql, Conn, 3, 3 
    do while not rsa.eof
    
    

    Sono sparite...

    PS: hai loggato sulla pagina i valori a ciascun giro?


  • User

    @artcava said:

    Scusa, ma queste righe?

    >
    rsa.Open sql, Conn, 3, 3 
    do while not rsa.eof
    
    >```
    
    Sono sparite...
    
    Durante il copia incolla le ho omesse,  ma come ti dicevo il problema era al di fuori dello script che ho corretto, scusami, resta il fatto se metto valore minore...

  • Moderatore

    @djjunior said:

    resta il fatto se metto valore minore...

    Questo valore minore sta in QtaDoc? Oppure?


  • User

    @artcava said:

    Questo valore minore sta in QtaDoc? Oppure?

    sta in

    qta_da_scaricare = request.form("qta_da_scaricare")

    se

    qta_da_scaricare = 25
    invece di 600 come provato finora


  • Moderatore

    ...

    
       qtadoc = rsa.fields("QtaDoc")
       qtaspu = rsa.fields("QtaSpuntata")
       qtarest = qtadoc-qtaspu
    
    
        if qta_da_scaricare < qtarest Then   
        qtarest = qta_da_scaricare
        End If   
        
        rsa.fields("QtaSpuntata") = "" & qtarest + qtaspu & ""   
        qta_da_scaricare = qta_da_scaricare-qtarest
    -----------
       qtadoc = 538
       qtaspu = 0
       qtarest = 538-0 = 538
    
    
        if 25 < 538 Then   
        qtarest = 25
        End If   
        
        rsa.fields("QtaSpuntata") = "" & 25 + 0 & ""   = 25
        qta_da_scaricare = 25-25 = 0
    
    
    

    Succede qualcosa di diverso da questo?


  • User

    effettivamente no, però come ti dicevo tu se la quantità da scaricare è meno di 538, cioè esempio 25
    ho il primo articolo scaricato 538 e il secondo -513


  • Moderatore

    Non è possibile, puoi ripostare tutto così com'è?


  • User

    ho trovato l'inghippo, ho utilizzato la funzione CInt:
    qta_da_scaricare = CInt(request.form("qta_da_scaricare"))
    e va tutto benissimo....
    grazie 1000 ARTCAVA


  • User

    Scusami ARTCAVA
    approfitto del tuo aiuto sempre in merito allo script di cui sopra.
    Se si presentasse il caso per di aver esaurito tutta la quantità scaricata da tutti i prodotti es di 3 prodotti uguali:

    PASTA qta 538 qtascaricata 538
    PASTA qta 538 qtascaricata 538
    PASTA qta 538 qtascaricata 538

    e provo ad inserire altra quantità tipo 20
    è possibile inserirla al primo disponibile?
    es:

    PASTA qta 538 qtascaricata 558
    PASTA qta 538 qtascaricata 538
    PASTA qta 538 qtascaricata 538

    Grazie ancora


  • Moderatore

    Io farei più o meno così:

    
    articolo = request.form("descrizione") 
    qta_da_scaricare = CInt(request.form("qta_da_scaricare"))
    
    sql="SELECT * FROM db WHERE Articolo = & "'" & articolo & "' and (QtaDoc-QtaSpuntata>0) " 
    Set rsa = Server.CreateObject("ADODB.Recordset")
    
    
       qtadoc = rsa.fields("QtaDoc")
       qtaspu = rsa.fields("QtaSpuntata")
       qtarest = qtadoc-qtaspu
    
    
        If qta_da_scaricare < qtarest Then   
        qtarest = qta_da_scaricare
        End If   
        
        rsa.fields("QtaSpuntata") = "" & qtarest + qtaspu & ""   
        qta_da_scaricare = qta_da_scaricare-qtarest
    
    
    rsa.update
    rsa.MoveNext
    loop
    
    if qta_da_scaricare > 0 Then
        sql="SELECT TOP(1) * FROM db WHERE Articolo = & "'" & articolo & "'
        Set rsa = Server.CreateObject("ADODB.Recordset")
        qtaspu = rsa.fields("QtaSpuntata")
        rsa.fields("QtaSpuntata") = qtaspu + qta_da_scaricare
        rsa.update
    End If
    
    

    Però quello che vorrei suggerirti è di verificare prima sul piano logico se questa modalità ha senso per l'attività del tuo cliente o la tua se lo stai facendo per te.
    Mi riferisco al fatto che qui intravvedo una specie di gestione del magazzino, dove ci saranno ingressi di prodotti suddivisi in lotti e vendite successive dove dalle quantità dei vari lotti vengono stornate.
    Ma come fai a gestire una quantità in uscita superiore a quella consolidata in magazzino?


  • User

    Grazie ARTCAVA
    anche del suggerimento, ma è stata una richiesta specifica del cliente avere questa possibilità di aumentare perchè in magazzino potrebbe esserci stesso articolo non quantizzato.
    Grazie ancora e ti auguro con l'occasione Buona Pasqua


  • Moderatore

    Grazie, Buona Pasqua anche a te!


  • User

    Ciao ARTCAVA, scusa se riapro questo post, ho necessità di un aiuto al suddetto script che in mysql ha funzionato alla grande, ma lo stiamo "trasformando" in sql server, i campi in mysql erano tutti testo (longtext) e non creavano problemi ora in sql sono varchar(max) e mi sembra che le operazioni di confronto non agiscono su questi tipi di campi, potresti darmi una mano a "convertirlo" per utilizzo in sql?
    Infatti ho questo errore: i tipi di dati varchar(max) e varchar(max) nell'operatore subtract sono incompatibili
    Grazie e scusa ancora...


  • Moderatore

    Ciao djjunior, puoi postare lo script?
    Magari nella sezione "MySQL e altri Database"

    Grazie


  • User

    Grazie ARTCAVA,
    lo script lo vorrei sottoporre primo a te che me lo hai suggerito, perchè in pratica come vedi il parametro che dovrà passare qta_da_scaricare è con decimali tipo: 151.500, il campo nel db è decimal(10,3), sicuramente dovrei utilizzare qualche funzione di conversione o formatnumber (che non so quale, visto sottrazioni e somme), essendo che dal db come saprai i campi decimali hanno valore con i decimali es: 120.000, ma è solo una visualizzazione perchè quando li stampo a video questo valore lo vedo: 120 cioè senza zeri o punto(virgola)decimale.
    ecco lo script se puoi darmi una mano:

    
    articolo = request.form("descrizione") 
    qta_da_scaricare = "151.500"
    
    sql="SELECT * FROM db WHERE Articolo = '" & articolo & "' and (QtaDoc-QtaSpuntata)>0 "
    Set rsa = Server.CreateObject("ADODB.Recordset")
    rsa.Open sql, Conn, 3, 3
    do while not rsa.eof
    
       qtadoc = rsa.fields("QtaDoc")
       qtaspu = rsa.fields("QtaSpuntata")
       qtarest = qtadoc-qtaspu
    
        if qta_da_scaricare < qtarest Then   
        qtarest = qta_da_scaricare
        End If   
        
        rsa.fields("QtaSpuntata") = "" & qtarest +  qtaspu & ""   
        qta_da_scaricare = qta_da_scaricare - qtarest
    
    
    rsa.update
    rsa.MoveNext
    loop
    
    if qta_da_scaricare > 0 Then
        sql="SELECT top(1) * FROM db WHERE Articolo = & "'" & articolo & "'
        Set rsa = Server.CreateObject("ADODB.Recordset")
        rsa.Open sql, Conn, 3, 3
        qtaspu = rsa.fields("QtaSpuntata")
        rsa.fields("QtaSpuntata") = qtaspu + qta_da_scaricare
        rsa.update
    End If
    
    rsa.close
    
    

    Grazie 1000 per l'aiuto.