userfunction.js
上传用户:mingda
上传日期:2017-06-20
资源大小:27691k
文件大小:9k
源码类别:

OA系统

开发平台:

Java

  1. /*用户自定义函数文件 2002.07.11
  2. */
  3. /*科目取数函数
  4. 科目取数函数共有11个参数:1)科目编码,2)年份,3)月份,4)期初/本期借方/本期贷方/期末,
  5. 5)已记帐/未记帐,6)金额/外币/数量,7)第一个辅助核算名称,8)第一个辅助核算编码,
  6. 9)第二个辅助核算名称,10)第二个辅助核算编码,11)帐套路径 
  7. 所有参数的数据类型为字符型,即数据的两边得加上双引号。其中第2,3二个参数可为空,
  8. 为空时表示取当前默认的年份和月份的数据。也可以用年-1,月-1来表示上一年,上一月。
  9. 月份这个参数支持这种格式:1,3,5-7,这表示取1,2,5,6,7这5个月的数据,
  10. 如果月份这个参数为:1-则表示取1到当前月的数据。 当前年份和当前月份是指选项窗中设置的年月。
  11. 第7,8,9,10四个参数可以省略。第11为取指定帐套路径的数据,可省略                                                                                                                                                                            例如:取101科目的1998年10月的期初: KM("101","1998","10","期初","已记帐","金额")                                                                                                                例如:取102科目的上年从年初到当前月的包括未记帐的累计借方发生额: KM("102","年-1","1-","本期借方","未记帐","金额")
  12. */
  13. function KM(fstrAccountName,sYear,sMonth,sInit,sAmount,sRegister,
  14. sAnalysisName1,sAnalysisName2,sPath){
  15. var sSql=""
  16. var sField=""
  17. var sInitField="" //计算期初的字段
  18. var sWhere=""
  19. var dblRet=0
  20. switch (sAmount){
  21. case "金额" :
  22. sField="fcurAmount"
  23. sInitField="fcurInit"
  24. break
  25. case "外币" :
  26. sField="fcurForeignAmount"
  27. sInitField="fcurForeign"
  28. break
  29. case "数量" :
  30. sField="fdblQuantity"
  31. sInitField="fdblQuantity"
  32. break
  33. default:
  34. sField="fcurAmount"
  35. sInitField="fcurInit"
  36. break
  37. }
  38. if(sInit!="本期借方" && sInit!="本期贷方" && sInit!="期初" && sInit!="期末" )
  39. sInit="本期借方"
  40. if(sInit=="本期借方") {
  41. //SQL Server 库
  42. //sField="sum(case fblnDirection when 1 then "+sField+" else 0 end)"
  43. //Access 库
  44. sField="sum(iif(fblnDirection ,"+sField+" , 0 ))"
  45. }
  46. if(sInit=="本期贷方") {
  47. //SQL Server 库
  48. //sField="sum(case fblnDirection when 0 then "+sField+" else 0 end)"
  49. //Access 库
  50. sField="sum(iif( fblnDirection , 0 , "+sField+" ))"
  51. }
  52. if(sRegister=="已记帐"){
  53. sWhere=" and fstrRegisterDesc!='' "
  54. }
  55. if(sAnalysisName1!=""){
  56. sWhere+=" and fstrAnalysisName1='"+sAnalysisName1+"' "
  57. if(sAnalysisName2!=""){
  58. sWhere+=" and fstrAnalysisName2='"+sAnalysisName2+"' "
  59. }
  60. }
  61. var arr=KmDateAct(sYear,sMonth)
  62. if(sInit=="期初" || sInit=="期末"){
  63. var sSqlInit="Select "+sInitField+" From Account Where fstrAccountName='"+fstrAccountName+"'"
  64. if(sInit=="期初"){
  65. sSql="Select "+sField+" From Voucher Inner Join VoucherDetail On Voucher.flngVoucherID=VoucherDetail.flngVoucherID "
  66. +" Where fstrAccountName='"+fstrAccountName+"' "+arr[1]+sWhere
  67. }
  68. else {
  69. sSql="Select "+sField+" From Voucher Inner Join VoucherDetail On Voucher.flngVoucherID=VoucherDetail.flngVoucherID "
  70. +" Where fstrAccountName='"+fstrAccountName+"' "+arr[2]+sWhere
  71. }
  72. var sXml=fc_select(sSqlInit,1,2)
  73.     if(sXml=="<root></root>"){
  74.      var dblRet1=0
  75.     }
  76.     else {
  77.     var oXml=new ActiveXObject("Microsoft.XMLDOM")
  78.     oXml.async="false";
  79.     oXml.loadXML(sXml)
  80.     var dblRet1=parseFloat(oXml.documentElement.childNodes(0).childNodes(0).text)
  81.     if(isNaN(dblRet1)) dblRet1=0
  82. }
  83. sXml=fc_select(sSql,1,2)
  84.     if(sXml=="<root></root>"){
  85.      var dblRet=0
  86.     }
  87.     else {
  88.     oXml.loadXML(sXml)
  89.     dblRet=parseFloat(oXml.documentElement.childNodes(0).childNodes(0).text)
  90.     if(isNaN(dblRet)) dblRet=0
  91. }
  92. dblRet+=dblRet1
  93. }
  94. else { //本期借方,本期贷方
  95. sSql="Select "+sField+" From Voucher Inner Join VoucherDetail On Voucher.flngVoucherID=VoucherDetail.flngVoucherID "
  96. +" Where fstrAccountName like '"+fstrAccountName+"%' "+arr[0]+sWhere
  97. var sXml=fc_select(sSql,1,2)
  98.     var oXml=new ActiveXObject("Microsoft.XMLDOM")
  99.     oXml.async="false";
  100.     oXml.loadXML(sXml)
  101.     dblRet=parseFloat(oXml.documentElement.childNodes(0).childNodes(0).text)
  102.     if(isNaN(dblRet)) dblRet=0
  103.     //sdfasd
  104. }
  105. return dblRet
  106. }
  107. /**
  108. //显示科目取数函数向导
  109. **/
  110. function ShowKMGuide() {
  111. if(txtMyGrid.style.display=="none") return
  112. var arySend=t.getAttribute("formula")
  113. if(arySend==null)arySend=""
  114. var strReturn=window.showModalDialog("dsnwizard.htm",arySend,"status:no;dialogHeight:350px;dialogWidth:520px;dialogTop:100;dialogLeft:150px") 
  115. if (isSpace(strReturn)==false && typeof strReturn!="undefined"){
  116. txtMyGrid.value ="="+strReturn
  117. grid.curTD.innerText=txtMyGrid.value
  118. }
  119. }
  120. /**
  121. //科目取数函数的日期处理
  122. //sYear为处理前的年字符串,sPeriod为处理前的月字符串,返回一个数组,含3个日期SQL,
  123. //(供期初,期末时区分用)
  124. **/
  125. function KmDateAct(sYear,sPeriod) {
  126. var MonthSql="" //本期借方贷方用
  127. var MonthSql1="" //期初用
  128. var MonthSql2="" //期末用
  129. var mlngYear=0
  130. var mlngPeriod=0
  131. var pYear=2002 //全局年份
  132. var pPeriod=1 //全局月份
  133. //计算全局年份,全局月份
  134. var sXml=t.getAttribute("userdata")
  135. if(sXml==null)sXml=""
  136. sXml=unescape(sXml)
  137. if(sXml!=""){
  138. var oXml=new ActiveXObject("Microsoft.XMLDOM")
  139. oXml.async ="false";
  140. oXml.loadXML(sXml)
  141. pYear =parseInt(oXml.documentElement.childNodes(3).text)
  142. pPeriod =parseInt(oXml.documentElement.childNodes(4).text)  
  143. }
  144. //--------------------------------
  145. var bFind=false
  146. //处理年
  147. if(sYear.substring(0,1)=="年") {
  148. if(sYear.length==1){
  149. mlngYear=pYear
  150. }
  151. else {
  152. var tmpYear=parseInt(sYear.substring(2,sYear.length-1))
  153. if(sYear.substring(1,2)=="-")
  154. mlngYear=pYear-tmpYear
  155. else
  156. mlngYear=pYear+tmpYear
  157. }
  158. }
  159. else {
  160. if(sYear=="")
  161. mlngYear=pYear
  162. else
  163. mlngYear=parseInt(sYear)
  164. }
  165. //处理月
  166. if(sPeriod.substring(0,1)=="月") {
  167. if(sPeriod.length==1){
  168. mlngPeriod=pPeriod
  169. }
  170. else {
  171. var tmpPeriod=parseInt(sPeriod.substring(2,sPeriod.length-1))
  172. if(sPeriod.substring(1,2)=="-")
  173. mlngPeriod=pPeriod-tmpPeriod
  174. else
  175. mlngPeriod=pPeriod+tmpPeriod
  176. }
  177. }
  178. else {
  179. if(sPeriod==""){
  180. mlngPeriod=pPeriod
  181. }
  182. else {
  183. //同时处理多个月份
  184. if(sPeriod.indexOf("-")<0 && sPeriod.indexOf(",")<0 && sPeriod.length<=2){
  185. mlngPeriod=parseInt(sPeriod)
  186. }
  187. else {
  188. if(sPeriod.substring(sPeriod.length-1,sPeriod.length)=="-")
  189. sPeriod=sPeriod+pPeriod
  190. var arr=PrintArray(sPeriod)
  191. bFind=true
  192. }
  193. }
  194. }
  195. if(bFind){
  196.     MonthSql = " AND fintYear= " +mlngYear+ " AND ( "
  197.     for(var i = 0;i< arr.length;i++ )
  198.         MonthSql +=  " fintPeriod= " +arr[i] + " OR "
  199.     //去掉尾部的OR
  200.     MonthSql = Left(MonthSql, MonthSql.length - 4) + " ) "
  201. }
  202. else {
  203. MonthSql = " AND fintYear= " +mlngYear+ " AND fintPeriod = " +mlngPeriod
  204. }
  205. MonthSql1 = " AND (fintYear<" +mlngYear+" OR (fintYear="+mlngYear+" AND fintPeriod<" +mlngPeriod+")) "
  206. MonthSql2 = " AND (fintYear<" +mlngYear+" OR (fintYear="+mlngYear+" AND fintPeriod<=" +mlngPeriod+")) "
  207. var arrRet=new Array()
  208. arrRet[0]=MonthSql
  209. arrRet[1]=MonthSql1
  210. arrRet[2]=MonthSql2
  211. return arrRet
  212. }
  213. /**
  214. //在数据库中保存表格数据的示例用的自定义函数
  215. **/
  216. function SaveCustomerTest() {
  217. //此函数实现将损益表中特写单元格中的数据保存到Customer表中
  218. var sCustomer=GETCELL(4,3)
  219. var sAnalysis1= GETCELL(6,5)
  220. var sAnalysis2= GETCELL(7,5)
  221. var sSql="insert into Customer (fstrCustomerName,fstrCustomerDesc,fstrAnalysisName1,fstrAnalysisName2) values ("
  222. +"'"+sCustomer+"','"+sCustomer+"','"+sAnalysis1+"','"+sAnalysis2+"'"+ ")"
  223. var sR=fc_insert(sSql)
  224. if(isSpace(sR)){
  225. alert("保存成功!")
  226. }
  227. else{
  228. alert(sR)
  229. }
  230. }
  231. /**
  232. *如要实现保存后的报表模版只有打印和打印预览两个功能按钮,可用下面此函数
  233. **/
  234. function SaveUserReport1(){
  235. var s1=""
  236. s1+="<root>"
  237. s1+="<button><value>打印预览</value><click>PreviewReport()</click></button>"
  238. s1+="<button><value>打印</value><click>PrintReport()</click></button>"
  239. s1+="</root>"
  240. t.setAttribute("buttonxml",s1)
  241. SaveUserReport()
  242. }
  243. /**
  244. //在数据库中保存表格数据的示例用的自定义函数
  245. **/
  246. function test_insert() {
  247. var orderid=GETCELL(1,2)
  248. var s1= GETCELL(2,2)
  249. var sSql="insert into Orders (OrderID,CustomerID) values ("
  250. +"'"+orderid+"','"+s1+"'"+ ")"
  251. var sR=fc_insert(sSql)
  252. if(isSpace(sR)){
  253. alert("保存成功!")
  254. }
  255. else{
  256. alert(sR)
  257. }
  258. }
  259. /**
  260. //在数据库中保存表格数据的示例用的自定义函数
  261. **/
  262. function test_save() {
  263. var orderid=GETCELL(1,2)
  264. var s1= GETCELL(2,2)
  265. var sSql="Update Orders Set Customerid='"+s1+ "' Where OrderID='"+orderid+"'"
  266. var sR=fc_insert(sSql)
  267. if(isSpace(sR)){
  268. alert("保存成功!")
  269. }
  270. else{
  271. alert(sR)
  272. }
  273. }
  274. /**
  275. //在数据库中保存表格数据的示例用的自定义函数
  276. **/
  277. function test_del() {
  278. var orderid=GETCELL(1,2)
  279. var s1= GETCELL(2,2)
  280. var sSql="Delete Orders Where OrderID='"+orderid+"'"
  281. var sR=fc_insert(sSql)
  282. if(isSpace(sR)){
  283. alert("保存成功!")
  284. }
  285. else{
  286. alert(sR)
  287. }
  288. }