public static string SalvaScheda(int idScheda, int IdSPMaster, string anagrafica, string codice, string descrizione, string areaProduzione, string task, List <ElementoScheda> controlli, List <ElementoScheda> obbligatori, string account)
        {
            SchedeProcessoDS ds = new SchedeProcessoDS();

            using (SchedeProcessoBusiness bScheda = new SchedeProcessoBusiness())
            {
                bScheda.GetSPScheda(idScheda, ds);
                //  bScheda.FillValoriSchede(ds, idScheda, true);
                codice = string.Empty;

                SchedeProcessoDS.SPSCHEDERow schedaPadre = ds.SPSCHEDE.Where(x => x.IDSPSCHEDA == idScheda).FirstOrDefault();
                int versione = 1;
                if (schedaPadre != null)
                {
                    versione          = schedaPadre.VERSIONE + 1;
                    schedaPadre.STATO = StatoSPScheda.STORICO;
                    codice            = schedaPadre.CODICE;
                }

                SchedeProcessoDS.SPSCHEDERow riga = ds.SPSCHEDE.NewSPSCHEDERow();
                riga.CODICE         = codice.ToUpper();
                riga.DESCRIZIONE    = descrizione.ToUpper();
                riga.IDSPMASTER     = IdSPMaster;
                riga.AREAPRODUZIONE = areaProduzione.ToUpper();
                riga.TASK           = task.ToUpper();
                riga.ANAGRAFICA     = anagrafica.ToUpper();
                riga.VERSIONE       = versione;
                riga.STATO          = StatoSPScheda.ATTIVA;
                riga.CANCELLATO     = false;
                riga.DATAMODIFICA   = DateTime.Now;
                riga.UTENTEMODIFICA = account.ToUpper();
                ds.SPSCHEDE.AddSPSCHEDERow(riga);

                //   int sequenza = 0;
                foreach (ElementoScheda controllo in obbligatori)
                {
                    if (!string.IsNullOrEmpty(controllo.Filename))
                    {
                        controllo.Valore = (controllo.Filename.Length > 30) ? controllo.Filename.Substring(0, 30) : controllo.Filename;
                    }
                    SPValoreScheda.SalvaValoreScheda(controllo.IDValore, controllo.IDElemento, riga.IDSPSCHEDA, controllo.Valore, controllo.Filedata, account, true, ds);
                }
                foreach (ElementoScheda controllo in controlli)
                {
                    if (!string.IsNullOrEmpty(controllo.Filename))
                    {
                        controllo.Valore = (controllo.Filename.Length > 30) ? controllo.Filename.Substring(0, 30) : controllo.Filename;
                    }
                    SPValoreScheda.SalvaValoreScheda(controllo.IDValore, controllo.IDElemento, riga.IDSPSCHEDA, controllo.Valore, controllo.Filedata, account, false, ds);
                }

                bScheda.UpdateTableSPScheda(ds);
                bScheda.UpdateTable(ds.SPVALORISCHEDE.TableName, ds);
                ds.AcceptChanges();
                if (string.IsNullOrEmpty(codice))
                {
                    riga.CODICE = string.Format("SP{0}", riga.IDSPSCHEDA.ToString().PadLeft(8, '0'));
                    bScheda.UpdateTableSPScheda(ds);
                }
                string messaggio = string.Format("Scheda creata correttamente. CODICE: {0}", riga.CODICE);
                return(messaggio);
            }
        }