Проект "AnaliticDB"
Форма "Тесты" открывается из главного меню программы кнопкой "Тесты".
Возвращает количество заказов в базе данных и дату последнего заказа, что позволяет оценить актуальность базы данных.
Возвращает текст в поле отчета:
Количество заказов = 2906656 дата последнего заказа = 13.02.2020
select count(*) cnt, max(doc_date) as doc_date from a_orders
Для начисления пени заводится специальная услуга с настройкой 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
Вычисление количества ошибок в платежах или начислениях заказов через исходную базу данных с помощью хранимой процедуры 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-таблицу все записи заказов с ошибкой.
Скрипт для получения данных смотри в предыдущем пункте.