Advertisement
Vasiliok

Untitled

Apr 26th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 30.35 KB | None | 0 0
  1. PROCEDURE update_bal(p_doc_guid IN VARCHAR2,
  2.                        x_dr_error OUT VARCHAR2,
  3.                        x_cr_error OUT VARCHAR2) AS
  4.     l_exists             NUMBER;
  5.     l_cur_allsys         DC_ALLSYSREGISTEROPER%ROWTYPE;
  6.     l_cur_rem            DC_ACR_REMAINS_ACC%ROWTYPE;
  7.     l_beg_amount         NUMBER;
  8.     l_cur_amount         NUMBER;
  9.     l_end_amount         NUMBER;
  10.     l_dr_beg_amount      NUMBER;
  11.     l_cr_beg_amount      NUMBER;
  12.     l_dr_cur_amount      NUMBER;
  13.     l_cr_cur_amount      NUMBER;
  14.     l_dr_end_amount      NUMBER;
  15.     l_cr_end_amount      NUMBER;
  16.     l_turn_net_dr        NUMBER;
  17.     l_turn_net_cr        NUMBER;
  18.     l_turn_end_dr        NUMBER;
  19.     l_turn_end_cr        NUMBER;
  20.     l_end_befo_Dr        NUMBER;
  21.     l_end_befo_Cr        NUMBER;
  22.     l_end_delta_Dr       NUMBER;
  23.     l_end_delta_Cr       NUMBER;
  24.     l_bef_ctrl_dr_amount NUMBER;
  25.     l_bef_ctrl_cr_amount NUMBER;
  26.     l_aft_ctrl_dr_amount NUMBER;
  27.     l_aft_ctrl_cr_amount NUMBER;
  28.   BEGIN
  29.     SELECT s.*
  30.       INTO l_cur_allsys
  31.       FROM DC_ALLSYSREGISTEROPER s, doc d --наличие в ОЖО записи по доку
  32.      WHERE s.docid = d.docid
  33.        AND d.globaldocid = p_doc_guid;
  34.  
  35.     IF NVL(l_cur_allsys.l_accounting_code, '@') = 'CLOSE' THEN
  36.       NULL; --Обработка закрытия года
  37.     ELSE
  38.  
  39.       --Дт BUH
  40.       SELECT COUNT(1)
  41.         INTO l_exists
  42.         FROM DC_ACR_REMAINS_ACC acc --запись в остатках в разрезе системного плана счетов
  43.        WHERE NVL(acc.org_code, '-') = NVL(l_cur_allsys.org_code, '-')
  44.          AND NVL(acc.type_kppv, '-') =
  45.              NVL(l_cur_allsys.l_dr_type_kppv, '-')
  46.          AND NVL(acc.type_acc, '-') = NVL(l_cur_allsys.l_dr_type_acc, '-')
  47.          AND NVL(acc.kppv, '-') = NVL(l_cur_allsys.l_dr_kppv, '-')
  48.          AND NVL(acc.kvfo, '-') = NVL(l_cur_allsys.l_dr_kvfo, '-')
  49.          AND NVL(acc.account, '-') = NVL(l_cur_allsys.l_dr_account, '-')
  50.          AND NVL(acc.kosgu, '-') = NVL(l_cur_allsys.l_dr_kosgu, '-')
  51.          --beg ACR-6390
  52.          --and acc.rec_type = 'BUH'
  53.          AND NVL(acc.rec_type, '-') = 'BUH'
  54.          --end ACR-6390
  55.          
  56.          AND acc.finyear = TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  57.        ----mkoz add ACR-4736
  58.          AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  59.              NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  60.       -----mkoz
  61.       ;
  62.       IF l_exists = 0 THEN
  63.         --   dbms_output.put_line('Создаем дебетовый BUH остаток для - ' ||
  64.         --                        p_doc_guid);
  65.         create_bal(p_doc_guid => p_doc_guid,
  66.                    p_type     => 'ДТ',
  67.                    p_detal    => 'BUH');
  68.       END IF;
  69.       --Дт DETAL
  70.       SELECT COUNT(1)
  71.         INTO l_exists
  72.         FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  73.        WHERE NVL(acc.org_code, '-') = NVL(l_cur_allsys.org_code, '-')
  74.          AND NVL(acc.type_kppv, '-') =
  75.              NVL(l_cur_allsys.l_dr_type_kppv, '-')
  76.          AND NVL(acc.type_acc, '-') = NVL(l_cur_allsys.l_dr_type_acc, '-')
  77.          AND NVL(acc.kppv, '-') = NVL(l_cur_allsys.l_dr_kppv, '-')
  78.          AND NVL(acc.kvfo, '-') = NVL(l_cur_allsys.l_dr_kvfo, '-')
  79.          AND NVL(acc.account, '-') = NVL(l_cur_allsys.l_dr_account, '-')
  80.          AND NVL(acc.kosgu, '-') = NVL(l_cur_allsys.l_dr_kosgu, '-')
  81.          AND NVL(acc.ap1, '-') = NVL(l_cur_allsys.l_dr_ap1, '-')
  82.          AND NVL(acc.ap2, '-') = NVL(l_cur_allsys.l_dr_ap2, '-')
  83.          AND NVL(acc.ap3, '-') = NVL(l_cur_allsys.l_dr_ap3, '-')
  84.          AND NVL(acc.ap4, '-') = NVL(l_cur_allsys.l_dr_ap4, '-')
  85.          AND NVL(acc.ap5, '-') = NVL(l_cur_allsys.l_dr_ap5, '-')
  86.          AND NVL(acc.ap6, '-') = NVL(l_cur_allsys.l_dr_ap6, '-')
  87.          AND NVL(acc.ap7, '-') = NVL(l_cur_allsys.l_dr_ap7, '-')
  88.          AND NVL(acc.ap8, '-') = NVL(l_cur_allsys.l_dr_ap8, '-')
  89.          AND NVL(acc.ap9, '-') = NVL(l_cur_allsys.l_dr_ap9, '-')
  90.          AND NVL(acc.ap10, '-') = NVL(l_cur_allsys.l_dr_ap10, '-')
  91.          AND NVL(acc.sys_attribute2, '-') =
  92.              NVL(l_cur_allsys.l_dr_acc_jo, '-')
  93.          AND NVL(acc.sub_acc, '-') = NVL(l_cur_allsys.l_dr_sub_acc, '-')
  94.          AND NVL(acc.rec_type, '-') = 'DETAL'
  95.          AND acc.finyear = TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  96.        ----mkoz add ACR-4736
  97.          AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  98.              NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  99.       -----mkoz
  100.       ;
  101.       IF l_exists = 0 THEN
  102.         --   dbms_output.put_line('Создаем ДТ DETAL остаток для - ' || p_doc_guid);
  103.         create_bal(p_doc_guid => p_doc_guid,
  104.                    p_type     => 'ДТ',
  105.                    p_detal    => 'DETAL');
  106.       END IF;
  107.       --Кт BUH
  108.       SELECT COUNT(1)
  109.         INTO l_exists
  110.         FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  111.        WHERE NVL(acc.org_code, '-') = NVL(l_cur_allsys.org_code, '-')
  112.          AND NVL(acc.type_kppv, '-') =
  113.              NVL(l_cur_allsys.l_Cr_type_kppv, '-')
  114.          AND NVL(acc.type_acc, '-') = NVL(l_cur_allsys.l_cr_type_acc, '-')
  115.          AND NVL(acc.kppv, '-') = NVL(l_cur_allsys.l_cr_kppv, '-')
  116.          AND NVL(acc.kvfo, '-') = NVL(l_cur_allsys.l_cr_kvfo, '-')
  117.          AND NVL(acc.account, '-') = NVL(l_cur_allsys.l_cr_account, '-')
  118.          AND NVL(acc.kosgu, '-') = NVL(l_cur_allsys.l_cr_kosgu, '-')
  119.          AND NVL(acc.rec_type, '-') = 'BUH'
  120.          AND acc.finyear = TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  121.      ----mkoz add ACR-4736
  122.          AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  123.              NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  124.       -----mkoz
  125.       ;
  126.       IF l_exists = 0 THEN
  127.         --   dbms_output.put_line('Создаем КТ BUH остаток для - ' || p_doc_guid);
  128.         create_bal(p_doc_guid => p_doc_guid,
  129.                    p_type     => 'КТ',
  130.                    p_detal    => 'BUH');
  131.       END IF;
  132.       --Кт DETAL
  133.       SELECT COUNT(1)
  134.         INTO l_exists
  135.         FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  136.        WHERE NVL(acc.org_code, '-') = NVL(l_cur_allsys.org_code, '-')
  137.          AND NVL(acc.type_kppv, '-') =
  138.              NVL(l_cur_allsys.l_cr_type_kppv, '-')
  139.          AND NVL(acc.type_acc, '-') = NVL(l_cur_allsys.l_cr_type_acc, '-')
  140.          AND NVL(acc.kppv, '-') = NVL(l_cur_allsys.l_cr_kppv, '-')
  141.          AND NVL(acc.kvfo, '-') = NVL(l_cur_allsys.l_cr_kvfo, '-')
  142.          AND NVL(acc.account, '-') = NVL(l_cur_allsys.l_cr_account, '-')
  143.          AND NVL(acc.kosgu, '-') = NVL(l_cur_allsys.l_cr_kosgu, '-')
  144.          AND NVL(acc.ap1, '-') = NVL(l_cur_allsys.l_cr_ap1, '-')
  145.          AND NVL(acc.ap2, '-') = NVL(l_cur_allsys.l_cr_ap2, '-')
  146.          AND NVL(acc.ap3, '-') = NVL(l_cur_allsys.l_cr_ap3, '-')
  147.          AND NVL(acc.ap4, '-') = NVL(l_cur_allsys.l_cr_ap4, '-')
  148.          AND NVL(acc.ap5, '-') = NVL(l_cur_allsys.l_cr_ap5, '-')
  149.          AND NVL(acc.ap6, '-') = NVL(l_cur_allsys.l_cr_ap6, '-')
  150.          AND NVL(acc.ap7, '-') = NVL(l_cur_allsys.l_cr_ap7, '-')
  151.          AND NVL(acc.ap8, '-') = NVL(l_cur_allsys.l_cr_ap8, '-')
  152.          AND NVL(acc.ap9, '-') = NVL(l_cur_allsys.l_cr_ap9, '-')
  153.          AND NVL(acc.ap10, '-') = NVL(l_cur_allsys.l_cr_ap10, '-')
  154.          AND NVL(acc.sys_attribute2, '-') =
  155.              NVL(l_cur_allsys.l_cr_acc_jo, '-')
  156.          AND NVL(acc.sub_acc, '-') = NVL(l_cur_allsys.l_cr_sub_acc, '-')
  157.          
  158.          --beg ACR-6390
  159.          --and acc.rec_type = 'DETAL'
  160.          AND NVL(acc.rec_type, '-') = 'DETAL'
  161.          --end ACR-6390
  162.          
  163.          AND acc.finyear = TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  164.       -----mkoz add ACR-4736
  165.          AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  166.              NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  167.       -----mkoz
  168.       ;
  169.  
  170.       IF l_exists = 0 THEN
  171.         --  dbms_output.put_line('Создаем КТ DETAL остаток для - ' || p_doc_guid);
  172.         create_bal(p_doc_guid => p_doc_guid,
  173.                    p_type     => 'КТ',
  174.                    p_detal    => 'DETAL');
  175.  
  176.       END IF;
  177.  
  178. -----beg ACR-6390
  179.      /* for curRem in (select acc.*, -1 as Factor
  180.                        from DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  181.                       where acc.org_code = l_cur_allsys.org_code
  182.                         and nvl(acc.type_kppv, '-') =
  183.                             nvl(l_cur_allsys.l_cr_type_kppv, '-')
  184.                         and nvl(acc.type_acc, '-') =
  185.                             nvl(l_cur_allsys.l_cr_type_acc, '-')
  186.                         and nvl(acc.kppv, '-') =
  187.                             nvl(l_cur_allsys.l_cr_kppv, '-')
  188.                         and nvl(acc.kvfo, '-') =
  189.                             nvl(l_cur_allsys.l_cr_kvfo, '-')
  190.                         and nvl(acc.account, '-') =
  191.                             nvl(l_cur_allsys.l_cr_account, '-')
  192.                         and nvl(acc.kosgu, '-') =
  193.                             nvl(l_cur_allsys.l_cr_kosgu, '-')
  194.                         and acc.finyear =
  195.                             to_char(l_cur_allsys.h_accounting_date, 'YYYY')
  196.                         and ((nvl(acc.ap1, '-') =
  197.                             nvl(l_cur_allsys.l_cr_ap1, '-') and
  198.                             nvl(acc.ap2, '-') =
  199.                             nvl(l_cur_allsys.l_cr_ap2, '-') and
  200.                             nvl(acc.ap3, '-') =
  201.                             nvl(l_cur_allsys.l_cr_ap3, '-') and
  202.                             nvl(acc.ap4, '-') =
  203.                             nvl(l_cur_allsys.l_cr_ap4, '-') and
  204.                             nvl(acc.ap5, '-') =
  205.                             nvl(l_cur_allsys.l_cr_ap5, '-') and
  206.                             nvl(acc.ap6, '-') =
  207.                             nvl(l_cur_allsys.l_cr_ap6, '-') and
  208.                             nvl(acc.ap7, '-') =
  209.                             nvl(l_cur_allsys.l_cr_ap7, '-') and
  210.                             nvl(acc.ap8, '-') =
  211.                             nvl(l_cur_allsys.l_cr_ap8, '-') and
  212.                             nvl(acc.ap9, '-') =
  213.                             nvl(l_cur_allsys.l_cr_ap9, '-') and
  214.                             nvl(acc.ap10, '-') =
  215.                             nvl(l_cur_allsys.l_cr_ap10, '-') and
  216.                             nvl(acc.sys_attribute2, '-') =
  217.                             nvl(l_cur_allsys.l_cr_acc_jo, '-') and
  218.                             nvl(acc.sub_acc, '-') =
  219.                             nvl(l_cur_allsys.l_cr_sub_acc, '-') and
  220.                             acc.rec_type = 'DETAL') or
  221.                             (acc.rec_type = 'BUH'))
  222.                      -----mkoz add ACR-4736
  223.                         and nvl(acc.chrtaccttp_cd, g_buh_type) =
  224.                             nvl(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  225.                      -----mkoz
  226.                      union all
  227.                      select acc.*, 1 as Factor
  228.                        from DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  229.                       where acc.org_code = l_cur_allsys.org_code
  230.                         and nvl(acc.type_kppv, '-') =
  231.                             nvl(l_cur_allsys.l_dr_type_kppv, '-')
  232.                         and nvl(acc.type_acc, '-') =
  233.                             nvl(l_cur_allsys.l_dr_type_acc, '-')
  234.                         and nvl(acc.kppv, '-') =
  235.                             nvl(l_cur_allsys.l_dr_kppv, '-')
  236.                         and nvl(acc.kvfo, '-') =
  237.                             nvl(l_cur_allsys.l_dr_kvfo, '-')
  238.                         and nvl(acc.account, '-') =
  239.                             nvl(l_cur_allsys.l_dr_account, '-')
  240.                         and nvl(acc.kosgu, '-') =
  241.                             nvl(l_cur_allsys.l_dr_kosgu, '-')
  242.                         and acc.finyear =
  243.                             to_char(l_cur_allsys.h_accounting_date, 'YYYY')
  244.                         and ((nvl(acc.ap1, '-') =
  245.                             nvl(l_cur_allsys.l_dr_ap1, '-') and
  246.                             nvl(acc.ap2, '-') =
  247.                             nvl(l_cur_allsys.l_dr_ap2, '-') and
  248.                             nvl(acc.ap3, '-') =
  249.                             nvl(l_cur_allsys.l_dr_ap3, '-') and
  250.                             nvl(acc.ap4, '-') =
  251.                             nvl(l_cur_allsys.l_dr_ap4, '-') and
  252.                             nvl(acc.ap5, '-') =
  253.                             nvl(l_cur_allsys.l_dr_ap5, '-') and
  254.                             nvl(acc.ap6, '-') =
  255.                             nvl(l_cur_allsys.l_dr_ap6, '-') and
  256.                             nvl(acc.ap7, '-') =
  257.                             nvl(l_cur_allsys.l_dr_ap7, '-') and
  258.                             nvl(acc.ap8, '-') =
  259.                             nvl(l_cur_allsys.l_dr_ap8, '-') and
  260.                             nvl(acc.ap9, '-') =
  261.                             nvl(l_cur_allsys.l_dr_ap9, '-') and
  262.                             nvl(acc.ap10, '-') =
  263.                             nvl(l_cur_allsys.l_dr_ap10, '-') and
  264.                             nvl(acc.sys_attribute2, '-') =
  265.                             nvl(l_cur_allsys.l_dr_acc_jo, '-') and
  266.                             nvl(acc.sub_acc, '-') =
  267.                             nvl(l_cur_allsys.l_dr_sub_acc, '-') and
  268.                             acc.rec_type = 'DETAL') or
  269.                             (acc.rec_type = 'BUH'))
  270.                      -----mkoz add ACR-4736
  271.                         and nvl(acc.chrtaccttp_cd, g_buh_type) =
  272.                             nvl(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  273.                      -----mkoz
  274.                      ) loop*/
  275.                      
  276.         FOR curRem IN (SELECT acc.*, -1 AS Factor
  277.                        FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  278.                       WHERE acc.org_code = l_cur_allsys.org_code
  279.                         AND NVL(acc.type_kppv, '-') =
  280.                             NVL(l_cur_allsys.l_cr_type_kppv, '-')
  281.                         AND NVL(acc.type_acc, '-') =
  282.                             NVL(l_cur_allsys.l_cr_type_acc, '-')
  283.                         AND NVL(acc.kppv, '-') =
  284.                             NVL(l_cur_allsys.l_cr_kppv, '-')
  285.                         AND NVL(acc.kvfo, '-') =
  286.                             NVL(l_cur_allsys.l_cr_kvfo, '-')
  287.                         AND NVL(acc.account, '-') =
  288.                             NVL(l_cur_allsys.l_cr_account, '-')
  289.                         AND NVL(acc.kosgu, '-') =
  290.                             NVL(l_cur_allsys.l_cr_kosgu, '-')
  291.                         AND acc.finyear =
  292.                             TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  293.                         AND ((NVL(acc.ap1, '-') =
  294.                             NVL(l_cur_allsys.l_cr_ap1, '-') AND
  295.                             NVL(acc.ap2, '-') =
  296.                             NVL(l_cur_allsys.l_cr_ap2, '-') AND
  297.                             NVL(acc.ap3, '-') =
  298.                             NVL(l_cur_allsys.l_cr_ap3, '-') AND
  299.                             NVL(acc.ap4, '-') =
  300.                             NVL(l_cur_allsys.l_cr_ap4, '-') AND
  301.                             NVL(acc.ap5, '-') =
  302.                             NVL(l_cur_allsys.l_cr_ap5, '-') AND
  303.                             NVL(acc.ap6, '-') =
  304.                             NVL(l_cur_allsys.l_cr_ap6, '-') AND
  305.                             NVL(acc.ap7, '-') =
  306.                             NVL(l_cur_allsys.l_cr_ap7, '-') AND
  307.                             NVL(acc.ap8, '-') =
  308.                             NVL(l_cur_allsys.l_cr_ap8, '-') AND
  309.                             NVL(acc.ap9, '-') =
  310.                             NVL(l_cur_allsys.l_cr_ap9, '-') AND
  311.                             NVL(acc.ap10, '-') =
  312.                             NVL(l_cur_allsys.l_cr_ap10, '-') AND
  313.                             NVL(acc.sys_attribute2, '-') =
  314.                             NVL(l_cur_allsys.l_cr_acc_jo, '-') AND
  315.                             NVL(acc.sub_acc, '-') =
  316.                             NVL(l_cur_allsys.l_cr_sub_acc, '-') AND
  317.                             NVL(acc.rec_type, '-') = 'DETAL') )
  318.                      -----mkoz add ACR-4736
  319.                         AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  320.                             NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  321.                      -----mkoz
  322.                      
  323.                      UNION ALL
  324.                      SELECT acc.*, -1 AS Factor
  325.                        FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  326.                       WHERE acc.org_code = l_cur_allsys.org_code
  327.                         AND NVL(acc.type_kppv, '-') =
  328.                             NVL(l_cur_allsys.l_cr_type_kppv, '-')
  329.                         AND NVL(acc.type_acc, '-') =
  330.                             NVL(l_cur_allsys.l_cr_type_acc, '-')
  331.                         AND NVL(acc.kppv, '-') =
  332.                             NVL(l_cur_allsys.l_cr_kppv, '-')
  333.                         AND NVL(acc.kvfo, '-') =
  334.                             NVL(l_cur_allsys.l_cr_kvfo, '-')
  335.                         AND NVL(acc.account, '-') =
  336.                             NVL(l_cur_allsys.l_cr_account, '-')
  337.                         AND NVL(acc.kosgu, '-') =
  338.                             NVL(l_cur_allsys.l_cr_kosgu, '-')
  339.                         AND acc.finyear =
  340.                             TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  341.                         AND NVL(acc.rec_type, '-') = 'BUH'
  342.                      -----mkoz add ACR-4736
  343.                         AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  344.                             NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  345.                      
  346.                      UNION ALL
  347.                      SELECT acc.*, 1 AS Factor
  348.                        FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  349.                       WHERE acc.org_code = l_cur_allsys.org_code
  350.                         AND NVL(acc.type_kppv, '-') =
  351.                             NVL(l_cur_allsys.l_dr_type_kppv, '-')
  352.                         AND NVL(acc.type_acc, '-') =
  353.                             NVL(l_cur_allsys.l_dr_type_acc, '-')
  354.                         AND NVL(acc.kppv, '-') =
  355.                             NVL(l_cur_allsys.l_dr_kppv, '-')
  356.                         AND NVL(acc.kvfo, '-') =
  357.                             NVL(l_cur_allsys.l_dr_kvfo, '-')
  358.                         AND NVL(acc.account, '-') =
  359.                             NVL(l_cur_allsys.l_dr_account, '-')
  360.                         AND NVL(acc.kosgu, '-') =
  361.                             NVL(l_cur_allsys.l_dr_kosgu, '-')
  362.                         AND acc.finyear =
  363.                             TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  364.                         AND ((NVL(acc.ap1, '-') =
  365.                             NVL(l_cur_allsys.l_dr_ap1, '-') AND
  366.                             NVL(acc.ap2, '-') =
  367.                             NVL(l_cur_allsys.l_dr_ap2, '-') AND
  368.                             NVL(acc.ap3, '-') =
  369.                             NVL(l_cur_allsys.l_dr_ap3, '-') AND
  370.                             NVL(acc.ap4, '-') =
  371.                             NVL(l_cur_allsys.l_dr_ap4, '-') AND
  372.                             NVL(acc.ap5, '-') =
  373.                             NVL(l_cur_allsys.l_dr_ap5, '-') AND
  374.                             NVL(acc.ap6, '-') =
  375.                             NVL(l_cur_allsys.l_dr_ap6, '-') AND
  376.                             NVL(acc.ap7, '-') =
  377.                             NVL(l_cur_allsys.l_dr_ap7, '-') AND
  378.                             NVL(acc.ap8, '-') =
  379.                             NVL(l_cur_allsys.l_dr_ap8, '-') AND
  380.                             NVL(acc.ap9, '-') =
  381.                             NVL(l_cur_allsys.l_dr_ap9, '-') AND
  382.                             NVL(acc.ap10, '-') =
  383.                             NVL(l_cur_allsys.l_dr_ap10, '-') AND
  384.                             NVL(acc.sys_attribute2, '-') =
  385.                             NVL(l_cur_allsys.l_dr_acc_jo, '-') AND
  386.                             NVL(acc.sub_acc, '-') =
  387.                             NVL(l_cur_allsys.l_dr_sub_acc, '-') AND
  388.                             NVL(acc.rec_type, '-') = 'DETAL'))
  389.                      -----mkoz add ACR-4736
  390.                         AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  391.                             NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  392.                      -----mkoz
  393.                      
  394.                      UNION ALL
  395.                      SELECT acc.*, 1 AS Factor
  396.                        FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  397.                       WHERE acc.org_code = l_cur_allsys.org_code
  398.                         AND NVL(acc.type_kppv, '-') =
  399.                             NVL(l_cur_allsys.l_dr_type_kppv, '-')
  400.                         AND NVL(acc.type_acc, '-') =
  401.                             NVL(l_cur_allsys.l_dr_type_acc, '-')
  402.                         AND NVL(acc.kppv, '-') =
  403.                             NVL(l_cur_allsys.l_dr_kppv, '-')
  404.                         AND NVL(acc.kvfo, '-') =
  405.                             NVL(l_cur_allsys.l_dr_kvfo, '-')
  406.                         AND NVL(acc.account, '-') =
  407.                             NVL(l_cur_allsys.l_dr_account, '-')
  408.                         AND NVL(acc.kosgu, '-') =
  409.                             NVL(l_cur_allsys.l_dr_kosgu, '-')
  410.                         AND acc.finyear =
  411.                             TO_CHAR(l_cur_allsys.h_accounting_date, 'YYYY')
  412.                         AND NVL(acc.rec_type, '-') = 'BUH'
  413.                      -----mkoz add ACR-4736
  414.                         AND NVL(acc.chrtaccttp_cd, g_buh_type) =
  415.                             NVL(l_cur_allsys.chrtaccttp_cd, g_buh_type)
  416.                      ) LOOP            
  417.      ------end ACR-6390                
  418.                      
  419.       --   dbms_output.put_line('Внутри курсора curRem ' || curRem.concat_acc);
  420.  
  421.         l_dr_beg_amount := 0;
  422.         l_cr_beg_amount := 0;
  423.         l_dr_cur_amount := 0;
  424.         l_cr_cur_amount := 0;
  425.         l_dr_end_amount := 0;
  426.         l_cr_end_amount := 0;
  427.         l_turn_net_dr   := 0;
  428.         l_turn_net_cr   := 0;
  429.         l_turn_end_dr   := 0;
  430.         l_turn_end_cr   := 0;
  431.         l_beg_amount    := 0;
  432.         l_cur_amount    := 0;
  433.  
  434.         --> для контроля фондов - записываем значения до пересчета из КОРР
  435.         l_bef_ctrl_dr_amount := 0;
  436.         l_bef_ctrl_cr_amount := 0;
  437.         IF curRem.Period_Code = 'КОРР' THEN
  438.           l_bef_ctrl_dr_amount := curRem.balance_dr;
  439.           l_bef_ctrl_cr_amount := curRem.balance_cr;
  440.         END IF;
  441.  
  442.        /* dbms_output.put_line('!l_bef_ctrl_dr_amount='|| l_bef_ctrl_dr_amount);
  443.         dbms_output.put_line('!l_bef_ctrl_cr_amount='|| l_bef_ctrl_cr_amount);*/
  444.  
  445.         --< для контроля фондов - записываем значения до пересчета из КОРР
  446.  
  447.         /*        dbms_output.put_line('!l_dr_beg_amount='|| l_dr_beg_amount);
  448.         dbms_output.put_line('!l_cr_beg_amount='|| l_cr_beg_amount);
  449.         dbms_output.put_line('!l_dr_cur_amount='|| l_dr_cur_amount);
  450.         dbms_output.put_line('!l_cr_cur_amount='|| l_cr_cur_amount);
  451.         dbms_output.put_line('!l_dr_end_amount='|| l_dr_end_amount);
  452.         dbms_output.put_line('!l_cr_end_amount='|| l_cr_end_amount);
  453.         dbms_output.put_line('!l_turn_net_dr='|| l_turn_net_dr);
  454.         dbms_output.put_line('!l_turn_net_cr='|| l_turn_net_cr);
  455.         dbms_output.put_line('!l_turn_end_dr='|| l_turn_end_dr);
  456.         dbms_output.put_line('!l_turn_end_cr='|| l_turn_end_cr);
  457.         dbms_output.put_line('!l_beg_amount='|| l_beg_amount);
  458.         dbms_output.put_line('!l_cur_amount='|| l_cur_amount);*/
  459.         SELECT acc.*
  460.           INTO l_cur_rem
  461.           FROM DC_ACR_REMAINS_ACC acc --остатки в разрезе системного плана счетов
  462.          WHERE acc.docid = curRem.Docid;
  463.  
  464.         -->>Расчитываем суммы и пересчитываем с их учетом балансы
  465.         -- с учетом типа счета(Активный, Пассивный, Активно-пассивный)
  466.         --Просто суммы (Дт - КТ)
  467.         IF (l_cur_allsys.h_accounting_date < curRem.Start_Date OR
  468.            curRem.Period_Code = 'КОРР' OR
  469.            NVL(l_cur_allsys.rec_type, '0') != '0') THEN
  470.           l_beg_amount := l_cur_rem.Balance_Dr - l_cur_rem.Balance_Cr +
  471.                           (l_cur_allsys.l_accounting_amount * curRem.Factor);
  472.         ELSE
  473.           l_beg_amount := l_cur_rem.Balance_Dr - l_cur_rem.Balance_Cr;
  474.         END IF;
  475.         -->ACR-2561
  476.         IF ((l_cur_allsys.h_accounting_date <= curRem.End_Date OR
  477.            curRem.Period_Code = 'КОРР') AND
  478.            NVL(l_cur_allsys.rec_type, '0') = '0') THEN
  479.           IF curRem.Factor = 1 THEN
  480.             l_turn_end_dr := l_cur_rem.turn_end_dr +
  481.                              l_cur_allsys.l_accounting_amount;
  482.             l_turn_end_cr := l_cur_rem.turn_end_cr;
  483.           ELSE
  484.             l_turn_end_dr := l_cur_rem.turn_end_dr;
  485.             l_turn_end_cr := l_cur_rem.turn_end_cr +
  486.                              l_cur_allsys.l_accounting_amount;
  487.           END IF;
  488.         ELSE
  489.           l_turn_end_dr := l_cur_rem.turn_end_dr;
  490.           l_turn_end_cr := l_cur_rem.turn_end_cr;
  491.         END IF;
  492.         --<ACR-2561
  493.  
  494.         IF (l_cur_allsys.h_accounting_date BETWEEN curRem.Start_Date AND
  495.            curRem.End_Date AND curRem.Period_Code != 'КОРР' AND
  496.            NVL(l_cur_allsys.rec_type, '0') = '0') THEN
  497.           l_cur_amount := l_cur_rem.Period_Net_Dr - l_cur_rem.Period_Net_Cr +
  498.                           (l_cur_allsys.l_accounting_amount * curRem.Factor);
  499.           -->ACR-2561
  500.           IF curRem.Factor = 1 THEN
  501.             l_turn_net_dr := l_cur_rem.turn_net_dr +
  502.                              l_cur_allsys.l_accounting_amount;
  503.             l_turn_net_cr := l_cur_rem.turn_net_cr;
  504.           ELSE
  505.             l_turn_net_dr := l_cur_rem.turn_net_dr;
  506.             l_turn_net_cr := l_cur_rem.turn_net_cr +
  507.                              l_cur_allsys.l_accounting_amount;
  508.           END IF;
  509.           --<ACR-2561
  510.         ELSE
  511.           l_cur_amount := l_cur_rem.Period_Net_Dr - l_cur_rem.Period_Net_Cr;
  512.           -->ACR-2561
  513.           l_turn_net_dr := l_cur_rem.turn_net_dr;
  514.           l_turn_net_cr := l_cur_rem.turn_net_cr;
  515.           --<ACR-2561
  516.         END IF;
  517.  
  518.         l_end_amount := l_beg_amount + l_cur_amount;
  519.  
  520.         IF UPPER(curRem.Type_Acc) = 'АКТИВНЫЙ' THEN
  521.           l_dr_beg_amount := l_beg_amount;
  522.           l_cr_beg_amount := 0;
  523.           l_dr_cur_amount := l_cur_amount;
  524.           l_cr_cur_amount := 0;
  525.           l_dr_end_amount := l_end_amount;
  526.           l_cr_end_amount := 0;
  527.         END IF;
  528.         IF UPPER(curRem.Type_Acc) = 'ПАССИВНЫЙ' THEN
  529.           l_dr_beg_amount := 0;
  530.           l_cr_beg_amount := l_beg_amount * (-1);
  531.           l_dr_cur_amount := 0;
  532.           l_cr_cur_amount := l_cur_amount * (-1);
  533.           l_dr_end_amount := 0;
  534.           l_cr_end_amount := l_end_amount * (-1);
  535.         END IF;
  536.         IF UPPER(curRem.Type_Acc) = 'АКТИВНО-ПАССИВНЫЙ' THEN
  537.           IF l_beg_amount > 0 THEN
  538.             l_dr_beg_amount := l_beg_amount;
  539.             l_cr_beg_amount := 0;
  540.           ELSE
  541.             l_dr_beg_amount := 0;
  542.             l_cr_beg_amount := l_beg_amount * (-1);
  543.           END IF;
  544.  
  545.           IF l_cur_amount > 0 THEN
  546.             l_dr_cur_amount := l_cur_amount;
  547.             l_cr_cur_amount := 0;
  548.           ELSE
  549.             l_dr_cur_amount := 0;
  550.             l_cr_cur_amount := l_cur_amount * (-1);
  551.           END IF;
  552.  
  553.           IF l_end_amount > 0 THEN
  554.             l_dr_end_amount := l_end_amount;
  555.             l_cr_end_amount := 0;
  556.           ELSE
  557.             l_dr_end_amount := 0;
  558.             l_cr_end_amount := l_end_amount * (-1);
  559.           END IF;
  560.         END IF;
  561.         UPDATE DC_ACR_REMAINS_ACC acc
  562.            SET acc.balance_dr    = l_dr_beg_amount,
  563.                acc.balance_cr    = l_cr_beg_amount,
  564.                acc.period_net_dr = l_dr_cur_amount,
  565.                acc.period_net_cr = l_cr_cur_amount,
  566.                acc.period_end_dr = l_dr_end_amount,
  567.                acc.period_end_cr = l_cr_end_amount,
  568.                acc.turn_net_dr   = l_turn_net_dr,
  569.                acc.turn_net_cr   = l_turn_net_cr,
  570.                acc.turn_end_dr   = l_turn_end_dr,
  571.                acc.turn_end_cr   = l_turn_end_cr
  572.          WHERE acc.docid = curRem.Docid;
  573.  
  574.  
  575.         --> для контроля фондов - записываем значения до пересчета из КОРР add ACR-4736
  576.         l_aft_ctrl_dr_amount := 0;
  577.         l_aft_ctrl_cr_amount := 0;
  578.         IF curRem.Period_Code = 'КОРР' THEN
  579.           l_aft_ctrl_dr_amount := l_dr_beg_amount;
  580.  
  581.           l_aft_ctrl_cr_amount := -1 * l_dr_beg_amount;
  582.  
  583.         /*dbms_output.put_line('!l_aft_ctrl_dr_amount= '|| l_aft_ctrl_dr_amount);
  584.         dbms_output.put_line('!l_aft_ctrl_cr_amount= '|| l_aft_ctrl_cr_amount);
  585.         dbms_output.put_line('! curRem.Factor= '||  curRem.Factor);
  586.         dbms_output.put_line(' l_cur_allsys.control = '|| l_cur_allsys.control);*/
  587.  
  588.  
  589.           IF ((l_bef_ctrl_cr_amount - l_bef_ctrl_dr_amount) >
  590.              (l_aft_ctrl_cr_amount - l_aft_ctrl_dr_amount)) AND
  591.              ((l_aft_ctrl_cr_amount - l_aft_ctrl_dr_amount) < 0) AND
  592.              l_cur_allsys.control = '1' THEN
  593.             --вернуть ошибку
  594.          --   dbms_output.put_line('Возврат ошибки');
  595.  
  596.             IF curRem.Factor = -1 THEN
  597.               x_cr_error := 'На счете ' || l_cur_allsys.l_cr_concat_acc ||
  598.                             ' Остаток не может быть меньше нуля'; --КТ
  599.       --   dbms_output.put_line('x_cr_error = '||x_cr_error);
  600.             ELSE
  601.               x_dr_error := 'На счете ' || l_cur_allsys.l_dr_concat_acc ||
  602.                             ' Остаток не может быть меньше нуля'; --ДТ
  603.       --   dbms_output.put_line('x_dr_error = '||x_dr_error);
  604.             END IF;
  605.           END IF;
  606.  
  607.         END IF;
  608.         --< для контроля фондов - записываем значения до пересчета из КОРР
  609.       END LOOP;
  610.     END IF;
  611.   END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement