/// <summary>МЕТОД Заполняем данные из протокола </summary> /// <param name="pFlowDocument">Если null, то текущий отчет, иначе в заданный FlowDocument</param> protected void MET_Protokol(FlowDocument pFlowDocument = null) { // Список полей PUB_HashPole = new Hashtable(); // Пробегаемся по вопросам шаблона foreach (UserShablon _Shablon in PROP_Docum.PROP_Shablon) { eVopros _Type = (eVopros)_Shablon.PROP_Type; VirtualPoleOtchet _Pole = MET_CreateUserPole(_Type); // создаем поле, соответствующего типа _Pole.PROP_VarID = _Shablon.PROP_VarId; _Pole.PROP_Maska = MyMet.MET_ParseInt(_Shablon.PROP_Maska); _Pole.PROP_Format = new MyFormat(_Shablon.PROP_xFormat); _Pole.PROP_Shablon = _Shablon; _Pole.PROP_Protokol = PROP_Docum.PROP_Protokol; _Pole.PROP_StrProtokol = PROP_Docum.PROP_Protokol.PROP_Protokol; _Pole.PROP_Name = "Pole_" + _Pole.PROP_VarID; // имя поля PUB_HashPole.Add(_Pole.PROP_Name, _Pole); // записываем элемент в очередь _Pole.MET_Inicial(); // инициализация поля _Pole.PROP_Parent = (VirtualPoleOtchet)PUB_HashPole["Pole_" + _Pole.PROP_Maska]; // родительское поле, если есть // Добавляем форму в отчет if (_Pole.PROP_Parent != null && _Pole.PROP_Parent.PROP_Nested && !_Pole.PROP_Parent.PROP_HideChild) { _Pole.PROP_Parent.MET_AddElement(_Pole); } else { // Если родитель запретил печатать, то и мы запретим детям печататься if (_Pole.PROP_Parent != null && _Pole.PROP_Parent.PROP_HideChild) { _Pole.PROP_HideChild = true; _Pole.PROP_Hide = true; } // Если не печатаем поле, то следующее поле if (_Pole.PROP_Hide) { continue; } TextElement _Element = _Pole.MET_Print(); if (_Element is Block) { if (pFlowDocument != null) { pFlowDocument.Blocks.Add((Block)_Element); } else { Blocks.Add((Block)_Element); } if (_Element is Paragraph) { PRO_Paragraph = (Paragraph)_Element; } else { PRO_Paragraph = new Paragraph(); } } else { PRO_Paragraph.Inlines.Add((Inline)_Element); if (PRO_Paragraph.Parent == null) { if (pFlowDocument != null) { pFlowDocument.Blocks.Add(PRO_Paragraph); } else { Blocks.Add(PRO_Paragraph); } } } } } }
/// <summary>МЕТОД Создаем объект Pole</summary> /// <param name="pTypePole">Номер типа поля eTypePole</param> protected VirtualPoleOtchet MET_CreateUserPole(eVopros pTypePole) { VirtualPoleOtchet _Pole = null; switch (pTypePole) { case eVopros.Number: // 1. Число UserPole_Number _Pole = new UserPoleOtchet_Text(); break; case eVopros.Real: // 2. Десятичное UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.Date: // 3. Дата UserPole_Data _Pole = new UserPoleOtchet_Text(); break; case eVopros.KrString: // 4. Текст (короткий) UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.List: // 5. Список UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.LoText: // 6. Текст (длинный) UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.MultiList: // 7. Код операци Список (многовыборочный) UserPole_MultyList _Pole = new UserPoleOtchet_Text(); break; case eVopros.Text: // 8. Свободный текст (основной) UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.Razdel: // 9. Раздел UserPole_Razdel _Pole = new UserPoleOtchet_Razdel(); break; case eVopros.Hide: // 10. Скрытое поле UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.Time: // 11. Время UserPole_Text _Pole = new UserPoleOtchet_Text(); break; case eVopros.Radio: // 12. Радио кнопки UserPoleRadio_Button _Pole = new UserPoleOtchet_Text(); break; case eVopros.Image: // 13. Изображения UserPole_Image _Pole = new UserPoleOtchet_Image(); break; case eVopros.Grid: // 14. Таблица UserPole_Grid _Pole = new UserPoleOtchet_Grid(); break; case eVopros.Label: // 15. Метка UserPole_Label _Pole = new UserPoleOtchet_Label(); break; case eVopros.Sprav: // 16. Справочники UserPole_Sprav _Pole = new UserPoleOtchet_Text(); break; case eVopros.Calendar: // 16. Календарь UserPole_Calendar _Pole = new UserPoleOtchet_Text(); break; } _Pole.PROP_Type = pTypePole; // проставляем тип поля _Pole.PROP_Prefix = PROP_Prefix; // префикс таблицы return(_Pole); }