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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
a_payments [01.06.2020 09:01]
Анисютин
a_payments [08.06.2020 17:58] (текущий)
Строка 7: Строка 7:
 ===== Назначение ===== ===== Назначение =====
  
-Нерепликационная таблица **A_Payments** из БД **Срезы** содержит ​изменеия ​сумм ​заказа и величину задолженности.+Таблица **A_Payments** из БД **Срезы** содержит суммы, форму оплаты и тип платежей.
  
 ===== Поля таблицы ===== ===== Поля таблицы =====
Строка 13: Строка 13:
 <sxh sql> <sxh sql>
 select select
-  ap.id      , -- ВнНомер ​        +  ap.id         ​, -- ВнНомер ​        
-  ap.date_imp, -- Дата импорта записи +  ap.dttm       , -- Дата импорта записи 
-  ap.doc_id ​ , -- Документ платежный (docs.doc_id) +  ap.doc_id ​    ​, -- Документ платежный (docs.doc_id) 
-  ap.doc_date,​ -- Дата платежа +  ap.doc_date ​  ​, -- Дата платежа 
-  ap.doc_num , -- № платежа+  ap.doc_num ​   , -- № платежа
   ap.doc_type_id,​ -- Тип документа из doc_types (docs.doc_type)   ap.doc_type_id,​ -- Тип документа из doc_types (docs.doc_type)
-  ap.debet ​  ​, -- Сумма платежа ​ (Приход) +  ap.debet ​     , -- Сумма платежа ​ (Приход) 
-  ap.kredit ​ , -- Сумма возврата (Расход) +  ap.kredit ​    ​, -- Сумма возврата (Расход) 
-  ap.firm_id , -- Организация +  ap.firm_id ​   , -- Организация 
-  ap.contr_id,​ -- Контрагент +  ap.contr_id ​  ​, -- Контрагент 
-  ap.sclad_id,​ -- Приемный пункт (Склад приемки) берется из dor.sclad_kredit_id ​   -- docs_bank, docs_card, docs_bonus +  ap.sclad_id ​  ​, -- Приемный пункт (Склад приемки) берется из dor.sclad_kredit_id ​   -- docs_bank, docs_card, docs_bonus 
-  ap.kassa_id,​ -- Касса, -- docs_card, docs_kassa, docs_bonus +  ap.kassa_id ​  ​, -- Касса 
-  ap.dor_id ​ , -- Заказ (docs_order.id) +  ap.dor_id ​    ​, -- Заказ (docs_order.id) 
-  ap.type_id , -- Тип платежа  +  ap.type_id ​   , -- Тип платежа  
-                 ​-- 1-прочее +                    -- 1-прочее 
-                 ​-- 2-платеж по заказу,​  +                    -- 2-платеж по заказу,​  
-                 ​-- 3-начисление бонуса,​  +                    -- 3-начисление бонуса,​  
-                 ​-- 4-поступление на депозит,​  +                    -- 4-поступление на депозит,​  
-                 ​-- 5-инкассация +                    -- 5-инкассация 
-  ap.case_id , -- Форма оплаты +  ap.case_id ​   , -- Форма оплаты 
-  -- 1-docs_bonus,​  +                    -- 1-docs_bonus,​  
-  -- 2-docs_deposit,​  +                    -- 2-docs_deposit,​  
-  -- 3-docs_bank,​  +                    -- 3-docs_bank,​  
-  -- 4-docs_card,​ +                    -- 4-docs_card,​ 
-  -- 5-docs_kassa +                    -- 5-docs_kassa 
-  ap.doc_case_id -- В зависимости от формы оплаты id из таблицы docs_kassa, docs_card, docs_deposit,​ docs_bonus, docs_bank ​   ​+  ap.doc_case_id ​ -- В зависимости от формы оплаты id из таблицы docs_kassa, docs_card, docs_deposit,​ docs_bonus, docs_bank ​   ​
 from  a_Payments ap -- Платежи from  a_Payments ap -- Платежи
 </​sxh>​ </​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|Задолженность общая]]\\ +  * [[develop:AnaliticDB_imp_Payments|Импорт платежей]]\\
-  * [[:​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]]\\  +  * [[:contragents|contragents]]\\  
-  * [[:b_debt_cp|b_debt_cp]]\\  +  * [[:sclads|sclads]]\\  
-  * [[:b_debt_client|b_debt_client]]\\  +  * [[:kasses|kasses]]\\  
-  * [[:b_bal_kassa|b_bal_kassa]]\\ +  * [[:kassa_sclads|kassa_sclads]]\\ 
  
 +  * [[:​docs|docs]]\\ ​
 +  * [[:​docs_order|docs_order]]\\ ​
 +  * [[:​doc_order_pays|doc_order_pays]]\\ ​
 +  * [[:​docs_bonus|docs_bonus]]\\ ​
 +  * [[:​docs_deposit|docs_deposit]]\\ ​
 +  * [[:​docs_bank|docs_bank]]\\ ​
 +  * [[:​docs_kassa|docs_kassa]]\\ ​
 +  * [[:​docs_card|docs_card]]\\ ​
  
 [[:​analiticdb|Назад]]\\ [[:​analiticdb|Назад]]\\