您好,欢迎来到福步贸易网!
关注我们
service@fubuwang.com
全部产品分类
用友通标准版10.3
   https://www.fubuwang.com 2024-01-07 17:34:53 来源:网络
核心提示:建议处理方案如下: 1、通过sql跟踪结果,对出错的sql脚本,放到sql查询分析器中执行(选择用户帐套数据库); 出错的sql脚本如下: select (id) as id,(itemId) as itemId,(cvencode) as

建议处理方案如下: 1、通过sql跟踪结果,对出错的sql脚本,放到sql查询分析器中执行(选择用户帐套数据库); 出错的sql脚本如下: select (id) as id,(itemId) as itemId,(cvencode) as cvencode,(cvenabbname) as cvenabbname,(cinvcode) as cinvcode,(cinvname) as cinvname,(cinvstd) as cinvstd,(cComunitCode) as ccomunitcode,(ccomunitname) as ccomunitname,(dEnableDate) as dEnableDate,(dDisableDate) as dDisableDate,(cExch_Name) as cExch_Name,(bPromotion) as bPromotion,(cMemo) as cMemo,(iLowerLimit) as iLowerLimit,(iUpperLimit) as iUpperLimit,(iUnitPrice) as iUnitPrice,(iTaxRate) as iTaxRate,(iTaxUnitPrice) as iTaxUnitPrice,(iSupplyType) as iSupplyType,(cinvaddcode) as cinvaddcode from pu_veninvpricelist 2、分析sql脚本执行结果,根据实际错误提示进行查询 (注:这段脚本在正常的帐套下执行是不会出错的,所以只有在用户帐套下执行结果才有分析价值) 2.1、出错脚本读取数据来源为视图pu_VenInvPriceList--下一步,查看视图结构,是否存在字段列cinvaddcode; 2.2、如果没有,进而分析视图构成:视图pu_VenInvPriceList数据源是关联视图pu_VenInvPriceRule、Ven_Inv_Price_RuleItem、pu_VenInvPriceRule、表vendor。可在sql查询分析器中编辑视图pu_VenInvPriceList,以查看其sql构成。 2.3、查看正常861帐套,视图pu_VenInvPriceList上是不应有字段列cinvaddcode,跟踪结果与您上传的跟踪脚本也存在差异。不知道用户数据库是否被人为修改过?演示或新建帐套跟踪结果中,在from之前没有【,(cinvaddcode) as cinvaddcode 】的。 可根据上述分析结果,查看用户相关视图、表结构,对比演示帐套进行修改调整即可。

如何在VC中使用XML

  虽然“国家级贫困县”这个名声不太好听,各种扶贫的资金和扶贫的政策却是真金白银的好处。 截至2013年底,全国近3000个县市区,国家级贫困县只有592个。2013年,中央财政专项扶贫投入为406亿元,较2008年的197亿元,翻了两倍还多。只要入选,每个县平均都可以获得数以千万甚至上亿元的补贴,这些财政补贴往往是一个贫困县全年财政收入总额的一倍甚至是好几倍之多。平均来看,光中央财政专项扶贫资金,每个贫困县每年就可以获得3000万~5000万元的中央补助。同时,一旦入选贫困县,与之相伴随的各种附加政策优惠和税费减免则会更多;而且,这一政策能持续多年,甚至是终身的。因此,在中央、省市各种优惠政策和措施的刺激下,各地都争先恐后地努力成为贫困县,这也就是各地争夺贫困帽的根本原因。 以2014年一度被传的沸沸扬扬的湖南省新邵县为例,一旦被列入国家武陵山集中连片扶贫攻坚重点县,则该县每年会获得国家财政下拨的5.6亿元资金用于扶贫开发,这一数字为2010年新邵县每年财政收入的1.4倍。参考来源:http://www.21ccom.net/articles/zgyj/gqmq/article_20140319102630.html

ML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini。VC++里操作XML有两个库可以用:MSXML和XmlLite。MSXML又细分了两种接口:DOM和SAX2。XP没自带有XmlLite,只自带有2.x、3.x版的MSXML,不支持SAX2(需要MSXML 4.0以上),所以优先使用DOM。

DOM是以COM形式提供的,VC++里调用DOM可以分3种方法:

1、MFC里用CComPtr调用

2、SDK里直接调用DOM接口

3、SDK里用智能指针调用

这3种方法本质上是一样的,区别只不过在于需要编码的多少而已,用CComPtr可以极大的简化代码,下面是几个例子。

例子stocks.xml:

<?xml version="1.0" encoding="utf-8"?>

<root>

<node1>text1</node1>

<node2>

<childnode1 attrib1="value1" attrib2="value2"/>

<childnode2 attrib1="value1" attrib2="value2">childtext1</childnode2>

</node2>

</root>

这个例子应该包含了XML最常见的特征了吧?

MFC

MFC里可以直接使用DOM,不需要手动添加额外的头文件,只需要在CWinApp::InitInstance()里调用CoInitialize(NULL)初始化COM,在CWinApp::ExitInstance里调用CoUninitialize()释放COM就行了。

//读取XML

CComPtr<IXMLDOMdocument>spDoc//DOM

spDoc.CoCreateInstance(CLSID_DOMdocument)

VARIANT_BOOL vb

spDoc->load(CComVariant(OLESTR("stocks.xml")), &vb)//加载XML文件

CComPtr<IXMLDOMElement>spRootEle

spDoc->get_documentElement(&spRootEle)//根节点

CComPtr<IXMLDOMNodeList>spNodeList

spRootEle->get_childNodes(&spNodeList)//子节点列表

long nLen

spNodeList->get_length(&nLen)//子节点数

for (long i = 0i != nLen++i) //遍历子节点

{

CComPtr<IXMLDOMNode>spNode

spNodeList->get_item(i, &spNode)

ProcessNode(spNode)//节点处理函数

}

//写入XML

CComPtr<IXMLDOMNode>spNode

spRootEle->selectSingleNode(OLESTR("/root/node1"), &spNode)

spNode->put_text(OLESTR("newText"))//写入text

spRootEle->selectSingleNode(OLESTR("/root/node2/childnode1/@attrib1"), &spNode)

spNode->put_nodevalue(CComVariant(OLESTR("newValue")))//写入value

CComPtr<IXMLDOMNode>spNewNode

spDoc->createNode(CComVariant(NODE_ELEMENT), OLESTR("childnode3"), OLESTR(""), &spNewNode)//创建新节点

spRootEle->selectSingleNode(OLESTR("/root/node2"), &spNode)

spNode->appendChild(spNewNode, &spNewNode)//将新节点加为node2的子节点

spNewNode->put_text(OLESTR("childtext2"))//写入新节点text

CComQIPtr<IXMLDOMElement>spEle = spNewNode//注意这里使用CComQIPtr

spEle->setAttribute(OLESTR("attrib1"), CComVariant(OLESTR("value1")))//给新节点添加属性

spDoc->save(CComVariant(OLESTR("stocks.xml")))

//节点处理函数

void ProcessNode(CComPtr<IXMLDOMNode>&spNode)

{

CComBSTR bsNodeName

spNode->get_nodeName(&bsNodeName)//节点名

AfxMessageBox(COLE2CT(bsNodeName))

CComVariant varVal

spNode->get_nodevalue(&varVal)//节点值

AfxMessageBox(COLE2CT(varVal.bstrVal))

DOMNodeType eNodeType

spNode->get_nodeType(&eNodeType)

if (eNodeType == NODE_ELEMENT) //只有NODE_ELEMENT类型才能包含有属性和子节点

{

//递归遍历节点属性

CComPtr<IXMLDOMNamedNodeMap>spNameNodeMap

spNode->get_attributes(&spNameNodeMap)

long nLength

spNameNodeMap->get_length(&nLength)

for (long i = 0i != nLength++i)

{

CComPtr<IXMLDOMNode>spNodeAttrib//注意属性也是一个IXMLDOMNode

spNameNodeMap->get_item(i, &spNodeAttrib)

ProcessNode(spNodeAttrib)

}

//递归遍历子节点

CComPtr<IXMLDOMNodeList>spNodeList

spNode->get_childNodes(&spNodeList)

spNodeList->get_length(&nLength)

for (long i = 0i != nLength++i)

{

CComPtr<IXMLDOMNode>spChildNode

spNodeList->get_item(i, &spChildNode)

ProcessNode(spChildNode)

}

}

}

对于<tag>text</tag>这样的节点,get_nodevalue会得到空,要得到"text"的话可以遍历子节点(只有一个子节点,它的nodeName为"#text",nodeType为NODE_TEXT,nodevalue就是"text");也可以用get_text直接得到"text",但是对于这样的节点<tag>text<childtag>childtext</childtag></tag>,get_text会同时得到"text"和"childtext",不过这样的节点应该是不允许的。

DOM里使用的字符串(BSTR)都是OLESTR类型,默认情况下OLESTR是Unicode字符,MFC里可以用COLE2CT把LPCOLESTR转换为LPCTSTR。

对于自己定义的XML,大多数时候不需要遍历,可以通过调用selectNodes、selectSingleNode指定XPath直接读取某个节点或属性:

CComPtr<IXMLDOMdocument>spDoc//DOM

spDoc.CoCreateInstance(CLSID_DOMdocument)

VARIANT_BOOL vb

spDoc->load(CComVariant(OLESTR("stocks.xml")), &vb)//加载XML文件

CComPtr<IXMLDOMElement>spRootEle

spDoc->get_documentElement(&spRootEle)//根节点

CComPtr<IXMLDOMNodeList>spNodeList

CComPtr<IXMLDOMNode>spNode

spRootEle->selectNodes(OLESTR("/root/node2/*"), &spNodeList)//得到node2下的所有子节点

spRootEle->selectSingleNode(OLESTR("/root/node2/childnode1/@attrib1"), &spNode)//得到childnode1的attrib1属性

XPath的语法可以参考XML文档或MSDN。

SDK

SDK中也可以使用智能指针,和MFC没太大区别,同样很方便,直接给代码:

#include <iostream>

#include <tchar.h>

#import <msxml3.dll>

//节点处理函数

void ProcessNode(MSXML2::IXMLDOMNodePtr spNode)

{

std::cout <<"nodeName: " <<spNode->nodeName

if (spNode->nodeType == NODE_ATTRIBUTE || spNode->nodeType == NODE_TEXT)

std::cout <<"tnodevalue: " <<_bstr_t(spNode->nodevalue)

std::cout <<std::endl

if (spNode->nodeType == NODE_ELEMENT)

{

MSXML2::IXMLDOMNamedNodeMapPtr spNameNodeMap = spNode->attributes

for (long i = 0i != spNameNodeMap->length++i) //遍历节点属性

ProcessNode(spNameNodeMap->item)

MSXML2::IXMLDOMNodeListPtr spNodeList = spNode->childNodes

for (long i = 0i != spNodeList->length++i) //遍历子节点

ProcessNode(spNodeList->item)

}

}

int _tmain(int argc, _TCHAR* argv[])

{

CoInitialize(NULL)

//读取XML

MSXML2::IXMLDOMdocumentPtr spXMLDoc

spXMLDoc.CreateInstance(__uuidof(MSXML2::DOMdocument30))

spXMLDoc->load(L"stocks.xml")

MSXML2::IXMLDOMElementPtr spRoot = spXMLDoc->documentElement//根节点

MSXML2::IXMLDOMNodeListPtr spNodeList = spRoot->childNodes

for (long i = 0i != spNodeList->length++i) //遍历子节点

ProcessNode(spNodeList->item)

//写入XML

spRoot->selectSingleNode(L"/root/node1")->text = L"newText"

spRoot->selectSingleNode(L"/root/node2/childnode1/@attrib1")->nodevalue = L"newValue"

MSXML2::IXMLDOMNodePtr spNewNode = spRoot->selectSingleNode(L"/root/node2")->appendChild(

spXMLDoc->createNode(_variant_t(NODE_ELEMENT), L"childnode3", L"")

)//给node2创建新子节点childnode3

spNewNode->text = L"childtext2"

MSXML2::IXMLDOMElementPtr spEle = spNewNode

spEle->setAttribute(L"attrib1", _variant_t(L"value1"))//添加新属性

spXMLDoc->save(_variant_t(L"stocks.xml"))

spNewNode.Release()

spEle.Release()

spNodeList.Release()

spRoot.Release()

spXMLDoc.Release()

CoUninitialize()

system("pause")

return 0

}

以上就是关于用友通标准版10.3全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

 
举报收藏 0打赏 0评论 0

免责声明:
1.本站部份内容系网友自发上传与公开信息收集转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。版权归属原平台(作者)所有,版权争议与本站无关;
2.秉承互联网开放、包容的精神,福步网欢迎各方(自)媒体、机构转载、引用我们原创内容,但要严格注明来源:福步网
3.我们倡导尊重与保护知识产权,如发现本站文章存在版权问题,烦请将版权疑问、授权证明、版权证明、联系方式等,发邮件至service@fubuwang.com,我们将第一时间核实、处理,谢谢。

 
福步贸易网  |  公司简介  |  意见建议  |  法律申明  |  隐私政策  |  广告投放  |  如何免费信息发布?  |  如何开通福步贸易网VIP?  |  VIP会员能享受到什么服务?  |  怎样让客户第一时间找到您的商铺?  |  如何推荐产品到自己商铺的首页?  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备15082249号 |  m.fubuwang.com