Attribute VB_Name = "ModuloPerSILOS"
'NOTE: IN QUESTO MODULO CI METTO TUTTO CIO' CHE E' INERENTE AI SILOS DAI CALCOLI _
       ALLA VISUALIZZAZIONE DELLE IMMAGINI
Option Explicit


Public Type pGridSilos
   RowCodice As Byte
   RowDescri As Byte
   RowCapaci As Byte
   RowQuinta As Byte
   RowPercen As Byte
   RowEttoli As Byte
   RowGruMer As Byte
   RowCarPro As Byte
   RowMarMin As Byte
   RowMarMax As Byte
   RowMasVol As Byte
End Type
Public ptGridSilos As pGridSilos

Public Function SettaSilos(CodSilos As Integer, PushImgSilos As PushButton, RptGrid As ReportControl, pCaricoScarico As String) As Boolean
'ctrlLblCapacSil As Object, ctrlLblMarMinSil As Object, _
 ctrlLblContieneSil As Object, ctrlLblPercSil As Object, _
 ctrlLblQliSil As Object, ctrlLblIDSil As Object, _
 PushImgSilos As PushButton, ctrlLblMasVol As Object
   'Se mi restituisce FALSE significa che il SILOS selezionato è in MANUTENZIONE
   
   'pCaricoScarico = "C" -> Carichi; "S" -> Scarichi
   
   Dim RS As ADODB.Recordset
   Dim strRicerca As String
   'Dim vIdSilos As Long
   Dim vQliIN As Double
   Dim vPercent As Single
   
   Call InizializzaSilos(PushImgSilos, RptGrid, pCaricoScarico)

   strRicerca = "SELECT * FROM TAB_SILOS WHERE SLCODICE = " & CodSilos & ""
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
   
      PushImgSilos.Caption = RS!SLDESCRI
   
      With RptGrid
         .Records(ptGridSilos.RowCapaci).Item(1).Value = RS!SLCAPACI
         .Records(ptGridSilos.RowMarMin).Item(1).Value = RS!SLMARMIN
         'ctrlLblCapacSil.Caption = RS!SLCAPACI
         'ctrlLblMarMinSil.Caption = RS!SLMARMIN
         
         If Len(NonNullo(RS!SLGRUMER)) > 0 Then
            .Records(ptGridSilos.RowGruMer).Item(1).Value = RS!SLGRUMER
         Else
            .Records(ptGridSilos.RowGruMer).Item(1).Value = "-"
         End If
         If Len(NonNullo(RS!SLCARPRO)) > 0 Then
            .Records(ptGridSilos.RowCarPro).Item(1).Value = RS!SLCARPRO
         Else
            .Records(ptGridSilos.RowCarPro).Item(1).Value = "-"
         End If
         
         'ctrlLblContieneSil.Caption = ""
         'ctrlLblMasVol.Caption = "0"
      
         If RS!SLFLMANU = 1 Then 'Se è in manutenzione allora creo l'Immagine del Silos Manutenzione
            Call GetImg_SILOS(254, PushImgSilos)
            
            'ctrlLblPercSil.Caption = "0"
            'ctrlLblQliSil.Caption = "0"
            
         Else 'Qui verifico la Giacenza e visualizzo il Silos relativo (calcolato in percentuale)
            
            'vIdSilos = AttribuisciID_SILOS(CodSilos)
            'Per il CARICO Prelevo anche le Quantità
            If pCaricoScarico = "C" Then
               vQliIN = CalcolaGiacenzaSILOS_Qli(CodSilos, "Q")   'Quintali
               .Records(ptGridSilos.RowQuinta).Item(1).Value = Format(vQliIN, "########0.#0")
            End If
            vQliIN = CalcolaGiacenzaSILOS_Qli(CodSilos, "H")   'Ettolitri
            .Records(ptGridSilos.RowEttoli).Item(1).Value = Format(vQliIN, "########0.#0")
            vPercent = CalcolaGiacenzaSILOS_Percent(RS!SLCAPACI, CDbl(vQliIN))
            .Records(ptGridSilos.RowPercen).Item(1).Value = vPercent
            
            'Qui verifico se ci sono righe che movimentano il Silos dove ancora non sono stati calcolati gli Ettolitri _
             ed in questo caso mostro una icona esplicativa
            If VerificaBOOLEANA("SELECT MV_HLSIL " & _
                                "  FROM  dbo.DOC_MAST INNER JOIN dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
                                " WHERE (dbo.DOC_DETT.MVCODSIL = " & CodSilos & ") " & _
                                "   AND (dbo.DOC_DETT.MV_HLSIL = 0) " & _
                                "   AND (dbo.DOC_MAST.MVANNULL = 0) ") Then
               .Records(ptGridSilos.RowEttoli).Item(1).Icon = icon_ID_Excl
            End If
            'ctrlLblQliSil.Caption = Format(CalcolaGiacenzaSILOS_Qli(CodSilos, vIdSilos), "########0.#0")
            'ctrlLblPercSil.Caption = CalcolaGiacenzaSILOS_Percent(CLng(ctrlLblCapacSil.Caption), CDbl(ctrlLblQliSil.Caption))
            
            'ctrlLblIDSil.Caption = vIdSilos
            
            'Se c'e' del contenuto allora verifico che contenuto e'!
            If vQliIN > 0 Then
                  ''ctrlLblContieneSil.Caption = VerificaContenutoSILOS(CodSilos, CLng(ctrlLblIDSil.Caption))
                  'ctrlLblMasVol.Caption = VerificaMediaMasVol(vIdSilos)
               .Records(ptGridSilos.RowMasVol).Item(1).Value = VerificaMediaMasVol(CodSilos)
            End If
            
            ''Qui Popolo il TxtArGruMer con il contenuto del Silos di Provenienza
            'If Indice = 0 And Len(LblContiene(0)) > 0 Then
            '   TxtArGruMer = LblContiene
            '   LblDesGruMer = DecodTABGEN("GRUMER", "TGCODICE", TxtArGruMer, TxtArGruMer)
            'End If
            
            Call GetImg_SILOS(vPercent, PushImgSilos)
                           
            SettaSilos = True
         End If
         
         .Populate
      End With
   
   End If
   RS.Close
   Set RS = Nothing
End Function

Public Sub InizializzaSilos(PushImgSilos As PushButton, pGrid As ReportControl, pCaricoScarico As String)
   
   'Setto il TASTO
      With PushImgSilos
         .Caption = "[SILOS]"
      End With
   
   'SETTO LA GRIGLIA
      With pGrid
         .ClearContent
         .Columns.DeleteAll
         .FilterText = ""
         .ShowHeader = False 'Nasconde la l'intestazione di colonne
         
         '.SetCustomDraw xtpCustomMeasureRow 'questo mi serve per far funzionare l'evento MeasureRow per impostare l'altezza delle righe
         .Icons = MDIForm1.ImageManager.Icons
         .PaintManager.TextFont.Size = 8
         
         .InitialSelectionEnable = False 'elimina la selezione della prima riga
         .PaintManager.SelectedRowBackColor = .PaintManager.BackColor
         .PaintManager.SelectedRowForeColor = .PaintManager.ForeColor
         .PaintManager.HighlightForeColor = .PaintManager.ForeColor
         .PaintManager.HighlightBackColor = .PaintManager.BackColor
         
         
         Call ReportInsCol(pGrid, "[TESTO FISSA]", "S043T", False, 0, False, False, .Columns.Count, xtpAlignmentWordBreak)
         Call ReportInsCol(pGrid, "[VALORE]", "S057T", False, 0, False, False, .Columns.Count, xtpAlignmentWordBreak)
         'Call ReportInsCol(RptArt, "  ", IIf(mSelContratto, "S030F", "S000F"), False, 0, False, False, .Columns.Count): mtGrd.tICOAZI = .Columns.Count - 1
         '   .Columns(.Columns.Count - 1).Alignment = xtpAlignmentIconCenter
                  
         'Inserisco le RIGHE
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "[Codice]": ptGridSilos.RowCodice = .Records.Count - 1
                  .Records(.Records.Count - 1).Visible = False
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "[Descri]": ptGridSilos.RowDescri = .Records.Count - 1
                  .Records(.Records.Count - 1).Visible = False
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "[Mar.Min]": ptGridSilos.RowMarMin = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Visible = False
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "[Mar.Max]": ptGridSilos.RowMarMax = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Visible = False
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "%": ptGridSilos.RowPercen = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Visible = False
            '--------------------------
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "Giac. Hl": ptGridSilos.RowEttoli = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Item(1).Alignment = xtpAlignmentCenter
                  '.Records(.Records.Count - 1).Item(0).ForeColor = CSSApp.gColorFucsia
                  '.Records(.Records.Count - 1).Item(1).ForeColor = CSSApp.gColorFucsia
                  .Records(.Records.Count - 1).Item(0).Bold = True
                  .Records(.Records.Count - 1).Item(1).Bold = True
                  '.Records(.Records.Count - 1).Visible = (pCaricoScarico = "S")
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "Capacità": ptGridSilos.RowCapaci = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Item(1).Alignment = xtpAlignmentCenter
                  '.Records(.Records.Count - 1).Visible = False
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "Giac. Q.li": ptGridSilos.RowQuinta = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Item(1).Alignment = xtpAlignmentCenter
                  '.Records(.Records.Count - 1).Item(0).ForeColor = CSSApp.gColorAzzurro
                  '.Records(.Records.Count - 1).Item(1).ForeColor = CSSApp.gColorAzzurro
                  .Records(.Records.Count - 1).Item(0).Bold = True
                  .Records(.Records.Count - 1).Item(1).Bold = True
                  .Records(.Records.Count - 1).Visible = False '(pCaricoScarico = "C")
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "Mas.Vol.": ptGridSilos.RowMasVol = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Value = "0"
                  .Records(.Records.Count - 1).Item(1).Alignment = xtpAlignmentCenter
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "Gru.Mer.": ptGridSilos.RowGruMer = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Alignment = xtpAlignmentCenter
               Call ReportInsRow(pGrid, String(.Columns.Count, "¦"))
                  .Records(.Records.Count - 1).Item(0).Value = "Car.Pro.": ptGridSilos.RowCarPro = .Records.Count - 1
                  .Records(.Records.Count - 1).Item(1).Alignment = xtpAlignmentCenter
                                 
            
         '.FreezeColumnsCount = 3 'blocca le prime 3 colonne nello scorrimento orizzontale
         .AutoColumnSizing = True 'se FALSE consente di far comparire la scrollbar orizzontale
         .AllowColumnSort = True
         
         '.Navigator.MoveToColumn mUltColOrdinata
         'LblRecordVisib = GrigliaElenco.Rows.Count
         .Populate
      End With
   
End Sub


Public Function EffettiSelezioneSilos(CodSilos As Integer, ctrlLblCapacSil As Object, ctrlLblMarMinSil As Object, _
                                                        ctrlLblContieneSil As Object, ctrlLblPercSil As Object, _
                                                        ctrlLblQliSil As Object, ctrlLblIDSil As Object, _
                                                        ctrlImgSilos As PushButton, ctrlLblMasVol As Object) As Boolean
'''   'Se mi restituisce FALSE significa che il SILOS selezionato è in MANUTENZIONE
'''
'''   Dim RS As ADODB.Recordset
'''   Dim strRicerca As String
'''   Dim vIdSilos As Long
'''
'''   EffettiSelezioneSilos = True
'''
'''   strRicerca = "Select * FROM TAB_SILOS where SLCODICE = " & CodSilos & ""
'''   Set RS = New ADODB.Recordset
'''   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'''   If Not RS.EOF Then
'''
'''      ctrlLblCapacSil.Caption = RS!SLCAPACI
'''      ctrlLblMarMinSil.Caption = RS!SLMARMIN
'''
'''      ctrlLblContieneSil.Caption = ""
'''      ctrlLblMasVol.Caption = "0"
'''
'''      If RS!SLFLMANU = 1 Then 'Se è in manutenzione allora creo l'Immagine del Silos Manutenzione
'''         EffettiSelezioneSilos = False
'''         Call GetImg_SILOS(254, ctrlImgSilos)
'''
'''         ctrlLblPercSil.Caption = "0"
'''         ctrlLblQliSil.Caption = "0"
'''         'ctrlLblContieneSil = ""
'''
'''      Else 'Qui verifico la Giacenza e visualizzo il Silos relativo (calcolato in percentuale)
'''
'''         'vIdSilos = AttribuisciID_SILOS(CodSilos)
'''
'''         'ctrlLblQliSil = Format(CalcolaGiacenzaSILOS_Qli(CodSilos), "########0.#0")
'''         ctrlLblQliSil.Caption = Format(CalcolaGiacenzaSILOS_Qli(CodSilos, "H"), "########0.#0")
'''         ctrlLblPercSil.Caption = CalcolaGiacenzaSILOS_Percent(CLng(ctrlLblCapacSil.Caption), CDbl(ctrlLblQliSil.Caption))
'''
'''         ctrlLblIDSil.Caption = vIdSilos
'''
'''         'Se c'e' del contenuto allora verifico che contenuto e'!
'''         If ctrlLblQliSil.Caption > 0 Then
'''            ctrlLblContieneSil.Caption = VerificaContenutoSILOS(CodSilos, CLng(ctrlLblIDSil.Caption))
'''            ctrlLblMasVol.Caption = VerificaMediaMasVol(CodSilos)
'''         End If
'''
'''         ''Qui Popolo il TxtArGruMer con il contenuto del Silos di Provenienza
'''         'If Indice = 0 And Len(LblContiene(0)) > 0 Then
'''         '   TxtArGruMer = LblContiene
'''         '   LblDesGruMer = DecodTABGEN("GRUMER", "TGCODICE", TxtArGruMer, TxtArGruMer)
'''         'End If
'''
'''         Call GetImg_SILOS(CSng(ctrlLblPercSil.Caption), ctrlImgSilos)
'''
'''      End If
'''
'''   End If
'''   RS.Close
'''   Set RS = Nothing
End Function




Public Function GetImg_SILOS(ValorePercent As Single, Optional ctrlImgSilos As PushButton) As Long
   Dim vIcon As Long
   
   On Error GoTo GestErr

   If ValorePercent = 254 Then
      vIcon = 401       'Manutenzione
   ElseIf ValorePercent < 0 Then: vIcon = 401 'Qui Visualizzo l'errore EMPTY (inferiore allo 0%)
   ElseIf ValorePercent > 100 Then: vIcon = 409 'Qui Visualizzo l'errore FULL (superiore al 100%)
   ElseIf ValorePercent > 0 And ValorePercent < 13 Then: vIcon = 402 'Qui Visualizzo la tacca 2
   ElseIf ValorePercent > 12 And ValorePercent < 26 Then: vIcon = 403 'Qui Visualizzo la tacca 3
   ElseIf ValorePercent > 25 And ValorePercent < 38 Then: vIcon = 404 'Qui Visualizzo la tacca 4
   ElseIf ValorePercent > 37 And ValorePercent < 51 Then: vIcon = 405 'Qui Visualizzo la tacca 5
   ElseIf ValorePercent > 50 And ValorePercent < 63 Then: vIcon = 406 'Qui Visualizzo la tacca 6
   ElseIf ValorePercent > 62 And ValorePercent < 76 Then: vIcon = 407 'Qui Visualizzo la tacca 7
   ElseIf ValorePercent > 75 And ValorePercent < 91 Then: vIcon = 408 'Qui Visualizzo la tacca 8
   ElseIf ValorePercent > 90 And ValorePercent < 101 Then: vIcon = 409 'Qui Visualizzo la tacca 9 (PIENO)
   Else  'Qui Visualizzo la tacca 0 (VUOTO)
      vIcon = 401
   End If

   If Not ctrlImgSilos Is Nothing Then
      ctrlImgSilos.Icon = MDIForm1.ImageManager.Icons.GetImage(vIcon, 48)
   End If
   GetImg_SILOS = vIcon

GestErr:
   If Err.Number = 53 Then 'Non ho trovato il File Immagine!
      Resume Next
   ElseIf Err.Number <> 0 Then
      MsgBox Err.Number & " - " & Err.Description
   End If
   On Error GoTo 0
End Function

Public Function CalcolaGiacenzaSILOS_Qli(CodSilos As Integer, pUniMisPeso As String, Optional pReale As Boolean) As Double
   'Questa funzione restituisce la SOMMA dei movimenti effettuati da un Articolo sia in Carico (=1) che in Scarico (=0) _
    leggendo per i Carichi dalla tabella MAG_DETT e per gli scarichi dalla tabella DOC_DETT
    
   'pUniMisPeso = "H" -> Ettolitri; "Q" -> Quintali
   
   Dim RS As ADODB.Recordset
   Dim strRicerca As String
   Dim Tot_Scarico As Double
   Dim Tot_Carico As Double
   Dim vCampoDOC As String
   
   
   If pUniMisPeso = "Q" Then
      vCampoDOC = "MVQTASIL"
   Else
      vCampoDOC = IIf(pReale, "MV_HLSI2", "MV_HLSIL")
   End If
   
   
   'Dim gWhereDataAzzeramento As String
   'If IsDate(gLastDataAzzeramento) Then
   '   gWhereDataAzzeramento = " AND (MVDATSEZ >= CONVERT(DATETIME, '" & Format(gLastDataAzzeramento, "yyyy-mm-dd") & " 00:00:00', 102)) "
   'End If


'DOC_DETT <SCARICO> **************************************************************************************************************
   'SILOS1
   strRicerca = "SELECT SUM(" & vCampoDOC & ") AS TOT_SCA " & _
                "FROM   dbo.DOC_MAST INNER JOIN dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
                "WHERE (dbo.DOC_DETT.MVCODSIL = " & CodSilos & ") AND (dbo.DOC_DETT.MVMOVQTA = '-') AND (dbo.DOC_MAST.MVANNULL = 0)" & _
                gWhereDataAzzeramento
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      Tot_Scarico = NonNullo(RS!TOT_SCA, True)
   End If
   RS.Close
   Set RS = Nothing
'*********************************************************************************************************************************


'DOC_DETT <CARICO> **************************************************************************************************************
   'SILOS1
   strRicerca = "SELECT SUM(" & vCampoDOC & ") AS TOT_CAR " & _
                "FROM   dbo.DOC_MAST INNER JOIN dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
                "WHERE (dbo.DOC_DETT.MVCODSIL = " & CodSilos & ") AND (dbo.DOC_DETT.MVMOVQTA = '+') AND (dbo.DOC_MAST.MVANNULL = 0)" & _
                gWhereDataAzzeramento
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      Tot_Carico = NonNullo(RS!TOT_CAR, True)
   End If
   RS.Close
   Set RS = Nothing
'*********************************************************************************************************************************

   'Solo per ricercare gli ETTOLITRI
   If pUniMisPeso = "H" Then
      'MOV_CANT <SCARICO>
      strRicerca = "SELECT SUM(MCQTAMOV) AS TOT_SCA " & _
                   "FROM   dbo.MOV_CANT " & _
                   "WHERE MCSILSCA = " & CodSilos & ""
      Set RS = New ADODB.Recordset
      RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
      If Not RS.EOF Then
         Tot_Scarico = Tot_Scarico + NonNullo(RS!TOT_SCA, True)
      End If
      RS.Close
      Set RS = Nothing
      
      'MOV_CANT <CARICO>
      strRicerca = "SELECT SUM(MCQTAMOV) AS TOT_CAR " & _
                   "FROM   dbo.MOV_CANT " & _
                   "WHERE MCSILCAR = " & CodSilos & ""
      Set RS = New ADODB.Recordset
      RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
      If Not RS.EOF Then
         Tot_Carico = Tot_Carico + NonNullo(RS!TOT_CAR, True)
      End If
      RS.Close
      Set RS = Nothing
   End If

   CalcolaGiacenzaSILOS_Qli = Tot_Carico - Tot_Scarico

End Function



Public Function CalcolaCarichiVitigno(pFornitore As String, pVitigno As String) As Currency
   'DOC_MAST-> join ->DOC_DETT-> join ->ART_ICOL e sommo il Peso del Documento
   
   Dim RS As ADODB.Recordset
   Dim strRicerca As String
   
   strRicerca = "SELECT SUM(MVPESDOC) AS TOT_CAR " & _
                "  FROM dbo.DOC_MAST INNER JOIN " & _
                "       dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL INNER JOIN " & _
                "       dbo.ART_ICOL ON dbo.DOC_DETT.MVCODART = dbo.ART_ICOL.ARCODICE " & _
                " WHERE (dbo.DOC_MAST.MVTIPCON = 'F') AND (dbo.DOC_MAST.MVCODCON = '" & pFornitore & "') AND (dbo.DOC_MAST.MVANNULL = 0) AND dbo.DOC_MAST.MVANNDOC = '" & Year(DataGestione) & "' AND " & _
                "       (dbo.ART_ICOL.ARVITIGN = '" & VerificaApici(pVitigno) & "') AND (dbo.DOC_DETT.MVMOVQTA = '+')"
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      CalcolaCarichiVitigno = NonNullo(RS!TOT_CAR, True)
   End If
   RS.Close
   Set RS = Nothing
End Function


Public Function GetDocFascicoloVitigno(pFornitore As String, pVitigno As String) As String()
'Questa funzione restituisce l'elenco in Array dei Documenti dove comvbacia il Vitigno ed il Fornitore
   Dim RS As ADODB.Recordset
   Dim strRicerca As String
   Dim vArr() As String
   Dim vStrArr As String
                   
                   
   strRicerca = "SELECT TOP 100 PERCENT dbo.DOC_MAST.MVSERIAL, dbo.DOC_MAST.MVTIPDOC, dbo.DOC_MAST.MVCATDOC, " & _
                "       dbo.DOC_MAST.MVCODSEZ, dbo.DOC_MAST.MVPRGSEZ, dbo.DOC_MAST.MVDATSEZ, " & _
                "       dbo.DOC_MAST.MVNUMDOC, dbo.DOC_MAST.MVDATDOC " & _
                "  FROM dbo.DOC_MAST INNER JOIN " & _
                "       dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL INNER JOIN " & _
                "       dbo.ART_ICOL ON dbo.DOC_DETT.MVCODART = dbo.ART_ICOL.ARCODICE " & _
                " WHERE (dbo.DOC_MAST.MVTIPCON = 'F') AND (dbo.DOC_MAST.MVCODCON = '" & pFornitore & "') AND (dbo.DOC_MAST.MVANNULL = 0) AND dbo.DOC_MAST.MVANNDOC = '" & Year(DataGestione) & "' AND " & _
                "       (dbo.ART_ICOL.ARVITIGN = '" & VerificaApici(pVitigno) & "') AND (dbo.DOC_DETT.MVMOVQTA = '+')" & _
                " ORDER BY  dbo.DOC_MAST.MVDATDOC, dbo.DOC_MAST.MVPRGSEZ "
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      Do Until RS.EOF
         vStrArr = RS!MVSerial & "|" & _
                   RS!MVTIPDOC & "|" & _
                   RS!MVCATDOC & "|" & _
                   NonNullo(RS!MVCODSEZ) & "|" & _
                   RS!MVPRGSEZ & "|" & _
                   NonNullo(RS!MVDATSEZ) & "|" & _
                   RS!MVNUMDOC & "|" & _
                   NonNullo(RS!MVDATDOC) & "|"
                   
         Call AddArrayElement(vArr, vStrArr)
         
         RS.MoveNext
      Loop
      
      GetDocFascicoloVitigno = vArr
   End If
   RS.Close
   Set RS = Nothing
End Function



Public Function GetMaxCarichiVitigno(pFornitore As String, pVitigno As String) As Currency
   'RESTITUISCE IL MAX CARICHI CONSENTITI FILTRATO PER FOPRNITORE E VITIGNO
   
   Dim RS As ADODB.Recordset
   Dim strRicerca As String
   
   strRicerca = "SELECT FAMAXQLI " & _
                "FROM   dbo.TAB_FASCICOLI " & _
                "WHERE (FACODCON = '" & pFornitore & "') AND (FAVITIGN = '" & VerificaApici(pVitigno) & "')"
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      GetMaxCarichiVitigno = NonNullo(RS!FAMAXQLI, True)
   End If
   RS.Close
   Set RS = Nothing
End Function

Public Function CalcolaGiacenzaSILOS_Percent(CapacitaSilos As Long, GiacenzaSilos As Double) As Single
   If CapacitaSilos = 0 Or GiacenzaSilos = 0 Then Exit Function

   CalcolaGiacenzaSILOS_Percent = Format(((GiacenzaSilos * 100) / CapacitaSilos), "#####0.#0")
End Function


Public Function AttribuisciID_SILOS_OLD(CodSilos As Long) As Long
'   Dim RS As ADODB.Recordset
'   Dim strRicerca As String
'
''Qui leggo l'ultimo numero attribuito...
'Ripeti:
'   strRicerca = "Select MAX(ISIDESIL) as MAXID from IDE_SILOS where ISCODSIL = " & CodSilos & ""
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'
'   AttribuisciID_SILOS = NonNullo(RS!MAXID, True)
'
'   If AttribuisciID_SILOS = 0 Then
'      'se non trovo niente lo creo
'      Call CreaNuovoIDPerSilos(CodSilos)
'      RS.Close
'      GoTo Ripeti
'   End If
'
'   RS.Close
'   Set RS = Nothing
End Function

Public Sub CreaNuovoIDPerSilos(CodSilos As Long)
   Dim StrCampi As String
   Dim StrValori As String
   Dim StrIns As String
   Dim IDProg As Long
   
   IDProg = CLng(AttribuisciProgressivo("SERIAL_ID_SILOS", "----"))
   Call AggiornaIndici("SERIAL_ID_SILOS", IDProg, "----")
   
   StrCampi = "ISIDESIL"
   StrValori = "" & IDProg & ""
   
   StrCampi = StrCampi & ",ISCODSIL"
   StrValori = StrValori & "," & CodSilos & ""
       
   StrCampi = StrCampi & ",ISDATIDE"
   StrValori = StrValori & ",CONVERT(DATETIME, '" & Format(Date, "yyyy/mm/dd") & "',102)"

   StrIns = "INSERT INTO IDE_SILOS (" & StrCampi & ") values (" & StrValori & ")"
   Call EseguiSQLMDB(StrIns)
   
End Sub



Public Function VerificaMovimentiID_Silos(CodSilos As Long) As Boolean
   'Questa funzione restituisce TRUE se risulta Movimentato il Silos in questione. _
    Il controllo avviene sulle tabelle MOV_CANT e DOC_DETT
   Dim RS As ADODB.Recordset
   Dim strRicerca As String

   VerificaMovimentiID_Silos = False

   'DOC_DETT
   strRicerca = "SELECT MVIDESIL FROM DOC_DETT WHERE MVIDESIL = " & CodSilos & " OR MVIDESI2 = " & CodSilos & ""
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      VerificaMovimentiID_Silos = True
   End If
   RS.Close
   Set RS = Nothing

   If VerificaMovimentiID_Silos = False Then
      'MOV_CANT
      strRicerca = "SELECT MCSERIAL FROM MOV_CANT WHERE MCIDESCA = " & CodSilos & " OR MCIDECAR = " & CodSilos & ""
      Set RS = New ADODB.Recordset
      RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
      If Not RS.EOF Then
         VerificaMovimentiID_Silos = True
      End If
      RS.Close
      Set RS = Nothing
   End If
   
End Function


Public Function VerificaPerNuovoID_Silos(Capacita As Long, Giacenza As Double, MargineMin As Byte) As Boolean
'Restituisce TRUE se la percentuale di giacenza è inferiore o uguale al Margine Minimo di Capacità
   Dim GiacPercSilos As Single
   
   GiacPercSilos = CalcolaGiacenzaSILOS_Percent(Capacita, Giacenza)
   
   'Se la %Giacenza <= %Margine Minimo allora = TRUE
   If GiacPercSilos <= MargineMin Then
      VerificaPerNuovoID_Silos = True
   Else
      VerificaPerNuovoID_Silos = False
   End If
   
End Function

Public Function VerificaContenutoSILOS(CodSilos As Integer, IdSilos As Long) As String
'Questa Funzione mi serve per verificare che tipo di Gruppo Merceologico è presente _
 nel Silos con l'ID passato come parametro _
 NOTA: SE SI VUOLE CAMBIARE IL GRUPPO MERCEOLOGICO AD UN SILOS BASTA EFFETTUARE _
       UN SEMPLICE MOVIMENTO DI RETTIFICA.
   Dim RS As ADODB.Recordset
   Dim strRicerca As String

'DOC_DETT ***********************************************************************************************************************
   'QUI DA DOC_DETT DI ACQUISTO (CHE E' L'ULTIMO MOV. DI CARICO PER IL SILOS IN QUESTIONE)
   strRicerca = "SELECT ISGRUMER " & _
                "FROM   dbo.IDE_SILOS " & _
                "WHERE  (ISCODSIL  = " & CodSilos & " AND ISIDESIL = " & IdSilos & ")"
   Set RS = New ADODB.Recordset
   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
   If Not RS.EOF Then
      VerificaContenutoSILOS = NonNullo(RS!ISGRUMER)
   End If
   RS.Close
   Set RS = Nothing
'DOC_DETT ***********************************************************************************************************************


''Questa Funzione mi serve per verificare che tipo di Gruppo Merceologico è stato inserito _
' nel Silos con l'ultimo movimento (sia da DOC di ACQUISTO che da MOV di Cantina) _
' NOTA: IL MOV. DI CANTINA HA LA PREFERENZA SUL DOCUMENTO DI CARICO E PER FAR CIO' _
'       CONTROLLO CHI DEI DUE HA LA DATA MAGGIORE. (QUESTO MI TORNA UTILE ANCHE PERCHE' _
'       SE VOGLIONO CAMBIARE IL GRUPPO MERCEOLOGICO AD UN SILOS BASTA EFFETTUARE ANCHE _
'       UN SEMPLICE MOVIMENTO DI RETTIFICA.
'   Dim RS As ADODB.Recordset
'   Dim strRicerca As String
'   Dim vDataDoc As Date
'   Dim vDataMov As Date
'   Dim vGruMerDoc As String
'   Dim vGruMerMov As String
'
'
''DOC_DETT ***********************************************************************************************************************
'   'QUI DA DOC_DETT DI ACQUISTO (CHE E' L'ULTIMO MOV. DI CARICO PER IL SILOS IN QUESTIONE)
'   strRicerca = "SELECT dbo.DOC_MAST.MVDATDOC, dbo.DOC_MAST.MVDATSEZ, dbo.DOC_DETT.MVCODART, dbo.DOC_DETT.MVCODSIL, dbo.DOC_DETT.MVIDESIL, dbo.ART_ICOL.ARGRUMER " & _
'                "FROM   dbo.DOC_MAST INNER JOIN dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL INNER JOIN dbo.ART_ICOL ON dbo.DOC_DETT.MVCODART = dbo.ART_ICOL.ARCODICE " & _
'                "WHERE  (MVCODSIL  = " & CodSilos & " AND MVIDESIL = " & IdSilos & " AND DOC_DETT.MVMOVQTA = '+') " & _
'                "  OR   (MVCODSI2  = " & CodSilos & " AND MVIDESI2 = " & IdSilos & " AND DOC_DETT.MVMOVQTA = '+') " & _
'                "ORDER BY DOC_MAST.MVDATDOC DESC"
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'   If Not RS.EOF Then
'      RS.MoveFirst
'
'      vGruMerDoc = NonNullo(RS!ARGRUMER)
'      vDataDoc = RS!MVDATSEZ
'   End If
'   RS.Close
'   Set RS = Nothing
''DOC_DETT ***********************************************************************************************************************
'
'
'
''MOV_CANT ***********************************************************************************************************************
'   'QUI DA MOV_CANT (CHE E' L'ULTIMO MOV. DI CARICO PER IL SILOS IN QUESTIONE)
'   strRicerca = "SELECT MCDATREG, MCGRUMER from MOV_CANT " & _
'                "WHERE MCSILCAR  = " & CodSilos & " AND MCIDECAR = " & IdSilos & " " & _
'                "ORDER BY MCDATREG DESC"
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'   If Not RS.EOF Then
'      RS.MoveFirst
'
'      vGruMerMov = RS!MCGRUMER
'      vDataMov = RS!MCDATREG
'   End If
'   RS.Close
'   Set RS = Nothing
''********************************************************************************************************************************
'
'
'   'Nel caso il Documento sia piu' recente del Movimento allora vince il GruppoMerceologico del documento ...
'   If vDataDoc > vDataMov Then
'      VerificaContenutoSILOS = vGruMerDoc
'   Else  '...in tutti gli atri casi vince il GruppoMerceologico del Movimento
'      VerificaContenutoSILOS = vGruMerMov
'   End If
End Function


Public Function VerificaSpazioSilos(CodSil As Integer, DesSil As String, QliDaIns As Double, _
                                                    CapacSil As Double, GiaceSil As Double) As Boolean
'QUESTA FUNZIONE MI INDICA SE C'E' POSSIBILITA' DI INSERIRE UNA DATA QUANTITA' DI PRODOTTO ALL'INTERNO DEL _
 SILOS SPECIFICATO (CIOE' SE NEL SILOS C'E' SPAZIO A SUFFICIENZA)

   VerificaSpazioSilos = True


'NB: AL MOMENTO L'HO SOSPESO... (1.0.1)

'   If CodSil > 0 And QliDaIns > 0 Then
'      If (CapacSil - GiaceSil) < QliDaIns Then
'
'         If MsgBox("[AVVISO CAPACITA' SILOS]" & vbNewLine & vbNewLine & _
'                   "Il Silos '" & DesSil & "' non può ricevere la quantità specificata" & vbNewLine & _
'                   "(MAX Quintali: " & (CapacSil - GiaceSil) & ")" & vbNewLine & vbNewLine & _
'                   "Continuare comunque?", vbExclamation + vbYesNo) = vbNo Then
'            VerificaSpazioSilos = False
'         End If
'      End If
'   End If

End Function


Public Function VerificaDisponibiltaSilos(CodSil As Integer, DesSil As String, QliDaPrelevare As Double, _
                                                    CapacSil As Double, GiaceSil As Double) As Boolean
'QUESTA FUNZIONE MI INDICA SE C'E' POSSIBILITA' DI PRELEVARE UNA DATA QUANTITA' DI PRODOTTO DAL _
 SILOS SPECIFICATO (CIOE' SE NEL SILOS C'E' PRODOTTO A SUFFICIENZA)
   
   VerificaDisponibiltaSilos = True
   
   If CodSil > 0 And QliDaPrelevare > 0 Then
      If GiaceSil < QliDaPrelevare Then
         
         If MsgBox("[AVVISO DISPONIBILITA' SILOS]" & vbNewLine & vbNewLine & _
                   "Il Silos selezionato non può erogare la quantità specificata" & vbNewLine & _
                   "(MAX Ettolitri: " & GiaceSil & ")" & vbNewLine & vbNewLine & _
                   "Continuare comunque?", vbExclamation + vbYesNo) = vbNo Then
            VerificaDisponibiltaSilos = False
         End If
      End If
   End If

End Function


Public Function ControllaCorrispGruMerArt_GruMerSilos(GruMerArt As String, GruMerSil As String) As Boolean
'QUESTA FUNZIONE CONTROLLA CHE CI SIA CONGRUENZA TRA IL GRUPPO MERCEOLOGICO DEL SILOS E QUELLO DELL'ARTICOLO
      
      ControllaCorrispGruMerArt_GruMerSilos = True
      
      If Len(GruMerArt) > 0 And Len(GruMerSil) > 0 Then
      
         If GruMerArt <> GruMerSil Then
            If MsgBox("ATTENZIONE!" & vbNewLine & "Non c'e' corrispondenza tra il contenuto" & vbNewLine & _
                      "del Silos e il Gruppo Merceologico dell'Articolo." & vbNewLine & _
                      "Continuare comunque?", vbExclamation + vbYesNo) = vbNo Then
               
               ControllaCorrispGruMerArt_GruMerSilos = False
            End If
         End If
      
      End If
End Function


Public Function CalcolaMassaVolumica(pPesQli As Double, pGrado As Single) As Single
'Questa funzione restituisce la MassaVolumica ricavata dal Peso e dal Grado indicati _
 NB: questa funzione è usata nei documenti di Carico (DDTAC) e nella maschera "Aggiorna Prezzo e Grado"

   Dim vGradBè As Single
   
   vGradBè = Format(pGrado * pred_ValGradBè, "##0.#0")
   CalcolaMassaVolumica = Format((pred_ValMasVol / (pred_ValMasVol - vGradBè)), "##0.###0")
   
End Function


Public Function VerificaMediaMasVol(pCodSilos As Integer, Optional pReale As Boolean) As Double
   'NB: PER IL MOMENTO (AGOSTO 2018 RELEASE 1.0.1) è SOSPESA PERCHE' DEVO CAPIRE COME _
        PROCEDERE CON LE NUOVE IMPOSTAZIONI DEI NUOVI SILOS

      'Questa funzione restituisce la media della Massa Volumica del Silos che riporta l'ID passato come Parametro: _
       Prima viene ricercato l'eventuale Ultimo movimento che riporta tale ID e, se non trovato, _
       vengono ricercati tutti i carichi (Doc Acq) dai quali viene fatta la Media della Massa Volumica _
       (PS: quest'ultimo passaggio andrebbe perfezionato, cioe' il calcolo andrebbe fatto in percentuale in base _
            alle quantità dei singoli carichi, ma per il momento faccio la media aritmetica)
      
      
         Dim RS As ADODB.Recordset
         Dim strRicerca As String
         Dim strSelect As String
      
         Dim Media_DocACQ As Double
         Dim Media_MovCan As Double
      
      
'''      '   strSelect = "SELECT MAX(MCSERIAL) as SerialeUltimo " & _
'''                      "FROM MOV_CANT " & _
'''                      "where MCIDECAR = " & pCodSilos & "  AND (MCDATREG <= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102))" ' AND MCFLMOVI = 0 "
'''
'''      'QUI CERCO RELAZIONI NEI MOVIMENTI DI CANTINA (E LO CERCO IN TUTTI I TIPI DI MOVIMENTI)
'''         strSelect = "SELECT MAX(MCSERIAL) as SerialeUltimo " & _
'''                      "FROM MOV_CANT " & _
'''                      "where MCIDECAR = " & pCodSilos & ""
'''
'''         strRicerca = "SELECT MCMASVOL " & _
'''                      "FROM MOV_CANT " & _
'''                      "where MCSERIAL = (" & strSelect & ")"
'''         Set RS = New ADODB.Recordset
'''         RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'''         If Not RS.EOF Then
'''
'''            VerificaMediaMasVol = Format(RS!MCMASVOL, "##0.###0")
'''
'''         End If
'''         RS.Close
'''         Set RS = Nothing
      
      
         'Se non ho trovato nulla nei Movimenti di Cantina allora faccio la ricerca _
          nei documenti sia CARICHI che SCARICHI
         If VerificaMediaMasVol = 0 Then
      
            'strRicerca = "SELECT AVG(MVMASVOL) as MediaMV " & _
                         "FROM         dbo.DOC_DETT " & _
                         "WHERE (MVMOVQTA = '+' AND MVIDESIL = " & pCodSilos & ")  OR " & _
                         "      (MVMOVQTA = '+' AND MVIDESI2 = " & pCodSilos & ")"
            
            Dim vCampo As String
            
            vCampo = IIf(pReale, " MVMASVO2 ", " MVMASVOL ")
            
            strRicerca = "SELECT AVG(" & vCampo & ") as MediaMV " & _
                         "  FROM dbo.DOC_DETT " & _
                         " WHERE (MVCODSIL = " & pCodSilos & ")  "
            Set RS = New ADODB.Recordset
            RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
            If Not RS.EOF Then
      
               VerificaMediaMasVol = Format(NonNullo(RS!MediaMV, True), "##0.###0")
      
            End If
            RS.Close
            Set RS = Nothing
         End If

End Function


Public Function CalcolaMediaMasVol(pQtaSil1 As Double, pMasVolSil1 As Single, pQtaSil2 As Double, pMasVolSil2 As Single) As Double
   Dim TotQta As Double
   Dim Percent1 As Single
   Dim Percent2 As Single
   Dim ValMasV1 As Double
   Dim ValMasV2 As Double
   
   TotQta = pQtaSil1 + pQtaSil2
   
   Percent1 = Format((pQtaSil1 * 100) / TotQta, "##0.#0")
   Percent2 = Format((pQtaSil2 * 100) / TotQta, "##0.#0")
   
   ValMasV1 = Format((pMasVolSil1 * Percent1) / 100, "##0.###0")
   ValMasV2 = Format((pMasVolSil2 * Percent2) / 100, "##0.###0")
   
   CalcolaMediaMasVol = Format((ValMasV1 + ValMasV2), "##0.###0")
End Function


Public Sub AggiornaGruMerSilos_OLD(Forza As Boolean, CodSilos As Long, IdSilos As Long, pGruMer As String)
'   'SALVO NELLA TABELLA IDE_SILOS IL GRUPPO MERCEOLOGICO DEL SILOS PASSATO NEI PARAMETRI. _
'    NB: CON IL PARAMETRO "FORZA" VERIFICO SE DEVO SALVARE IL GRUPPO MERCEOLOGICO ANCHE SE E' _
'        GIA' PRESENTE UN GRUMER. ALTRIMENTI L'AGGIORNAMENTO AVVIENE SOLO SE IL CAMPO _
'        "ISGRUMER" E' VUOTO.
'
'   Dim Esegui As Boolean
'
'
'   If Forza = True Then
'      Esegui = True
'   Else
'
'      'SOLO SE E' VUOTO
'      If Len(Trim(VerificaContenutoSILOS(CodSilos, IdSilos))) = 0 Then
'         Esegui = True
'      Else
'         Esegui = False
'      End If
'
'   End If
'
'
'   'QUI CONTROLLO SE DEVO ESEGUIRE L'UPDATE
'   If Esegui = True Then
'      ConnessioneAzienda.Execute "UPDATE IDE_SILOS " & _
'                                 "SET ISGRUMER = '" & VerificaApici(pGruMer) & "' " & _
'                                 "where ISCODSIL = " & CodSilos & " AND ISIDESIL = " & IdSilos & ""
'
'   End If
End Sub


'**************************** GESTIONE TREEVIEW ********************************

Public Sub PulisciTreeView(ctrlTreeView As Object)
   Dim i As Integer
   Dim strNodes As String
      
   For i = 1 To ctrlTreeView.Nodes.Count
      If ctrlTreeView.Nodes.Count = 1 Then
         ctrlTreeView.Nodes.Remove 1
      ElseIf ctrlTreeView.Nodes.Count > 1 Then
         ctrlTreeView.Nodes.Remove i
         i = 1
      Else
         Exit For
      End If
   Next i

End Sub

Public Sub InserisciNodoTreeView(ctrlTreeVw As Object, pKey As String, pRelative As String, pText As String, Img As Byte, pTag As String)
   'Img = 2 Silos ; = 3 Doc. Acq. ; = 4 Doc. Ven.
   Dim nodX As Node
   
   ctrlTreeVw.ImageList = MDIForm1.ImageListP
   
   If Len(Trim(pRelative)) = 0 Then 'NODO PRINCIPALE
      Set nodX = ctrlTreeVw.Nodes.Add(, , pKey, pText, Img)
   Else  'NODO RELATIVO
      Set nodX = ctrlTreeVw.Nodes.Add(pRelative, tvwChild, pKey, pText, Img)
      nodX.Tag = pTag
   End If
   
   nodX.EnsureVisible
   
   ctrlTreeVw.Style = 7

End Sub

'Public Sub RicercaRelazioniDEST(ctrlTreeVw As Object, CodRelaz As Long, DataRelaz As String)
'   Dim RS As ADODB.Recordset
'   Dim strRicerca As String
'   Dim strHl As String
'   Dim prgSTOP As Integer
'   Dim TagNodo As String
'
'
''QUI CERCO RELAZIONI NEI MOVIMENTI DI CANTINA (SOLO MOVIMENTI "LIBERI" - NO GIACENZE INIZ. E NO RETTIFICHE)
'   If Len(Trim(DataRelaz)) > 0 Then
'      strRicerca = "Select * FROM MOV_CANT where MCIDESCA = " & CInt(CodRelaz) & "  AND (MCDATREG >= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102)) AND MCFLMOVI = 0 " & _
'                   "ORDER BY MCDATREG, MCSERIAL"
'   Else
'      'QUI CERCO TUTTI I MOVIVENTI ESCLUSO LE "GIACENZE INIZIALI" (PERCHE' SONO VALIDE SOLO PER LA "PROVENIENZA")
'      'POI CERCO SOLO I MOVIMENTI CON UNA QUANTITà MOVIMENTATA IN MODO DA ESCLUDERE TUTTE LE RETTIFICHE SENZA VARIAZIONE DI Q.TA'
'      strRicerca = "Select * FROM MOV_CANT where MCIDESCA = " & CInt(CodRelaz) & " AND MCFLMOVI <> 1 AND MCQTAMOV <> 0 " & _
'                   "ORDER BY MCDATREG, MCSERIAL"
'   End If
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'   If Not RS.EOF Then
'      Do Until RS.EOF
'
'         'Qui compongo il tag che poi mi consentirà di aprire dinamicamente il Mov. di Cantina o il DDTAC o il DDTVE _
'          NOTA: LA STRUTTURA E' FORMATA DA 4 SEZIONI
'         TagNodo = "MOV_CANT# # #" & Trim(Str(RS!MCSERIAL))
'
'         If RS!MCFLMOVI = 0 Then
'            'Qui inserisco il Silos di Destinazione agganciato
'            'Call InserisciNodoTreeView(ctrlTreeVw, "IDE" & Trim(Str(RS!MCIDECAR)), "IDE" & Trim(Str(CodRelaz)), "Silos: " & DecodSILOS("SLCODICE", RS!MCSILCAR) & " [" & DecodTABGEN("OPECAN", "TGCODICE", RS!MCOPECAN) & " del " & RS!MCDATREG & "]", 2)
'            Call InserisciNodoTreeView(ctrlTreeVw, "IDE" & Trim(Str(RS!MCIDECAR)), "IDE" & Trim(Str(CodRelaz)), "Silos: " & DecodSILOS("SLCODICE", RS!MCSILCAR) & " - " & DecodTABGEN("OPECAN", "TGCODICE", RS!MCOPECAN) & " (" & Format(RS!MCDATREG, "dd/mm/yy") & ") - [Hl. " & Format(RS!MCQTAMOV, "########0.#0") & "]", 2, TagNodo)
'
'            'Qui ricerco l'eventula ulteriore relazione in cascata
'            Call RicercaRelazioniDEST(ctrlTreeVw, RS!MCIDECAR, RS!MCDATREG)
'
'         ElseIf RS!MCFLMOVI = 2 Then
'            'RETTIFICA GIACENZA
'            Call InserisciNodoTreeView(ctrlTreeVw, "IDE_STOP" & Trim(Str(prgSTOP)), "IDE" & Trim(Str(CodRelaz)), "Mov.: Rettifica (" & Format(RS!MCDATREG, "dd/mm/yy") & ") - [Hl. " & Format(RS!MCQTAMOV, "########0.#0") & "]", 2, TagNodo)
'
'         End If
'
'
'         RS.MoveNext
'      Loop
'   End If
'   RS.Close
'   Set RS = Nothing
'
'
''QUI CERCO RELAZIONI NEI DOCUMENTI DI VENDITA (Sia nel Silos1 che nel Silos2)
'   If Len(Trim(DataRelaz)) > 0 Then
'      strRicerca = "SELECT dbo.DOC_MAST.MVSERIAL AS SERIALE, MVCATDOC, MVFLVEAC, MVTIPDOC, MVPRGSEZ, MVDATSEZ, MVCODSIL, MVIDESIL, MVNUMDOC, MVALFDOC, MVDATDOC, " & _
'                   "DOC_DETT.MVCODART, DOC_DETT.MVIDESIL, DOC_DETT.MV_HLSIL, DOC_DETT.MVIDESI2, DOC_DETT.MV_HLSI2  " & _
'                   "FROM         dbo.DOC_MAST INNER JOIN " & _
'                   "dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
'                   "WHERE (MVMOVQTA = '-' AND MVIDESIL = " & CodRelaz & " AND (MVDATSEZ >= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102))) OR " & _
'                   "      (MVMOVQTA = '-' AND MVIDESI2 = " & CodRelaz & " AND (MVDATSEZ >= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102)))    " & _
'                   "ORDER BY MVDATDOC,MVNUMDOC"
'   Else
'      strRicerca = "SELECT dbo.DOC_MAST.MVSERIAL AS SERIALE, MVCATDOC, MVFLVEAC, MVTIPDOC, MVPRGSEZ, MVDATSEZ, MVCODSIL, MVIDESIL, MVNUMDOC, MVALFDOC, MVDATDOC, " & _
'                   "DOC_DETT.MVCODART, DOC_DETT.MVIDESIL, DOC_DETT.MV_HLSIL, DOC_DETT.MVIDESI2, DOC_DETT.MV_HLSI2  " & _
'                   "FROM         dbo.DOC_MAST INNER JOIN " & _
'                   "dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
'                   "WHERE (MVMOVQTA = '-' AND MVIDESIL = " & CodRelaz & " ) OR " & _
'                   "      (MVMOVQTA = '-' AND MVIDESI2 = " & CodRelaz & " )    " & _
'                   "ORDER BY MVDATDOC,MVNUMDOC"
'   End If
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'   If Not RS.EOF Then
'      Do Until RS.EOF
'
'         'Qui compongo il tag che poi mi consentirà di aprire dinamicamente il Mov. di Cantina o il DDTAC o il DDTVE _
'          NOTA: LA STRUTTURA E' FORMATA DA 4 SEZIONI
'         TagNodo = "DOC_MAST#" & RS!MVCATDOC & "#" & RS!MVFLVEAC & "#" & Trim(Str(RS!Seriale))
'
'
'         'Qui inserisco il Documento di Vendita agganciato
'         strHl = IIf(RS!MVIDESIL = CodRelaz, Format(RS!MV_HLSIL, "########0.#0"), Format(RS!MV_HLSI2, "########0.#0"))
'
'         Call InserisciNodoTreeView(ctrlTreeVw, "", "IDE" & Trim(Str(CodRelaz)), RS!MVTIPDOC & " - Num. " & RS!MVNUMDOC & "/" & RS!MVALFDOC & " (" & Format(RS!MVDATDOC, "dd/mm/yy") & ") - " & RS!MVCODART & " [Hl. " & strHl & "]", 4, TagNodo)
'         'Call InserisciNodoTreeView(ctrlTreeVw, "", "IDE" & Trim(Str(CodRelaz)), RS!MVTIPDOC & " - Num. " & RS!MVNUMDOC & "/" & RS!MVALFDOC & " del " & Format(RS!MVDATDOC, "dd/mm/yyyy"), 4)
'
'
'         RS.MoveNext
'      Loop
'   End If
'   RS.Close
'   Set RS = Nothing
'End Sub


'Public Sub RicercaRelazioniPROV(ctrlTreeVw As Object, CodRelaz As Long, DataRelaz As String)
'   Dim RS As ADODB.Recordset
'   Dim strRicerca As String
'   Dim strHl As String
'   Dim prgSTOP As Integer
'   Dim TagNodo As String
'
'   'QUI CERCO RELAZIONI NEI MOVIMENTI DI CANTINA
'   If Len(Trim(DataRelaz)) > 0 Then
'      '(QUI CONSIDERO SOLO I MOVIMENTI "LIBERI")
'      strRicerca = "Select * FROM MOV_CANT " & _
'                   "WHERE MCIDECAR = " & CInt(CodRelaz) & " AND (MCDATREG <= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102)) AND  MCFLMOVI = 0 " & _
'                   "ORDER BY MCDATREG, MCSERIAL ASC"
'   Else
'      '(QUI CONSIDERO TUTTI I TIPI DI MOVIMENTO)
'      strRicerca = "Select * FROM MOV_CANT " & _
'                   "WHERE MCIDECAR = " & CInt(CodRelaz) & " AND MCQTAMOV <> 0 " & _
'                   "ORDER BY MCDATREG, MCSERIAL ASC"
'   End If
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'   If Not RS.EOF Then
'      Do Until RS.EOF
'
'         'Qui compongo il tag che poi mi consentirà di aprire dinamicamente il Mov. di Cantina o il DDTAC o il DDTVE _
'          NOTA: LA STRUTTURA E' FORMATA DA 4 SEZIONI
'         TagNodo = "MOV_CANT# # #" & Trim(Str(RS!MCSERIAL))
'
'         'Qui inserisco il Silos di Destinazione agganciato
'         'If Len(Trim(DataRelaz)) > 0 Then 'Qui per la Tracciabilità sulle FormDOC (Sia acq che ven)
'         '   Call InserisciNodoTreeView(ctrlTreeVw, "IDE" & Trim(Str(RS!MCIDESCA)), "IDE" & Trim(Str(CodRelaz)), "Silos: " & DecodSILOS("SLCODICE", RS!MCSILSCA) & " [" & DecodTABGEN("OPECAN", "TGCODICE", RS!MCOPECAN) & " del " & RS!MCDATREG & "]", 2)
'         'Else  ' qui per la Tracciabilità della FormSILOS_TRACC dove mi serve piu' dettaglio
'            If RS!MCFLMOVI = 0 Then
'               Call InserisciNodoTreeView(ctrlTreeVw, "IDE" & Trim(Str(RS!MCIDESCA)), "IDE" & Trim(Str(CodRelaz)), "Silos: " & DecodSILOS("SLCODICE", RS!MCSILSCA) & " - " & DecodTABGEN("OPECAN", "TGCODICE", RS!MCOPECAN) & " (" & Format(RS!MCDATREG, "dd/mm/yy") & ") - [Hl. " & Format(RS!MCQTAMOV, "########0.#0") & "]", 2, TagNodo)
'
'               'Qui ricerco l'eventuale ulteriore relazione in cascata
'               Call RicercaRelazioniPROV(ctrlTreeVw, RS!MCIDESCA, RS!MCDATREG)
'
'            ElseIf RS!MCFLMOVI = 1 Then
'               prgSTOP = prgSTOP + 1
'               Call InserisciNodoTreeView(ctrlTreeVw, "IDE_STOP" & Trim(Str(prgSTOP)), "IDE" & Trim(Str(CodRelaz)), "Mov.: Giacenza Iniz. (" & Format(RS!MCDATREG, "dd/mm/yy") & ") - [Hl. " & Format(RS!MCQTAMOV, "########0.#0") & "]", 2, TagNodo)
'            ElseIf RS!MCFLMOVI = 2 Then
'               prgSTOP = prgSTOP + 1
'               Call InserisciNodoTreeView(ctrlTreeVw, "IDE_STOP" & Trim(Str(prgSTOP)), "IDE" & Trim(Str(CodRelaz)), "Mov.: Rettifica (" & Format(RS!MCDATREG, "dd/mm/yy") & ") - [Hl. " & Format(RS!MCQTAMOV, "########0.#0") & "]", 2, TagNodo)
'            End If
'         'End If
'
''         'Qui ricerco l'eventula ulteriore relazione in cascata
''         Call RicercaRelazioniPROV(ctrlTreeVw, RS!MCIDESCA, RS!MCDATREG)
'
'         RS.MoveNext
'      Loop
'   End If
'   RS.Close
'   Set RS = Nothing
'
'
''QUI CERCO RELAZIONI NEI DOCUMENTI DI ACQUISTO (Sia nel Silos1 che nel Silos2)
'   If Len(Trim(DataRelaz)) > 0 Then
'      strRicerca = "SELECT dbo.DOC_MAST.MVSERIAL AS SERIALE, MVCATDOC, MVFLVEAC, MVTIPDOC, MVPRGSEZ, MVDATSEZ, MVCODSIL, MVIDESIL, MVNUMDOC, MVALFDOC, MVDATDOC, " & _
'                   "DOC_DETT.MVCODART, DOC_DETT.MVIDESIL, DOC_DETT.MV_HLSIL, DOC_DETT.MVIDESI2, DOC_DETT.MV_HLSI2  " & _
'                   "FROM         dbo.DOC_MAST INNER JOIN " & _
'                   "dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
'                   "WHERE (MVMOVQTA = '+' AND MVIDESIL = " & CodRelaz & " AND (MVDATSEZ <= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102))) OR " & _
'                   "      (MVMOVQTA = '+' AND MVIDESI2 = " & CodRelaz & " AND (MVDATSEZ <= CONVERT(DATETIME, '" & Format(DataRelaz, "yyyy-mm-dd") & " 00:00:00', 102)))    " & _
'                   "ORDER BY MVDATSEZ,MVPRGSEZ ASC"
'   Else
'      strRicerca = "SELECT dbo.DOC_MAST.MVSERIAL AS SERIALE, MVCATDOC, MVFLVEAC, MVTIPDOC, MVPRGSEZ, MVDATSEZ, MVCODSIL, MVIDESIL, MVNUMDOC, MVALFDOC, MVDATDOC, " & _
'                   "DOC_DETT.MVCODART, DOC_DETT.MVIDESIL, DOC_DETT.MV_HLSIL, DOC_DETT.MVIDESI2, DOC_DETT.MV_HLSI2  " & _
'                   "FROM         dbo.DOC_MAST INNER JOIN " & _
'                   "dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
'                   "WHERE (MVMOVQTA = '+' AND MVIDESIL = " & CodRelaz & " ) OR " & _
'                   "      (MVMOVQTA = '+' AND MVIDESI2 = " & CodRelaz & " )    " & _
'                   "ORDER BY MVDATSEZ,MVPRGSEZ ASC"
'   End If
'   Set RS = New ADODB.Recordset
'   RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'   If Not RS.EOF Then
'      Do Until RS.EOF
'
'         'Qui compongo il tag che poi mi consentirà di aprire dinamicamente il Mov. di Cantina o il DDTAC o il DDTVE _
'          NOTA: LA STRUTTURA E' FORMATA DA 4 SEZIONI
'         TagNodo = "DOC_MAST#" & RS!MVCATDOC & "#" & RS!MVFLVEAC & "#" & Trim(Str(RS!Seriale))
'
'         'Qui inserisco il Documento di Vendita agganciato
'         'If Len(Trim(DataRelaz)) > 0 Then 'Qui per la Tracciabilità sulle FormDOC (Sia acq che ven)
'         '   Call InserisciNodoTreeView(ctrlTreeVw, "", "IDE" & Trim(Str(CodRelaz)), RS!MVTIPDOC & " - Sez. " & RS!MVPRGSEZ & " (" & Format(RS!MVDATSEZ, "dd/mm/yyyy") & ")", 3)
'         'Else  ' qui per la Tracciabilità della FormSILOS_TRACC dove mi serve piu' dettaglio
'            strHl = IIf(RS!MVIDESIL = CodRelaz, Format(RS!MV_HLSIL, "########0.#0"), Format(RS!MV_HLSI2, "########0.#0"))
'
'            Call InserisciNodoTreeView(ctrlTreeVw, "", "IDE" & Trim(Str(CodRelaz)), RS!MVTIPDOC & " - Sez. " & RS!MVPRGSEZ & " (" & Format(RS!MVDATSEZ, "dd/mm/yy") & ") - " & RS!MVCODART & " [Hl. " & strHl & "]", 3, TagNodo)
'         'End If
'
'         RS.MoveNext
'      Loop
'   End If
'   RS.Close
'   Set RS = Nothing
'
'End Sub


'Public Sub RiempiTreeViewDEST(ctrlTreeVw1 As Object, ctrlTreeVw2 As Variant, SerialDoc As Long, RigaDoc As Integer, Optional pCodSil As Long, Optional pIDSil As Long)
'   Dim RS As ADODB.Recordset
'   Dim strRicerca As String
'
'
'   If SerialDoc > 0 Then
'
'      'DOC_DETT
'      strRicerca = "SELECT dbo.DOC_MAST.MVSERIAL, MVTIPDOC, MVPRGSEZ, MVDATSEZ, MVCODSIL, MVIDESIL, MVCODSI2, MVIDESI2 " & _
'                   "FROM         dbo.DOC_MAST INNER JOIN " & _
'                   "dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
'                   "WHERE dbo.DOC_MAST.MVSERIAL = " & SerialDoc & " AND CPROWNUM = " & RigaDoc & ""
'      Set RS = New ADODB.Recordset
'      RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'      If Not RS.EOF Then
'
'         'SILOS1
'            'Qui inserisco il Nodo Principale del DDTAC
'            Call InserisciNodoTreeView(ctrlTreeVw1, RS!MVTIPDOC & RS!MVPRGSEZ, "", RS!MVTIPDOC & " - Sez. " & RS!MVPRGSEZ & " del " & Format(RS!MVDATSEZ, "dd/mm/yyyy"), 3, "")
'            'Qui inserisco subito il Silos di Destinazione agganciato all'Articolo
'            Call InserisciNodoTreeView(ctrlTreeVw1, "IDE" & Trim(Str(RS!MVIDESIL)), RS!MVTIPDOC & RS!MVPRGSEZ, "Silos: " & DecodSILOS("SLCODICE", RS!MVCODSIL), 2, "")
'
'            'Qui ricerco le varie relazione successive
'            Call RicercaRelazioniDEST(ctrlTreeVw1, RS!MVIDESIL, RS!MVDATSEZ)
'
'
'            'SILOS2
'            If IsObject(ctrlTreeVw2) = True Then
'               If RS!MVCODSI2 > 0 Then
'                  'Qui inserisco il Nodo Principale del DDTAC
'                  Call InserisciNodoTreeView(CVar(ctrlTreeVw2), RS!MVTIPDOC & RS!MVPRGSEZ, "", RS!MVTIPDOC & " - Sez. " & RS!MVPRGSEZ & " del " & Format(RS!MVDATSEZ, "dd/mm/yyyy"), 3, "")
'                  'Qui inserisco subito il Silos di Destinazione agganciato all'Articolo
'                  Call InserisciNodoTreeView(CVar(ctrlTreeVw2), "IDE" & Trim(Str(RS!MVIDESI2)), RS!MVTIPDOC & RS!MVPRGSEZ, "Silos: " & DecodSILOS("SLCODICE", RS!MVCODSI2), 2, "")
'
'                  'Qui ricerco le varie relazione successive
'                  Call RicercaRelazioniDEST(CVar(ctrlTreeVw2), RS!MVIDESI2, RS!MVDATSEZ)
'               End If
'            End If
'      End If
'      RS.Close
'      Set RS = Nothing
'
'   Else 'QUI NEL CASO SI TRATTI DI UN SILOS E NON DI UN DOCUMENTO
'
'      'Qui inserisco il Nodo Principale del DDTAC
'      'Call InserisciNodoTreeView(ctrlTreeVw1, RS!MVTIPDOC & RS!MVPRGSEZ, "", RS!MVTIPDOC & " - Sez. " & RS!MVPRGSEZ & " del " & Format(RS!MVDATSEZ, "dd/mm/yyyy"), 3)
'      'Qui inserisco subito il Silos di Destinazione agganciato all'Articolo
'      Call InserisciNodoTreeView(ctrlTreeVw1, "IDE" & Trim(Str(pIDSil)), "", "Silos: " & DecodSILOS("SLCODICE", Trim(Str(pCodSil))), 6, "")
'
'      'Qui ricerco le varie relazione successive
'      Call RicercaRelazioniDEST(ctrlTreeVw1, pIDSil, "")
'
'   End If
'End Sub


'Public Sub RiempiTreeViewPROV(ctrlTreeVw1 As Object, SerialDoc As Long, RigaDoc As Integer, Optional pCodSil As Long, Optional pIDSil As Long)
'   Dim RS As ADODB.Recordset
'   Dim strRicerca As String
'
'
'   If SerialDoc > 0 Then
'
'      'DOC_DETT
'      strRicerca = "SELECT dbo.DOC_MAST.MVSERIAL, MVTIPDOC, MVNUMDOC, MVALFDOC, MVDATDOC, MVCODSIL, MVIDESIL " & _
'                   "FROM         dbo.DOC_MAST INNER JOIN " & _
'                   "dbo.DOC_DETT ON dbo.DOC_MAST.MVSERIAL = dbo.DOC_DETT.MVSERIAL " & _
'                   "WHERE dbo.DOC_MAST.MVSERIAL = " & SerialDoc & " AND CPROWNUM = " & RigaDoc & ""
'      Set RS = New ADODB.Recordset
'      RS.Open strRicerca, ConnessioneAzienda, adOpenStatic
'      If Not RS.EOF Then
'
'         'Qui inserisco il Nodo Principale del DDTAC
'         Call InserisciNodoTreeView(ctrlTreeVw1, RS!MVTIPDOC & RS!MVNUMDOC, "", RS!MVTIPDOC & " - Num. " & RS!MVNUMDOC & "/" & RS!MVALFDOC & " del " & Format(RS!MVDATDOC, "dd/mm/yyyy"), 4, "")
'         'Qui inserisco subito il Silos di Destinazione agganciato all'Articolo
'         Call InserisciNodoTreeView(ctrlTreeVw1, "IDE" & Trim(Str(RS!MVIDESIL)), RS!MVTIPDOC & RS!MVNUMDOC, "Silos: " & DecodSILOS("SLCODICE", RS!MVCODSIL), 2, "")
'
'         'Qui ricerco le varie relazione successive
'         Call RicercaRelazioniPROV(ctrlTreeVw1, RS!MVIDESIL, RS!MVDATDOC)
'
'      End If
'      RS.Close
'      Set RS = Nothing
'
'   Else 'QUI NEL CASO SI TRATTI DI UN SILOS E NON DI UN DOCUMENTO
'
'      ''Qui inserisco il Nodo Principale del SILOS
'      Call InserisciNodoTreeView(ctrlTreeVw1, "IDE" & Trim(Str(pIDSil)), "", "Silos: " & DecodSILOS("SLCODICE", Trim(Str(pCodSil))), 5, "")
'
'      'Qui ricerco le varie relazione successive
'      Call RicercaRelazioniPROV(ctrlTreeVw1, pIDSil, "")
'
'   End If
'
'End Sub


Public Sub ApriNodoTreeVw(pTagNodo As String)
   Dim ValoriTag() As String
   Dim NomTab As String
   Dim TipDoc As String
   Dim VenAcq As String
   Dim Serial As String
   
   If Len(Trim(pTagNodo)) > 0 Then

      'Qui splitto il contenuto del Nodo.Tag
      ReDim ValoriTag(4) 'Dimensiono la matrice a 3 Indici
      ValoriTag = Split(pTagNodo, "#")
        NomTab = ValoriTag(0)
        TipDoc = ValoriTag(1)
        VenAcq = ValoriTag(2)
        Serial = ValoriTag(3)
      Erase ValoriTag
      
      'Qui controllo se devo aprire un Movimento di Cantina o un Documento
      If NomTab = "MOV_CANT" Then
'         Set MDIForm1.FormMOV_CANTINA = New FormMOV_CANT
'         MDIForm1.FormMOV_CANTINA.ChiaveTabella = "MOVCA"
'         MDIForm1.FormMOV_CANTINA.SerialEXT = CLng(Serial)
'         MDIForm1.FormMOV_CANTINA.Show
      ElseIf NomTab = "DOC_MAST" Then
         'Qui controllo se devo aprire un Documento di Vendita o di Acquisto
         If VenAcq = "V" Then
            Set MDIForm1.FormDocVen_DDT = New FormDOC_VEN
            MDIForm1.FormDocVen_DDT.ChiaveTabella = TipDoc & "V" 'Questa chiave è data dall'unione dei campi "MVCATDOC+MVFLVEAC" della tabella DOC_MAST
            MDIForm1.FormDocVen_DDT.SerialEXT = CLng(Serial)
            MDIForm1.FormDocVen_DDT.Show
         Else
            Set MDIForm1.FormDocAcq_DDT = New FormDOCUMENTI
            MDIForm1.FormDocAcq_DDT.ChiaveTabella = TipDoc & "A" 'Questa chiave è data dall'unione dei campi "MVCATDOC+MVFLVEAC" della tabella DOC_MAST
            MDIForm1.FormDocAcq_DDT.SerialEXT = CLng(Serial)
            MDIForm1.FormDocAcq_DDT.Show
         End If
      End If
      
   End If
   
End Sub

