昨晚做了一个自我感觉挺牛的报表(嘿嘿,可能是因为第一次用N-UP格式,所以才觉得难)
一客户要做奖券打印
一开始,我已经用LABEL风格的数据窗口做好了,很美观,GOOD! : )
可是一给客户,反映众多问题.
[如下:]
2.有工龄为0月的人员
打印就打印,怎么又要导出?
哎,客户是魔鬼,也是上帝嘛~~~
怎么也得实现.
公司的输出系统不支持LABEL格式
试了一下,N-UP格式是支持的.
找不到相关例子和相关经验的人
试了半天,我靠!N-UP格式不支持每个栏分别使用计算字段.
气死偶也@@(
没办法也得想啊.....
想啊想啊想啊想.....
终于想到了一个很妙的办法,用SQL直接拼,哈哈哈.....
真是天才......
根据客户的多种需求以及我刚接触MSSQL,好不容易才把语句拼好了[如下:]
SELECT h_emp_mstr.emp_in_date,
h_emp_mstr.emp_state,
h_emp_mstr.emp_level,
h_emp_mstr.emp_hire_type,
h_emp_mstr.emp_id,
h_emp_mstr.cc_code,
case
WHEN datediff(month,h_emp_mstr.emp_in_date,getdate())<= 1 THEN '1 MONTH'
WHEN datediff(month,h_emp_mstr.emp_in_date,getdate()) < 12 THEN cast(datediff(month,h_emp_mstr.emp_in_date,getdate()) as varchar)+'MONTHS'
WHEN datediff(month,h_emp_mstr.emp_in_date,getdate())>= 12 and datediff(month,h_emp_mstr.emp_in_date,getdate()) < 24 THEN '1 YEAR'
ELSE cast(datediff(YEAR,h_emp_mstr.emp_in_date,getdate()) as varchar) + 'YEARS'
END AS work_age,
getdate() adt_date,
rtrim(h_emp_mstr.emp_name) + ltrim(isnull(h_emp_mstr.emp_name_en,'')) as temp_name,
rtrim(cc_mstr.cc_desc) + ltrim(isnull(cc_mstr.cc_desc_en,'')) as temp_dept
FROM h_emp_mstr,
cc_mstr
WHERE ((h_emp_mstr.cc_code = cc_mstr.cc_code)and
( h_emp_mstr.emp_id >= :as_empid1 ) AND
( h_emp_mstr.emp_id <= :as_empid2 ) AND
( cc_mstr.cc_level >= :as_level1 ) AND
( cc_mstr.cc_level <= :as_level2 ) AND
( h_emp_mstr.emp_state = :as_state ) and
h_emp_mstr.emp_hire_type like :as_com+'%')
连续战斗了一天,累死了,不过,还是很有成就感的,嘿嘿.....
一客户要做奖券打印
一开始,我已经用LABEL风格的数据窗口做好了,很美观,GOOD! : )
可是一给客户,反映众多问题.
[如下:]
2.有工龄为0月的人员
3.工龄为2月或2年以上请在英文"YEAR"和"MONTH"后面加上"S"
4.请增设一个工龄计算截止日期
5. 导出后不能打印
第五点最为头痛.打印就打印,怎么又要导出?
哎,客户是魔鬼,也是上帝嘛~~~
怎么也得实现.
公司的输出系统不支持LABEL格式
试了一下,N-UP格式是支持的.
找不到相关例子和相关经验的人
试了半天,我靠!N-UP格式不支持每个栏分别使用计算字段.
气死偶也@@(
没办法也得想啊.....
想啊想啊想啊想.....
终于想到了一个很妙的办法,用SQL直接拼,哈哈哈.....
真是天才......
根据客户的多种需求以及我刚接触MSSQL,好不容易才把语句拼好了[如下:]
SELECT h_emp_mstr.emp_in_date,
h_emp_mstr.emp_state,
h_emp_mstr.emp_level,
h_emp_mstr.emp_hire_type,
h_emp_mstr.emp_id,
h_emp_mstr.cc_code,
case
WHEN datediff(month,h_emp_mstr.emp_in_date,getdate())<= 1 THEN '1 MONTH'
WHEN datediff(month,h_emp_mstr.emp_in_date,getdate()) < 12 THEN cast(datediff(month,h_emp_mstr.emp_in_date,getdate()) as varchar)+'MONTHS'
WHEN datediff(month,h_emp_mstr.emp_in_date,getdate())>= 12 and datediff(month,h_emp_mstr.emp_in_date,getdate()) < 24 THEN '1 YEAR'
ELSE cast(datediff(YEAR,h_emp_mstr.emp_in_date,getdate()) as varchar) + 'YEARS'
END AS work_age,
getdate() adt_date,
rtrim(h_emp_mstr.emp_name) + ltrim(isnull(h_emp_mstr.emp_name_en,'')) as temp_name,
rtrim(cc_mstr.cc_desc) + ltrim(isnull(cc_mstr.cc_desc_en,'')) as temp_dept
FROM h_emp_mstr,
cc_mstr
WHERE ((h_emp_mstr.cc_code = cc_mstr.cc_code)and
( h_emp_mstr.emp_id >= :as_empid1 ) AND
( h_emp_mstr.emp_id <= :as_empid2 ) AND
( cc_mstr.cc_level >= :as_level1 ) AND
( cc_mstr.cc_level <= :as_level2 ) AND
( h_emp_mstr.emp_state = :as_state ) and
h_emp_mstr.emp_hire_type like :as_com+'%')
连续战斗了一天,累死了,不过,还是很有成就感的,嘿嘿.....
浙公网安备 33010602011771号