【发布时间】:2019-10-24 13:10:45
【问题描述】:
我有一个生成发票的脚本。我在 db table invoice 中有一个字段 invoice_no (格式:INV-yyyymm-0001,这里 0001 应该为每个发票递增,直到下一个会计年度),在会计年度更改后应该重置为 001。 例如:如果发票编号为 INV-201903-2111 ,则在 2019 年 3 月 31 日之后应自动更改为 INV-201904-0001 而不是 INV-201904-2112
我已将会计年度的开始和结束存储在一个包含 Fyear、fsYear、feYear 的表中。每当我生成新发票时,它必须使用 Fyear 检查当前年份,然后检查开始和结束日期,如果当前日期使用 fsYear 和 feYear,则它必须重置为 001,然后递增直到该财政年度结束。我该如何实现它?
这是桌子
INSERT INTO `fyear` (`id`, `fyYear`, `fyStart`, `fyEnd`) VALUES
(1, 2019, '2019-04-01', '2020-03-31'),
(2, 2020, '2020-04-01', '2021-03-31');
我尝试创建一个函数来获取开始和结束日期 $cdate = date('Y-m-d'); $cyear = date("Y");
function GetFdate($Fyear, $Fstdate, $feddate)
{
$m1 = mysqli_query($con, "SELECT * FROM fyear WHERE fyYear='".$cyear."'");
$m2 = mysqli_fetch_array($m1);
$sYear = $m2['fyStart'];
$eYear = $m2['fyEnd'];
}
但不知道如何增加发票编号然后重置。
这是我的架构:
CREATE TABLE `sales_invoice` (
`invoice_id` int(10) NOT NULL,
`invoice_no` varchar(50) NOT NULL,
`order_id` varchar(50) NOT NULL,
`customer` int(10) NOT NULL,
`contact_person` int(10) NOT NULL,
`validity` int(10) NOT NULL,
`payment` varchar(100) NOT NULL,
`date_invoiced` date NOT NULL,
`status` varchar(20) NOT NULL,
`user_id` int(20) NOT NULL,
`shipping_address` varchar(100) NOT NULL,
`billing_address` varchar(100) NOT NULL,
`reference` varchar(255) NOT NULL,
`is_complete` varchar(10) NOT NULL DEFAULT 'No'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `sales_invoice`
ADD PRIMARY KEY (`invoice_id`);
ALTER TABLE `sales_invoice`
MODIFY `invoice_id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
INSERT INTO `sales_invoice` (`invoice_id`, `invoice_no`, `order_id`, `customer`, `contact_person`, `validity`, `payment`, `date_invoiced`, `status`, `user_id`, `shipping_address`, `billing_address`, `reference`, `is_complete`) VALUES
(1, 'INV-201903-2110', 'SO006', 91, 6, 5, 'Immediate', '2019-03-19', 'Paid', 1, '1', 'Company123', 'Webmail', 'No'),
(2, 'INV-201903-2111', 'SO007', 136, 4, 0, 'Immediate', '2019-03-30', 'Open', 1, '1', 'Company456', 'Google mail', 'No');
【问题讨论】:
-
这个表是多余的。财政年度总是从 4 月 1 日开始。存储这个事实是没有意义的。
-
是的。我会改变/删除它。但我的问题是我如何准确地增加发票编号然后重置它。
-
在发票表中,我有 invoice_no (INV-201803-2111),当它到达 2019 年 3 月 31 日时,它应该是 INV-201904-0001 自动而不是 INV-201803-2112 。这部分我不知道怎么做
-
我之前提到过但错过了这个例子,现在我已经编辑了问题
-
非常抱歉。在这里,我添加了架构。 [链接]sqlfiddle.com/#!9/e772a4/1