Точный онлайн импорт GLTransactions с автоматической сверкой
Я использую наш инструмент запросов для создания файлов XML для темы GLTransactions
XML API Exact Online. Входными данными для этих файлов являются файлы аудита XML, поступающие из Twinfield (формат XAF 3.1).
Поскольку Exact Online имеет смешанную книгу и множество ограничений, невозможно напрямую загружать банковские записи. Вместо этого банковские операции проводятся на отдельном счете в Главной книге Exact Online с отдельным журналом в качестве первого шага при загрузке файлов аудита XML из Twinfield.
На следующем этапе содержимое в Exact Online зарезервированной учетной записи Главной книги публикуется в банковском журнале. Сам Exact Online генерирует вторую половину как строки связанных транзакций для главной банковской книги.
Запрос, используемый для генерации банковских записей:
create or replace table bank@inmemorystorage
as
select case
when substr(tle.description, 1, instr(tle.description, '/') - 1) = 'BNK'
then '20'
when substr(tle.description, 1, instr(tle.description, '/') - 1) = 'BNK2'
then '21'
else '??'
end
txn_journalcode
, txn.financialyear txn_financialyear
, txn.financialperiod txn_financialperiod
, txn.entrynumber txn_entrynumber
, txn.date txn_date
, tle.date tle_date
, tle.linenumber tle_linenumber
, substr(tle.description, instr(tle.description, '/') + 1, instr(tle.description, ':') - instr(tle.description, '/') - 1) tle_glaccountcode_target
, substr(tle.description, instr(tle.description, ':') + 2) tle_description
, trim(tle.accountcode) tle_accountcode
, tle.glaccountcode glaccountcode_source
, tle.amountdc tle_amountdc
, tle.vatcode tle_vatcode
, tle.yourref tle_yourref
from exactonlinerest..transactionlines tle
join exactonlinerest..transactions txn
on tle.entryid = txn.entryid
where tle.glaccountcode like '290%'
and substr(tle.description, instr(tle.description, '/') + 1, instr(tle.description, ':') - instr(tle.description, '/') - 1) not like '11%' /* Not a bank account. */
order
by tle.entrynumber
, tle.linenumber
select 'GLTransactions\99-Interim-empty.xml'
filename
, stg.fileprefix
|| chr(13)
|| '<GLTransactions>'
|| xml
|| chr(13)
|| '</GLTransactions>'
|| stg.filepostfix
filecontents
from ( select listagg
( chr(13)
|| '<GLTransaction entry="'
|| txn_entrynumber
|| '">'
|| chr(13)
|| '<Journal code="'
|| txn_journalcode
|| '" />'
|| chr(13)
|| '<Date>'
|| substr(xmlencode(txn_date), 1, 10)
|| '</Date>'
|| chr(13)
|| xml
|| chr(13)
|| '</GLTransaction>'
, ''
) xml
from ( select txn_date
, txn_journalcode
, txn_financialyear
, txn_financialperiod
, txn_entrynumber
, listagg
( chr(13)
|| '<GLTransactionLine type="40" linetype="0" line="'
|| tle_linenumber
|| '" offsetline="1" status="20">'
|| chr(13)
|| '<Date>'
|| substr(xmlencode(tle_date), 1, 10)
|| '</Date>'
|| chr(13)
|| '<FinYear number="'
|| txn_financialyear
|| '" />'
|| chr(13)
|| '<FinPeriod number="'
|| txn_financialperiod
|| '" />'
|| chr(13)
|| '<GLAccount code="'
|| case
when tle_glaccountcode_target = '1560'
then '2902' /* Separate interim GL account, Twinfield does not provide separated. */
else xmlencode(tle_glaccountcode_target)
end
|| '" />'
|| case
when tle_description is not null
then chr(13)
|| '<Description>'
|| xmlencode(tle_description)
|| '</Description>'
end
|| case
when tle_accountcode is not null
then chr(13)
|| '<Account code="'
|| xmlencode(tle_accountcode)
|| '" />'
end
|| chr(13)
|| '<Amount>'
|| '<Currency code="EUR" />'
|| '<Value>'
|| -1 * tle_amountdc
|| '</Value>'
|| case
when tle_glaccountcode_target like '4%'
then '<VAT code="GB" />' /* GB = No VAT. */
else ''
end
|| '</Amount>'
|| chr(13)
|| '</GLTransactionLine>'
, ''
)
xml
from bank@inmemorystorage
group
by txn_date
, txn_journalcode
, txn_financialyear
, txn_financialperiod
, txn_entrynumber
)
)
join settings@inmemorystorage stg
on 1=1
В колонке tle_yourref
в bank@inmemorystorage
список разделенных запятыми счетов-фактур купли-продажи.
При ручном вводе транзакции в Главной книге в банковском журнале содержимое вашей ссылки заполняется окном выверки. Однако, когда я экспортирую XML-файл из Exact Online с транзакциями, ваша ссылка отсутствует.
В данный момент я, кажется, не в состоянии автоматически согласовать через транзакции XML или REST API Exact Online эти транзакции в банковском журнале.
В качестве обходного пути вы можете выбрать каждую отдельную учетную запись в окне сверки (практически все они составляют 0 евро), а затем выбрать "Автоматическая сверка". Но существует слишком много учетных записей, чтобы сделать это при каждом преобразовании из Twinfield в Exact Online.
Есть ли альтернативный способ связать счета-фактуры с банковскими операциями через API (REST или XML) Exact Online?
1 ответ
Если между счетом и платежом есть отношение 1 к 1 (то есть только 1 счет и 1 платеж), вы можете использовать <References><InvoiceNumber>put invoice entrynumber here</InvoiceNumber></References>
в банковской записи, чтобы это автоматически сверялось.
Другая возможность - создать файл XML с темой MatchSets (см. Документацию), чтобы впоследствии его можно было сопоставить.
Кроме того, вы также можете сказать:
<References><EntryNumber>10000012</EntryNumber><InvoiceNumber>FAC0001</InvoiceNumber></References>
Это всегда работает, когда отношение 1=1. Если вы укажете только номер счета-фактуры, сопоставление часто завершается молча.