Edit

AddStatementTransaction (ref, date, tofrom, desc, amt)

Definition:  Use this function to add a transaction to a bank statement import. The function only works when a Load Statement dialog is open, so can only be used from a statement loading script.

Statement Loading Scripts

Statement Loading in MoneyWorks supports well-defined bank statement formats (QIF and OFX/QBO). Some banks only provide CSV format and the problem is that CSV is not a format as such, but merely a field delimiter specification (namely commas between fields). The fields themselves will be arbitrary. Bank statements in CSV format will differ between banks. Statements may also be available in other formats. This is where Statement Loading Scripts are useful.

You may place an external .mwscript file in MoneyWorks Standard Plugins/Scripts/Bank Statement Importers. These scripts will show up as format options in the Bank Statement loading window...

When you select the importer script and click Load Statement File, MoneyWorks will load your script and execute the Load handler. The Load handler should open a text file, parse it, and call AddStatementTransaction for each transaction it finds in the file.

And here is an example for importing tab-delimited data scraped from a Kiwibank PDF bank statement using Tabula.

constant meta = "Kiwibank scraped PDF statement as Tab separated. http://cognito.co.nz"

on TrimQuotes(str)
    if Left(str, 1) = "$"
        let str = Right(str, Length(str) - 1)
    endif
    if Left(str, 1) = "\"" and Right(str, 1) = "\""
        return Mid(str, 2, Length(str) - 2)
    endif
    return str
end


on Load
    foreach line in textfile ""         // no filename -> present a file open dialog
        let transdate = TrimQuotes(Slice(line, 1, "\t"))    // slice automatically trims whitespace
        let procdate = TrimQuotes(Slice(line, 2, "\t"))
        let card = TrimQuotes(Slice(line, 3, "\t"))
        let desc = TrimQuotes(Slice(line, 4, "\t"))
        let credit = TrimQuotes(Slice(line, 5, "\t"))
        let debit = TrimQuotes(Slice(line, 6, "\t"))
        let amt = TextToNum(credit) - TextToNum(debit)
        if transdate = "" // skip currency conversion lines
            continue
        endif
        AddStatementTransaction("", TextToDate(transdate), desc, "", amt)
    endfor
end

Availability:  MoneyWorks 7.2 and later (including Express and Cashbook).