ПРОВЕРКА РЕКВИЗИТОВ ДОКУМЕНТОВ

Перед импортом или экспортом документов, особенно перед импортом, документов в АБС необходимо осуществлять контроль их реквизитов для недопущения попадания в АБС ошибочных документов.

К таким проверкам относятся например:

  • контроль наличия и не закрытости счетов в АБС;
  • контроль (ключевание) ИНН получателя и плательщика;
  • контроль остатков на счетах;
  • возможность списания/пополнения вкладов при операциях с ними;
  • многие другие...

Для контроля реквизитов импортируемых/экспортируемых документов в АБС используется процедура imp-upd.p, осуществляющая стандартные проверки реквизитов документа. Данная процедура имеет два входных параметра:

imp-upd.p (flag-go, no-buf)

flag-go - определяющий код вида операции INTEGER типа:
   0 - внутр. документы;
   1 - начальные обороты;
   2 - ответные обороты;
   3 - транзитные документы.

no-buf - определяет направление импорт/экспорт:
    NO - для импорта документа
    YES - для экспорта документа

Для контроля реквизитов операции необходимо предварительно заполнить их в соответствующих временных таблицах, описанных в imp.wrk:
   w-op - реквизиты документа;
   w-op-entry - реквизиты балансовой проводки;
   w-op-bank - реквизиты банка корреспондента;
   w-signs - доп. реквизиты.

Данные таблицы являются аналогами соответствующих таблиц без префикса "w-" в базе АБС.

Следовательно для контроля импортируемых документов нам необходимо написать механизм заполнения этих таблиц данными из внешних источников таких, как например, XML, DBF, CSV и т.д.

При заполнении таблиц поля op и op-entry  таблиц w-op и w-op-entry заполним порядковыми номерами валидируемых документов. Главное чтоб значения данных полей были одинаковыми.

Мы не будем здесь рассматривать процессы заполнения данных таблиц данными из различных форматов, оставим это на Ваше усмотрение и условия. Для примера, просто заполним поля этих таблиц реквизитами одного документа.

{imp.wrk NEW}

CREATE w-op.
CREATE w-op-entry.

ASSIGN
   w-op.op        = 1
   w-op.doc-num   = "1001"
   w-op.doc-type  = "01"
   w-op.op-date   = TODAY
   w-op.doc-date  = TODAY
   w-op.due-date  = TODAY
   w-op.ins-date  = TODAY
   w-op.op-status = "ф"    
   w-op.order-pay = "6"
   w-op.acct-send = "40817810000000000001"
   w-op.inn-send  = "123456789110"
   w-op.acct-rec  = "40817810000000000002"
   w-op.name-rec  = "Иванов Иван Иванович"
   w-op.inn-rec   = "000000000000"  
   w-op.details   = "Перевод денежных средств"
.     

ASSIGN
   w-op-entry.op       = 1
   w-op-entry.op-entry = 1
   w-op-entry.op-date  = TODAY
   w-op-entry.acct-db  = "40817810000000000001"
   w-op-entry.acct-cr  = "40817810000000000002"
   w-op-entry.amt-rub  = 100.00
   w-op-entry.amt-cur  = 0
.
RUN imp-upd.p (0, NO).

Ошибки и предупреждения возникшие во время контроля записываются в w-op.op-error в виде списка состоящего из элементов <Классификатор ошибок:Код ошибки>

Если валидация реквизитов производится в рамках импорта транзакцией модуля "Обмен с внешними системами", то классификатор ошибок определяется значением доп. реквизита транзакции code-err - Код классификатора ошибок. По умолчанию используется стандартный классификатор mess-error.

Классификатором ошибок является mess-error. В поле w-op.op-error записываются коды ошибок описанных в нем. Хочу заметить, что на этапе контроля не имеет значение, отнесен ли код к "Ошибке" или к "Предупреждению". На это нужно будет смотреть уже непосредственно при импорте документа. На данном этапе просто фиксируется факт корректности или некорректности реквизитов по определенным требованиям и правилам.

После выполнения контроля процедурой imp-upd.p просмотрим выявленные ошибки простым отчетом.

{setdest.i}
FOR EACH w-op:
   DISPL w-op.op w-op.op-error SKIP.
END.
{preview.i}

На основе анализа критичности выявленных ошибок, можно принимать решение об импорте документа в АБС или отказе с указанием причины. Как импортировать документ? Да как Вам будет удобно. Можно пойти методом Универсальных транзакций, описанном в Вызов УТ из процедур ABL

Для заполнения таблиц w-*, при экспорте документов, существуют следующие инклюд-файлы:

{op.i &buf1="op" &buf2="w-op"}
{op-entry.i "op-entry" "w-op-entry"}

Данные инклюд-файлы осуществляют копирование записей таблиц op и op-entry, являющихся первыми аргументами, в таблицы w-op и w-op-entry соответственно, являющихся вторыми аргументами, передаваемыми этим инклюд-файлам.