Форма "Тесты"

Проект "AnaliticDB"

Форма «Тесты» открывается из главного меню программы кнопкой «Тесты».

Кнопки

  • Последний заказ - Загружает только значения из файла WarningTypes.xml
  • ID услуги для начисления пени - Сохраняет таблицу в файл WarningTypes.xml
  • Статистика по ошибкам в закзах - Вычисление количества ошибок в платежах или начислениях заказов через таблицу a_orders
  • Статистика по ошибкам в закзах 2 - Вычисление количества ошибок в платежах или начислениях заказов через исходную базу данных с помощью хранимой процедуры SP_CHECK_ORDERS
  • Заказы с ошибкой -
  • Заказы с ошибкой в платежах -
  • Заказы с ошибкой в начислениях -
  • Экспорт заказов с ошибкой в Excel -

Последний заказ

Возвращает количество заказов в базе данных и дату последнего заказа, что позволяет оценить актуальность базы данных.
Возвращает текст в поле отчета:

Количество заказов = 2906656
дата последнего заказа = 13.02.2020

select count(*) cnt, max(doc_date) as doc_date 
from  a_orders 

ID услуги для начисления пени

Для начисления пени заводится специальная услуга с настройкой tovars_tb.accrual_penalty=1.
Если такой услуги нет, то начисление пени не предусмотрено.
Возвращает ID и наименование услуги для начисления пени.
Возвращает текст в поле отчета:

Нет услуги для начисления пени

select t.tovar_id, t.name 
from tovars_tbl t 
where t.accrual_penalty=1 

Статистика по ошибкам в закзах

Вычисление количества ошибок в платежах или начислениях заказов через таблицу a_orders
Возвращает текст в поле отчета:

Количество заказов = 2906656
Количество заказов с правильными суммами оплат и начислений = 2869925
Количество заказов с несовпадающими суммами оплат или начислений = 36731
Несоответствия суммы заказа в зависимости от метода получения 
Количество заказов с правильными суммами начислений = 2876800
Количество заказов с несовпадающими суммами начислений = 29856
Количество заказов с docs_order.kredit<>docs.kredit = 2078
Количество заказов с docs_order.kredit<>сумма (doc_order_services, doc_order_lines, doc_laud_services) = 27799
Сумма задолженности по правильным заказам = 12914119,27
Сумма задолженности по заказам с ошибкой = 35588651,64
Несоответствия суммы оплаты заказа в зависимости от метода получения 
Количество заказов с правильными суммами оплат = 2897606
Количество заказов с несовпадающими суммами оплат = 9050
Количество заказов с docs_order.debet<>payments = 7018
Количество заказов с docs_order.debet<>docs.debet = 2057
Количество заказов с docs_order.debet<>сумма из платежных документов (docs) = 6834
Количество заказов с docs_order.debet<>сумма из платежных документов (docs_bonus, docs_deposit, docs_bank, docs_card, docs_kassa) = 6732
Сумма задолженности по правильным заказам = 54563347,64
Сумма задолженности по заказам с ошибкой = -6060576,73

select 
  count(*) as total, 
  sum(iif((aor.ok_kredit=1) and (aor.ok_debet=1),1,0)) as cnt_ok, 
  sum(iif((aor.ok_kredit=1) and (aor.ok_debet=1),0,1)) as cnt_bad, 
  sum(iif(aor.ok_kredit=1,1,0)) as cnt_ok_kredit, 
  sum(iif(aor.ok_kredit=1,0,1)) as cnt_bad_kredit, 
  sum(iif(abs(coalesce(aor.dor_kredit,0)- coalesce(aor.doc_kredit,0))>1,1,0)) as cnt_doc_kredit, 
  sum(iif(abs(coalesce(aor.dor_kredit,0)- coalesce(aor.dos_kredit,0))>1,1,0)) as cnt_dos_kredit, 
  sum(iif(aor.ok_kredit=1,coalesce(aor.Debts,0),0)) as Debts_ok_kredit, 
  sum(iif(aor.ok_kredit=1,0,coalesce(aor.Debts,0))) as Debts_bad_kredit, 
  sum(iif(aor.ok_debet=1,1,0)) as cnt_ok_debet, 
  sum(iif(aor.ok_debet=1,0,1)) as cnt_bad_debet, 
  sum(iif(abs(coalesce(aor.dor_debet,0)- coalesce(aor.payments,0))>1,1,0)) as cnt_payments, 
  sum(iif(abs(coalesce(aor.dor_debet,0)- coalesce(aor.doc_debet,0))>1,1,0)) as cnt_doc_debet, 
  sum(iif(abs(coalesce(aor.dor_debet,0)- coalesce(aor.dpc_debet,0))>1,1,0)) as cnt_dpc_debet, 
  sum(iif(abs(coalesce(aor.dor_debet,0)- coalesce(aor.dpx_debet,0))>1,1,0)) as cnt_dpx_debet, 
  sum(iif(aor.ok_debet=1,coalesce(aor.Debts,0),0)) as Debts_ok_debet, 
  sum(iif(aor.ok_debet=1,0,coalesce(aor.Debts,0))) as Debts_bad_debet 
from  a_orders aor 

Статистика по ошибкам в закзах 2

Вычисление количества ошибок в платежах или начислениях заказов через исходную базу данных с помощью хранимой процедуры SP_CHECK_ORDERS
Возвращает текст в поле отчета:

Количество заказов = 2906656
Количество заказов с правильными суммами оплат и начислений = 2870004
Количество заказов с несовпадающими суммами оплат или начислений = 36652
Несоответствия суммы заказа в зависимости от метода получения 
Количество заказов с правильными суммами начислений = 2876800
Количество заказов с несовпадающими суммами начислений = 29856
Количество заказов с docs_order.kredit<>docs.kredit = 2078
Количество заказов с docs_order.kredit<>сумма (doc_order_services, doc_order_lines, doc_laud_services) = 27799
Несоответствия суммы оплаты заказа в зависимости от метода получения 
Количество заказов с правильными суммами оплат = 2897685
Количество заказов с несовпадающими суммами оплат = 8971
Количество заказов с docs_order.debet<>docs.debet = 2057
Количество заказов с docs_order.debet<>сумма из платежных документов (docs) = 6834
Количество заказов с docs_order.debet<>сумма из платежных документов (docs_bonus, docs_deposit, docs_bank, docs_card, docs_kassa) = 6732

SET TERM ^ ;

create or alter procedure SP_CHECK_ORDERS (
  data_begin D_DATE, 
  data_end D_DATE)
returns (
  cnt_total d_integer,
  cnt_ok d_integer,
  cnt_bad d_integer,
  cnt_ok_kredit d_integer,
  cnt_bad_kredit d_integer,
  cnt_doc_kredit d_integer,
  cnt_dos_kredit d_integer,
  cnt_ok_debet d_integer,
  cnt_bad_debet d_integer,
  cnt_doc_debet d_integer,
  cnt_dpc_debet d_integer,
  cnt_dpx_debet d_integer)
as
declare variable dor_id D_INT64;
declare variable doc_debet D_NUM_15_2;
declare variable doc_kredit D_NUM_15_2;
declare variable kind_id D_INT64;
declare variable summ_from_details D_BOOLEAN;
declare variable use_simple_laundry D_BOOLEAN;
declare variable dor_debet D_NUM_15_2;
declare variable dor_kredit D_NUM_15_2;
declare variable dos_kredit D_NUM_15_2;
declare variable PenaltyID D_INT64;
declare variable dpc_debet D_NUM_15_2;
declare variable dpx_debet D_NUM_15_2;
declare variable is_ok d_integer;
declare variable s1 D_NUM_15_2;
declare variable s2 D_NUM_15_2;
begin
  select first 1 t.tovar_id
  from tovars_tbl t
  where t.accrual_penalty=1 
  into :PenaltyID;

  PenaltyID = coalesce(PenaltyID,-1);

  cnt_total = 0;
  cnt_ok = 0;
  cnt_bad = 0; 
  cnt_ok_kredit = 0;
  cnt_bad_kredit = 0;
  cnt_doc_kredit = 0;
  cnt_dos_kredit = 0; 
  cnt_ok_debet = 0;
  cnt_bad_debet = 0;
  cnt_doc_debet = 0;
  cnt_dpc_debet = 0;
  cnt_dpx_debet = 0;
  FOR
    select 
      dor.id as dor_id,
      d.debet as doc_debet,
      d.kredit as doc_kredit, 
      dor.kind_id as kind_id,
      dor.summ_from_details,
      dor.use_simple_laundry,
      dor.debet as dor_debet,
      dor.kredit as dor_kredit
    from docs d
      inner join docs_order dor on dor.doc_id=d.doc_id 
    where
      (d.doc_date>=:data_begin) and (d.doc_date<:data_end) 
    INTO :dor_id, :doc_debet, :doc_kredit, :kind_id, :summ_from_details, :use_simple_laundry, :dor_debet, :dor_kredit
  DO
  BEGIN
    if ((:kind_id=1) and (coalesce(:summ_from_details,0)=1) and (coalesce(:use_simple_laundry,0)=0))  then
    begin
      select sum(dl.contr_kredit) 
      from doc_order_services dos 
        left join doc_laud_services dl on dl.dos_id=dos.id 
      where dos.doc_order_id=:dor_id
      into :dos_kredit;
    end
    else
    begin
      select sum(dos.kredit)
      from doc_order_services dos 
      where dos.doc_order_id=:dor_id and (dos.status_id<>7) and (dos.tovar_id<>:PenaltyID) 
      into :S1;

      select sum(dol.kredit)
      from doc_order_lines dol 
      where dol.doc_order_id=:dor_id 
      into :S2;

      dos_kredit = coalesce(S1,0) + coalesce(S2,0); 
    end

    -- Оплата заказа через docs
    select sum(coalesce(d2.debet,0) - coalesce(d2.kredit,0)) as dpc_debet
    from doc_order_pays dop
      left join docs d2 on d2.doc_id = dop.doc_id
    where
      (dop.doc_order_id=:dor_id)
    into :dpc_debet;

    -- Оплата заказа через docs_xxx 
    select
      sum(
        coalesce(dk.debet,0) - coalesce(dk.kredit,0)+
        coalesce(dc.debet,0) - coalesce(dc.kredit,0)+
        coalesce(db.debet,0) - coalesce(db.kredit,0)+
        coalesce(bo.debet,0) - coalesce(bo.kredit,0)+
        coalesce(dd.debet,0) - coalesce(dd.kredit,0)
      ) as dpx_debet  -- Сумма платежа
    from doc_order_pays dop
      left join docs_kassa   dk on dk.doc_id=dop.doc_kassa_id
      left join docs_card    dc on dc.doc_id=dop.doc_card_id
      left join docs_deposit dd on dd.doc_id=dop.doc_deposit_id
      left join docs_bonus   bo on bo.doc_id=dop.doc_bonus_id
      left join docs_bank    db on db.doc_id=dop.doc_bank_id     
    where
      (dop.doc_order_id=:dor_id)
    into :dpx_debet;

    cnt_total = cnt_total + 1;
    is_ok = 1;

    if ((abs(coalesce(dor_kredit,0)- coalesce(doc_kredit,0))<1) and
        (abs(coalesce(dor_kredit,0)- coalesce(dos_kredit,0))<1)) then
    begin
      cnt_ok_kredit = cnt_ok_kredit + 1;
    end
    else
    begin
      is_ok = 0;
      cnt_bad_kredit = cnt_bad_kredit + 1;
      if (abs(coalesce(dor_kredit,0)- coalesce(doc_kredit,0))>1) then
        cnt_doc_kredit = cnt_doc_kredit + 1;
      if (abs(coalesce(dor_kredit,0)- coalesce(dos_kredit,0))>1) then
        cnt_dos_kredit = cnt_dos_kredit + 1;
    end

    if ((abs(coalesce(dor_debet,0)- coalesce(doc_debet,0))<1) and
        (abs(coalesce(dor_debet,0)- coalesce(dpc_debet,0))<1) and
        (abs(coalesce(dor_debet,0)- coalesce(dpx_debet,0))<1)) then
    begin
      cnt_ok_debet = cnt_ok_debet + 1;
    end
    else
    begin
      is_ok = 0;
      cnt_bad_debet = cnt_bad_debet  + 1;
      if (abs(coalesce(dor_debet,0)- coalesce(doc_debet,0))>1) then
        cnt_doc_debet = cnt_doc_debet + 1;
      if (abs(coalesce(dor_debet,0)- coalesce(dpc_debet,0))>1) then
        cnt_dpc_debet = cnt_dpc_debet + 1;
      if (abs(coalesce(dor_debet,0)- coalesce(dpx_debet,0))>1) then
        cnt_dpx_debet = cnt_dpx_debet + 1;
    end
    if (is_ok = 1)  then
      cnt_ok = cnt_ok + 1;
    else
      cnt_bad = cnt_bad + 1;
  END

  suspend;
end^

SET TERM ; ^

"Заказы с ошибкой", "Заказы с ошибкой в платежах", "Заказы с ошибкой в начислениях"

Вычисляется общее количество заказов с ошибкой и записывается в поле отчета:

select count(*) 
from  a_orders aor 
where (aor.ok_kredit=0) or (aor.ok_debet=0)

Загружаются первые 100 записей для просмотра на форме.

select first 100 
  aor.id, 
  aor.dttm, 
  aor.doc_id, 
  aor.dor_id, 
  aor.doc_date, 
  aor.doc_num, 
  aor.status_id, 

  aor.firm_id, 
  aor.Contr_id, 
  aor.Sclad_id, 

  aor.IS_Closed, 
  aor.DT_Closed, 
  aor.IS_Debts, 
  aor.DT_NO_Debts, 

  aor.Debts, 

  aor.Sales, 
  aor.Sales_after_Discount, 
  aor.Sales_Returns, 
  aor.Sales_Additional, 
  aor.Net_sales, 


  aor.doc_kredit, 
  aor.dor_kredit, 
  aor.dos_kredit, 
  aor.ok_kredit, 

  aor.pay_Bonuses, 
  aor.pay_Deposits, 
  aor.pay_Bank, 
  aor.pay_Card, 
  aor.pay_Cash, 

  aor.payments, 
  aor.doc_debet, 
  aor.dor_debet, 
  aor.dpc_debet, 
  aor.dpx_debet, 
  aor.ok_debet, 

  aor.kind_id, 
  aor.summ_from_details, 
  aor.use_simple_laundry, 
  aor.pay_status_id, 
  aor.date_full_pay, 
  aor.date_out_fact, 
  aor.date_complete, 
  aor.is_order_confirmed, 
  aor.waiting_confirm, 
  aor.is_not_confirmed, 

  aor.contr_name, 
  aor.sclad_name 

from  a_orders aor 
where (aor.ok_kredit=0) or (aor.ok_debet=0)

Экспорт заказов с ошибкой в Excel

Выгружаются в Excel-таблицу все записи заказов с ошибкой.
Скрипт для получения данных смотри в предыдущем пункте.

Дополнительная информация