public static Guid Ссылка(this ДетализацияПланирования Значение) { switch (Значение) { case ДетализацияПланирования.Номенклатура: return(Номенклатура); case ДетализацияПланирования.НоменклатурныеГруппы: return(НоменклатурныеГруппы); } return(Guid.Empty); }
public static ДетализацияПланирования Получить(this ДетализацияПланирования Значение, Guid Ссылка) { if (Ссылка == Номенклатура) { return(ДетализацияПланирования.Номенклатура); } else if (Ссылка == НоменклатурныеГруппы) { return(ДетализацияПланирования.НоменклатурныеГруппы); } return(ДетализацияПланирования.ПустаяСсылка); }
} //Использовать курсы сценария public void Записать() { //Установка блокировки элемента на горизантально масштабированный кластер. //Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки. //Выделение сервиса для блокировки элемента и генерации кода //Выполнение операций контроля без обращений к sql-серверу. //Контроль конфликта блокировок. //Контроль загрузки булкинсертом гетерогенной коллекции. //Контроль уникальности кода для справочников. //Контроль уникальности номера для документов, в границах префикса. //Контроль владельца, он не может быть группой. //Контроль владельца он должен быть задан. //Контроль родителя он должен быть группой. //Контроль количества уровней, должен соотвествовать метаданным. //Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника. //Контроль уникальности ссылки //Контроль зацикливания //Опционально контроль битых ссылок. //Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента. using (var Подключение = new SqlConnection(СтрокаСоединения)) { Подключение.Open(); using (var Команда = Подключение.CreateCommand()) { if (_ЭтоНовый) { Команда.CommandText = @" Insert Into _Reference169( _IDRRef /*,_Version*/ ,_Marked ,_IsMetadata ,_ParentIDRRef ,_Folder ,_Code ,_Description ,_Fld2012RRef ,_Fld2013RRef ,_Fld2014 ,_Fld2015 ,_Fld2016RRef ,_Fld2017RRef ,_Fld2018 ,_Fld2019 ,_Fld2020 ,_Fld2021 ,_Fld2022) Values( @Ссылка /*,@Версия*/ ,@ПометкаУдаления ,@Предопределенный ,@Родитель ,@ЭтоГруппа ,@Код ,@Наименование ,@Периодичность ,@ДетализацияПланирования ,@УчетПоСуммам ,@УчетПоКоличеству ,@Валюта ,@СпособПланирования ,@ПродолжительностьЦикла ,@НачалоПлана ,@КонецПлана ,@НормаДоходности ,@ИспользоватьКурсыСценария)" ; } else { Команда.CommandText = @" Update _Reference169 Set /*_IDRRef = @Ссылка*/ /*,_Version = @Версия*/ _Marked = @ПометкаУдаления ,_IsMetadata = @Предопределенный ,_ParentIDRRef = @Родитель ,_Folder = @ЭтоГруппа ,_Code = @Код ,_Description = @Наименование ,_Fld2012RRef = @Периодичность ,_Fld2013RRef = @ДетализацияПланирования ,_Fld2014 = @УчетПоСуммам ,_Fld2015 = @УчетПоКоличеству ,_Fld2016RRef = @Валюта ,_Fld2017RRef = @СпособПланирования ,_Fld2018 = @ПродолжительностьЦикла ,_Fld2019 = @НачалоПлана ,_Fld2020 = @КонецПлана ,_Fld2021 = @НормаДоходности ,_Fld2022 = @ИспользоватьКурсыСценария Where _IDRRef = @Ссылка" ; } Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray()); /*Команда.Parameters.AddWithValue("Версия", Версия);*/ Команда.Parameters.AddWithValue("ПометкаУдаления", ПометкаУдаления); Команда.Parameters.AddWithValue("Предопределенный", Предопределенный); Команда.Parameters.AddWithValue("Родитель", одитель); Команда.Parameters.AddWithValue("ЭтоГруппа", ЭтоГруппа?new byte[] { 0 }:new byte[] { 1 }); Команда.Parameters.AddWithValue("Код", Код); Команда.Parameters.AddWithValue("Наименование", Наименование); Команда.Parameters.AddWithValue("Периодичность", Периодичность.Ключ()); Команда.Parameters.AddWithValue("ДетализацияПланирования", ДетализацияПланирования.Ключ()); Команда.Parameters.AddWithValue("УчетПоСуммам", УчетПоСуммам); Команда.Parameters.AddWithValue("УчетПоКоличеству", УчетПоКоличеству); Команда.Parameters.AddWithValue("Валюта", Валюта.Ссылка); Команда.Parameters.AddWithValue("СпособПланирования", СпособПланирования.Ключ()); Команда.Parameters.AddWithValue("ПродолжительностьЦикла", ПродолжительностьЦикла); Команда.Parameters.AddWithValue("НачалоПлана", НачалоПлана); Команда.Parameters.AddWithValue("КонецПлана", КонецПлана); Команда.Parameters.AddWithValue("НормаДоходности", НормаДоходности); Команда.Parameters.AddWithValue("ИспользоватьКурсыСценария", ИспользоватьКурсыСценария); Команда.ExecuteNonQuery(); } } }
public static byte[] Ключ(this ДетализацияПланирования Значение) { return(Ссылка(Значение).ToByteArray()); }
public static readonly Guid НоменклатурныеГруппы = new Guid("9212efab-22aa-1a7a-42b2-ca6f28fa6cb3"); //Номенклатурные группы public static ДетализацияПланирования Получить(this ДетализацияПланирования Значение, byte[] Ссылка) { return(Получить(Значение, new Guid(Ссылка))); }