public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для Документов.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Document342(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Number
,_Fld6879RRef
,_Fld6880RRef
,_Fld6881RRef
,_Fld6882
,_Fld6883
,_Fld6884
,_Fld6885RRef
,_Fld6886
,_Fld6887
,_Fld6888
,_Fld6889RRef
,_Fld6890RRef
,_Fld6891
,_Fld6892RRef
,_Fld6893RRef
,_Fld6894RRef
,_Fld6895RRef
,_Fld6896RRef
,_Fld6897RRef
,_Fld6898RRef
,_Fld6899RRef
,_Fld6900
,_Fld21711RRef)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Номер
,@Организация
,@Подразделение
,@Склад
,@ОтражатьВУправленческомУчете
,@ОтражатьВБухгалтерскомУчете
,@ОтражатьВНалоговомУчете
,@ТипЦен
,@СуммаДокумента
,@Основание
,@Комментарий
,@ИнвентаризацияТоваровНаСкладе
,@Ответственный
,@СуммаДокументаРегл
,@КоррСчет
,@Субконто1
,@Субконто2
,@Субконто3
,@КоррСчетНУ
,@СубконтоНУ1
,@СубконтоНУ2
,@СубконтоНУ3
,@УчитыватьНДС
,@ВидОперации)";
}
else
{
Команда.CommandText = @"
Update _Document342
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_Number = @Номер
,_Fld6879RRef = @Организация
,_Fld6880RRef = @Подразделение
,_Fld6881RRef = @Склад
,_Fld6882 = @ОтражатьВУправленческомУчете
,_Fld6883 = @ОтражатьВБухгалтерскомУчете
,_Fld6884 = @ОтражатьВНалоговомУчете
,_Fld6885RRef = @ТипЦен
,_Fld6886 = @СуммаДокумента
,_Fld6887 = @Основание
,_Fld6888 = @Комментарий
,_Fld6889RRef = @ИнвентаризацияТоваровНаСкладе
,_Fld6890RRef = @Ответственный
,_Fld6891 = @СуммаДокументаРегл
,_Fld6892RRef = @КоррСчет
,_Fld6893RRef = @Субконто1
,_Fld6894RRef = @Субконто2
,_Fld6895RRef = @Субконто3
,_Fld6896RRef = @КоррСчетНУ
,_Fld6897RRef = @СубконтоНУ1
,_Fld6898RRef = @СубконтоНУ2
,_Fld6899RRef = @СубконтоНУ3
,_Fld6900 = @УчитыватьНДС
,_Fld21711RRef = @ВидОперации
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("КоррСчет", Guid.Empty);
Команда.Parameters.AddWithValue("Субконто1", Guid.Empty);
Команда.Parameters.AddWithValue("Субконто2", Guid.Empty);
Команда.Parameters.AddWithValue("Субконто3", Guid.Empty);
Команда.Parameters.AddWithValue("КоррСчетНУ", Guid.Empty);
Команда.Parameters.AddWithValue("СубконтоНУ1", Guid.Empty);
Команда.Parameters.AddWithValue("СубконтоНУ2", Guid.Empty);
Команда.Parameters.AddWithValue("СубконтоНУ3", Guid.Empty);
Команда.Parameters.AddWithValue("УчитыватьНДС", УчитыватьНДС);
Команда.Parameters.AddWithValue("ВидОперации", ВидОперации.Ключ());
Команда.ExecuteNonQuery();
}
}
}