You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

369 lines
22 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls;
using BWP.B3Butchery.BO;
using BWP.B3Frameworks;
using BWP.B3Frameworks.BO;
using BWP.B3Frameworks.BO.MoneyTemplate;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3ProduceUnitedInfos;
using BWP.B3Sale.BO;
using BWP.B3Sale.Utils;
using BWP.B3UnitedInfos;
using BWP.B3UnitedInfos.BO;
using BWP.Web.Layout;
using BWP.Web.Utils;
using BWP.Web.WebControls;
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils;
using TSingSoft.WebControls2;
using TSingSoft.WebControls2.QBELinks;
using TSingSoft.WebPluginFramework;
namespace BWP.Web.Pages.B3YunKen.Reports
{
class ProduceFinishDiffReport : DFBrowseGridReportPage<ProduceFinish>
{
protected override string AccessRoleName {
get { return "B3_YunKen.报表分析.完工与入库对比"; }
}
protected override string Caption {
get { return "完工与入库对比"; }
}
readonly B3SaleReportDisplayOptionHelper _displayOptionHelper = new B3SaleReportDisplayOptionHelper();
readonly bool _useBrandItem = GlobalFlags.get(B3UnitedInfosConsts.GlobalFlags.);
protected override string QueryOptionsTabName {
get {
return "显示选项";
}
}
private ChoiceBox _goods, _brandItem, _productLine, _goodsProperty, _goodsPropertyCatalog, _productionUnit;
private CheckBoxListWithReverseSelect _checkbox;
[DFClass]
private class InStoreData
{
public DateTime? Date { get; set; }
public long Goods_ID { get; set; }
public long? BrandItem_ID { get; set; }
public Money<decimal>? SumNumber { get; set; }
public Money<decimal>? SumSecondNumber { get; set; }
public long? GoodsBatch_ID { get; set; }
}
private DQueryDom GetInStoreQuery()
{
var inStore = new JoinAlias(typeof(ProductInStore));
var detail = new JoinAlias(typeof(ProductInStore_Detail));
var query = new DQueryDom(inStore);
query.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(detail, "ProductInStore_ID", inStore, "ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<DateTime?>("convert(varchar(100),InStoreDate,23)"), "InStoreDate"));
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail));
query.Columns.Add(DQSelectColumn.Field("BrandItem_ID", detail));
query.Columns.Add(DQSelectColumn.Sum(detail, "Number", "SumNumber"));
query.Columns.Add(DQSelectColumn.Sum(detail, "SecondNumber", "SumSecondNumber"));
query.Columns.Add(DQSelectColumn.Field("GoodsBatch_ID", detail));
query.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ("BillState", .), DQCondition.EQ("BillState", .)));
query.Where.Conditions.Add(DQCondition.EQ("Domain_ID",DomainContext.Current.ID));
if (!_productionUnit.IsEmpty) {
query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(inStore, "ProductionUnit_ID"), _productionUnit.GetValues().Select(x => DQExpression.Value(x)).ToArray()));
}
query.GroupBy.Expressions.Add(DQExpression.Snippet("convert(varchar(100),InStoreDate,23)"));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "BrandItem_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field(detail, "GoodsBatch_ID"));
return query;
}
[DFClass]
private class FinishData
{
public DateTime? Date { get; set; }
public long Goods_ID { get; set; }
public long? BrandItem_ID { get; set; }
public Money<decimal>? SumNumber { get; set; }
public Money<decimal>? SumSecondNumber { get; set; }
public string ProductionUnit_Name { get; set; }
public string Employee_Name { get; set; }
public long? GoodsBatch_ID { get; set; }
}
protected override DQueryDom GetQueryDom() {
var dom = base.GetQueryDom();
var bill = JoinAlias.Create("bill");
var detail = new JoinAlias("detail", typeof(ProduceFinish_Detail));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(detail),
DQCondition.EQ(bill, "ID", detail, "ProduceFinish_ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<DateTime?>("convert(varchar(100),Date,23)"), "InStoreDate"));
dom.Columns.Add(DQSelectColumn.Field("Goods_ID", detail));
dom.Columns.Add(DQSelectColumn.Field("BrandItem_ID", detail));
dom.Columns.Add(DQSelectColumn.Sum(detail, "Number", "SumNumber"));
dom.Columns.Add(DQSelectColumn.Sum(detail, "SecondNumber", "SumSecondNumber"));
dom.Columns.Add(DQSelectColumn.Field("ProductionUnit_Name", bill));
dom.Columns.Add(DQSelectColumn.Field("Employee_Name", bill));
dom.Columns.Add(DQSelectColumn.Field("GoodsBatch_ID", detail));
dom.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ("BillState", .), DQCondition.EQ("BillState", .)));
dom.Where.Conditions.Add(DQCondition.EQ("Domain_ID", DomainContext.Current.ID));
if (!_productionUnit.IsEmpty) {
dom.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(bill, "ProductionUnit_ID"), _productionUnit.GetValues().Select(x => DQExpression.Value(x)).ToArray()));
}
dom.GroupBy.Expressions.Add(DQExpression.Snippet("convert(varchar(100),Date,23)"));
dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "Goods_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "BrandItem_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field(bill, "ProductionUnit_Name"));
dom.GroupBy.Expressions.Add(DQExpression.Field(bill, "Employee_Name"));
dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "BrandItem_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field(detail, "GoodsBatch_ID"));
var finishData = new JoinAlias("finiData", typeof(FinishData));
var inStoreData = new JoinAlias("inData",typeof(InStoreData));
var query = new DQueryDom(finishData);
query.RegisterQueryTable(typeof(FinishData), new List<string> { "Date", "Goods_ID", "BrandItem_ID", "SumNumber", "SumSecondNumber", "ProductionUnit_Name", "Employee_Name", "GoodsBatch_ID" }, dom);
query.RegisterQueryTable(typeof(InStoreData), new List<string> { "Date", "Goods_ID", "BrandItem_ID", "SumNumber", "SumSecondNumber", "GoodsBatch_ID" }, GetInStoreQuery());
query.From.AddJoin(JoinType.Left, new DQDmoSource(inStoreData), DQCondition.And(DQCondition.EQ(finishData, "Goods_ID", inStoreData, "Goods_ID"), DQExpression.Snippet("datediff(day,inData.Date,finiData.Date) = 1"), DQCondition.EQ(finishData, "BrandItem_ID", inStoreData, "BrandItem_ID"), DQCondition.Or(DQCondition.EQ(finishData, "GoodsBatch_ID", inStoreData, "GoodsBatch_ID"), DQCondition.And(DQCondition.IsNull(DQExpression.Field(finishData, "GoodsBatch_ID")), DQCondition.IsNull(DQExpression.Field(inStoreData, "GoodsBatch_ID"))))));
var goods1 = new JoinAlias("goods", typeof(Goods));
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods1),
DQCondition.EQ(goods1, "ID", finishData, "Goods_ID"));
var goodsProperty1 = new JoinAlias("goodsProperty", typeof(GoodsProperty));
query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsProperty1),
DQCondition.EQ(goodsProperty1, "ID", goods1, "GoodsProperty_ID"));
var goodsPropertyCatalog1 = new JoinAlias("goodsPropertyCatalog", typeof(GoodsPropertyCatalog));
query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsPropertyCatalog1),
DQCondition.EQ(goodsPropertyCatalog1, "ID", goodsProperty1, "GoodsPropertyCatalog_ID"));
var goodsBatch = new JoinAlias("goodsBatch", typeof(GoodsBatch));
query.From.AddJoin(JoinType.Left, new DQDmoSource(goodsBatch),
DQCondition.EQ(goodsBatch, "ID", finishData, "GoodsBatch_ID"));
var brandItem = new JoinAlias(typeof(BrandItem));
query.From.AddJoin(JoinType.Left, new DQDmoSource(brandItem),
DQCondition.EQ(finishData, "BrandItem_ID", brandItem, "ID"));
//_displayOptionHelper.AddAlias("departmen1t", deparetment1);
_displayOptionHelper.AddAlias("goodsBatch", goodsBatch);
_displayOptionHelper.AddAlias("goods", goods1);
_displayOptionHelper.AddAlias("goodsProperty", goodsProperty1);
_displayOptionHelper.AddAlias("goodsPropertyCatalog", goodsPropertyCatalog1);
foreach (ListItem field in _checkbox.Items) {
if (field.Selected) {
switch (field.Text) {
case "生产单位":
case "经办人":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(finishData,field.Value), field.Text));
query.GroupBy.Expressions.Add(DQExpression.Field(finishData,field.Value));
break;
case "存货分类":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goods1, field.Value), field.Text));
query.GroupBy.Expressions.Add(DQExpression.Field(goods1, field.Value));
break;
case "品牌项":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(brandItem, field.Value), field.Text));
query.GroupBy.Expressions.Add(DQExpression.Field(brandItem, field.Value));
break;
case "产品线":
case "存货编码":
case "存货名称":
case "存货规格":
case "辅单位":
case "主单位":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goods1, field.Value), field.Text));
query.GroupBy.Expressions.Add(DQExpression.Field(goods1, field.Value));
break;
case "存货批号":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(goodsBatch, field.Value), field.Text));
query.GroupBy.Expressions.Add(DQExpression.Field(goodsBatch, field.Value));
break;
case "辅数量":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(finishData, field.Value)), field.Text));
break;
case "主数量":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(finishData, field.Value)), field.Text));
break;
case "入库辅数量":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(inStoreData, field.Value)), field.Text));
break;
case "入库主数量":
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field(inStoreData, field.Value)), field.Text));
break;
case "差异主数量":
var diffNum = DQExpression.Sum(DQExpression.Field(finishData, "SumNumber")).ESubtract(DQExpression.Sum(DQExpression.Field(inStoreData, "SumNumber")));
query.Columns.Add(DQSelectColumn.Create(diffNum, field.Text));
break;
case "差异辅数量":
var diffSecondNum = DQExpression.Sum(DQExpression.Field(finishData, "SumSecondNumber")).ESubtract(DQExpression.Sum(DQExpression.Field(inStoreData, "SumSecondNumber")));
query.Columns.Add(DQSelectColumn.Create(diffSecondNum, field.Text));
break;
//case "上次停用时间":
// query.Columns.Add(DQSelectColumn.Create(DQExpression.SubQuery(GetLastStopTime(bill)), field.Text));
// break;
//case "经销商":
// var jxs = DQExpression.LogicCase(DQCondition.EQ("IsDealers", DQExpression.Value(true)), DQExpression.Field("Name"), DQExpression.SubQuery(GetJingXiaoShang(bill)));
// query.Columns.Add(DQSelectColumn.Create(jxs, field.Text));
// break;
}
}
}
//var customer = new JoinAlias(typeof(Customer));
//dom.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(bill, "Customer_ID", customer, "ID"));
//if (!_customerCatalog.IsEmpty) {
// var strs = B3SaleWebUtil.GetDeepByTreeName(_customerCatalog.DisplayValue);
// var conditions = new List<IDQExpression>();
// var values = _customerCatalog.GetValues();
// for (int index = 0; index < values.Length; index++) {
// var value = values[index];
// conditions.Add(DQCondition.EQ(customer, "CustomerCatalog_TreeDeep" + strs[index] + "ID", value));
// }
// dom.Where.Conditions.Add(DQCondition.Or(conditions));
//}
if (!_goodsProperty.IsEmpty) {
query.Where.Conditions.EFieldInList(DQExpression.Field(goods1, "GoodsProperty_ID"), _goodsProperty.GetValues());
}
if (!_goodsPropertyCatalog.IsEmpty) {
var strs = B3SaleWebUtil.GetDeepByTreeName(_goodsPropertyCatalog.DisplayValue);
var conditions = new List<IDQExpression>();
var values = _goodsPropertyCatalog.GetValues();
for (int index = 0; index < values.Length; index++) {
var value = values[index];
conditions.Add(DQCondition.EQ(goodsPropertyCatalog1, "TreeDeep" + strs[index] + "ID", value));
}
query.Where.Conditions.Add(DQCondition.Or(conditions));
}
_displayOptionHelper.AddSelectColumns(dom, name => OptionIsSelected("显示字段", name), SumColumnIndexs);
if (!_goods.IsEmpty) {
query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(finishData, "Goods_ID"), _goods.GetValues().Select(x => DQExpression.Value(x)).ToArray()));
}
if (!_brandItem.IsEmpty) {
query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(finishData, "BrandItem_ID"), _brandItem.GetValues().Select(x => DQExpression.Value(x)).ToArray()));
}
if (!_productLine.IsEmpty) {
query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field(goods1, "ProductLine_ID"), _productLine.GetValues().Select(x => DQExpression.Value(x)).ToArray()));
}
var miniDate = mQueryContainer.GetControl<DFDateInput>("MinFinishDate");
var maxDate = mQueryContainer.GetControl<DFDateInput>("MaxFinishDate");
if(!miniDate.IsEmpty)
query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual(finishData,"Date",miniDate.Value));
if (!maxDate.IsEmpty)
query.Where.Conditions.Add(DQCondition.LessThanOrEqual(finishData, "Date", maxDate.Value));
return query;
}
protected override void InitQueryPanel(QueryPanel queryPanel)
{
base.InitQueryPanel(queryPanel);
var panel = queryPanel.CreateTab("显示字段");
_checkbox = new CheckBoxListWithReverseSelect { RepeatColumns = 6, RepeatDirection = RepeatDirection.Horizontal };
_checkbox.Items.Add(new ListItem("生产单位", "ProductionUnit_Name"));
_checkbox.Items.Add(new ListItem("经办人", "Employee_Name"));
_checkbox.Items.Add(new ListItem("存货分类","GoodsPropertyCatalog_Name"));
_checkbox.Items.Add(new ListItem("品牌项","Name"));
_checkbox.Items.Add(new ListItem("产品线","ProductLine_Name"));
_checkbox.Items.Add(new ListItem("存货编码","Code"));
_checkbox.Items.Add(new ListItem("存货名称","Name"));
_checkbox.Items.Add(new ListItem("存货规格","Spec"));
_checkbox.Items.Add(new ListItem("辅单位","SecondUnit"));
_checkbox.Items.Add(new ListItem("主单位","MainUnit"));
_checkbox.Items.Add(new ListItem("存货批号","Name"));
_checkbox.Items.Add(new ListItem("辅数量","SumSecondNumber"));
_checkbox.Items.Add(new ListItem("主数量","SumNumber"));
_checkbox.Items.Add(new ListItem("入库辅数量","SumSecondNumber"));
_checkbox.Items.Add(new ListItem("入库主数量","SumNumber"));
_checkbox.Items.Add(new ListItem("差异辅数量", "DiffSecondNumber"));
_checkbox.Items.Add(new ListItem("差异主数量", "DiffNumber"));
panel.EAdd(_checkbox);
mQueryControls.Add("显示字段", _checkbox);
mQueryControls.EnableHoldLastControlNames.Add("显示字段");
}
//protected override void AddQueryOptions(VLayoutPanel vPanel) {
// _displayOptionHelper.AddOptionItem("生产单位", "finiData", "ProductionUnit_Name");
// _displayOptionHelper.AddOptionItem("经办人", "finiData", "Employee_Name");
// _displayOptionHelper.AddOptionItem("存货分类", "goods", "GoodsPropertyCatalog_Name");
// if(_useBrandItem)
// _displayOptionHelper.AddOptionItem("品牌项", "finiData", "BrandItem_Name");
// _displayOptionHelper.AddOptionItem("产品线", "goods", "ProductLine_Name");
// _displayOptionHelper.AddOptionItem("存货编码", "goods", "Code");
// _displayOptionHelper.AddOptionItem("存货名称", "goods", "Name");
// _displayOptionHelper.AddOptionItem("存货规格", "goods", "Spec");
// _displayOptionHelper.AddOptionItem("辅单位", "goods", "SecondUnit");
// _displayOptionHelper.AddOptionItem("主单位", "goods", "MainUnit");
// _displayOptionHelper.AddOptionItem("存货批号", "goodsBatch", "Name");
// _displayOptionHelper.AddOptionItem("辅数量", "finiData", "SumSecondNumber");
// _displayOptionHelper.AddOptionItem("主数量", "finiData", "SumNumber");
// _displayOptionHelper.AddOptionItem("入库辅数量", "inData", "SumSecondNumber");
// _displayOptionHelper.AddOptionItem("入库主数量", "inData", "SumNumber");
// var detail = JoinAlias.Create("finiData");
// var inDetail = JoinAlias.Create("inData");
// _displayOptionHelper.AddOptionItem("差异数量", () => {
// return DQExpression.Field(detail, "SumNumber").ESubtract(DQExpression.Field(inDetail, "SumNumber"));
// }, sum: true);
// _displayOptionHelper.AddOptionItem("差异辅数量", () => {
// return DQExpression.Field(detail, "SumSecondNumber").ESubtract(DQExpression.Field(inDetail, "SumSecondNumber"));
// }, sum: true);
// var showFieldsSection = mPageLayoutManager.AddSection("显示字段", "显示字段");
// var showFields = _displayOptionHelper.GetAllDisplayNames().Select(displayName => new Tuple<string, string>(displayName, displayName)).ToList();
// showFieldsSection.ApplyLayout(showFields, mPageLayoutManager);
// AddQueryOption("显示字段", showFields.EToList(x => x.Item1), _displayOptionHelper.GetDefaultSelelectedDisplayNames());
// base.AddQueryOptions(vPanel);
//}
protected override void AddQueryControls(VLayoutPanel vPanel) {
base.AddQueryControls(vPanel);
var layoutManager = new LayoutManager("", mDFInfo, mQueryContainer);
//layoutManager.Add("AccountingUnit_ID", QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["AccountingUnit_ID"], mQueryContainer, "AccountingUnit_ID", B3FrameworksConsts.DataSources.授权会计单位全部));
//layoutManager["AccountingUnit_ID"].NotAutoAddToContainer = true;
//layoutManager.Add("Department_ID", QueryCreator.DFChoiceBox(mDFInfo.Fields["Department_ID"], B3FrameworksConsts.DataSources.授权部门全部));
//layoutManager.Add("Customer_ID", QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["Customer_ID"], mQueryContainer, "Customer_ID", B3SaleDataSources.客户全部));
//layoutManager["Customer_ID"].NotAutoAddToContainer = true;
//layoutManager.Add("Employee_ID", QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["Employee_ID"], mQueryContainer, "Employee_ID", B3FrameworksConsts.DataSources.授权员工全部));
//layoutManager["Employee_ID"].NotAutoAddToContainer = true;
layoutManager.Add("ProductionUnit_ID", new SimpleLabel("生产单位"), mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(_productionUnit = QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["ProductionUnit_ID"], B3ProduceUnitedInfosDataSources.), s => long.Parse(s)), "ProductionUnit_ID"));
layoutManager["ProductionUnit_ID"].NotAutoAddToContainer = true;
layoutManager.Add("GoodsProperty_ID", new SimpleLabel("存货属性"), _goodsProperty = new ChoiceBox() { DataKind = B3UnitedInfosConsts.DataSources., Width = Unit.Empty, EnableTopItem = true, EnableMultiSelection = true, EnableMultiSelectionViewer = true, EnableInputArgument = true }, false);
layoutManager.Add("GoodsPropertyCatalog_ID", new SimpleLabel("属性分类"), _goodsPropertyCatalog = new ChoiceBox() { DataKind = B3UnitedInfosConsts.DataSources., Width = Unit.Empty, EnableTopItem = true, EnableMultiSelection = true, EnableMultiSelectionViewer = true, EnableInputArgument = true }, false);
if (_useBrandItem) {
layoutManager.Add("BrandItem_ID", new SimpleLabel("品牌项"), mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(_brandItem = QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["ID"], B3UnitedInfosConsts.DataSources.), s => long.Parse(s)), "BrandItem_ID"));
layoutManager["BrandItem_ID"].NotAutoAddToContainer = true;
}
layoutManager.Add("ProductLine_ID", new SimpleLabel("产品线"), mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(_productLine = QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["ID"], B3UnitedInfosConsts.DataSources.线), s => long.Parse(s)), "ProductLine_ID"));
layoutManager["ProductLine_ID"].NotAutoAddToContainer = true;
layoutManager.Add("Goods_ID", new SimpleLabel("存货"), mQueryContainer.AddLink(new ChoiceBoxMultiSelectLink(_goods = QueryCreator.DFChoiceBoxEnableMultiSelection(mDFInfo.Fields["ID"], B3SaleDataSources.), s => long.Parse(s)), "Goods_ID"));
layoutManager["Goods_ID"].NotAutoAddToContainer = true;
layoutManager.Add("FinishDate", new SimpleLabel("完工时间"), QueryCreator.DateRange(mDFInfo.Fields["ID"], mQueryContainer, "MinFinishDate", "MaxFinishDate"));
layoutManager["FinishDate"].NotAutoAddToContainer = true;
var config = new AutoLayoutConfig { Cols = 4 };
config.Add("FinishDate");
config.Add("ProductionUnit_ID");
config.Add("GoodsProperty_ID");
config.Add("GoodsPropertyCatalog_ID");
if (_useBrandItem)
config.Add("BrandItem_ID");
config.Add("ProductLine_ID");
config.Add("Goods_ID");
layoutManager.Config = config;
vPanel.Add(layoutManager.CreateLayout());
}
}
}