From 0351af7b382a9daddd709c884bcd96fe2c1fa3ac Mon Sep 17 00:00:00 2001 From: yypsybs <yypsybs@foxmail.com> Date: 星期五, 22 九月 2023 16:09:45 +0800 Subject: [PATCH] 年度产销预算复盘对比导出 --- _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def | 2 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def | 21 ++++++++++ _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl | 42 +++++++++++++++++++++ _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl | 15 +++++-- _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def | 11 +++++ _Main/BL/Type_ScenarioManager/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl | 23 +++++++++++ 6 files changed, 108 insertions(+), 6 deletions(-) diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl index a441cd3..d5d4352 100644 --- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl +++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl @@ -72,7 +72,9 @@ info( "dealing 闈㈡澘鍒嗛厤閲�" ) if( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) { traverse( years, Elements, year ) { + info( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞�" ); // 鍘嗗彶鏁版嵁 + info( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞村巻鍙叉暟鎹�" ); traverse( months, Elements, month ) { columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" ); traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) { @@ -87,6 +89,7 @@ cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal ); cell.CapacityAndSaleBudgeCompareItemRow( relset, row ); } + info( "闈㈡澘鍒嗛厤閲�" + [String]year.YearNo() + "骞碨&OP鏁版嵁" ); // S&OP鏁版嵁 traverse( macroPlans, Elements, macroPlan ) { traverse( months, Elements, month ) { @@ -112,7 +115,9 @@ info( "dealing 閿�鍞" ) if( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) { traverse( years, Elements, year ) { + info( "閿�鍞" + [String]year.YearNo() + "骞�" ); // 鍘嗗彶鏁版嵁 + info( "閿�鍞" + [String]year.YearNo() + "骞村巻鍙叉暟鎹�" ); traverse( months, Elements, month ) { columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" ); traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) { @@ -127,6 +132,7 @@ cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal ); cell.CapacityAndSaleBudgeCompareItemRow( relset, row ); } + info( "閿�鍞" + [String]year.YearNo() + "骞村巻鍙叉暟鎹甋&OP鏁版嵁" ); // S&OP鏁版嵁 traverse( macroPlans, Elements, macroPlan ) { traverse( months, Elements, month ) { @@ -151,7 +157,7 @@ info( "dealing 澶у紶鐩堝埄棰�" ) traverse( years, Elements, year ) { // 鍘嗗彶鏁版嵁 - columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-骞村害棰勭畻" ); + columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" ); traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) { // todo // QID 23 @@ -160,7 +166,7 @@ } // S&OP鏁版嵁 traverse( macroPlans, Elements, macroPlan ) { - columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�" ); + columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() ); traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) { cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) ); cell.CapacityAndSaleBudgeCompareItemRow( relset, row ); @@ -171,16 +177,15 @@ info( "dealing 浜у搧鐩堝埄棰�" ) traverse( years, Elements, year ) { // 鍘嗗彶鏁版嵁 - columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-骞村害棰勭畻" ); + columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" ); traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) { // todo - // QID 23 cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) ); cell.CapacityAndSaleBudgeCompareItemRow( relset, row ); } // S&OP鏁版嵁 traverse( macroPlans, Elements, macroPlan ) { - columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�" ); + columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() ); traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) { // todo cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) ); diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl new file mode 100644 index 0000000..44dab2e --- /dev/null +++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompareExport.qbl @@ -0,0 +1,42 @@ +Quintiq file version 2.0 +#parent: #root +Method CapacityAndSaleBudgeCompareExport () as BinaryValue +{ + Description: '瀵煎嚭姣旇緝缁撴灉' + TextBody: + [* + // yypsybs Sep-22-2023 (created) + tableName := "骞村害浜ч攢棰勭畻瀵规瘮"; + + text:= '<?xml version="1.0" encoding="utf-8" standalone="yes"?><table><name>' + tableName + '</name>'; + + // 澶勭悊column <column><name>鐗╂枡缂栫爜</name><type>String</type></column> + columnXml := "" + traverse( this, CapacityAndSaleBudgeCompareItemColumn, column ) { + info( "columnName : " + column.ColumnName() ); + columnXml := columnXml + "<column><name>" + column.ColumnName() + "</name><type>String</type></column>"; + } + text := text + columnXml + "</table>" + + // 濉炲唴瀹� + xmlDOMImplementation := XMLDOMImplementation::Create(); + xmlDOMDocument := xmlDOMImplementation.CreateDocumentFromString( text ); + tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 ); + rows := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, row, row.PlaceOfProductionOfArray() + "_" + row.BusinessType() ); + traverse ( rows, Elements, row ) { + info( "rowNo : " + [String]row.RowNo() ); + traverse( row, CapacityAndSaleBudgeCompareItemCell, cell ) { + ScenarioManager::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, cell.CellContent(), cell.CapacityAndSaleBudgeCompareItemColumn().ColumnName() ); + } + } + xmlDOMSerializer := xmlDOMImplementation.CreateSerializer(); + xmlTableString := xmlDOMSerializer.WriteToString( xmlDOMDocument ); + + tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTableString ) ); + tableGroupHandle := TableGroupHandle::Create( tableName ); + tableGroupHandle.Add( tableHandle ); + tableBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true ); + + return tableBinaryData.AsBinaryValue(); + *] +} diff --git a/_Main/BL/Type_ScenarioManager/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl b/_Main/BL/Type_ScenarioManager/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl new file mode 100644 index 0000000..f40c634 --- /dev/null +++ b/_Main/BL/Type_ScenarioManager/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl @@ -0,0 +1,23 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod GeneratesTheSpecifiedXMLColumn ( + XMLDOMDocument xmlDOMDocument, + XMLDOMElement tableElement, + String value, + String columnName +) +{ + TextBody: + [* + columnElements := tableElement.GetElementsByTagName( "column" ); + + traverse ( columnElements, Elements, ce ) { + nameElement := ce.GetElementByTagName( "name", 0 ); + if ( nameElement.TextContent() = columnName ) { + cell := xmlDOMDocument.CreateElement( "cell" ); + cell.SetAttribute( "value", value ); + ce.AppendChild( cell ); + } + } + *] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def index db394b0..cbfdc2b 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def @@ -93,6 +93,6 @@ ContextMenu: 'matrixeditorContextMenuCapacityAndSaleBudgeCompare' Editable: false Rows: 'MatrixEditorRowsCapacityAndSaleBudgeCompare' - Taborder: 1 + Taborder: 2 ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def new file mode 100644 index 0000000..97cea9d --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def @@ -0,0 +1,21 @@ +Quintiq file version 2.0 +#parent: ButtonExportCompare +Response OnClick () id:Response_FormCapacityAndSaleBudgeCompare_ButtonExportCompare_OnClick +{ + #keys: '[414384.0.881345276]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebButton_OnClick' + Precondition: + [* + return not isnull( GlobalOTDTable ); + *] + QuillAction + { + Body: + [* + tableBinaryData := ScenarioManager.CapacityAndSaleBudgeCompareExport().AsBinaryData(); + Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", tableBinaryData ); + *] + GroupServerCalls: false + } +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def index 9602b8e..d44643f 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def @@ -18,6 +18,17 @@ Taborder: 0 ] } + Component ButtonExportCompare + { + #keys: '[414384.0.881345277]' + BaseType: 'WebButton' + Properties: + [ + Image: 'EXPORT1' + Label: '瀵煎嚭' + Taborder: 1 + ] + } ] Properties: [ -- Gitblit v1.9.3