主题:很笨的程序:自动求公务员晋升级别、档次的函数
这是乌鸦才完成的:自动求公务员晋升级别、档次的函数(处分和降级要求用户手工计算)。
这是乌鸦人事软件中的1个函数,1个字符都未修改。
乌鸦都是用笨办法,一步一步地推算,尽量使用汉字来定义内存变量,并且写入关键地说明,以便自己推算和以后地维护,不考虑别人盗取的问题。某研究所2002年“拿”了乌鸦软件的全部设计资料,花3年多仿制后捞了数千万,但此类函数它们仿不出(开始牛B烘烘说半年完成)。乌鸦的用户过万,用户是党委政府的组织人事部门、大学人事处等,给票子的不到50,去年收入900元。最典型的是光大某分支结构干活科员来电话:领导不同意购买,乌鸦答曰:可以免费使用全部功能,敢用就是对乌鸦的支持,乌鸦很高兴,若给票子乌鸦会更高兴。这就是为什么自诩为:不黑的乌鸦。
由于此类函数太复杂,若用select语句,乌鸦不知道如何去实现,所以乌鸦干脆就不学该语句的用法。各位新狐狸,当你的功力不足时,用笨办法解决工程问题就是最好的办法。
*!*******************************************************
proc gzsp_自动填写_晋档晋级_考核起年度
para js_类型
priv m_晋级手工,m_晋档手工
* 编辑界面双击时,只求级别晋升考核起始年度
js_类型=iif(type('js_类型')='C',js_类型,'')
if used('gzsp_dwmc')
m_缓冲表_A='GZSP_DWMC'
m_主表_A='GZSP1'
m_缓冲表_B='GZSP_DWMC2'
m_主表_B='GZSP1_LTXX'
else
m_缓冲表_A='GZSP_MDMC'
m_主表_A='GZSP'
m_缓冲表_B='GZSP_MDMC2'
m_主表_B='GZSP_LTXX'
endi
sele(m_缓冲表_A) && 只在单位大表的年度考核名册
sr__标识号=bh
tmp=gz__记录号
sele(m_主表_A)
go tmp
sele ('gzsp_zk')
if .not.bh=SR__标识号
loca for bh=SR__标识号
endi
sele ('zk1')
if .not.bh=SR__标识号
set orde to zk1
seek SR__标识号
endi
sele(m_缓冲表_B) && 只在单位大表的年度考核名册
if .not.bh=sr__标识号
loca for bh=sr__标识号
endi
m_晋级手工=jbkh_手工
m_晋档手工=dckh_手工
tmp=gz__记录号
sele(m_主表_B)
go tmp
sele(m_缓冲表_A) && 只在单位大表的年度考核名册
g1_编制=trim(gzbzlb1_hz)
do gzsp_筛选各层次任职记录 with '考核信息' && 结果在 ls_工资层次.dbf 中
if .not.used('ls_工资层次')
use &user_ml.\ls_工资层次 in 0 excl
endi
sele('ls_工资层次')
* 如此索引,使晋升按执行时间做流水帐,避免计算出错
inde on gz_zxsj1+gz_pzsj1 to &user_ml.\ls_工资层次
m_大表执行年=val(left(gzsp_bt.gz_zxsj,4))
m_参加工作年=val(left(zk1.gs_hz,4))
m_今年=val(left(dtoc(date()),4))
sele(m_缓冲表_A)
m_呈报时间=left(gz_pzsj2,7)
m_执行时间=left(gz_zxsj2,7)
g1_岗位=trim(zw_gw1_hz)
do case
case m_晋级手工=1.and.val(jsjb_khnd1)>=2006
case '新录用'$zw_gw1_hz
case (val(jsjb_khnd1)<2006.or.js_类型=='只求级别'.or.js_类型=='强制修改');
.and.(g1_编制='公务员'.or.g1_编制='参照公务员')
sele('ls_工资层次')
set filt to left(gz_pzsj1,7)<m_呈报时间.and.left(gz_zxsj1,7)<m_执行时间
go bott
g1_岗位0=trim(zw_gw1_hz)
g1_岗位=trim(zw_gw1_hz)
g0_岗位=trim(zw_gw1_hz)
g_本级领导=''
g_本级非领导=''
g_下级领导=''
g_下级非领导=''
do case
case g1_岗位0='厅长'.or.g1_岗位0='巡视员'
if g1_岗位0='厅长'
g_本级领导='厅长'
g_本级非领导='巡视员'
endi
g1_岗位='厅长'
g0_岗位='巡视员'
g_下级领导='副厅长'
g_下级非领导='副巡视员'
case g1_岗位0='副厅'.or.g1_岗位0='副巡视员'
if g1_岗位0='副厅长'
g_本级领导='副厅长'
g_本级非领导='副巡视员'
endi
g1_岗位='副厅长'
g0_岗位='副巡视员'
g_下级领导='处长'
g_下级非领导='调研员'
case g1_岗位0='处长'.or.g1_岗位0='调研员'
if g1_岗位0='处长'
g_本级领导='处长'
g_本级非领导='调研员'
endi
g1_岗位='处长'
g0_岗位='调研员'
g_下级领导='副处长'
g_下级非领导='副调研员'
case g1_岗位0='副处'.or.g1_岗位0='副调研员'
if g1_岗位0='副处长'
g_本级领导='副处长'
g_本级非领导='副调研员'
endi
g1_岗位='副处长'
g0_岗位='副调研员'
g_下级领导='科长'
g_下级非领导='主任科员'
case g1_岗位0='科长'.or.g1_岗位0='主任科员'
if g1_岗位0='科长'
g_本级领导='科长'
g_本级非领导='主任科员'
endi
g1_岗位='科长'
g0_岗位='主任科员'
g_下级领导='副科长'
g_下级非领导='副主任科员'
case g1_岗位0='副科长'.or.g1_岗位0='副主任科员'
if g1_岗位0='副科长'
g_本级领导='副科长'
g_本级非领导='副主任科员'
endi
g1_岗位='副科长'
g0_岗位='副主任科员'
g_下非级领导='科员'
case g1_岗位0='科员'
g_下级非领导='办事员'
endc
g1_级别=trim(gwyjb1_hz)
g2_级别dm=val(gwyjb1)+1
g_执行年=left(gz_zxsj1,4)
g_执行年月=gz_zxsj1
do whil .not.bof()
n_现岗位=trim(zw_gw1_hz)
n_现级别=trim(gwyjb1_hz)
n_现级别dm=val(gwyjb1)
n_执行时=trim(gz_zxsj1)
do case
case n_现岗位=g1_岗位.and.n_现级别dm=g2_级别dm.and..not.val(subs(gz_zxsj1,5,2))=1
* 相同职务,但级别底一级,并且执行时间不是1月份,这是职务晋升顺序引起的混乱
g_执行年=left(gz_zxsj1,4)
g_执行年月=gz_zxsj1
skip -1
case n_现级别==g1_级别.or.n_现岗位==g_本级非领导.and.g1_岗位0==g_本级领导.and.val(gwyjb1)=g2_级别dm;
.or.(n_现岗位==g_下级领导.or.n_现岗位==g_下级非领导).and.val(gwyjb1)=g2_级别dm
* 非领导职务晋升同级别的领导职务,级别也晋升1级
* 当职务晋升时发生1个级别晋升,级别考核起始年度不变
* 岗位=下一职务层次 .and. 级别数=现级别数+1
g_执行年=left(gz_zxsj1,4)
g_执行年月=gz_zxsj1
skip -1
othe
exit
endc
endd
m_今年=left(dtoc(date()),4)
do case
case val(g_执行年)<2006.and.val(g_执行年)>1
* 查到有效的工资记录, 级别=2006年7月套改的级别,取套改前的年度
g_执行年月='2006.07'
g_执行年='2006'
case val(g_执行年)<=0
* 未查到工资记录
do case
case m_参加工作年>1.and.m_参加工作年<=2006
g_执行年月='2006.07'
g_执行年='2006'
case m_参加工作年>=val(g_执行年)-4
g_执行年=str(m_参加工作年,4) && 默认为参加工作的年度
othe
g_执行年=str(m_大表执行年-3) && 2009年默认2006年
endc
if val(g_执行年)<2006
g_执行年='2006'
endi
endc
if empty(g1_岗位)
g_执行年=''
endi
sele(m_主表_A)
if js_类型=='只求级别'.and..not.trim(jsjb_khnd1)==g_执行年
=messagebox( '从工资变动登记表自动求的晋升级别考核起始年不相同',48,"")
endi
repl jsjb_khnd1 with g_执行年
sele(m_缓冲表_A)
repl jsjb_khnd1 with g_执行年
db_编辑字段0='JSJB_KHND1'
do gzsp_晋升考核年度_存回gzsp_zx
endc
sele(m_缓冲表_A)
if js_类型=='只求级别'
return
endi
这是乌鸦人事软件中的1个函数,1个字符都未修改。
乌鸦都是用笨办法,一步一步地推算,尽量使用汉字来定义内存变量,并且写入关键地说明,以便自己推算和以后地维护,不考虑别人盗取的问题。某研究所2002年“拿”了乌鸦软件的全部设计资料,花3年多仿制后捞了数千万,但此类函数它们仿不出(开始牛B烘烘说半年完成)。乌鸦的用户过万,用户是党委政府的组织人事部门、大学人事处等,给票子的不到50,去年收入900元。最典型的是光大某分支结构干活科员来电话:领导不同意购买,乌鸦答曰:可以免费使用全部功能,敢用就是对乌鸦的支持,乌鸦很高兴,若给票子乌鸦会更高兴。这就是为什么自诩为:不黑的乌鸦。
由于此类函数太复杂,若用select语句,乌鸦不知道如何去实现,所以乌鸦干脆就不学该语句的用法。各位新狐狸,当你的功力不足时,用笨办法解决工程问题就是最好的办法。
*!*******************************************************
proc gzsp_自动填写_晋档晋级_考核起年度
para js_类型
priv m_晋级手工,m_晋档手工
* 编辑界面双击时,只求级别晋升考核起始年度
js_类型=iif(type('js_类型')='C',js_类型,'')
if used('gzsp_dwmc')
m_缓冲表_A='GZSP_DWMC'
m_主表_A='GZSP1'
m_缓冲表_B='GZSP_DWMC2'
m_主表_B='GZSP1_LTXX'
else
m_缓冲表_A='GZSP_MDMC'
m_主表_A='GZSP'
m_缓冲表_B='GZSP_MDMC2'
m_主表_B='GZSP_LTXX'
endi
sele(m_缓冲表_A) && 只在单位大表的年度考核名册
sr__标识号=bh
tmp=gz__记录号
sele(m_主表_A)
go tmp
sele ('gzsp_zk')
if .not.bh=SR__标识号
loca for bh=SR__标识号
endi
sele ('zk1')
if .not.bh=SR__标识号
set orde to zk1
seek SR__标识号
endi
sele(m_缓冲表_B) && 只在单位大表的年度考核名册
if .not.bh=sr__标识号
loca for bh=sr__标识号
endi
m_晋级手工=jbkh_手工
m_晋档手工=dckh_手工
tmp=gz__记录号
sele(m_主表_B)
go tmp
sele(m_缓冲表_A) && 只在单位大表的年度考核名册
g1_编制=trim(gzbzlb1_hz)
do gzsp_筛选各层次任职记录 with '考核信息' && 结果在 ls_工资层次.dbf 中
if .not.used('ls_工资层次')
use &user_ml.\ls_工资层次 in 0 excl
endi
sele('ls_工资层次')
* 如此索引,使晋升按执行时间做流水帐,避免计算出错
inde on gz_zxsj1+gz_pzsj1 to &user_ml.\ls_工资层次
m_大表执行年=val(left(gzsp_bt.gz_zxsj,4))
m_参加工作年=val(left(zk1.gs_hz,4))
m_今年=val(left(dtoc(date()),4))
sele(m_缓冲表_A)
m_呈报时间=left(gz_pzsj2,7)
m_执行时间=left(gz_zxsj2,7)
g1_岗位=trim(zw_gw1_hz)
do case
case m_晋级手工=1.and.val(jsjb_khnd1)>=2006
case '新录用'$zw_gw1_hz
case (val(jsjb_khnd1)<2006.or.js_类型=='只求级别'.or.js_类型=='强制修改');
.and.(g1_编制='公务员'.or.g1_编制='参照公务员')
sele('ls_工资层次')
set filt to left(gz_pzsj1,7)<m_呈报时间.and.left(gz_zxsj1,7)<m_执行时间
go bott
g1_岗位0=trim(zw_gw1_hz)
g1_岗位=trim(zw_gw1_hz)
g0_岗位=trim(zw_gw1_hz)
g_本级领导=''
g_本级非领导=''
g_下级领导=''
g_下级非领导=''
do case
case g1_岗位0='厅长'.or.g1_岗位0='巡视员'
if g1_岗位0='厅长'
g_本级领导='厅长'
g_本级非领导='巡视员'
endi
g1_岗位='厅长'
g0_岗位='巡视员'
g_下级领导='副厅长'
g_下级非领导='副巡视员'
case g1_岗位0='副厅'.or.g1_岗位0='副巡视员'
if g1_岗位0='副厅长'
g_本级领导='副厅长'
g_本级非领导='副巡视员'
endi
g1_岗位='副厅长'
g0_岗位='副巡视员'
g_下级领导='处长'
g_下级非领导='调研员'
case g1_岗位0='处长'.or.g1_岗位0='调研员'
if g1_岗位0='处长'
g_本级领导='处长'
g_本级非领导='调研员'
endi
g1_岗位='处长'
g0_岗位='调研员'
g_下级领导='副处长'
g_下级非领导='副调研员'
case g1_岗位0='副处'.or.g1_岗位0='副调研员'
if g1_岗位0='副处长'
g_本级领导='副处长'
g_本级非领导='副调研员'
endi
g1_岗位='副处长'
g0_岗位='副调研员'
g_下级领导='科长'
g_下级非领导='主任科员'
case g1_岗位0='科长'.or.g1_岗位0='主任科员'
if g1_岗位0='科长'
g_本级领导='科长'
g_本级非领导='主任科员'
endi
g1_岗位='科长'
g0_岗位='主任科员'
g_下级领导='副科长'
g_下级非领导='副主任科员'
case g1_岗位0='副科长'.or.g1_岗位0='副主任科员'
if g1_岗位0='副科长'
g_本级领导='副科长'
g_本级非领导='副主任科员'
endi
g1_岗位='副科长'
g0_岗位='副主任科员'
g_下非级领导='科员'
case g1_岗位0='科员'
g_下级非领导='办事员'
endc
g1_级别=trim(gwyjb1_hz)
g2_级别dm=val(gwyjb1)+1
g_执行年=left(gz_zxsj1,4)
g_执行年月=gz_zxsj1
do whil .not.bof()
n_现岗位=trim(zw_gw1_hz)
n_现级别=trim(gwyjb1_hz)
n_现级别dm=val(gwyjb1)
n_执行时=trim(gz_zxsj1)
do case
case n_现岗位=g1_岗位.and.n_现级别dm=g2_级别dm.and..not.val(subs(gz_zxsj1,5,2))=1
* 相同职务,但级别底一级,并且执行时间不是1月份,这是职务晋升顺序引起的混乱
g_执行年=left(gz_zxsj1,4)
g_执行年月=gz_zxsj1
skip -1
case n_现级别==g1_级别.or.n_现岗位==g_本级非领导.and.g1_岗位0==g_本级领导.and.val(gwyjb1)=g2_级别dm;
.or.(n_现岗位==g_下级领导.or.n_现岗位==g_下级非领导).and.val(gwyjb1)=g2_级别dm
* 非领导职务晋升同级别的领导职务,级别也晋升1级
* 当职务晋升时发生1个级别晋升,级别考核起始年度不变
* 岗位=下一职务层次 .and. 级别数=现级别数+1
g_执行年=left(gz_zxsj1,4)
g_执行年月=gz_zxsj1
skip -1
othe
exit
endc
endd
m_今年=left(dtoc(date()),4)
do case
case val(g_执行年)<2006.and.val(g_执行年)>1
* 查到有效的工资记录, 级别=2006年7月套改的级别,取套改前的年度
g_执行年月='2006.07'
g_执行年='2006'
case val(g_执行年)<=0
* 未查到工资记录
do case
case m_参加工作年>1.and.m_参加工作年<=2006
g_执行年月='2006.07'
g_执行年='2006'
case m_参加工作年>=val(g_执行年)-4
g_执行年=str(m_参加工作年,4) && 默认为参加工作的年度
othe
g_执行年=str(m_大表执行年-3) && 2009年默认2006年
endc
if val(g_执行年)<2006
g_执行年='2006'
endi
endc
if empty(g1_岗位)
g_执行年=''
endi
sele(m_主表_A)
if js_类型=='只求级别'.and..not.trim(jsjb_khnd1)==g_执行年
=messagebox( '从工资变动登记表自动求的晋升级别考核起始年不相同',48,"")
endi
repl jsjb_khnd1 with g_执行年
sele(m_缓冲表_A)
repl jsjb_khnd1 with g_执行年
db_编辑字段0='JSJB_KHND1'
do gzsp_晋升考核年度_存回gzsp_zx
endc
sele(m_缓冲表_A)
if js_类型=='只求级别'
return
endi