From 8b9dbecc0e75ccf6fcaaf75cd7e4739346a0298e Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期一, 08 七月 2024 11:16:33 +0800
Subject: [PATCH] report

---
 jrj/project/total3/ViewTotalWin.cpp       |  523 +++++++++++++++++++++++++++++++++++++
 jrj/xframe/xcontrol/xoffice.hpp           |  109 +++++++
 jrj/project/analysis/DataVanalysisWin.cpp |  141 ++++++++++
 jrj/ext-jrj/ext-jrj.vcxproj               |    4 
 jrj/xframe/kobject/koffice.hpp            |   37 ++
 5 files changed, 814 insertions(+), 0 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index ba7c9d7..dd1a013 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -185,6 +185,7 @@
     <ClInclude Include="..\xframe\kobject\khtml.hpp" />
     <ClInclude Include="..\xframe\kobject\klayersheet.hpp" />
     <ClInclude Include="..\xframe\kobject\knode.hpp" />
+    <ClInclude Include="..\xframe\kobject\koffice.hpp" />
     <ClInclude Include="..\xframe\kobject\kpage.hpp" />
     <ClInclude Include="..\xframe\kobject\kreport.hpp" />
     <ClInclude Include="..\xframe\kobject\kshtml.hpp" />
@@ -235,6 +236,7 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClInclude>
     <ClInclude Include="..\xframe\xcontrol\xlistview.hpp" />
+    <ClInclude Include="..\xframe\xcontrol\xoffice.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xreport.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xshtml.hpp" />
     <ClInclude Include="..\xframe\xcontrol\xtreeview.hpp" />
@@ -242,6 +244,7 @@
     <ClInclude Include="pch.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="..\project\analysis\DataVanalysisWin.cpp" />
     <ClCompile Include="..\project\business\AP\APBank.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
@@ -535,6 +538,7 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\start.vframe.vbusiness.cpp" />
+    <ClCompile Include="..\project\total3\ViewTotalWin.cpp" />
     <ClCompile Include="..\project\viewobject\view.base.hpp" />
     <ClCompile Include="..\project\vindexform.cpp" />
     <ClCompile Include="..\project\vindexformex.cpp" />
diff --git a/jrj/project/analysis/DataVanalysisWin.cpp b/jrj/project/analysis/DataVanalysisWin.cpp
new file mode 100644
index 0000000..d1532db
--- /dev/null
+++ b/jrj/project/analysis/DataVanalysisWin.cpp
@@ -0,0 +1,141 @@
+#include <wobject/xwin.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <xcontrol/xflowchart.hpp>
+#include <xcontrol/ximageview.hpp>
+#include <xcontrol/ximageview.hpp>
+#include <xcontrol/xhtml.hpp>
+#include <xcontrol/xexcel.hpp>
+#include "vbusiness/util/publiccode.vutil.vbusiness.hpp "
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) DataVanalysisWin : public xwin
+{
+public:
+	DataVanalysisWin(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	static DataVanalysisWin* CreateInstance(void* implPtr, void* hWnd)
+	{
+		return new DataVanalysisWin(implPtr, (HWND)hWnd);
+	}
+public:
+	xhtml	ole_html;
+	xdwgrid  dw_data;
+	xnode	m_agentNode;	//Agent Condition
+	xstring   htmlStr;
+	xexcel   excel;
+
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, int param)
+	{
+		//重置工具条
+		SetAgent();
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (comdid == L"xmConfig")
+		{
+			xstring str = dw_data.DataAnalysis(L"");
+			if (str != L"")
+			{
+				ole_html.LoadHtml(str);
+				htmlStr = str;
+			}
+			return 1;
+		}
+		else if (comdid == L"xmCopy")
+		{
+			ole_html.ExecWB(12, 0); //OLECMDID_COPY
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		else if (comdid == L"xmSelectAll")
+		{
+			ole_html.ExecWB(17, 0); //OLECMDID_SELECTALL
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		else if (comdid == L"xmToExecl")
+		{
+			if (!excel.GetNativePtr())
+			{
+				alert(L"不能连接Excel");
+				return 1;
+			}
+
+			xaserver::CreateDirectory(L"C:\\Temp");
+			xstring gid = publiccode::GetGuid();
+			xutil::SaveToFile(L"C:\\Temp\\" + gid + L".html", htmlStr, L"", L"", L"");
+			excel.OpenDocument(L"C:\\Temp\\" + gid + L".html");
+			excel.put_Visible(true);
+			return 1;
+		}
+
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, int param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&DataVanalysisWin::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&DataVanalysisWin::OnSetFocus);
+	}
+
+	int onload()
+	{
+		htmlStr = L"";
+		ole_html = GetControl(L"ole_html");
+		if (!GetWinParam()) return 1;
+		SetArg();
+		xaserverarg arg = GetArg();
+		xstring str = arg.GetArgString(L"html");
+		if (str != L"")
+		{
+			htmlStr = str;
+			ole_html.LoadHtml(str);
+		}
+		dw_data = *(xdwgrid*)arg.GetParam(L"obj");
+
+		OnAttachEvent();
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		SetAgent();
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/total3/ViewTotalWin.cpp b/jrj/project/total3/ViewTotalWin.cpp
new file mode 100644
index 0000000..d330173
--- /dev/null
+++ b/jrj/project/total3/ViewTotalWin.cpp
@@ -0,0 +1,523 @@
+#include <wobject/xwin.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <xcontrol/xoffice.hpp>
+#include <xcontrol/xcell.hpp>
+#include <xcontrol/xflowchart.hpp>
+#include <xcontrol/ximageview.hpp>
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ViewTotalWin : public xwin
+{
+public:
+	ViewTotalWin(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	static ViewTotalWin* CreateInstance(void* implPtr, void* hWnd)
+	{
+		return new ViewTotalWin(implPtr, (HWND)hWnd);
+	}
+
+	xdwgrid	dw_list;
+	xoffice 	dw_office;
+	xcell		dw_cell;
+	xnode	m_agentNode;	//Agent Condition
+	KXMLDOMElement rptEle;
+	string m_category;
+	string argStr;
+	string searchStr;
+	string fieldRoleStr;
+	int      hWndImageView;
+	int      hWndRetrieveTip;
+	bool    dataretrieveing;
+
+	int SetAgent()
+	{
+		string xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				string s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnSearch()
+	{
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"text", searchStr);
+		//trace(searchStr);
+		OpenWindow(L"dev:xpage[search.dialog.vx]", cast(arg as int));
+		string str = arg.GetArgString(L"text");
+		if (str != searchStr)
+		{
+			searchStr = str;
+			dw_list.Filter(L"*", searchStr);
+			return 1;
+		}
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(ref TEvent evt, int param)
+	{
+		//重置工具条
+		SetAgent();
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(string comdid)
+	{
+		string UserNo = publiccode::GetUser().no;
+
+		int hCursor = 0;
+		if (comdid == L"xmSearch") return OnSearch();
+
+		//if(UserNo !=L"00603")
+		//{
+		if (comdid == L"xmAnalysis")
+		{
+			hCursor = xutil::SetCursorWait();
+			string str = dw_list.DataAnalysis(L"");
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg(L"html", str);
+			int obj = cast(dw_list as int);
+			arg.AddArg(L"obj", obj.toString());
+			OpenWindow(L"dev:xpage[data.vanalysis.vx]", cast(arg as int));
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		if (comdid == L"xmSaveAs")
+		{
+			dw_list.SaveAs(L"");
+			return 1;
+		}
+		if (comdid == L"xmRemarks")
+		{
+			string name = rptEle.getAttribute(L"name");
+			xml x = ViewObject::RetrieveData(L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+			KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+			KXMLDOMNode t = items.item(0);
+			string Content = L"";
+			if (t.selectSingleNode(L"Content"))
+			{
+				Content = t.selectSingleNode(L"Content").text;
+			}
+
+			xaserverarg arg1 = new xaserverarg;
+			arg1.setNativePointer(arg1.CreateInstance());
+			arg1.AddArg(L"value", Content);
+			OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1.getNativePointer());
+			return 1;
+
+		}
+		//} 
+		if (comdid == L"xmTrans1")
+			return OnTransData();
+		if (comdid == L"xmQuery")
+		{
+			if (rptEle)
+			{
+				string argUrl = rptEle.getAttribute(L"arg");
+				if (argUrl != L"")
+				{
+					xaserverarg ar = new xaserverarg;
+					ar.setNativePointer(ar.CreateInstance());
+					ar.AddArg(L"argurl", argUrl);
+					if (argStr != L"")
+						ar.AddArg(L"arg", argStr);
+					OpenWindow(L"dev:xpage[view.total.arg.vx]", cast(ar as int));
+					string arstr = ar.GetArgString(L"arg");
+					if (arstr != L"" && ar.GetArgString(L"action") == L"ok")
+					{
+						argStr = arstr;
+						hCursor = xutil::SetCursorWait();
+						//trace(rptEle.getAttribute(L"data"));
+						OnRetrieve(rptEle.getAttribute(L"data"), argStr);
+						xutil::RestoreCursor(hCursor);
+					}
+				}
+				else
+				{
+					argStr = L"";
+					OnRetrieve(rptEle.getAttribute(L"data"), argStr);
+				}
+			}
+			return 1;
+		}
+		if (comdid == L"xmLookImage")
+		{
+
+			int row = dw_list.GetRow();
+			string skuid = dw_list.GetGuid(row);
+			OnLookImage(skuid);
+			return 1;
+		}
+		if (comdid == L"CalculationFormula")
+		{
+			OpenWindow(L"dev:xpage[CalculationFormula.vx]", 0);
+			SetAgent();
+			return 1;
+		}
+		return 0;
+	}
+
+	int OnLookImage(string skuid)
+	{
+		int hCursor = xutil::SetCursorWait();
+		xaserverarg arg = ViewObject::MakeArg();
+		arg.AddArg(L"guid", skuid);
+		OpenWindow(L"dev:xpage[ViewPictures.vx]", arg.getNativePointer());
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+
+	int AdjustField(xdwgrid dw)
+	{
+		string str = fieldRoleStr;
+		for (int i = 1; i < dw.GetColumnCount(); i++)
+		{
+			string colname = dw.GetColumnName(i);
+			if (str.find(L"!" + colname + L",L") >= 0)
+			{
+				dw.SetColumnState(colname, false);
+			}
+		}
+		return 1;
+	}
+
+	int SwitchReport(KXMLDOMElement e)
+	{
+		string dwname = e.getAttribute(L"template");
+		string dataurl = e.getAttribute(L"data");
+		string sheettype = e.getAttribute(L"reporttype");
+		if (rptEle != e)
+		{
+			argStr = L"";
+			rptEle = e;
+		}
+		if (sheettype == L"") sheettype = L"report";
+		SwitchLayer(L"dw_" + sheettype, L"report");
+		if (sheettype == L"report")dw_list.openUrl(dwname);
+		if (hWndImageView) win32::DestroyWindow(hWndImageView);
+
+		AdjustField(dw_list);
+
+		SetAgent();
+		return 1;
+	}
+
+	int OnCombboChanged(ref TCommandEvent evt, int lParam)
+	{
+		int h = xcombobox::GetCurSel(evt.hCtrl);
+		if (h > -1)
+		{
+			int hCursor = xutil::SetCursorWait();
+			KXMLDOMElement e = xcombobox::GetItemData(evt.hCtrl, h);
+			SwitchReport(e);
+			win32::PostMessage(GetHWND(), 0x401, L"xmQuery", 0);
+			//OnCmdDispatch(L"xmQuery");
+			xutil::RestoreCursor(hCursor);
+		}
+		return 1;
+	}
+
+	int OnTransData()
+	{
+		int ret = win32::MessageBox(GetHWND(), L"是否更新数据?\n更新过程预计需要四十分钟,如果中间弹出等待时间过长的提示,请点击中间重试按钮,或等待到一定时间再点击", L"提示", 0x4 /*yesno*/);
+		if (ret != 6 /*IDYES */) return 1;
+
+		xml x = new.xml();
+		x.setNativePointer(xml::CreateInstance());
+		int hCursor = xutil::SetCursorWait();
+		if (url::get(L"/sale/data/Total3/total/transdata", L"", x) != 1)
+		{
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+		else
+		{
+			xutil::RestoreCursor(hCursor);
+			alert(L"数据传输完成!");
+			return 1;
+		}
+
+		return 1;
+	}
+
+	//命令处理事件
+	int OnXCommand(ref TXCommandEvent evt, int param)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}
+
+	int SendImageMessage(int row)
+	{
+		if (dw_list.GetItemString(row, L"GDNLineID") != L"")
+			win32::SendMessage(hWndImageView, 0x401, L"xmRetrieve:GDNLineID:" + dw_list.GetItemString(row, L"GDNLineID"), 0);
+		else if (dw_list.GetItemString(row, L"ItemID") != L"")
+			win32::SendMessage(hWndImageView, 0x401, L"xmRetrieve:SKUID:" + dw_list.GetItemString(row, L"ItemID"), 0);
+		else if (dw_list.GetItemString(row, L"SKUID") != L"")
+			win32::SendMessage(hWndImageView, 0x401, L"xmRetrieve:SKUID:" + dw_list.GetItemString(row, L"SKUID"), 0);
+		else if (dw_list.GetItemString(row, L"GoodsNo") != L"")
+			win32::SendMessage(hWndImageView, 0x401, L"xmRetrieve:GoodsNo:" + dw_list.GetItemString(row, L"GoodsNo"), 0);
+		return 1;
+	}
+
+	int OnDWClick(ref TNotifyEvent evt, int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		string value = hdr.data;
+		string colname = hdr.colname;
+		int row = hdr.row;
+
+		if (row < 1) return 1;
+
+		if (rptEle)
+		{
+			string str = rptEle.getAttribute(L"forward");
+			if (str == L"false") return 1;
+		}
+
+		/*
+		string s = publiccode::GetUser().id;
+		xml supplier_x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/entity/FindBySaleType",L"id", s);
+		if(supplier_x.GetXmlDoc().text == L"样品间" || supplier_x.GetXmlDoc().text == L"主管"){
+			return 1;
+		}
+
+		xaserverarg arg;
+		if(colname==L"SONo")
+		{
+			string SONo = dw_list.GetItemString(row,colname);
+			arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg(L"EntityNo",SONo);
+			arg.AddArg(L"ReadOnly",L"true");
+			OpenWindow(L"dev:xpage[base.maint.so.vx]",arg.getNativePointer());
+		}
+		if(colname==L"InvoiceNo")
+		{
+			string InvoiceNo= dw_list.GetItemString(row,colname);
+			arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg(L"EntityNo",InvoiceNo);
+			arg.AddArg(L"ReadOnly",L"true");
+			OpenWindow(L"dev:xpage[maint.GDN3.vx]",arg.getNativePointer());
+		}
+		if(colname==L"InvoiceNoEx")
+		{
+			string InvoiceNoEx= dw_list.GetItemString(row,colname);
+			arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg(L"EntityNo",InvoiceNoEx);
+			arg.AddArg(L"invoiceno",InvoiceNoEx);
+			arg.AddArg(L"ReadOnly",L"true");
+			OpenWindow(L"dev:xpage[maint.vatnotify.vx]",arg.getNativePointer());
+		}
+		*/
+
+		if (hWndImageView != 0 && win32::IsWindow(hWndImageView))
+		{
+			SendImageMessage(row);
+		}
+		else if (colname == L"HasImage")
+		{
+			xwin pwin = OpenWindow(L"dev:xpage[testImage.vx]", 0);
+			hWndImageView = pwin.GetHWND();
+			SendImageMessage(row);
+		}
+
+		return 1;
+	}
+
+	int OnRowChanged(ref TNotifyEvent evt, int p)
+	{
+
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		if (row < 1) return 1;
+
+		if (hWndImageView != 0 && win32::IsWindow(hWndImageView))
+		{
+			SendImageMessage(row);
+		}
+		return 1;
+	}
+
+	int ShowRetrieveingTip()
+	{
+		dataretrieveing = true;
+		xwin pwin = OpenWindow(L"dev:xpage[TestRetrieveing.vx]", 0);
+		hWndRetrieveTip = pwin.GetHWND();
+		return 1;
+	}
+	int CloseRetrieveTip()
+	{
+		dataretrieveing = false;
+		win32::SendMessage(hWndRetrieveTip, 0x401, L"RetrieveFinished", 0);
+		hWndRetrieveTip = 0;
+
+		return 1;
+	}
+
+	int OnRetrieveFinished(ref TNotifyEvent evt, int p)
+	{
+		CloseRetrieveTip();
+		//dataretrieveing = false;
+		//alert(L"读取完成");
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", OnSetFocus);
+		AttachEvent(L"cb_report", L"CBN_SELCHANGE", OnCombboChanged);
+		AttachEvent(L"dw_report", L"DWV_CLICKED", OnDWClick);
+		AttachEvent(L"dw_report", L"DWV_ROWFOCUSCHANGED", OnRowChanged);//绑定行更改触发事件OnRowChanged
+		AttachEvent(L"dw_report", (0x400 + 81).toString(), OnRetrieveFinished);
+	}
+
+	int  OnRetrieve(string dataurl, string argstr)
+	{
+		if (!rptEle) return 0;
+		if (dataretrieveing) return -1;
+		dw_list.Reset();
+
+		xml x = new.xml();
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"arg", argstr);
+		trace(argstr);
+		string sheettype = rptEle.getAttribute(L"reporttype");
+		if (sheettype == L"") sheettype = L"report";
+		//ShowRetrieveingTip();
+		if (url::get(dataurl, arg.GetString(), x) != 1)
+		{
+
+			trace(L"错误信息=L" + x.GetXmlDoc().text);
+			dw_list.Redraw();
+			return -1;
+		}
+		else
+		{
+			if (sheettype == L"report")
+			{
+				//CloseRetrieveTip();
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+			}
+			else if (sheettype == L"cell")
+			{
+			}
+			else if (sheettype == L"office")
+			{
+				dw_office.LoadTemplate(x);
+				for (int i = 0; i < dw_office.GetSheetCount(); i++)
+				{
+					xcell sheet = dw_office.GetSheet(i);
+					sheet.SetReadOnly(true);
+				}
+			}
+		}
+		return 1;
+	}
+
+	xml getReportSet(string category)
+	{
+		xml x = new.xml();
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"category", category);
+		if (url::get(L"/sale/data/Total3/reportset", arg.GetString(), x) != 1)
+		{
+			return 0;
+		}
+		return x;
+	}
+
+	string GetReportFieldRole()
+	{
+		xml x = new.xml();
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		if (url::get(L"/sale/data/Total3/report/field", arg.GetString(), x) != 1)
+		{
+			return "";
+		}
+		string str = x.GetXmlDoc().text;
+		return str;
+	}
+
+	int onload()
+	{
+		dw_list = GetControl(L"dw_report");
+		dw_office = GetControl(L"dw_office");
+		dw_cell = GetControl(L"dw_cell");
+		dw_list.openUrl(L"/sale/view/Total3/template/sodetail");
+
+		fieldRoleStr = GetReportFieldRole();
+
+		argStr = L"";
+		rptEle = 0;
+		xcombobox xc = GetControl(L"cb_report");
+
+		m_category = L"total/trade";
+		if (GetParam()) {
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(GetParam());
+			m_category = arg.GetArgString(L"category");
+		}
+		xml x = getReportSet(m_category);
+		if (x)
+		{
+			KXMLDOMNodeList nlist = x.GetXmlDoc().selectNodes(L"//reports/report");
+			int len = nlist.length;
+			for (int i = 0; i < len; i++)
+			{
+				KXMLDOMElement rpt = nlist.item(i);
+				string name = rpt.getAttribute(L"name");
+				xcombobox::AddItem(xc.GetId(), name, trust(rpt as int));
+				if (i == 0) xc.SetText(name);
+				if (i == 0) rptEle = rpt;
+			}
+		}
+		searchStr = L"";
+		hWndImageView = 0;
+		hWndRetrieveTip = 0;
+		dataretrieveing = false;
+		OnAttachEvent();
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		SetAgent();
+
+		if (rptEle)
+		{
+			SwitchReport(rptEle);
+			//OnCmdDispatch(L"xmQuery");
+		}
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/xframe/kobject/koffice.hpp b/jrj/xframe/kobject/koffice.hpp
new file mode 100644
index 0000000..9c0ada7
--- /dev/null
+++ b/jrj/xframe/kobject/koffice.hpp
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "kcontrol.hpp"
+namespace Hxsoft {	namespace XFrame {	namespace XOffice {	
+
+	class IXOffice : public IXFControl
+	{
+	public:
+		int LoadTemplate(LPTSTR pXml, int state);
+		int LoadTemplate(KXMLDOMElement pElement, int state);
+		int LoadTemplate(KXMLDOMDocument& x, int state);
+	public:
+		int Retrieve(KXMLDOMElement pElement);
+		int Retrieve(KXMLDOMDocument& x);
+		int Retrieve(LPTSTR bstr);
+	public:
+		int DwUpdate(KXMLDOMElement pElement);
+		int DwUpdate(KXMLDOMDocument& x);
+	public:
+		xbObject* GetSheet(int nIndex);
+		int GetSheetCount();
+	public:
+		int SelectSheet(int nIndex);
+		int GetSelectedSheetIndex();
+		int RemoveSheet(int nIndex);
+	public:
+		int GetData(KXMLDOMDocument px);
+		int GetData(KXMLDOMDocument px, int nIndex);
+	public:
+		int SaveFileAs();
+		int SaveFile();
+		int SaveFile(wchar_t* fileName);
+	public:
+		int OpenFile(wchar_t* fileName);
+		int OpenFile();
+	};
+}}}
diff --git a/jrj/xframe/xcontrol/xoffice.hpp b/jrj/xframe/xcontrol/xoffice.hpp
new file mode 100644
index 0000000..0053892
--- /dev/null
+++ b/jrj/xframe/xcontrol/xoffice.hpp
@@ -0,0 +1,109 @@
+#pragma once
+
+#include "wobject/xcontrol.hpp"
+#include "kobject/koffice.hpp"
+#include "wobject/xurl.hpp"
+
+using koffice = Hxsoft::XFrame::XOffice::IXOffice;
+class xoffice : public xcontrol
+{
+public:
+	xoffice() :xcontrol(nullptr) {}
+	xoffice(void* implptr) :xcontrol(implptr) {}
+public:
+	koffice* GetKOffice()
+	{
+		return (koffice*)this->GetNativePtr();
+	}
+public:
+	int LoadTemplate(xstring pXml, int state)
+	{
+		return GetKOffice()->LoadTemplate((LPTSTR)pXml.c_str(), state);
+	}
+	int LoadTemplate(KXMLDOMElement pElement, int state)
+	{
+		return GetKOffice()->LoadTemplate(pElement, state);
+	}
+	int LoadTemplate(KXMLDOMDocument& x, int state)
+	{
+		return GetKOffice()->LoadTemplate(x, state);
+	}
+public:
+	int Retrieve(KXMLDOMElement pElement)
+	{
+		return GetKOffice()->Retrieve(pElement);
+	}
+	int Retrieve(KXMLDOMDocument& x)
+	{
+		return GetKOffice()->Retrieve(x);
+	}
+	int Retrieve(LPTSTR bstr)
+	{
+		return GetKOffice()->Retrieve(bstr);
+	}
+public:
+	int DwUpdate(KXMLDOMElement pElement)
+	{
+		return GetKOffice()->DwUpdate(pElement);
+	}
+	int DwUpdate(KXMLDOMDocument& x)
+	{
+		return GetKOffice()->DwUpdate(x);
+	}
+public:
+	Hxsoft::XFrame::xbObject* GetSheet(int nIndex)
+	{
+		return GetKOffice()->GetSheet(nIndex);
+	}
+	int GetSheetCount()
+	{
+		return GetKOffice()->GetSheetCount();
+	}
+public:
+	int SelectSheet(int nIndex)
+	{
+		return GetKOffice()->SelectSheet(nIndex);
+	}
+	int GetSelectedSheetIndex()
+	{
+		return GetKOffice()->GetSelectedSheetIndex();
+	}
+	int RemoveSheet(int nIndex)
+	{
+		return GetKOffice()->RemoveSheet(nIndex);
+	}
+public:
+	int GetData(KXMLDOMDocument px)
+	{
+		return GetKOffice()->GetData(px);
+	}
+	int GetData(KXMLDOMDocument px, int nIndex)
+	{
+		return GetKOffice()->GetData(px, nIndex);
+	}
+public:
+	int SaveFileAs()
+	{
+		return GetKOffice()->SaveFileAs();
+	}
+	int SaveFile()
+	{
+		return GetKOffice()->SaveFile();
+	}
+	int SaveFile(xstring fileName)
+	{
+		return GetKOffice()->SaveFile((LPTSTR)fileName.c_str());
+	}
+public:
+	int OpenFile(xstring fileName)
+	{
+		return GetKOffice()->OpenFile((LPTSTR)fileName.c_str());
+	}
+	int OpenFile()
+	{
+		return GetKOffice()->OpenFile();
+	}
+};
+
+
+

--
Gitblit v1.9.3