archiviare le fatture su un foglio archivia

Non sapete dove scrivere? Scrivete qui!
Regole del forum
Solo richieste di aiuto. Per saluti e presentazioni utilizzate il forum Discussioni Generali e Presentazioni.
Rispondi
Pacifico Bacocco
Messaggi: 7
Iscritto il: martedì 13 marzo 2018, 21:48

archiviare le fatture su un foglio archivia

Messaggio da Pacifico Bacocco »

Ho creato una fattura che si aggiorna con delle macro non riesco a creare una macro che me li registra in un foglio archivio
con N°, data, cliente, importo e data scadenza. Ringrazio anticipatamente se qualche persona più competente di me mi aiuta
allego la mia cartella di lavoro
Allegati
prova fattura.ods
(17.84 KiB) Scaricato 168 volte
OpenOffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

A quale versione ti sei ispirato? Alla mia o a quella di @lucky63? viewtopic.php?t=4906&f=2#p23643
Il tuo allegato non presenta le macro, perchè le hai salvate in "Macro personali", ovvero sul tuo pc e quindi non nel documento. Quando sposti il documento le macro non lo seguono.
Intanto ti posso dire che secondo me hai fatto alcuni errori tra imponibile e totale fattura, ma è un file in costruzione quindi probabilmente trovando il problema delle macro ti stai concentrando su questo.
Allega nuovo documento con le macro da te fatte.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Pacifico Bacocco
Messaggi: 7
Iscritto il: martedì 13 marzo 2018, 21:48

Re: archiviare le fatture su un foglio archivia

Messaggio da Pacifico Bacocco »

Per quanto riguarda la fattura non mi sono ispirato a nessuno è concepita da me.
Allego il nuovo file modificato .
Allegati
fatture1.ods
(168.03 KiB) Scaricato 167 volte
OpenOffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

Mi riferivo alle macro e non volevo criticare. Sbaglio o avevi prima lasciato un commento in quella discussione e poi hai deciso di aprirne una nuova? Qualcuno aveva commentato perché mi era giunta la notifica, ma forse non eri stato tu?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Pacifico Bacocco
Messaggi: 7
Iscritto il: martedì 13 marzo 2018, 21:48

Re: archiviare le fatture su un foglio archivia

Messaggio da Pacifico Bacocco »

Sono alle prime armi con le macro e accetto tutti i consigli da persone esperte e solo per capire come funzionano grazie comunque per l'interessamento
OpenOffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

Prova l'allegato. Poi ti spiego le macro passo passo.

Codice: Seleziona tutto

REM  *****  BASIC  *****
Public const Foglio_Fattura as string="fatture"
Public const foglioarchivio as string="Archivio"

global numerofattura as integer
global data as long
global cliente as String
global totalefattura as integer
global scadenza as long


Sub main
Call EsportaPNG
Call Archivia
Call Resetta
End Sub


Sub EsportaPNG
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$F$50"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:ExportTo", "", 0, Array())
End Sub

Sub Archivia
numerofattura=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F1").getvalue()
data=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F2").getvalue()
cliente=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F5").getstring()
totalefattura=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F46").getvalue()
scadenza=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F11").getvalue()
test1=controlladati()
if test1="ok" then
	test2=controllaarchivio()
	if test2<>-1 then
		call riempiarchivio(test2)
		msgbox "Fattura archiviata","Successo!"
	else
		msgbox "Questa fattura era già stata archiviata","Controlla"
	end if
else
	select case test1
		case "Data"
			msgbox "Manca la Data. Non è possibile archiviare","Imprevisto" 
 		case "Cliente"
			msgbox "Manca il Cliente. Non è possibile archiviare","Imprevisto"
		case "NumFattura"
			msgbox "Manca il Num_Fattura. Non è possibile archiviare","Imprevisto"
		case "TotFattura"
			msgbox "Il totale fattura è nullo o negativo. Non è possibile archiviare","Imprevisto"
		case "Scadenza"
			msgbox "Manca la data Scadenza","Imprevisto"
	end select
end if
end sub

function controlladati() as string
controlladati="ok"
if cliente="" then
	controlladati="Cliente"
elseif data="" then
	controlladati="Data"
elseif totalefattura<=0 then
	controlladati="TotFattura"
elseif numerofattura<=0 then
	controlladati="NumFattura"	
elseif scadenza="" then
	controlladati="Scadenza"
end if
end function


function controllaarchivio() as integer
oDoc=ThisComponent
oSheet=oDOc.Sheets.getByName(foglioarchivio)
oCol = oSheet.Columns(0)
oRange = oCol.queryEmptyCells()
riferimento=oRange.getRangeAddressesAsString()
riferimento=mid(riferimento,instr(riferimento,".A")+2,instr(riferimento,":")-instr(riferimento,".A")-2)
if oSheet.getCellByPosition(1,cint(riferimento)-2).getvalue()=numerofattura then
	controllaarchivio=-1
else
	controllaarchivio=cint(riferimento)-1
end if
end function

sub riempiarchivio(i as integer)
ThisComponent.Sheets.getByName(foglioarchivio).getCellByPosition(2,i).setstring(cliente)
ThisComponent.Sheets.getByName(foglioarchivio).getCellByPosition(1,i).setvalue(data)
ThisComponent.Sheets.getByName(foglioarchivio).getCellByPosition(3,i).setvalue(totalefattura)
ThisComponent.Sheets.getByName(foglioarchivio).getCellByPosition(0,i).setvalue(numerofattura)
ThisComponent.Sheets.getByName(foglioarchivio).getCellByPosition(4,i).setvalue(Scadenza)
end Sub


sub Resetta
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$F$5"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SV"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$B$11"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$14:$F$40"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args2())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$F$5"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())
end sub

 Editato: Eliminato file perchè caricata versione sbagliata. Aggiunto file corretto nel messaggio successivo 
Ultima modifica di unlucky83 il lunedì 19 marzo 2018, 18:07, modificato 2 volte in totale.
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Pacifico Bacocco
Messaggi: 7
Iscritto il: martedì 13 marzo 2018, 21:48

Re: archiviare le fatture su un foglio archivia

Messaggio da Pacifico Bacocco »

mi da un errore scusami se do tanto disturbo ma come si dice da noi sono de coccio
Allego stampa dell'errore
Allegati
errore.odt
(249.33 KiB) Scaricato 143 volte
OpenOffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

devi controllare tra le opzioni il sicurezza delle macro. Probabilmente hai salvato il file in una cartella per la quale è attivo il blocco delle macro.
La macro da eseguire è la macro "Main" o mediante il pulsante o manualmente.

Codice: Seleziona tutto

Sub main
Call EsportaPNG
Call Archivia
Call Resetta
End Sub
La macro Main chiama le macro EsportaPNG (che si occupa soltanto di esportare in un file immagine la fattura), poi la macro Archivia (che si occupa di popolare il foglio Archivio) ed infine la macro Resetta (che si occupa di riportare a zero il foglio fattura).
Le altre macro salvate nel documento sono funzioni impiegate da "Archivia" per eseguire alcuni controlli e per copiare i dati delle celle da un foglio ad un altro.
Se inserisci una fattura incompleta, verrà eseguita l'esportazione in file immagine, ma le funzioni di controllo inserite in "Archivia" riconosceranno l'errore e ti avviseranno che la trascrizione sull'altro foglio non è avvenuta perchè qualcosa non torna.
Seguiranno altre info quando riuscirai a provare il file.
Nota bene
Non rinominare i fogli altrimenti dovrai modificare questa parte del codice:

Codice: Seleziona tutto

Public const Foglio_Fattura as string="fatture"
Public const foglioarchivio as string="Archivio"
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Pacifico Bacocco
Messaggi: 7
Iscritto il: martedì 13 marzo 2018, 21:48

Re: archiviare le fatture su un foglio archivia

Messaggio da Pacifico Bacocco »

ho istallato quello che mi hai inviato non funziona da un mare di errori. A me servirebbe una cosa più semplice, mi basta una macro per registrare solo su un archivia N° fattura, data fattura,cliente,importo fattura senza tanti controlli. poi quando sarò piu pratico proverò con cose più serie. Comunque scusami se ti do tanto tanti fasti comunque tantissimi GRAZIE
OpenOffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

Tanto per chiarire non ti ho dato nulla da istallare. Posso toglierti dei controlli, ma che errori ti da?

Questa è la macro Archivia

Codice: Seleziona tutto

Sub Archivia
numerofattura=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F1").getvalue()
data=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F2").getvalue()
cliente=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F5").getstring()
totalefattura=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F46").getvalue()
scadenza=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F11").getvalue()
test1=controlladati()
if test1="ok" then
   test2=controllaarchivio()
   if test2<>-1 then
      call riempiarchivio(test2)
      msgbox "Fattura archiviata","Successo!"
   else
      msgbox "Questa fattura era già stata archiviata","Controlla"
   end if
else
   select case test1
      case "Data"
         msgbox "Manca la Data. Non è possibile archiviare","Imprevisto"
      case "Cliente"
         msgbox "Manca il Cliente. Non è possibile archiviare","Imprevisto"
      case "NumFattura"
         msgbox "Manca il Num_Fattura. Non è possibile archiviare","Imprevisto"
      case "TotFattura"
         msgbox "Il totale fattura è nullo o negativo. Non è possibile archiviare","Imprevisto"
      case "Scadenza"
         msgbox "Manca la data Scadenza","Imprevisto"
   end select
end if
end sub
E' molto semplice e richiama la funzione controlladati(): Se manca uno dei 5 valori da archiviare, segnala l'errore e non archivia,
Richiama anche la funzione controllaarchivio(): Se è già archiviata una fattura con lo stesso numero fattura segnale l'errore e non archivia. Se invece non trova una fattura con la stessa numerazione, restituisce la prima riga libera del foglio archivio.
Se i due controlli vanno a buon fine, viene chiamata la macro riempiarchivio(test2), che assegna i valori della prima riga libera del foglio archivio con i valori del primo foglio.

Allego file, perchè precedentemente ho allegato file senza macro
Allegati
fatture2.ods
(159.66 KiB) Scaricato 174 volte
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

Un commento di risposta?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Pacifico Bacocco
Messaggi: 7
Iscritto il: martedì 13 marzo 2018, 21:48

Re: archiviare le fatture su un foglio archivia

Messaggio da Pacifico Bacocco »

continua a darmi un errore ti allego l'errore che compare

ERRORE di Runtine BASIC
Si è verificata una eccezione
Type:com.sun.star.container.NoSuchElementException
Message

numerofattura=ThisComponent.Sheets.getByName(Foglio_Fattura).getCellRangeByName("F1").getvalue()
OpenOffice 4.1.1
Avatar utente
unlucky83
Volontario
Volontario
Messaggi: 2355
Iscritto il: lunedì 7 gennaio 2013, 1:23
Località: Latina

Re: archiviare le fatture su un foglio archivia

Messaggio da unlucky83 »

La prima cosa che hai fatto è stata rinominare il foglio vero?
LibO:Versione: 6.2.8.2
Build ID: 1:6.2.8~rc2-0ubuntu0.16.04.1- 32-bit
-
Se risolvi:
1. Condividi la soluzione qui con noi
2. Metti [Risolto] al titolo del primo messaggio come spiegato qui
Rispondi