КатегорияЛогическа грешка — референтна цялост
Кога се хващаПри логическите проверки; схемата проверява формата на ID-то, не дали то съществува
Типичен сигналЗапис реферира идентификатор, който липсва в MasterFiles
Какво значи
SAF-T е устроен като малка база данни: секцията MasterFiles декларира номенклатурите — контрагенти, сметки, продукти — а записите в дневниците и документите ги реферират по идентификатор, вместо да повтарят име и данни на всеки ред. Тази конструкция работи само ако всяка референция води до съществуващ запис.
Когато ред от хронологията или фактура сочи CustomerID, който го няма сред декларираните клиенти, референцията виси. XSD проверката вижда само, че идентификаторът е валидно форматиран текст — дали съществува насреща, схемата не знае. Затова грешката излиза при логическите проверки, при напълно „зелена“ схемна валидация.
Защо се случва
- Складовата програма и счетоводството поддържат различни номенклатури. Класическата причина: единият софтуер води клиента като
1042, другият — катоC-1042или под съвсем друг номер. Документите идват с едното ID, MasterFiles се пълни с другото. - Контрагентът е създаден след експорта на MasterFiles. Ако номенклатурите са извадени в началото на генерирането, а записите — след това, нов клиент от последния момент присъства в записите, но не и в списъка.
- Изтрити или слети контрагенти. „Почистване“ на номенклатурата (дублирани партиди, слети картони) след осчетоводяването оставя стари записи да сочат вече несъществуващи идентификатори.
- Разлики в изписването на ID-то. Водеща нула (
0142срещу142), префикс, интервал или кирилска буква в идентификатора — технически това са различни стойности, и референцията не се намира.
Как се поправя
- Извадете от протокола всички нереферирани идентификатори и проверете къде живеят те — в коя система са създадени и защо ги няма в експортираните MasterFiles.
- Синхронизирайте номенклатурите или направете мапинг таблица между складовите и счетоводните кодове на контрагентите — преди експорта, на едно установено място.
- Генерирайте MasterFiles и записите в един и същи момент, за да не се разминават по време.
- Проверете и обратния знак: контрагенти в MasterFiles, които никой запис не ползва, не са грешка — но огромен брой такива подсказва, че мапингът налива грешната номенклатура.
Пример
<!-- в записите: -->
<CustomerID>C-1042</CustomerID>
<!-- в MasterFiles: -->
<Customer>
<CustomerID>1042</CustomerID>
...
</Customer>
<!-- 'C-1042' ≠ '1042' — записът сочи
клиент, който не съществува -->
<!-- в записите: -->
<CustomerID>1042</CustomerID>
<!-- в MasterFiles: -->
<Customer>
<CustomerID>1042</CustomerID>
...
</Customer>
Пуснете файла през безплатната проверка: всяка грешка идва с ред, обяснение и съвет. Проверете файла — безплатно, в браузъра.