/**
* 该脚本文件提供一些公用的函数
* @copyright digitalChina 2002
* @author zhanggx,zhangcw
* @date 2002-5-20
* 修改人 :王春涛
* 修改日期:20050301
* 修改内容:修改纳税人识别号不为15位是只显示提示信息
*/
//消息提示框
var URL_MESSAGE = "/ctais/work/public/htm/dlg_message.htm";
//内部协查管理的JSP绝对路径
var URL_NBXC = "/ctais/work/jcfz/nx/nx_check/index.jsp";
//Web打印预览页面
var URL_TO_PRINT = "/ctais/work/public/htm/toprinter.htm";
//Web输出Excel
var URL_TO_EXCEL = "/ctais/work/public/htm/toexcel.htm";
//alert
var URL_ALERT = "/ctais/console/dlg_alert.htm";
//confirm
var URL_CONFIRM = "/ctais/console/dlg_confirm.htm";
//prompt
var URL_PROMPT = "/ctais/console/dlg_prompt.htm";
//申报业务模块要打印的违法违章通知单
var URL_TZD = "/ctais/work/sb/public/wfwztzd/wfwztzd.xsl";
var CTAIS$VER = "$PRODUCT";
//正式环境一定要去掉
//----开发时用。正式环境需去掉start
convertPaths();
/** 开发时用。转换所有绝对路径。方便在本地打开时能正常定位到指定路径。
* 当在服务器上运行时,不做处理;当在本地打开时,作相应处理,定位到本地文件
*/
function convertPaths(){
if (location.protocol == "http:") {
return;
}
var url = location.href;
var idx = url.lastIndexOf("/ctais");
if (idx == -1) {
alert("转换异常");
return;
}
var pre = url.substring(0,idx);
URL_MESSAGE = pre + URL_MESSAGE;
URL_NBXC = pre + URL_NBXC;
URL_TO_PRINT = pre + URL_TO_PRINT;
URL_TO_EXCEL = pre + URL_TO_EXCEL;
URL_ALERT = pre + URL_ALERT;
URL_CONFIRM = pre + URL_CONFIRM;
URL_PROMPT = pre + URL_PROMPT;
URL_TZD = pre + URL_TZD;
}
var LOGIN = false;
var IS_LOGIN = true;
var HOST = "http://zhanggx:7001";
function loginRemote(){
if (LOGIN) {
return;
}
if (CTAIS$VER != "$DEVELOP") {
LOGIN = false;
return false;
}
var service = new Service();
LOGIN = true;
service.debug = false;
service.serviceUrl = HOST+"/ctais/entry/validatelogin";
service.serviceParam = "type=ipc&purpose=LogInService&module=Entry&userId=&password=";
service.serviceParse = false;
var res = service.doService();
IS_LOGIN = false;
var idx = -1;
if(res != null)
idx = res.indexOf(":CONSOLE:");
if(idx != -1){
window.status = "登录服务器["+HOST+"]成功!";
return true;
}else{
alert("系统提示:\n登录失败!");
LOGIN = false;
return false;
}
}
//----开发时用。正式环境需去掉end
//是否进行页面改变的监听
var PAGE_LISTENER_ENABLED = false;
notifyChange(false);
/*
* 屏蔽右键菜单
function window.document.oncontextmenu(){
return false;
}*/
/** alert
* @param str 字符串
* @param flag 字符串消息级别:0,1,2
*/
function window.alert(str,flag){
if(flag == null){
flag = 0;
}
return showModalDialog(URL_ALERT,new Array(""+flag,str),"dialogWidth=500px;dialogHeight=200px;resizable=yes;status=no;help=no");
}
/** confirm
* @param str 字符串
*/
function window.confirm(str){
return showModalDialog(URL_CONFIRM,str,"dialogWidth=500px;dialogHeight=200px;resizable=yes;status=no;help=no");
}
/** prompt
* @param str 字符串
* @param val 默认值
* @param isPwd 内容是否为密文
*/
function window.prompt(str,val,isPwd){
return showModalDialog(URL_PROMPT,new Array(str,val,isPwd),"dialogWidth=500px;dialogHeight=220px;resizable=yes;status=no;help=no");
}
/** 设置是否进行页面的监控
* @param bl true/false 是否进行页面监控,默认的状态为true
*/
function setPageListenerEnabled(bl){
PAGE_LISTENER_ENABLED = bl;
}
/** 取得控制台
*/
function getSysConsole(){
return top.FRM_RIGHT;
}
/** 取得控制台
*/
function getWinConsole(win){
return win.top.FRM_RIGHT;
}
/** 取得控制台
*/
function getSysLeft(){
return top.FRM_LEFT;
}
/** 发送数据
* @param data 要发送的数据
* @return 服务器的返回信息
*/
function send(data) {
//---------用作本地调试,正式环境去掉start
if (location.protocol == "file:" && !LOGIN) {
var doc = loadXml(data);
var name = doc.documentElement.selectSingleNode("Service/Name");
var file = name.text+".xml";
var doc = new ActiveXObject("MSXML.DOMDocument");
doc.async = false;
doc.load(file);
var oErr = doc.parseError;
if (CTAIS$VER != "$DEVELOP") {
oErr.errorCode = -1;
}
if (oErr.errorCode != 0) {
if (confirm("无法解析本地文件["+file+"],您希望连接到["+HOST+"]吗")) {
if (!loginRemote()) {
return "1-1登录["+HOST+"]失败";
}else{
this.serviceUrl = HOST+"/ctais/entry/EntryServlet";//后台servlet路径
}
}else{
return "1-1";
}
}else{
return doc.xml;
}
}
if (location.protocol == "file:" && !IS_LOGIN) {
this.serviceUrl = HOST+"/ctais/entry/EntryServlet";//后台servlet路径
}
//---------用作本地调试,正式环境去掉end
var param = this.serviceParam;
var search = location.search;
//滤掉target
var idx = search.indexOf("&target=");
if (idx != -1) {
var idx1 = search.indexOf("&", idx + 1);
if (idx1 == -1)
search = search.substring(0, idx);
else
search = search.substring(0, idx) + search.substring(idx1);
}
if (search == "") {
search = "?" + param;
} else if (search.indexOf(param) == -1) {
search += "&" + param;
}
var action = this.serviceUrl + search;
//alert("action:"+action);
var res = null;
data = "\n" + data;
var xmlhttp = this.serviceHttp;
try {
xmlhttp.Open("POST", action, this.serviceAsync);
xmlhttp.setRequestHeader("Referer",location.href);
if (this.serviceAsync) {
if (this.serviceListener != null) {
xmlhttp.onreadystatechange = this.serviceListener;
window.status = "发送异步通讯请求...";
}else{
showMessage("Service类异常,无法得到异步处理的监听器");
xmlhttp.onreadystatechange = new Function(alert("缺省监听器:\n您没有设置异步通讯的监听器!"));//new Function("缺省监听器");
}
}
xmlhttp.Send(data);
if (this.serviceAsync) {
return null;
}
res = xmlhttp.responseText;
} catch(e) {
showMessage("不能连接到后台服务器:\n" + e.name + "\n" + e.message);
window.status = "连接服务器异常!";
}
xmlhttp = null;
return res;
}
/** [private]得到请求的数据,数据的名称,请求的ID
* @param serviceName 服务名
* @param reqData 请求的数据,即Argument节点的内容
* @param serviceId service id,标识工作区
* @return 请求的XML字符串
*/
function getRequest(serviceName, reqData, serviceId) {
var reqStr = "\n"
+ " \n"
+ " " + serviceName + "\n"
+ " " + reqData + "\n"
+ " \n"
+ "";
return reqStr;
}
/** [private]得到Argument节点的值,即输入参数
* 参数格式:一一对应(键值对)
* 例:getArgument('NSRSBH','777777777777715','PZXH','888888888888888')
* @return Argument节点内容
*/
function getArgument() { return createArgument(getArgument.arguments); }
/** [private]生成Argument节点内容
* @param arrKeyValue 键值对的数组
* @return Argument节点内容
*/
function createArgument(arrKeyValue) {
if (arrKeyValue.length == 1)
return arrKeyValue[0];
var strArgu = "";
for (var i = 0; i < arrKeyValue.length - 1; i = i + 2) {
//程序缺陷,虑掉NSRSBH里的非法字符
if(arrKeyValue[i] == "NSRSBH"){
var s = arrKeyValue[i + 1];
s = s.replace(/&/g,"&");
s = s.replace(//g,">");
arrKeyValue[i + 1] = s;
}
strArgu += "<" + arrKeyValue[i] + ">" + arrKeyValue[i + 1] + "" + arrKeyValue[i] + ">\n";
}
return strArgu;
}
/** [private]得到(封装)服务器的返回数据
* @param doc 服务器返回的响应的doc
* @return 需要的CDATA内的数据Str
*/
function processResponse(doc) {
var result = new Array("1", "*", "请求数据时发生错误,可能由以下原因引起:\n1.浏览器不能连接到后台服务器\n(可能是由于长时间未与服务器连接而导致会话失效。);\n2.服务器返回的数据格式错误。\n请稍候重新登录或与系统管理员联系。", "");
//如果出现了致命的传输错误
if (doc == null)
return result;
var root = doc.documentElement;
if (root == null)
return result;
var service = root.selectSingleNode("Service");
if (service == null)
return result;
var rtnCode = service.selectSingleNode("RtnCode").text;
var rtnMsg = service.selectSingleNode("RtnMsg");
var code = rtnMsg.selectSingleNode("Code").text;
var message = rtnMsg.selectSingleNode("Message").text;
var argument = service.selectSingleNode("Argument").text;
result[0] = rtnCode; //状态:0/1——成功/失败
result[1] = code; //状态代码
result[2] = message; //状态信息
result[3] = argument; //返回数据
return result;
}
/////////////////////////////以下为可供外部调用的函数方法/////////////////////
/** 解析XML字符串
* @param str 要解析的XML字符串
* @return document对象
*/
function loadXml(str) {
if (str == null)
return null;
var doc = new ActiveXObject("MSXML.DOMDocument");
doc.async = false;
doc.loadXML(str);
var oErr = doc.parseError;
if (oErr.errorCode != 0) {
if (str.length > 5 && str.substring(0,5) == "
* 对于模式窗口无法通过top直接访问它的顶层窗口
* 修改:对于模式窗口或其他不能访问的情况,以前返回null,现在自动创建一个新的ID,前缀:"NEW-" DATE:20031107
* @return 页面所属工作区的SID
*/
var LOCAL_WORKID = null;//单页面在本地打开时用于记录workid,正式运行时去掉
function getWorkId() {
if (getSysConsole() != null) {
return getSysConsole().getWorkId(window);
} else {
if (window.opener != null && getWinConsole(window.opener) != null){
return getWinConsole(window.opener).getWorkId(window);//???
}
//------用于本地打开文件测试,正式运行时去掉start
if (location.protocol == "file:") {
if (LOCAL_WORKID == null) {
LOCAL_WORKID = "LOCAL-"+createWorkId();
}
return LOCAL_WORKID;
}
//------用于本地打开文件测试,正式运行时去掉end
return "NEW-"+createWorkId();
//return null;
}
}
/** 创建工作区ID,只是返回一个ID号,不过任何处理。目前,不要用这个函数
* @return 工作区ID
*/
function createWorkId1() {
alert("兼容性警告:\n不要调用[createWorkId1()]\n应该调用[createWorkId()]");
if (getSysConsole() != null) {
return getSysConsole().createWorkId();
} else {
alert("获取工作区SID错误:[createWorkId()]\n当前页面不在系统控制台框架内,\n或者您在模式窗口里调用了该函数。\n请注意:模式窗口无法通过top直接访问它的顶层窗口!\n这种情况下,请使用Service(serviceName,serviceId)");
return null;
}
}
/** 创建工作区ID,只是返回一个ID号,不过任何处理
* 因为该方法的调用一般在模式窗口内,如果调用top.FRM_RIGHT,则必须要求传给模式窗口top.FRM_RIGHT的引用,提交麻烦。
* @return 工作区ID
*/
function createWorkId() {
return Math.random().toString();
}
/** 关闭工作区
* 关闭顺序:先处理window.onWorkClosing事件,如果事件函数返回为true则继续关闭工作区
* 事件注册方法:window.onWorkClosing = myFunctionName,如:window.onWorkClosing = go;
* @param bl true/false是否强制退出
*/
function closeWork(bl) {
if (getSysConsole() != null) {
getSysConsole().closeWork(bl,window);
}else if(top == self){
window.close();
}else {
alert("关闭工作区错误:\n当前页面不在系统控制台框架内");
}
}
/** 取消工作区,可以做一些公用的处理。每个模块在取消时需要调用,如果成功返回则可继续自己的业务
* 如果允许取消则将修改标志置为false
* 同样当保存成功后,也必需将修改标志置为false
* @return true/false 执行成功/失败
*/
function cancelWork(){
if (isChanged()) {
if (confirm("当前工作区的内容已经发生变化,但还没有被保存。\n取消后没有被保存的数据将丢失。\n您确定要取消工作区吗?")) {
notifyChange();
return true;
}else{
return false;
}
}else{
return true;
}
}
/**
* 提供简便方法,刷新工作区待办事宜,没有则打开一个新的
*/
function refreshTodo(){
if (getSysConsole() != null) {
getSysConsole().refreshTodo();
}
}
/** 通知当前工作区是否发生变化
* @param bl true/false 通知当前工作区是否发生变化
*/
function notifyChange(bl) {
if(!PAGE_LISTENER_ENABLED) return;
if (getSysConsole() != null)
getSysConsole().notifyChange(bl,window);
else
//alert("通知工作区时发生错误:\n当前页面不在系统控制台框架内");
return false;
}
/** 当前工作区是否发生变化
* @return true/false 当前工作区是否发生了变化
*/
function isChanged() {
if(!PAGE_LISTENER_ENABLED) return false;
if (getSysConsole() != null) {
return getSysConsole().isChanged(window);
} else {
//alert("查询工作区改变状态时发生错误:\n当前页面不在系统控制台框架内");
return false;
}
}
/////////////////////////////////////////////////////////////////
/////////////////////////类Service////////////////////////////////
/** 类Service构造函数
* 支持同步/异步两种调用方式
* var service = new Service("serviceName","sid:12345");
*
* - var myRes = service.doService(myArgus);
*
- service.serviceAsync = true;//异步
* service.serviceListener = myListener;//注册监听器
* service.doService(myArgus);
* //以下代码写在myListener函数里
* //doResponse(Service对象,Service对象的Http对象的返回);
* if(service.serviceHttp.readyState == 4){
* var myRes = doResponse(service,service.serviceHttp.responseText);//得到返回
* }
*
* @param serviceName 服务名
* @param serviceId 工作区标识[可选参数]
* @return Service对象
*/
function Service(serviceName, serviceId) {
//开发期检查,判断是否加载了workservice.js脚本文件,开发结束后屏蔽该功能
//相应地屏蔽掉workservice.js里WORK_SERVICE
//if (typeof (WORK_SERVICE) == "undefined") {
// alert("系统提示:\n请在该页面内加载workservice.js脚本文件!");
//}
if (getSysConsole() != null && window != getSysConsole() && window != getSysLeft()) {
getSysConsole().setMessage("工作区消息:", 0,window);
}
this.modify = true;
this.isDebug = isDebug;
this.debug = this.isDebug();
this.serviceName = serviceName;
this.serviceId = serviceId;
this.serviceUrl = "/ctais/entry/EntryServlet";
this.serviceParam = "type=ipc&purpose=EntryService&module=Entry";
this.serviceParse = true;
this.serviceAsync = false;
this.serviceHttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");//4.0
this.serviceListener = null;
this.servicePack = true;//用...包装请求,对于soap则不需要
if (Service.arguments.length == 1) {
this.serviceId = getWorkId();
}
this.result = new Array("1","","","");
//this.rtnCode = "1";
//this.code = "";
//this.message = "";
this.doService = doService;
this.close = close$;
this.send = send;
this.getRtnCode = getRtnCode;
this.getCode = getCode;
this.getMessage = getMessage;
this.getResponse = getResponse;
}
/** 关闭工作区,加$为防止有重名函数
*/
function close$(){
this.serviceName = "common.CtaisMasterBndService.exit";
this.doService();
this.serviceHttp = null;
}
/** 关闭工作区
* @param sid sid
*/
function closeService(sid){
var service = new Service("common.CtaisMasterBndService.exit",sid);
service.doService();
service = null;
}
/** 向控制台的TOP页面查询是否打开调试
* @return true/false
*/
function isDebug(){
var debug = false;
if (!debug) {
this.modify = false;
var idx = document.cookie.indexOf("debug=");
if (idx == -1) {
return debug;
}else{
return document.cookie.charAt(idx+6) == 't';
}
}
return debug;
}
/** 处理交互,返回Argument节点值
* 输入参数的方式同getArgument('NSRSBH','777777777777715','PZXH','888888888888888')
* 即:service.doService('NSRSBH','777777777777715','PZXH','888888888888888')或service.doService(xml)
* @return Argument节点值
*/
function doService() {
// beginLog(this.serviceName);
var argu = createArgument(doService.arguments);
var req = "";
if (this.servicePack) {
req = getRequest(this.serviceName, argu, this.serviceId);
}else{
req = argu;
}
if (this.debug) {
var rtn = showMessage("发送数据:\n" + req, -1);
if (rtn == null){
return;
}else{
if (this.modify) {
req = rtn.substring(6);
}
}
}
window.status = "正在请求数据,请稍候...";
var res = this.send(req);
if (!this.serviceAsync) {
return doResponse(this,res);
}else{
return null;
}
}
/** 将处理返回的过程提出来(是函数而非对象方法,以便异步的监听器能够方便调用),以便同步/异步都可单独调用。
* @param obj Service对象。必需这样给出。因为对于异步,只能调用函数,不能调用方法。
* @param res xmlhttp.responseText数据。对于同步则是send()方法返回的数据
*/
function doResponse(obj,res){
if (obj.debug) {
var rtn = showMessage("返回数据:\n" + res, -1);
if (rtn == null) {
return;
}
if (obj.modify) {
res = rtn.substring(6);
}
}
if (!obj.serviceParse){
return res;
}
var oRes = loadXml(res);
window.status = "处理服务器返回数据...";
var result = processResponse(oRes);
obj.result = result;
window.status = "数据传输完毕!";
return result[3];
}
/** 得到RtnCode节点值
* @return RtnCode节点值
*/
function getRtnCode() { return this.result[0]; }
/** 得到Code节点值
* @return Code节点值
*/
function getCode() { return this.result[1]; }
/** 得到Message节点值
* @return Message节点值
*/
function getMessage() { return this.result[2]; }
/** 得到doService返回结果,更确切的说,是doResponse()的返回(对于异步通讯)
* @return doService返回结果
*/
function getResponse(){ return this.result[3];}
////////////////////类Service定义结束///////////////////////////////
/////////////////////测试用类////////////////////////
/** 测试前台的日志类,将日志写入文件
* @param logFile 日志文件名
*/
function Logger(logFile){
var logger = getSysLeft();
if (logger != null) {
logger.AppletMain.initLogger();
logger.AppletMain.setLogFile(logFile);
}
this.initLog = initLog;
this.beginLog = beginLog;
this.endLog = endLog;
}
/** 注明当前测试的记录名称,在每个测试前需要调用,以声明进行的是什么测试
* @param testName 当前测试的内容描述
*/
function initLog(testName){
var logger = getSysLeft();
if (logger != null) {
logger.AppletMain.initLog(testName);
}
}
/** 标记开始测试记录
* @param testName 当前测试的内容描述
*/
function beginLog(testName){
if (testName != null) {
initLog(testName);
}
var logger = getSysLeft();
if (logger != null) {
logger.AppletMain.beginLog();
}
}
/** 标记结束测试记录,并写入测试日志文件
*/
function endLog(){
var logger = getSysLeft();
if (logger != null) {
logger.AppletMain.endLog();
}
}
/////////////////////测试用类定义结束////////////////////////
/** 检查纳税人识别号是否合法。由于目前不能确切的知道到底需要虑掉哪些字符,
* 所以该项检查被忽略!!
* @param nsrsbh 纳税人识别号字符串
* @return true/false 是/否合法
*/
function checkNsrsbh(nsrsbh) {
var iLen = nsrsbh.length;
if (iLen == 0) {
showMessage("纳税人识别号不能为空!");
return false;
}
//修改人 :王春涛 20050301
//修改内容:修改纳税人识别号不为15位是只显示提示信息
//修改前代码
/*
if (iLen < 15 || iLen > 20) {
showMessage("纳税人识别号应是15~20位!");
return false;
}
*/
//修改后代码
if (iLen < 15) {
if (confirm("纳税人识别号小于15位,是否继续!")){
return true;
}else{
return false;
}
}
//修改结束
/*if (nsrsbh.indexOf('*') != -1 || nsrsbh.indexOf('$') != -1 || nsrsbh.indexOf('~') != -1
|| nsrsbh.indexOf(',') != -1 || nsrsbh.indexOf(';') != -1 || nsrsbh.indexOf('!') != -1 || nsrsbh.indexOf('+') != -1 || nsrsbh.indexOf('@') != -1 || nsrsbh.indexOf('#') != -1 || nsrsbh.indexOf('%') != -1 || nsrsbh.indexOf('^') != -1 || nsrsbh.indexOf('&') != -1) {//允许"-"号
showMessage("纳税人识别号包含非法字符!");
return false;
}*/
return true;
}
/** 导航函数,可用于控制页面工作区的Tab页
* @param url 链接地址
* @param title 显示在Tab标签的内容
* @param bl 是否在新窗口打开工作区
*/
function navigate(url, title, bl) {
if (getSysConsole() != null) {
getSysConsole().navigate(url, title, bl);
}else{
alert("top.FRM_RIGHT为空,不能调用navigate()",1);
}
}
/** 弹出提示窗口,所有页面内的alert()需替换成showMessage();
* 功能:弹出提示,视消息级别flag,在工作区状态栏给出提示!
* @param str 要显示的字符串
* @param flag 消息级别:-1——调试信息;0——一般消息提示;1——警告信息[默认];2——错误信息;3——致命错误
*/
function showMessage(str, flag) {
if (flag == null) {
flag = 1;
}
switch (flag) {
case -1:
//var url = location.href;
//var idx = url.indexOf("/work/");
//var file = url.substring(0, idx + 6) + "/public/htm/dlg_message.htm";
var rtn = showModalDialog(URL_MESSAGE, new String(str), 'dialogWidth=480px;dialogheight=530px;status:no;help:no');
//return (rtn == null) ? false : true;
return rtn;
/*
case 0:
alert(str,0);
if (top.FRM_RIGHT != null)
top.FRM_RIGHT.setMessage(str, 0,window);
break;
case 1:
alert(str,1);
if (top.FRM_RIGHT != null)
top.FRM_RIGHT.setMessage(str, 1,window);
break;
case 2:
alert(str,2);
if (top.FRM_RIGHT != null)
top.FRM_RIGHT.setMessage(str, 2,window);
break;
*/
default:
alert(str,flag);
if (getSysConsole() != null)
getSysConsole().setMessage(str, flag,window);
}
}
/** 设置工作区状态栏信息
* @param str 要显示的字符串
* @param flag 消息级别:-1——调试信息;0——一般消息提示;1——警告信息[默认];2——错误信息;3——致命错误
*/
function setMessage(str, flag){
if (getSysConsole() != null)
getSysConsole().setMessage(str, flag,window);
}
/**节点之间的数据复制。一般用于把doservice()返回的数据,映射到页面的相应的数据岛中。
* @param oSrc 获得原数据的节点。
* @param oTarget 一般为页面上的数据岛,也可以是个节点。
* @param targetNodeName 目标节点名称。必须写出该节点的完整路径,如:ROOT/ITEMS
*/
function xmlNodeCopy(oSrc, oTarget, targetNodeName) {
var oSrcNode = oSrc.getElementsByTagName(targetNodeName)(0);
var oTargetNode = oTarget.getElementsByTagName(targetNodeName)(0);
//如果没有子节点则视为单独的节点,直接对其赋值
if (oSrcNode.childNodes.length == 0) {
oTargetNode.text = oSrcNode.text;
return;
}
//如果有子节点,为处理可增行的节点问题,将先删除目标节点的所有自节点,
//然后将源节点的所有子节点拷贝到目标节点
while (oTargetNode.childNodes.length > 0) {
oTargetNode.removeChild(oTargetNode.childNodes(0));
}
for (var i = 0; i < oSrcNode.childNodes.length; i++) {
oTargetNode.appendChild(oSrcNode.childNodes(i).cloneNode(true));
}
}
/**此函数用于把输入的日期变成输入月的第一天的日期。
* 用于DataWindow内,例如:用户输入"2002-02-03",界面显示为"2002-02-01";
* @param oDataWindow 数据窗口
* @param obj 格式化日期的输入框
*/
function formatMonthFirstD(oDataWindow, obj) {
var iRowNum = oDataWindow.getObjPoint(obj)[0];
var iColNum = oDataWindow.getObjPoint(obj)[1]
var tempDate = oDataWindow.getCellValue(iRowNum, iColNum);
oDataWindow.setCellValue(iRowNum, iColNum, formatMonthFirst(tempDate));
}
/**此函数用于把输入的日期变成输入月的第一天的日期。
* 例如:用户输入"2002-02-03",界面显示为"2002-02-01";
* @param strDate 要格式化日期值,字符型
* @return 格式化后的月初值
*/
function formatMonthFirst(strDate) {
var tempDate = strDate;
var index1 = tempDate.lastIndexOf(".");
var index2 = tempDate.lastIndexOf("-");
if ((index1 != -1) || (index2 != -1)) {
var index3 = index1;
if (index2 > index1) {
index3 = index2;
}
return tempDate.substring(0, index3 + 1) + "01";
} else if ((index1 == -1) && (index2 == -1) && tempDate.length == 8) {
return tempDate.substring(0, tempDate.length - 2) + "01";
}
}
/**此函数用于把输入的日期变成输入月的最后一天的日期。
* 用于DataWindow内,例如:用户输入"2002-03-03",界面显示为"2002-03-31";
* @param oDataWindow 数据窗口
* @param obj 格式化日期的输入框
*/
function formatMonthLastD(oDataWindow, obj) {
var iRowNum = oDataWindow.getObjPoint(obj)[0];
var iColNum = oDataWindow.getObjPoint(obj)[1]
var tempDate = oDataWindow.getCellValue(iRowNum, iColNum);
oDataWindow.setCellValue(iRowNum, iColNum, formatMonthLast(tempDate));
}
/**此函数用于把输入的日期变成输入月的最后一天的日期。
* 例如:用户输入"2002-03-03",界面显示为"2002-03-31";
* @param strDate 要格式化日期值,字符型
* @return 格式化后的月末值
*/
function formatMonthLast(strDate) {
var tempDate = strDate;
var index1 = tempDate.lastIndexOf(".");
var index2 = tempDate.lastIndexOf("-");
var index11 = tempDate.indexOf(".");
var index22 = tempDate.indexOf("-");
//形式如2002-2-2,2002.2.3的解析
if ((index1 != -1) || (index2 != -1)) {
var index3 = index1;
if (index2 > index1) {
index3 = index2;
}
index33 = index11;
if ((index22 < index11 && index22 != -1) || (index11 == -1 && index22 != -1)) {
index33 = index22;
}
var dTempDate = new Date();
dTempDate.setDate(1);
dTempDate.setYear(parseInt(tempDate.substring(0, index33), 10));
var iMonth=parseInt(tempDate.substring(index33 + 1, index3), 10);
dTempDate.setMonth(iMonth);
//设置当月的最后一天
dTempDate.setDate(0);
if (iMonth==1 || iMonth==3 || iMonth==5 || iMonth==7 || iMonth==8 || iMonth==10 || iMonth==12 ) //月份1有问题,直接拼串
{
return tempDate.substring(0, index3 + 1) + "31";
}
return tempDate.substring(0, index3 + 1) + dTempDate.getDate();
//形式如20020202的解析
} else if ((index1 == -1) && (index2 == -1) && tempDate.length == 8) {
var dTempDate = new Date();
dTempDate.setDate(1);
dTempDate.setYear(parseInt(tempDate.substring(0, 4), 10));
var iMonth=parseInt(tempDate.substring(4, 6), 10);
dTempDate.setMonth(iMonth);
//设置当月的最后一天
dTempDate.setDate(0);
if (iMonth==1 || iMonth==3 || iMonth==5 || iMonth==7 || iMonth==8 || iMonth==10 || iMonth==12)
{
return tempDate.substring(0, tempDate.length - 2) + "31";
}
return tempDate.substring(0, tempDate.length - 2) + dTempDate.getDate();
}
}
/** 在xml里按关键字查找一个节点的值。
* @param parentNode 要查找节点的上级节点
* @param keyNodeName 关键字节点的名称
* @param keyNodeValue 关键字节点的值
* @param resultNodeName 返回节点的名称
* @return resultNodeValue 返回节点的值
*/
function findNodeValue(parentNode, keyNodeName, keyNodeValue, resultNodeName) {
var resultNodeValue = "";
for (var i = 0; i < parentNode.length; i++) {
var snv = parentNode(i).getElementsByTagName(keyNodeName).item(0).text;
if (snv == keyNodeValue) {
resultNodeValue = parentNode(i).getElementsByTagName(resultNodeName).item(0).text;
break;
}
}
return resultNodeValue;
}
/** 在xml里按关键字查找一条节点记录。
* @param parentNode 要查找节点的上级节点
* @param keyNodeName 关键字节点的名称
* @param keyNodeValue 关键字节点的值
* @return resultNode 返回符合条件的节点(与keyNode同级)记录,包括多个字段。
*/
function findNode(parentNode, keyNodeName, keyNodeValue) {
var resultNode = null;
for (var i = 0; i < parentNode.length; i++) {
var snv = parentNode(i).getElementsByTagName(keyNodeName).item(0).text;
if (snv == keyNodeValue) {
resultNode = parentNode(i);
break;
}
}
return resultNode;
}
/**用于把一个日期string 转换成一个 Date 类型的值
* @param strDate 要转换的字符串 ‘20020303’ 或 ‘2002-3-3’ 或 ‘2002.3.3’
* @return 日期类型值
*/
function strToDate(strDate) {
var tempDate = strDate;
var index1 = tempDate.lastIndexOf(".");
var index2 = tempDate.lastIndexOf("-");
var index11 = tempDate.indexOf(".");
var index22 = tempDate.indexOf("-");
//形式如2002-2-2,2002.2.3的解析
if ((index1 != -1) || (index2 != -1)) {
var index3 = index1;
if (index2 > index1) {
index3 = index2;
}
index33 = index11;
if ((index22 < index11 && index22 != -1) || (index11 == -1 && index22 != -1)) {
index33 = index22;
}
var year = parseInt(tempDate.substring(0, index33), 10);
var month = parseInt(tempDate.substring(index33 + 1, index3), 10)-1;
var date = parseInt(tempDate.substring(index3 + 1, tempDate.length), 10);
var dTempDate = new Date(year,month,date);
return dTempDate;
//形式如20020202的解析
} else if ((index1 == -1) && (index2 == -1) && tempDate.length == 8) {
var year = parseInt(tempDate.substring(0, 4), 10);
var month = parseInt(tempDate.substring(4, 6), 10) - 1;
var date = parseInt(tempDate.substring(6, 8), 10);
var dTempDate = new Date(year,month,date);
return dTempDate;
}
}
/** 把一个日期类型的值转换成,按一定格式格式化的字符串。(目前只做‘yyyy-mm-dd’)
* @param dDate 要格式化的日期值,为Date类型
* @return 格式化后的日期字符串
*/
function formatDate(dDate) {
var iMonth = (dDate.getMonth() + 1);
var sMonth = iMonth.toString();
if (sMonth.length == 1) {
sMonth = "0" + sMonth;
}
//add by zhanggx 041020
var sDate = dDate.getDate().toString();
if (sDate.length == 1) {
sDate = "0" + sDate;
}
return dDate.getFullYear() + "-" + sMonth + "-" + sDate;
}
/** 用于格式化xml文件的节点值
* 只针对<>33,333,333.00<>数值节点,转换为<>33333333.00<>
* <>200.200,000%<> 转换为<>2.00200000<>
* @param xmlId 页面数据岛的ID
* @param nodeName 要格式化节点的上级节点
* @return 格式化后的xml数据
*/
function formatXML(xmlId, nodeName) {
formatNode(xmlId.getElementsByTagName(nodeName));
return xmlId.xml;
}
/** 只针对<>33,333,333.00<>数值节点,转换为<>33333333.00<>
* <>200.200,000%<> 转换为<>2.00200000<>
* 不能用在<>sss,ssss,ss<>的节点。
* @param obj 要格式化的xml节点的上级节点。
*
*/
function formatNode(obj) {
for (var j = 0; j < obj.length; j++) {
for (var i = 0; i < obj(j).childNodes.length; i++) {
var sValue = obj(j).childNodes(i).text;
if (sValue.indexOf(",") == -1 && sValue.indexOf("%") == -1) {
continue;
}
var sResult = "";
if (sValue.indexOf(",") != -1) {
var aValue = sValue.split(",");
for (var j1 = 0; j1 < aValue.length; j1++) {
sResult = sResult + aValue[j1];
}
}
if (sResult == "") {
sResult = sValue;
}
if (sValue.indexOf("%") != -1) {
var sResult1 = parseFloat(sResult, 10) / 100;
sResult = sResult1.toString();
}
obj(j).childNodes(i).text = sResult;
}
}
}
/** 格式化一个节点的值
* @param obj 要格式化的节点
*/
function formatNodeValue(obj) {
var sValue = obj(0).text;
obj(0).text = formatValue(sValue);
}
/** 格式化一个33,333,333.00或200.200,000%的值
* 为33333333.00,2。00200000
* @param srcStr 要格式化的字符串
* @return 格式化后的值
*/
function formatValue(srcStr) {
var sValue = srcStr;
if (sValue.indexOf(",") == -1 && sValue.indexOf("%") == -1) {
return sValue;
}
var sResult = "";
if (sValue.indexOf(",") != -1) {
var aValue = sValue.split(",");
for (var j = 0; j < aValue.length; j++) {
sResult = sResult + aValue[j];
}
}
if (sResult == "") {
sResult = sValue;
}
if (sValue.indexOf("%") != -1) {
var sResult1 = parseFloat(sResult, 10) / 100;
sResult = sResult1.toString();
}
return sResult;
}
/** 把一个浮点数,以小数点后几位四舍五入
* @param srcValue 要舍位的值
* @param iCount 要舍位到小数点后几位
* return 四舍五入后的数
*/
function round(srcValuef, iCount) {
var srcValue=srcValuef;
var zs=true;
//判断是否是负数
if (srcValue<0)
{
srcValue=Math.abs(srcValue);
zs=false;
}
var iB = Math.pow(10, iCount);
//有时乘100结果也不精确
var value1=srcValue * iB;
var anumber=new Array();
var anumber1=new Array();
var fvalue=value1;
var value2=value1.toString();
var idot=value2.indexOf(".");
//如果是小数
if (idot!=-1)
{
anumber=srcValue.toString().split(".");
//如果是科学计数法结果
if (anumber[1].indexOf("e")!=-1)
{
return Math.round(value1)/iB;
}
anumber1=value2.split(".");
if (anumber[1].length<=iCount)
{
return parseFloat(srcValuef,10);
}
var fvalue3=parseInt(anumber[1].substring(iCount,iCount+1),10);
if (fvalue3>=5)
{
fvalue=parseInt(anumber1[0],10)+1;
} else {
//对于传入的形如111.834999999998 的处理(传入的计算结果就是错误的,应为111.835)
if (fvalue3==4 && anumber[1].length>10 && parseInt(anumber[1].substring(iCount+1,iCount+2),10)==9 )
{
fvalue=parseInt(anumber1[0],10)+1;
} else {
fvalue=parseInt(anumber1[0],10);
}
}
}
//如果是负数就用0减四舍五入的绝对值
if (zs)
{
return fvalue/iB;
} else {
return 0-fvalue/iB;
}
}
/** 把数值转换为大写金额
* @param num 数值,为数值或字符型
* @return 大写金额字符
*/
function convertCN(num) {
var arr1 = new Array("仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "圆", "点", "角", "分");
var arr3 = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");
num = num.toString();
//判断是否为负
var bfs=false;
if (num.indexOf("-")!=-1)
{
num=num.substring(1,num.length);
bfs=true;
}
var point = num.indexOf(".");
if (point < 0)
point = num.length;
var len = arr1.length - point - 3;
var strRet = "", lastChar = "";
for (i = 0; i < num.length; i++) {
if (i != point) {
val = arr1[i + len];
if (num.charAt(i) != "0" || (i==point-1 && point==1) || (i==point+1 && num.charAt(i) == "0" && num.charAt(i+1) != "0") )
strRet += arr3[num.charAt(i)] + val;
else {
lastChar = strRet.substr(strRet.length - 1);
if (val == "亿" || val == "万" || val == "圆" || val == "分") {
if (lastChar == "零")
strRet = strRet.substr(0, strRet.length - 1);
lastChar = strRet.substr(strRet.length - 1);
if (!((val == "万" && lastChar == "亿") || (val == "分" && lastChar == "角") || (val == "角" && lastChar == "圆")))
strRet += val;
} else {
if (lastChar != "零")
strRet += "零";
}
}
}
}
//去分
var ifen = strRet.indexOf("分");
if (ifen >= 0) {
var sffen = strRet.substring(ifen - 1, ifen);
if (sffen == "圆") {
strRet = strRet.substring(0, ifen);
}
}
//加整
var sfyuan = strRet.substring(strRet.length - 1, strRet.length);
if (sfyuan == "圆" || sfyuan == "角") {
strRet = strRet + "整";
}
//加负
if (bfs)
{
strRet="(负数)"+strRet;
}
return strRet;
}
/** 使页面的层<DIV>显示/隐藏
* 要求页面的层<DIV>用如下方法引用:style="display:none"或style="display:"
* 调用方法:showHideLayers("Layer1","show","Layer2","hide"),即:方法成对出现,参数1为层ID,参数2为是否隐藏
*/
function showHideLayers() {
var args = showHideLayers.arguments;
for (var i = 0; i < args.length - 1; i += 2) {
var isShow = (args[i + 1] == "show") ? "''" : "'none'";
var script = args[i] + ".style.display=" + isShow;
eval(script);
}
}
/** 显示/隐藏某一区域(层)
* @param oLayer 区域(层)名,为对象,并非字符串
* @param oImg 图片区域对象名<img id="img_switch" src="img_open">
* @param sImg1 区域显示时的图片
* @param sImg2 区域隐藏时的图片
*/
function switchLayer(oLayer, oImg, sImg1, sImg2) {
var flag = oLayer.style.display;
if (flag == "none") {
oLayer.style.display = "block";
oImg.src = sImg1;
} else {
oLayer.style.display = "none";
oImg.src = sImg2;
}
}
/** 按xml中的某一节点进行对xml排序 类似这种结构(ROOT/ITEM/NODENAME...)
* @param dsoName 数据岛名称
* @param colNodeName 列对应数据结点名称
* @param orderType ture/false 升序/降序
*/
function xmlOrderBy(dsoName, colNodeName, orderType) {
var root = dsoName.documentElement.cloneNode(true);
var rootTemp = dsoName.createNode("element", root.nodeName, "");
var ilen = root.childNodes.length;
//排序
for (var i = 0; i < ilen; i++) {
var node1 = root.childNodes(0);
var value1 = root.childNodes(0).getElementsByTagName(colNodeName)(0).text;
var ilen1 = root.childNodes.length;
for (var j = 0; j < ilen1; j++) {
if (orderType) { //升序
if (root.childNodes(j).getElementsByTagName(colNodeName)(0).text < value1) {
node1 = root.childNodes(j);
}
} else {
//降序
if (root.childNodes(j).getElementsByTagName(colNodeName)(0).text > value1) {
node1 = root.childNodes(j);
}
}
}
rootTemp.appendChild(node1);
}
//替换成排序后的xml
dsoName.removeChild(dsoName.documentElement);
dsoName.appendChild(rootTemp);
}
/** 删除数据窗口中关键数据为空的行
* @param dwid 数据窗口
*/
function deleteNullRow(dwid) {
var iRowNum = dwid.getRowCount();
var iColNum = dwid.getColCount();
for (var i = iRowNum - 1; i >= 0; i--) {
for (var j = 0; j < iColNum; j++) {
if (dwid.col(j).fill == true && dwid.row(i).cell(j).value.toString() == "") {
dwid.deleteRow(i);
break;
}
}
}
}
/** 检查日期时间的合法性 必须格式为“2003-09-09 或 2003-9-09 ”才返回ture,否则返回false
* @param str 要检查的日期字符串。
* @return true/false
*/
function checkDate(str){
var reg = /^(\d+)-(\d{1,2})-(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
r[2]=r[2]-1;
var d= new Date(r[1], r[2],r[3]);
if(d.getFullYear()!=r[1])return false;
if(d.getMonth()!=r[2])return false;
if(d.getDate()!=r[3])return false;
return true;
}
/** 检查日期时间的合法性 必须格式为“2003-09-09 08:08:08”才返回ture,否则返回false
* @param str 要检查的日期时间字符串。
* @return true/false
*/
function checkDateTime(str){
var reg = /^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
var r = str.match(reg);
if(r==null)return false;
r[2]=r[2]-1;
var d= new Date(r[1], r[2],r[3], r[4],r[5], r[6]);
if(d.getFullYear()!=r[1])return false;
if(d.getMonth()!=r[2])return false;
if(d.getDate()!=r[3])return false;
if(d.getHours()!=r[4])return false;
if(d.getMinutes()!=r[5])return false;
if(d.getSeconds()!=r[6])return false;
return true;
}
////////////////内部协查管理//////////////////
///////////////////////////////////////////////
/**通过本页面的nbxc_check(NSRSBH,YWHJ_DM,MKMC,HDNR)方法调用弹出窗口。
* @param NSRSBH 纳税人识别号
* @param YWHJ_DM 业务环节代码
* @param MKMC 模块名称
* @param HDNR 内容
* @param serviceName 服务名,如:"common.CtaisMasterBndService.commonNsrEntered"
* @param GZBZ 更正标志 //cheys 2004/02/17 added
* @return true/false 成功/失败
*/
function defaultNsrEntry(NSRSBH,YWHJ_DM,MKMC,HDNR,serviceName,GZBZ,workId)
{
var service = null;
if (workId == null) {
service = new Service(serviceName);
}else{
service = new Service(serviceName,workId);
}
// var sArgu=service.doService("NSRSBH",NSRSBH,"HDNR",HDNR,"MKMC",MKMC,"YWHJ",YWHJ_DM);
if (GZBZ != null)
{
var sArgu=service.doService("NSRSBH",NSRSBH,"HDNR",HDNR,"MKMC",MKMC,"YWHJ",YWHJ_DM,"GZBZ",GZBZ);
}
else{
var sArgu=service.doService("NSRSBH",NSRSBH,"HDNR",HDNR,"MKMC",MKMC,"YWHJ",YWHJ_DM);
}
var rtnCode=service.getRtnCode();
var code = service.getCode();
if (rtnCode=="0")
{
var oDoc=loadXml(sArgu);//解析xml
var tbtjts = oDoc.selectSingleNode("//TBTJTS").text;
if(tbtjts != "null"){
showMessage(tbtjts);
}
var isXcExisted = oDoc.selectSingleNode("//DO_XC").text;
var oNode = oDoc.selectSingleNode("//NBXCXX");
if(isXcExisted=="Y"){
return nbxc_check(NSRSBH,YWHJ_DM,MKMC,HDNR,oNode);
}
}else{
showMessage(service.getMessage());
//如果错误代码为9999,则说明是临时税务登记纳税人税务登记证件过期,此时允许继续操作。
if (code=='9999')
{
return;
}
return false;
}
}
/**通过本页面的nbxc_check(NSRSBH,YWHJ_DM,MKMC,HDNR)方法调用弹出窗口。
* @param NSRSBH 纳税人识别号
* @param YWHJ_DM 业务环节代码
* @param MKMC 模块名称
* @param HDNR 内容
* @param oDoc XML内容
* @return true/false 成功/失败
*/
function nbxc_check(NSRSBH,YWHJ_DM,MKMC,HDNR,oDoc)
{
var sid = createWorkId();
var service = new Service("jcfz.nx.nx_check.NxCheckBndService.init",sid);
var sArgu=service.doService("NSRSBH",NSRSBH,"YWHJ_DM",YWHJ_DM,"MKMC",MKMC,"HDNR",HDNR,"NBXC","N");
var rtnCode=service.getRtnCode();
if (rtnCode=="1")
{
showMessage("检查该纳税人内部监控失败!");
return false;
}
var count=oDoc.childNodes.length;
if (count!=0)
{
for (var i=0;i maxValue )
{
obj.setValue(maxValue);
}
if (sValue < minValue)
{
obj.setValue(minValue);
}
}
/**
*检查控件的输入值是否在指定的期间内,用于提交请求之前的合法性检查
*@param obj 输入框
*@param minValue 最小值
*@param maxValue 最大值
*@return true|false 正确|错误
*/
function checkInput(obj,minValue,maxValue){
var sValue = parseInt(obj.getValue(),10);
if (sValue > maxValue || sValue 9)
{
tempStr=parseInt(mm[1],10)-1;
}else{
tempStr=parseInt(mm[1],10)-1;
tempStr="0"+tempStr;
}
tempdate=dStr.substring(0,5)+tempStr+'-01';
dStr=formatMonthLast(tempdate);
return dStr;
}
}
////////////////注册表编辑类start//////////////////////
/**
* 注册表编辑器,封装对注册表的操作
*/
function RegEdit(){
this.shell = new ActiveXObject("WScript.Shell");
this.regRead = regRead;
this.regWrite = regWrite;
this.regDelete = regDelete;
}
/** 返回名为 strName 的注册键或值。
* @param strName 要读取的键或值。如果 strName 以反斜线 (\) 结束,本方法将返回键,而不是值
* @return 名为 strName 的注册键或值
*/
function regRead(strName){
var val = null;
try {
val = this.shell.regRead(strName);
} catch (e) {
//alert(e.message);
}
return val;
}
/** 设置 strName 指定的注册键或值
* @param strName 要写的键或值的名称.如果 strName 以反斜线 (\) 结束,本方法将返回键,而不是值
* @param anyValue 要写入键或注册表值中的值
* @param strType 可选项。要保存到注册表中的值的数据类型REG_SZ、REG_EXPAND_SZ、REG_DWORD、REG_BINARY
*/
function regWrite(strName,anyValue,strType){
if(strType == null)
strType = "REG_SZ";
this.shell.regWrite(strName,anyValue,strType);
}
/** 从注册表中删除 strName 指定的键或值。
* @param strName 要删除的键或值的名字。如果 strName 以反斜线 (\) 结束,本方法将删除键,而不是值
*/
function regDelete(strName){
this.shell.regDelete(strName);
}
////////////////注册表编辑类end//////////////////////
///印章管理,返回当前操作人员使用的印章/////////////////////
/** 公用函数
*/
var SIGNATUREPATH="c:\\ctais\\signature\\";
function getPicture(zsr_dm){
var sid = createWorkId();
var svc = new Service("util.yzgl.YzInterfaceBndService.init",sid);
var oArg=svc.doService("ZSR_DM",zsr_dm);
if (svc.getCode() != "2000")
{
showMessage(svc.getMessage());
return;
}else{
var oDoc = loadXml(oArg);
if (oDoc.selectSingleNode("ROOT/SIGNATUREID").text == "")
{
return "";
}else{
return SIGNATUREPATH + oDoc.selectSingleNode("ROOT/SIGNATUREID").text+".jpg";
}
}
}
function getWszsr_dm(swws_dm,wspzxh)
{
var sid = createWorkId();
var service = new Service("jcfz.common.wszsr.WszsrBndService.init",sid);
var srAuge = service.doService("SWWS_DM",swws_dm,"WSPZXH",wspzxh);
var msg = service.getMessage();
var code = service.getCode();
if (code=="2000")
{
//解析xml
var oDoc = loadXml(srAuge);
return oDoc.selectSingleNode("ROOT").text;
}
else
{
showMessage(msg);
return "";
}
}
/** 将XML转换到DOT文档模版内
* @param doc XML Document
* @param swws_dm 税务文书代码
* @param bz 稽查还是违章
*/
function toWord(doc,swws_dm,bz,zsr_dm){
var ole = null;
try {
ole = new ActiveXObject("Word.Application");
try{
if (typeof(bz)=="undefined"||bz=="")
{
ole.documents.add("c:/ctais/dot/" + swws_dm + ".doc");
}else if (bz=="WZ")
{
ole.documents.add("c:/ctais/dot/" + swws_dm + "_wz.doc");
}else if (bz=="JC")
{
ole.documents.add("c:/ctais/dot/" + swws_dm + "_jc.doc");
}else if (bz=="WS")
{
ole.documents.add("c:/ctais/dot/" + swws_dm + ".doc");
}else
{
ole.documents.add("c:/ctais/dot/" + swws_dm + ".doc");
}
} catch(e2) {
try{
ole.documents.add("c:/ctais/dot/" + swws_dm + ".doc");
}catch(e1){
if (ole != null) {
try {
ole.quit();
} catch (e) {
}
}
showMessage("新建Word异常:"+e1.message,0);
}
}
ole.AddIns.add("c:/ctais/dot/ctaisWs.dot");
ole.Visible = true;
if(doc==null)
{
ole.run("toWord",null);
}else{
ole.run("toWord",doc.documentElement);
if (typeof(zsr_dm)=="undefined"||zsr_dm=="")
{
ole.run("RemoveSignatureLabel");
}else{
ole.run("RemoveSignatureLabel");
/** 王珂锋 删除此块 总局版本不需要电子签章 d
var picName = getPicture(zsr_dm);
if(picName != ""){
ole.run("AddSignature",picName);
}else{
showMessage("没有定义机关签章!",0);
//return;
}
*/
}
}
try{
//设置文书的模板为只读
if(bz=="WS")
ole.run("setReadOnly","eo5w3960ie");
}catch(ee){}
} catch (e) {
if (ole != null) {
try {
ole.quit();
} catch (e) {
}
}
showMessage("新建Word异常:"+e.message,0);
}
}
var TZDNODE =null;
/**申报模块加打印通知单功能
*/
function sb_print_wfwztzd(oDoc){
TZDNODE = oDoc;
toPrinter("A4","0",null,null,"20|20|20|20",null,"interface_printTzd");
}
/**toPrinter函数的接口函数
*/
function interface_printTzd(){
var oDoc = loadFile(URL_TZD); //样式表
var oNode =TZDNODE;
if (oNode == null)
{
return null;
}
return oNode.transformNode(oDoc);
}
/** 得到UNICODE字符串的实际长度,单个中文字符长度为2
* @param str 字符串
* @return 长度
*/
function getStrByteLength(str){
var len = str.length;
for(var i=0;i < str.length;i++){
if(str.charCodeAt(i) > 255){
len ++;
}
}
return len;
}
/**移动日期
* @param sDate 日期 yyyy-mm-dd
* @param iDays 正向后,负向前
* @return 长度
* andm 2005-08-29
*/
function moveDay(sDate,iDays){
var date = strToDate(sDate);
date.setDate(date.getDate()+iDays);
return formatDate(date);
}
/** 创建控件
* @param doc
* @param strId 控件ID
* 20061115 wangfm 为了解决使用databinding的控见的激活问题而增加
*/
function CreateControlForDataSrc(doc, strId){
var strObj = "";
if (strId == "xselect") {
strObj = "";
} else if (strId == "xdatawindow") {
strObj = "";
} else if (strId == "xtree") {
strObj = "";
} else if (strId == "xdrop") {
strObj = "";
} else if (strId == "xlist") {
strObj = "";
} else {
strObj = "" +
"指定的htc组件不存在!" +
"";
}
doc.write(strObj);
}