Microsoft Excel

Microsoft Excel

giovedì 16 luglio 2015

Ottenere informazioni da Twitter con “Power Query”

L’uso dei “Social” è ormai diventato sempre più importante e necessario per una azienda. Essi ci permettono di comunicare e condividere le informazioni con un numero sempre maggiore di utenti, velocemente e a basso costo. Altrettanto importante è acquisire e gestire i dati contenuti nei propri profili, che servono all’azienda al fine di risolvere un problema di lavoro. Essi contengono molte informazioni importanti, come ad esempio, la data, il testo, il mittente e le foto. Queste informazioni devono essere gestite nel rispetto della privacy dell’utente.
Con questo blog vediamo come sia possibile acquisire informazioni da Twitter utilizzando “Power Query” e le API di Twitter.
In sostanza, partendo da una timeline di Twitter come quella sotto:



Vogliamo acquisirne le informazioni e in definitiva ottenere un foglio di calcolo del tipo.



Come fare per arrivare a questo lo ha scritto bene lo sviluppatore Kasper De Jonge nel blog http://www.powerpivotblog.nl/getting-data-into-power-query-with-the-twitter-search-api-how-to-hack-pq-to-use-oauth/
Con questo blog voglio solo rendere più chiaro il suo lavoro, adattandolo alle mie esigenze.
Procedere nel modo seguente:

1. Per prima cosa è necessario un account Twitter e l’add-on “Power Query” di Excel. Voglio solo ricordare due cose: per l’add-on “Power Query” di Excel è necessaria la versione di Excel 2010 o superiore; non è possibile applicare questa procedura a WhatsApp: per l’acquisizione delle informazioni dal Web è necessario che l’applicazione sia provvista di API (Application Interface).

2. Dopo l’accesso al proprio  profilo Twitter, nella home page, a sinistra in basso, accedere alla pagina Sviluppatori → Documentation → RestAPIs → API Console Tool (oppure direttamente in https://dev.twitter.com/rest/tools/console), fino a trovarsi in “Exploring the Twitter API”







Ci troviamo infine nella pagina seguente



3. A questo punto inizia il lavoro vero e proprio.
Seguire i passi successivi fino a ritornare alla pagina “Exploring the Twitter API” dove nel campo Authentication, al posto della voce “No Auth” iniziale, troveremo il nome del proprio profilo twitter. Per prima cosa procediamo con l’autenticazione, seguendo le figure sotto.









4. Una volta autenticati automaticamente ritorniamo alla pagina di partenza.
Scegliamo il servizio che interessa. In questo caso si vuole ottenere la timeline dei tweet ricevuti. Premere Send per avere la risposta.




5. "Send" restituisce le chiavi dei parametri (request, riquadro a sinistra) e un “oggetto” response contenente tutte le altre informazioni (riquadro a destra). Le chiavi (key) da inserire sono dunque quelle nella finestra request.
Response contiene tutte le altre informazioni, cioè i dati che vogliamo estrapolare, come “creato il”, “testo”, “entitis”, “ expanded_url“, come quelli che sono selezionati nelle successive figure 12.1, 13.1 e 13.2



6. Accedere all’editor avanzato di Power Query
Aprire un foglio Excel → barra degli strumenti “Power Query” (se avete installato “Power Query”) → Recupera dati esterni → Da altre origini → Query vuota → Editor di Query → Visualizza → Editor avanzato. Si apre a questo punto la pagina dell’editor avanzato (in questo caso c’è scritto Query5 ma voi troverete Query1).







7. Cancellate lo script presente (in italiano) e copiate lo script (in inglese) che trovate nel blog.
Nota: “power query” funziona sia con lo script in italiano o in inglese. controllare che tutte le virgolette siano riportate correttamente e corrispondano alla tastiera italiana. Le password scadono dopo un certo tempo molto piccolo ed è quindi necessario provvedere al loro aggiornamento.

let
Source = Web.Contents(“https://api.twitter.com/1.1/search/tweets.json?q=PowerPivot&count=100″, [Headers=[#”Authorization”=”OAuth oauth_consumer_key=””YOURKEY””, oauth_nonce=””YOURCODE””, oauth_signature=””YOURSIGNATURE””, oauth_signature_method=””HMAC-SHA1″”, oauth_timestamp=””TIMESTAMP””, oauth_token=””YOURTOKEN””, oauth_version=””1.0””]]
)
in
Source


8. Sostituite“https://api.twitter.com/1.1/search/tweets.json?q=PowerPivot&count=100”con “https://api.twitter.com/1.1/statuses/mentions_timeline.json”


9. Sostituite le chiavi “YOURKEY”,”YOURCODE”, ecc. con i corrispondenti valori alla pagina “Exploring the Twitter API”, avendo cura di inserire tutte le virgolette (e di verificare che siano le stesse della tastiera italiana)


10. Attenzione adesso: (nella pagina dell’editor avanzato) il codice compreso tra “Source=” e “in” deve stare tutto su una riga, come nella figura sotto (e non come al punto 7). Non chiedetemi il perché, ma altrimenti il codice non funziona.




11. Dopo aver scritto il codice premere su “Operazione completata” (in basso a dx della pagina dell’editor avanzato, cliccate sulla figura “api.twitter.com 1551 bytes” e ottenete una lista di record come nella figura qui sotto. Convertite la lista dei record in tabella premendo il bottone “In tabella”. Premere OK.





12. Adesso si tratta di interrogare i dati della tabella. Clicchiamo il bottone a dx accanto a Column1 e selezioniamo, ad esempio, 3 voci: “create at“, “text” ed “entitis” (in figura non si vede).





13. Interrogare in sequenza la colonna “Column1.entitis” selezionando la voce “media” e la colonna “Column1.entitis.media” selezionando la voce “expanded_url”






14. Si torna alla tabella di partenza con il pulsante “Carica e chiudi” (nella pagina Home)




Quindi abbiamo visto come acquisire la ns. timeline di Twitter, ma procedure simili possono essere utilizzate per gli altri Social purchè questi siano dotati di API.

Buon Lavoro
Daniele Paolinelli
















martedì 19 maggio 2015

"Stampa di unione" con google form e google script per ottenere preventivi automatizzati


La "stampa di unione" è il processo che ci permette di compilare in automatico spazi vuoti di un "foglio doc modello" (o template), utilizzando dati di un "foglio di calcolo" (questo è solo il caso più tipico). Gli spazi vuoti si chiamano "campi variabili". Il template può essere già esistente oppure può esserne creato uno personalizzato. Il modello è formato da "campi fissi" precompilati ("sempre gli stessi") e "campi variabili" ("sempre diversi") inizialmente vuoti, che saranno poi compilati automaticamente.
Un esempio di "stampa di unione" con output di stampa in formato pdf è del tipo:



Nell'esempio sono stati evidenziati alcuni "campi fissi" con rettangolo celeste (nella parentesi quadra dovrebbe essere formattato il simbolo €, che invece risulta assente)  e alcuni "campi variabili" con ovali verdi, vuoti nel template iniziale, che troviamo, nel pdf finale, compilati in automatico con i dati del foglio di calcolo.
Altri "campi fissi" sono "Data del sopralluogo", "Comune", "via". I "campi variabili" relativi sono la data, il nome del comune e il nome della via.

In molti hanno già scritto circa la "stampa di unione" e i suoi diversi utilizzi.

Nel ns. caso vediamo come utilizzare la "stampa di unione" per redigere preventivi di spesa con acquisizione dei dati direttamente sul territorio, mediante la compilazione di un form di Google on-site. 
Procedere in questo modo:

1. Creare un form di google con i campi da compilare.
(nota: lo spreadsheet supporta al max 23 colonne, quindi non compilare più di 22 campi).
La prima pagina del modulo on-line del form è del tipo:



2. Modifica la destinazione delle risposte del modulo in un foglio di calcolo chiamato ad es., nel ns. caso, "Database preventivi M.C.A. suolo pubblico": da barra degli strumenti del modulo → "risposte" → "cambia destinazione della riposta" → "nuovo foglio di calcolo" → rinomina "Database preventivi M.C.A. suolo pubblico ".


Foglio di calcolo con la destinazione delle risposte del modulo

 
3. Accedi al foglio "Database preventivi M.C.A. suolo pubblico" (il foglio di calcolo contiene campi colonna generati con il form). Aggiungere nuove colonne (sono "campi calcolati") al foglio di calcolo che conterranno "valori calcolati" (cioè risultati di operazioni algebriche) dei dati immessi con il form: il totale del preventivo di spesa sarà dato dalla somma dei valori dei campi calcolati.
Ad esempio:
"costo rimozione" è il "campo calcolato" che contiene il prodotto "quantità di materiale da smaltire" (dato immesso con il form) x 3,28 [€/kg] (prezzo unitario del mat. da smaltire).


Lo stesso Foglio di calcolo con la destinazione delle risposte del modulo e le nuove colonne di “campi calcolati” aggiunte.

 
4. Dal foglio di calcolo "Spreadsheet preventivi" accedere all'editor di script (barra delle funzioni → strumenti → editor di script). 
Da notare quindi che lo script va scritto nell'editor del foglio di calcolo (e non nell'editor del form).

5. Creare un foglio doc con il "modello (template) di preventivo". Il "modello di preventivo" è un file doc che contiene campi fissi e campi variabili. Questi ultimi devono essere scritti con il testo della colonna racchiuso tra %%.
Ad esempio:
Costo intervento di rimozione e smaltimento del materiale (campo fisso):  %quantità di materiale da smaltire% [Kg] x 3.28 [€/kg] (campo fisso)  =  %costo rimozione%  [€]


 
6. Tornare allo spreadsheet e accedere all'editor di script. Adesso si tratta di scrivere in sostanza due funzioni.
Una funzione che ha lo scopo di scrivere nel foglio di calcolo "valori calcolati" nelle celle dei "campi calcolati" [settaggio dei valori].
La seconda funzione crea, quando un form viene inviato, una copia del "modello di preventivo" inserendo i valori nei campi variabili compresi tra "%". La funzione crea anche una versione pdf della copia del "modello del preventivo" doc (infine una volta creato il pdf, la funzione elimina la copia doc del "modello del preventivo"). La funzione è stata scritta da Andrew Roberts: https://gist.github.com/andrewroberts/21bc8b1b3fc7d3b40e6b.

Una copia dello script da utilizzare si trova a questo link:
https://docs.google.com/spreadsheets/d/16AdHQ-lUexcofM_HylTR41ebZtKrD9r6sNbtgHXJyWs/export?format=doc

 
7. Aggiungere i triggers (grilletti) al progetto. Il trigger attiva la funzione quando si verifica un determinato evento come, nel nostro caso, l'invio del form. Dalla barra di funzione dell'editor di script accedere a risorse  trigger del progetto corrente aggiungi trigger.

8. Richiede l'autorizzazione alla pubblicazione dello script.

9. Salvare e chiudere.

A questo punto è possibile inviare il form e ottenere in automatico il preventivo pdf costruito sulla base dei dati immessi nel form.

Buon Lavoro
Daniele Paolinelli





mercoledì 25 febbraio 2015

“Codici a barre” con Excel per la gestione di un piccolo magazzino

Per generare “codici a barre” personalizzati con Excel, pronti per essere stampati e applicati sui prodotti consultare il blog pmi http://www.pmi.it/tecnologia/software-e-web/tutorial/7013/codici-a-barre-con-excel.html
Per generare codici a barre con Excel è necessaria una routine vba che trasforma il codice del prodotto in un codice a barre non formattato e istallare in windows il font Code EAN13 che formatta il codice nelle usuali “barre a spessore”. Tutto questo può essere scaricato gratuitamente dal sito http://grandzebu.net.
 Il procedimento da seguire per ottenere un semplice foglio di calcolo per la gestione di un piccolo magazzino è il seguente:
1.       Collegarsi al sito http://grandzebu.net e scaricare il font Code EAN13 e il foglio di calcolo con la routine vba per generare il codice a barre alfanumerico (“non formattato”). Come fare ciò è ben spiegato nel blog pmi …………………. Il font Code EAN 13 formatta il codice alfanumerico e restituisce il codice con “barre a spessore”.
2.       Completiamo il foglio di calcolo aggiungendo altre colonne contenenti il soggetto che prende in carico il prodotto, la data di presa in carico del prodotto, la quantità, la data di presa in carico, ecc. Nominare il foglio come “Carico”.
La funzione ean13 è la routine vba che genera il codice alfanumerico. La routine è un modulo all’interno del campo Codice. La finestra del campo Codice si raggiunge dalla Barra delle Applicazioni→ Sviluppo →  Codice → Visual Basic


Le celle della colonna “D” sono semplicemente formattate con il font Code EAN13 e restituiscono il codice a barre corrispondente al codice alfanumerico della colonna “C”.
Disponiamo adesso dei codici a barre che possiamo stampare e applicare ai prodotti del nostro piccolo magazzino.

3.     Passare a un secondo foglio della stessa cartella e nominarlo “Scarico”. Nominare la prima colonna come “Codice Alfanumerico”, la seconda “Codice a barre”, la terza “Prodotto”, la quarta la “Restituito da” e così via. La colonna “A” contiene il codice alfanumerico restituito dal lettore (scanner) di barcode, le colonne “D” e “E” sono da compilare manualmente, mentre le altre colonne contengono formule tipo quella riportata nella barra della funzione della fig. sotto e per inserire in automatico i dati di “Carico”. Infine la colonna “H” conteggia il tempo di detenzione del prodotto: con la formattazione condizionale della cella possiamo verificare visivamente quanto tempo (in questo caso se è maggiore di 30 gg la cella diventa rossa). Dopo la lettura con lo scanner del codice a barre del prodotto restituito (riportato in colonna “A”), il foglio di “Scarico” si presenta come sotto.
4.       Acquistare uno scanner di codici a barre e collegarlo alla porta usb del vs. computer. Uno scanner di codice a barre è un dispositivo che “decodifica” il codice a barre restituendo il codice alfanumerico. Procedere come al punto 5.
Una alternativa economica e dinamica all’acquisto di uno scanner a pistola è utilizzare come scanner uno smartphone con una “app” specifica per la lettura dei codici a barre. Io utilizzo uno smartphone lumia 635 e l’applicazione “Barcode Search”. Scaricare l’app dal sito di Windows phone sullo smartphone. L’app legge in automatico il codice barcode del prodotto. Attivare la pagina “list” e cliccare su “Excel” in alto a sinistra. L’app restituisce direttamente in excel (di office 365, cioè la versione web di excel). A questo punto non rimane altro che scaricare il file excelweb sul proprio excel v. desktop (in questo caso non è necessario procedere al punto 5).

5.      Attivare il foglio “Scarico” e attivare la prima cella libera della colonna “Codice Alfanumerico” (nel ns. esempio attivare la cella A3). Passare lo scanner sul codice a barre applicato sul prodotto in restituzione. Il lettore restituisce il codice alfanumerico nella cella attiva del foglio e attiva la cella successiva. Si ottiene un risultato analogo alla riga 2 della figura precedente.
6.       A questo punto non rimane altro che compilare le colonne “D” e “E”.
 
Adesso abbiamo il controllo del materiale in entrata e uscita dal magazzino.
Buon Lavoro
Daniele Paolinelli

“Reverse geocode”: Come geolocalizzare e inserire punti in mappa con excel e smartphone

Spesso risulta utile rilevare la posizione di “punti” specifici sul territorio per poterli poi inserire in mappa. Altrettando importante è l’aggiornamento della mappa in seguito a una variazione della posizione dei punti. La posizione di un punto è individuata quando si conoscono le coordinate del punto (x,y,z oppure lat, lon, ∆h). La posizione di un punto nel piano è il punto di intersezione di tre circonferenze aventi centri in punti noti (punti di riferimento). (Nella pratica si misurano angoli e distanze dei triangoli e si parla quindi di triangolazioni). Generalmente, maggiore è il numero di triangolazioni è più precisa è la posizione del punto (accuratezza). Le “moderne” triangolazioni sono fatte misurando le distanze a terra con il segnale radio emesso alla velocità della luce c (nota) dai satelliti in orbita intorno alla Terra. In questo caso la posizione del punto è uno dei (due) punti di intersezione di tre sfere che hanno centro in satelliti di posizione nota. La misura del raggio della sfera è D = c x T, dove c~3*10^8 m/s è la velocità della luce nota e T è il tempo che impiega il segnale per andare dal satellite al ricevitore. Nel calcolo del tempo c’è l’errore predominante della misura della distanza. Ciò è dovuto alla precisione degli orologi dei dispositivi (orologio atomico molto preciso e costoso sul satellite e orologi al quarzo meno precisi e costosi sui dispositivi a terra). L’errore nel calcolo del tempo modifica il raggio della sfera e quindi la misura della distanza: le tre sfere non si incontrano più in un punto (cioè due punti) ma delimitano una superficie di “incertezza”. La correzione “dell’incertezza” viene fatta assegnando nuovi diametri per le sfere (con l’aiuto di un quarto satellite). L’accuratezza delle misura dipende poi dal numero di satelliti disponibili per il rilievo del punto, oltre che dai calcoli di correzione della misura. Infine, precisioni maggiori (fino alcuni metri) si raggiungono con il GPS differenziale (DGPS): ci si “appoggia” ad una stazione di riferimento GPS a terra, di altissima qualità e di coordinate note.
In conclusione: il segnale emesso dai satelliti viene catturato da potenti antenne di dispositivi mobili a terra di tipo professionale. Essi sono dotati di estrema precisione e sono utilizzati per il rilievo di strade, dighe, rilievo del territorio, e in genere per tutte le mappature che richiedono un elevato livello di accuratezza della misura. In alternativa, quando non è richiesta una estrema precisione nella posizione del punto, come ad esempio quando è necessario conoscere la posizione dei cassonetti stradali o dei cestini di raccolta dei rifiuti, possiamo utilizzare come dispositivo mobile il nostro smartphone. La sua antenna è in grado di captare il segnale dei satelliti. Una specifica “app”, che contiene il software per il calcolo delle coordinate, è in grado di restituire le coordinate di lat, lon e altitudine del punto rilevato.
Per la posizione del punto procedere ne seguente modo:
1.     Dotarsi di uno smartphone con almeno 8 gb di memoria. Io utilizzo un Nokia Lumia 635.
2.      Acquistare una app. Io ho acquistato l’app Geolocalizer di Daniele De Gan



Le varie “app” hanno una precisione diversa. In genere la precisione orizzontale è di 10 mt.

3.     Posizionarsi sul punto e attivare la “app”. Essa restituisce in automatico le coordinate del punto.

4.     Riportare le coordinate sul foglio excel, nel ns. caso nelle celle D27 ed E27. Le coordinate si scrivono con il punto al posto della virgola. Le coordinate corrette sono scritte nella cella C29.
5.     Inserire la mappa in excel. Si procede come nel blog “Ottenere una mappa con un itinerario con Bing Maps”. In definitiva si deve ottenere un url come quello di B37 (scritto per esteso in B40).

6.    Cliccando sul bottone si ottiene la mappa statica con il marcatore (marker) che individua il punto di coordinate inserite.
Buon Lavoro
Daniele Paolinelli

giovedì 19 febbraio 2015

Come utilizzare i form di google per notificare informazioni via mail a più indirizzi


I form di google sono moduli on line che vengono utilizzati per sondaggi e per acquisizione di informazioni in genere. I moduli si costruiscono in maniera intuitiva, partendo da https://docs.google.com/forms/. I moduli vengono poi compilati direttamente on-line (possono essere pubblicati su un sito web o accessibili conoscendo il link di collegamento) oppure inviati via email. Una volta che il modulo compilato viene inviato, le informazioni contenute vengono direttamente acquisite (registrate) da un foglio elettronico di google, associato al modulo stesso. Esso può poi essere esportato sul desktop in diversi formati. Google dispone si un’ampia documentazione e in molti hanno già scritto intorno ai form e alla loro personalizzazione lavorando con javascript. Quindi mi limiterò ad un esempio utile nel lavoro, cioè di come utilizzare i form per notificare informazioni via mail a più indirizzi. L’esempio non è altro che una modifica di una funzione di Amit Agarwal chiamata “Sendmail”, riportata nel tutorial http://www.labnol.org/?p=20884 */  ,che invia una notifica a un solo indirizzo.

Spesso nel lavoro risulta utile utilizzare i form per registrare velocemente informazioni ricevute, modificarle e comunicare le risposte via mail ai diretti interessati. Si pensi al caso di un cittadino che richiede lo smaltimento di un rifiuto ad un tecnico in servizio di controllo sul territorio. La richiesta viene registrata direttamente “in situ”, compilando il modulo on-line sul tablet, e trasmessa via mail al centralino dell’azienda e all’utente stesso. Oppure al caso di due dipendenti che richiedono telefonicamente un’inversione del turno di servizio assegnato. La richiesta di “cambio turno” viene registrata direttamente on-line dal tecnico, e comunicata agli interessati per l’accettazione via email. Quando richieste di questo tipo sono numerose, come avviene nelle aziende medio-grandi, si rende necessario “automatizzare” il processo che invia notifiche a più indirizzi.
Si procede in questo modo:

1.      Accedere a Google Drive e creare un nuovo foglio elettronico. Si noti che la colonna più a sin., “informazioni cronologiche” è generata “in più” dal foglio elettronico ed è la colonna 0 (zero). Le intestazioni delle colonne sono generate direttamente dal database una volta compilato il primo modulo.

Un foglio già compilato è simile a quello sotto riportato.


2.      Strumenti → Crea Modulo → Costruire il modulo con l’aggiunta di elementi. In particolare aggiungere i campi “indirizzo mail del mittente” e “indirizzo mail destinatario” in quanto vogliamo inviare le notifiche ai dipendenti.

Nella visualizzazione mail il modulo è simile a quello sotto riportato, dove compaiono due caselle di controllo (elenco a discesa), chiamate “indirizzi mail mittente” e “indirizzi mail destinatario”, che contengono gli indirizzi email dei dipendenti.




3.     Modificare lo script del modulo. Strumenti → Editor di script. Cancellare lo script esistente e copiare lo script del tutorial http://www.labnol.org/?p=20884 */
4.      Modificare lo script del tutorial allo scopo di notificare le mail ad entrambi i dipendenti.
       Lo script risulta modificato nella righe

MailApp.sendEmail(email1, subject, message)
MailApp.sendEmail(email2, subject, message)
Dove

var email1 = e.values [8];
var email2 = e.values [9];
sono due variabili che assumono il valore contenuto nella cella della Colonna 8 e 9 che nel ns. caso è l’indirizzo mail

/* Send Google Form by Email v2.1 */
/* For customization, contact the developer at amit@labnol.org */
/* Tutorial: http://www.labnol.org/?p=20884 */
                function Initialize() {
var triggers = ScriptApp.getProjectTriggers();
for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
}
  ScriptApp.newTrigger("SendGoogleForm")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onFormSubmit()
  .create();
}
function SendGoogleForm(e)
{ 
  try
 {     

 // You may replace this with another email address
    var email1 = e.values [8];
    var email2 = e.values [9];

// Optional but change the following variable
               // to have a custom subject for Google Form email notifications

   var subject = "Google Docs Form Submitted"; 
   var s = SpreadsheetApp.getActiveSheet();

   var columns = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];   

   var message = "";   

   // Only include form fields that are not blank

    for ( var keys in columns ) {

    var key = columns[keys];

    if ( e.namedValues[key] && (e.namedValues[key] != "") ) {

    message += key + ' :: '+ e.namedValues[key] + "\n\n";

      }

    }

    // This is the MailApp service of Google Apps Script
    // that sends the email. You can also use GmailApp for HTML Mail.

    MailApp.sendEmail(email1, subject, message)
    MailApp.sendEmail(email2, subject, message)

  } catch (e) {

    Logger.log(e.toString());

  }

}

Compilare il form e inviarlo via mail. Il database registra le informazioni contenute nel modulo. Inoltre i richiedenti ricevono una notifica del tipo:


In conclusione, lavorando con i moduli e la loro automazione, siamo in grado di misurare, gestire e controllare i servizi richiesti e effettuati.

Buon Lavoro
Daniele Paolinelli

martedì 6 gennaio 2015

Scrivere uno "Schema di Contratto" con l’aiuto di Excel e “Excel Power Query”


Nella realizzazione di Opere Pubbliche e nell’edilizia in genere, lo “Schema di Contratto” disciplina i rapporti tra Committente e Esecutore riguardo ai lavori da realizzare. Lo Schema di Contratto regola anche i rapporti tra Committente e Esecutore riguardo alle clausole di esecuzione dei lavori e agli obblighi dell’esecutore, se questi non sono regolati dal Capitolato Generale. Quest’ultimo, se redatto, deve essere allegato allo “Schema di Contratto”, del quale costituisce parte integrante.
Supponiamo che un Contract Manager venga incaricato di redigere uno “Schema di Contratto” per un’opera edile.
Necessario che il C.M. conosca i riferimenti normativi quali il Codice Civile; il Dlgs. 163/2006, “Codice dei contratti pubblici relativi a lavori, servizi e forniture”; il Decreto del Presidente della Repubblica 5 ottobre 2010, n. 207, “Regolamento di esecuzione ed attuazione del decreto legislativo 12 aprile 2006, n. 163”; e il “Capitolato Generale” decreto ministeriale 19 aprile 2000, n. 145.
Il Codice e il Regolamento disciplinano (il primo) e regolamentano (il secondo) tutta la procedura, dalla programmazione di un’opera al collaudo finale. La parte (più) relativa alla esecuzione del Contratto è la Parte II, titolo I, capo V e titolo III capo I del Codice e la Parte II, titolo VII e titolo VIII, IX, X, del D.P.R. 207/2010. L’art. 43 del D.P.R. 207/2010 definisce i contenuti dello “Schema di Contratto”:
Lo schema di contratto contiene, per quanto non disciplinato dal presente regolamento e dal capitolato generale, se menzionato nel bando o nell’invito, le clausole dirette a regolare il rapporto tra stazione appaltante ed esecutore, in relazione alle caratteristiche dell'intervento con particolare riferimento a:
a) termini di esecuzione e penali;
b) programma di esecuzione dei lavori;
c) sospensioni o riprese dei lavori;
d) oneri a carico dell’esecutore;
e) contabilizzazione dei lavori a misura e a corpo;
f) liquidazione dei corrispettivi;
g) controlli;
h) specifiche modalità e termini di collaudo;
i) modalità di soluzione delle controversie.
Lo “Schema di Contratto” deve dunque contenere i punti elencati nel sopracitato art.43 nonchè tutti gli obblighi dell’esecutore riguardo ai lavori da eseguire. Il Contract Manager deve “estrapolare” tutto questo dalla Normativa e “riassumere” tutto in un documento completo di una ventina di pagine circa.
Per prima cosa consiglio di leggere il file allegato perché possiamo chiarire alcuni aspetti che devono essere presenti nei contratti.
Per redigere un documento del genere è necessario conoscere la Normativa e avere esperienza.

Per “estrapolare” i dati seguire la seguente procedura:
1.       Importare in Excel il testo della legge, in modo che ogni cella di Excel contenga un singolo articolo del Codice degli Appalti.
Per fare questo operare nel modo seguente:
1.1   Istallare l’add-in di Excel “Power Query” (per Excel 2010, 2013)
1.2   Cercare su Internet un file xml della legge aggiornata. Io ad esempio ho esportato il file xml da www.normattiva.it
1.3   Salvare il file xml in una cartella del vs. computer
1.4   Nella barra degli strumenti di Excel Power Query → Recupera Dati Esterni →  Da file → Da xml

Il file xml è un file di testo che contiene dati. I dati sono “strutturati” utilizzando apposita sintassi.
Questa struttura permette ai file xml di essere utilizzati per scambiare dati tra le più diverse tipologie di programmi.
Il file xml importato contiene tutta la normativa. Una volta “destrutturato” il dato con “Excel Power Query”, avremo ogni articolo della legge in una diversa cella di excel. Vediamo come arrivare a questo.
 


 
1.5  Interroghiamo la tabella (cioè un insieme strutturato di dati) procedendo come nell'immagine

Otteniamo un’altra serie di tabelle che dobbiamo continuare a interrogare nello stesso modo.
 

1.6  Interroghiamo la tabella “Legge.articolato.capo”: si ottiene il sommario della legge e delle altre tabelle sotto “Legge.articolato.capo.articolo”. Terminando adesso la query otteniamo per risultato il caricamento di 40 celle di excel contenenti il sommario della legge.

Proseguendo invece la query e interrogando la tabella “Legge.articolato.capo.articolo” si ottiene il caricamento di 273 celle di excel con il numero progressivo dei 257 articoli della legge e altre tabelle sotto “Legge.articolato.capo.articolo”.

Continuiamo ad interrogare la query fino ad interrogare le tabelle della colonna “Legge.articolato.capo.articolo.comma.corpo.http://www.w3.org/HTML/1998/html4.p.Element:Text” sotto riportate.
Risultato della query è l’intera legge in celle di Excel.
2.     Verifichiamo se il Contratto che abbiamo redatto è completo. Un Contratto completo deve sicuramente contenere tutti i rapporti tra esecutore e appaltatore. Per cercare nella legge tutti gli articoli con la parola “esecutore” seguire la procedura:
2.1   Rinominare la colonna che contiene il testo della legge. 

2.2 Aggiungere una nuova colonna personalizzata, “FindString” → inserisci nella formula colonna personalizzata: each Text.Contains ([Testodellalegge], "esecutore") → ogni cella della colonna “FindString” contiene VERO o FALSO a seconda che l’art. contenga o meno la parola “esecutore”.



  2.3   Modificare il tipo di dato della colonna “FindString” che deve diventare un tipo logico → selezionare la colonna → selezionare “logico” da tipo di dati tabella nella barra multifunzione

  2.4   Aggiungiamo una nuova colonna personalizzata, con la formula: each if not [FindString]  then "NOTFOUND" else [Testodellalegge]



             2.5   Il risultato finale è del tipo



  
Per finire alcune note:
1. ho omesso, per brevità, il codice completo associato alla query.
2.  la precisione dipende dal file xml importato (dalla sua struttura).
3.  Ho inteso solo mostrare un modo di procedere: per la verifica del Contratto la procedura va applicata in primis con il regolamento e ripetuta per più “parole chiave”.

Da notare infine che adesso disponiamo di tutto il Codice e il Regolamento in Excel formato tabella. Questo sarà molto utile per il ns. C.M.

Buon Lavoro
Daniele