精益求精(第二季)视频教程已经在B站发布了,总共九个小节,在第一季ERP进销存核心的基础上,深挖生产模块功能,为未来的工业4.0提供基础支撑。
https://space.bilibili.com/399421687/channel/detail?cid=149063
https://www.bilibili.com/video/BV1Jp4y1X71j
先管两头,不管中间
参考阅读:ESAP高级教程-深入系统架构
https://www.bilibili.com/video/BV1zi4y1s7HA
实现基本无级BOM分解示例
参考阅读:ESAP第九弹-无级BOM
https://www.bilibili.com/video/BV14T4y1J7RC
生产排产,派工入库,产品组装
https://www.bilibili.com/video/BV12z4y1Q7e4
工序派工,工序报工,工序进度
https://www.bilibili.com/video/BV1B54y127CL
物料需求计算(MRP)模板设计原理。
https://www.bilibili.com/video/BV1dv41117pk
反范式,空间换性能,空间换功能
https://www.bilibili.com/video/BV1Ut4y1i75d
填报优化,EXCEL导入,自动提取,爬虫,API对接
https://www.bilibili.com/video/BV1Wk4y1178f
数据库优化,查询优化,索引优化
https://www.bilibili.com/video/BV1bX4y1u7Da
江湖中的传说:万能的提数!
第二季视频教程主要围绕生产模块展开,涉及BOM,MRP,PMC,APS等诸多方面。
前五个章节从实现生产基本流程和功能:销售订单 -> 生产订单 -> 需求分解 -> 排产 -> 派工 -> 组装 -> 入库。
六七八节进一步深挖优化已有功能。
最后一个章节演示和强调SQL技术在开发中的重要性:最强后盾,没有之一。
最后,第二季番外篇视频已经陆续开播了,欢迎关注村长的B站↓↓↓
大道至简(第一季)视频教程已经在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