【MM 交货成本】Unplanned Delivery Cost

一、交货成本

采购运费是采购业务中一种特殊的定价,在SAP系统中,交货成本和其相近,是指在货物交付过程中发生的运输成本,只要有货物交付,就会有运费,而运费或者有采购方承担,或者有销售方承担。国内贸易大多是销售方承担;国际贸易中,将根据国际贸易条款确定承担方,如FOB模式下,销售方承担工厂发出到出发港的运费,采购方承担从出发港到本公司的运费。​

一般来说,采购运费有以下特点:​​

1)滞后性:下达采购订单时,一般只能预估运费,运费实际金额的确认往往比较晚,因为一般尽可能在采购订单中做预估,实际运费确认时,进行差异调整。​

2)物料相关性:运费是由承运的货物引起的,因为运费的金额应该体现为与物料相关,在物料采用移动平均价的情况下,若存在库存,则运费应该体现在库存金额中,若库存不足或者物料采用标准价的情况下,运费也应体现在与物料相关的采购差异科目中。​

3)运费的单据相关性:大部分情况下,运费针对整张单据的所有物料,因为一般来说输入的总运费,而后在不同的物料上进行运费的分摊。​

4)运费税率的计算:运费税率计算方式与货物增值税不太相同,按目前税法,税率为7%,并且为价内税。​

针对上述特点,SAP在方案提供上,提供了以下功能。

SAP中可以将运费作为一种条件类型事先维护在信息记录中,并相应地为运费指定专门的供应商,也可以在采购单据的抬头或者行项目中手工输入运费,并指定专门的供应商,采购​​订单收货时,根据输入的运费进行预提运费,并且在收货时还可以修改运输的供应商,收到运费发票时,对运费做发票检验,差异金额可以分摊在物料上或者不做分摊。​

SAP进一步将交货成本分为计划的交货成本和计划外交货成本两种。计划的交货成本就是事先在采购单据中维护,采购订单收货时预提运费,收到物流公司发票,进行发票检验。如果事先没有在采购单据中维护,当收到物料公司发票时,运费就称为未计划的交货成本。实际业务中,可能会出现计划的交货成本和未计划的交货成本混在一起,SAP的系统也支持此业务。​

取决于公司的业务情况,采购运费具体可有以下几种处理方案。​

1)运费输入在采购单据的抬头或者行项目。​

2​)为运费建立一个单独的物料,作为单据的一行,输入在采购订单中,该方案应用简单,但无法将运费分摊到物料上。​

3)启用SAP运输模块,针对采购订单创建内向交货单,再根据内向交货单创建内向运单,根据内向运单创建内向装运成本(运费),对运费做发票校验,该功能主要用于销售货物,采购货物也可以这样操作。

运维对物料成本的影响:

取决于物料的成本评估方式(移动平均价还是标准价),若采用移动平均价,发票校验是货物的差异金额和运费的差异金额都将改变物料成本,继而影响物料的库存金额,但是若当剩余数量小于发票校验数量时,库存不足的部分金额将直接计入与物料相关的采购差异科。若采购标准价格,当针对物料进行运费的发票校验是,则计入与物料相关的采购差异科目。

二、系统操作

计划交货成本在做发票校验的时候很简单就做进财务账了;这里具体讲解一下未计划交货成本:

2.1 在MIRO中的“细节”页签下

 

保存后看会计凭证:

未计划交货成本进入了存货科目。

2.2 激活总账科目和物料页签

激活发票校验的总账和物料页签,也可以直接将未计划的交货成本维护进选定的总账科目中。

总账页签中输入会保存在了RBCO:后勤发票科目凭证行项目。物料页签中输入会保存进RBMA后勤发票物料收款行项目。

2.3 使用事后借记处理未计划交货成本

 发票和事后借记得区别:

  • 相同点:增加对供应商的应付款
  • 不同点:针对同一订单收货,发票要先于事后借记(事后借记是对供应商后期发票金额的补充);发票和金额、订单数量有关系,而事后借记只是订单金额调整的凭证,仅仅是订单金额的变更,并不影响订单数量的变更。

事后借记处理未计划交货成本可以通过后台配置让它进入一个单独的科目,配置这里一定要选择Different G/L line。

Path:IMG-->物料管理-->后勤发票校验-->收入发票-->配置如何过账未计划交货成本

但是在系统中存在单独的未计划交货成本科目UPF,

2.3 未计划交货成本的期末处理

采用条件类型的方法,是采购附加成本直接就进入了存货成本,条件类型在收货时是暂估价,并且条件类型法有个缺陷,就是如果采购原材料过多,很难找到一个合适的方法将成本暂估入原材料,比如,某笔铁路运输费,涉及原材料上百种,如何分摊到具体物料?根据数量?各原材料的采购单位不一,不很合理。这种情况下,人们偏向采用直接计入未计划交货成本,对于未计划的采购附加交货成本,根据重要性原则,运费等采购附加成本毕竟占总成本不大,不再区分各原材料是否还有库存, 生产企业期末将其直接全部投入生产成本,销售/贸易企业可转入销售成本。

采购相关表格:

EKKO:采购订单抬头

EKPO:采购订单行项目

EKBE:采购凭证历史

EKBZ:每个采购凭证的交货费用历史(带条件类型)

RBKP:后勤发票抬头

RSEG:后勤发票采购订单行项目

RBCO:后勤发票科目凭证行项目(包括费用类采购行项目消耗科目数据)

RBMA: 后勤发票物料收款行项目

 

转载于:https://www.cnblogs.com/potatoo/p/7146692.html

根据下面的sql语句来创建一个实体类: create table hon_asset_depreciation_biao ( id int auto_increment comment '唯一标识' primary key, org_code varchar(255) null comment '公司代码', asset_number varchar(255) not null comment '主要资产编号', asset_sub_number varchar(255) null comment '资产子编号', fiscal_year int null comment '会计年度', actual_depreciation_range varchar(255) null comment '实际折旧范围', last_depreciation_period varchar(255) null comment '上次折旧的周期', accumulated_acquisition_cost decimal(19, 4) null comment '累积购置和生产费用', accumulated_normal_depreciation decimal(19, 4) null comment '累计正常折旧', accumulated_special_depreciation decimal(19, 4) null comment '累计特殊折旧', accumulated_unplanned_depreciation decimal(19, 4) null comment '累积计划外折旧', effective_end_date date null comment '有效日期结束', effective_start_date date null comment '有效期起始日期', ERNAM varchar(255) null comment '创建对象的人员名称', special_depreciation_start_date date null comment '特别折旧的开始日期', depreciation_code varchar(255) null comment '折旧码', is_delete varchar(1) default '1' null comment '0 未知 1正常 2删除', created_time timestamp default CURRENT_TIMESTAMP null comment '创建时间', created_by varchar(50) null comment '创建者', updated_time timestamp null on update CURRENT_TIMESTAMP comment '更新时间', updated_by varchar(50) null comment '更新者', remake varchar(255) null comment '备注', field1 varchar(255) null comment '备用字段1', field2 varchar(255) null comment '备用字段2', field3 varchar(255) null comment '备用字段3', field4 varchar(255) null comment '备用字段4', field5 varchar(255) null comment '备用字段5' ) comment '资产折旧表';
最新发布
04-01
<think>嗯,用户让我根据提供的SQL语句创建一个实体类。首先,我需要仔细看看这个表的结构。表名是hon_asset_depreciation_biao,字段包括id、org_code、asset_number等等,每个字段都有对应的数据类型和注释。用户可能是在做Java开发,所以需要生成对应的实体类,比如使用JPA或者MyBatis这样的框架。 首先,确定实体类的名称。通常表名会转为驼峰命名,所以hon_asset_depreciation_biao可以变成HonAssetDepreciationBiao或者更简洁的名字,比如AssetDepreciation。不过用户提供的表名可能直接映射,所以保持原名转换后的形式可能更合适。 接下来,每个字段需要对应实体类的属性。例如,id是int自增,主键,对应Java中的Long或者Integer类型,并用@Id和@GeneratedValue注解。org_code是varchar(255),对应String类型,属性名orgCode,并加上@Column注解指定数据库字段名。 需要注意日期类型的字段,比如effective_end_date、effective_start_date等,这些应该用LocalDate或者Date类型。时间戳如created_time和updated_time可能需要LocalDateTime或者Date,并搭配JPA的注解如@CreationTimestamp和@UpdateTimestamp。 还要处理默认值和空值情况。例如,is_delete字段默认是'1',在实体类中可能需要设置默认值,或者让数据库处理。created_time的默认值是CURRENT_TIMESTAMP,可以用@CreationTimestamp注解。updated_time在更新时自动更新,可以用@UpdateTimestamp。 备用字段field1到field5都是varchar,可能用不到,但还是要保留在实体类中,保持与数据库一致。 然后考虑是否需要Lombok简化代码,比如@Data或@Getter/@Setter,以及构造方法。如果用户没有特别说明,可能需要包含这些注解,减少样板代码。 另外,注释部分可以通过Swagger的@ApiModelProperty或者Javadoc来添加,方便生成文档。例如,每个字段的comment可以作为属性的注释说明。 最后,检查数据类型是否匹配,比如decimal(19,4)对应BigDecimal,确保精度正确。varchar(1)的is_delete用String还是Boolean?根据注释,可能的值是0、1、2,所以保持String更合适,避免转换问题。 总结步骤:确定类名,转换字段名,处理数据类型和注解,设置默认值和自动生成的时间戳,添加注释,最后检查整体结构是否符合规范。</think>根据SQL表结构,我们将分步骤创建Java实体类。以下是最优实现方案: $$ /** * 资产折旧表实体类 * 表名:hon_asset_depreciation_biao */ @Data @TableName("hon_asset_depreciation_biao") // MyBatis-Plus注解 @ApiModel(value = "HonAssetDepreciationBiao", description = "资产折旧表") // Swagger注解 public class HonAssetDepreciationBiao implements Serializable { private static final long serialVersionUID = 1L; // 核心字段(按表结构顺序) @TableId(type = IdType.AUTO) @ApiModelProperty("唯一标识") private Integer id; @TableField("org_code") @ApiModelProperty("公司代码") private String orgCode; @TableField(value = "asset_number", exist = true) @ApiModelProperty("主要资产编号") @NotNull private String assetNumber; // 数值型字段统一使用BigDecimal @TableField("accumulated_acquisition_cost") @ApiModelProperty("累积购置和生产费用") private BigDecimal accumulatedAcquisitionCost; // 日期字段使用Java8日期类型 @TableField("effective_start_date") @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty("有效期起始日期") private LocalDate effectiveStartDate; // 逻辑删除字段特殊处理 @TableLogic(value = "1", delval = "2") @TableField("is_delete") @ApiModelProperty(value = "删除状态", notes = "0-未知 1-正常 2-删除") private String isDelete; // 自动填充字段(需要实现MetaObjectHandler) @TableField(value = "created_time", fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createdTime; @TableField(value = "updated_time", fill = FieldFill.UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updatedTime; // 其他字段(保持与表结构完全对应) // ...此处省略中间字段,实际开发需完整列出... // 备用字段建议增加@Version注解防止并发问题 @Version @TableField("field1") private String field1; // 建议保留所有备用字段 @TableField("field2") private String field2; // ...field3-5省略... } $$ 关键实现要点: 1. **命名规范** - 类名采用大驼峰:`HonAssetDepreciationBiao` - 字段使用小驼峰:`assetNumber` → `asset_number` 2. **数据类型映射** - `decimal(19,4)` → `BigDecimal`(精确金融计算) - `date` → `LocalDate` - `timestamp` → `LocalDateTime` 3. **关键注解说明** - `@TableLogic`:实现逻辑删除(比物理删除更安全) - `@TableField(fill = FieldFill.INSERT/UPDATE)`:自动填充时间 - `@JsonFormat`:JSON序列化格式控制 4. **扩展性建议** ```java // 可添加计算字段(不持久化到数据库) @TableField(exist = false) private BigDecimal totalDepreciation; // 累计折旧总和 public BigDecimal getTotalDepreciation() { return accumulatedNormalDepreciation .add(accumulatedSpecialDepreciation) .add(accumulatedUnplannedDepreciation); } ``` 建议配套实现: 1. 创建`MetaObjectHandler`实现自动填充创建人/更新人 2. 添加`@NotNull`等校验注解保证数据完整性 3. 使用`lombok`简化代码结构 4. 配套创建DTO用于前端交互 完整实现需要包含所有表字段,此处为示例精简版本,实际开发需严格按照数据库字段逐个转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值