From e39d18d6d7ed5ee9c7dd94836d7a898c975a7354 Mon Sep 17 00:00:00 2001
From: lifan <2308045698@qq.com>
Date: 星期三, 01 四月 2026 13:26:36 +0800
Subject: [PATCH] update

---
 jrj/project/start.vframe.vbusiness.cpp             | 2064 ++++++++++++++++++++++++-----------------------
 jrj/xframe/kobject/kreport.hpp                     |  204 ++--
 jrj/xframe/xcontrol/xreport.hpp                    |  258 +++--
 jrj/project/business/Expense/SampleRequestForm.cpp |    0 
 4 files changed, 1,299 insertions(+), 1,227 deletions(-)

diff --git a/jrj/project/business/Expense/SampleRequestForm.cpp b/jrj/project/business/Expense/SampleRequestForm.cpp
index 464bb78..8a7e9c7 100644
--- a/jrj/project/business/Expense/SampleRequestForm.cpp
+++ b/jrj/project/business/Expense/SampleRequestForm.cpp
Binary files differ
diff --git a/jrj/project/start.vframe.vbusiness.cpp b/jrj/project/start.vframe.vbusiness.cpp
index 5a7ef99..aae66c0 100644
--- a/jrj/project/start.vframe.vbusiness.cpp
+++ b/jrj/project/start.vframe.vbusiness.cpp
@@ -1,999 +1,1065 @@
-#include "xcontrol/xreport.hpp"
-#include "wobject/xwin.hpp"
-#include "wobject/xaserverarg.hpp"
-#include "wobject/xstring.hpp"
-#include "wobject/xurl.hpp"
-#include "xcontrol/xshtml.hpp"
-#include "vbusiness/vframe/frame.vframe.vbusiness.hpp"
-#include "viewobject/view.base.hpp"
-#include "xcontrol/xshtml.hpp"
-
-using xml = Hxsoft::XFrame::KXMLDOMDocument;
-
-class __declspec(dllexport) startvframevbusiness : public xframe
-{
-public:
-	xreport dw_list;
-public:
-	startvframevbusiness(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
-public:
-	static startvframevbusiness* CreateInstance(void* implPtr, void* hWnd)
-	{
-		return new startvframevbusiness(implPtr, (HWND)hWnd);
-	}
-
-	int init()
-	{
-		xaserverarg arg;
-		KXMLDOMDocument doc;
-		if (xurl::get(GetServerUrl(), L"/sale/data/vpage/vstart/list", arg.GetString(), doc) != 1)
-		{
-			alert(((xstring)L"error:" + doc.xml()).c_str());
-			return 0;
-		}
-		if (!doc.xml()) return 0;
-
-		dw_list.Retrieve(doc);
-		dw_list.CreateTree((LPCWSTR)L"node()", 1, 15, 16);
-		dw_list.Redraw();
-		/*
-		dw_list.Redraw();
-		dw_list.SetReadOnly(true);
-		*/
-		return 1;
-	}
-
-	xstring GetEntityIDName(LPARAM pr)
-	{
-		return L"@EntityID";
-	}
-
-	xstring GetEntityName(LPARAM pr)
-	{
-		int nRow = dw_list.GetRow();
-		if (nRow < 0) return L"";
-		KXMLDOMElement ele = dw_list.GetRowElement(nRow);
-		if (!ele) return L"";
-		return ele.getAttribute(L"category");
-	}
-
-	xstring GetEntityID(LPARAM pr)
-	{
-		int row = dw_list.GetRow();
-		if (row<1 || row>dw_list.GetRowCount()) return 0;
-		KXMLDOMElement ele = dw_list.GetRowElement(row);
-		if (!ele) return L"";
-		xstring id = GetEntityIDName(pr);
-		if (!ele.selectSingleNode(id)) return L"";
-		xstring d = ele.selectSingleNode(id).text();
-		return d;
-	}
-
-	xstring GetTaskID()
-	{
-		int row = dw_list.GetRow();
-		if (row<1 || row>dw_list.GetRowCount()) return 0;
-		KXMLDOMElement ele = dw_list.GetRowElement(row);
-		if (!ele) return L"";
-		xstring taskid = ele.getAttribute(L"taskid");
-		return taskid;
-	}
-
-	xstring GetReason(LPARAM pr, xstring comd)
-	{
-		xaserverarg arg;
-
-		if (GetEntityName(pr) == L"DeliveryDelay")
-		{
-			xstring ls_cmdid = comd;//pr;
-			int row = dw_list.GetRow();
-			if (row < 1) return 1;
-			KXMLDOMElement ele = dw_list.GetRowElement(row);
-			xstring  ls_status = ele.selectSingleNode(L"@status").text();
-			if (ls_status == L"货源部待确认" && ls_cmdid == L"action:bill.check.agree")
-			{
-				arg.AddArg(L"DDID", GetEntityID(2));
-				arg.AddArg(L"_ModuelPage", L"dev:xpage[DeliveryDelay.supmancheck.vx]");
-				OpenWindow(L"dev:xpage[vindexforold.vx]", arg);
-				//openUrl(L"/sale/view/DeliveryDelay/xpage/DeliveryDelay/supmancheck", arg);
-				if (arg.GetArgString(L"ret") == L"Sucess")
-				{
-					return L"Auto...";
-				}
-				return L"";
-			}
-			else
-			{
-				//return frame::GetReason(pr);				
-				arg.AddArg(L"EntityID", GetEntityID(2));
-				arg.AddArg(L"_ModuelPage", L"dev:xpage[workflow.chkdlg.vx]");
-				OpenWindow(L"dev:xpage[vindexforold.vx]", arg);
-				//int newArg2 = arg.ptr_native_;
-				//openUrl(L"/sale/view/workflow.view/xpage/chkdlg_vd", newArg2);													
-				xstring comdid = arg.GetArgString(L"comdid");
-				if (comdid == L"xmOK")
-				{
-					xstring value = arg.GetArgString(L"content") + L" ";
-					return value;
-				}
-				return L"";
-			}
-		}
-		else
-		{
-			//return frame::GetReason(pr);
-			arg.AddArg(L"EntityID", GetEntityID(2));
-			OpenWindow(L"dev:xpage[workflow.chkdlg.vx]", arg);
-			//openUrl(L"/sale/view/workflow.view/xpage/chkdlg", arg);									
-			xstring comdid2 = arg.GetArgString(L"comdid");
-			if (comdid2 == L"xmOK")
-			{
-				xstring value2 = arg.GetArgString(L"content") + L" ";
-				return value2;
-			}
-			return L"";
-
-		}
-	}
-
-	int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
-	{
-		init();
-		return 1;
-	}
-
-	xstring GetEntityWorkNode(LPARAM pr, xstring what)
-	{
-		if (what == L"open")
-		{
-			int row = dw_list.GetRow();
-			if (row<0 || row>dw_list.GetRowCount()) return 0;
-			KXMLDOMElement ele = dw_list.GetRowElement(row);
-			xstring aurl = ele.selectSingleNode(L"@url").text();
-			return aurl;
-		}
-		return L"";
-	}
-
-
-	int SetAgent()
-	{
-		if (dw_list)
-		{
-			//init();
-			xstring id = GetEntityID(1);
-			if (id != L"")	xframe::SetAgent((xstring)L"letter", id);
-		}
-		return 1;
-	}
-
-
-	int openUrl(xstring aurl, /*param */ LPARAM para)
-	{
-		//alert(aurl);
-		xml x;
-
-		xurl::get(aurl, L"", x);
-		KXMLDOMDocument doc = x;
-		KXMLDOMNode n = doc.selectSingleNode(L"//resource/@src");
-		//alert(x.xml());
-		if (n)
-		{
-			/*
-			xstring xq = n.text();
-			OpenWindow(xq, para);
-			return 1;
-			*/
-
-			xstring xq = n.text();
-			if (doc.selectSingleNode(L"//resource/@argnative"))
-			{
-				OpenWindow(xq, para);
-			}
-
-			//alert(xq);
-			else if (xq.find(L"upplier", 0) > 0 and xq != L"dev:xpage[Maint.SupplierStatusModify.vx]" and xq != L"dev:xpage[Maint.SupplierSubmit.vx]")
-				OpenWindow(xq, para);
-			else
-			{
-				xq = xq.replace(L"dev:xpage[", L"");
-				xq = xq.replace(L"]", L"");
-				xaserverarg& args = *(xaserverarg*)para;
-				args.AddArg(L"_ModuelPage", xq);
-				//alert(args.GetString());
-				OpenWindow(L"dev:xpage[vindexforold.vx]", args);
-			}
-			return 1;
-		}
-		else
-		{
-			xaserverarg& arg = *(xaserverarg*)para;
-			n = doc.selectSingleNode(L"//resource[@vface!='' and @view!='']");
-			if (n)
-			{
-				xstring vface = n.selectSingleNode(L"@vface").text();
-				xstring view = n.selectSingleNode(L"@view").text();
-				xstring config = n.selectSingleNode(L"@config").text();
-				if (config != L"")
-				{
-					arg.AddArg(L"config", config, L"xs:xstring");
-				}
-				if (vface == L"." || vface == L"")
-				{
-					xstring v = n.selectSingleNode(L"@url").text();
-					xstring burl = aurl.mid(0, aurl.find(v, 0));
-					//alert(burl);
-					return openUrl(burl + view, arg);
-				}
-				else
-					return openUrl(vface + L"/" + view, arg);
-			}
-		}
-		return -1;
-	}
-
-	int SetTaskProcessed()
-	{
-		int row = dw_list.GetRow();
-		if (row<0 || row>dw_list.GetRowCount()) return 1;
-		if (!dw_list.GetRowElement(row)) return 1;
-		KXMLDOMElement ele = dw_list.GetRowElement(row);
-
-		xaserverarg arg;
-
-		xstring taskid = ele.getAttribute(L"taskid");
-		arg.AddArg(L"TaskID", taskid);
-		xml x = ViewObject::RetrieveData(L"/sale/data/business/update/taskprocessed", L"TaskID", taskid);
-		if (x) alert(x.text());
-		dw_list.DeleteRow(row);
-
-		return 1;
-	}
-	int ProcessFlowAction(xstring comdid, LPARAM pr1)
-	{
-		if (comdid == L"__ModifyRows")
-		{
-			OnModifyRows();
-			return 1;
-		}
-
-		LPARAM  pr = pr1;
-		xstring action = comdid.mid(comdid.find(L"action:", 0) + 7, 9999);
-		if (action == L"bill.delete" || action == L"bill.deleteEx")
-		{
-			if (MessageBox(GetHWND(), L"是否确定删除记录!", L"提示", 1) == 2)
-				return 1;
-		}
-
-		if (action == L"bill.processed")
-		{
-			if (MessageBox(GetHWND(), L"是否确定选中的任务转已处理?", L"提示", 1) == 2)
-				return 1;
-			return  SetTaskProcessed();
-		}
-
-		xaserverarg arg;
-
-		arg.AddArg(L"Action", action, L"xs:xstring");
-		xml x;
-
-
-		xstring aurl = L"/workflow/query/actioninfo/" + action;
-
-		if (xurl::get(aurl, L"", x) != 1)
-			return -1;
-
-		int nlen;
-		int i = 0;
-		xstring name;
-		xstring worknode;
-		xstring how;
-		xstring state = L"";
-		xstring billstatus = L"";
-		KXMLDOMElement e;
-
-		arg.AddArg(L"EntityName", GetEntityName(pr), L"xs:xstring");
-		//参数要求
-		KXMLDOMNodeList nlist = x.selectNodes(L"//params/param");
-		nlen = nlist.length();
-
-		for (i = 0; i < nlen; i++)
-		{
-			e = nlist.item(i);
-			name = e.selectSingleNode(L"@name").text();
-			how = e.selectSingleNode(L"@how").text();
-
-			xstring content = L"";
-			if (how == L"Entity" || how == L"EntityData")
-			{
-				content = GetEntityData(pr);
-			}
-			if (e.selectSingleNode(L"@valid"))
-			{
-				if (content.find(L"update.modify", 0) > 0 || content.find(L"update.delete", 0) > 0) {}
-				else return 0;
-				if (CheckEntityValidity(pr) < 0) return -1;
-			}
-			if (how == L"EntityID")
-				arg.AddArg(name, GetEntityID(pr), L"xs:xstring");
-			else if (how == L"Entity" || how == L"EntityData")
-				arg.AddArg(name, content, L"xs:xstring");
-			else if (how == L"EntityRowData")
-				arg.AddArg(name, GetEntityRowData(pr), L"xs:xstring");
-			else if (how == L"Reason")
-			{
-				arg.AddArg(name, GetReason(1, L""), L"xs:xstring");
-			}
-			else if (how == L"EntityNo")
-				arg.AddArg(name, GetEntityNo(pr), L"xs:xstring");
-			else if (how == L"EntityTitle")
-				arg.AddArg(name, GetEntityTitle(pr), L"xs:xstring");
-			else if (how == L"GetParam")
-				arg.AddArg(name, GetParamValue(name), L"xs:xstring");
-			else if (how == L"UserID")
-				arg.AddArg(name, xaserver::GetUserId(), L"xs:xstring");
-			//"CHeckAskMsg"
-			//"CHeckMsg
-			if (how == L"Reason" && arg.GetArgString(name) == L"") return -1;
-			//if(how==L"EntityData" && arg.GetArgString(name)==L"") return -1;
-			if (e.selectSingleNode(L"@check"))
-			{
-
-				xstring doCheck = e.selectSingleNode(L"@check").text();
-				if (doCheck == L"Y")
-				{
-					xstring value = arg.GetArgString(name);
-					if (value == L"")
-					{
-						alert(name + L" 参数值不能为空,事件终止!");
-						return -1;
-					}
-				}
-			}
-		}
-
-		arg.AddArg(L"action.entity", GetEntityName(pr), L"xs:xstring");
-		ProcessUsedArg(arg);
-		//动作
-		KXMLDOMNode n = x.selectSingleNode(L"//view.action[1]");
-
-		bool execResult = true; //处理结果
-		if (n)
-		{
-			name = n.selectSingleNode(L"@name").text();
-			if (n.selectSingleNode(L"@worknode"))
-				worknode = n.selectSingleNode(L"@worknode").text();
-			else
-				worknode = GetEntityWorkNode(pr, name);
-			arg.AddArg(L"do", name, L"xs:xstring");
-			if (worknode != L"")
-			{
-				if (worknode.find(L"dev:xpage") == 0)
-					OpenWindow(worknode, arg);
-				else
-					openUrl(worknode, arg); //---openUrl(worknode,arg);
-			}
-			else
-			{
-				alert(L"Warn: Please configure worknode for action " + name + L".");
-				return -1;
-			}
-		}
-		else
-		{
-			//url::post(GetEntityName(pr)+L"/workflow/action",arg.GetString(),x);
-			xml x1;
-			int retxx = xurl::post(L"/workflow/action/" + GetEntityName(pr) + L"/" + action, arg.GetString(), x1);
-
-			//alert(L"/workflow/action/"+GetEntityName(pr)+L"/"+action+L"\r\n"+arg.GetString()+L"\r\n"+x1.xml());
-
-			if (retxx != 1) execResult = false;
-			if (x1.selectSingleNode(L"//process"))
-			{
-				KXMLDOMElement e1 = x1.selectSingleNode(L"//process");
-				xstring valid = e1.getAttribute(L"valid");
-				xstring finished = e1.getAttribute(L"finished");
-				xstring errInfo = L"";
-				if (valid == L"0")
-				{
-					errInfo = e1.getAttribute(L"errInfo");
-					alert(errInfo);
-					execResult = false;
-				}
-				else if (finished == L"0")
-				{
-					errInfo = e1.getAttribute(L"errInfo");
-					errInfo = L"处理失败!\r\n" + errInfo;
-					alert(errInfo);
-					execResult = false;
-				}
-			}
-			else if (x1.selectSingleNode(L"//process-check-list"))
-			{
-				KXMLDOMElement e2 = x1.selectSingleNode(L"//process-check-list");
-				xstring val = e2.getAttribute(L"process");
-				if (val == L"ok")
-				{
-					alert(L"处理成功");
-					PostMessage(GetHWND(), 0x401, (WPARAM)L"action:bill.refresh", 0);
-				}
-				else if (val == L"part")
-				{
-					alert(L"有部分数据处理未成功,提交成功的已处理。");
-					PostMessage(GetHWND(), 0x401, (WPARAM)L"action:bill.refresh", 0);
-				}
-				else
-					alert((xstring)L"数据处理不成功\r\n" + x1.xml());
-				return 1;
-			}
-			else if (x1.selectSingleNode(L"//msg"))
-			{
-				xstring aStr = x1.selectSingleNode(L"//msg[1]").text();
-				//if(aStr.find(L"理成功",0) < 0)
-				//	alert(aStr);
-				if (aStr.find(L"失败", 0) >= 0)
-					execResult = false;
-				alert(aStr);
-			}
-			if (x1.selectSingleNode(L"//msg/@state"))
-			{
-				state = x1.selectSingleNode(L"//msg[1]/@state").text();
-				arg.AddArg(L"state", state, L"xs:xstring");
-				billstatus = x1.selectSingleNode(L"//msg[1]/@billstatus").text();
-				arg.AddArg(L"billstatus", billstatus, L"xs:xstring");
-			}
-		}
-		//更新要求
-		if (execResult)
-		{
-			nlist = x.selectNodes(L"//view/update");
-			nlen = nlist.length();
-			for (i = 0; i < nlen; i++)
-			{
-				e = nlist.item(i);
-				how = e.selectSingleNode(L"@do").text();
-				if (how == L"setstate")
-				{
-					if (state != L"")
-					{
-						arg.AddArg(L"state", state, L"xs:xstring");
-						arg.AddArg(L"billstatus", billstatus, L"xs:xstring");
-						ViewUpdate(pr, how, arg);
-
-					}
-				}
-				else
-					ViewUpdate(pr, how, arg);
-			}
-		}
-
-
-		return 1;
-	}
-
-
-	/*int ProcessFlowAction(xstring comdid, int pr1)
-	{
-		//trace(L"comdid--->  %s\r\n", comdid);
-		if(comdid == L"__ModifyRows")
-		{
-			OnModifyRows();
-			return 1;
-		}
-
-		LPARAM  pr = pr1;
-		xstring action = comdid.mid(comdid.find(L"action:",0)+7,9999);
-		if(action == L"bill.delete" || action == L"bill.deleteEx")
-		{
-			if (MessageBox(GetHWND(),L"是否确定删除记录!",L"提示1",1) == 2)
-				return 1;
-		}
-
-		xaserverarg arg = new xaserverarg ;
-
-		arg.AddArg(L"Action", action,L"xs:xstring");
-		xml x ;
-		x.setNativePointer(xml ::CreateInstance());
-
-		xstring aurl = L"/workflow/query/actioninfo/"+action;
-		//trace(L"abc---",aurl);
-
-		if(xurl::get(aurl, L"", x) != 1)
-			return -1;
-		//alert(x.xml());
-		int nlen ;
-		int i = 0;
-		xstring name;
-		xstring worknode;
-		xstring how;
-		xstring state;
-		KXMLDOMElement e;
-
-		arg.AddArg(L"EntityName", GetEntityName(pr),L"xs:xstring");
-		//参数要求
-		KXMLDOMNodeList nlist = x.selectNodes(L"//params/param");
-		nlen = nlist.length;
-
-		//trace(L"xxx");
-		for(i=0;	i<nlen;	i++)
-		{
-			//trace(L"yyy");
-			e = nlist.item(i);
-			//trace(e.xml);
-			name = e.selectSingleNode(L"@name").text();
-			how = e.selectSingleNode(L"@how").text();
-			//trace(how);
-			//trace(name);
-			xstring content = L"";
-			if(how==L"Entity" || how == L"EntityData")
-				content = GetEntityData(pr);
-			if(e.selectSingleNode(L"@valid"))
-			{
-				if(content.find(L"update.modify", 0) > 0 || content.find(L"update.delete",0) > 0) {} else return 0;
-				if(CheckEntityValidity(pr) < 0) return -1;
-			}
-			if(how==L"EntityID")
-				arg.AddArg(name, GetEntityID(pr),L"xs:xstring");
-			else if(how==L"Entity" || how == L"EntityData")
-				arg.AddArg(name, content,L"xs:xstring");
-			else if(how==L"EntityRowData")
-				arg.AddArg(name, GetEntityRowData(pr),L"xs:xstring");
-			else if(how==L"Reason")
-				arg.AddArg(name, GetReason(pr, comdid),L"xs:xstring");
-			else if(how==L"EntityNo")
-				arg.AddArg(name, GetEntityNo(pr),L"xs:xstring");
-			else if(how==L"EntityTitle")
-				arg.AddArg(name, GetEntityTitle(pr),L"xs:xstring");
-			else if(how==L"GetParam")
-				arg.AddArg(name, GetParamValue(name),L"xs:xstring");
-			else if(how==L"UserID")
-				arg.AddArg(name, xaserver::GetUserId(),L"xs:xstring");
-			//"CHeckAskMsg"
-			//"CHeckMsg
-			//trace(arg.GetString());
-			//trace(arg.GetArgString(name));
-			if(how==L"Reason" && arg.GetArgString(name)==L"") return -1;
-			//trace(L"cky1");
-			//if(how==L"EntityData" && arg.GetArgString(name)==L"") return -1;
-			if(e.selectSingleNode(L"@check"))
-			{
-
-				xstring doCheck = e.selectSingleNode(L"@check").text();
-				if(doCheck == L"Y")
-				{
-					xstring value = arg.GetArgString(name);
-					if(value == L"")
-					{
-						alert(name + L" 参数值不能为空,事件终止!");
-						return -1;
-					}
-				}
-			}
-		}
-
-		arg.AddArg(L"action.entity",GetEntityName(pr),L"xs:xstring");
-		//trace(L"zzz");
-		//trace(arg.GetString());
-		//动作
-		KXMLDOMNode n = x.selectSingleNode(L"//view.action[1]");
-		//trace(x.xml());
-		bool execResult = true; //处理结果
-
-		if(n)
-		{
-			name = n.selectSingleNode(L"@name").text();
-			if(n.selectSingleNode(L"@worknode"))
-				worknode = n.selectSingleNode(L"@worknode").text();
-			else
-				worknode = GetEntityWorkNode(pr,name);
-			arg.AddArg(L"do",name,L"xs:xstring");
-			if(worknode !=L"")
-			{
-				//trace(L"do:"+worknode);
-				int p = arg.ptr_native_;
-				openUrl(worknode,p); //---openUrl(worknode,arg);
-			}
-			else
-			{
-				alert(L"Warn: Please configure worknode for action "+ name +L".");
-				return -1;
-			}
-		}
-		else
-		{
-			//url::post(GetEntityName(pr)+L"/workflow/action",arg.GetString(),x);
-			//trace(L"/workflow/action/"+GetEntityName(pr)+L"/"+action);
-			//trace(L"=====L");
-			//trace(arg.GetString());
-			xml x1 ;
-			x1.setNativePointer(xml::CreateInstance());
-			int retxx = url::post(L"/workflow/action/"+GetEntityName(pr)+L"/"+action,arg.GetString(),x1);
-			if(retxx != 1) execResult = false;
-			//trace(x1.xml());
-			if(x1.selectSingleNode(L"//msg"))
-			{
-				xstring aStr = L""+x1.selectSingleNode(L"//msg[1]").text();
-				if(aStr.find(L"理成功",0) < 0)
-					alert(aStr);
-				if(aStr.find(L"失败",0) >= 0)
-					execResult = false;
-				trace(aStr);
-			}
-			if(x1.selectSingleNode(L"//msg/@state"))
-			{
-				state = x1.selectSingleNode(L"//msg[1]/@state").text();
-				arg.AddArg(L"state",state,L"xs:xstring");
-			}
-		}
-		//更新要求
-		if(execResult)
-		{
-			nlist = x.selectNodes(L"//view/update");
-			nlen = nlist.length;
-			for(i=0;	i<nlen;	i++)
-			{
-				 e = nlist.item(i);
-				how = e.selectSingleNode(L"@do").text();
-				//trace(how+L"444"+state);
-				if(how==L"setstate")
-				{
-					if(state != L"")
-					{
-						arg.AddArg(L"state",state,L"xs:xstring");
-						ViewUpdate(pr,how,arg);
-
-					}
-				}
-				else
-					ViewUpdate(pr,how,arg);
-			}
-		}
-
-
-		return 1;
-	}	*/
-
-	int BillPurchor()
-	{
-		int row1 = dw_list.GetRow();
-		if (row1<0 || row1>dw_list.GetRowCount()) return 1;
-		if (!dw_list.GetRowElement(row1)) return 1;
-		KXMLDOMElement ele1 = dw_list.GetRowElement(row1);
-		xstring id1 = GetEntityIDName(1);
-		xstring d1 = ele1.selectSingleNode(id1).text();
-		xstring name1 = GetEntityName(row1);
-
-		xaserverarg arg1;
-		xstring templ = ele1.getAttribute(L"content2");
-		xstring taskid = ele1.getAttribute(L"taskid");
-		arg1.AddArg(L"template", templ);
-		arg1.AddArg(L"TaskID", taskid);
-		arg1.AddArg(L"EntityID", d1);
-		arg1.AddArg(L"bill.purchor", L"1");
-
-		OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1);
-
-		return 1;
-	}
-
-	//命令发布函数
-	int OnCmdDispatch(xstring comdid)
-	{
-		//alert(comdid);
-		xstring  userno = publiccode::GetUser().no;
-
-		if (comdid == L"action:bill.purchor") return BillPurchor();
-		if (comdid == L"action:bill.check.agree")
-		{
-			int row3 = dw_list.GetRow();
-			if (row3<0 || row3>dw_list.GetRowCount()) return 1;
-			if (!dw_list.GetRowElement(row3)) return 1;
-			KXMLDOMElement ele3 = dw_list.GetRowElement(row3);
-			xstring id3 = GetEntityIDName(1);
-			xstring d3 = ele3.selectSingleNode(id3).text();
-			xstring name3 = GetEntityName(row3);
-
-			if (name3 == L"SaleItem3")
-			{
-				xml x3;
-				xaserverarg arg3;
-				arg3.AddArg(L"SOLineID", d3);
-				if (getUrl(L"/sale/data/SaleOrder/UpdateSOLineTypeExS", arg3.GetString(), x3) != 1)
-				{
-					xstring error3 = x3.text();
-					alert(L"err:" + error3);
-					return 1;
-				}
-				ProcessFlowAction(L"action:bill.check.agree", 1);
-				return 1;
-			}
-		}
-		if (userno == L"00601" || userno == L"00701" || userno == L"admin")
-		{
-			if (comdid == L"SourceRemark")
-			{
-				OnSourceRemark();
-				return 1;
-			}
-		}
-		if (comdid == L"action:bill.check.agreeEx")
-		{
-			int row2 = dw_list.GetRow();
-			if (row2<0 || row2>dw_list.GetRowCount()) return 1;
-			if (!dw_list.GetRowElement(row2)) return 1;
-			KXMLDOMElement ele2 = dw_list.GetRowElement(row2);
-			xstring id2 = GetEntityIDName(1);
-			xstring d2 = ele2.selectSingleNode(id2).text();
-			xstring name2 = GetEntityName(row2);
-
-			if (name2 == L"SaleItem3")
-			{
-				if (MessageBox(GetHWND(), L"是否确认 工厂付款?", L"提示1", 1) == 2)
-					return 1;
-
-				xml x5;
-				xaserverarg arg5;
-				arg5.AddArg(L"SOLineID", d2);
-				if (getUrl(L"/sale/data/SaleOrder/UpdateSOLineTypeEx", arg5.GetString(), x5) != 1)
-				{
-					xstring error = x5.text();
-					alert(L"err:" + error);
-					return 1;
-				}
-				alert(x5.text());
-				ProcessFlowAction(L"action:bill.check.agree", 1);
-				return 1;
-			}
-		}
-
-		if (comdid && comdid.find(L"hand!", 0) == 0)
-		{
-			if (comdid == L"hand!toleft")
-			{
-				ProcessFlowAction(L"action:bill.check.unagree", 1);
-				return 1;
-			}
-			if (comdid == L"hand!toright")
-			{
-				ProcessFlowAction(L"action:bill.check.agree", 1);
-				return 1;
-			}
-			if (comdid == L"hand!toupright")
-			{
-				int row = dw_list.GetRow();
-				if (row<0 || row>dw_list.GetRowCount()) return 1;
-				if (!dw_list.GetRowElement(row)) return 1;
-				KXMLDOMElement ele = dw_list.GetRowElement(row);
-				xstring id = GetEntityIDName(1);
-				xstring d = ele.selectSingleNode(id).text();
-				if (d == L"") return 1;
-				ProcessFlowAction(L"action:bill.open", 1);
-				return 1;
-			}
-			if (comdid == L"hand!round")
-			{
-				ProcessFlowAction(L"action:bill.note", 1);
-				return 1;
-			}
-
-		}
-		if (comdid == L"xmIconNotifyClicked")
-		{
-			//OpenWindow(L"dev:xpage[/]",0);
-			init();
-			return 1;
-		}
-		if (comdid == L"xmRefresh" || comdid == L"xmRefreshTask")
-		{
-			init();
-			return 1;
-		}
-		if (ProcessFlowAction(comdid, 1) == 0) return 0;
-		if (comdid == L"action:bill.open")
-		{
-			int row1 = dw_list.GetRow();
-			if (row1<0 || row1>dw_list.GetRowCount()) return 1;
-			if (!dw_list.GetRowElement(row1)) return 1;
-			KXMLDOMElement ele1 = dw_list.GetRowElement(row1);
-			xstring id1 = GetEntityIDName(1);
-			xstring d1 = ele1.selectSingleNode(id1).text();
-			xstring name1 = GetEntityName(row1);
-
-			if (name1 == L"QuoteEnquiry")
-			{
-				xaserverarg arg1;
-				xstring templ = ele1.getAttribute(L"content2");
-				xstring taskid = ele1.getAttribute(L"taskid");
-				arg1.AddArg(L"template", templ);
-				arg1.AddArg(L"TaskID", taskid);
-				arg1.AddArg(L"EntityID", d1);
-
-				OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1);
-				return 1;
-			}
-			if (name1 == L"SampleFee")
-			{
-				xaserverarg arg;
-
-				arg.AddArg(L"SampleFeeID", d1);
-				//arg.AddArg(L"HWND",GetHWND().toString());
-				OpenWindow(L"dev:xpage[maint.samplefee.vx]", arg);
-				return 1;
-			}
-		}
-		return 0;
-	}
-
-	int OnSourceRemark()
-	{
-		xstring name = L"事务处理";
-		xml x = ViewObject::RetrieveData(L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
-		KXMLDOMNodeList items = x.selectNodes(L"data/Item");
-		KXMLDOMNode t = items.item(0);
-		xstring Content = L"";
-		if (t.selectSingleNode(L"Content"))
-		{
-			Content = t.selectSingleNode(L"Content").text();
-		}
-		xaserverarg arg1;
-		arg1.AddArg(L"value", Content);
-		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1);
-
-		return 1;
-	}
-
-	int OnDoubleClicked(TEvent* evt, LPARAM p)
-	{
-		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-		if (row<0 || row>dw_list.GetRowCount()) return 1;
-		if (!dw_list.GetRowElement(row)) return 1;
-		KXMLDOMElement ele = dw_list.GetRowElement(row);
-		xstring id = GetEntityIDName(1);
-		xstring d = ele.selectSingleNode(id).text();
-		if (d == L"") return 1;
-
-		xstring name1 = GetEntityName(1);
-		if (name1 == L"QuoteEnquiry")
-		{
-			xaserverarg arg1;
-			xstring templ = ele.getAttribute(L"content2");
-			xstring taskid = ele.getAttribute(L"taskid");
-			//trace(templ);
-			arg1.AddArg(L"template", templ);
-			arg1.AddArg(L"TaskID", taskid);
-			arg1.AddArg(L"EntityID", d);
-
-			OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1);
-			return 1;
-		}
-
-		ProcessFlowAction(L"action:bill.open", 1);
-		return 1;
-	}
-
-	//焦点激活处理函数
-	int OnSetFocus(TEvent* evt, LPARAM param)
-	{
-		SetAgent();
-		//重置工具条
-		return 1;
-	}
-
-	//命令处理事件
-	int OnXCommand(TEvent* evt, LPARAM p)
-	{
-		return OnCmdDispatch(evt->xcommand.pStrID);
-	}
-
-	int ShowDetail(int row)
-	{
-
-		if (row<0 || row>dw_list.GetRowCount()) return 1;
-
-		if (!dw_list.GetRowElement(row)) return 1;
-
-
-
-		KXMLDOMElement ele = dw_list.GetRowElement(row);
-		trace((xstring)L"\r\n====113======L" + ele.xml());
-		dw_list.SetRow(row);
-		if (GetEntityID(1) == L"") return -1;
-
-		//trace(ele.xml);
-		xaserverarg arg;
-
-		arg.AddArg(L"content", ele.xml());
-		xml doc;
-
-		if (getUrl(L"/sale/data/vpage/vstart/task", arg.GetString(), doc) != 1)
-		{
-			trace((xstring)L"error->:" + doc.xml());
-			return 0;
-		}
-		//trace(L"----1111----");
-		if ((xstring)doc.xml() == L"")
-			return -1;
-
-		//trace(doc.xml());
-
-		xshtml ht = GetControl(L"taskinfo");
-		ht.SetContent(doc.xml());
-		ht.Redraw();
-
-		//xframe::SetAgent((xstring)L"letter", GetEntityID(1));
-
-		return 1;
-	}
-
-	int OnClicked(TEvent* evt, LPARAM p)
-	{
-		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-
-		trace(L"count:" + (xstring)dw_list.GetRowCount());
-		if (row<1 || row>dw_list.GetRowCount()) return 1;
-
-		trace(L"\r\n-------" + (xstring)row);
-
-		if (ShowDetail(row) != 1)
-		{
-			xstring xfNodeAgentArea = L"agentarea";
-			xnode anode = GetAgentNode(xfNodeAgentArea);
-			this->SetAgentNode(anode, L"<vbox/>");
-		}
-		else
-			SetAgent();
-
-		return 1;
-	}
-
-	int OnRowChanged(TEvent* evt, LPARAM p)
-	{
-		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-		if (row<0 || row>dw_list.GetRowCount()) return 0;
-		trace(L"\r\n-----222------");
-		if (ShowDetail(row) != 1)
-		{
-			xstring xfNodeAgentArea = L"agentarea";
-			xnode anode = GetAgentNode(xfNodeAgentArea);
-			this->SetAgentNode(anode, L"<vbox/>");
-		}
-		else
-			SetAgent();
-
-		return 1;
-	}
-
-	int onload()
-	{
-		//alert(L"xxxxxxxxxxx");
-		//SetAgent();
-		//AttachEvent(L"WM_SETFOCUS", (FEvent)&startvframevbusiness::OnSetFocus);
-		//绑定工具条点击事件
-		AttachEvent(L"WM_XCOMMAND", (FEvent)&startvframevbusiness::OnXCommand);
-		//AttachEvent(L"WM_TIMER",OnTimer);
-		AttachEvent(L"tasklist", L"DWV_ROWFOCUSCHANGED", (FEvent)&startvframevbusiness::OnRowChanged);
-		AttachEvent(L"tasklist", L"DWV_DOUBLECLICKED", (FEvent)&startvframevbusiness::OnDoubleClicked);
-		AttachEvent(L"tasklist", L"DWV_CLICKED", (FEvent)&startvframevbusiness::OnClicked);
-
-		dw_list = GetControl(L"tasklist");
-
-		init();
-
-		SetAgent();
-
-		return 1;
-	}
-
-	int onloaded()
-	{
-		return 1;
-	}
-};
-
-
-
-
-
+#include "xcontrol/xreport.hpp"
+#include "wobject/xwin.hpp"
+#include "wobject/xaserverarg.hpp"
+#include "wobject/xstring.hpp"
+#include "wobject/xurl.hpp"
+#include "xcontrol/xshtml.hpp"
+#include "vbusiness/vframe/frame.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+#include "xcontrol/xshtml.hpp"
+
+using xml = Hxsoft::XFrame::KXMLDOMDocument;
+
+class __declspec(dllexport) startvframevbusiness : public xframe
+{
+public:
+	xreport dw_list;
+public:
+	startvframevbusiness(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static startvframevbusiness* CreateInstance(void* implPtr, void* hWnd)
+	{
+		return new startvframevbusiness(implPtr, (HWND)hWnd);
+	}
+
+	int init()
+	{
+		xaserverarg arg;
+		KXMLDOMDocument doc;
+		if (xurl::get(GetServerUrl(), L"/sale/data/vpage/vstart/list", arg.GetString(), doc) != 1)
+		{
+			alert(((xstring)L"error:" + doc.xml()).c_str());
+			return 0;
+		}
+		if (!doc.xml()) return 0;
+
+		int row = dw_list.GetRow();
+		KXMLDOMElement pElement;
+		LPCWSTR path = L"@cate";
+		LPWSTR val = nullptr;
+		LPWSTR guid = nullptr;
+		LPWSTR guid1 = nullptr;
+		if (dw_list.GetRowCount() >= row  && row > 0)
+		{
+			pElement = dw_list.GetRowElement(row);
+			val = pElement.getAttribute(L"cate");
+
+			guid = pElement.getAttribute(L"taskid");
+			if (dw_list.GetRowCount() >= row + 1)
+			{
+				KXMLDOMElement pElement1 = dw_list.GetRowElement(row+1);
+				if (pElement1)
+				{
+					xstring val1 = pElement.getAttribute(L"cate");
+					if(val1 == val)
+					{
+						guid1 = pElement.getAttribute(L"taskid");
+					}
+				}
+			}
+		}
+
+		dw_list.Retrieve(doc);
+		if(val)
+			dw_list.CreateTree((LPCWSTR)L"node()",path,val, 1, 15, 16);
+		else
+			dw_list.CreateTree((LPCWSTR)L"node()", 1, 15, 16);
+		dw_list.Redraw();
+
+		if (val)
+		{
+			row = 0;
+			for (int i = 1; i <= dw_list.GetRowCount(); i++)
+			{
+				pElement = dw_list.GetRowElement(i);
+				//BSTR bxml;
+				//pElement.get_xml(bxml);
+				//if (bxml)::SysFreeString(bxml);
+				LPWSTR val1 = pElement.getAttribute(L"cate");
+				if (xstring(val1) == val)
+				{
+					row = i + 1;
+					break;
+				}
+			}
+			if (row)
+			{
+				int srow = row;
+				for (; row < dw_list.GetRowCount(); row++)
+				{
+					pElement = dw_list.GetRowElement(row);
+					xstring cate = pElement.getAttribute(L"cate");
+					if (cate != val)break;
+					xstring id = pElement.getAttribute(L"taskid");
+					if (id == guid || id == guid1)
+					{
+						srow = row;
+						break;
+					}
+				}
+				dw_list.SetRow(srow);
+			}
+		}
+
+		if (val)delete val;
+		/*
+		dw_list.Redraw();
+		dw_list.SetReadOnly(true);
+		*/
+		return 1;
+	}
+
+	xstring GetEntityIDName(LPARAM pr)
+	{
+		return L"@EntityID";
+	}
+
+	xstring GetEntityName(LPARAM pr)
+	{
+		int nRow = dw_list.GetRow();
+		if (nRow < 0) return L"";
+		KXMLDOMElement ele = dw_list.GetRowElement(nRow);
+		if (!ele) return L"";
+		return ele.getAttribute(L"category");
+	}
+
+	xstring GetEntityID(LPARAM pr)
+	{
+		int row = dw_list.GetRow();
+		if (row<1 || row>dw_list.GetRowCount()) return 0;
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		if (!ele) return L"";
+		xstring id = GetEntityIDName(pr);
+		if (!ele.selectSingleNode(id)) return L"";
+		xstring d = ele.selectSingleNode(id).text();
+		return d;
+	}
+
+	xstring GetTaskID()
+	{
+		int row = dw_list.GetRow();
+		if (row<1 || row>dw_list.GetRowCount()) return 0;
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		if (!ele) return L"";
+		xstring taskid = ele.getAttribute(L"taskid");
+		return taskid;
+	}
+
+	xstring GetReason(LPARAM pr, xstring comd)
+	{
+		xaserverarg arg;
+
+		if (GetEntityName(pr) == L"DeliveryDelay")
+		{
+			xstring ls_cmdid = comd;//pr;
+			int row = dw_list.GetRow();
+			if (row < 1) return 1;
+			KXMLDOMElement ele = dw_list.GetRowElement(row);
+			xstring  ls_status = ele.selectSingleNode(L"@status").text();
+			if (ls_status == L"货源部待确认" && ls_cmdid == L"action:bill.check.agree")
+			{
+				arg.AddArg(L"DDID", GetEntityID(2));
+				arg.AddArg(L"_ModuelPage", L"dev:xpage[DeliveryDelay.supmancheck.vx]");
+				OpenWindow(L"dev:xpage[vindexforold.vx]", arg);
+				//openUrl(L"/sale/view/DeliveryDelay/xpage/DeliveryDelay/supmancheck", arg);
+				if (arg.GetArgString(L"ret") == L"Sucess")
+				{
+					return L"Auto...";
+				}
+				return L"";
+			}
+			else
+			{
+				//return frame::GetReason(pr);				
+				arg.AddArg(L"EntityID", GetEntityID(2));
+				arg.AddArg(L"_ModuelPage", L"dev:xpage[workflow.chkdlg.vx]");
+				OpenWindow(L"dev:xpage[vindexforold.vx]", arg);
+				//int newArg2 = arg.ptr_native_;
+				//openUrl(L"/sale/view/workflow.view/xpage/chkdlg_vd", newArg2);													
+				xstring comdid = arg.GetArgString(L"comdid");
+				if (comdid == L"xmOK")
+				{
+					xstring value = arg.GetArgString(L"content") + L" ";
+					return value;
+				}
+				return L"";
+			}
+		}
+		else
+		{
+			//return frame::GetReason(pr);
+			arg.AddArg(L"EntityID", GetEntityID(2));
+			OpenWindow(L"dev:xpage[workflow.chkdlg.vx]", arg);
+			//openUrl(L"/sale/view/workflow.view/xpage/chkdlg", arg);									
+			xstring comdid2 = arg.GetArgString(L"comdid");
+			if (comdid2 == L"xmOK")
+			{
+				xstring value2 = arg.GetArgString(L"content") + L" ";
+				return value2;
+			}
+			return L"";
+
+		}
+	}
+
+	int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
+	{
+		init();
+		return 1;
+	}
+
+	xstring GetEntityWorkNode(LPARAM pr, xstring what)
+	{
+		if (what == L"open")
+		{
+			int row = dw_list.GetRow();
+			if (row<0 || row>dw_list.GetRowCount()) return 0;
+			KXMLDOMElement ele = dw_list.GetRowElement(row);
+			xstring aurl = ele.selectSingleNode(L"@url").text();
+			return aurl;
+		}
+		return L"";
+	}
+
+
+	int SetAgent()
+	{
+		if (dw_list)
+		{
+			//init();
+			xstring id = GetEntityID(1);
+			if (id != L"")	xframe::SetAgent((xstring)L"letter", id);
+		}
+		return 1;
+	}
+
+
+	int openUrl(xstring aurl, /*param */ LPARAM para)
+	{
+		//alert(aurl);
+		xml x;
+
+		xurl::get(aurl, L"", x);
+		KXMLDOMDocument doc = x;
+		KXMLDOMNode n = doc.selectSingleNode(L"//resource/@src");
+		//alert(x.xml());
+		if (n)
+		{
+			/*
+			xstring xq = n.text();
+			OpenWindow(xq, para);
+			return 1;
+			*/
+
+			xstring xq = n.text();
+			if (doc.selectSingleNode(L"//resource/@argnative"))
+			{
+				OpenWindow(xq, para);
+			}
+
+			//alert(xq);
+			else if (xq.find(L"upplier", 0) > 0 and xq != L"dev:xpage[Maint.SupplierStatusModify.vx]" and xq != L"dev:xpage[Maint.SupplierSubmit.vx]")
+				OpenWindow(xq, para);
+			else
+			{
+				xq = xq.replace(L"dev:xpage[", L"");
+				xq = xq.replace(L"]", L"");
+				xaserverarg& args = *(xaserverarg*)para;
+				args.AddArg(L"_ModuelPage", xq);
+				//alert(args.GetString());
+				OpenWindow(L"dev:xpage[vindexforold.vx]", args);
+			}
+			return 1;
+		}
+		else
+		{
+			xaserverarg& arg = *(xaserverarg*)para;
+			n = doc.selectSingleNode(L"//resource[@vface!='' and @view!='']");
+			if (n)
+			{
+				xstring vface = n.selectSingleNode(L"@vface").text();
+				xstring view = n.selectSingleNode(L"@view").text();
+				xstring config = n.selectSingleNode(L"@config").text();
+				if (config != L"")
+				{
+					arg.AddArg(L"config", config, L"xs:xstring");
+				}
+				if (vface == L"." || vface == L"")
+				{
+					xstring v = n.selectSingleNode(L"@url").text();
+					xstring burl = aurl.mid(0, aurl.find(v, 0));
+					//alert(burl);
+					return openUrl(burl + view, arg);
+				}
+				else
+					return openUrl(vface + L"/" + view, arg);
+			}
+		}
+		return -1;
+	}
+
+	int SetTaskProcessed()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 1;
+		if (!dw_list.GetRowElement(row)) return 1;
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+
+		xaserverarg arg;
+
+		xstring taskid = ele.getAttribute(L"taskid");
+		arg.AddArg(L"TaskID", taskid);
+		xml x = ViewObject::RetrieveData(L"/sale/data/business/update/taskprocessed", L"TaskID", taskid);
+		if (x) alert(x.text());
+		dw_list.DeleteRow(row);
+
+		return 1;
+	}
+	int ProcessFlowAction(xstring comdid, LPARAM pr1)
+	{
+		if (comdid == L"__ModifyRows")
+		{
+			OnModifyRows();
+			return 1;
+		}
+
+		LPARAM  pr = pr1;
+		xstring action = comdid.mid(comdid.find(L"action:", 0) + 7, 9999);
+		if (action == L"bill.delete" || action == L"bill.deleteEx")
+		{
+			if (MessageBox(GetHWND(), L"是否确定删除记录!", L"提示", 1) == 2)
+				return 1;
+		}
+
+		if (action == L"bill.processed")
+		{
+			if (MessageBox(GetHWND(), L"是否确定选中的任务转已处理?", L"提示", 1) == 2)
+				return 1;
+			return  SetTaskProcessed();
+		}
+
+		xaserverarg arg;
+
+		arg.AddArg(L"Action", action, L"xs:xstring");
+		xml x;
+
+
+		xstring aurl = L"/workflow/query/actioninfo/" + action;
+
+		if (xurl::get(aurl, L"", x) != 1)
+			return -1;
+
+		int nlen;
+		int i = 0;
+		xstring name;
+		xstring worknode;
+		xstring how;
+		xstring state = L"";
+		xstring billstatus = L"";
+		KXMLDOMElement e;
+
+		arg.AddArg(L"EntityName", GetEntityName(pr), L"xs:xstring");
+		//参数要求
+		KXMLDOMNodeList nlist = x.selectNodes(L"//params/param");
+		nlen = nlist.length();
+
+		for (i = 0; i < nlen; i++)
+		{
+			e = nlist.item(i);
+			name = e.selectSingleNode(L"@name").text();
+			how = e.selectSingleNode(L"@how").text();
+
+			xstring content = L"";
+			if (how == L"Entity" || how == L"EntityData")
+			{
+				content = GetEntityData(pr);
+			}
+			if (e.selectSingleNode(L"@valid"))
+			{
+				if (content.find(L"update.modify", 0) > 0 || content.find(L"update.delete", 0) > 0) {}
+				else return 0;
+				if (CheckEntityValidity(pr) < 0) return -1;
+			}
+			if (how == L"EntityID")
+				arg.AddArg(name, GetEntityID(pr), L"xs:xstring");
+			else if (how == L"Entity" || how == L"EntityData")
+				arg.AddArg(name, content, L"xs:xstring");
+			else if (how == L"EntityRowData")
+				arg.AddArg(name, GetEntityRowData(pr), L"xs:xstring");
+			else if (how == L"Reason")
+			{
+				arg.AddArg(name, GetReason(1, L""), L"xs:xstring");
+			}
+			else if (how == L"EntityNo")
+				arg.AddArg(name, GetEntityNo(pr), L"xs:xstring");
+			else if (how == L"EntityTitle")
+				arg.AddArg(name, GetEntityTitle(pr), L"xs:xstring");
+			else if (how == L"GetParam")
+				arg.AddArg(name, GetParamValue(name), L"xs:xstring");
+			else if (how == L"UserID")
+				arg.AddArg(name, xaserver::GetUserId(), L"xs:xstring");
+			//"CHeckAskMsg"
+			//"CHeckMsg
+			if (how == L"Reason" && arg.GetArgString(name) == L"") return -1;
+			//if(how==L"EntityData" && arg.GetArgString(name)==L"") return -1;
+			if (e.selectSingleNode(L"@check"))
+			{
+
+				xstring doCheck = e.selectSingleNode(L"@check").text();
+				if (doCheck == L"Y")
+				{
+					xstring value = arg.GetArgString(name);
+					if (value == L"")
+					{
+						alert(name + L" 参数值不能为空,事件终止!");
+						return -1;
+					}
+				}
+			}
+		}
+
+		arg.AddArg(L"action.entity", GetEntityName(pr), L"xs:xstring");
+		ProcessUsedArg(arg);
+		//动作
+		KXMLDOMNode n = x.selectSingleNode(L"//view.action[1]");
+
+		bool execResult = true; //处理结果
+		if (n)
+		{
+			name = n.selectSingleNode(L"@name").text();
+			if (n.selectSingleNode(L"@worknode"))
+				worknode = n.selectSingleNode(L"@worknode").text();
+			else
+				worknode = GetEntityWorkNode(pr, name);
+			arg.AddArg(L"do", name, L"xs:xstring");
+			if (worknode != L"")
+			{
+				if (worknode.find(L"dev:xpage") == 0)
+					OpenWindow(worknode, arg);
+				else
+					openUrl(worknode, arg); //---openUrl(worknode,arg);
+			}
+			else
+			{
+				alert(L"Warn: Please configure worknode for action " + name + L".");
+				return -1;
+			}
+		}
+		else
+		{
+			//url::post(GetEntityName(pr)+L"/workflow/action",arg.GetString(),x);
+			xml x1;
+			int retxx = xurl::post(L"/workflow/action/" + GetEntityName(pr) + L"/" + action, arg.GetString(), x1);
+
+			//alert(L"/workflow/action/"+GetEntityName(pr)+L"/"+action+L"\r\n"+arg.GetString()+L"\r\n"+x1.xml());
+
+			if (retxx != 1) execResult = false;
+			if (x1.selectSingleNode(L"//process"))
+			{
+				KXMLDOMElement e1 = x1.selectSingleNode(L"//process");
+				xstring valid = e1.getAttribute(L"valid");
+				xstring finished = e1.getAttribute(L"finished");
+				xstring errInfo = L"";
+				if (valid == L"0")
+				{
+					errInfo = e1.getAttribute(L"errInfo");
+					alert(errInfo);
+					execResult = false;
+				}
+				else if (finished == L"0")
+				{
+					errInfo = e1.getAttribute(L"errInfo");
+					errInfo = L"处理失败!\r\n" + errInfo;
+					alert(errInfo);
+					execResult = false;
+				}
+			}
+			else if (x1.selectSingleNode(L"//process-check-list"))
+			{
+				KXMLDOMElement e2 = x1.selectSingleNode(L"//process-check-list");
+				xstring val = e2.getAttribute(L"process");
+				if (val == L"ok")
+				{
+					alert(L"处理成功");
+					PostMessage(GetHWND(), 0x401, (WPARAM)L"action:bill.refresh", 0);
+				}
+				else if (val == L"part")
+				{
+					alert(L"有部分数据处理未成功,提交成功的已处理。");
+					PostMessage(GetHWND(), 0x401, (WPARAM)L"action:bill.refresh", 0);
+				}
+				else
+					alert((xstring)L"数据处理不成功\r\n" + x1.xml());
+				return 1;
+			}
+			else if (x1.selectSingleNode(L"//msg"))
+			{
+				xstring aStr = x1.selectSingleNode(L"//msg[1]").text();
+				//if(aStr.find(L"理成功",0) < 0)
+				//	alert(aStr);
+				if (aStr.find(L"失败", 0) >= 0)
+					execResult = false;
+				alert(aStr);
+			}
+			if (x1.selectSingleNode(L"//msg/@state"))
+			{
+				state = x1.selectSingleNode(L"//msg[1]/@state").text();
+				arg.AddArg(L"state", state, L"xs:xstring");
+				billstatus = x1.selectSingleNode(L"//msg[1]/@billstatus").text();
+				arg.AddArg(L"billstatus", billstatus, L"xs:xstring");
+			}
+		}
+		//更新要求
+		if (execResult)
+		{
+			nlist = x.selectNodes(L"//view/update");
+			nlen = nlist.length();
+			for (i = 0; i < nlen; i++)
+			{
+				e = nlist.item(i);
+				how = e.selectSingleNode(L"@do").text();
+				if (how == L"setstate")
+				{
+					if (state != L"")
+					{
+						arg.AddArg(L"state", state, L"xs:xstring");
+						arg.AddArg(L"billstatus", billstatus, L"xs:xstring");
+						ViewUpdate(pr, how, arg);
+
+					}
+				}
+				else
+					ViewUpdate(pr, how, arg);
+			}
+		}
+
+
+		return 1;
+	}
+
+
+	/*int ProcessFlowAction(xstring comdid, int pr1)
+	{
+		//trace(L"comdid--->  %s\r\n", comdid);
+		if(comdid == L"__ModifyRows")
+		{
+			OnModifyRows();
+			return 1;
+		}
+
+		LPARAM  pr = pr1;
+		xstring action = comdid.mid(comdid.find(L"action:",0)+7,9999);
+		if(action == L"bill.delete" || action == L"bill.deleteEx")
+		{
+			if (MessageBox(GetHWND(),L"是否确定删除记录!",L"提示1",1) == 2)
+				return 1;
+		}
+
+		xaserverarg arg = new xaserverarg ;
+
+		arg.AddArg(L"Action", action,L"xs:xstring");
+		xml x ;
+		x.setNativePointer(xml ::CreateInstance());
+
+		xstring aurl = L"/workflow/query/actioninfo/"+action;
+		//trace(L"abc---",aurl);
+
+		if(xurl::get(aurl, L"", x) != 1)
+			return -1;
+		//alert(x.xml());
+		int nlen ;
+		int i = 0;
+		xstring name;
+		xstring worknode;
+		xstring how;
+		xstring state;
+		KXMLDOMElement e;
+
+		arg.AddArg(L"EntityName", GetEntityName(pr),L"xs:xstring");
+		//参数要求
+		KXMLDOMNodeList nlist = x.selectNodes(L"//params/param");
+		nlen = nlist.length;
+
+		//trace(L"xxx");
+		for(i=0;	i<nlen;	i++)
+		{
+			//trace(L"yyy");
+			e = nlist.item(i);
+			//trace(e.xml);
+			name = e.selectSingleNode(L"@name").text();
+			how = e.selectSingleNode(L"@how").text();
+			//trace(how);
+			//trace(name);
+			xstring content = L"";
+			if(how==L"Entity" || how == L"EntityData")
+				content = GetEntityData(pr);
+			if(e.selectSingleNode(L"@valid"))
+			{
+				if(content.find(L"update.modify", 0) > 0 || content.find(L"update.delete",0) > 0) {} else return 0;
+				if(CheckEntityValidity(pr) < 0) return -1;
+			}
+			if(how==L"EntityID")
+				arg.AddArg(name, GetEntityID(pr),L"xs:xstring");
+			else if(how==L"Entity" || how == L"EntityData")
+				arg.AddArg(name, content,L"xs:xstring");
+			else if(how==L"EntityRowData")
+				arg.AddArg(name, GetEntityRowData(pr),L"xs:xstring");
+			else if(how==L"Reason")
+				arg.AddArg(name, GetReason(pr, comdid),L"xs:xstring");
+			else if(how==L"EntityNo")
+				arg.AddArg(name, GetEntityNo(pr),L"xs:xstring");
+			else if(how==L"EntityTitle")
+				arg.AddArg(name, GetEntityTitle(pr),L"xs:xstring");
+			else if(how==L"GetParam")
+				arg.AddArg(name, GetParamValue(name),L"xs:xstring");
+			else if(how==L"UserID")
+				arg.AddArg(name, xaserver::GetUserId(),L"xs:xstring");
+			//"CHeckAskMsg"
+			//"CHeckMsg
+			//trace(arg.GetString());
+			//trace(arg.GetArgString(name));
+			if(how==L"Reason" && arg.GetArgString(name)==L"") return -1;
+			//trace(L"cky1");
+			//if(how==L"EntityData" && arg.GetArgString(name)==L"") return -1;
+			if(e.selectSingleNode(L"@check"))
+			{
+
+				xstring doCheck = e.selectSingleNode(L"@check").text();
+				if(doCheck == L"Y")
+				{
+					xstring value = arg.GetArgString(name);
+					if(value == L"")
+					{
+						alert(name + L" 参数值不能为空,事件终止!");
+						return -1;
+					}
+				}
+			}
+		}
+
+		arg.AddArg(L"action.entity",GetEntityName(pr),L"xs:xstring");
+		//trace(L"zzz");
+		//trace(arg.GetString());
+		//动作
+		KXMLDOMNode n = x.selectSingleNode(L"//view.action[1]");
+		//trace(x.xml());
+		bool execResult = true; //处理结果
+
+		if(n)
+		{
+			name = n.selectSingleNode(L"@name").text();
+			if(n.selectSingleNode(L"@worknode"))
+				worknode = n.selectSingleNode(L"@worknode").text();
+			else
+				worknode = GetEntityWorkNode(pr,name);
+			arg.AddArg(L"do",name,L"xs:xstring");
+			if(worknode !=L"")
+			{
+				//trace(L"do:"+worknode);
+				int p = arg.ptr_native_;
+				openUrl(worknode,p); //---openUrl(worknode,arg);
+			}
+			else
+			{
+				alert(L"Warn: Please configure worknode for action "+ name +L".");
+				return -1;
+			}
+		}
+		else
+		{
+			//url::post(GetEntityName(pr)+L"/workflow/action",arg.GetString(),x);
+			//trace(L"/workflow/action/"+GetEntityName(pr)+L"/"+action);
+			//trace(L"=====L");
+			//trace(arg.GetString());
+			xml x1 ;
+			x1.setNativePointer(xml::CreateInstance());
+			int retxx = url::post(L"/workflow/action/"+GetEntityName(pr)+L"/"+action,arg.GetString(),x1);
+			if(retxx != 1) execResult = false;
+			//trace(x1.xml());
+			if(x1.selectSingleNode(L"//msg"))
+			{
+				xstring aStr = L""+x1.selectSingleNode(L"//msg[1]").text();
+				if(aStr.find(L"理成功",0) < 0)
+					alert(aStr);
+				if(aStr.find(L"失败",0) >= 0)
+					execResult = false;
+				trace(aStr);
+			}
+			if(x1.selectSingleNode(L"//msg/@state"))
+			{
+				state = x1.selectSingleNode(L"//msg[1]/@state").text();
+				arg.AddArg(L"state",state,L"xs:xstring");
+			}
+		}
+		//更新要求
+		if(execResult)
+		{
+			nlist = x.selectNodes(L"//view/update");
+			nlen = nlist.length;
+			for(i=0;	i<nlen;	i++)
+			{
+				 e = nlist.item(i);
+				how = e.selectSingleNode(L"@do").text();
+				//trace(how+L"444"+state);
+				if(how==L"setstate")
+				{
+					if(state != L"")
+					{
+						arg.AddArg(L"state",state,L"xs:xstring");
+						ViewUpdate(pr,how,arg);
+
+					}
+				}
+				else
+					ViewUpdate(pr,how,arg);
+			}
+		}
+
+
+		return 1;
+	}	*/
+
+	int BillPurchor()
+	{
+		int row1 = dw_list.GetRow();
+		if (row1<0 || row1>dw_list.GetRowCount()) return 1;
+		if (!dw_list.GetRowElement(row1)) return 1;
+		KXMLDOMElement ele1 = dw_list.GetRowElement(row1);
+		xstring id1 = GetEntityIDName(1);
+		xstring d1 = ele1.selectSingleNode(id1).text();
+		xstring name1 = GetEntityName(row1);
+
+		xaserverarg arg1;
+		xstring templ = ele1.getAttribute(L"content2");
+		xstring taskid = ele1.getAttribute(L"taskid");
+		arg1.AddArg(L"template", templ);
+		arg1.AddArg(L"TaskID", taskid);
+		arg1.AddArg(L"EntityID", d1);
+		arg1.AddArg(L"bill.purchor", L"1");
+
+		OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1);
+
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		//alert(comdid);
+		xstring  userno = publiccode::GetUser().no;
+
+		if (comdid == L"action:bill.purchor") return BillPurchor();
+		if (comdid == L"action:bill.check.agree")
+		{
+			int row3 = dw_list.GetRow();
+			if (row3<0 || row3>dw_list.GetRowCount()) return 1;
+			if (!dw_list.GetRowElement(row3)) return 1;
+			KXMLDOMElement ele3 = dw_list.GetRowElement(row3);
+			xstring id3 = GetEntityIDName(1);
+			xstring d3 = ele3.selectSingleNode(id3).text();
+			xstring name3 = GetEntityName(row3);
+
+			if (name3 == L"SaleItem3")
+			{
+				xml x3;
+				xaserverarg arg3;
+				arg3.AddArg(L"SOLineID", d3);
+				if (getUrl(L"/sale/data/SaleOrder/UpdateSOLineTypeExS", arg3.GetString(), x3) != 1)
+				{
+					xstring error3 = x3.text();
+					alert(L"err:" + error3);
+					return 1;
+				}
+				ProcessFlowAction(L"action:bill.check.agree", 1);
+				return 1;
+			}
+		}
+		if (userno == L"00601" || userno == L"00701" || userno == L"admin")
+		{
+			if (comdid == L"SourceRemark")
+			{
+				OnSourceRemark();
+				return 1;
+			}
+		}
+		if (comdid == L"action:bill.check.agreeEx")
+		{
+			int row2 = dw_list.GetRow();
+			if (row2<0 || row2>dw_list.GetRowCount()) return 1;
+			if (!dw_list.GetRowElement(row2)) return 1;
+			KXMLDOMElement ele2 = dw_list.GetRowElement(row2);
+			xstring id2 = GetEntityIDName(1);
+			xstring d2 = ele2.selectSingleNode(id2).text();
+			xstring name2 = GetEntityName(row2);
+
+			if (name2 == L"SaleItem3")
+			{
+				if (MessageBox(GetHWND(), L"是否确认 工厂付款?", L"提示1", 1) == 2)
+					return 1;
+
+				xml x5;
+				xaserverarg arg5;
+				arg5.AddArg(L"SOLineID", d2);
+				if (getUrl(L"/sale/data/SaleOrder/UpdateSOLineTypeEx", arg5.GetString(), x5) != 1)
+				{
+					xstring error = x5.text();
+					alert(L"err:" + error);
+					return 1;
+				}
+				alert(x5.text());
+				ProcessFlowAction(L"action:bill.check.agree", 1);
+				return 1;
+			}
+		}
+
+		if (comdid && comdid.find(L"hand!", 0) == 0)
+		{
+			if (comdid == L"hand!toleft")
+			{
+				ProcessFlowAction(L"action:bill.check.unagree", 1);
+				return 1;
+			}
+			if (comdid == L"hand!toright")
+			{
+				ProcessFlowAction(L"action:bill.check.agree", 1);
+				return 1;
+			}
+			if (comdid == L"hand!toupright")
+			{
+				int row = dw_list.GetRow();
+				if (row<0 || row>dw_list.GetRowCount()) return 1;
+				if (!dw_list.GetRowElement(row)) return 1;
+				KXMLDOMElement ele = dw_list.GetRowElement(row);
+				xstring id = GetEntityIDName(1);
+				xstring d = ele.selectSingleNode(id).text();
+				if (d == L"") return 1;
+				ProcessFlowAction(L"action:bill.open", 1);
+				return 1;
+			}
+			if (comdid == L"hand!round")
+			{
+				ProcessFlowAction(L"action:bill.note", 1);
+				return 1;
+			}
+
+		}
+		if (comdid == L"xmIconNotifyClicked")
+		{
+			//OpenWindow(L"dev:xpage[/]",0);
+			init();
+			return 1;
+		}
+		if (comdid == L"xmRefresh" || comdid == L"xmRefreshTask")
+		{
+			init();
+			return 1;
+		}
+		if (ProcessFlowAction(comdid, 1) == 0) return 0;
+		if (comdid == L"action:bill.open")
+		{
+			int row1 = dw_list.GetRow();
+			if (row1<0 || row1>dw_list.GetRowCount()) return 1;
+			if (!dw_list.GetRowElement(row1)) return 1;
+			KXMLDOMElement ele1 = dw_list.GetRowElement(row1);
+			xstring id1 = GetEntityIDName(1);
+			xstring d1 = ele1.selectSingleNode(id1).text();
+			xstring name1 = GetEntityName(row1);
+
+			if (name1 == L"QuoteEnquiry")
+			{
+				xaserverarg arg1;
+				xstring templ = ele1.getAttribute(L"content2");
+				xstring taskid = ele1.getAttribute(L"taskid");
+				arg1.AddArg(L"template", templ);
+				arg1.AddArg(L"TaskID", taskid);
+				arg1.AddArg(L"EntityID", d1);
+
+				OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1);
+				return 1;
+			}
+			if (name1 == L"SampleFee")
+			{
+				xaserverarg arg;
+
+				arg.AddArg(L"SampleFeeID", d1);
+				//arg.AddArg(L"HWND",GetHWND().toString());
+				OpenWindow(L"dev:xpage[maint.samplefee.vx]", arg);
+				return 1;
+			}
+		}
+		return 0;
+	}
+
+	int OnSourceRemark()
+	{
+		xstring name = L"事务处理";
+		xml x = ViewObject::RetrieveData(L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+		KXMLDOMNodeList items = x.selectNodes(L"data/Item");
+		KXMLDOMNode t = items.item(0);
+		xstring Content = L"";
+		if (t.selectSingleNode(L"Content"))
+		{
+			Content = t.selectSingleNode(L"Content").text();
+		}
+		xaserverarg arg1;
+		arg1.AddArg(L"value", Content);
+		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1);
+
+		return 1;
+	}
+
+	int OnDoubleClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		if (row<0 || row>dw_list.GetRowCount()) return 1;
+		if (!dw_list.GetRowElement(row)) return 1;
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		xstring id = GetEntityIDName(1);
+		xstring d = ele.selectSingleNode(id).text();
+		if (d == L"") return 1;
+
+		xstring name1 = GetEntityName(1);
+		if (name1 == L"QuoteEnquiry")
+		{
+			xaserverarg arg1;
+			xstring templ = ele.getAttribute(L"content2");
+			xstring taskid = ele.getAttribute(L"taskid");
+			//trace(templ);
+			arg1.AddArg(L"template", templ);
+			arg1.AddArg(L"TaskID", taskid);
+			arg1.AddArg(L"EntityID", d);
+
+			OpenWindow(L"dev:xpage[QuoteFile.vx]", arg1);
+			return 1;
+		}
+
+		ProcessFlowAction(L"action:bill.open", 1);
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM param)
+	{
+		SetAgent();
+		//重置工具条
+		return 1;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM p)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int ShowDetail(int row)
+	{
+
+		if (row<0 || row>dw_list.GetRowCount()) return 1;
+
+		if (!dw_list.GetRowElement(row)) return 1;
+
+
+
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		trace((xstring)L"\r\n====113======L" + ele.xml());
+		dw_list.SetRow(row);
+		if (GetEntityID(1) == L"") return -1;
+
+		//trace(ele.xml);
+		xaserverarg arg;
+
+		arg.AddArg(L"content", ele.xml());
+		xml doc;
+
+		if (getUrl(L"/sale/data/vpage/vstart/task", arg.GetString(), doc) != 1)
+		{
+			trace((xstring)L"error->:" + doc.xml());
+			return 0;
+		}
+		//trace(L"----1111----");
+		if ((xstring)doc.xml() == L"")
+			return -1;
+
+		//trace(doc.xml());
+
+		xshtml ht = GetControl(L"taskinfo");
+		ht.SetContent(doc.xml());
+		ht.Redraw();
+
+		//xframe::SetAgent((xstring)L"letter", GetEntityID(1));
+
+		return 1;
+	}
+
+	int OnClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+
+		trace(L"count:" + (xstring)dw_list.GetRowCount());
+		if (row<1 || row>dw_list.GetRowCount()) return 1;
+
+		trace(L"\r\n-------" + (xstring)row);
+
+		if (ShowDetail(row) != 1)
+		{
+			xstring xfNodeAgentArea = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			this->SetAgentNode(anode, L"<vbox/>");
+		}
+		else
+			SetAgent();
+
+		return 1;
+	}
+
+	int OnRowChanged(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		trace(L"\r\n-----222------");
+		if (ShowDetail(row) != 1)
+		{
+			xstring xfNodeAgentArea = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			this->SetAgentNode(anode, L"<vbox/>");
+		}
+		else
+			SetAgent();
+
+		return 1;
+	}
+
+	int onload()
+	{
+		//alert(L"xxxxxxxxxxx");
+		//SetAgent();
+		//AttachEvent(L"WM_SETFOCUS", (FEvent)&startvframevbusiness::OnSetFocus);
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&startvframevbusiness::OnXCommand);
+		//AttachEvent(L"WM_TIMER",OnTimer);
+		AttachEvent(L"tasklist", L"DWV_ROWFOCUSCHANGED", (FEvent)&startvframevbusiness::OnRowChanged);
+		AttachEvent(L"tasklist", L"DWV_DOUBLECLICKED", (FEvent)&startvframevbusiness::OnDoubleClicked);
+		AttachEvent(L"tasklist", L"DWV_CLICKED", (FEvent)&startvframevbusiness::OnClicked);
+
+		dw_list = GetControl(L"tasklist");
+
+		init();
+
+		SetAgent();
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		return 1;
+	}
+};
+
+
+
+
+
diff --git a/jrj/xframe/kobject/kreport.hpp b/jrj/xframe/kobject/kreport.hpp
index 716af38..7a22820 100644
--- a/jrj/xframe/kobject/kreport.hpp
+++ b/jrj/xframe/kobject/kreport.hpp
@@ -1,101 +1,103 @@
-#pragma once
-#include "kcontrol.hpp"
-#include "kdwview.hpp"
-
-namespace Hxsoft{ namespace XFrame{ namespace XOffice {namespace XReport
-{
-	class IXReport : public IDwView //public IXFControl
-	{
-	public:
-		//enum RowStatus{rs_new=0,rs_newmodified,rs_datamodified,rs_datanotmodified};
-		//enum DWBuffer{dbuf_normal=0,dbuf_filter,dbuf_delete};
-
-	public:
-		int GetRow_();
-		int GetColumn_();
-
-		int GetRowCount_();
-		int SetRow_(int row);
-	public:
-		int GetColumnCount_();
-		LPCTSTR GetColumnName_(int col);
-		int GetColumnIndex_(LPCTSTR pColumn);
-	public:
-		LPCTSTR GetItemString_(int nRow,int nColumn,DWBuffer dwBuffer=dbuf_normal);
-		LPCTSTR GetItemString_(int nRow,LPCTSTR ColumnName,DWBuffer dwBuffer=dbuf_normal);
-		bool SetItemString_(int nRow,int nColumn,LPCTSTR lptStr,DWBuffer dwBuffer=dbuf_normal);
-		bool SetItemString_(int nRow,LPCTSTR ColumnName,LPCTSTR lptStr,DWBuffer dwBuffer=dbuf_normal);
-	public:
-		int InsertRow_(int nRow);
-		int DeleteRow_(int nRow);
-	public:
-		int  GetXml_(BSTR &bstr);
-		int  GetXml_(BSTR &bstr,LPCTSTR pGuid);
-		int  LoadXml_(BSTR bstr);
-		int Load_(KXMLDOMElement  pElement);
-	public:
-		int SetReadOnly_(bool bReadOnly=true);
-	public:
-		int SelectRow_(int nRow,bool bSelect=true);
-		int SelectRow_(int sRow,int eRow, bool bSelect=true);
-		int GetNextSelectRow_(int nStartRow);
-		bool IsRowSelected_(int nRow);
-		//int SetSelectBkColor_(COLORREF color);
-		int SetSelectionMode_(int nMode); //0 unselection 1 singleSelection 2 multiselection 3 multiselectionex 
-
-	public:
-		int DwUpdateTo_(KXMLDOMDocument pXmlDoc);
-		int DwUpdateAllTo_(KXMLDOMDocument pXmlDoc);
-	public:
-		int Retrieve_(LPCTSTR pServer,LPCTSTR pDataUrl, LPCTSTR pArgStr) ;//璇诲彇鏁版嵁
-		int Retrieve_(ITrans *pTrans,LPCTSTR pDataUrl, LPCTSTR pArgStr);//璇诲彇鏁版嵁
-		int Retrieve_(LPCTSTR pDataUrl, LPCTSTR pArgStr) ;//璇诲彇鏁版嵁
-
-		int Retrieve_(KXMLDOMElement  pElement);//璇诲彇鏁版嵁
-		int Retrieve_(KXMLDOMDocument &xml);//璇诲彇鏁版嵁
-
-	public:
-		virtual int SetDataObject_(LPCTSTR pServer,LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
-		virtual int SetDataObject_(ITrans *pTrans,LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
-		virtual int SetDataObject_(LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
-
-		virtual int SetDataObject_(KXMLDOMElement  pElement) ;//璁剧疆妯℃澘瀵硅薄
-		virtual int SetDataObject_(KXMLDOMDocument  pDoc);
-	public:
-		int ImportFile_() ;
-		int ImportFile_(LPCTSTR pStrFile,LPCTSTR pType=NULL,bool Header = false);
-		int ImportString_(LPCTSTR pStr,LPCTSTR pType=NULL,bool Header = false);
-	
-	public:
-		int	Reset_();
-		int	ResetUpdateStatus_();
-
-	public:
-		int event_ItemFocusChanged_(int nRow,int nCol);
-		int event_RowFocusChanged_(int nRow,int nOldRow);
-		int event_GetFocus_();
-		int event_LoseFocus_();
-		int event_ItemChanged_(int nRow,int nCol,LPCTSTR pData);
-		int event_ItemChanging_(int nRow,int nCol,LPCTSTR pData);
-	public:
-		int GetDwType_();
-	public:
-		Hxsoft::XFrame::KXMLDOMElement  GetRowElement(int nRow);
-	public:
-		int InsertCol(int nCol,LPCTSTR pCaption,LPCTSTR pColName,int nWidth,LPCTSTR pColPath = NULL,LPCTSTR pStyleClass=NULL,
-			LPCTSTR pEditClass=NULL,LPCTSTR pFormatClass=NULL);
-		int RemoveCol(int nCol);
-		int RemoveVCol(int nCol);
-		int RemoveCol(LPCTSTR pColName);
-
-		int AddEditStyle(LPCTSTR pName, LPCTSTR pStr);
-		int RemoveEditStyle(LPCTSTR pName, LPCTSTR pStr);
-		int SetColEditStyle(LPCTSTR pColName,LPCTSTR pClassName);
-		int SetDDLBData(LPCTSTR pColName,LPCTSTR pData);
-		LPCTSTR GetDDLBData(LPCTSTR pColName);
-
-	public:
-		int CreateTree(LPCTSTR pPath,int nCol, int nImage1,int nImage2);
-		int GetContentRow(int nRow);
-	};
-}}}}
+#pragma once
+#include "kcontrol.hpp"
+#include "kdwview.hpp"
+
+namespace Hxsoft{ namespace XFrame{ namespace XOffice {namespace XReport
+{
+	class IXReport : public IDwView //public IXFControl
+	{
+	public:
+		//enum RowStatus{rs_new=0,rs_newmodified,rs_datamodified,rs_datanotmodified};
+		//enum DWBuffer{dbuf_normal=0,dbuf_filter,dbuf_delete};
+
+	public:
+		int GetRow_();
+		int GetColumn_();
+
+		int GetRowCount_();
+		int SetRow_(int row);
+	public:
+		int GetColumnCount_();
+		LPCTSTR GetColumnName_(int col);
+		int GetColumnIndex_(LPCTSTR pColumn);
+	public:
+		LPCTSTR GetItemString_(int nRow,int nColumn,DWBuffer dwBuffer=dbuf_normal);
+		LPCTSTR GetItemString_(int nRow,LPCTSTR ColumnName,DWBuffer dwBuffer=dbuf_normal);
+		bool SetItemString_(int nRow,int nColumn,LPCTSTR lptStr,DWBuffer dwBuffer=dbuf_normal);
+		bool SetItemString_(int nRow,LPCTSTR ColumnName,LPCTSTR lptStr,DWBuffer dwBuffer=dbuf_normal);
+	public:
+		int InsertRow_(int nRow);
+		int DeleteRow_(int nRow);
+	public:
+		int  GetXml_(BSTR &bstr);
+		int  GetXml_(BSTR &bstr,LPCTSTR pGuid);
+		int  LoadXml_(BSTR bstr);
+		int Load_(KXMLDOMElement  pElement);
+	public:
+		int SetReadOnly_(bool bReadOnly=true);
+	public:
+		int SelectRow_(int nRow,bool bSelect=true);
+		int SelectRow_(int sRow,int eRow, bool bSelect=true);
+		int GetNextSelectRow_(int nStartRow);
+		bool IsRowSelected_(int nRow);
+		//int SetSelectBkColor_(COLORREF color);
+		int SetSelectionMode_(int nMode); //0 unselection 1 singleSelection 2 multiselection 3 multiselectionex 
+
+	public:
+		int DwUpdateTo_(KXMLDOMDocument pXmlDoc);
+		int DwUpdateAllTo_(KXMLDOMDocument pXmlDoc);
+	public:
+		int Retrieve_(LPCTSTR pServer,LPCTSTR pDataUrl, LPCTSTR pArgStr) ;//璇诲彇鏁版嵁
+		int Retrieve_(ITrans *pTrans,LPCTSTR pDataUrl, LPCTSTR pArgStr);//璇诲彇鏁版嵁
+		int Retrieve_(LPCTSTR pDataUrl, LPCTSTR pArgStr) ;//璇诲彇鏁版嵁
+
+		int Retrieve_(KXMLDOMElement  pElement);//璇诲彇鏁版嵁
+		int Retrieve_(KXMLDOMDocument &xml);//璇诲彇鏁版嵁
+
+	public:
+		virtual int SetDataObject_(LPCTSTR pServer,LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
+		virtual int SetDataObject_(ITrans *pTrans,LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
+		virtual int SetDataObject_(LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
+
+		virtual int SetDataObject_(KXMLDOMElement  pElement) ;//璁剧疆妯℃澘瀵硅薄
+		virtual int SetDataObject_(KXMLDOMDocument  pDoc);
+	public:
+		int ImportFile_() ;
+		int ImportFile_(LPCTSTR pStrFile,LPCTSTR pType=NULL,bool Header = false);
+		int ImportString_(LPCTSTR pStr,LPCTSTR pType=NULL,bool Header = false);
+	
+	public:
+		int	Reset_();
+		int	ResetUpdateStatus_();
+
+	public:
+		int event_ItemFocusChanged_(int nRow,int nCol);
+		int event_RowFocusChanged_(int nRow,int nOldRow);
+		int event_GetFocus_();
+		int event_LoseFocus_();
+		int event_ItemChanged_(int nRow,int nCol,LPCTSTR pData);
+		int event_ItemChanging_(int nRow,int nCol,LPCTSTR pData);
+	public:
+		int GetDwType_();
+	public:
+		Hxsoft::XFrame::KXMLDOMElement  GetRowElement(int nRow);
+	public:
+		int InsertCol(int nCol,LPCTSTR pCaption,LPCTSTR pColName,int nWidth,LPCTSTR pColPath = NULL,LPCTSTR pStyleClass=NULL,
+			LPCTSTR pEditClass=NULL,LPCTSTR pFormatClass=NULL);
+		int RemoveCol(int nCol);
+		int RemoveVCol(int nCol);
+		int RemoveCol(LPCTSTR pColName);
+
+		int AddEditStyle(LPCTSTR pName, LPCTSTR pStr);
+		int RemoveEditStyle(LPCTSTR pName, LPCTSTR pStr);
+		int SetColEditStyle(LPCTSTR pColName,LPCTSTR pClassName);
+		int SetDDLBData(LPCTSTR pColName,LPCTSTR pData);
+		LPCTSTR GetDDLBData(LPCTSTR pColName);
+
+	public:
+		int CreateTree(LPCTSTR pPath, int nCol, int nImage1, int nImage2);
+		int CreateTree(LPCTSTR pPath, LPCTSTR pValPath, LPCTSTR pVal,int nCol, int nImage1, int nImage2);
+		
+		int GetContentRow(int nRow);
+	};
+}}}}
diff --git a/jrj/xframe/xcontrol/xreport.hpp b/jrj/xframe/xcontrol/xreport.hpp
index a97b212..2045f48 100644
--- a/jrj/xframe/xcontrol/xreport.hpp
+++ b/jrj/xframe/xcontrol/xreport.hpp
@@ -1,127 +1,131 @@
-锘�#pragma once
-
-#include "wobject/xcontrol.hpp"
-#include "kobject/kreport.hpp"
-
-using kreport = Hxsoft::XFrame::XOffice::XReport::IXReport;
-using KXMLDOMDocument = Hxsoft::XFrame::KXMLDOMDocument;
-using KXMLDOMElement = Hxsoft::XFrame::KXMLDOMElement;
-class xreport : public xcontrol
-{
-	public:
-		xreport():xcontrol(nullptr){}
-		xreport(void * implptr):xcontrol(implptr){}
-		kreport * getKReport(){return (kreport*)this->GetNativePtr();}
-	public:
-		int GetRow(){return getKReport()->GetRow_();}
-		int GetColumn(){return getKReport()->GetColumn_();}
-
-		int GetRowCount(){return getKReport()->GetRowCount_();}
-		int SetRow(int row){return getKReport()->SetRow_(row);}
-	public:
-		int GetColumnCount(){return getKReport()->GetColumnCount_();}
-		LPCTSTR GetColumnName(int col){return getKReport()->GetColumnName_(col);}
-		int GetColumnIndex(LPCTSTR pColumn){return getKReport()->GetColumnIndex_(pColumn);}
-	public:
-		LPCTSTR GetItemString(int nRow,int nColumn,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
-		{
-			return getKReport()->GetItemString_(nRow,nColumn,dwBuffer);
-		}
-		LPCTSTR GetItemString(int nRow,LPCTSTR ColumnName,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
-		{
-			return getKReport()->GetItemString_(nRow,ColumnName,dwBuffer);
-		}
-		bool SetItemString(int nRow,int nColumn,LPCTSTR lptStr,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
-		{
-			return getKReport()->SetItemString_(nRow,nColumn,lptStr,dwBuffer);
-		}
-		bool SetItemString(int nRow,LPCTSTR ColumnName,LPCTSTR lptStr,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
-		{
-			return getKReport()->SetItemString_(nRow,ColumnName,lptStr,dwBuffer);
-		}
-	public:
-		int InsertRow(int nRow){return getKReport()->InsertRow_(nRow);}
-		int DeleteRow(int nRow){return getKReport()->DeleteRow_(nRow);}
-	public:
-		int  GetXml(BSTR &bstr){return getKReport()->GetXml_(bstr);}
-		int  GetXml(BSTR &bstr,LPCTSTR pGuid){return getKReport()->GetXml_(bstr,pGuid);}
-		int  LoadXml(BSTR bstr){return getKReport()->LoadXml_(bstr);}
-		int Load(KXMLDOMElement  pElement){return getKReport()->Load_(pElement);}
-	public:
-		int SetReadOnly(bool bReadOnly=true){return getKReport()->SetReadOnly_(bReadOnly);}
-	public:
-		int SelectRow(int nRow,bool bSelect=true){return getKReport()->SelectRow_(nRow,bSelect);}
-		int SelectRow(int sRow,int eRow, bool bSelect=true){return getKReport()->SelectRow_(sRow,eRow,bSelect);}
-		int GetNextSelectRow(int nStartRow){return getKReport()->GetNextSelectRow_(nStartRow);}
-		bool IsRowSelected(int nRow){return getKReport()->IsRowSelected_(nRow);}
-		//int SetSelectBkColor(COLORREF color){return getKReport()->SetSelectBkColor_(color);}
-		int SetSelectionMode(int nMode){return getKReport()->SetSelectionMode_(nMode);} //0 unselection 1 singleSelection 2 multiselection 3 multiselectionex 
-
-	public:
-		int DwUpdateTo(KXMLDOMDocument pXmlDoc){return getKReport()->DwUpdateTo_(pXmlDoc);}
-		int DwUpdateAllTo(KXMLDOMDocument pXmlDoc){return getKReport()->DwUpdateAllTo_(pXmlDoc);}
-	public:
-		int Retrieve(LPCTSTR pServer,LPCTSTR pDataUrl, LPCTSTR pArgStr) {return getKReport()->Retrieve_(pServer,pDataUrl,pArgStr);}//璇诲彇鏁版嵁
-		//int Retrieve(ITrans *pTrans,LPCTSTR pDataUrl, LPCTSTR pArgStr);//璇诲彇鏁版嵁
-		int Retrieve(LPCTSTR pDataUrl, LPCTSTR pArgStr) {return getKReport()->Retrieve_(pDataUrl,pArgStr);}//璇诲彇鏁版嵁
-
-		int Retrieve(KXMLDOMElement  pElement){return getKReport()->Retrieve_(pElement);}//璇诲彇鏁版嵁
-		int Retrieve(KXMLDOMDocument &xml){return  getKReport()->Retrieve_(xml);}//璇诲彇鏁版嵁
-
-	public:
-		int SetDataObject(LPCTSTR pServer,LPCTSTR pUrl) {return getKReport()->SetDataObject_(pServer,pUrl);}//璁剧疆妯℃澘瀵硅薄
-		//virtual int SetDataObject(ITrans *pTrans,LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
-		int SetDataObject(LPCTSTR pUrl) {return getKReport()->SetDataObject_(pUrl);}//璁剧疆妯℃澘瀵硅薄
-
-		int SetDataObject(KXMLDOMElement  pElement) {return getKReport()->SetDataObject_(pElement);}//璁剧疆妯℃澘瀵硅薄
-		int SetDataObject(KXMLDOMDocument  pDoc){return getKReport()->SetDataObject_(pDoc);}
-	public:
-		int ImportFile() {return getKReport()->ImportFile_();}
-		int ImportFile(LPCTSTR pStrFile,LPCTSTR pType=NULL,bool Header = false){return getKReport()->ImportFile_(pStrFile,pType,Header);}
-		int ImportString(LPCTSTR pStr,LPCTSTR pType=NULL,bool Header = false){return getKReport()->ImportString_(pStr,pType,Header);}
-	
-	public:
-		int	Reset(){return getKReport()->Reset_();}
-		int	ResetUpdateStatus(){return getKReport()->ResetUpdateStatus_();}
-
-	public:
-		int event_ItemFocusChanged(int nRow,int nCol){return getKReport()->event_ItemFocusChanged_(nRow,nCol);}
-		int event_RowFocusChanged(int nRow,int nOldRow){return getKReport()->event_RowFocusChanged_(nRow,nOldRow);}
-		int event_GetFocus(){return getKReport()->event_GetFocus_();}
-		int event_LoseFocus(){return getKReport()->event_LoseFocus_();}
-		int event_ItemChanged(int nRow,int nCol,LPCTSTR pData){return getKReport()->event_ItemChanged_(nRow,nCol,pData);}
-		int event_ItemChanging(int nRow,int nCol,LPCTSTR pData){return getKReport()->event_ItemChanging_(nRow,nCol,pData);}
-	public:
-		int GetDwType(){return getKReport()->GetDwType_();}
-	public:
-		KXMLDOMElement  GetRowElement(int nRow){return getKReport()->GetRowElement(nRow);}
-	public:
-		int InsertCol(int nCol,LPCTSTR pCaption,LPCTSTR pColName,int nWidth,LPCTSTR pColPath = NULL,LPCTSTR pStyleClass=NULL,
-			LPCTSTR pEditClass=NULL,LPCTSTR pFormatClass=NULL)
-		{
-			return  getKReport()->InsertCol(nCol,pCaption,pColName,nWidth,pColPath,pStyleClass,pEditClass,pFormatClass);
-		}
-		int RemoveCol(int nCol){return getKReport()->RemoveCol(nCol);}
-		int RemoveVCol(int nCol){return getKReport()->RemoveVCol(nCol);}
-		int RemoveCol(LPCTSTR pColName){return getKReport()->RemoveCol(pColName);}
-
-		int AddEditStyle(LPCTSTR pName, LPCTSTR pStr){return getKReport()->AddEditStyle(pName,pStr);}
-		int RemoveEditStyle(LPCTSTR pName, LPCTSTR pStr){return getKReport()->RemoveEditStyle(pName,pStr);}
-		int SetColEditStyle(LPCTSTR pColName,LPCTSTR pClassName){return getKReport()->SetColEditStyle(pColName,pClassName);}
-		int SetDDLBData(LPCTSTR pColName,LPCTSTR pData){return getKReport()->SetDDLBData(pColName,pData);}
-		LPCTSTR GetDDLBData(LPCTSTR pColName){return getKReport()->GetDDLBData(pColName);}
-	public:
-		int CreateTree(LPCWSTR pPath,int nCol, int nImage1,int nImage2)
-		{
-			return getKReport()->CreateTree(pPath,nCol,nImage1,nImage2);
-		}
-		int GetContentRow(int nRow)
-		{
-			return getKReport()->GetContentRow(nRow);
-		}
-
-};
-
-
-
-
+锘�#pragma once
+
+#include "wobject/xcontrol.hpp"
+#include "kobject/kreport.hpp"
+
+using kreport = Hxsoft::XFrame::XOffice::XReport::IXReport;
+using KXMLDOMDocument = Hxsoft::XFrame::KXMLDOMDocument;
+using KXMLDOMElement = Hxsoft::XFrame::KXMLDOMElement;
+class xreport : public xcontrol
+{
+	public:
+		xreport():xcontrol(nullptr){}
+		xreport(void * implptr):xcontrol(implptr){}
+		kreport * getKReport(){return (kreport*)this->GetNativePtr();}
+	public:
+		int GetRow(){return getKReport()->GetRow_();}
+		int GetColumn(){return getKReport()->GetColumn_();}
+
+		int GetRowCount(){return getKReport()->GetRowCount_();}
+		int SetRow(int row){return getKReport()->SetRow_(row);}
+	public:
+		int GetColumnCount(){return getKReport()->GetColumnCount_();}
+		LPCTSTR GetColumnName(int col){return getKReport()->GetColumnName_(col);}
+		int GetColumnIndex(LPCTSTR pColumn){return getKReport()->GetColumnIndex_(pColumn);}
+	public:
+		LPCTSTR GetItemString(int nRow,int nColumn,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
+		{
+			return getKReport()->GetItemString_(nRow,nColumn,dwBuffer);
+		}
+		LPCTSTR GetItemString(int nRow,LPCTSTR ColumnName,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
+		{
+			return getKReport()->GetItemString_(nRow,ColumnName,dwBuffer);
+		}
+		bool SetItemString(int nRow,int nColumn,LPCTSTR lptStr,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
+		{
+			return getKReport()->SetItemString_(nRow,nColumn,lptStr,dwBuffer);
+		}
+		bool SetItemString(int nRow,LPCTSTR ColumnName,LPCTSTR lptStr,kreport::DWBuffer dwBuffer=kreport::dbuf_normal)
+		{
+			return getKReport()->SetItemString_(nRow,ColumnName,lptStr,dwBuffer);
+		}
+	public:
+		int InsertRow(int nRow){return getKReport()->InsertRow_(nRow);}
+		int DeleteRow(int nRow){return getKReport()->DeleteRow_(nRow);}
+	public:
+		int  GetXml(BSTR &bstr){return getKReport()->GetXml_(bstr);}
+		int  GetXml(BSTR &bstr,LPCTSTR pGuid){return getKReport()->GetXml_(bstr,pGuid);}
+		int  LoadXml(BSTR bstr){return getKReport()->LoadXml_(bstr);}
+		int Load(KXMLDOMElement  pElement){return getKReport()->Load_(pElement);}
+	public:
+		int SetReadOnly(bool bReadOnly=true){return getKReport()->SetReadOnly_(bReadOnly);}
+	public:
+		int SelectRow(int nRow,bool bSelect=true){return getKReport()->SelectRow_(nRow,bSelect);}
+		int SelectRow(int sRow,int eRow, bool bSelect=true){return getKReport()->SelectRow_(sRow,eRow,bSelect);}
+		int GetNextSelectRow(int nStartRow){return getKReport()->GetNextSelectRow_(nStartRow);}
+		bool IsRowSelected(int nRow){return getKReport()->IsRowSelected_(nRow);}
+		//int SetSelectBkColor(COLORREF color){return getKReport()->SetSelectBkColor_(color);}
+		int SetSelectionMode(int nMode){return getKReport()->SetSelectionMode_(nMode);} //0 unselection 1 singleSelection 2 multiselection 3 multiselectionex 
+
+	public:
+		int DwUpdateTo(KXMLDOMDocument pXmlDoc){return getKReport()->DwUpdateTo_(pXmlDoc);}
+		int DwUpdateAllTo(KXMLDOMDocument pXmlDoc){return getKReport()->DwUpdateAllTo_(pXmlDoc);}
+	public:
+		int Retrieve(LPCTSTR pServer,LPCTSTR pDataUrl, LPCTSTR pArgStr) {return getKReport()->Retrieve_(pServer,pDataUrl,pArgStr);}//璇诲彇鏁版嵁
+		//int Retrieve(ITrans *pTrans,LPCTSTR pDataUrl, LPCTSTR pArgStr);//璇诲彇鏁版嵁
+		int Retrieve(LPCTSTR pDataUrl, LPCTSTR pArgStr) {return getKReport()->Retrieve_(pDataUrl,pArgStr);}//璇诲彇鏁版嵁
+
+		int Retrieve(KXMLDOMElement  pElement){return getKReport()->Retrieve_(pElement);}//璇诲彇鏁版嵁
+		int Retrieve(KXMLDOMDocument &xml){return  getKReport()->Retrieve_(xml);}//璇诲彇鏁版嵁
+
+	public:
+		int SetDataObject(LPCTSTR pServer,LPCTSTR pUrl) {return getKReport()->SetDataObject_(pServer,pUrl);}//璁剧疆妯℃澘瀵硅薄
+		//virtual int SetDataObject(ITrans *pTrans,LPCTSTR pUrl) ;//璁剧疆妯℃澘瀵硅薄
+		int SetDataObject(LPCTSTR pUrl) {return getKReport()->SetDataObject_(pUrl);}//璁剧疆妯℃澘瀵硅薄
+
+		int SetDataObject(KXMLDOMElement  pElement) {return getKReport()->SetDataObject_(pElement);}//璁剧疆妯℃澘瀵硅薄
+		int SetDataObject(KXMLDOMDocument  pDoc){return getKReport()->SetDataObject_(pDoc);}
+	public:
+		int ImportFile() {return getKReport()->ImportFile_();}
+		int ImportFile(LPCTSTR pStrFile,LPCTSTR pType=NULL,bool Header = false){return getKReport()->ImportFile_(pStrFile,pType,Header);}
+		int ImportString(LPCTSTR pStr,LPCTSTR pType=NULL,bool Header = false){return getKReport()->ImportString_(pStr,pType,Header);}
+	
+	public:
+		int	Reset(){return getKReport()->Reset_();}
+		int	ResetUpdateStatus(){return getKReport()->ResetUpdateStatus_();}
+
+	public:
+		int event_ItemFocusChanged(int nRow,int nCol){return getKReport()->event_ItemFocusChanged_(nRow,nCol);}
+		int event_RowFocusChanged(int nRow,int nOldRow){return getKReport()->event_RowFocusChanged_(nRow,nOldRow);}
+		int event_GetFocus(){return getKReport()->event_GetFocus_();}
+		int event_LoseFocus(){return getKReport()->event_LoseFocus_();}
+		int event_ItemChanged(int nRow,int nCol,LPCTSTR pData){return getKReport()->event_ItemChanged_(nRow,nCol,pData);}
+		int event_ItemChanging(int nRow,int nCol,LPCTSTR pData){return getKReport()->event_ItemChanging_(nRow,nCol,pData);}
+	public:
+		int GetDwType(){return getKReport()->GetDwType_();}
+	public:
+		KXMLDOMElement  GetRowElement(int nRow){return getKReport()->GetRowElement(nRow);}
+	public:
+		int InsertCol(int nCol,LPCTSTR pCaption,LPCTSTR pColName,int nWidth,LPCTSTR pColPath = NULL,LPCTSTR pStyleClass=NULL,
+			LPCTSTR pEditClass=NULL,LPCTSTR pFormatClass=NULL)
+		{
+			return  getKReport()->InsertCol(nCol,pCaption,pColName,nWidth,pColPath,pStyleClass,pEditClass,pFormatClass);
+		}
+		int RemoveCol(int nCol){return getKReport()->RemoveCol(nCol);}
+		int RemoveVCol(int nCol){return getKReport()->RemoveVCol(nCol);}
+		int RemoveCol(LPCTSTR pColName){return getKReport()->RemoveCol(pColName);}
+
+		int AddEditStyle(LPCTSTR pName, LPCTSTR pStr){return getKReport()->AddEditStyle(pName,pStr);}
+		int RemoveEditStyle(LPCTSTR pName, LPCTSTR pStr){return getKReport()->RemoveEditStyle(pName,pStr);}
+		int SetColEditStyle(LPCTSTR pColName,LPCTSTR pClassName){return getKReport()->SetColEditStyle(pColName,pClassName);}
+		int SetDDLBData(LPCTSTR pColName,LPCTSTR pData){return getKReport()->SetDDLBData(pColName,pData);}
+		LPCTSTR GetDDLBData(LPCTSTR pColName){return getKReport()->GetDDLBData(pColName);}
+	public:
+		int CreateTree(LPCWSTR pPath,int nCol, int nImage1,int nImage2)
+		{
+			return getKReport()->CreateTree(pPath,nCol,nImage1,nImage2);
+		}
+		int CreateTree(LPCWSTR pPath, LPCWSTR pValPath, LPCWSTR pVal,int nCol, int nImage1, int nImage2)
+		{
+			return getKReport()->CreateTree(pPath, pValPath, pVal,nCol, nImage1, nImage2);
+		}
+		int GetContentRow(int nRow)
+		{
+			return getKReport()->GetContentRow(nRow);
+		}
+
+};
+
+
+
+

--
Gitblit v1.9.3