advpl-advancedlisted
Install: claude install-skill JoniPraia/plugadvpl
# advpl-advanced — Tópicos avançados ADVPL
ADVPL avançado cobre o que vai além do CRUD MVC básico: transações ACID, relatórios estruturados (TReport), manipulação de arquivos em massa (SPED, EDI), captura de informações multi-linha (grids dinâmicas fora de MVC), threads paralelas, OOP clássico, e técnicas de programação eficiente.
## Quando usar
- Usuário pede "relatório", "TReport", "impressão", "PDF", "Excel".
- Necessidade de `Begin Transaction` / `BeginTran` (gravações atômicas multi-tabela).
- Manipulação de arquivos texto (`.csv`, `.txt`, layouts SPED/EDI/SEFAZ) com `FCreate`/`FOpen`/`FRead`/`FWrite` ou `FT_FUse`/`FT_FReadLn` (família 2).
- Telas com grids dinâmicas (`MsNewGetDados`, `TCBrowse`) fora do contexto MVC.
- Performance de loops, arredondamento financeiro (`NoRound`), I/O bulk.
- Threads paralelas com `MsRunInThread` (cuidado com WorkArea por thread).
- OOP em ADVPL clássico (`Class ... Method ... EndClass`).
- Migrações de código `Modelo1`/`Modelo2`/`Modelo3`/`AxCadastro` (legacy) → MVC moderno.
## Transações — Begin Transaction × BeginTran
```advpl
Begin Transaction
RecLock("SC5", .T.)
SC5->C5_NUM := cNumPed
SC5->C5_FILIAL := xFilial("SC5")
SC5->C5_CLIENTE := cCli
SC5->(MsUnlock())
RecLock("SC6", .T.)
SC6->C6_FILIAL := xFilial("SC6")
SC6->C6_NUM := cNumPed
SC6->C6_ITEM := "01"
SC6->(MsUnlock())
If lErroNaValidacao
DisarmTransaction() // forca rollback explicito
Break