79 messaggi dal 04 settembre 2010
Buongiorno,
ho un problema con la gestione degli scarichi di articoli da un magazzino con il FIFO.
Praticamente dovrei controllare il codice articolo la data acquisto e la quantità in magazzino, e in fase di vendita gli articoli dovrebbero scaricare le quantità in base alla data più vecchia di acquisto, e in caso di vendita superiore alla giacenza più vecchia deve scaricare la differenza dell'articolo con le date successive più recenti.

Non so proprio come gestire il tutto.
Chiedo un grosso aiuto perché sono in ritardo con la conclusione.

Grazie anticipatamente
287 messaggi dal 13 novembre 2009
Ciao
Metterei incidi e stored procedure per ottimizzare e sfruttare al massimo clr database.
Così ti metti al riparo da giacenze in negativo e quindi in progressività di scarico magazzino per codart / data carico / qnt giacenza
Modificato da flaviovb il 07 marzo 2019 19:32 -
79 messaggi dal 04 settembre 2010
Grazie per la risposta,
sapresti indirizzarmi verso qualche esempio? non riesco ad immaginare lo scenario.
Grazie
117 messaggi dal 30 novembre 2004
Quando recuperi i prodotti disponibili ordinali per data di ingresso decrescente e li aggiungi al carrello.
95 messaggi dal 01 febbraio 2017
Magazzino Presente !
Se vuoi implementare un sistema di FIFO, ti serve poter distinguere un prodotto da un'altro all'interno dello stesso articolo, quindi a meno che nn ti codifichi ogni volta lo stesso prodotto con un codice articolo diverso, non potrai distinguere quel "carico" con relativa data da un'altro ...
La soluzione che ti suggerisco è quella di implementare (non so se hai già questo necessità) un sistema di lotti, per cui associ allo stesso articolo più lotti, con relativa data di carico (ma anche data scadenza ecc), in relazione uno a molti.
A quel punto una semplice query per l'articolo ti riporterà tutti i "lotti" presenti per quel prodotto, ordinati magari per data di carico, provvedendo a scaricare in automatico il lotto più vecchio, e se finito prosegue nel lotto successivo, fino a completa evasione della quantità dello scarico del rigo.

Ciao.
Gino.

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
79 messaggi dal 04 settembre 2010
Intanto ringrazio tutti per le risposte,
credo di essere stato molto riassuntivo nell'esposizione del mio problema, non trovando soluzione per un solo passaggio che mi porterebbe a risolvere tutto il listato.
Il problema si traduce in questo:
1) Devo caricare un file Excel con nr. articoli che variano da un articolo a svariate centinaia, il file è composto da due campi (codiceArticolo, Quantità).
2) ciclo il file e memorizzo i dati nel database.
Fin qui in una condizione normale non ho problemi.

Il problema si è presentato dovendo attuare il FIFO, quindi ho predisposto la tabella principale in questo modo:
(codiceArticolo, Descrizione, DataAcquisto, Quantità, U.M.)

Adesso dovendo importare il file Excel descritto precedentemente e dovendolo scomporre in base al (CodiceArticolo, DataAcquisto,Quantità) a questo punto mi sono arenato sul ciclo che deve effettuare la procedura tenendo conto che un codiceArticolo in base alla quantità può toccare come scarico più forniture ed inserire il risultato nella tabella DettaglioScarico.

Vi posto quello che ho pensato chiedendovi di aiutarmi a completare con la parte mancante.

Connection.Open()
        Dim sda As New MySqlDataAdapter("Select Articoli_consistenze.CodArt,Articoli_consistenze.Anno,Articoli_consistenze.PrezzoAcquisto,Articoli_consistenze.Quantita," & _
                                        "Min(Distinct Articoli_consistenze.DataAcquisto) As DataAcquisto" & _
                                        " From Articoli_consistenze" & _
                                        " Where Articoli_consistenze.CodArt = '000000111'" & _
                                        " Group By Articoli_consistenze.CodArt, Articoli_consistenze.Anno,Articoli_consistenze.PrezzoAcquisto,Articoli_consistenze.Quantita" & _
                                        " Having Articoli_consistenze.Quantita > 0" & _
                                        " Order By Min(Distinct Articoli_consistenze.DataAcquisto) Limit 1", Connection)
        sda.Fill(ds)
        If i <= ds.Tables(0).Rows.Count - 1 Then

            If CInt(txtCodiceDitta.Text) > CInt(ds.Tables(0).Rows(i)("Quantita").ToString()) Then

               QUI non so andare avanti
            Else

                QUI non so andare avanti
            End If

        End If

        Connection.Close()



Questo invece è il codice che uso per importare senza il FIFO
 Dim path As String
        'Dim path1 As String
        path = Server.MapPath("~/")
        FileUpload1.SaveAs(path + FileUpload1.FileName)
        'path1 = path + FileUpload1.FileName


        Dim comm As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT * FROM [Report$];")
        Dim excelLettura As OleDb.OleDbDataReader
        'Imposto la stringa di connessione
        Using conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & (path + FileUpload1.FileName) & ";Extended Properties=Excel 8.0;")
            Try

                'apro la connessione ed eseguo la query
                conn.Open()
                comm.Connection = conn
                excelLettura = comm.ExecuteReader
                'per ogni record che trovo visualizzo a video il risultato
                Dim OrdineScarico As Integer = 0
                Dim Data As Date
                Dim CodiceDitta As String = ""
                Dim Dislocazione As String = ""
                Dim Ditta As String = ""


                Dim CODART As String = ""
                Dim Denominazione As String = ""
                Dim UM As String = ""
                Dim Quantita As Decimal

                Dim i As Integer = 0

                Dim sInizio As String = Nuc
                Dim sFine As String
                sFine = sInizio.Replace("-", "")

                While (excelLettura.Read())

                    If i >= 2 Then

                        CODART = excelLettura(0).ToString
                        Denominazione = excelLettura(1).ToString
                        UM = excelLettura(2).ToString
                        Quantita = excelLettura(3).ToString
                        OrdineScarico = excelLettura(5).ToString
                        Data = excelLettura(6).ToString
                        CodiceDITTA = excelLettura(7).ToString
                        Dislocazione = excelLettura(8).ToString
                        DITTA = excelLettura(9).ToString
                        Connection.Open()
                        Dim trans As MySqlTransaction
                        trans = Connection.BeginTransaction()

                        Try
                            Dim par As MySqlParameter = New MySqlParameter()
                            Dim cmd As MySqlCommand = New MySqlCommand()
                            'Inizia la transazione
                            cmd.Transaction = trans
                            cmd.Connection = Connection
                            cmd.CommandType = CommandType.StoredProcedure
                            cmd.CommandText = "scarico_dettaglio_veAddUpdate"
                            cmd.Parameters.AddWithValue("@_OrdineScarico", OrdineScarico)
                            cmd.Parameters.AddWithValue("@_Data", Data)
                            cmd.Parameters.AddWithValue("@_CODART", sFine)
                            cmd.Parameters.AddWithValue("@_Denominazione", Denominazione)
                            cmd.Parameters.AddWithValue("@_UnitaMisura", UM)
                            cmd.Parameters.AddWithValue("@_Quantita", Quantita)
                            cmd.Parameters.AddWithValue("@_Anno", txtEF.Text)
                            cmd.ExecuteNonQuery()

                            Dim query As String = "UPDATE materiali_ve SET UnitaMisura=@UnitaMisura WHERE CODART='" & CODART & "'"
                            Using cmd1 As MySqlCommand = New MySqlCommand(query)
                                cmd1.Parameters.AddWithValue("@UnitaMisura", UM)
                                cmd1.Connection = Connection
                                'Connection.Open()
                                cmd1.ExecuteNonQuery()
                                'Connection.Close()
                            End Using
                            'eseguo la transazione
                            trans.Commit()
                            'ProgressBar1.Increment(excelLettura.Read.ToString.Count)
                            'Label1.Text = ProgressBar1.Value & "%"

                            'ImageMsg.ImageUrl = "~/Images/MsgBoxInfo.png"
                            'lblTitolo.Text = "Conferma Eliminazione"
                            'lblTitolo.Font.Name = "Tahoma"
                            'lblTitolo.Font.Size = 12
                            'lblMessaggio.Text = "Operazione Effettuata con Successo "
                            'lblMessaggio.Font.Name = "Tahoma"
                            'lblMessaggio.Font.Size = 12
                            'MPEMsgBoxYesNo.Show()
                        Catch ex As MySqlException
                            'se si sono verificati errori faccio il rollback
                            trans.Rollback()
                            'MessageBox.Show("Aggiornamento fallito" + ControlChars.CrLf + ex.ToString, "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                        Finally
                            'chiudiamo sempre le connessioni!
                            Connection.Close()
                        End Try
                        'ProgressBar1.Value += 1

                    End If
                    i += 1
                End While
                comm.Dispose()

            Catch ex As Exception
                ImageMsg.ImageUrl = "~/Images/MsgBoxWarning.png"
                lblTitolo.Text = "Conferma Eliminazione"
                lblTitolo.Font.Name = "Tahoma"
                lblTitolo.Font.Size = 12
                lblMessaggio.Text = "Operazione non Effettuata "
                lblMessaggio.Font.Name = "Tahoma"
                lblMessaggio.Font.Size = 12
                MPEMsgBoxYesNo.Show()
            Finally
                If (conn.State = ConnectionState.Open) Then conn.Close()
            End Try

        End Using
        'Dim path As String
        Dim file_name As String = FileUpload1.FileName
        path = Server.MapPath("~/" + FileUpload1.FileName)
        Dim file As FileInfo = New FileInfo(path)
        If file.Exists Then
            file.Delete()
            'lbl_output.Text = (file_name + " file deleted successfully")
            'lbl_output.ForeColor = Color.Green
        Else
            'lbl_output.Text = (file_name + " This file does not exists ")
            'lbl_output.ForeColor = Color.Red
        End If


Spero di aver esposto in maniera chiara il mio problema, e vorrei integrare il tutto.

Grazie
Modificato da Mau67 il 08 marzo 2019 10:59 -
Modificato da Mau67 il 08 marzo 2019 12:10 -
Modificato da Mau67 il 08 marzo 2019 12:11 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.