public void Adding_Existing_Records_Using_Add_Method_Works()
        {
            // create new record instances and use the "Add" method of the record set to add the records

            _ExistingRecordSet.Add(new Record(_ExistingRecordSet.Schema, new object[] { 1, "Mike" }));
            _ExistingRecordSet.Add(new Record(_ExistingRecordSet.Schema, new object[] { 2, "Molly" }));

            Assert.AreEqual(2, _ExistingRecordSet.Count);
            Assert.AreEqual("Mike", _ExistingRecordSet.Where(r => (int)r["Id"] == 1).Select(r => r["Name"]).First());
            Assert.AreEqual("Molly", _ExistingRecordSet.Where(r => (int)r["Id"] == 2).Select(r => r["Name"]).First());
        }
Exemplo n.º 2
0
        public RecordSet Import(Stream stream, EntitySchema entity)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }

            var calculatedFields = new HashSet <EntityMember>(entity.Members.OfType <EntityCalculatedField>());

            var workbook = new XSSFWorkbook(stream);
            var sheet    = workbook.GetSheetAt(0);

            var headers = GetHeaders(sheet, entity);

            var recordSet = new RecordSet();

            for (int i = 1; i < sheet.PhysicalNumberOfRows; i++)
            {
                var record = GetRecord(sheet.GetRow(i), headers, calculatedFields);
                if (record != null)
                {
                    recordSet.Add(record);
                }
            }

            return(recordSet);
        }
Exemplo n.º 3
0
        public static RecordSet generateRecordSet()
        {
            var testRS = new RecordSet(new[] {
                new RecordSet.Column("id", typeof(int)),
                new RecordSet.Column("name", typeof(string)),
                new RecordSet.Column("amount", typeof(decimal)),
                new RecordSet.Column("added_date", typeof(DateTime))
            });

            for (int i = 0; i < 100; i++)
            {
                testRS.Add(new object[] {
                    i, "Name" + i.ToString(), i % 20, new DateTime(2000, 1, 1).AddMonths(i)
                });
            }
            return(testRS);
        }
Exemplo n.º 4
0
        public PrintDataMessage GenSingleTrayLabel(string trayId, string dateFormat, string[] keepers)
        {
            PrintDataMessage    pdm = new PrintDataMessage();
            ValidateMsg <Trays> msg = TraysHelper.TrayCanPrint(trayId);

            if (msg.Valid)
            {
                List <TrayPackView> tpv = TrayPackViewHelper.GetTPVByTrayIdsGropSumPartNr(new List <string>()
                {
                    trayId
                });
                string[]         dateFormats = dateFormat.Split(',');
                List <PrintTask> tasks       = new List <PrintTask>();
                foreach (string keeper in keepers)
                {
                    RecordSet rs   = new RecordSet();
                    PrintTask task = new PrintTask()
                    {
                        DataSet = rs
                    };
                    foreach (TrayPackView t in tpv)
                    {
                        RecordData label = new RecordData();
                        label.Add("TrayId", t.trayId);
                        label.Add("Warehouse", t.warehouse);
                        label.Add("Position", t.position);
                        label.Add("customerPNr", t.customerPartNr);
                        label.Add("PartNr", t.partNr);
                        label.Add("Capa", t.capa.ToString());
                        label.Add("Keeper", keeper);
                        label.Add("CreateTime", t.createTime.ToString(dateFormats[0]));
                        label.Add("StoreCreateTime", t.createTime.ToString(dateFormats[1]));
                        rs.Add(label);
                    }
                    tasks.Add(task);
                }
                pdm.PrintTask      = tasks;
                pdm.ReturnedResult = true;
            }
            else
            {
                pdm.ReturnedResult = false;
                pdm.ReturnedMessage.Add(msg.ToString());
            }
            return(pdm);
        }
        public static void BuildRecordSets(IHermesDevice device)
        {
            //Загружаем один раз официантов и меню
            ComReader.BufferMembers = ComReader.GetMembers();
            ComReader.BufferMenu = ComReader.GetMenuToBuffer();
            //Разбираем меню в массив
            var xml = new MenuXml();
            ComReader.ListMenu = xml.MenuXmlToList(ComReader.BufferMenu);

            // Append a dictionary to the device which hold's all application specific data
            if (device.Tag == null)
                device.Tag = new Dictionary<string, object>(2);
            var nextId = 0;
            //Создаем Dictionary для сохранения RecordSet
            IDictionary<string, RecordSet> recSets = new Dictionary<string, RecordSet>();
            #region Строим RecordSet Официанты
            var list = ComReader.BufferMembers; //BufferMembers.xml список официантов
            // Recordset всегда!!! основывается на recorddefinition построеном с помощью Orderman Screen Designed.
            // (Recorddefinition определяют вид и формат записей)
            // В Sol есть Record-Definition USERS - это официанты
            RecordDefinition def = device.Resources.RecordDefinitions["USERS"];
            //Каждой записи Recordset необходим уникальный ID. Мы просто используем счетчик nextId
            var usersSet = new RecordSet(nextId++, def, RSET_USERS); //usersSet - официанты; public const string RSET_USERS = "Users";
            var name = from p in list.Elements("Элемент")
                       select p;
            foreach (var p in name)
            {
                //Каждый официант - свой Record
                var rec = new Record(def);
                rec.Tag = p; //user - это объект со всеми данными типа имя/пароль. Т.е в Tag прячем всю информацию
                //Заполняем данные для отображения
                rec.Cells[0].Value = device.Resources.Images[0x0009];
                rec.Cells[1].Value = p.Attribute("Наименование").Value;
                usersSet.Add(rec);
            }
            //Добавляем в Dictionary RecordSt официанты
            recSets.Add(usersSet.Name, usersSet); //usersSet.Name - "Users"
            #endregion
            #region Строим RecordSet menu and StringTables
            recSets = BuildOrderRecordSet(recSets, device, ref nextId);
            recSets = BuildMenuStringTablesFolder(recSets, device, ref nextId);
            recSets = BuildMenuStringTablesChildren(recSets, device, ref nextId);
            #endregion
            GetDeviceData(device)[RSET_NAME] = recSets;
        }
        void BuildRecordSets()
        {
            RecordDefinition recDef = this.Device.Resources.RecordDefinitions["static"];

            var sets = new Dictionary<string, RecordSet>();
            this.AppData[AppDataElements.RECORDS] = sets;

            // IMPORTANT --> TAKE CARE THAT EVERY RecordSet has it's unique ID!!!
            var set1 = new RecordSet(0, recDef, RECORDSET1);
            sets.Add(set1.Name, set1);

            // IMPORTANT --> TAKE CARE THAT EVERY RecordSet has it's unique ID!!!
            var set2 = new RecordSet(1, recDef, RECORDSET2);
            sets.Add(set2.Name, set2);

            for (int i = 0; i < 20; i++)
            {
                // add new records to the record sets

                // add to _set1
                var rec = new Record(recDef);
                rec.Cells[0].Value = "item - Set1 - " + (i + 1).ToString();
                rec.Tag = i;
                set1.Add(rec);

                // add to _set2
                rec = new Record(recDef);
                rec.Cells[0].Value = "item - Set2 - " + (i + 1).ToString();
                rec.Tag = i;
                set2.Add(rec);
            }

            // Download the record sets to the device --> than these will be useable to work with lists
            _pBar.Value = 0;
            this.Device.Data.Download(set1);
            _pBar.Value = 50;
            this.Device.Transmit();
            this.Device.Data.Download(set2);
            _pBar.Value = 100;
            this.Device.Transmit();
        }
Exemplo n.º 7
0
 public PrintDataMessage GenSingleTrayLabel(string trayId,string dateFormat,string[] keepers)
 {
     PrintDataMessage pdm = new PrintDataMessage();
     ValidateMsg<Trays> msg = TraysHelper.TrayCanPrint(trayId);
     if (msg.Valid)
     {
         List<TrayPackView> tpv = TrayPackViewHelper.GetTPVByTrayIdsGropSumPartNr(new List<string>() { trayId });
         string[] dateFormats = dateFormat.Split(',');
         List<PrintTask> tasks = new List<PrintTask>();
         foreach (string keeper in keepers)
         {
             RecordSet rs = new RecordSet();
             PrintTask task = new PrintTask() { DataSet = rs };
             foreach (TrayPackView t in tpv)
             {
                 RecordData label = new RecordData();
                 label.Add("TrayId", t.trayId);
                 label.Add("Warehouse", t.warehouse);
                 label.Add("Position", t.position);
                 label.Add("customerPNr", t.customerPartNr);
                 label.Add("PartNr", t.partNr);
                 label.Add("Capa", t.capa.ToString());
                 label.Add("Keeper", keeper);
                 label.Add("CreateTime",t.createTime.ToString(dateFormats[0]));
                 label.Add("StoreCreateTime", t.createTime.ToString(dateFormats[1]));
                 rs.Add(label);
             }
             tasks.Add(task);
         }
         pdm.PrintTask = tasks;
         pdm.ReturnedResult = true;
     }
     else
     {
         pdm.ReturnedResult = false;
         pdm.ReturnedMessage.Add(msg.ToString());
     }
     return pdm;
 }
Exemplo n.º 8
0
        public static RecordSet CreateRecords(RecordSet existingRecordSet, RecordSet requestRecordSet)
        {
            foreach (var requestRecord in requestRecordSet)
            {
                Record newRecord = new Record(existingRecordSet.Schema);

                for (int i = 0; i < existingRecordSet.Schema.Fields.Count; i++)
                {
                    Field field = existingRecordSet.Schema.Fields[i];
                    int   requestFieldPosition = requestRecordSet.Schema.Fields.IndexOf(field);

                    if (requestFieldPosition != -1)
                    {
                        newRecord[i] = requestRecord[requestFieldPosition];
                    }
                }

                existingRecordSet.Add(newRecord);
            }

            return(existingRecordSet);
        }
 //Строим Recordset для верхнего окна _lstOrders ORDERS
 //5 наборов черный/зеленый/красный для детей и папок
 //красный один и тот же
 //Пока используются только черные 2 набора
 private static IDictionary<string, RecordSet> BuildOrderRecordSet(IDictionary<string, RecordSet> recSets,
     IHermesDevice device, ref int nextId)
 {
     var def = device.Resources.RecordDefinitions["ORDERS"];
     foreach (var q in (RecSets.MarkerOrder[])Enum.GetValues(typeof(RecSets.MarkerOrder)))
     {
         var id = 0;
         foreach (var p in ComReader.ListMenu.Children)
         {
             //q + p.Id - строим новые ключи
             var itemsSet = new RecordSet(nextId++, def, q + p.Id);
             var itemRec = new Record(def);
             itemRec.Cells[0].Value = "1";
             itemRec.Cells[1].Value = id++;
             itemRec.Tag = q.ToString() + p.Id;
             itemRec.TemplateName = q.ToString();
             itemsSet.Add(itemRec);
             try
             {
                 recSets.Add(itemsSet.Name, itemsSet);
             }
             catch (Exception)
             {
                 var i = "Это дубль";
             }
         }
     }
     return recSets;
 }
Exemplo n.º 10
0
        public void CrudOperations()
        {
            var rs = new RecordSet(
                new[] {
                new RecordSet.Column("id", typeof(int)),
                new RecordSet.Column("name", typeof(string)),
                new RecordSet.Column("age", typeof(int))
            }
                );

            // columns collection
            Assert.Equal(3, rs.Columns.Count);
            Assert.Equal(1, rs.Columns.GetOrdinal("name"));
            Assert.Equal("age", rs.Columns[2].Name);
            Assert.Equal("name", rs.Columns["name"].Name);

            Assert.Throws <ArgumentException>(() => {
                rs.Add(new object[2]);
            });
            Assert.Throws <ArgumentException>(() => {
                rs.Add(new object[4]);
            });

            Action <int, string, int> addRow = (id, name, age) => {
                var r = rs.Add();
                r["id"]   = id;
                r["name"] = name;
                r["age"]  = age;
            };

            addRow(1, "John", 25);
            addRow(2, "Mary", 28);
            addRow(3, "Ray", 32);

            Assert.Equal(3, rs.Count);
            Assert.Equal(RecordSet.RowState.Added, rs[0].State & RecordSet.RowState.Added);

            rs.AcceptChanges();
            Assert.Equal(3, rs.Count);
            Assert.Equal(RecordSet.RowState.Unchanged, rs[0].State);

            rs[2].Delete();
            Assert.Equal(RecordSet.RowState.Deleted, rs[2].State);
            rs.AcceptChanges();
            Assert.Equal(2, rs.Count);

            // add values array
            rs.Add(new object[] { 4, "Adam", 45 });
            Assert.Equal(3, rs.Count);

            // add dictionary
            rs.Add(new Dictionary <string, object>()
            {
                { "name", "Gomer" }
            });
            Assert.Equal(4, rs.Count);

            // typed accessor
            Assert.Equal("Gomer", rs[3].Field <string>("name"));
            Assert.Equal(null, rs[3].Field <int?>("age"));
            Assert.Equal(45, rs[2].Field <int?>("age"));

            rs[0]["name"] = "Bart";
            Assert.Equal(RecordSet.RowState.Modified, rs[0].State & RecordSet.RowState.Modified);
            rs[0].AcceptChanges();
            Assert.Equal(RecordSet.RowState.Unchanged, rs[0].State);
            Assert.Equal("Bart", rs[0]["name"]);


            Assert.Throws <ArgumentException>(() => {
                var t = rs[0]["test"];
            });
        }
Exemplo n.º 11
0
        public void RecordSetReader()
        {
            var testRS = new RecordSet(new [] {
                new RecordSet.Column("id", typeof(int)),
                new RecordSet.Column("name", typeof(string)),
                new RecordSet.Column("amount", typeof(decimal)),
                new RecordSet.Column("added_date", typeof(DateTime))
            });

            for (int i = 0; i < 100; i++)
            {
                testRS.Add(new object[] {
                    i, "Name" + i.ToString(), i % 20, new DateTime(2000, 1, 1).AddMonths(i)
                });
            }

            var rdr = new RecordSetReader(testRS);

            Assert.True(rdr.HasRows);
            Assert.Throws <InvalidOperationException>(() => { var o = rdr[0]; });

            Assert.True(rdr.Read());
            Assert.Equal(4, rdr.FieldCount);
            Assert.Equal("id", rdr.GetName(0));
            Assert.Equal(2, rdr.GetOrdinal("amount"));
            Assert.Equal("added_date", rdr.GetName(3));
            Assert.Throws <IndexOutOfRangeException>(() => { var o = rdr.GetName(4); });

            Assert.Equal(0, rdr.GetInt32(0));
            Assert.Equal(0, rdr[0]);
            Assert.Equal("Name0", rdr[1]);
            Assert.Equal(0, rdr[2]);
            Assert.Equal(1, rdr.GetDateTime(3).Month);

            int cnt = 1;

            while (rdr.Read())
            {
                Assert.Equal(cnt, rdr[0]);
                cnt++;
            }
            Assert.Throws <InvalidOperationException>(() => { var o = rdr[0]; });

            rdr.Dispose();
            Assert.Throws <InvalidOperationException>(() => { var o = rdr.FieldCount; });
            Assert.Throws <InvalidOperationException>(() => { var o = rdr.GetOrdinal("id"); });

            Assert.Equal(100, cnt);

            // read RS from RecordSetReader
            var testRSCopy = RecordSet.FromReader(new RecordSetReader(testRS));

            Assert.Equal(testRS.Count, testRSCopy.Count);
            Assert.Equal(testRS.Columns.Count, testRSCopy.Columns.Count);

            // read into initialized RecordSet
            var newRS = new RecordSet(
                new[] {
                new RecordSet.Column("id", typeof(int)),
                new RecordSet.Column("name", typeof(string))
            }
                );

            newRS.Load(new RecordSetReader(testRS));
            Assert.Equal(testRS.Count, newRS.Count);
            Assert.Equal("Name99", newRS[99].Field <string>("name"));
        }
        private IDictionary<string, RecordSet> BuildPrinterTablesRecordSet(IDictionary<string, RecordSet> recSets, IHermesDevice device, ref int nextId)
        {
            var def = this.Device.Resources.RecordDefinitions["DropDown"];
            var itemsSet = new RecordSet(nextId++, def, "Printers");

            var printers = ComReader.GetPrinters();
            var pp = printers.Descendants("Принтер");
            foreach (var element in pp)
            {
                var r = new Record(def);
                r.Cells[0].Value = Device.Resources.Images[0x002B];
                r.Cells[1].Value = element.Attribute("ИмяПринтера").Value;
                r.Tag = element.Attribute("Идентификатор").Value;
                itemsSet.Add(r);
            }
            recSets.Add(itemsSet.Name, itemsSet);
            Device.Data.Download(itemsSet);
            return recSets;
        }
        //Строим группы столов в залах
        private IDictionary<string, RecordSet> BuildTablesRecordSet(IDictionary<string, RecordSet> recSets, 
            IHermesDevice device, ref int nextId)
        {
            var def = device.Resources.RecordDefinitions["TABLES"];
            var doc = ComReader.GetTablesRecordSet();
            var element = doc.Descendants("Зал");
            var xElements = element as XElement[] ?? element.ToArray();
            foreach (var p in xElements)
            {
                var userSet = new RecordSet(nextId++, def, p.Attribute("Наименование").Value);

                foreach (var q in p.Descendants("Столы").OrderBy(z => z.Attribute("ИмяСтола").Value))
                {
                    var rec = new Record(def);
                    rec.Cells[0].Value = Device.Resources.Images[0x0001];
                    rec.Cells[1].Value = q.Attribute("ИмяСтола").Value;
                    rec.TemplateName = RecSets.Tables.FREE.ToString();
                    rec.Tag = q.Attribute("Num").Value;
                    userSet.Add(rec);
                }
                recSets.Add(userSet.Name, userSet);
            }
            return recSets;
        }
        //Modifier
        private IDictionary<string, RecordSet> BuildModifiersTablesRecordSet(IDictionary<string, 
            RecordSet> recSets, IHermesDevice device, ref int nextId)
        {
            var def = device.Resources.RecordDefinitions["MODIFIER"];
            foreach (var p in ComReader.ListMenu.Children.Where(p => p.Modifikators.Any()))
            {
                var itemsSet = new RecordSet(nextId++, def, RecSets.Modifier.Modifier.ToString() + p.Id);

                foreach (var q in p.Modifikators.OrderByDescending(z => z.Value.Required))
                {
                    var itemRec = new Record(def);
                    itemRec.Cells[0].Value = Device.Resources.Images[0x0018];
                    itemRec.Cells[1].Value =  q.Value.Name;
                    itemRec.Cells[2].Value = q.Value.Id;
                    itemRec.TemplateName = q.Value.Required == "1" ? "Required" : "NoRequired";
                    itemsSet.Add(itemRec);
                }
                try
                {
                    recSets.Add(itemsSet.Name, itemsSet);
                }
                catch (Exception)
                {
                    var i = "Это дубль";
                }
            }
            return recSets;
        }
 private Dictionary<string, RecordSet> BuildMenuModifiersStringTables(Dictionary<string, RecordSet> stringTables, ref int nextId)
 {
     var id = 0;
     var def = RecordDataDefinition.CreateStringTable();
     var dishName = new RecordSet(nextId++, def, RecSets.StringTables.Menu.ToString());
     stringTables.Add(dishName.Name, dishName);
     foreach (var p in ComReader.ListMenu.Children)
     {
         var textAndId = new Record(def);
         textAndId.Cells[0].Value = id++;
         textAndId.Cells[1].Value = p.Name;
         dishName.Add(textAndId);
     }
     //Модификаторы
     var duplicate = new Dictionary<string, int>();
     //dishName = new RecordSet(nextId++, def, RecSets.StringTables.Modifiers.ToString());
     foreach (var p in ComReader.ListMenu.Children.Where(p => p.Modifikators.Any()))
     {
         foreach (var q in p.Modifikators.OrderByDescending(z => z.Value.Required))
         {
             int user;
             if (duplicate.TryGetValue(q.Value.Name, out user)) continue;
             var textAndId = new Record(def);
             textAndId.Cells[0].Value = id++;
             textAndId.Cells[1].Value = q.Value.Name;
             dishName.Add(textAndId);
             duplicate.Add(q.Value.Name, id);
         }
     }
     return stringTables;
 }
        //Создаем стринг таблицы верхних папок
        private static IDictionary<string, RecordSet> BuildMenuStringTablesFolder(IDictionary<string, RecordSet> recSets,
            IHermesDevice device, ref int nextId)
        {
            var manuName = new string[3] { "ПИЦЦА", "КУХНЯ", "БАР" };
            //def Описывает структуру заданную в редакторе
            var def = device.Resources.RecordDefinitions["ITEMS-2"];
            for (var tab = 0; tab < 3; tab++)
            {
                //Создаем запись: nextId - номер записи, guidId - имя присваемое нами
                var userSet = new RecordSet(nextId++, def, manuName[tab]);
                var menu = GetXElements(manuName[tab]);

                foreach (var p in menu)
                {
                    var rec = new Record(def);
                    var element = p.Element("Наименование");
                    if (element != null) rec.Cells[0].Value = element.Value;
                    element = p.Element("IdItemName");
                    if (element != null) rec.Cells[1].Value = element.Value;
                    rec.Cells[2].Value = "This folder!";
                    rec.TemplateName = "ITEMNAME";
                    userSet.Add(rec);
                }
                //IDictionary<string, RecordSet> - добавляем ее в словарь
                //itemsSet.Name - это наш guidId
                recSets.Add(userSet.Name, userSet);
            }
            return recSets;
        }
Exemplo n.º 17
0
        public static RecordSet SaveRecords(RecordSet existingRecordSet, RecordSet requestRecordSet)
        {
            Field keyField = (from f in existingRecordSet.Schema.Fields
                              where f.IsKey == true
                              select f).FirstOrDefault();

            if (keyField == null)
            {
                throw new Exception("No key field found.");
            }

            int keyFieldPosition = existingRecordSet.Schema.Fields.IndexOf(keyField);

            int requestKeyFieldPosition = requestRecordSet.Schema.Fields.IndexOf(keyField);

            if (requestKeyFieldPosition == -1)
            {
                throw new Exception("Key field in request record set is missing.");
            }

            foreach (var requestRecord in requestRecordSet)
            {
                object keyValue      = requestRecord[requestKeyFieldPosition];
                Record changedRecord = (from e in existingRecordSet
                                        where e[keyFieldPosition].Equals(keyValue)
                                        select e).FirstOrDefault();

                if (changedRecord != null)
                {
                    // it's an existing record -> update it

                    for (int i = 0; i < existingRecordSet.Schema.Fields.Count; i++)
                    {
                        Field field = existingRecordSet.Schema.Fields[i];
                        int   requestFieldPosition = requestRecordSet.Schema.Fields.IndexOf(field);

                        if (requestFieldPosition != -1)
                        {
                            changedRecord[i] = requestRecord[requestFieldPosition];
                        }
                    }
                }
                else
                {
                    // no existing record found -> create a new one

                    Record newRecord = new Record(existingRecordSet.Schema);

                    for (int i = 0; i < existingRecordSet.Schema.Fields.Count; i++)
                    {
                        Field field = existingRecordSet.Schema.Fields[i];
                        int   requestFieldPosition = requestRecordSet.Schema.Fields.IndexOf(field);

                        if (requestFieldPosition != -1)
                        {
                            newRecord[i] = requestRecord[requestFieldPosition];
                        }
                    }

                    existingRecordSet.Add(newRecord);
                }
            }

            return(existingRecordSet);
        }
Exemplo n.º 18
0
        static void Main(string[] args)
        {
            colorHash.Add("R", "Red");
            colorHash.Add("Y", "Yellow");
            colorHash.Add("Br", "Brown");
            colorHash.Add("W", "White");
            colorHash.Add("Gr", "Grey");
            colorHash.Add("Or", "Orange");
            colorHash.Add("B", "Black");
            //string pattern = "^SIDE";
            //Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
            //Regex rr = new Regex("\\w+", RegexOptions.IgnoreCase);
            //Match m = rr.Match("SIDE8");

            //Regex rrr = new Regex("^P", RegexOptions.IgnoreCase);
            //Match mm = rr.Match("PP00");

            //Console.WriteLine(mm.Groups[1].Value);
            //Console.WriteLine(r.Match("SIDE8").Success);
            //List<string> cs = Converts("YBr");
            //Console.WriteLine("--------------------YBr");
            //foreach (string c in cs) {
            //    Console.WriteLine(c);
            //}
            //Console.WriteLine("--------------------Y");
            //cs = Converts("Y");

            //foreach (string c in cs)
            //{
            //    Console.WriteLine(c);
            //}

            //cs = Converts("BY");
            //Console.WriteLine("--------------------BY");
            //foreach (string c in cs)
            //{
            //    Console.WriteLine(c);
            //}

            //cs = Converts("BrY");
            //Console.WriteLine("--------------------BrY");
            //foreach (string c in cs)
            //{
            //    Console.WriteLine(c);
            //}
            //cs = Converts("BrBrBrR");
            //Console.WriteLine("--------------------BrBrBrR");
            //foreach (string c in cs)
            //{
            //    Console.WriteLine(c);
            //}
            //Console.Read();

            string printer = Console.ReadLine();

            // Console.WriteLine(printer);
            // ConfigUtil config = new ConfigUtil("help.sdc");
            //// Console.WriteLine(config.Get("Host"));
            // Console.WriteLine(config.Notes());
            // foreach (string node in config.Notes()) {
            //     Console.WriteLine(node);
            //     Console.WriteLine(config.Get("Host",node));
            // }
            // foreach (string f in Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.sdc").ToList()) {
            //     Console.WriteLine(f);
            // }

            // Console.WriteLine(DateTime.Now.ToString("HHmmsss"));

            //   Console.WriteLine("J_0001,9".Split(',')[0].TrimStart("J_".ToCharArray()));
            try
            {
                RecordSet  rs = new RecordSet();
                RecordData rd = new RecordData();
                rd.Add("A", "AAA");
                rs.Add(rd);
                if (printer.Length == 0)
                {
                    printer = "Zebra ZM400 (203 dpi) - ZPL (副本 7)";
                }
                IReportGen      gen    = new TecITGener();
                ReportGenConfig config = new ReportGenConfig()
                {
                    //Printer = "Microsoft XPS Document Writer",
                    //Printer = "Zebra ZM400 (203 dpi) - ZPL (副本 3)",
                    Printer        = printer,
                    NumberOfCopies = 1,
                    PrinterType    = (PrinterType)0,
                    Template       = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Template\\t2.tff")
                };

                gen.Print(rs, config);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.Read();
            }
        }
 //Строим построчно блюда для Bill
 private IDictionary<string, RecordSet> BuildBillRecordSet(IDictionary<string, RecordSet> recSets, IHermesDevice device, ref int nextId)
 {
     var def = device.Resources.RecordDefinitions["BILL"];
     foreach (var q in (RecSets.Bill[])Enum.GetValues(typeof(RecSets.Bill)))
     {
         var id = 0;
         foreach (var p in ComReader.ListMenu.Children)
         {
             //todo "BILL" имена совпадают с ORDERS
             var itemsSet = new RecordSet(nextId++, def, "BILL" + q + p.Id);
             var itemRec = new Record(def);
             itemRec.Cells[0].Value = "1";
             itemRec.Cells[1].Value = id++; //p.Name;
             //itemRec.Tag = p.Id;
             itemRec.TemplateName = q.ToString();
             itemsSet.Add(itemRec);
             try
             {
                 recSets.Add(itemsSet.Name, itemsSet);
             }
             catch (Exception)
             {
                 var i = "Это дубль";
             }
         }
     }
     return recSets;
 }
        //Создаем стринг таблицы детей папок / строим на основе разобранного меню
        private static IDictionary<string, RecordSet> BuildMenuStringTablesChildren(IDictionary<string, RecordSet> recSets, IHermesDevice device, ref int nextId)
        {
            var def = device.Resources.RecordDefinitions["ITEMS-2"];
            foreach (var o in ComReader.ListMenu.Children.Where(z => z.IdFather == "This folder!"))
            {
                var userSet = new RecordSet(nextId++, def, o.Id);
                try
                {
                    //Папки уже создали, они не полезут
                    recSets.Add(userSet.Name, userSet);
                    var items = from q in ComReader.ListMenu.Children
                                where q.IdFather == o.Id
                                select q;

                    foreach (var p in items)
                    {
                        var itemRec = new Record(def);
                        itemRec.Cells[0].Value = p.Name;
                        itemRec.Cells[1].Value = p.Id;
                        itemRec.Cells[2].Value = p.Price;
                        itemRec.Tag = p.Id;
                        if (p.Marker == null) p.Marker = "ITEMNAME";
                        itemRec.TemplateName = p.Modifikators.Any() ? "POPUP" : p.Marker;
                        userSet.Add(itemRec);
                    }
                    //IDictionary<string, RecordSet> - добавляем ее в словарь
                    //itemsSet.Name - это наш guidId
                    recSets.Add(userSet.Name, userSet);
                }
                catch (Exception)
                {
                }
            }
            return recSets;
        }