Имитация Kingdee, дизайн системы инвентаризации материалов и идеи реализации

Java EE

Компания также недавно разрабатывает систему инвентаризации и использует Kingdee, который является относительно успешным в отрасли, для анализа и обучения, чтобы улучшить свой бизнес-уровень. Самое главное в системе инвентаризации – это расчет прихода и расхода, себестоимости и прибыли.

Введение в основной процесс работы

入库操作时序图
Основной процесс исходящей операции
出库操作时序图

участвующие роли

Роли, участвующие во входящих и исходящих операциях, можно увидеть в элементах учета в системе Kingdee.Эта роль очень важна и включает в себя следующую структуру таблицы.

Видно, что ролей много, потому что Kingdee — это не только система инвентаризации, но и полноценная финансовая система.Незаменимыми ролями системы инвентаризации являются следующие:

  1. Поставщик: система инвентаризации отправляет материал со склада поставщику, а поставщик поставляет систему на склад.
  2. Материал: наименьшая единица, участвующая в расчете запасов.
  3. Склад: один и тот же материал может одновременно появляться на нескольких складах, но одновременно для входящих и исходящих объектов может быть выбран только один склад.

Блок, который может управлять материалом в единице измерения

Обратите особое внимание на коэффициент конверсии в этой единице измерения. Например, коэффициент конверсии в приведенном выше поле равен 10, а единица является единицей по умолчанию, что означает, что 1 поле можно заменить на 10.

Существует также роль стороны, которая инициирует входящие и исходящие сообщения (обычно входящие и исходящие инициирует компания), где все входящие и исходящие сообщения являются авторами, а структура таблицы временно игнорируется.

На складе и вне его

Откройте «Управление складом» -> «Складирование закупок/складирование продаж», в качестве примера возьмем складирование закупок.

Вы можете видеть, что основные поля входящего заказа имеют эти

  1. Поставщик (откуда поставляются эти товары)
  2. Дата инвентаризации
  3. Номер (неизменяемый, генерируется автоматически)
  4. Входящий материал
  5. Входящий склад
  6. Полученная сумма
  7. Единица полученной суммы
  8. цена за единицу товара
  9. количество

Метод ценообразования

В новом интерфейсе материалов Kingdee вы можете просмотреть методы ценообразования, которые в настоящее время поддерживаются системой.

В настоящее время широкое распространение в промышленности получили:

  1. скользящая средняя
  2. первым пришел-первым вышел Другие методы ценообразования в настоящее время используются меньше, и те, кто заинтересован, могут узнать о бухгалтерских знаниях. В настоящее время я знаком с методом FIFO, поэтому возьму в качестве примера метод ценообразования FIFO.

Дизайн стола

  1. Таблица входящих и исходящих документов
  2. Таблица материалов, связанная с входящим и исходящим документом
  3. Таблица баланса запасов партий материалов
  4. Таблица входных и выходных данных инвентаризации партии материалов
  5. Таблица поставщиков
  6. Материальная таблица
  7. Складские столы
  8. таблица единиц измерения
  9. инвентарный стол Вы можете видеть, что эта простейшая таблица инвентаризации партии также имеет 9 таблиц. Следующая таблица построена в порядке от простого к сложному, по мнению автора, а минимальная структура таблицы предназначена для удовлетворения требований входящего и исходящего хранилища.

таблица единиц измерения

В настоящее время коэффициент конверсии не учитывается и не участвует в конверсии инвентаря, поэтому поля таблицы единиц относительно просты. sql выглядит следующим образом:

CREATE TABLE `unit` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '物品编码',
  `name` varchar(128) NOT NULL DEFAULT '' COMMENT '名称',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `name` (`name`) USING BTREE,
  UNIQUE KEY `code` (`code`) USING BTREE COMMENT '`'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='计量单位';

Таблица поставщиков

В системе поставщик является объектом входящего и исходящего хранения, входящий материал закупается у поставщика, а исходящий материал возвращается поставщику.

CREATE TABLE `supply` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) NOT NULL DEFAULT '' COMMENT '名称',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='供应商表';

Складские столы

Таблица склада используется для идентификации склада, на котором находится материал.Один и тот же материал может существовать на нескольких складах.При входе на склад необходимо выбрать склад, на котором хранится материал.

CREATE TABLE `warehouse` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `organization_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '门店id',
  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '库房名称',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='库房信息表';

инвентарный стол

Используется для учета запасов материалов на разных складах.При входе и выходе со склада необходимо синхронизировать количество запасов из партии в таблицу запасов.

CREATE TABLE `inventory` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `warehouse_id` bigint(20) unsigned NOT NULL COMMENT '库房ID',
  `material_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '物料id',
  `count` decimal(16,2) NOT NULL DEFAULT '0.00' COMMENT '总库存',
  `lock_count` decimal(16,2) NOT NULL DEFAULT '0.00' COMMENT '占用库存',
  `available_count` decimal(16,2) NOT NULL DEFAULT '0.00' COMMENT '可用库存',
  `cost_amount` decimal(16,4) NOT NULL DEFAULT '0.0000' COMMENT '成本总金额',
  `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
  `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `deleted_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_group_id_label_id_relation_id_type` (`warehouse_id`,`material_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='仓库库存表';

таблица материалов

Вещи являются основными объектами инвентаризационных операций.

CREATE TABLE `material` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `material_code` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '物品编码',
  `name` varchar(45) NOT NULL COMMENT '名称',
  `category_id` int(11) unsigned NOT NULL COMMENT '所属分类',
  `category_name` varchar(45) NOT NULL COMMENT '分类名称',
  `unit_weight` decimal(10,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '单位重量',
  `base_unit_id` bigint(20) DEFAULT NULL COMMENT '主单位id',
  `base_unit_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' COMMENT '主单位名称',
  `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新日期',
  `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时期',
  `deleted_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='物料';

Таблица входящих и исходящих документов

Таблица документов используется для записи количества входящих и исходящих документов, а также некоторой метаинформации документа, такой как поставщик, оператор, сумма документа, количество материалов в документе и т. д.

CREATE TABLE `in_out` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `type` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '1:采购订单 2:采购收货单 3:采购退货单',
  `in_out_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '单号',
  `warehouse_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '仓库ID',
  `warehouse_name` varchar(64) NOT NULL DEFAULT '' COMMENT '仓库名称',
  `supply_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '供应商id',
  `supply_name` varchar(64) NOT NULL DEFAULT '' COMMENT '供应商名称',
  `address` varchar(45) NOT NULL DEFAULT '' COMMENT '交货地址',
  `count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '物料数量',
  `amount_total` decimal(18,8) unsigned NOT NULL DEFAULT '0.00000000' COMMENT '当前单据总金额',
  `amount_count` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '当前单据总数量',
  `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
  `deleted_at` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_group_id_expense_sn` (`in_out_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='单据表';

Таблица сопоставления материалов входящего и исходящего документа

Запишите подробную информацию о материалах на складе и вне его, такую ​​как название материала, код, единица измерения, количество, цена за единицу, сумма, налог и другие основные поля, участвующие в расчете запасов.

CREATE TABLE `in_out_detail` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `warehouse_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '仓库ID',
  `warehouse_name` varchar(62) NOT NULL DEFAULT '' COMMENT '仓库名称',
  `in_out_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '单号',
  `in_out_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '单号ID',
  `in_out_type` tinyint(4) DEFAULT NULL COMMENT '单据类型',
  `material_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '关联ID',
  `material_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '关联物料名称',
  `material_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '关联物料sn',
  `unit_basic_name` varchar(32) NOT NULL DEFAULT '' COMMENT '基本单位名称',
  `unit_basic_value` decimal(10,3) NOT NULL DEFAULT '1.000' COMMENT '基本单位数值',
  `unit_basic_count` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '主单位数量',
  `unit_basic_price` decimal(14,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '主单位不含税单价',
  `unit_basic_tax_price` decimal(14,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '主单位的含税单价',
  `unit_basic_total` decimal(18,8) unsigned NOT NULL DEFAULT '0.00000000' COMMENT '主单位不含税金额',
  `unit_basic_tax_total` decimal(18,8) NOT NULL DEFAULT '0.00000000' COMMENT '主单位含税金额',
  `tax` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '税率',
  `tax_total` decimal(18,8) unsigned NOT NULL DEFAULT '0.00000000' COMMENT '税额',
  `production_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '生产日期',
  `created_at` int(11) unsigned NOT NULL DEFAULT '0',
  `updated_at` int(11) unsigned NOT NULL DEFAULT '0',
  `deleted_at` int(11) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_in_out_id_material_id` (`in_out_id`,`material_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1110 DEFAULT CHARSET=utf8 COMMENT='单据物料关联表';

Таблица партий материалов

Эта таблица партий предназначена для записи текущего состояния инвентаризации всех партий материалов.Теоретически, инвентаризация партии материалов использует не более 0 запасов.

CREATE TABLE `batch` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `code` int(11) DEFAULT NULL COMMENT '批次代码',
  `warehouse_id` bigint(20) DEFAULT NULL COMMENT '仓库id',
  `in_type` int(4) DEFAULT NULL COMMENT '入库单类型',
  `in_id` bigint(20) DEFAULT NULL COMMENT '入库单的id',
  `material_id` bigint(20) DEFAULT NULL COMMENT '物料、菜品、套餐关联id',
  `end_tax_price` decimal(14,4) DEFAULT '0.0000' COMMENT '当前含税单价',
  `end_price` decimal(14,4) DEFAULT '0.0000' COMMENT '当前不含税单价',
  `end_count` decimal(10,2) DEFAULT '0.00' COMMENT '当前 主单位库存数量 要减去占用数量',
  `end_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '当前不含税总金额(发生单据后这个值会发生变化)',
  `end_tax_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '当前含税总金额',
  `end_tax_total` decimal(18,8) DEFAULT '0.00000000' COMMENT '当前结存税额',
  `cost_tax_price` decimal(14,4) DEFAULT '0.0000' COMMENT '原含税单价',
  `cost_price` decimal(14,4) DEFAULT '0.0000' COMMENT '原不含税单价',
  `cost_count` decimal(10,2) DEFAULT '0.00' COMMENT '原主单位库存数量',
  `cost_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '原不含税总金额',
  `cost_tax_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '原含税总金额',
  `cost_tax_total` decimal(18,8) DEFAULT '0.00000000' COMMENT '原税额',
  `gross_profit` decimal(18,8) DEFAULT '0.00000000' COMMENT '利润金额(含税:入-成本/出-成本)',
  `lock_count` decimal(10,2) DEFAULT '0.00' COMMENT '占用/锁定数量',
  `production_at` int(11) DEFAULT NULL COMMENT '生产日期',
  `status` tinyint(1) DEFAULT '1' COMMENT '冻结为0 非冻结为1',
  `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
  `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
  `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `deleted_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='批次表';

Таблица моментальных снимков партии материалов

Запись моментальных снимков после каждого изменения таблицы материала партии

CREATE TABLE `batch_snapshot` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `batch_id` bigint(20) DEFAULT NULL,
  `in_out_detail_type` int(4) DEFAULT NULL COMMENT '单据详情类型',
  `in_out_detail_id` bigint(20) DEFAULT NULL COMMENT '入库单价',
  `in_count` decimal(12,4) DEFAULT '0.0000' COMMENT '入库数量',
  `in_total_amount` decimal(18,8) DEFAULT NULL,
  `in_tax_total` decimal(18,8) DEFAULT '0.00000000' COMMENT '税额',
  `in_tax_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '入库含税金额',
  `out_price` decimal(14,4) DEFAULT '0.0000' COMMENT '出库单价',
  `out_count` decimal(10,2) DEFAULT '0.00' COMMENT '出库数量',
  `out_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '出库未含税金额',
  `out_tax_total` decimal(18,8) DEFAULT '0.00000000' COMMENT '出库税额',
  `out_tax_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '出库含税金额',
  `out_cost_tax_price` decimal(14,4) DEFAULT '0.0000' COMMENT '出库成本单价(含税)',
  `out_cost_price` decimal(14,4) DEFAULT '0.0000' COMMENT '出库成本单价(不含税)',
  `out_cost_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '出库成本含税金额',
  `out_cost_tax_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '出库成本不含税金额',
  `out_cost_tax_total` decimal(18,8) DEFAULT '0.00000000' COMMENT '出库成本税额',
  `end_price` decimal(14,4) DEFAULT '0.0000' COMMENT '当前未含税单价',
  `end_tax_price` decimal(14,4) DEFAULT '0.0000' COMMENT '当前含税单价',
  `end_count` decimal(10,2) DEFAULT '0.00' COMMENT '当前结存数量',
  `end_total_amount` decimal(18,8) DEFAULT '0.00000000' COMMENT '当前结存未含税金额',
  `end_tax_total_amount` decimal(18,8) unsigned DEFAULT '0000000000.00000000' COMMENT '当前结存含税金额',
  `end_tax_total` decimal(18,8) DEFAULT '0.00000000' COMMENT '当前结存税额',
  `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
  `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
  `deleted_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='批次快照表';

Основной алгоритм

В системе инвентаризации, поскольку операции, влияющие на инвентарь и количество, могут считаться основным алгоритмом инвентаризации, наиболее важным из них является метод ценообразования материала, поскольку метод ценообразования этого материала будет использоваться каждый раз. время поступления товара на склад и выхода из него, а также различные методы ценообразования напрямую влияют на стоимость и прибыль запасов.

Расчет стоимости: стоимость включает налог, поэтому налог должен быть включен при расчете стоимости. 1. Стоимость, введенная пользователем в систему, не включает налог, тогда системе необходимо использовать налоговую точку для расчета суммы налога и добавления ее к стоимости. 2. Стоимость, введенная пользователем в систему, включает налог, затем системе необходимо вычесть налоговый балл, чтобы получить стоимость без налога.

Алгоритм «первым пришел – первым вышел»: «первым пришел – первым вышел».

некоторые замечания

Сумма хранится в десятичном типе в mysql и представлена ​​типом BigDecimal в java. Таблица моментальных снимков партий записывает только моментальные снимки запасов материалов партии и не участвует в расчете запасов и стоимости.

Постоянно обновляется...