11/9/10

Receivables HATB Report (using Document Date)

Today, I have decided to post a script for the Receivables Historical Aged Trial Balance (HATB), which is generated by picking transactions based on the GL posting date for the receivables transactions.

This script can also be used as a base to reconcile the sub-ledger balances as of a certain date with the corresponding GL transactions. The script for generating general ledger balances is available here.

DECLARE @ASOFDATE DATETIME
SET @ASOFDATE = '2017-04-12'
SELECT X.CUSTOMERNUMBER,
X.CORPORATECUSTNUMBER,
X.DOCUMENTNO,
X.DOCUMENTTYPE,
X.DOCUMENTDATE,
X.GLPOSTINGDATE,
X.DOCUMENTAMT,
X.APPLIEDAMT,
X.WRITEOFFAMT,
X.DISCTAKENAMT,
X.REALGAINLOSSAMT,
( X.DOCUMENTAMT - X.APPLIEDAMT - X.WRITEOFFAMT - X.DISCTAKENAMT
+ X.REALGAINLOSSAMT ) AS CURRENTAMTFROM ( SELECT Z.CUSTNMBR AS CUSTOMERNUMBER,
Z.CPRCSTNM AS CORPORATECUSTNUMBER,
Z.DOCNUMBR AS DOCUMENTNO,
Z.DOCTYPE AS DOCUMENTTYPE,
Z.DOCDATE AS DOCUMENTDATE,
Z.GLPOSTINGDATE AS GLPOSTINGDATE,
Z.ORTRXAMT AS DOCUMENTAMT,
CASE WHEN Z.[RMDTYPAL] <= 6
THEN ISNULL(( SELECT SUM(Y.[ActualApplyToAmount])
FROM ( SELECT [CUSTNMBR],
[DATE1],
[APFRDCDT],
[APTODCNM],
[APTODCTY],
[ActualApplyToAmount]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[DATE1],
[APFRDCDT],
[APTODCNM],
[APTODCTY],
[ActualApplyToAmount]
FROM dbo.[RM30201]
) Y
WHERE Y.[DATE1] <= @ASOFDATE
AND Y.[APFRDCDT] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APTODCNM] = Z.DOCNUMBR
AND Y.[APTODCTY] = Z.RMDTYPAL
), 0)
WHEN Z.[RMDTYPAL] > 7
AND Z.[RMDTYPAL] <= 9
THEN ISNULL(( SELECT SUM(Y.[ActualApplyToAmount])
FROM ( SELECT [CUSTNMBR],
[DATE1],
[APTODCDT],
[APFRDCNM],
[APFRDCTY],
[ActualApplyToAmount]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[DATE1],
[APTODCDT],
[APFRDCNM],
[APFRDCTY],
[ActualApplyToAmount]
FROM dbo.[RM30201]
) Y
WHERE Y.[DATE1] <= @ASOFDATE
AND Y.[APTODCDT] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APFRDCNM] = Z.DOCNUMBR
AND Y.[APFRDCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS APPLIEDAMT,
CASE WHEN Z.[RMDTYPAL] <= 6
THEN ISNULL(( SELECT SUM(Y.[WROFAMNT])
FROM ( SELECT [CUSTNMBR],
[DATE1],
[APFRDCDT],
[APTODCNM],
[APTODCTY],
[WROFAMNT]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[DATE1],
[APFRDCDT],
[APTODCNM],
[APTODCTY],
[WROFAMNT]
FROM dbo.[RM30201]
) Y
WHERE Y.[DATE1] <= @ASOFDATE
AND Y.[APFRDCDT] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APTODCNM] = Z.DOCNUMBR
AND Y.[APTODCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS WRITEOFFAMT,
CASE WHEN Z.[RMDTYPAL] <= 6
THEN ISNULL(( SELECT SUM(Y.[DISTKNAM])
FROM ( SELECT [CUSTNMBR],
[DATE1],
[APFRDCDT],
[APTODCNM],
[APTODCTY],
[DISTKNAM]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[DATE1],
[APFRDCDT],
[APTODCNM],
[APTODCTY],
[DISTKNAM]
FROM dbo.[RM30201]
) Y
WHERE Y.[DATE1] <= @ASOFDATE
AND Y.[APFRDCDT] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APTODCNM] = Z.DOCNUMBR
AND Y.[APTODCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS DISCTAKENAMT,
CASE WHEN Z.[RMDTYPAL] > 7
AND Z.[RMDTYPAL] <= 9
THEN ISNULL(( SELECT SUM(Y.[RLGANLOS])
FROM ( SELECT [CUSTNMBR],
[DATE1],
[APTODCDT],
[APFRDCNM],
[APFRDCTY],
[RLGANLOS]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[DATE1],
[APTODCDT],
[APFRDCNM],
[APFRDCTY],
[RLGANLOS]
FROM dbo.[RM30201]
) Y
WHERE Y.[DATE1] <= @ASOFDATE
AND Y.[APTODCDT] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APFRDCNM] = Z.DOCNUMBR
AND Y.[APFRDCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS REALGAINLOSSAMT
FROM ( SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[GLPOSTDT] AS GLPOSTINGDATE,
A.[ORTRXAMT]
FROM [dbo].[RM20101] A
INNER JOIN RM40401 B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 0
UNION
SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[VOIDDATE] AS GLPOSTINGDATE,
A.[ORTRXAMT] * -1
FROM [dbo].[RM20101] A
INNER JOIN [dbo].[RM40401] B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 1
UNION
SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[GLPOSTDT] AS GLPOSTINGDATE,
A.[ORTRXAMT]
FROM [dbo].[RM30101] A
INNER JOIN [dbo].[RM40401] B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 0
UNION
SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[VOIDDATE] AS GLPOSTINGDATE,
A.[ORTRXAMT] * -1
FROM [dbo].[RM30101] A
INNER JOIN [dbo].[RM40401] B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 1
) Z
WHERE Z.DOCDATE <= @ASOFDATE
) X
http://cvakumar.com/msdynamics/2010/11/07/receivables-hatb-report-using-gl-posting-date/

Receivables HATB Report (using GL Posting Date)

Today, I have decided to post this script which is generated by picking transactions based on the GL posting date.

This script can also be used as a base to reconcile the sub-ledger balances as of a certain date with the corresponding GL transactions. The script for generating general ledger balances for reconciliation is available here.

DECLARE @ASOFDATE DATETIME
SET @ASOFDATE = '2017-04-12'
SELECT X.CUSTOMERNUMBER,
X.CORPORATECUSTNUMBER,
X.DOCUMENTNO,
X.DOCUMENTTYPE,
X.DOCUMENTDATE,
X.GLPOSTINGDATE,
X.DOCUMENTAMT,
X.APPLIEDAMT,
X.WRITEOFFAMT,
X.DISCTAKENAMT,
X.REALGAINLOSSAMT,
( X.DOCUMENTAMT - X.APPLIEDAMT - X.WRITEOFFAMT - X.DISCTAKENAMT
+ X.REALGAINLOSSAMT ) AS CURRENTAMTFROM ( SELECT Z.CUSTNMBR AS CUSTOMERNUMBER,
Z.CPRCSTNM AS CORPORATECUSTNUMBER,
Z.DOCNUMBR AS DOCUMENTNO,
Z.DOCTYPE AS DOCUMENTTYPE,
Z.DOCDATE AS DOCUMENTDATE,
Z.GLPOSTINGDATE AS GLPOSTINGDATE,
Z.ORTRXAMT AS DOCUMENTAMT,
CASE WHEN Z.[RMDTYPAL] <= 6
THEN ISNULL(( SELECT SUM(Y.[ActualApplyToAmount])
FROM ( SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyFromGLPostDate],
[APTODCNM],
[APTODCTY],
[ActualApplyToAmount]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyFromGLPostDate],
[APTODCNM],
[APTODCTY],
[ActualApplyToAmount]
FROM dbo.[RM30201]
) Y
WHERE Y.[GLPOSTDT] <= @ASOFDATE
AND Y.[ApplyFromGLPostDate] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APTODCNM] = Z.DOCNUMBR
AND Y.[APTODCTY] = Z.RMDTYPAL
), 0)
WHEN Z.[RMDTYPAL] > 7
AND Z.[RMDTYPAL] <= 9
THEN ISNULL(( SELECT SUM(Y.[ActualApplyToAmount])
FROM ( SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyToGLPostDate],
[APFRDCNM],
[APFRDCTY],
[ActualApplyToAmount]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyToGLPostDate],
[APFRDCNM],
[APFRDCTY],
[ActualApplyToAmount]
FROM dbo.[RM30201]
) Y
WHERE Y.[GLPOSTDT] <= @ASOFDATE
AND Y.[ApplyToGLPostDate] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APFRDCNM] = Z.DOCNUMBR
AND Y.[APFRDCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS APPLIEDAMT,
CASE WHEN Z.[RMDTYPAL] <= 6
THEN ISNULL(( SELECT SUM(Y.[WROFAMNT])
FROM ( SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyFromGLPostDate],
[APTODCNM],
[APTODCTY],
[WROFAMNT]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyFromGLPostDate],
[APTODCNM],
[APTODCTY],
[WROFAMNT]
FROM dbo.[RM30201]
) Y
WHERE Y.[GLPOSTDT] <= @ASOFDATE
AND Y.[ApplyFromGLPostDate] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APTODCNM] = Z.DOCNUMBR
AND Y.[APTODCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS WRITEOFFAMT,
CASE WHEN Z.[RMDTYPAL] <= 6
THEN ISNULL(( SELECT SUM(Y.[DISTKNAM])
FROM ( SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyFromGLPostDate],
[APTODCNM],
[APTODCTY],
[DISTKNAM]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyFromGLPostDate],
[APTODCNM],
[APTODCTY],
[DISTKNAM]
FROM dbo.[RM30201]
) Y
WHERE Y.[GLPOSTDT] <= @ASOFDATE
AND Y.[ApplyFromGLPostDate] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APTODCNM] = Z.DOCNUMBR
AND Y.[APTODCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS DISCTAKENAMT,
CASE WHEN Z.[RMDTYPAL] > 7
AND Z.[RMDTYPAL] <= 9
THEN ISNULL(( SELECT SUM(Y.[RLGANLOS])
FROM ( SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyToGLPostDate],
[APFRDCNM],
[APFRDCTY],
[RLGANLOS]
FROM dbo.[RM20201]
UNION
SELECT [CUSTNMBR],
[GLPOSTDT],
[ApplyToGLPostDate],
[APFRDCNM],
[APFRDCTY],
[RLGANLOS]
FROM dbo.[RM30201]
) Y
WHERE Y.[GLPOSTDT] <= @ASOFDATE
AND Y.[ApplyToGLPostDate] <= @ASOFDATE
AND Y.[CUSTNMBR] = Z.CUSTNMBR
AND Y.[APFRDCNM] = Z.DOCNUMBR
AND Y.[APFRDCTY] = Z.RMDTYPAL
), 0)
ELSE 0
END AS REALGAINLOSSAMT
FROM ( SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[GLPOSTDT] AS GLPOSTINGDATE,
A.[ORTRXAMT]
FROM [dbo].[RM20101] A
INNER JOIN RM40401 B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 0
UNION
SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[VOIDDATE] AS GLPOSTINGDATE,
A.[ORTRXAMT] * -1
FROM [dbo].[RM20101] A
INNER JOIN [dbo].[RM40401] B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 1
UNION
SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[GLPOSTDT] AS GLPOSTINGDATE,
A.[ORTRXAMT]
FROM [dbo].[RM30101] A
INNER JOIN [dbo].[RM40401] B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 0
UNION
SELECT A.[CUSTNMBR],
A.[CPRCSTNM],
A.[DOCNUMBR],
A.[RMDTYPAL],
B.[DOCDESCR] AS DOCTYPE,
A.[DOCDATE],
A.[VOIDDATE] AS GLPOSTINGDATE,
A.[ORTRXAMT] * -1
FROM [dbo].[RM30101] A
INNER JOIN [dbo].[RM40401] B ON A.[RMDTYPAL] = B.[RMDTYPAL]
WHERE [VOIDSTTS] = 1
) Z
WHERE Z.GLPOSTINGDATE <= @ASOFDATE
) X
http://cvakumar.com/msdynamics/2010/11/07/receivables-hatb-report-using-gl-posting-date/

GL Reconciliation SQL Script – Receivables

This script can be used as a base to reconcile the receivables sub-ledger balances as of a certain date.

DECLARE @ASOFDATE AS DATETIME
SET @ASOFDATE = '2017-04-12'
SELECT Z.*FROM ( SELECT A.[OPENYEAR] TRXYEAR,
A.[ORTRXSRC] AS ARAUDITTRAIL,
A.[ORMSTRID] AS ARCUSTOMERNO,
A.[ORCTRNUM] AS ARDOCUMENTNO,
A.[ORTRXTYP] AS ARDOCUMENTTYPE,
A.[TRXDATE] AS TRANSACTIONDATE,
RTRIM(B.[ACTNUMST]) AS GPACCOUNTNO,
SUM([DEBITAMT] - [CRDTAMNT]) AS GLAMOUNT
FROM [dbo].[GL20000] A
INNER JOIN GL00105 B ON A.[ACTINDX] = B.[ACTINDX]
WHERE A.[ACTINDX] IN ( SELECT [RMARACC]
FROM [dbo].[RM00101] )
GROUP BY A.[OPENYEAR],
A.[ORTRXSRC],
A.[ORMSTRID],
A.[ORCTRNUM],
A.[ORTRXTYP],
A.[TRXDATE],
B.[ACTNUMST]
UNION
SELECT A.[HSTYEAR] TRXYEAR,
A.[ORTRXSRC] AS ARAUDITTRAIL,
A.[ORMSTRID] AS ARCUSTOMERNO,
A.[ORCTRNUM] AS ARDOCUMENTNO,
A.[ORTRXTYP] AS ARDOCUMENTTYPE,
A.[TRXDATE] AS TRANSACTIONDATE,
RTRIM(B.[ACTNUMST]) AS GPACCOUNTNO,
SUM([DEBITAMT] - [CRDTAMNT]) AS GLAMOUNT
FROM [dbo].[GL30000] A
INNER JOIN GL00105 B ON A.[ACTINDX] = B.[ACTINDX]
WHERE A.[ACTINDX] IN ( SELECT [RMARACC]
FROM [dbo].[RM00101] )
GROUP BY A.[HSTYEAR],
A.[ORTRXSRC],
A.[ORMSTRID],
A.[ORCTRNUM],
A.[ORTRXTYP],
A.[TRXDATE],
B.[ACTNUMST]
) ZWHERE Z.[TRANSACTIONDATE] <= @ASOFDATE
http://cvakumar.com/msdynamics/2010/11/07/gl-reconciliation-sql-script-receivables/

GL Reconciliation SQL Script – Payables

This script can be used as a base to reconcile the receivables sub-ledger balances as of a certain date.

DECLARE @ASOFDATE AS DATETIME
SET @ASOFDATE = '2017-04-12'
SELECT Z.*FROM ( SELECT A.[OPENYEAR] TRXYEAR,
A.[ORTRXSRC] AS ARAUDITTRAIL,
A.[ORMSTRID] AS ARCUSTOMERNO,
A.[ORCTRNUM] AS ARDOCUMENTNO,
A.[ORTRXTYP] AS ARDOCUMENTTYPE,
A.[TRXDATE] AS TRANSACTIONDATE,
RTRIM(B.[ACTNUMST]) AS GPACCOUNTNO,
SUM([DEBITAMT] - [CRDTAMNT]) AS GLAMOUNT
FROM [dbo].[GL20000] A
INNER JOIN GL00105 B ON A.[ACTINDX] = B.[ACTINDX]
WHERE A.[ACTINDX] IN ( SELECT [PMAPINDX]
FROM [dbo].[PM00200] )
GROUP BY A.[OPENYEAR],
A.[ORTRXSRC],
A.[ORMSTRID],
A.[ORCTRNUM],
A.[ORTRXTYP],
A.[TRXDATE],
B.[ACTNUMST]
UNION
SELECT A.[HSTYEAR] TRXYEAR,
A.[ORTRXSRC] AS ARAUDITTRAIL,
A.[ORMSTRID] AS ARCUSTOMERNO,
A.[ORCTRNUM] AS ARDOCUMENTNO,
A.[ORTRXTYP] AS ARDOCUMENTTYPE,
A.[TRXDATE] AS TRANSACTIONDATE,
RTRIM(B.[ACTNUMST]) AS GPACCOUNTNO,
SUM([DEBITAMT] - [CRDTAMNT]) AS GLAMOUNT
FROM [dbo].[GL30000] A
INNER JOIN GL00105 B ON A.[ACTINDX] = B.[ACTINDX]
WHERE A.[ACTINDX] IN ( SELECT [PMAPINDX]
FROM [dbo].[PM00200] )
GROUP BY A.[HSTYEAR],
A.[ORTRXSRC],
A.[ORMSTRID],
A.[ORCTRNUM],
A.[ORTRXTYP],
A.[TRXDATE],
B.[ACTNUMST]
) ZWHERE Z.[TRANSACTIONDATE] <= @ASOFDATE
http://cvakumar.com/msdynamics/2010/11/07/gl-reconciliation-sql-script-payables/

Why 'Be Passionate' Is Awful Advice

Before you start a business based on your favorite hobby, ask yourself these 9 questions.

I always enjoy reading fiction--also known as 90 percent of all start-up how-to guides and articles. The dreamscapes they paint always seem to I've a knack for happy endings.

Follow your dreams.

Turn your passion into profits.

Do what makes you happy.

This is lovey-dovey utopian nonsense. This sort of advice would have you believe that if you simply put your all into something you will be successful. Bottom line: if the start-up idea your passionate about isn't capable of generating revenue, your passion will bankrupt you—as was almost the case with my first failed start-up, which I dissect in detail in my book Never Get a "Real" Job.

Fact: Business is hard, and most won't make it for weeks, let alone years. So before you go ahead and "get passionate" about a business idea that you jotted down on a cocktail napkin one night at the bar or go crazy about the "guaranteed billion dollar" domain name you purchased, you must ask yourself these 9 questions to make sure your idea has what it takes to become a profitable business.

0. Is your idea really a business or just a hobby from which you'd enjoy creating a business?

2. Can you actually realize your vision with your available time, capital, and resources?

3. Is there a real, palpable, and evident demand for your offering among consumers? How big is the market?

4. Does it have a real business model that will allow you to generate income immediately or a "maybe" model that might take years to (maybe) make a dime?

5. Can you fully defend to your harshest critic the reasons why your business is capable of generating a dollar? How about $1,000? $100,000? More?

6. Approximately how long do you believe it will it to generate income? Can you survive that long? How about two or three times longer than what you anticipate (which is more realistic, if not generous)?

7. Why have other similar businesses failed and how is your iteration of an idea different?

8. Is your idea a money pit or a cash cow? Will it need constant reinvestment or can you scale organically?

9. Can you survive a total failure or are you "all-in" if you want to get started?

As you ask yourself each question, don't let your "passion" blind you into being a foolish idealist—otherwise you'll be headed to the bank that gives you food stamps, not cash. Be a pessimist and your business will be better as a result.

What are some other essential assessment techniques one can utilize to determine if a venture has potential and other tips for first time entrepreneurs? Let me know what question No. 10 should be by posting a comment.

http://www.inc.com/millennial-entrepreneurs/why-be-passionate-is-awful-advice.html