мета-данные страницы
Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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|Назад]]\\ | ||
- | |||