关于“DEP数据执行保护”的解决方案



引入场景:在项目中,由于需要采用HOOK技术对记事本及OFFICE进行相关API挂钩,所以就必须应用到远程线程注入技术,我的代码是这样的:
                //修改内存页的属性
                DWORD dwOLD;
                MEMORY_BASIC_INFORMATION  mbi;
                VirtualQuery(lpAddr,&mbi,sizeof(mbi));
                VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE ,&dwOLD);

                WriteProcessMemory(GetCurrentProcess(),lpAddr, &NewPage, sizeof(DWORD), NULL);

                //恢复内存页的属性
                VirtualProtect(lpAddr,sizeof(DWORD),dwOLD,0);
遗憾的是一运行到这里,就弹出DEP数据执行保户错误,应用程序退出。


介绍:Microsoft Windows XP Service Pack 2 使用一项新的数据执行保护 (DEP) 功能,可禁止执行数据页中的代码。当尝试运行标记的数据页中的代码时,就会立即发生异常并禁止执行代码。这可以防止攻击者使用代码致使数据缓冲区溢出,然后执行该代码。

    与防火墙或防病毒程序不同,DEP 不能阻止在您的计算机上安装有害程序。但是,它会监视您的程序,以确定它们是否安全地使用系统内存。为此,DEP 软件会单独或与兼容的微处理器一起将某些内存位置标记为“不可执行”。如果某个程序尝试从受保护的位置运行代码,DEP 将关闭该程序并通知您。即使该代码不是恶意代码,也会执行此操作。

64 位 Windows 版本上的 DEP

64 位处理器上的 64 位 Windows 版本可以在 64 位模式下运行程序。无论处理器的结构如何,64 位 Windows 版本的内核模式 DEP 均适用于堆栈、页面缓冲池和会话池。默认情况下,在 Windows XP SP2 中启用 DEP,并且无法将其禁用。64 位应用程序将无法从堆栈或默认进程堆中运行。对于需要分配可执行内存的应用程序,可使用带有某个 PAGE_EXECUTE* 内存属性的 VirtualAlloc( ) 来运行。

内核模式 DEP
对于用户模式和内核模式,DEP 的工作原理相同。在内核模式下,不能分别为每个驱动程序启用或禁用内存区域 DEP。默认情况下,在 32 位 Windows 版本上,DEP 仅适用于堆栈。在 64 位 Windows 版本上,DEP 适用于堆栈、页面缓冲池和会话池。内核模式下的访问冲突将导致出现 Bugcheck 0x000000FC:ATTEMPTED_EXECUTE_OF_NONEXECUTE_MEMORY。

兼容性问题

应用程序和驱动程序都可能会发生 DEP 兼容性问题。• 应用程序兼容性有些应用程序行为可能与 DEP 不兼容。执行动态代码生成(如实时代码生成)的应用程序以及不使用“执行”权限明确标记生成的代码的应用程序与 DEP 之间可能存在兼容性问题。
试图违反 DEP 的应用程序将会出现异常,并显示状态代码 STATUS_ACCESS_VIOLATION (0xc0000005)。如果应用程序需要可执行内存,则必须在相应的内存中明确设置此属性,方法是在 Virtual* 内存分配函数的内存保护参数中指定 PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE 或 PAGE_EXECUTE_WRITECOPY。

驱动程序兼容性
驱动程序与 DEP 的兼容性问题主要是指由 PAE 模式引起的兼容性问题。DEP 本身可能与以下驱动程序之间存在兼容性问题:执行代码生成的驱动程序或使用其他方法实时生成可执行代码的驱动程序。始终为 64 位 Windows 版本上加载的驱动程序启用 DEP 支持。尽管许多创建可执行代码的驱动程序在 Windows XP SP2 中可能已得到修复,但是不能保证所有驱动程序都已更新。不过,因为使用这些方法的驱动程序非常少,所以 DEP 本身不会产生很多驱动程序兼容性问题。大多数驱动程序兼容性问题与在 32 位系统上运行 PAE 模式有关。如果启用 PAE 模式,有些驱动程序可能无法加载,这是因为该设备可能无法进行 64 位寻址,或者驱动程序可能假定 PAE 模式需要超过 4 GB 的 RAM。这些驱动程序认为,当它们处于 PAE 模式时,它们将始终接收 64 位地址,并认为它们(或其设备)无法解释该地址。
其他驱动程序可通过直接修改系统页表项,以便在 PAE 模式下进行加载,但这会导致系统不稳定。这些驱动程序需要 32 位页表项,但在 PAE 模式下它们收到的却是 64 位页表项。驱动程序与 PAE 之间最大的兼容性问题与直接内存访问 (DMA) 传输和映射寄存器分配有关。许多支持 DMA 的设备(通常是 32 位适配器)都无法进行 64 位物理寻址。当设备在 32 位模式下运行时,它可以对所有物理地址空间进行寻址。在 PAE 模式下,数据可以位于大于 4 GB 的物理地址中。在此情况下,为使具有这些限制的设备能够正常工作,Windows XP SP2 通过提供由映射寄存器指示的 32 位地址,为 DMA 事务提供双缓冲处理。设备可以执行到 32 位地址的 DMA 事务,而且内核将内存复制到为驱动程序提供的 64 位地址。当系统在禁用 PAE 的情况下运行时,32 位设备的驱动程序根本不需要实际内存来支持它们的映射寄存器。这意味着,不需要进行双缓冲处理,因为 32 位地址空间中包含所有设备和驱动程序。根据在基于 x86 和基于 x64 的计算机上对 32 位设备驱动程序进行的测试,大多数经过客户端测试并支持 DMA 的驱动程序都需要无限制的映射寄存器。
为限制兼容性问题,Windows XP SP2 对硬件抽象层 (HAL) 进行了更改以模拟 32 位 HAL DMA 行为。修改后的 HAL 使系统在 PAE 模式下运行时可以具有无限制的映射寄存器。另外,内核内存管理器忽略任何大于 4 GB 的物理地址。由于对 HAL 和内存管理器进行了这些更改,我们预计运行 Windows XP SP2 且支持 DEP 的系统上的设备驱动程序兼容性问题将会降到最低。

开发人员备注
需要可执行内存区域的应用程序在分配内存时,必须使用 PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE 或 PAGE_EXECUTE_WRITECOPY 属性。另外,应用程序不能从默认进程堆或堆栈执行。

大多数执行与 DEP 不兼容的操作的应用程序必须进行更新,以便与 DEP 保持兼容。如果某个应用程序从专用堆分配可执行内存,则必须确保该堆内存中设置了 EXECUTE 标志。该应用程序可以使用 VirtualAlloc 应用程序编程接口 (API) 分配具有适当保护设置的内存。

如果应用程序不从专用堆分配可执行内存,则必须对其进行修改以使其从专用堆分配可执行内存。该应用程序必须使用 VirtualAlloc API 创建此堆,并且至少为该内存指定 EXECUTE 标志。生成的任何代码必须放在该可执行堆中。

在生成可执行代码后,我们建议您为该应用程序设置内存保护,以禁止通过 VirtualProtect API 对该堆进行写访问。该措施将为进程地址空间的那些可执行区域提供更多保护。

配置和疑难解答

与数据执行保护支持有关的故障的症状包括:在启用 DEP 时尝试从内存执行的应用程序中发生访问冲突。在此情况下,将出现一个对话框,指示应用程序因 DEP 而出现错误。该对话框包含与以下内容类似的

消息:
数据执行保护
Windows 安全功能检测到一个问题,并关闭了此程序。
名称:应用程序名称
发行商:应用程序发行商

数据执行保护帮助保护免受病毒和其他安全威胁的破坏。它是如何工作的?
(后跟“高级”和“确定”按钮。)
如果 DEP 是导致应用程序出现错误的原因,建议您与应用程序供应商取得联系,以确定是否有可用的更

新,以使应用程序在启用 DEP 时能够正常运行。要解决这些问题,建议您安装此更新。

在单击“确定”后,将出现一个标准的 Windows 错误报告提示,并提供一个发送错误报告的选项。还可

以通过“单击此处”选项查看收集了哪些信息。

在错误报告界面上单击“单击此处”链接后,将出现详细信息界面。在该数据的“错误签名”部分,您可

以查看是否将此错误标识为“事件类型:BEX。BEX 指示与 DEP 相关的错误。

此界面还提供其他信息,这些信息主要来自一些异常参数: 参数 数据
1 应用程序名称
2 应用程序版本
3 应用程序时间戳
4 模块名称
5 模块版本
6 模块时间戳
7 模块偏移
8 异常代码(c0000005=访问冲突、c0000409=缓冲区溢出)

在初始界面上,您还可以单击“高级”来访问 DEP 配置设置。您可以使用这些设置为出现错误的应用程序添加例外项。

“数据执行保护”对话框提供以下三个选项:• 为所有程序启用 DEP(推荐)
• 关闭 DEP(不推荐)
• 帮助保护除下列程序之外的所有程序:
通过选择其中一个选项,您可以排除一个或多个应用程序,或者为整个计算机配置 DEP 设置。如果设置“关闭 DEP”选项,则会为当前运行的 Windows 安装的 boot.ini 配置文件添加一个开关。boot.ini 开关如下所示:• /noexecute — 这是默认开关。启用 DEP。
• /execute — 它禁用 DEP。
注意:建议您不要全局性地禁用 DEP。这会使计算机处于不太安全的状态。

也可以在“系统”属性中访问这些 DEP 设置。

如果没有适用于您的应用程序的更新,请按照下列步骤操作以访问和配置 DEP 配置设置:1. 在应用程序

出现错误时,单击“高级”。
2. 在“数据执行保护”对话框中,选择“帮助保护除下列程序之外的所有程序:”
3. 单击应用程序旁边的复选框,然后单击“应用”。
4. 这时会出现一个提示,告诉您必须重新启动系统。单击“确定”。
5. 再次单击“确定”,然后重新启动系统。
也可以在“系统”属性中执行此过程:1. 单击“开始”,然后单击“控制面板”。
2. 在经典视图中,双击“系统”。
3. 单击“高级”选项卡,单击“性能”,然后单击“设置”。
4. 在“性能选项”对话框中,单击“数据执行保护”选项卡。
5. 选择“为所有程序和服务启用 DEP,但我选择的程序和服务除外:”,然后单击“添加”。
6. 在“打开”对话框中,找到并选择该应用程序,然后单击“打开”。
7. 单击“应用”,然后单击“确定”。将出现一个提示,通知您必须重新启动系统后设置才能生效。单

击“确定”。

解决办法:
作为软件开发者,我们应当尽理避免去采用配置的方法关闭用户系统的DEP保护,于是我试着对代码中相关部分加入EXECUTE权限,即
1.对远程线程注入加入EXECUTE权限
    void *pAddress=VirtualAllocEx(hProcess,NULL,strlen       

(DllName),MEM_COMMIT,PAGE_EXECUTE_READWRITE );
2.对IAT加入EXECUTE权限
    VirtualProtect(lpAddr,sizeof(DWORD),PAGE_EXECUTE_READWRITE ,&dwOLD);
编译,注入,OK!

有的网友说,”必须将跳板函数和钩子函数导出“,幸运的是,经过测试,这个步骤暂时并不需要。

DEP大类 DEP方案编码 DEP方案中文名称 业务场景 简要实现方案 参考开发工作量(人/天) 新增及调整字段 EASSCMA1P0001 采购入库单增加项目字段 希望能实现项目采购,需要在采购入库单中加入项目字段,调用辅助资料中的“项目”基础资料; "1、 采购入库单增加“采购项目”字段; 2、 配置“采购项目”取辅助资料“项目” " 0.1 新增及调整字段 EASSCMA1P0005 领料出库单增加对方科目字段 领料出库单生成凭证时,对应的费用类科目明细很多。难以通过BOTP配置取不同的科目,希望在表头增加“对方科目”字段,并支持在BOTP中进行配置。 在领料出库单的表头增加“对方科目”字段,并支持在“领料出库单-凭证”的BOTP中进行配置。 0.5 新增及调整字段 EASSCMA1P0005 销售订单中增加订单时间、发货时间、交货时间并精确到分秒 精细化工行业对销售订单中所涉及到的时间要求非常精确,如要求订单日期、发货日期、交货日期要精确到分钟。现有的销售订单基础上增加三个字段,分别表示订单时间、发货时间、交货时间,以此解决客户需求。 "1. 销售订单分录上面增加订单时间、发货时间、交货时间字段; 2. 增加的日期字段支持时分秒; 3. 界面锚定正确,过滤界面,序时薄界面显示正确。 " 0.5 新增及调整字段 EASSCMA1P0006 EAS供应链_采购入库单处理总本位币金额和总金额并显示到单头上 采购入库单中“总本位币金额” “总金额”两个字段启用,要求金额计算准确 "1. 采购入库单编辑界面将总金额和总本位币金额字段放出来进行数据显示; 2. 采购入库单审核时。同步更新该字段。使其值正确; " 0.5 新增及调整字段 EASSCMA1P0007 领料申请单分录里增加成本对象编码名称 在领料申请单新增界面没有成本对象编码和成本对象名称列。 "1. 领料申请单增加成本对象和成本对象名称两列 2. 增加监听器处理。成本对象选择后,同步更新成本对象名称列 " 0.5 新增及调整字段 EASSCMA1P0008 销售订单中增加“库位”字段 销售订单分录中增加“库位”字段。 1、 销售订单分录增加库位字段 0.5 新增及调整字段 EASSCMA1P0009 付款单单头增加“国家”字段 银企互联,EAS中的付款单提交到银企后,由于付款单没有收款方国家字段,导致提交失败 付款单上增加“国家”字段,F7录入,范围为辅助资料中的"国家",必录 0.2 新增及调整字段 EASSCMA1P0009 付款单单头增加“国家”字段 客户为餐饮企业,每日进行采购,且采购物品85%左右相同,做采购申请单时,往往是复制上日的采购申请单,然后再进行修改,其中很大程度上只是修改日期(包括单头的申请日期、分录的需求日期和交货日期),但现在只能逐行修改分录的需求日期和交货日期,工作量太大,希望修改表头申请日期后,表体的需求日期和交货日期能自动跟着修改 添加脚本,监听单头的申请日期,当该字段的值有改动后,自动将值赋给需求日期和交货日期。 0.5 新增及调整字段 EASSCMA1P0010 领料申请单增加库位 客户有大量批次物料需要在领料申请单上录入,操作时使用系统台账新增分录功能录入。由于申请单上没有库位信息,导致申请单关联生成领料出库单后库位信息不能携带,仓管员不得不手工录入库位信息,给操作上带来极大的不便。 "1、领料申请单加上“库位”字段,非必录,可编辑,F7类型; 2、台账新增分录时,自动从台账携带。 " 0.5 新增及调整字段 EASSCMA1P0014 领料出库单单头增加内部客户 集团总部向外部供应商要货,再供各下属分支机构领用,领用时用领料出库单处理,需要在单据头指定下属机构(内部客户),总部到一定时间汇总领用情况,按已领用数量与下属机构结算。结算时,需要用领料出库单下推销售出库单,销售出库单单头字段“送货客户”取领料出库单上的下属机构(内部客户)。 在领料出库单单头增加字段:“内部客户”,非必录,由用户手工F7选择,F7范围为领料出库单主业务组织所在财务组织的内部客户。 0.5 新增及调整字段 EASSCMA1P0016 采购收货单增加“采购组”字段 采购收货单只有采购组织字段,没有采购组字段,而采购订单及采购入库单都有这两个字段。现采购收货单需要添加该字段。客户这边需要通过这个字段配合工作流,不同采购组由不同人员审批。 "1) 采购收货单编辑界面增加采购组字段; 2) 采购收货单序时簿界面增加采购组字段; 3) 在onload()方法增加KDTEditListener事件,实现采购组织与采购组的联动 " 0.5 新增及调整字段 EASSCMA1P0020 付款申请单携带上游单分录信息 根据合同或应付单下推的付款申请单能否将数量、单价、含税单价带过来,这样客户高层领导审批时就方便了,现在客户领导都不知道这笔钱是买的什么。 "1) 付款申请单编辑界面增加数量、单价、含税单价字段; 2) 付款申请单序时簿界面增加数量、单价、含税单价字段; 3) 采购合同、应付单关联生成付款申请单的BOTP添加数量、单价、含税单价的配置 " 0.5 新增及调整字段 EASSCMA1P0021 物料增加型号字段并携带到相关单据 针对“物料”基础资料,供应链客户提出将其中物料的“规格型号”字段改为“规格”和“型号”两个字段,供应链涉及到物料资源的地方全部要改,以方便其对物料资料的管控和查询。 "1) 物料上面增加型号字段。 2) 物料上的规格型号字段名称修改为规格。 3) 以销售订单为例,将物料的型号字段携带到销售订单上面。 " 0.5 新增及调整字段 EASSCMA1P0024 付款单增加物料字段 在新增和关联应付单生成付款单时,需要在付款单上反映此次付款对应的物料情况,即显示物料信息,目前付款单上没有显示,请问如何能够在付款单上显示所付款对应的物料信息。 "⑴付款单上面增加物料字段; ⑵关联生成付款单的botp携带物料到付款单。 " 0.5 新增及调整字段 EASSCMA1P0025 销售出库单增加到期日期 客户很对委托代销的产品有个委托期限,希望在出库单上增加“到期日期”,同时到期日期支持有权限的修改,审核后也可以修改。 "1. 销售出库单分录上面增加到期日期字段; 2. 到期日期字段支持字段权限; " 0.5 新增及调整字段 EASSCMA1P0026 库存调拨单增加单位标准成本,标准成本 存货核算延续计划价模式,存在库存调拨业务,但库存调拨单上无计划价(单价、金额)显示列,而计划价的审核是调出、调入双方审核的重点内容。因为客户需要采取“直接调拨”模式,自动生成调拨出、入库单,因此库存调拨单上就应有计划价(单价、金额)显示列,以便于审核。 "1) 库存调拨单增加单位标准成本、标准成本字段; 2) 单位标准成本取自物料财务页签,标准成本自动计算得出。 " 0.5 新增及调整字段 EASSCMA1P0047 费用项目增加对方科目字段并携带到应付单 "客户需要按照费用项目对应不同科目,通过DAP自动产生凭证。原计划是通过在费用项目添加记账分类,然后根据记账分类取对应的科目,但是目前系统不支持取费用项目新增的记账分类。 1.通过函数对应科目。根据费用项目,然后通过函数取对应科目编码,做到科目映射。但由于费用项目比较多,而且可能会不时做出更改,所以工作量较大。 2.在做其他应付单的时候,填上对应科目和对方科目,通过dap取数生成凭证。但业务部门工作量增大,而且可能会由于填写错误导致后续凭证有错。 " 在费用项目中二次开发增加一个字段,用于维护对应的科目,建立与科目的映射关系,在新增应付单时,可以根据录入的费用项目,自动默认携带到应付单的对应科目字段上,再根据DAP去生成凭证; 0.8 新增及调整字段 EASSCMA1P0097 EAS供应链_付款申请单可以指定比率 在做付款申请时,每次的付款都是按应付单的某一固定比例来进行支付申请,在应付单(供应商一次性开出发票)下推付款申请单时,每一分录的申请付款金额都需手工计算修改工作量太大,而且容易出错,希望在付款申请单表头增加“本次付款比例”字段,录入后每一分录行上的“申请付款金额”自动按照本次付款比例*(累计付款金额+未付款金额)得出,减少人工计算与录入的工作量与出错率。 采购入库单也可做类似处理。 0.5 新增及调整字段 EASSCMA1P0103 采购收货单分录增加单价金额字段 用户的采购收货单是关键单据,需要通过收货单关联生成和查询到票情况,但收货单上没有单价金额字段,应付单无法从它取价。 因采购收货单分录上本身已有单价、金额两个字段,但界面上不显示,只要把它们显示出来即可。 0.3 新增及调整字段 EASSCMA1P0236 应收单增加携带物料产地字段 客户总部配送中心已处上线阶段。客户的物料确实有产地的需求,没产地栏就无法区分相同名称、规格的物料。所以把物料基础资料中的“助记码”设置成了产地名称 "1. 物料基础页签上增加产地字段。 2. 应收单上增加列“产地”,自动携带显示物料上的“产地”。 3. 增加物料改变事件,自动携带物料的“产地”到表格上。 " 0.5 新增及调整字段 EASSCMA1P0260 比价单到合同放开部分字段可BOTP配置 采购比价单中的一些字段,付款条件、付款方式、采购提前期、送货方式无法带入采购合同中 1. 放开采购合同的相关字段,使其可以参与botp配置; 0.2 单据操作控制修改 EASSCMA1P0011 应收单联查销售成本 销售业务完成后,需要在同一张单据上同时显示每一笔记录的收入和成本,以便对账。 在应收单序时簿上增加两个字段:单位成本、成本,按来源单据分录ID关联对应的销售出库单,获取相应成本字段。 0.5 单据操作控制修改 EASSCMA1P0028 销售退货申请单表头金额字段有计算逻辑 在销售退货申请单表头上添加三个字段“退货金额”“换货金额”“退换货金额差额”;退换货金额差额=退货金额-换货金额。 "1. 在销售退货申请单增加三个字段; 2. 在loadfields()方法增加datachanged事件,实现逻辑计算 " 0.3 单据操作控制修改 EASSCMA1P0028 销售退货申请单增加库位需要和仓库联动 在“销售退货单”中维护分录时,系统默认只能精确到“仓库”而精确不到“仓位”,需要实现两者的联动。 "1. 在销售退货申请单分录增加库位字段; 2. 在onload()方法增加KDTEditListener事件,实现仓库与库位的联动。 " 0.3 单据操作控制修改 EASSCMA1P0032 对比价单中没有报价的物料用颜色标记 客户在做一批物料的询报后,由于个别的物料对其中某个别供应商没有询到价格,携带到比价单上也是没有报价的,但客户针对此批物料客户要按供应商总价来选择,由于存在个别物料没有报价因素的影响不好选择,现客户要求针对这种没有报价的物料利用特别醒目的颜色予以显示,以便让客户及时快速的予以判断。 比价单中对单价为0或者为空的行用红色背景色表示 0.2 单据操作控制修改 EASSCMA1P0048 应收单的付款方式字段修改显示为收款方式 新增应收单时,发现应收单的【收款方式】字段显示为【付款方式】 修改应收单付款方式为收款方式 0.2 单据操作控制修改 EASSCMA1P0053 应付单付款单放开合同号可编辑 客户只用应收应付和总账系统,没有用供应链系统,但需对采购的服务合同按合同进行应付和付款管理,但应付模块的合同号不能录入,希望合同号能够通过参数控制可以在应付模块手工录入。 "1. 放开应付单分录上的采购合同号,采购合同分录号为可编辑; 2. 放开付款单分录上的采购合同号,采购合同分录号为可编辑; " 0.2 单据操作控制修改 EASSCMA1P0055 收款单的流入预算项目值从第一行携带 应付单生成的收款单的流入预算项目不能粘贴,以前都是可以粘贴的,但是现在不行了,一个收款单分录有几千条,如果一个一个去选择要很长时间 1) 在 输入第一行的流入预算项目的时候,后面的行自动携带第一行的值 0.5 单据操作控制修改 EASSCMA1P0062 应收单应付单数量单价精度设置 "应收/应付单录入界面;单据类型选择为非采购/销售发票的其他类型;在录入表体明细选择费用项目后,自动带出来的数量及单价小数位数不能修改; 现在情况是,单据类型为采购OR销售发票的其他应收应付单据,它的数据精度可以根据物料档案中设置的数据精度带出;(客户设置物料精度为四位小数,可看附图);但其他的单据类型选择费用项目后数据精度为六位;现在客户需要设置费用类型的数量单价精度也为4位。 " 1. 设置应收单,应付单费用类型的数量单价字段精度为4位 0.5 单据操作控制修改 EASSCMA1P0069 采购入库增加仓库唯一限制 一张入库单当有多个仓库时,提交时给于提示(即一般只要一个仓库)。 "物料可以设置默认仓库,单据录入的时候携带仓库,如果物料的仓库设置一致,单据上的仓库通常一致。同时,录入第一条仓库,以后行会自动携带第一行仓库,保证整单仓库基本相同。如果不相同,通常情况下是用户进行了仓库的修改。如果提交时候还要增加提示校验仓库相同 以采购入单为例编写DEP案例。 " 0.5 单据操作控制修改 EASSCMA1P0070 仓库仓管员可跨组织选择 目前客户在选择仓管员时只能选择当前组织或平级组织,不能选择上级组织的职员,这样造成管理上的非常不便,因为在很多情况下仓管员并不是一定是当前组织的。建议改回仓管员可以自由选择。 1) 在仓库编辑界面的onLoad()方法中添加后置脚本来重新设置仓管员的F7范围 0.5 单据操作控制修改 EASSCMA1P0073 付款单选择往来户带出业务员 在做付款单时,选择往来户无法带出对应的业务员出来。财务手动添加工作量巨大。希望可以像收款单一样在客户财务资料里面维护后,自动带出来。 "⑴在供应商财务信息上增加“业务员”字段; ⑵在付款单编辑界面实现根据供应商带出业务员的逻辑 " 1 单据操作控制修改 EASSCMA1P0075 采购合同&订单上的交货日期不可编辑 单据转换,采购比价单到采购合同,采购合同到采购订单,客户希望采购合同和采购订单上面的交货日期是单据带过来的,不希望能修改。 "1) 在采购合同编辑界面的onLoad()方法中添加后置脚本来设置交货日期的控制逻辑; 2) 在采购订单编辑界面的onLoad()方法中添加后置脚本来设置交货日期的控制逻辑; " 0.5 单据操作控制修改 EASSCMA1P0075 采购合同&订单上的交货日期不可编辑 单据转换,采购比价单到采购合同,采购合同到采购订单,客户希望采购合同和采购订单上面的交货日期是单据带过来的,不希望能修改。 "1、 在采购合同编辑界面的onLoad()方法中添加后置脚本来设置交货日期的控制逻辑; 2、 在采购订单编辑界面的onLoad()方法中添加后置脚本来设置交货日期的控制逻辑; " 0.5 单据操作控制修改 EASSCMA1P0083 应收应付单据分录上的科目名称显示长编码 应收应付单的单据中,会计科目只显示短名称,这样财务部门在审核时无法判断科目是否正确,应能查看科目全称,方便审核。 通过脚本,将科目的显示格式改为显示长名称。 0.2 单据操作控制修改 EASSCMA1P0087 EAS供应链_采购申请单修改单头日期联动修改分录需求日期和交货日期 客户为餐饮企业,每日进行采购,且采购物品85%左右相同,做采购申请单时,往往是复制上日的采购申请单,然后再进行修改,其中很大程度上只是修改日期(包括单头的申请日期、分录的需求日期和交货日期),但现在只能逐行修改分录的需求日期和交货日期,工作量太大,希望修改表头申请日期后,表体的需求日期和交货日期能自动跟着修改。 添加脚本,监听单头的申请日期,当该字段的值有改动后,自动将值赋给需求日期和交货日期。 0.5 单据操作控制修改 EASSCMA1P0088 EAS供应链_采购订单自动携带第一行分录的交货日期 多行采购订单分录的交货日期相同,批量修改时,需要一行一行修改,工作量很大,希望有对交货日期进行批量填充的功能。 添加脚本,新增或插入分录时,自动取第一行分录的交货日期;添加脚本(监听器),修改第一行分录的交货日期时,自动修改其它分录的交货日期。 1 单据操作控制修改 EASSCMA1P0089 EAS供应链_采购订单的部门默认取采购员的上级部门 销售订单、采购订单等单据,比如采购订单,选择采购员后,部门默认带出的最底层的班组或科室,而统计时需要到上一级部门,因此希望单据上能默认取采购员的上级部门。 通过脚本,实现选择不同的采购员后,自动取采购员主职务所在行政组织的上级组织。 1 单据操作控制修改 EASSCMA1P0090 业务日期显示时分秒 环保行业,出入库业务发生的时间需要明细到时分秒,供政府部门监控使用,但目前系统中的出入库单据的日期类字段只能显示到日期。 新增一个日期字段,可以明细到时分秒 0.2 单据操作控制修改 EASSCMA1P0092 关联生成的其他入库单新增分录允许编辑物料 "副联产品入库,生产订单关联生成其他入库单,订单无法明确副联产品的物料编码,需要在其他入库单中根据实际生产情况新增分录,并输入入库的物料。 目前701版本关联生成的其他入库单可以新增分录、台账新增分录,但是新增分录后物料字段不可编辑。7.5则不可新增分录。 " 通过脚本,放开新增的分录行的物料字段,允许编辑;对于7.5版本,还要放开新增分录、插入分录按钮,以实现关联生成时也可以增加分录。 0.5 单据操作控制修改 EASSCMA1P0094 EAS供应链_关联生成的销售出库单显示付款方式 目前手工录入的销售出库单,可以显示付款方式字段,不显示来源单据类型,但关联生成的销售出库单,会在原付款方式字段的位置上显示来源单据类型,而付款方式字段不可见。 现在产品中将付款方式和来源单据类型放置在同一个位置,默认来源单据不可见,当关联生成销售出库单时,将来源单据类型置为可见,付款方式置为隐藏,因此只要把其中一个字段移到别的位置,使之不重叠,并确保任何时候两个字段均为可见即可。 0.2 单据操作控制修改 EASSCMA1P0095 放开领料出库单分录的“领料日期”字段,允许编辑 领料后再补单,需要记录实际领料日期,在一张单据上录入多次入库,因单头只有一个业务日期,不能满足要求,需要在分录上分别输入各笔物料领用的实际日期 放开分录上的“领料日期”,允许编辑 0.5 单据操作控制修改 EASSCMA1P0096 修改采购订单“价外税”的默认值 客户的采购业务主要是价内税,因此采购订单的“价外税”默认不勾选 通过脚本,将单头的“价外税”字段默认设为不勾选 0.2 单据操作控制修改 EASSCMA1P0100 盘点表放出附件管理菜单 库存盘点时,希望能附上盘点时的一些附件,但没有附件管理菜单可操作 系统默认将附件管理菜单隐藏,放开显示出来即可。 0.2 单据操作控制修改 EASSCMA1P0101 下推生成的采购报价单允许新增删除分录 应商报价时可能会针对数量范围,交货地址不同会有不同的报价,需要在报价单中新增删除分录 ,但目前系统对关联生成的报价单,不能新增删除分录。 在工具栏上增加新增分录和删除分录两个按钮,这个按钮本身是存在的,只是当报价单是由询价单关联生成时,默认隐藏了,至须将其放出来即可。 0.2 单据操作控制修改 EASSCMA1P0102 批量修改销售出库单的销售组和销售员 销售出库单中的销售员和销售组是必填字段,一般情况下,一张出库单都是一个销售员和销售组,希望在录入的时候和库存一样,选择第一行销售员后,下面的分录自动带出,避免每行都要录入。 工具栏上增加一个按钮:批量修改销售组和销售员,并添加相应的处理逻辑 0.5 单据操作控制修改 EASSCMA1P0107 销售订单复制新增清空已禁用的客户信息 在基础资料物料、供应商、客户禁用之后,有此物料、供应商的采购订单或其他单据,点复制新增,同样可以保存提交审核。需要在单据复制新增后校验物料、客商的状态,如果为禁用状态则复制新增后清空物料、客商信息。 以销售订单的客户为例:在复制新增的操作中增加后置脚本校验客户的状态,如果为禁用状态,清空客户信息。 0.5 单据操作控制修改 EASSCMA1P0109 付款单审核后控制不能修改 付款单目前审核后修改按钮亮显,可以修改,且与一般修改权限共用同一权限,控制与其他业务单据控制不一致,客户应用需要控制付款单审核后不允许修改。 "1. 在付款单编辑界面,“加载值(LoadFields)”项中增加后置脚本,处理当单据状态为审核状态时,修改按钮灰显; 2. 在付款单序时簿界面,操作“修改”项中增加前置脚本,控制当单据状态为审核,点击修改按钮运行失败并给出用户提示“已审核的付款单,不允许修改,请重新选择” " 0.5 单据操作控制修改 EASSCMA1P0111 销售订单下推生成采购订单需要控制费用承担部门 销售订单下推生成采购订单,已默认出费用承担部门为上游单据字段,此时修改采购员时系统会自动更新费用承担部门为‘总部服装产品部’。采购订单的费用承担部门不应根据采购员的修改而改变。 "1. 增加字段“是否携带部门”,用于记录是否销售订单下推携带的部门,隐藏。 2. 扩展handleAfterTransform方法,处理销售订单下推来的采购订单“是否默认部门”字段的值。 3. 采购订单界面,扩展loadfields的后置脚本;如果“是否默认携带部门”为是,而且有值则不允许修改 4. 在“部门”字段上扩展dataChange事件;如果是销售订单下推的,而且有值则不允许修改 " 0.5 单据操作控制修改 EASSCMA1P0112 采购申请单申请人F7改为全集团职员范围UI 采购申请单的采购申请人的F7,现在虽然你帮我改对了逻辑,但是客户使用有障碍(今天好多个部门无法继续采购申请流程,很着急)。因为703原来松散的判断让客户的特殊的组织架构反而没有问题,但是现在严格了,客户就无法用了。所以希望把采购申请人的F7改成现在财务模块通用的F7:默认显示当前单据主业务组织所在的管理单元中的行政组织列表,下面还有个选项“显示全部组织”,点这个选项可以显示全集团的行政组织 "1. 扩展onload方法,增加后置脚本,设置F7UI为左树右表形式。 2. 扩展onload方法,增加前置脚本,给“申请人”控件增加事件(willShow, willCommit)控制F7的过滤条件。 " 0.3 单据操作控制修改 EASSCMA1P0113 应付单单据日期按系统当前期间设置默认 应付单拉式生成或者新增时的日期如何设置可以实现以下需求:默认是当前系统日期; 若当前系统日期不在应付系统期间内,则日期默认为应付系统期间的最后一日。(如3月13日做应付单,业务期间在2期,那单据的日期是2月28日,若业务期间在3期,则单据日期为3月13日) "1. 扩展onload方法,处理新增单据时,单据日期的默认值 2. 扩展handleAfterTransform方法,处理Botp生成时,单据日期的默认值 " 0.3 单据操作控制修改 EASSCMA1P0116 采购申请单申请人范围为申请人所在管理单元下的所有人员 "需求描述:行政领料,行政组织记账对应的财务组织,但申请人行政组织所在管理单元与财务组织所在管理单元不是同一管理单元,无法选择的申请人员。 目前范围:供应链单据与当前组织无关,申请人范围为财务组织所在的管理单元下的人员。 处理方式:建议用户DEP处理或者二次开发处理,可以定义申请人范围为申请人所在管理单元下的所有人员,默认值为当前用户。 " "1. 扩展onload方法,增加后置脚本,设置默认 2. 扩展onload方法,增加前置脚本,给“申请人”控件增加事件(willShow, willCommit)控制F7的过滤条件。 " 0.3 单据操作控制修改 EASSCMA1P0118 采购入库单锁定计量单位 "功能点:采购入库单字段控制 应用场景:集团需要按统一的计量单位对下属机构的出入库业务进行汇总,但由于之前物料已经被设为多计量单位,且多计量单位已经被使用,无法修改或删除物料的多个单位,在DEP里把计量单位字段设为锁定 " 扩展onload方法,增加后置脚本,当“单位”单元格被激活时,设置为锁定。 0.3 单据操作控制修改 EASSCMA1P0119 采购收货单不允许手工新增 客户希望采购收货单只能通过采购订单关联生成,不允许业务部门采用手工新增来完成。 1. 扩展界面逻辑校验(beforeStoreFields)方法,增加前置脚本,校验是否关联生成 0.3 单据操作控制修改 EASSCMA1P0120 销售订单下推生成的销售出库单付款方式不能显示 订单关联生成的销售出库单,一般情况下订单决定了付款方式,标准产品由于界面布局的原因,由订单携带过来的付款方式在后台隐藏显示,没有放置在界面上。 1. 扩展loadfields方法,增加后置脚本,显示付款方式 0.2 单据操作控制修改 EASSCMA1P0121 领料出库单设置默认事务类型 EAS7.0.3版本事物类型默认为领料出库,升级到7.5后,每做一张单都要选择,客户反映增加了很多工作量,对升级效果的整体产生影响,请设置一个默认值“020”,如有不同,容许客户修改。 1. 扩展onload方法,增加后置脚本,如果是新增时,且事务类型为空,设置为‘020’领料库存。 0.2 单据操作控制修改 EASSCMA1P0137 生产入库单成本中心只可过滤出生产类成本中心 生产入库单与领料出库单的成本中心都是非生产类型,在成本管理中,投入产量录入界面可以显示生产入库单,但在材料费用分配-领料出库费用分配界面不能显示领料出库单,无法进行成本费用归集。希望对生产入库单进行控制,只能使用生产类的成本中心 1. 控制生产入库单只能使用生产类型(直接生产部门、辅助生产部门)的成本中心; 0.5 单据操作控制修改 EASSCMA1P0141 付款申请单携带上游单分录信息 根据合同或应付单下推的付款申请单能否将数量、单价、含税单价带过来,这样客户高层领导审批时就方便了,现在客户领导都不知道这笔钱是买的什么。 "1、 付款申请单编辑界面增加数量、单价、含税单价字段; 2、 付款申请单序时簿界面增加数量、单价、含税单价字段; 3、采购合同、应付单关联生成付款申请单的BOTP添加数量、单价、含税单价的配置 " 0.5 单据操作控制修改 EASSCMA1P0155 单据编辑界面增加合计行及合计字段 采购收货单编辑界面金额字段没有合计,序时簿中数量、金额在合计行没有合计 设置编辑界面及序时簿界面数量、金额字段的参与合计行 0.1 单据操作控制修改 EASSCMA1P0160 采购询价计划单数量从,数量到填写之后带入采购报价单 在采购询价计划单中,通过DEP设置可以在字段“数量从”、“数量到”中填写数量,但是无法带入采购报价单中,仁和目前的采购询价业务为:比如采购产品A的数量1000个,有三家供应商分别为D/E/F,那么对这三家供应商询价的数量会出现差异,D的询价范围会是:0---200,E的询价范围是:500--800,F的询价范围是:800-1000。即在询价时由采购部向供应商提供具体的数量范围 "1. 询价计划单的数量从,数量到字段可修改 2. 数量从,数量到字段可携带到报价单 " 0.5 单据操作控制修改 EASSCMA1P0161 采购合同到期后不能再进行付款 操作采购合同付款时发现一个问题,采购合同到期失效后仍然可以进行做付款单付款,依据完美公司采购合同付款原则:合同到期失效后不再进行付款,现需要金蝶EAS系统在采购合同到期失效后自动终止做付款单付款。 在合同生成付款单时增加到期日期的校验 0.5 单据操作控制修改 EASSCMA1P0169 采购申请单校验申请数量大于0 "1、采购计划员上报采购申请的时候可以只填审批数量,申请数量可以为空,客户要求软件必须是申请数量不能为空或0; 2、申请数量为空,审批数量不大于0,提交审核以后申请数量为0; 3、客户需求申请数量不能为空,审批数量可以为0。 " "1. 提交时校验申请数量必须大于0; 2. 提交的检查审批数量,如果为空或者为0,设置审批数量等于申请数量。 " 0.5 单据操作控制修改 EASSCMA1P0174 采购订单受合同有效期控制 采购合同关联采购订单时,将采购订单的业务日期填写在合同有效期外,但依然能够提交,合同有效期并没有控制不允许单据生成。 1) 在采购订单后台_submit()前添加脚本; 0.5 单据操作控制修改 EASSCMA1P0194 销售出库单审核状态才能打印 由于用户多次将提交或保存状态下的销售出库单打印出来,并根据此发了货,而出库单没有审核,造成了极大风险。所以希望销售出库单只有在审核状态下才能打印。 控制打印时非审核状态给提示 0.5 单据操作控制修改 EASSCMA1P0262 销售订单不打印数量为0的分录,变更时可删除分录 "销售订单做变更后,分录不能删除,只能改为0;但是在打印的时候数量为0的数据仍显示出来。现客户的需求是: 1、销售订单变更后,能否删除分录。 2、不能删除分录后,分录数量为0的不打印。 " "1. 销售订单变更后,可以删除分录。 2. 分录数量为0的不打印。 " 0.5 单据操作控制修改 EASSCMA1P0302 采购订单新增时不允许修改价格但是变更时可以修改价格 强制使用供货价格时,新增和变更都能修改价格。或者重置参数设置,新增和变更都不能修改价格,不能满足客户需求.客户需要新增采购订单不能修改价格,只有变更时才能修改价格。 "设置价格控制策略采购订单的修改控制为禁止修改 通过dep设置变更时价格字段可以修改。 2.前置补丁:PT079158 " 0.3 单据操作控制修改 EASSCMA1P0331 库位F7增加维护功能按钮 采购入库单分录中F7选择库位后,希望在库位显示界面增加维护按钮,可以在采购单界面直接进行库位的维护和物料存放分配设置,方便客户操作 "1. 目前DEP不支持在F7LocationUI上增加按钮 2. 扩展onload方法,采用代码方式增加“维护”按钮 3. 按钮增加点击事件,打开库位维护界面 " 0.5 单据操作控制修改 EASSCMA1P0338 采购入库单自动根据数量计算采购费用 采购订单多次推采购入库单,采购费用从采购订单携带,修改数量后,不能按数量比例重新计算采购费用。 在采购入库单分录上增加一个字段:单位采购费用,支持botp配置从上游单据携带;在修改入库单的数量或单位采购费用后,自动按数量*单位采购费用计算出采购费用。 0.5 单据操作控制修改 EASSCMA1P0340 库存盘点可选择是否调整辅助数量 库存盘点时,数量没有差异,但辅助数量有差异,目前产品也会生成盘点调整单,但实际应用中,有可能用户不希望调整辅助数量。 在盘点表上增加字段,允许用户自由选择是否要调整辅助数量。 0.5 序时簿显示调整 EASSCMA1P0132 采购订单序时簿增加部门字段 采购订单单据头已录入了部门信息,但在序时簿无法显示出部门信息。导致数据过滤查询时无法按部门查询及统计 "1. 采购订单业务数据源导入部门 2. 采购订单序时簿增加部门字段 " 0.2 序时簿显示调整 EASSCMA1P0138 采购订单序时簿可以过滤查看费用分录的信息 用户在做采购业务环节的费用分析和查询工作,希望在采购订单序时簿查询界面,能将费用明细页签中的字段作为自定义查询条件,查询到符合条件的采购订单分录,从而对费用情况进行统计分析 "1. 采购订单查询增加费用分录相关字段; 2. 采购订单序时簿增加费用分录相关字段; " 0.5 序时簿显示调整 EASSCMA1P0141 付款申请单序时簿显示“申请人” 目前付款申请单序事簿中没有“申请人”字段,希望能够增加方便查看申请人 1) 付款申请单序时簿增加申请人字段 0.2 序时簿显示调整 EASSCMA1P0143 委外订单序时簿显示“ 未收货数量” 目前委外订单序事簿中没有“未收货数据”字段,无法查询出未关联完成的订单 1、 委外订单序时簿增加“未收货数据”字段,并放开相应的过滤条件、表格设置、排序功能; 0.3 序时簿显示调整 EASSCMA1P0144 EAS供应链_销售出库单序时簿显示辅助单位和辅助数量 物料启用辅助计量单位,但在销售出库单序时簿,辅助单位和辅助数量不可显示。 在DEP中,将序时簿的Query的辅助单位和辅助数量放出来,序时簿添加两列,用以显示这两个字段。 0.3 序时簿显示调整 EASSCMA1P0150 EAS供应链_付款申请单序时簿显示每张单据的总金额 查询付款申请单序时簿时,希望能看到每张申请单的明细,并在两列中分别显示每张单据的总申请金额、总批准金额,目前没有这两列。 付款申请单单头有两个字段:申请金额、审批金额,就是单据各分录的申请金额和审批金额的合计,而且在付款申请单序时簿的Query中也包含了这两个字段,序时簿界面没有放出来,因此只要在DEP中为序时簿添加两个列,把这两个字段显示出来即可。 0.2 序时簿显示调整 EASSCMA1P0158 采购入库单序时簿支持按照供应商进行快速查询 采购入库单序时簿快速查询栏,增加按照供应商过滤查询的“查询条件” 1. 设置业务数据源上的字段扩展属性,放开供应商字段的快速查询 0.2 综合 EASSCMA1P0002 物料增加核算项目携带到DAP中 账务系统需要核算到物料大类,目前物料基本分类分为多个分类,财务科目核算分类采用的是自定义核算项目, 分类方式及编码与物料基本完全相同,在DAP中如何根据物料取到对应在自定义核算项目中的分类编码,并在 DAP中对自定义核算项目进行赋值。 举例说明: 物料基本分类: 01 进口钛白粉 01.01 石原 01.02 杜邦 02 国产钛白粉 自定义核算项目(物料大类)分类与上面完全相同; "1. 新增自定义核算项目“物料类别”(实际做此案例时,建议用bim来开发基础资料,目前dep开发的基础资料在作为核算项目时,还有个缺陷); 2. 引入核算项目的横表,建立核算项目与新增“物料类别”基础资料的关系; 3. 物料主档基础资料页签增加“物料类别”; 4. 库存单据中增加物料类别,携带物料基础资料相应的“物料类别”; " 1 工作流 EASSCMA1P0301 采购订单工作流审批根据“是否存在附件”选择不同下级节点 如何在采购订单使用工作流审批根据“是否存在附件”选择下级节点,因为采购订单数据表中没有附件数字段。 在工作流中增加脚本判断当前单据的附件数量,根据不同的附件数量,走不同的下级节点。 0.3 二次开发案例 EASSCMA1P1100 采购订单工作流审批根据“是否存在附件”选择不同下级节点 在选择物料的之前不希望选择申请组织,希望可以直接选择物料,然后反填申请组织 "这个需求没办法通过DEP来实现,所以需要通过二次开发的代码来实现 1.去掉选物料之前对申请组织为空的校验。 2.选择物料之后处理申请组织的值 3.依赖补丁:PT079158. " 1.5 二次开发案例 EASSCMA1P1000 采购订单选择物料自带供应商 客户在 选物料之前不知道供应商是谁,现在的采购订单是先选择供应商,然后才允许选择物料。客户希望可以直接选择物料,然后根据物料携带出供应商。并且在物料f7里面可以看到供应商 "在采购订单上面增加一个菜单按钮,选择物料,弹出物料f7界面以供选择 2.新增一个业务数据源:物料供应商查询,关联物料和供应商 3.采购订单上面处理物料选择后校验供应商唯一,携带供应商到界面等。 " 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值