To receive a deposit from a customer for an order (or full payment in advance) we create a sales order and then create an invoice in Invoice Entry and link it back to the sales order. For the GL Account number we use the same GL Account number on the invoice entry that is shown on the sales order itself. When the order is ready to ship we do the shipping entry and the invoice generated from Invoice Forms shows all money due and subtracts any "Pre-Invoiced" amounts.
The problem with this process is our Income Statement shows the deposit as revenue for the month the deposit was received with no COGS in that month. Then on the back side when we do the shipping entry, usually one to two months later, the remaining revenue (if any) and all of the COGS are posted in that month. In the scenerio where the job was paid in full up front there is no revenue recorded at all in the month that the shipping entry is done. So we end up with a huge swing in "profit" in the month we received the deposit and a huge swing in expense in the month we do the shipping entry.
What we would like to do is use a process that would allow us to accept payments on an order before being ready to ship and "hold" that money. When the order is completed all revenue and COGS associated with that order would be posted in the same month with the customer's account reflecting any previous deposits.