====== Форма "Тесты" ======
Проект **[[:analiticdb|"AnaliticDB"]]**\\
Форма **"Тесты"** открывается из главного меню программы кнопкой **"Тесты"**.\\
{{:pasted:20200617-075258.png}}
==== Кнопки ====
* **Последний заказ** - Загружает только значения из файла WarningTypes.xml
* **ID услуги для начисления пени** - Сохраняет таблицу в файл WarningTypes.xml
* **Статистика по ошибкам в закзах** - Вычисление количества ошибок в платежах или начислениях заказов через таблицу [[:a_orders|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|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-таблицу все записи заказов с ошибкой.\\
Скрипт для получения данных смотри в предыдущем пункте.\\
===== Дополнительная информация =====
[[:analiticdb|Назад]]\\