views:

414

answers:

14

Hi,

Soon, I'll start my own software company. My primary product/solution will be a Billing/Invoice Software. In a near future, I pretend to expand this first module to an ERP. My app should be able to run as a stand-alone application and as a Web-based application (so there will be, probably two GUI for the same Database). My problem, now, is to choose the right tools; I'm talking about what programming language(s) should I use, what kind of database should I choose, and stuff like that.

I'm primarily a VB6 programmer, so probably I'll choose the .net framework (vb/c#). But I'm seriously thinking about Java. Java has 2 "pros" that I really like: write once, run anywhere and it is free (I think...). I've been thinking about RIAs too, but I just don't have any substantial feedback about them... Then, I'll need a report tool. Crystal Reports? HTML based Reports? Other?

Databases: I'm not sure if I should use SQL-Server Express or PostgreSQL (or other).

I'd be happy to hear any comments and advices

Thanks

+1  A: 

Primarily, your choice will be based on the platforms you are targeting. If you don't see users on Linux/Mac, then I suggest you use .Net to develop your Windows stand alone application.

At the same time, for your web based application, it doesn't matter if its write once, run anywhere because you will only need to run it on your server (which you control).

Vaibhav
+8  A: 

Pick which technology you and you team knows best, but whether you go the .NET route or the Java route, do yourself a favour and stay away from Crystal Reports!

Galwegian
+1  A: 

@Vaibhav: Well, this is a major dilemma for me. There are a lot of Mac users, when compared to 5/6 years ago, and that's why I thought on Java, and, for sure, is a niche market yet not explored.

@Galwegian: I'm worried about reports. Crystal is a full-featured product but is just another dependency in the application and it can be painful to work with it. Any other suggestions?

Armadillo
+1  A: 

Tip: Use seperate database tables for billing items, invoices, products, orders and payments.

Over the last few years I worked for a few companies where this was not initially done. The result was always a major billing nightmare and lots of (otherwise unnecessary) work for all (coders, financial guys, ...) involved.

On the technology side: Use what you know best and use existing libraries where possible. Keep your code-base small if you can.

pi
+4  A: 

Sheesh, you get good advice and you don't listen. I'll repeat it for you.

DO NOT USE Crystal Reports.

It is a steaming pile of donkey poo normally inflicted on developers by know-nothing managers swayed by glossy brochures and demos of reporting scenarios that are deliberately so trivial that even managers can understand them.

If you are stupid enough to allow this time-vampire into your life you will regret it forever. No, wait, go right ahead. Ignore us, swallow the marketing lies and use it if that's what you want. This is a self-punishing crime. When I say "donkey poo" I mean a very sick donkey with a delicate stomach and a penchant for chili.

Peter Wone
+2  A: 

Both Java and .NET are free.

There is development tools for both languages in free versions - there is also IDE's for both that cost money. For .NET look at the Visual Studio Express Editions, for Java look at Netbeans.

And yes Java is write once, run slowly everywhere :)

.NET gives more performance on the windows platform. So unless you have strong believes that it should run on linux or mac os then .NET is the way to go. Also considder if you really needs a windows app. Maybe you could only write a web app? That also runs everywhere. ASP.NET also makes it easy for Windows Forms programmers to write web applications, so you should manage. If uses the same toolbox draggy-droppy interface as you are use to in VB6.

As a side note: .NET also runs on Mac OS and Linux using the Mono framework. The support for .NET 3.5 and Windows Forms is although kinda limited, so plan ahead if you need cross platform support in .NET, and read about the Mono framework, and the alternate GUI libraries to .NET.

And yes: Stay AWAY from Crystal Reports

Jesper Blad Jensen aka. Deldy
A: 

Thank you for all the replies. Great advices ;)

An App I will need, for sure. For example, a small business, with only one or two employees. That company will not accept that it will need a server (or any kind of hosting-service) just to create some invoices and to handle a "couple" of products. And the application should be easy enough to install without any technical knowledge, by those persons.

Don't worry, I'll not use Crystal Reports. So, what other alternatives can you suggest me to do reports? RTF? HTML? Other crystal-reports-like application?

Thank you

Armadillo
+3  A: 

Given that most of your replies have come from .NET developers, I will speak up as a J2EE developer.

To expand on what "Pi" said about setting up your tables (before picking your database implementation), be sure you really understand data modeling. Run ... don't walk ... to a great database modeling book. You will need this no matter what technology stack you use.

Your choice between .NET and J2EE will probably turn upon the OS that you want to run your servers on. Pros of the J2EE route are that you can run on a Linux/Unix server, and enjoy an OS tradition that's been designed for networking and security from the very beginning (sorry, Windows). Consequently a lot of enterprise-y projects are in J2EE for just that reason such as financial services. Another advantage of the J2EE route is that the JVM really is OS independent. You could run your server on any Linux distro, a Mac server or an Windows server, and your Java bytecode would not care one whit. Finally, with all due respect to Jesper, Java is not necessarily a performance bottleneck. A lot will depend upon how you architect your app, tuning your queries, and even the choice of your JVM implementation.

That said, the J2EE space is quite large. You should consider the cost of learning entirely new framework (and developer culture). It's a big transition from VB6 to C#. While it would appear that C# and Java are highly similar to one another as languages, the APIs and tools are very different. Ask yourself some soul-searching questions: who do you want to pay you to use your software? If it's big enterprisey places like a bank, I might go with Java. If it's a small business that needs software that will interoperate with Office, I would go with .NET.

Alan
+1  A: 

On a more constructive note, I recommend you install SQL Express with Advanced Services (the download that includes SQL Server Reporting Services aka SSRS).

While SQL Express is limited in the number of concurrent users it can support, the following observations are salient:

  • The licence for SSRS obtained as part of SQL Express only requires that it be deployed as part of SQL Express. There is nothing forbidding connection to other data sources or requiring that a report obtain data from SQL Server.

  • The abovementioned version of SSRS has no intrinsic restrictions on user connections. All limitations are imposed on the SQL Express database engine.

  • SSRS uses ADO.NET

  • ADO.NET includes, out of the box, drivers for Oracle, Jet (Access), OLEDB and ODBC

My point here is that you can connect the free version of SSRS to any back-end to which you can connect ADO.NET, which includes (for example) MySQL.

I use SSRS extensively at work both for inward facing reports and for outward facing reports embedded in ASP.NET applications that provide bureau services to large numbers of paying customers. In our case it happens that the backing store is a licensed copy of Microsoft SQL Server 2008, but this is incidental to the technical merits of our reporting solution.

There is a long list of capabilities that Crystal Reports claims to support but which either don't work or which require a staggeringly expensive licence if you want more than five users. You can't even trust CR to do SQL correctly.

SELECT COUNT(*) FROM SOMETABLE WHERE 1=0

should produce zero rows but it doesn't, it produces one row. The built-in query engine doesn't even work correctly, and a team that screws up something a bunch of amateurs can do for free (MySQL) has no hope of getting anything you'd describe as performance out of their code.

As for the alleged support, dialog resize bugs have gone uncorrected for more than ten years after they were first publicly documented. If you get out your credit card and pay the extortionate ransoms demanded (I too would want handsome pay to support such a horror) you will find yourself talking to someone who claims his name is David, but inexplicably pronounces it "Dah-feet", and who doesn't even understand your question, much less have an answer.

The SSRS support situation is fairly similar, but it actually works so you don't really need much.

SSRS, on the other hand, does everything that CR claims to. It is not without bugs, but they are delightfully few, and they seldom survive more than one release cycle.

The SSRS designer UI is hosted within the Visual Studio IDE. It is pretty in typical Microsoft style, but more than this it is quite well thought out, incorporating several simple but fundamental departures from traditional report designers. For example, to present tabular data you define a table rather than fiddling about with individual text boxes. As a result you don't have to screw around trying to line them up, and putting borders on them is a trivial stylesheet exercise.

Look, SSRS is free, it actually does all the things CR claims to, and you can connect it to anything for which you can get an ODBC driver. This is a no brainer.

Peter Wone
+2  A: 

For the very small deployment you describe I heartily recommend SQL Express. It supports up to five connections but in addition to the workstation applications the report server also needs to connect, and in fact five connections will really only support one to two users for this type of application.

It's free and it will give you experience working with the same tools you need for much larger much more profitable installations. More to the point, the database files can be mounted on a licensed installation of SQL Server, so if your customer's user base outgrows SQL Express this is a licensing issue between them and Microsoft, and you won't have to change your program in any way.

A word of caution: two-user mum-and-dad operations are typically short of computer expertise. You will find them a surprisingly heavy support burden. I suggest you include terms and limitations of support in your contract with them. You don't have to gouge them - the mere fact that support isn't free will cause them to try thinking for themselves instead of picking up the phone every time something unexpected happens.

You should also mention the fact that more than five users will require them to license SQL Server. If you fail to tell them this in advance you become liable. They won't like it, so point out that it's like buying a car; if they choose to drive down a tollway that's out of your control and not your responsibility beyond pointing out that some roads are tollways.

I should also point out that MySQL is not free for paid commercial deployments.

Peter Wone
I believe your last line needs a bit of a correction - http://www.xaprb.com/blog/2009/02/17/when-are-you-required-to-have-a-commercial-mysql-license/ - it's not free if you *embed* MySQL into your commercial app - if you simply deploy MySQL and have your app connect to it there's no need to pay for the commercial license (if you don't need support contracts, etc.)
Nate
A: 

Oracle has Reports Developer in their Development Studio package, but it is not pretty.

The designer interface is outdated, slow and crashes all the time. The reporting engine produces half-decent PDFs, but uses outdated PDF standard, can't generate XLS reports, crashes all the time.

+2  A: 

myDBR is a web based reporting solution for MySQL and Microsoft SQL Server databases. Check the online demo and free trial download on myDBR web site

A: 

You might also look at BIRT for reporting, if you decide to go the Java route.

warren
A: 

Do not use an ORM or dynamic SQl to access your datbase, used stored procs. Why? Because this is a financial app and you need to make sure for internal control reasons that no one except the database admin can directly affect the tables. Dynamic SQl and ORMS require direct acces to tables and views, only stored procs can limit what the user can do to only the things the proc will allow him to do. This means someone can't enter a fake bill into the system bypassing the internal controls programmed into the application. This is critical. Only stored procs allow you set permissions at the correct level. Otherwise your site is open license for employees to commit fraud. I would not take on the responsibility of designing a system like this without a good accountant and a lot of research into how to portect the information from internal fraud as well as external attacks. You don't want to be liable if your customer loses money because you didn't set up the proper controls.

In setting up relationships between tables, remember that you are storing historical data about invoices and orders, so use a price table for instance as a lookup table and still store the price at the time of the invoice in the invoice details table. I worked with a system once that forgot to do this and just pulled the price from whatever the current price was which of course screwed up the financial arecords greatly. I made them redisgn to get the information stored correctly although we didn't have the info to go back and fix existing bad records.

You are also going to want to set up record auditing. Trust me with a system like this you will need to know who changed what data when.

As far as reports, SQL Server has a reporting application. I think you can even get a copy to use with express. You can also simply write the reports in SQL code and serve them up as pages of your application. They may not be as preety as what a report writing program can do, but they are quite functional.

HLGEM