Totali Sped
Este artigo descreve os passos e decisões necessárias para implementar uma nova fonte de dados (SELECT) no SPED.
Tutorial
Existem duas formas principais de se criar uma estrutura de dados do SPED.
Elas devem ser utilizadas conforme a finalidade.
a) TQueryDAO: Criar uma consulta a fonte de dados (Query e XML) e permite que o programador percorra todos os registro da query.
Em cada linha, programador deve criar o objeto e imediatamente utilizá-lo.
Desta forma, é possível gerar vários registros de SPED utilizando pouca memória.
b) TListDAO: Usando essa classe, é necessário passar de fora uma lista, e a classe criará todos os objetos nessa lista.
Assim, quando o DAO for liberado, os objetos ainda poderão ser utilizadas.
É usada quando os objetos serão necessários em outro DAO, isso gasta mais memória que o TQueryDAO.
Esse tutorial demonstra a utilização da maneira mais complexa, que é a TListDAO.
1. Criar classe para representar o objeto (registro(s) da QUERY) a ser criado.
Exemplo: TDocumentoArrecadacao.
2. Criar classe para representar uma lista da classe unitária.
TDocumentoArrecadacaoList = class(TTotaliList)
3. Criar a classe DAO e a classe QueryDAO.
A classe DAO ficará responsável por criar os objetos a partir de uma fonte de dados.
Ela será abstrata em relação a fonte dos dados.
TDocumentoArrecadacaoDAO = class(TListDAO)
É necessário implementar uma classe que estende a fonte de dados e que tenha uma Query.
TDocumentoArrecadacaoQueryDAO = class(TDocumentoArrecadacaoDAO)
4. Criar um atributo público para guardar a lista.
A lista passada para o DAO precisa ser criado fora do DAO.
Assim, quando o DAO for destruído, os objetos criados perdurarão.
5. É necessário prever e tratar a liberação de memória de todos os objetos criado no SPED.
As listas baseadas nos objetos TTotaliList possuem a característica de ser OwsObject=False.
Ou seja, além de eliminar as listas, precisamos eliminar cada um dos objetos criados.
Continua no artigo Como exportar um novo registro no SPED
Diagramação
Abaixo está um diagrama para melhor visualização do exemplo do documento de arrecadação.

Diagrama de classes de parte do SPED