I counter

Genropy offre un sistema predefinito di gestione contatori per la tabella, definibile con il metodo counter_nomecolonna, dove nomecolonna è la colonna per la quale vogliamo che Genropy generi automaticamente il progressivo secondo le regole stabilite:

def counter_protocollo(self,record=None):
      #F14/000001
      return dict(format='$K$YY/$NNNNNN', code='F', period='YY',
                  date_field='data', showOnLoad=True, recycle=True)

Il metodo ritorna un dizionario con un formato secondo quanto definito nel parametro format: in questo caso un codice (“F”) seguito dall’anno e da un numero progressivo di 6 cifre. Si noti che è prevista di default la presenza di:

  • un code, serie di caratteri che verranno sostituiti nella K del format

  • un date_field, la colonna della tabella che individua una data

  • un period, la codificazione del date_field per anno, mese, data completa, ecc

È possibile poi utilizzare una serie di altri attributi. Ad esempio, showOnLoad=True permetterà di visualizzare il counter già in fase di inserimento del record e non solo dopo il salvataggio, mentre recycle=True permetterà di rigenerare automaticamente i contatori riempiendo i «buchi» in caso di eliminazione dei record (se non presente, i contatori andranno riallineati manualmente nel’apposita voce di menu di sistema).

Suggerimento

È buona norma assegnare alla colonna che conterrà il contatore il parametro unique=True, garantendosi automaticamente in questo modo l’unicità del valore in caso di duplicazione .

Vediamo un altro esempio con alcuni attributi accessori:

def counter_protocollo(self, record=None):
      pars = dict(format='$K$YY.$NNNNN', period='YY', code=record['categoria'],
                  date_field='data', recycle=False, date_tolerant=True,
                  message_dateError="Impossibile creare riga in data corrente. Ultima riga in data %(last_used)s",
                  message_failed='La riga ha ricevuto un protocollo differente da quello in precedenza allocato: %(sequence)s')
      return pars

Suggerimento

Oltre alla definizione del proprio metodo «counter», è necessario comunicare alla tabella che questa farà uso di un contatore, indicando nei sysFields

self.sysFields(tbl, counter=True)

Autore della sezione: Davide Paci