Costruzione preventivo e consuntivo

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Thunder
Messaggi: 26
Iscritto il: mercoledì 23 agosto 2017, 16:02

Costruzione preventivo e consuntivo

Messaggio da Thunder »

Buongiorno a tutti sono qui a richiedervi l'ennesima mano
Premetto che ho già cercato in lungo e in largo ma non sono riuscito a trovare nulla che si adatti alla mia esigenza.
Provo a spiegarmi:
nel file preventivo, che come dicevo grazie a voi funziona una meraviglia, avrei la necessità di farlo comunicare con il file consuntivi ovvero; per prima cosa il vorrei che il file consuntivi venga aggiornato automaticamente con i dati dei quattro fogli del file preventivi (Oculistica cataratte, oculistica ricoveri, preventivi vari e ostetricia (parto)) nei relativi fogli che replicati sono Oculistica cataratte (prev), oculistica ricoveri (prev) e cosi via in modo che da ritrovare tutti i dati raccolti del paziente precedentemente inserito.
Adesso dal file consuntivi vorrei richiamare il paziente nel foglio "ins consuntivo" al fine di poter apportare alcune modifiche (importi dati ecc) in modo che successivamente possa archiviarlo nel relativo foglio replicato Oculistica cataratte (cons), Oculistica ricoveri (con) e cosi via in modo che poi, come per il preventivo, possa stampare riprendendo i dati dei fogli (cons) nell'apposito foglio CONS
Tutto questo perché successivamente, con le stesse procedure di archiviazione, costruirò (almeno spero) un ulteriore file per la liquidazione.
Spero di essermi bene.
Grazie in anticipo
Allegati
TEST Preventivi.ods
(30.92 KiB) Scaricato 105 volte
Test Consuntivi.ods
(15.28 KiB) Scaricato 119 volte
Openoffice 3.2 su Windows 10
Thunder
Messaggi: 26
Iscritto il: mercoledì 23 agosto 2017, 16:02

Re: costruzione preventivo e consuntivo

Messaggio da Thunder »

Ciao a tutti

scusate se continuo qui è solo per avere un ordine cronologico del lavoro svolto.
Con il file preventivo ho fatto tutto compresa la macro per copiare i dati da un foglio del file preventivo ad un foglio del file consuntivo; a questo punto volevo adattare la macro che mi avevate fatto per il file preventivo in quello dei consuntivi ma non riesco prorpio. fatto cio volevo salvare i dati nel foglio salva consuntivi.
Nel frattempo ho imparato qualcosina sulle macro e se potete spiegarmi i passaggi per adattare le macro così da smanettarci su.
Questo lavoro mi serve in modo che poi possa trasferire il foglio salva consuntivi in un foglio del file liquidazioni ma poi ci arriverò.
Altra cosa come faccio ad aggiungere alla stessa macro altri fogli da copiare in altro file? al momento sono riuscito solo con uno e utilizzo questa:
Sub Copiacelledefinite
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(2)
Range = Sheet.getCellRangeByName("A1:AM1000").getDataArray ' range da copiare
sFileName ="\\PC213161\strutture\ds\ufficio\Consuntivi.ods" ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
Sheet1 = DocName.Sheets(1)

dRange = Sheet1.getCellRangeByName("A1:AM1000") ' range destinazione
dRange.setDataArray(Range)
DocName.store
DocName.close(true)
End Sub
Grazie mille
Allegati
Test.ods
(24.66 KiB) Scaricato 112 volte
Openoffice 3.2 su Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: costruzione preventivo e consuntivo

Messaggio da patel »

Thunder ha scritto:.........Altra cosa come faccio ad aggiungere alla stessa macro altri fogli da copiare in altro file? al momento sono riuscito solo con uno e utilizzo questa:....
Se ho capito bene

Codice: Seleziona tutto

Sub Copiacelledefinite
Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(2) 
Range = Sheet.getCellRangeByName("A1:AM1000").getDataArray ' range da copiare
sFileName ="\\PC213161\strutture\ds\ufficio\Consuntivi.ods"  ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
Sheet1 = DocName.Sheets(1) 
dRange  = Sheet1.getCellRangeByName("A1:AM1000") ' range destinazione
dRange.setDataArray(Range)
DocName.store
DocName.close(true)
' ----------------------continua
Sheet = Doc.Sheets(3) ' altro foglio
Range = Sheet.getCellRangeByName("A1:AM1000").getDataArray ' range da copiare
sFileName ="\\PC213161\strutture\ds\ufficio\altrofile.ods"  ' altro file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
Sheet1 = DocName.Sheets(1) 
dRange  = Sheet1.getCellRangeByName("A1:AM1000") ' range destinazione
dRange.setDataArray(Range)
DocName.store
DocName.close(true)
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Thunder
Messaggi: 26
Iscritto il: mercoledì 23 agosto 2017, 16:02

Re: costruzione preventivo e consuntivo

Messaggio da Thunder »

Ciao

perfetto o quasi nel senso che così mi apre e chiude il file per il numero di fogli che aggiorno, ho provato ad eliminare la riga DocName.close(true) ma così facedo resta il file aperto e non mi aggiorna il secondo foglio.
Per l'altra macro, questa per intenderci:

Codice: Seleziona tutto

'Option Explicit
Private dlg As Object
Private dlgmodel As Object
Private oControl As Object
Private oControl2 As Object   
Private gridmodel 
Private oListener
Private grid As Object 
Private Arr()

Sub GridOnDialog(Target)
If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then Exit Sub
If Target.String = "" Then
   MsgBox("Selezionare il nome della Branca e/o Struttura" : Exit Sub 
End if 

If Target.AbsoluteName <> "$Prev.$C$4" Then Exit Sub
Dim a As Object, Doc As Object
Dim columnmodel As Object, LargCol()
Dim i As Long, col As Object
Dim FoglioPrev As Object
Dim FoglioRep As Object     

Dim LastRow As Long     
Dim LastCol As Long

  Doc = ThisComponent
  FoglioPrev = Doc.Sheets.getByName("Prev") 
  FoglioRep = Doc.Sheets.getByName(Target.String) 

  a = FoglioRep.createCursor
  a.gotoEndOfUsedArea(false)
  LastRow = a.RangeAddress.EndRow
  LastCol = a.RangeAddress.EndColumn 
  oRange = FoglioRep.GetCellRangeByPosition(0, 6, LastCol, LastRow)
  Arr() = oRange.GetDataArray
  
  DialogLibraries.LoadLibrary( "Standard" )
  dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1)
  dlgmodel = dlg.getModel()
  dlgmodel.Positionx = 265
  dlgmodel.Positiony = 100
  
  dlg.Title = "Preventivo " & Target.String
  gridmodel = dlgmodel.createInstance("com.sun.star.awt.grid.UnoControlGridModel")

  with gridmodel
    .PositionX = 20
    .PositionY = 28
    .Width = 440
    .Height = 120
    .SelectionModel = 1'com.sun.star.view.SelectionType.MULTI
  end with

   columnmodel = gridmodel.ColumnModel
   For i = 0 To LastCol
      col = columnmodel.createColumn()
      col.Title = FoglioRep.getCellByPosition(i, 5).String 
      columnmodel.addColumn(col)
      col.Resizeable = False
      col.columnwidth = FoglioRep.Columns(i).Width/50
      col.HorizontalAlign = 1
   Next i
 

  dlgmodel.insertByName("grid", gridmodel)
  REM le prossime due righe servono per il listener
  grid = dlg.getControl("grid")
  oListener = (CreateUnoListener("grid_", "com.sun.star.awt.grid.XGridSelectionListener"))
  grid.addSelectionListener(oListener)
  
  gridmodel.GridDataModel.addRows(Arr, Arr)

  
  dlg.execute()
  dlg.dispose()
  
End Sub

 
''

Sub grid_disposing(ev)
'MsgBox "chiusura datagrid"
End Sub

Sub grid_selectionChanged(ev)
Dim rows(), i As Long, s As Long
Dim Denominazione As String
Dim Doc As Object
Dim Foglio As Object

  rows = ev.Source.getSelectedRows()

   s = rows(0)  
  
  Denominazione = gridmodel.GridDataModel.getRowData(s)(1)
  If MsgBox( "Hai selezionato il paziente " & Denominazione & " ?", 1+32, "Compilazione preventivo") = 2 Then 
    grid.removeSelectionListener(oListener)
    REM DESELEZIONO TUTTO
    grid.deselectAllRows
    REM RIATTIVO IL LISTENER
    grid.addSelectionListener(oListener)
    Exit Sub
  End if  
  Doc = ThisComponent
  Foglio = Doc.Sheets.getByName("Prev")
  a = Foglio.createCursor
  a.gotoEndOfUsedArea(false)
  LastRow = a.RangeAddress.EndRow
  REM RIPULISCO IL PRECEDENTE PREVENTIVO
  Foglio.getcellRangeByPosition(0, 15, 3, LastRow ).ClearContents(7) 
            
  rigades = 13
  For i = 1 To gridmodel.ColumnModel.ColumnCount - 1
   Foglio.getcellbyposition(0, rigades).String = gridmodel.ColumnModel.getColumn(i).Title & " :"
   If gridmodel.GridDataModel.getRowData(s)(i) <> "" Then
      Foglio.getcellbyposition(3, rigades).String = gridmodel.GridDataModel.getRowData(s)(i)  
   End If
   rigades = rigades + 1   
  Next i 


  grid.removeSelectionListener(oListener)
  REM DESELEZIONO TUTTO
  grid.deselectAllRows
  REM RIATTIVO IL LISTENER
  grid.addSelectionListener(oListener)
End Sub

sub DlgClose
    dlg.endExecute()
End sub
Non riesco ad associarla al PREV facendola partire da bottone anziché da cella /C$ in ultimo vorrei che, modificato il consuntivo salvasse il tutto nella prima riga libera del foglio salva consuntivi.
Grazie ancora per la disponibilità
Ultima modifica di charlie il giovedì 29 agosto 2019, 7:38, modificato 1 volta in totale.
Motivazione: Formattato codice
Openoffice 3.2 su Windows 10
Rispondi