S24
script calcolo utile approssimativo
Buongiorno, mi sono creato uno script per il calcolo dell'utile prendendo come costo di acquisto quello del fornitore primario. Mi è sempre andato bene, ma con le forti oscillazioni di prezzi degli ultimi periodi i calcoli logicamente non sono più così precisi poichè il prezzo di acquisto sarà sempre l'ultimo inserito, andando a cambiare notevolmente il calcolo dell'utile già in pochi mesi. Ho ovviati al problema prendendo come riferimento il "prezzo di acquisto medio FIFO calcolato alla data del documento". In questo caso tutto ok, mi andrebbe benissimo per quel che devo fare. Il problema mi sorge nel riepilogo fatture accompagnatorie. Mentre quando visualizzo la fattura accompagnatoria riesco tramite lo script a richiamare i giusti valori, questo non riesco a farlo dal riepilogo fatture. E' un peccato perchè risulta molto comodo senza dover aprire ogni singola fattura. In pratica non riesco a capire quale stringa devo inserire per rendere lo script funzionante.
Riporto di seguito gli script che utilizzo per il calcolo in ogni singola fattura accompagnatoria:
script per il calcolo utile con prezzo di acquisto fornitore primario:
Option Explicit
Dim Quantita Dim IdArticolo Dim PrezzoFornitorePrimario Dim PrezzoListino Dim TotaleLinea Dim CodiceArticolo
Quantita = Rdy.toDouble(RowItem.CustomField(30)) IdArticolo = Rdy.toLong(RowItem.CustomField(10)) PrezzoFornitorePrimario = Rdy.toDouble(Rdy.Product(IdArticolo).CustomField(60)) PrezzoListino = Rdy.toDouble(RowItem.CustomField(90)) TotaleLinea = Rdy.toDouble(RowItem.CustomField(61)) CodiceArticolo = RowItem.CustomField(15)
If CodiceArticolo="" And (RowItem.CustomField(5))="Spese di trasporto" Then TotaleLinea=0 End If If CodiceArticolo="" And (RowItem.CustomField(5))="Spese di incasso" Then TotaleLinea=0 End If If CodiceArticolo="" Then Response.Write(Rdy.FormatCurrency(TotaleLinea-PrezzoListino*Quantita)) Else Response.Write(Rdy.FormatCurrency(TotaleLinea-PrezzoFornitorePrimario*Quantita)) End If
script per il calcolo utile con prezzo di acquisto medio FIFO calcolato alla data del documento:
Option Explicit
Dim Quantita Dim IdArticolo Dim PrezzoFornitorePrimario Dim PrezzoAcquisto Dim PrezzoListino Dim TotaleLinea Dim CodiceArticolo
Quantita = Rdy.toDouble(RowItem.CustomField(30)) IdArticolo = Rdy.toLong(RowItem.CustomField(10)) PrezzoFornitorePrimario = Rdy.toDouble(Rdy.Product(IdArticolo).CustomField(60)) PrezzoAcquisto = Rdy.toDouble(RowItem.CustomField(400)) PrezzoListino = Rdy.toDouble(RowItem.CustomField(90)) TotaleLinea = Rdy.toDouble(RowItem.CustomField(61)) CodiceArticolo = RowItem.CustomField(15)
If CodiceArticolo="" And (RowItem.CustomField(5))="Spese di trasporto" Then TotaleLinea=0 End If If CodiceArticolo="" And (RowItem.CustomField(5))="Spese di incasso" Then TotaleLinea=0 End If If CodiceArticolo="" Then Response.Write(Rdy.FormatCurrency(TotaleLinea-PrezzoListino*Quantita)) Elseif CodiceArticolo><"" and PrezzoAcquisto>0 Then Response.Write(Rdy.FormatCurrency(TotaleLinea-PrezzoAcquisto*Quantita)) Else Response.Write(Rdy.FormatCurrency(TotaleLinea-PrezzoFornitorePrimario*Quantita)) End If
Questo di seguito invece è lo script che utilizzo per il calcolo dell'utile utilizzando come prezzo di acquisto quello del fornitore primaio:
Option Explicit
Dim Quantita, PrezzoFIFO, PrezzoListino, TotaleLinea Dim IdComposizione, RigaComposizione, TotCosto, RigaDoc Dim TotaleMargine Dim CodiceArticolo Dim SpeseTrasporto
TotaleMargine=0
For Each RigaDoc In Doc.Rows
IdComposizione=Rdy.toLong(RigaDoc.CustomField(190)) If IdComposizione>0 Then If Ucase(RigaDoc.CustomField(5))="TESTA COMPOSIZIONE" Then TotCosto = 0 For Each RigaComposizione In RigaDoc.Doc.DocRows If Rdy.toLong(RigaComposizione.CustomField(190))=IdComposizione Then If Ucase(RigaComposizione.CustomField(5))<>"TESTA COMPOSIZIONE" And (RigaComposizione.Product.CustomField(60))<>"" Then Quantita = RigaComposizione.Quantity PrezzoFIFO = RigaComposizione.Product.CustomField(60) TotCosto = TotCosto+Quantita*PrezzoFIFO CodiceArticolo = RigaDoc.CustomField(15) End If End If Next TotaleLinea = Rdy.toDouble(RigaDoc.CustomField(61)) TotaleMargine = TotaleMargine + (TotaleLinea-TotCosto) End If
ElseIf (RigaDoc.Product.CustomField(60))="" And (RigaDoc.CustomField(5))="Spese di trasporto" Or (RigaDoc.CustomField(5))="Spese di incasso" Then Quantita = RigaDoc.Quantity PrezzoListino = 0 TotaleLinea = 0 TotaleMargine = TotaleMargine + (TotaleLinea-PrezzoListino*Quantita)
ElseIf (RigaDoc.Product.CustomField(60))="" Then Quantita = RigaDoc.Quantity PrezzoListino = Rdy.toDouble(RigaDoc.CustomField(90)) TotaleLinea = Rdy.toDouble(RigaDoc.CustomField(61)) TotaleMargine = TotaleMargine + (TotaleLinea-PrezzoListino*Quantita)
Else ' Riga standard Quantita = RigaDoc.Quantity PrezzoFIFO = RigaDoc.Product.CustomField(60) TotaleLinea = Rdy.toDouble(RigaDoc.CustomField(61)) TotaleMargine = TotaleMargine + (TotaleLinea-PrezzoFIFO*Quantita)
End If Next Response.Write(Rdy.FormatCurrency(TotaleMargine))
Per fare la tessa cosa utilizzando il prezzo di acquisto medio FIFO calcolato alla data del documento credo che dovrei sostituire le stringhe:
PrezzoFIFO = RigaComposizione.Product.CustomField(60) e
PrezzoFIFO = RigaDoc.Product.CustomField(60)
sostituendole con:
PrezzoFIFO =RigaComposizione.RowItem.CustomField(400)) e
PrezzoFIFO =RigaDoc.RowItem.CustomField(400))
non funziona. Capisco non si tratti di un calcolo preciso, ma a me potrebbe andare bene ugualmente. Sapreste mica indicarmi la giusta stringa da inserire? Grazie Riccardo
|