Точный онлайн импорт 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. Если вы укажете только номер счета-фактуры, сопоставление часто завершается молча.

Другие вопросы по тегам