public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для Документов.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Document404(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Number
,_Fld9417
,_Fld9418
,_Fld9419RRef
,_Fld9420
,_Fld9421RRef
,_Fld9422RRef
,_Fld9423RRef
,_Fld9424
,_Fld9425RRef
,_Fld9426
,_Fld9427
,_Fld9428
,_Fld9429RRef
,_Fld9430RRef
,_Fld9431
,_Fld9432
,_Fld9433
,_Fld9434RRef
,_Fld9435RRef
,_Fld9437RRef
,_Fld9438
,_Fld9439RRef
,_Fld9440RRef
,_Fld9441
,_Fld9442
,_Fld9443
,_Fld9444
,_Fld9445
,_Fld9446
,_Fld9447RRef)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Номер
,@АвтораспределениеМатериалов
,@АвтораспределениеПрочихЗатрат
,@ВалютаДокумента
,@ВводитьСтатьиЗатратПоСтрокам
,@ВидПоступления
,@ДоговорКонтрагента
,@Заказ
,@Комментарий
,@Контрагент
,@КратностьВзаиморасчетов
,@КурсВзаиморасчетов
,@НДСВключенВСтоимость
,@Организация
,@Ответственный
,@ОтражатьВБухгалтерскомУчете
,@ОтражатьВНалоговомУчете
,@ОтражатьВУправленческомУчете
,@Подразделение
,@ПодразделениеОрганизации
,@СтатьяЗатрат
,@СуммаВключаетНДС
,@СчетУчетаРасчетовПоТаре
,@ТипЦен
,@УчитыватьНДС
,@ИспользоватьЗаказы
,@ИспользоватьМатериалы
,@ИспользоватьПрочиеЗатраты
,@АвтораспределениеВозвратныхОтходов
,@ИспользоватьВозвратныеОтходы
,@СкладОтходов)";
}
else
{
Команда.CommandText = @"
Update _Document404
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_Number = @Номер
,_Fld9417 = @АвтораспределениеМатериалов
,_Fld9418 = @АвтораспределениеПрочихЗатрат
,_Fld9419RRef = @ВалютаДокумента
,_Fld9420 = @ВводитьСтатьиЗатратПоСтрокам
,_Fld9421RRef = @ВидПоступления
,_Fld9422RRef = @ДоговорКонтрагента
,_Fld9423RRef = @Заказ
,_Fld9424 = @Комментарий
,_Fld9425RRef = @Контрагент
,_Fld9426 = @КратностьВзаиморасчетов
,_Fld9427 = @КурсВзаиморасчетов
,_Fld9428 = @НДСВключенВСтоимость
,_Fld9429RRef = @Организация
,_Fld9430RRef = @Ответственный
,_Fld9431 = @ОтражатьВБухгалтерскомУчете
,_Fld9432 = @ОтражатьВНалоговомУчете
,_Fld9433 = @ОтражатьВУправленческомУчете
,_Fld9434RRef = @Подразделение
,_Fld9435RRef = @ПодразделениеОрганизации
,_Fld9437RRef = @СтатьяЗатрат
,_Fld9438 = @СуммаВключаетНДС
,_Fld9439RRef = @СчетУчетаРасчетовПоТаре
,_Fld9440RRef = @ТипЦен
,_Fld9441 = @УчитыватьНДС
,_Fld9442 = @ИспользоватьЗаказы
,_Fld9443 = @ИспользоватьМатериалы
,_Fld9444 = @ИспользоватьПрочиеЗатраты
,_Fld9445 = @АвтораспределениеВозвратныхОтходов
,_Fld9446 = @ИспользоватьВозвратныеОтходы
,_Fld9447RRef = @СкладОтходов
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("СчетУчетаРасчетовПоТаре", Guid.Empty);
Команда.Parameters.AddWithValue("УчитыватьНДС", УчитыватьНДС);
Команда.Parameters.AddWithValue("ИспользоватьЗаказы", ИспользоватьЗаказы);
Команда.Parameters.AddWithValue("ИспользоватьМатериалы", ИспользоватьМатериалы);
Команда.Parameters.AddWithValue("ИспользоватьПрочиеЗатраты", ИспользоватьПрочиеЗатраты);
Команда.Parameters.AddWithValue("АвтораспределениеВозвратныхОтходов", АвтораспределениеВозвратныхОтходов);
Команда.Parameters.AddWithValue("ИспользоватьВозвратныеОтходы", ИспользоватьВозвратныеОтходы);
Команда.ExecuteNonQuery();
}
}
}