大道至简(第一季)视频教程已经在B站发布了,总共九个小节,手把手从零开始教你完成ERP进销存核心系统搭建。
https://www.bilibili.com/video/BV1LZ4y147mF
万事开头难,先开框架表,再开模板,开头变得很简单
参考阅读:ESAP高级教程-深入系统架构
https://www.bilibili.com/video/BV1Ki4y1b7mw
针对框架表进行算法设计,从零建设库存系统
参考阅读:ESAP第六弹-精简的艺术
参考阅读:ESAP第十三弹-视图盛宴
https://www.bilibili.com/video/BV1Cf4y1S73T
https://www.bilibili.com/video/BV1pa4y1i7MW
使用标准模板,复制映射到框架表,快速裂变业务模板,一生二,二生三,三生ERP
参考阅读:ESAP第二弹-数据映射
参考阅读:ESAP第十一弹-通用审核工作流
参考阅读:聚慧秘籍:工作流数据随时修正
https://www.bilibili.com/video/BV1vz4y1R7QR
ESAP标准设计规范
https://www.bilibili.com/video/BV1J541147Am
映射打印模板,映射查询模板,映射报表模板,一表流,让后期管理变轻松。
https://www.bilibili.com/video/BV1Pf4y1U7ma
5分钟实现手机填报,PDA报工等功能
https://www.bilibili.com/video/BV1s54y1D7FL
https://www.bilibili.com/video/BV1Hk4y167Kk
模板人性化,熟练运用条件格式,单元格自定义格式,控制规则等方式。
https://www.bilibili.com/video/BV1PK4y1t7Vi
https://www.bilibili.com/video/BV14K411W7mP
订单 - 收发货 - 发票 - 收付款,完整数据链最终形成订单台账
https://www.bilibili.com/video/BV1AK411s7fx
https://www.bilibili.com/video/BV1cV411C792
大道至简,从linux二进制状态获得灵感,实现控制ERP的灵活状态管理方案。
第一季视频教程主要围绕ERP的进销存核心展开。
前三个章节从零开始实现初级功能,展现村长的开发过程第一视角,非常珍贵,请尽量耐心全屏看完每个细节。
中间三个章节主要结合NX平台本身的特性,完成一些中级功能,例如:报表,打印,移动APP。
最后三个章节深挖算法和细节,实现高级功能。
最后,第二季视频已经开播了,欢迎关注村长的B站↓↓↓
在日常业务中,销售订单等经常会修改重审,如何让复审人快速知道修改了哪些字段值。
通常,我们可能会考虑备份订单,也就是每次保存都生成一个副本,然后根据上一次的副本来逐个字段对比。
这种方式的缺点有两个:
是对比工作量过大,特别是订单明细里有大量数据。
设计更新工作量大,如果订单模板有设计更新,那么备份模板也要进行一次更新。
本文将采用一种动态即时对比法,通过定点触发器,通用存储过程配合完成被修改字段的精确识别。
最终效果如下图:
我的订单明细为订单D
,在订单D表上创建触发器t_order_log
该触发器主要将update过程中的deleted表(旧数据)和inserted表(新数据)存入临时复制表(abak)。
然后执行对比存储过程(pChkChg),输出对比结果到日志表,代码如下:
create TRIGGER t_order_log
ON 订单d
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
--清理旧abak表
if object_id('abak') is not null
drop table abak;
--复制新旧数据到abak表,tt为标识,旧0新1
select 0 as tt,*
into abak
from deleted
union all
select 1 as tt,*
from inserted
--对abak执行对比
exec pChkChg 'abak'
END
通用对比存储过程(pChkChg)包含一个入参@tname,可对任意特征表进行处理。
-- =============================================
-- Author: <一零院长>
-- Create date: <2020-4-22>
-- Description: <订单修改追踪>
-- =============================================
alter proc pChkChg
@tname varchar(100)
as
begin
declare @sql nvarchar(max)
declare @hfld nvarchar(max) --表值转换
declare @fld nvarchar(max) --表字段
--从系统表获取备份表的所有字段
set @fld=(select (SELECT ','+syscolumns.name
FROM syscolumns
WHERE syscolumns.id = object_id(@tname) and syscolumns.name not in('tt','sequence','recordid')
for xml path('')))
set @fld=stuff(@fld,1,1,'')
--从系统表拼接所有字段转换,类型统一为varchar(max)
set @hfld=(select (SELECT ',' + syscolumns.name + '=cast(' + syscolumns.name+ ' as nvarchar(max))'
FROM syscolumns
WHERE syscolumns.id = object_id(@tname) and syscolumns.name<>'tt'
for xml path('')))
set @hfld=stuff(@hfld,1,1,'')
--拼接字符串,列转行对比后将差异存入日志表
set @sql='
with tb as (select tt,' + @hfld + ' from ' + @tname + '),
t1 as (select * from tb unpivot (值 for 列名 in(' + @fld + '))upvt where tt=0) ,
t2 as (select * from tb unpivot (值 for 列名 in(' + @fld + '))upvt where tt=1)
insert 修改日志表(recordid,createtime,行号,描述)
select recordid,getdate(),sequence+1
,(select ''【''+t1.列名+''】''+t1.值+''改为''+t2.值 from t1 left join t2 on t1.列名=t2.列名 and t1.RecordID=t2.RecordID and t1.Sequence=t2.Sequence where t1.值<>t2.值 and t1.RecordID=tb.RecordID and t1.Sequence=tb.Sequence for xml path(''''))
from tb where tt=0'
--执行拼接sql
exec(@sql)
end
日志表很简单,只有两个用户字段
修改销售订单模板,增加一个明细,3个字段,被修改行号
,修改日期
,修改描述
修改描述建议设置为大文本(text)。
将上述第1步的触发器挂在其他表,即可实现对其他表修改记录的精确记录。
可以将对比结果插入到esap_提醒,此部分请读者自行完成。
利用触发器转存被修改的数据的前后记录。
利用通用存储过程处理转存的记录。
采用unpivot进行列转行,更方便对比输出,此功能sql2005+支持。
此功能仅JU/NX支持,并且需要明细表也设有主键。
2020-4-22
@benava:我们已经有ES系统了,想做移动应用,让司机们可以通过微信管理车队。
车队管理本质是设备管理,日常管理主要包括基本数据维护和维修保养日志,移动应用方案可以通过下面步骤实现。
1.画4个模板:机台设置、维保分类、维保记录和维保查询,设置匿名填报,发布手机端。
2.在企业微信中设置两组按钮,一组填报,一组查询。
随便画4个模板,定义好字段就行,界面无要求。
设置匿名填报权限,然后发布手机端。
修改server/webchat/anonymous.xml,增加4个匿名填报
登陆企业微信后台,设置两组按钮,填报+查询
完成
司机可从企业微信直接填报保养记录。
填报好的记录可以一键查询。
利用nx的匿名填报,可以很容易实现各种按钮+页面组合,快速填报+查询
当然,如果只是扫描查询,不需要输入参数,也可以直接用esap,只需要1分钟^_^
2020-3-23
在人人防疫新肺的当下,人们往往容易忽视另一个病毒的存在:网络勒索病毒。
关于这个问题,村长以前也发表过文章,谈到相关经验和教训,见《ESAP中级教程-与勒索病毒战斗的那些事》
本期,村长结合sqlserver的数据库复制发布订阅功能,来给大家讲一讲更有意义的影分身之术
这次方案以村长的开发机
,云备机
,体验服
为示例,最终建成下图所示的同步架构。
其中阿里云主机和体验服都会实时同步开发机上的nxt
库,形成两地三中心
灾备模式。
村长的开发机(NAS12)数据库是sql2008r2,安装时需要勾选SQL Server复制
组件。
注意,主机和备机都要启动此组件
开发机(NAS12)与云主机(IESAP)是异地网络,需要修改hosts文件,指定云主机IP。
注意,主机和备机如果不是同一个局域网都要修改hosts让计算机名与外网IP对应,以便能直接通过主机名访问。
进入开发机SSMS,登陆数据库,点击【复制】-【本地发布】-【右键新建发布】,选择发布nxt
数据库。
发布类型选择【事务发布】
勾选全部对象
立即创建快照
启动快照代理
发布完成
进入sql配置管理,确保启动了Browser和代理服务。
注意,主机和备机都要启动此服务
进入云主机,登陆数据库,点击【复制】-【本地订阅】-【右键新建订阅】
选择开发机(NAS12)发布服务器
选择nxt
数据库。
这里村长选择推送订阅,也就是主机(NAS12)推送给从机(IESAP)。
订阅到本地nxt
数据库。
设置本地代理sa账号
连续执行
立即初始化
完成
在开发机上新建一个提醒
在云主机上查询一下,可以看到,立即同步了
同步情况还可以在开发机上进行监视
重复第5步,将体验服(NAS19)也加入订阅
然后在ES/JU/NX中挂载一下这个数据库就实现一台自动同步开发机更新的体验服了!棒棒哒~
监视器报告不能连接到订阅服务器
,一般是没配置好hosts
如果报告进程无法在“xxxx”上执行“sp_replcmds”
,那就在sql里执行以下下列脚本,配置dbo权限
USE nxt --nxt改成你的数据库名
GO
sp_changedbowner 'sa'
这里村长演示的是异地单向同步,因为体验服经常需要还原记录。
其实利用SQL Server的发布订阅功能我们还能制作双向同步的数据库,更适合开发-生产的主从模式。
当然,你还可以试试镜像功能,具有实时故障迁移能力,让你的ERP具有多重影分身,九条命,永不宕机!
by 一零村长
2020-3-19
感谢@杭州-风清扬
分享(jiangcj365@qq.com)
我和你们讲讲我一个客户的例子:
这家公司也是做机械的,老板从作坊做起,开始十多个人,开始都是贴心贴肺的和他一起搞的人,后来公司慢慢做大,这些人都是各个部门的铁盘子,员工走了一批又一批,也请来了很多牛人,有水平的人,结果人家都适应不了,都走了,这十多人还是一直不变,企业因为单子好,生意还不错,一直稳步增长
但是近些年,老板总感觉企业突破不了,好像遇到了瓶颈,其实他也知道,是那最初的十几个人管理经验欠缺,又守旧,不愿意改进,但是碍于面子,不好辞退,也不好降级
但是到了真动刀的时候,老板也开始一个个动刀了,但是难题来了,他发现这十多个人都是骨干,很多公司资源,信息都在这几个人脑子里
你现在想不用他们,他们怎么可能会同意带一个有学历的徒弟出来
别人来了,即使有能力,但是因为不熟悉,一时上不了手,信息都在那几个人脑子里
纸上都不愿意给写的人
老板听一个同行业的兄弟说,你可以试着搞搞软件上个ERP
于是老板买了ERP,开始一点点的专人负责收集信息
今天挖你一点,明天挖他一点,在生产中再去检验
慢慢的几年过去,那几个人的信息都被挖的差不多了
再也没有人敢牛逼的说,没有我,这个公司转不了
于是愿意留下来的,到了车间做老师傅,不再做管理岗位,不愿意留下来的就走了
公司来了先进的管理人员,通过ERP信息,很快就能上手,公司也突破了瓶颈
从这个事情可以了解到,不是中小企业没有这个需求,相反,他们很有需求,只是没有个好的领路人
这信息化搞的,不比上个ISO香吗
老板可以和你共苦,但是企业做好了,未必肯和你共享福
当你以元老自居阻碍公司发展的时候,老板有的是办法
是可以一起分享有限的价值
你领导能力在那里,学历也在那里,企业发展初期给了你重要位置,之后你总是担心会被社会上的新人代替
针对这种情况,你会无动于衷吗
有学习能力的人可能会提高自己,继续可以胜任,另一种人就是搅屎棍,上ERP不是找死,是找对每个人的位置!
2020-2-28