public void Записать()
{
//Установка блокировки элемента на горизантально масштабированный кластер.
//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
//Выделение сервиса для блокировки элемента и генерации кода
//Выполнение операций контроля без обращений к sql-серверу.
//Контроль конфликта блокировок.
//Контроль загрузки булкинсертом гетерогенной коллекции.
//Контроль уникальности кода для Документов.
//Контроль уникальности номера для документов, в границах префикса.
//Контроль владельца, он не может быть группой.
//Контроль владельца он должен быть задан.
//Контроль родителя он должен быть группой.
//Контроль количества уровней, должен соотвествовать метаданным.
//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
//Контроль уникальности ссылки
//Контроль зацикливания
//Опционально контроль битых ссылок.
//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
using (var Подключение = new SqlConnection(СтрокаСоединения))
{
Подключение.Open();
using (var Команда = Подключение.CreateCommand())
{
if(_ЭтоНовый)
{
Команда.CommandText = @"
Insert Into _Document23175(
_IDRRef
/*,_Version*/
,_Marked
,_IsMetadata
,_Number
,_Fld25523RRef
,_Fld25524
,_Fld25525
,_Fld25526RRef
,_Fld25527
,_Fld25528RRef
,_Fld25529
,_Fld25530RRef
,_Fld25531RRef
,_Fld25532RRef
,_Fld25533RRef
,_Fld25534
,_Fld25535
,_Fld25536
,_Fld25537
,_Fld25538RRef
,_Fld25539
,_Fld25540
,_Fld25541
,_Fld25542
,_Fld25543
,_Fld25544
,_Fld25545
,_Fld25546
,_Fld25547
,_Fld25548
,_Fld25549
,_Fld25550
,_Fld25551RRef
,_Fld25552RRef
,_Fld25553
,_Fld25554
,_Fld25555
,_Fld25556
,_Fld25557)
Values(
@Ссылка
/*,@Версия*/
,@ПометкаУдаления
,@Номер
,@Ответственный
,@Комментарий
,@НалоговыйПериод
,@Организация
,@ОКАТО_КПП
,@СпособФормирования
,@Телефон
,@СправкуПодписал
,@ДолжностьПодписавшегоЛица
,@Сотрудник
,@Ставка
,@Фамилия
,@Имя
,@Отчество
,@АдресРФ
,@ВидДокумента
,@СерияДокумента
,@НомерДокумента
,@ОбщаяСуммаДохода
,@ОблагаемаяСуммаДохода
,@Исчислено
,@Задолженность
,@ИзлишнеУдержано
,@Удержано
,@Перечислено
,@АдресЗарубежом
,@ДатаРождения
,@ИНН
,@Гражданство
,@СтатусНалогоплательщика
,@ДатаУведомления
,@НомерУведомления
,@КодНалоговогоОрганаУведомления
,@СпециальныйДокумент2011года
,@КодИФНС)";
}
else
{
Команда.CommandText = @"
Update _Document23175
Set
/*_IDRRef = @Ссылка*/
/*,_Version = @Версия*/
_Marked = @ПометкаУдаления
,_Number = @Номер
,_Fld25523RRef = @Ответственный
,_Fld25524 = @Комментарий
,_Fld25525 = @НалоговыйПериод
,_Fld25526RRef = @Организация
,_Fld25527 = @ОКАТО_КПП
,_Fld25528RRef = @СпособФормирования
,_Fld25529 = @Телефон
,_Fld25530RRef = @СправкуПодписал
,_Fld25531RRef = @ДолжностьПодписавшегоЛица
,_Fld25532RRef = @Сотрудник
,_Fld25533RRef = @Ставка
,_Fld25534 = @Фамилия
,_Fld25535 = @Имя
,_Fld25536 = @Отчество
,_Fld25537 = @АдресРФ
,_Fld25538RRef = @ВидДокумента
,_Fld25539 = @СерияДокумента
,_Fld25540 = @НомерДокумента
,_Fld25541 = @ОбщаяСуммаДохода
,_Fld25542 = @ОблагаемаяСуммаДохода
,_Fld25543 = @Исчислено
,_Fld25544 = @Задолженность
,_Fld25545 = @ИзлишнеУдержано
,_Fld25546 = @Удержано
,_Fld25547 = @Перечислено
,_Fld25548 = @АдресЗарубежом
,_Fld25549 = @ДатаРождения
,_Fld25550 = @ИНН
,_Fld25551RRef = @Гражданство
,_Fld25552RRef = @СтатусНалогоплательщика
,_Fld25553 = @ДатаУведомления
,_Fld25554 = @НомерУведомления
,_Fld25555 = @КодНалоговогоОрганаУведомления
,_Fld25556 = @СпециальныйДокумент2011года
,_Fld25557 = @КодИФНС
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("Перечислено", Перечислено);
Команда.Parameters.AddWithValue("АдресЗарубежом", АдресЗарубежом);
Команда.Parameters.AddWithValue("ДатаРождения", ДатаРождения);
Команда.Parameters.AddWithValue("ИНН", ИНН);
Команда.Parameters.AddWithValue("СтатусНалогоплательщика", СтатусНалогоплательщика.Ключ());
Команда.Parameters.AddWithValue("ДатаУведомления", ДатаУведомления);
Команда.Parameters.AddWithValue("НомерУведомления", НомерУведомления);
Команда.Parameters.AddWithValue("КодНалоговогоОрганаУведомления", КодНалоговогоОрганаУведомления);
Команда.Parameters.AddWithValue("СпециальныйДокумент2011года", СпециальныйДокумент2011года);
Команда.Parameters.AddWithValue("КодИФНС", КодИФНС);
Команда.ExecuteNonQuery();
}
}
}