0

私は請求システムを開発していますが、ここでは無知なので助けが必要です。私には何人かの顧客がいて、その公共料金の支払いは私の銀行の責任です。私のシステムでは、次のデータとともに顧客を公益事業会社に登録しています。

**ビラーテーブル

お客様 Josh & Co.

公益事業会社 A

消費者番号 ......... AL12111
請求生成日 .... 毎月 07 日 請求書の期日 .... 毎月
18日 締切
日私の銀行の..毎月12日

請求書生成画面では、次のような入力を行っています。

消費者番号 ...... AL12111

Bill Entry Date.. 29-10-2010 (読み取り専用フィールド システム日付)

お客様 .... Josh & Co.

請求月 .... 10月

未払い額 ... 5,000 US$

今私の問題は、会計士が期日前に請求書を生成しているかどうかをどのように把握するかですが、請求書テーブルには月と年が月の日付だけではありません。

あなたの助けと解決策のアドバイスをいただければ幸いです..

ありがとう

4

2 に答える 2

2

これは、SQL Server に関する質問でも、プログラミングに関する質問でもありません。これは、ビジネス アナリスト/利害関係者のみが回答できるビジネス上の質問です。

拡張するには、エントリの日付 yyyy-mm-dd (dt_entry を日時と呼びましょう) と、請求書の期日である日付を d (整数) と呼びます。

エントリの日付と同じ月に日付を作成します (月末近くの日付については、ルールが何であるかについてビジネスから明確にする必要があることに注意してください。おそらく、何らかのスライディング ウィンドウを使用します)。 )。

したがって、日付形式の期日は dt_entry - DAY(dt_entry) + d になります (SQL Server の datetime では日数に単純な整数加算を使用でき、DATEADD は必要ありません)。

d が小さく (たとえば 1)、エントリ日が大きく (たとえば 31) なり、仮想の期日が実際には翌月になるため、これが月末近くに問題を引き起こす場所がわかります。しかし、人が非常に早く支払った場合 (25 日の支払期日に対して 5 日など) はどうなるでしょうか。

また、2 月の 31 日が期日になるわけではないため、短い月についても考慮する必要があります。

これらはすべて、ビジネス上の答えしかないプログラミングの問題です。

于 2010-11-02T19:45:21.290 に答える
0

CREATE PROCEDURE [sp_BillDateCheck]
@CURMONTH VARCHAR(3),
@MONTHNUM INT OUTPUT,
@EBDATEMATCH VARCHAR(90) OUTPUT
AS
BEGIN
DECLARE @ENTRYDATE DATETIME
SELECT @ENTRYDATE = GETDATE() --GET CURRENT ENTRY DATE

--月名を指定して月番号を取得
SELECT @MONTHNUM = DATEPART(mm,CAST(@CURMONTH + ' 1900' AS DATETIME))

IF DATEPART(MONTH, @ENTRYDATE) = @MONTHNUM
SELECT @EBDATEMATCH = 'エントリー日と請求月が同じ'

IF DATEPART(MONTH, @ENTRYDATE) < @MONTHNUM
SELECT @EBDATEMATCH = 'エントリー日は請求月よりも前です'

IF DATEPART(MONTH, @ENTRYDATE) > @MONTHNUM
SELECT @EBDATEMATCH = '入力日が請求月より後'
END
GO`

DATEPART ヒントを提供してくれた JNK に感謝します。私は確かにおしっこ脳ではありません

于 2010-11-02T20:52:52.860 に答える