public static Guid Ссылка(this ВидПриемаРозничнойВыручки Значение)
        {
            switch (Значение)
            {
            case ВидПриемаРозничнойВыручки.ИзКассы: return(ИзКассы);

            case ВидПриемаРозничнойВыручки.ИзНТТ: return(ИзНТТ);
            }
            return(Guid.Empty);
        }
 public static ВидПриемаРозничнойВыручки Получить(this ВидПриемаРозничнойВыручки Значение, Guid Ссылка)
 {
     if (Ссылка == ИзКассы)
     {
         return(ВидПриемаРозничнойВыручки.ИзКассы);
     }
     else if (Ссылка == ИзНТТ)
     {
         return(ВидПриемаРозничнойВыручки.ИзНТТ);
     }
     return(ВидПриемаРозничнойВыручки.ПустаяСсылка);
 }
 public static byte[] Ключ(this ВидПриемаРозничнойВыручки Значение)
 {
     return(Ссылка(Значение).ToByteArray());
 }
 public static readonly Guid ИзНТТ   = new Guid("8d5d3088-81dd-ecc9-4240-0ec6c19352ac"); //из НТТ
 public static ВидПриемаРозничнойВыручки Получить(this ВидПриемаРозничнойВыручки Значение, byte[] Ссылка)
 {
     return(Получить(Значение, new Guid(Ссылка)));
 }
        }                                                                    //Денежный чек
        public void Записать()
        {
            //Установка блокировки элемента на горизантально масштабированный кластер.
            //Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
            //Выделение сервиса для блокировки элемента и генерации кода
            //Выполнение операций контроля без обращений к sql-серверу.
            //Контроль конфликта блокировок.
            //Контроль загрузки булкинсертом гетерогенной коллекции.
            //Контроль уникальности кода для Документов.
            //Контроль уникальности номера для документов, в границах префикса.
            //Контроль владельца, он не может быть группой.
            //Контроль владельца он должен быть задан.
            //Контроль родителя он должен быть группой.
            //Контроль количества уровней, должен соотвествовать метаданным.
            //Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
            //Контроль уникальности ссылки
            //Контроль зацикливания
            //Опционально контроль битых ссылок.
            //Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
            using (var Подключение = new SqlConnection(СтрокаСоединения))
            {
                Подключение.Open();
                using (var Команда = Подключение.CreateCommand())
                {
                    if (_ЭтоНовый)
                    {
                        Команда.CommandText = @"
						Insert Into _Document412(
						_IDRRef
						/*,_Version*/
						,_Marked
						,_IsMetadata
						,_Number
						,_Fld10111RRef
						,_Fld10112RRef
						,_Fld10113RRef
						,_Fld10114RRef
						,_Fld10116RRef
						,_Fld10117RRef
						,_Fld10118RRef
						,_Fld10119
						,_Fld10121
						,_Fld10122
						,_Fld10123
						,_Fld10126RRef
						,_Fld10124
						,_Fld10125
						,_Fld10127
						,_Fld10129
						,_Fld10130
						,_Fld10137
						,_Fld10131RRef
						,_Fld10132RRef
						,_Fld10133RRef
						,_Fld10134RRef
						,_Fld10136RRef
						,_Fld10135RRef
						,_Fld10138RRef
						,_Fld10140
						,_Fld10141
						,_Fld10142
						,_Fld10143
						,_Fld10144
						,_Fld10145
						,_Fld10146
						,_Fld10147
						,_Fld10148
						,_Fld10139
						,_Fld10149
						,_Fld10150RRef
						,_Fld10151RRef)
						Values(
						@Ссылка
						/*,@Версия*/
						,@ПометкаУдаления
						,@Номер
						,@Организация
						,@Касса
						,@Подразделение
						,@ВидОперации
						,@ДоговорКонтрагента
						,@ВалютаВзаиморасчетовПодотчетника
						,@ВалютаДокумента
						,@СуммаДокумента
						,@ПринятоОт
						,@Основание
						,@Приложение
						,@Ответственный
						,@ОтраженоВОперУчете
						,@Оплачено
						,@Комментарий
						,@ОтражатьВУправленческомУчете
						,@ОтражатьВБухгалтерскомУчете
						,@ОтражатьВНалоговомУчете
						,@СчетУчетаРасчетовСКонтрагентом
						,@СубконтоКт1
						,@СубконтоКт2
						,@СубконтоКт3
						,@СчетОрганизации
						,@СтатьяДвиженияДенежныхСредств
						,@СтавкаНДС
						,@Содержание_УСН
						,@Графа4_УСН
						,@Графа5_УСН
						,@Графа6_УСН
						,@Графа7_УСН
						,@ДоходыЕНВД_УСН
						,@РасходыЕНВД_УСН
						,@НДС_УСН
						,@РучнаяНастройка_УСН
						,@ВыручкаСНТТ
						,@НомерЧекаККМ
						,@ВидПриемаРозничнойВыручки
						,@ДенежныйЧек)"                        ;
                    }
                    else
                    {
                        Команда.CommandText = @"
						Update _Document412
						Set
						/*_IDRRef	= @Ссылка*/
						/*,_Version	= @Версия*/
						_Marked	= @ПометкаУдаления
						,_Number	= @Номер
						,_Fld10111RRef	= @Организация
						,_Fld10112RRef	= @Касса
						,_Fld10113RRef	= @Подразделение
						,_Fld10114RRef	= @ВидОперации
						,_Fld10116RRef	= @ДоговорКонтрагента
						,_Fld10117RRef	= @ВалютаВзаиморасчетовПодотчетника
						,_Fld10118RRef	= @ВалютаДокумента
						,_Fld10119	= @СуммаДокумента
						,_Fld10121	= @ПринятоОт
						,_Fld10122	= @Основание
						,_Fld10123	= @Приложение
						,_Fld10126RRef	= @Ответственный
						,_Fld10124	= @ОтраженоВОперУчете
						,_Fld10125	= @Оплачено
						,_Fld10127	= @Комментарий
						,_Fld10129	= @ОтражатьВУправленческомУчете
						,_Fld10130	= @ОтражатьВБухгалтерскомУчете
						,_Fld10137	= @ОтражатьВНалоговомУчете
						,_Fld10131RRef	= @СчетУчетаРасчетовСКонтрагентом
						,_Fld10132RRef	= @СубконтоКт1
						,_Fld10133RRef	= @СубконтоКт2
						,_Fld10134RRef	= @СубконтоКт3
						,_Fld10136RRef	= @СчетОрганизации
						,_Fld10135RRef	= @СтатьяДвиженияДенежныхСредств
						,_Fld10138RRef	= @СтавкаНДС
						,_Fld10140	= @Содержание_УСН
						,_Fld10141	= @Графа4_УСН
						,_Fld10142	= @Графа5_УСН
						,_Fld10143	= @Графа6_УСН
						,_Fld10144	= @Графа7_УСН
						,_Fld10145	= @ДоходыЕНВД_УСН
						,_Fld10146	= @РасходыЕНВД_УСН
						,_Fld10147	= @НДС_УСН
						,_Fld10148	= @РучнаяНастройка_УСН
						,_Fld10139	= @ВыручкаСНТТ
						,_Fld10149	= @НомерЧекаККМ
						,_Fld10150RRef	= @ВидПриемаРозничнойВыручки
						,_Fld10151RRef	= @ДенежныйЧек
						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("СчетУчетаРасчетовСКонтрагентом", Guid.Empty);
                    Команда.Parameters.AddWithValue("СубконтоКт1", Guid.Empty);
                    Команда.Parameters.AddWithValue("СубконтоКт2", Guid.Empty);
                    Команда.Parameters.AddWithValue("СубконтоКт3", Guid.Empty);
                    Команда.Parameters.AddWithValue("СтавкаНДС", СтавкаНДС.Ключ());
                    Команда.Parameters.AddWithValue("Содержание_УСН", Содержание_УСН);
                    Команда.Parameters.AddWithValue("Графа4_УСН", Графа4_УСН);
                    Команда.Parameters.AddWithValue("Графа5_УСН", Графа5_УСН);
                    Команда.Parameters.AddWithValue("Графа6_УСН", Графа6_УСН);
                    Команда.Parameters.AddWithValue("Графа7_УСН", Графа7_УСН);
                    Команда.Parameters.AddWithValue("ДоходыЕНВД_УСН", ДоходыЕНВД_УСН);
                    Команда.Parameters.AddWithValue("РасходыЕНВД_УСН", асходыЕНВД_УСН);
                    Команда.Parameters.AddWithValue("НДС_УСН", НДС_УСН);
                    Команда.Parameters.AddWithValue("РучнаяНастройка_УСН", учнаяНастройка_УСН);
                    Команда.Parameters.AddWithValue("ВыручкаСНТТ", ВыручкаСНТТ);
                    Команда.Parameters.AddWithValue("НомерЧекаККМ", НомерЧекаККМ);
                    Команда.Parameters.AddWithValue("ВидПриемаРозничнойВыручки", ВидПриемаРозничнойВыручки.Ключ());
                    Команда.Parameters.AddWithValue("ДенежныйЧек", ДенежныйЧек.Ссылка);
                    Команда.ExecuteNonQuery();
                }
            }
        }