public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для Документов.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Document268(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Number
,_Fld4683RRef
,_Fld4684
,_Fld4685RRef
,_Fld4686RRef
,_Fld4687
,_Fld4688
,_Fld4689
,_Fld4690RRef
,_Fld4691RRef
,_Fld4693
,_Fld4694
,_Fld21437RRef
,_Fld26732
,_Fld26733
,_Fld26734RRef
,_Fld26735
,_Fld26736)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Номер
,@Организация
,@ПериодРегистрации
,@СпособВыплаты
,@Ответственный
,@Комментарий
,@ДнейНеВыплаты
,@КраткийСоставДокумента
,@ХарактерВыплаты
,@ПодразделениеОрганизации
,@ДатаНачала
,@ДатаОкончания
,@Банк
,@ПроцентВыплаты
,@ПредварительныйУчетУдержаний
,@Округление
,@СуммаДокумента
,@ДанныеПрошлойВерсии)";
}
else
{
Команда.CommandText = @"
Update _Document268
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_Number = @Номер
,_Fld4683RRef = @Организация
,_Fld4684 = @ПериодРегистрации
,_Fld4685RRef = @СпособВыплаты
,_Fld4686RRef = @Ответственный
,_Fld4687 = @Комментарий
,_Fld4688 = @ДнейНеВыплаты
,_Fld4689 = @КраткийСоставДокумента
,_Fld4690RRef = @ХарактерВыплаты
,_Fld4691RRef = @ПодразделениеОрганизации
,_Fld4693 = @ДатаНачала
,_Fld4694 = @ДатаОкончания
,_Fld21437RRef = @Банк
,_Fld26732 = @ПроцентВыплаты
,_Fld26733 = @ПредварительныйУчетУдержаний
,_Fld26734RRef = @Округление
,_Fld26735 = @СуммаДокумента
,_Fld26736 = @ДанныеПрошлойВерсии
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("ДанныеПрошлойВерсии", ДанныеПрошлойВерсии);
Команда.ExecuteNonQuery();
}
}
}