мета-данные страницы
  •  

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
a_payments [01.06.2020 05:35]
Анисютин
a_payments [08.06.2020 17:58]
Строка 1: Строка 1:
-====== A_Payments ====== 
- 
-Проект **"​AnaliticDB"​**\\ 
- 
-**Платежи** - Платежи - первичные документы 
- 
-===== Назначение ===== 
- 
-Нерепликационная таблица **A_Payments** из БД **Срезы** содержит изменеия сумм заказа и величину задолженности. 
- 
-===== Поля таблицы ===== 
- 
-<sxh sql> 
-select 
-  ap.id      , -- ВнНомер ​       ​ 
-  ap.date_imp,​ -- Дата импорта записи 
-  ap.doc_id ​ , -- Документ платежный (docs.doc_id) 
-  ap.doc_date,​ -- Дата платежа 
-  ap.doc_num , -- № платежа 
-  ap.debet ​  , -- Сумма платежа ​ (Приход) 
-  ap.kredit ​ , -- Сумма возврата (Расход) 
-  ap.sclad_id,​ -- Приемный пункт (Склад приемки) берется из dor.sclad_kredit_id ​   -- docs_bank, docs_card, docs_bonus 
-  ap.kassa_id,​ -- Касса, -- docs_card, docs_kassa, docs_bonus 
-  ap.dor_id ​ , -- Заказ (docs_order.id) 
-  ap.type_id , -- Тип платежа ​ 
-                 -- 1-прочее 
-                 -- 2-платеж по заказу, ​ 
-                 -- 3-начисление бонуса, ​ 
-                 -- 4-поступление на депозит, ​ 
-                 -- 5-инкассация 
-  ap.case_id , -- Форма оплаты 
- -- 1-docs_bonus, ​ 
- -- 2-docs_deposit, ​ 
- -- 3-docs_bank, ​ 
- -- 4-docs_card,​ 
- -- 5-docs_kassa 
-  ap.doc_case_id -- В зависимости от формы оплаты id из таблицы docs_kassa, docs_card, docs_deposit,​ docs_bonus, docs_bank ​   ​ 
-from  a_Payments ap -- Платежи 
-</​sxh>​ 
- 
-===== Формирование таблицы ===== 
- 
-Последовательно добавляются в таблицу a_Payments платежи из таблиц:​ docs_bonus, docs_deposit,​ docs_bank, docs_card, docs_kassa 
- 
-==== docs_bonus ==== 
- 
-Платежи разделяются по типам платежа ​ type_id: 
-  - 2-платеж по заказу, ​ 
-  - 3-начисление бонуса, ​ 
-  - 1-прочее 
- 
-<sxh sql> 
-select ​ 
-  d.doc_id as doc_id, ​ 
-  d.doc_date as doc_date, ​ 
-  d.doc_num as doc_num, ​ 
-  coalesce(dop.doc_type,​d.doc_type) as doc_type_id, ​ 
-  coalesce(d.debet,​0) as debet, ​ 
-  coalesce(d.kredit,​0) as kredit, ​ 
-  d.firm_id as firm_id, ​ 
-  d.contragent_id as contr_id, ​ 
-  dor.sclad_kredit_id as sclad_id, ​ 
-  null as kassa_id, ​ 
-  dop.doc_order_id as dor_id, ​ 
-  case  ​ 
-    when (z.bonus_id is not null) then 2  
-    when (z.bonus_id is null) and (z.parent_bonus_id is null) then 3  ​ 
-    else 1  
-  end as type_id, ​ 
-  1 as case_id, ​ 
-  z.id as doc_case_id ​ 
-from docs d  
-  left join docs_bonus z on z.doc_id=d.doc_id ​ 
-  left join doc_order_pays dop on dop.doc_id=d.doc_id ​ 
-  left join docs_order dor on dor.id=dop.doc_order_id ​ 
-where  
-  (d.doc_date>​=:​p1) and (d.doc_date<​=:​p2) and  
-  (z.id is not null)  
-  and (((z.bonus_id is not null) and (dop.id is not null) and (dop.doc_bonus_id is not null) and (dor.id is not null)) 
-       or ((z.bonus_id is null) and (z.parent_bonus_id is null))) ​ 
-</​sxh>​ 
- 
-Платежи бонусами по заказу берутся из дочерних документов (z.bonus_id is not null) при этом исключаются родительские записи.\\ 
-Начисление бонусов берется из родительской записи и соответственно дата начисления совпадает с датой родителького документа.\\ ​ 
-<alert danger> 
-Реализация учета начисления бонусов сделана крайне неудобно для анализа.\\ 
-Фактически при начислении бонусов либо создаются дочерние записи,​ либо нет. 
-Причем в одной базе возможны оба варианта. ​ 
-Поэтому нужно постоянно проверять наличие дочерних записей. 
-Иначе при суммирований по DOCS будут удваиваться суммы начислений при суммировании всех записей,​ если создаются дочерние записи,​ или 
-теряться суммы начислений при симмировании только дочерних,​ если дочерние записи отсутствуют. 
-Если суммировать начисления бонусов по родительским записям,​ то при наличии дочерних записей возникает проблема импорта из времени начисления. 
-Пусть начисления выполнялись 02.02.2019 100р и 02.03.2019 200р. 
-При импорте данных за фераль будет получена сумма 100р, а в марте начисление 200р будет потеряно,​ так как документа в марте о начислении не будет.\\ 
-</​alert>​ 
- 
-<alert danger> 
-У Контраста нет начислений с несколькими дочерними записями,​ так что сумму будут получены правильные 
-</​alert>​ 
- 
-<alert danger> 
-Доработать вычисление бонусов !!!!!!!!!!!!!!!!!!!!!!!!! 
-  U_CORR_BAD_SUM_BONUS 
-  CALC_CLIENT_BONUS_REST 
-</​alert>​ 
- 
- 
-==== docs_deposit ==== 
- 
-В таблице docs_deposit отмечаются только оплаты заказов с депозита (type_id=2).\\ 
-Поступление средств на депозит выполняется через таблицы docs_bank, docs_card, docs_kassa.\\ 
- 
-<sxh sql> 
-select ​ 
-  d.doc_id as doc_id, ​ 
-  d.doc_date as doc_date, ​ 
-  d.doc_num as doc_num, ​ 
-  coalesce(dop.doc_type,​d.doc_type) as doc_type_id, ​ 
-  coalesce(d.debet,​0) as debet, ​ 
-  coalesce(d.kredit,​0) as kredit, ​ 
-  d.firm_id as firm_id, ​ 
-  d.contragent_id as contr_id, ​ 
-  dor.sclad_kredit_id as sclad_id, ​ 
-  null as kassa_id, ​ 
-  dop.doc_order_id as dor_id, ​ 
-  2 as type_id, ​   
-  2 as case_id, ​ 
-  z.id as doc_case_id ​ 
-from docs d  
-  left join docs_deposit z on z.doc_id=d.doc_id ​ 
-  left join doc_order_pays dop on dop.doc_id=d.doc_id ​ 
-  left join docs_order dor on dor.id=dop.doc_order_id ​ 
-where  
-  (d.doc_date>​=:​p1) and (d.doc_date<​=:​p2) and  
-  (z.id is not null)  
-  and (dop.id is not null) and (dop.doc_deposit_id is not null) and (dor.id is not null)  
-</​sxh>​ 
- 
-==== docs_bank ==== 
- 
-Платежи разделяются по типам платежа ​ type_id: 
-  - 2-платеж по заказу, ​ 
-  - 4-поступление на депозит, ​ 
-  - 1-прочее 
- 
-<sxh sql> 
-select ​ 
-  d.doc_id as doc_id, ​ 
-  d.doc_date as doc_date, ​ 
-  d.doc_num as doc_num, ​ 
-  coalesce(dop.doc_type,​d.doc_type) as doc_type_id, ​ 
-  coalesce(d.debet,​0) as debet, ​ 
-  coalesce(d.kredit,​0) as kredit, ​ 
-  d.firm_id as firm_id, ​ 
-  d.contragent_id as contr_id, ​ 
-  dor.sclad_kredit_id as sclad_id, ​ 
-  null as kassa_id, ​ 
-  dop.doc_order_id as dor_id, ​ 
-  case  ​ 
-    when (dop.id is not null) then 2  
-    when (dop.id is null) and (z.is_deposit=1) then 4  
-    else 1  
-  end as type_id, ​ 
-  3 as case_id, ​ 
-  z.id as doc_case_id ​ 
-from docs d  
-  left join docs_bank z on z.doc_id=d.doc_id ​ 
-  left join doc_order_pays dop on dop.doc_id=d.doc_id ​ 
-  left join docs_order dor on dor.id=dop.doc_order_id ​ 
-where  
-  (d.doc_date>​=:​p1) and (d.doc_date<​=:​p2) and  
-  (z.id is not null)  
-  and not ((dop.id is not null) and (dop.doc_bank_id is null)) 
-</​sxh>​ 
- 
-В результате аварий могут появится "​порченые"​ записи типа:\\ 
-из таблицы docs есть ссылка на таблицу doc_order_pays (dop.id is not null), но нет ссылки из нее на таблицу docs (dop.doc_bank_id is null) \\ 
-Условие для исключения "​порченых"​ записей:​\\ 
-  not ((dop.id is not null) and (dop.doc_bank_id is null))\\ 
- 
-==== docs_card ==== 
- 
-Платежи разделяются по типам платежа ​ type_id: 
-  - 2-платеж по заказу, ​ 
-  - 4-поступление на депозит, ​ 
-  - 1-прочее 
- 
-<sxh sql> 
-select ​ 
-  d.doc_id as doc_id, ​ 
-  d.doc_date as doc_date, ​ 
-  d.doc_num as doc_num, ​ 
-  coalesce(dop.doc_type,​d.doc_type) as doc_type_id, ​ 
-  coalesce(d.debet,​0) as debet, ​ 
-  coalesce(d.kredit,​0) as kredit, ​ 
-  d.firm_id as firm_id, ​ 
-  d.contragent_id as contr_id, ​ 
-  dor.sclad_kredit_id as sclad_id, ​ 
-  null as kassa_id, ​ 
-  dop.doc_order_id as dor_id, ​ 
-  case  ​ 
-    when (dop.id is not null) then 2  
-    when (dop.id is null) and (z.is_deposit=1) then 4  
-    else 1  
-  end as type_id, ​ 
-  4 as case_id, ​ 
-  z.id as doc_case_id ​ 
-from docs d  
-  left join docs_card z on z.doc_id=d.doc_id ​ 
-  left join doc_order_pays dop on dop.doc_id=d.doc_id ​ 
-  left join docs_order dor on dor.id=dop.doc_order_id ​ 
-where  
-  (d.doc_date>​=:​p1) and (d.doc_date<​=:​p2) and  
-  (z.id is not null)  
-  and not ((dop.id is not null) and (dop.doc_card_id is null)) 
-</​sxh>​ 
- 
-Условие для исключения "​порченых"​ записей:​\\ 
-  not ((dop.id is not null) and (dop.doc_card_id is null)) 
- 
-==== docs_kassa ==== 
- 
-Платежи разделяются по типам платежа ​ type_id: 
-  - 2-платеж по заказу, ​ 
-  - 4-поступление на депозит, ​ 
-  - 5-инкассация 
-  - 1-прочее 
- 
-<sxh sql> 
-select ​ 
-  d.doc_id as doc_id, ​ 
-  d.doc_date as doc_date, ​ 
-  d.doc_num as doc_num, ​ 
-  coalesce(dop.doc_type,​d.doc_type) as doc_type_id, ​ 
-  coalesce(d.debet,​0) as debet, ​ 
-  coalesce(d.kredit,​0) as kredit, ​ 
-  d.firm_id as firm_id, ​ 
-  d.contragent_id as contr_id, ​ 
-  dor.sclad_kredit_id as sclad_id, ​ 
-  z.kassa_id as kassa_id, ​ 
-  dop.doc_order_id as dor_id, ​ 
-  case  
-    when (dop.id is not null) and (dop.doc_kassa_id is not null) then 2 
-    when (dop.id is null) and (z.is_deposit=1) then 3 
-    when (dop.id is null) and (d.doc_type=30) then 4  
-  else 1 
-  end as type_id, 
-  5 as case_id, 
-  z.id as doc_case_id,​ 
-  dop.id, 
-  dop.doc_bonus_id ​  , 
-  dop.doc_deposit_id , 
-  dop.doc_bank_id ​   , 
-  dop.doc_card_id ​   , 
-  dop.doc_kassa_id ​  , 
-  z.is_deposit 
-from docs d  
-  left join docs_kassa z on z.doc_id=d.doc_id ​ 
-  left join doc_order_pays dop on dop.doc_id=d.doc_id ​ 
-  left join docs_order dor on dor.id=dop.doc_order_id ​ 
-where  
-  (d.doc_date>​=:​p1) and (d.doc_date<​=:​p2) and 
-  (z.id is not null)  
-  and not ((dop.id is not null) and (dop.doc_kassa_id is null)) ​ 
-</​sxh>​ 
- 
-Условие для исключения "​порченых"​ записей:​\\ 
-  not ((dop.id is not null) and (dop.doc_card_id is null)) 
- 
-<alert danger> 
-Сейчас инкассация это любое кассовое перемещение денежных средств.\\ 
-Это может порождать ошибки в случае кассовых перемещений не связанных с инкассацией.\\ 
-</​alert>​ 
- 
-===== Использование таблицы ===== 
- 
- 
-===== Дополнительная информация ===== 
- 
-  * [[:​an_TFormDebtTotal|Задолженность общая]]\\ 
-  * [[:​an_TFormDebtCP|Задолженность по приемному пункту]]\\ 
-  * [[:​an_TFormDebtClient|Задолженность по клиентам]]\\ 
- 
-  * [[Report_by_collection_points|Report by collection points]]\\ 
- 
-  * [[:​a_last_load|a_last_load]]\\ ​ 
-  * [[:​a_log|a_log]]\\ ​ 
- 
-  * [[:​a_Payments|a_Payments]]\\ ​ 
-  * [[:​A_Sales|A_Sales]]\\ ​ 
-  * [[:​a_orders|a_orders]]\\ ​ 
- 
-  * [[:​b_debt_total|b_debt_total]]\\ ​ 
-  * [[:​b_debt_cp|b_debt_cp]]\\ ​ 
-  * [[:​b_debt_client|b_debt_client]]\\ ​ 
-  * [[:​b_bal_kassa|b_bal_kassa]]\\ ​ 
- 
- 
-[[:​analiticdb|Назад]]\\ 
-