UPDATE **main_table** AS servi
INNER JOIN (
    SELECT s.serie, IFNULL(MAX(doc.numero),0) AS numero
    FROM **DB**.f_serie AS s
    INNER JOIN **DB**.f_causali AS cau ON (s.id=cau.idserie AND s.annocontabile=cau.annocontabile)
    LEFT JOIN **DB**.f_documenti AS doc ON (cau.id=doc.idcausale AND cau.annocontabile=doc.annocontabile)
    WHERE s.annocontabile=@annocontabile
    GROUP BY s.serie
    ORDER BY s.serie
) AS serie ON (servi.servi_serie=serie.serie)
SET servi.numero=serie.numero
;
SET @num:=0
;
SET @serie:='.'
;
DROP TEMPORARY TABLE IF EXISTS **renum_table**
;
CREATE TEMPORARY TABLE IF NOT EXISTS **renum_table**
SELECT renum.idkey, renum.numero, renum.reset_serie AS serie
FROM (
    SELECT renum.idkey
    , @num:=IF(renum.serie!=@serie,renum.numero,@num) AS store_num
    , (@num:=@num+1) AS numero
    , @serie:=renum.serie AS reset_serie
    FROM
    (
        SELECT DISTINCT servi.idpersona_fatturazione AS idkey, servi.servi_serie AS serie, servi.numero AS numero
        FROM **main_table** AS servi
        ORDER BY servi.data, idkey, serie
    ) AS renum
) AS renum
;
UPDATE **main_table** AS servi
INNER JOIN **renum_table** AS renum ON (servi.idpersona_fatturazione=renum.idkey AND servi.servi_serie=renum.serie)
SET servi.numero=renum.numero
;


INSERT INTO **DB**.f_documenti
(annocontabile,idcausale,numero,data,idpersona,no_bollo,last_modify,note,tommy_serv_fatt_type)
SELECT @annocontabile
, servi.servi_idcau
, servi.numero
, IF(@data_fattura!='NONE',@data_fattura,servi.data)
, servi.idpersona
, 0 AS no_bollo
, CAST(servi.idpersona_fatturazione AS CHAR)
, servi.servi_serie
, 'S'
FROM (
    SELECT DISTINCT servi.numero, servi.idpersona, servi.idpersona_fatturazione, MAX(servi.data) AS data, servi.servi_serie, servi.servi_idcau
    FROM **main_table** AS servi
    GROUP BY servi.idpersona_fatturazione, servi.servi_serie
) AS servi
;
UPDATE **main_table** AS servi
INNER JOIN **DB**.f_documenti AS doc ON (servi.idpersona_fatturazione=CAST(doc.last_modify AS DECIMAL(10,0)) AND servi.servi_serie=doc.note)
SET servi.iddocumento=doc.id
;


INSERT INTO **DB**.f_documenti_dettagli
(annocontabile,iddocumento,idvocedocumento,prezzo,quantita,um,importo,idiva,note,tommy_serv_fatt_type,sys_save_field)
SELECT @annocontabile
, servi.iddocumento
, servi.servi_idvoce
, CAST( (servi.importo*100/(100+servi.servi_iva_valore)) AS DECIMAL(12,2))
, 1
, servi.servi_um
, CAST( (servi.importo*100/(100+servi.servi_iva_valore)) AS DECIMAL(12,2))
, servi.servi_idiva
, CONCAT('Data: ',InvData(servi.data),' - Num. servizio: ',IFNULL(servi.numero_servizio,''),' - Assistiti: ',IFNULL(servi.assistiti,'')) AS note
, servi.idpersona_fatturazione
, servi.id
FROM **main_table** AS servi