Files
soneta-erp-skills/soneta-programming/references/domeny/crm/CRM10-operacje-masowe.md
T

47 lines
1.8 KiB
Markdown

# CRM10 — Operacje masowe
> Wspólne fakty o typie, podstawowe typy i szablon wzorca: [../crm.md](../crm.md).
### CRM-W18 — Operacje na zbiorze kontrahentów
**Cel:** wykonać operację na wielu kontrahentach efektywnie i bezpiecznie.
**Warianty:**
| Wariant | Mechanizm |
|---|---|
| Iteracja z warunkiem | serwerowy LINQ `crm.Kontrahenci[(Kontrahent k) => …]` (patrz [`rowcondition.md`](../rowcondition.md)) |
| Masowa aktualizacja | jedna transakcja, paczki (patrz [`safe-code.md`](../safe-code.md)) |
| Masowa zmiana formy prawnej | worker `ZmienFormePrawnaKontrahentowWorker` |
| Masowe przypisanie kategorii | worker `KontrahenciPrzypiszKategorieWorker` |
| Masowa weryfikacja VAT/VIES (online) | `KontrahenciBialaListaWorker`, `KontrahenciDaneZMfWorker`, `KontrahenciDaneZViesWorker` |
| Eksport / import | datapack / business.xml (patrz [`datapack-guidedrow.md`](../datapack-guidedrow.md)) |
**Snippet:**
```csharp
var crm = session.GetCRM();
// Masowa zmiana: ustaw blokadę sprzedaży dla kontrahentów bez NIP — filtr serwerowy + 1 transakcja
using (var t = session.Logout(editMode: true))
{
foreach (Kontrahent k in crm.Kontrahenci.WgKodu[(Kontrahent k) =>
k.NIP == null && k.StatusPodmiotu == StatusPodmiotu.PodmiotGospodarczy])
{
k.BlokadaSprzedazy = true;
}
t.Commit();
}
session.Save();
```
**Pułapki:**
- **Nie ładuj całej tabeli** do pamięci — filtr serwerowy (`SubTable[condition]`).
- Duże operacje dziel na **paczki** (krótkie transakcje), by nie blokować innych użytkowników i nie
zwiększać ryzyka konfliktu optymistycznego (safe-code §13.1).
- Workery masowe (`*Worker` na typie `Kontrahenci`) mają property `[Context] Kontrahent[]`
przy użyciu programowym ustaw tablicę zaznaczonych rekordów.
---