public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для справочников.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Reference158(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Code
,_Description
,_Fld1924
,_Fld1925RRef
,_Fld1926RRef
,_Fld1927RRef
,_Fld1928RRef
,_Fld1929RRef
,_Fld1930RRef
,_Fld1931RRef
,_Fld1932
,_Fld1933
,_Fld1934
,_Fld1935
,_Fld1936
,_Fld1937
,_Fld1938
,_Fld1939RRef
,_Fld1940
,_Fld1941
,_Fld1942
,_Fld1943
,_Fld26614
,_Fld26615RRef
,_Fld26616
,_Fld26617RRef
,_Fld26618
,_Fld26619RRef)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Предопределенный
,@Код
,@Наименование
,@Комментарий
,@СпособРаспределенияЗатратНаВыпуск
,@ТипФильтраПриРаспределенииЗатратНаВыпуск
,@БазаРаспределенияЗатрат
,@ПоказательБазыРаспределения
,@ТипЦен
,@ОсновноеСырье
,@СпособРаспределенияЗатратПоПодразделениям
,@РаспределятьНаСобственнуюПродукцию
,@РаспределятьНаПродукциюСтороннегоПереработчика
,@РаспределятьНаПродукциюИзДавальческогоСырья
,@РаспределятьНаПодчиненныеПодразделения
,@РаспределятьНаНаработку
,@Процент
,@Коэффициент
,@ПорядокОкругления
,@НастройкиПостроителя
,@ИзменитьНаПроцент
,@ИзменитьНаКоэффициент
,@ОкруглитьДо
,@СхемаКомпоновкиДанных
,@Применимость
,@ИспользоватьПростоеРаспределение
,@НаправлениеРаспределения
,@КогдаПрименять
,@ТипБазыРаспределения)";
}
else
{
Команда.CommandText = @"
Update _Reference158
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_IsMetadata = @Предопределенный
,_Code = @Код
,_Description = @Наименование
,_Fld1924 = @Комментарий
,_Fld1925RRef = @СпособРаспределенияЗатратНаВыпуск
,_Fld1926RRef = @ТипФильтраПриРаспределенииЗатратНаВыпуск
,_Fld1927RRef = @БазаРаспределенияЗатрат
,_Fld1928RRef = @ПоказательБазыРаспределения
,_Fld1929RRef = @ТипЦен
,_Fld1930RRef = @ОсновноеСырье
,_Fld1931RRef = @СпособРаспределенияЗатратПоПодразделениям
,_Fld1932 = @РаспределятьНаСобственнуюПродукцию
,_Fld1933 = @РаспределятьНаПродукциюСтороннегоПереработчика
,_Fld1934 = @РаспределятьНаПродукциюИзДавальческогоСырья
,_Fld1935 = @РаспределятьНаПодчиненныеПодразделения
,_Fld1936 = @РаспределятьНаНаработку
,_Fld1937 = @Процент
,_Fld1938 = @Коэффициент
,_Fld1939RRef = @ПорядокОкругления
,_Fld1940 = @НастройкиПостроителя
,_Fld1941 = @ИзменитьНаПроцент
,_Fld1942 = @ИзменитьНаКоэффициент
,_Fld1943 = @ОкруглитьДо
,_Fld26614 = @СхемаКомпоновкиДанных
,_Fld26615RRef = @Применимость
,_Fld26616 = @ИспользоватьПростоеРаспределение
,_Fld26617RRef = @НаправлениеРаспределения
,_Fld26618 = @КогдаПрименять
,_Fld26619RRef = @ТипБазыРаспределения
Where _IDRRef = @Ссылка";
}
Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray());
/*Команда.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("СпособРаспределенияЗатратПоПодразделениям", СпособРаспределенияЗатратПоПодразделениям.Ссылка);
Команда.Parameters.AddWithValue("РаспределятьНаСобственнуюПродукцию", РаспределятьНаСобственнуюПродукцию);
Команда.Parameters.AddWithValue("РаспределятьНаПродукциюСтороннегоПереработчика", РаспределятьНаПродукциюСтороннегоПереработчика);
Команда.Parameters.AddWithValue("РаспределятьНаПродукциюИзДавальческогоСырья", РаспределятьНаПродукциюИзДавальческогоСырья);
Команда.Parameters.AddWithValue("РаспределятьНаПодчиненныеПодразделения", РаспределятьНаПодчиненныеПодразделения);
Команда.Parameters.AddWithValue("РаспределятьНаНаработку", РаспределятьНаНаработку);
Команда.Parameters.AddWithValue("Процент", Процент);
Команда.Parameters.AddWithValue("Коэффициент", Коэффициент);
Команда.Parameters.AddWithValue("ПорядокОкругления", ПорядокОкругления.Ключ());
Команда.Parameters.AddWithValue("НастройкиПостроителя",new byte[0]);
Команда.Parameters.AddWithValue("ИзменитьНаПроцент", ИзменитьНаПроцент);
Команда.Parameters.AddWithValue("ИзменитьНаКоэффициент", ИзменитьНаКоэффициент);
Команда.Parameters.AddWithValue("ОкруглитьДо", ОкруглитьДо);
Команда.Parameters.AddWithValue("СхемаКомпоновкиДанных",new byte[0]);
Команда.Parameters.AddWithValue("Применимость", Применимость.Ключ());
Команда.Parameters.AddWithValue("ИспользоватьПростоеРаспределение", ИспользоватьПростоеРаспределение);
Команда.Parameters.AddWithValue("НаправлениеРаспределения", НаправлениеРаспределения.Ключ());
Команда.Parameters.AddWithValue("КогдаПрименять", КогдаПрименять);
Команда.Parameters.AddWithValue("ТипБазыРаспределения", ТипБазыРаспределения.Ключ());
Команда.ExecuteNonQuery();
}
}
}