Відмінності між початковою версією та версією 1 з usefulQueries


Ігнорувати:
Дата/Час:
2 черв. 2018 р., 06:54:08 (6 років тому)
Автор:
sokol
Коментар:

--

Умовні позначення:

Без змін
Додано
Вилучено
Змінено
  • usefulQueries

    v1 v1  
     1= Полезные запросы =
     2{{{
     3#!access
     4#allow(TRAC_ADMIN)
     5* [#point1 Видалення товарів (без руху)]
     6* [#point2 Не вірні залишки по аналітичним карткам]
     7* [#point4 Скрипт очистки БД]
     8* [#point5 Скрипт очистки ЦБД]
     9* [#point6 Перевірка дублікатів записів у Ревізії]
     10
     11== [=#point1]Видалення товарів (без руху) ==
     12Товаром без движения будем вважати той, на який не заведено жодної аналітичної картки (приходу). Наступна послідовність запитів, дозволить позбутись таких товарів:
     13{{{
     14#!text/x-sql
     15delete from t_rests n where n.nomen_id not in (select distinct nomen_id from t_goods g )
     16delete from t_nomen_bars n where n.nomen_id not in (select distinct nomen_id from t_goods g )
     17delete from t_price_logs n where n.nomen_id not in (select distinct nomen_id from t_goods g )
     18delete from t_markup_records n where n.nomen_id not in (select distinct nomen_id from t_goods g )
     19delete from t_ao_records n where n.aor_nomen_id not in (select distinct nomen_id from t_goods g )
     20delete from t_rev_records n where n.nomen_id not in (select distinct nomen_id from t_goods g )
     21delete from t_nomens n where n.nomen_id not in (select distinct nomen_id from t_goods g )
     22delete from t_barcodes b where b.barcode_id not in (select distinct barcode_id from t_nomen_bars)
     23}}}
     24ну або скриптом:
     25{{{
     26#!text/x-sql
     27delete from t_rests n where n.nomen_id not in (select distinct nomen_id from t_goods g ) ;
     28commit work;
     29delete from t_nomen_bars n where n.nomen_id not in (select distinct nomen_id from t_goods g );
     30commit work;
     31delete from t_price_logs n where n.nomen_id not in (select distinct nomen_id from t_goods g );
     32commit work;
     33delete from t_markup_records n where n.nomen_id not in (select distinct nomen_id from t_goods g );
     34commit work;
     35delete from t_ao_records n where n.aor_nomen_id not in (select distinct nomen_id from t_goods g );
     36commit work;
     37delete from t_rev_records n where n.nomen_id not in (select distinct nomen_id from t_goods g );
     38commit work;
     39delete from t_nomens n where n.nomen_id not in (select distinct nomen_id from t_goods g );
     40commit work;
     41delete from t_barcodes b where b.barcode_id not in (select distinct barcode_id from t_nomen_bars);
     42commit work;
     43}}}
     44
     45== [=#point2]Не вірні залишки по аналітичним карткам ==
     46При нормальних залишках в БД різниця всіх приходів та розходів по кожній аналітичній картці в точності співпадає із залишком по кожній з аналитичних карток. Якщо останній стовпчик в виборці не рівний нулю, то має місце проблема з залишками по цій аналітичній картці.
     47{{{
     48#!text/x-sql
     49select aa.ogoods_id,
     50        sum(aa.orest) as orest,
     51        sum(aa.oprihod) as oprihod,
     52        sum(aa.orashod) as orashod,
     53        sum(aa.oprihod) - sum(aa.orashod) - sum(aa.orest) as orizn from
     54(
     55  select g.goods_id as ogoods_id,
     56         g.goods_rest as orest,
     57         0.0 as oprihod,
     58         0.0 as orashod
     59          from t_goods g
     60union all
     61  select    dg.goods_id as ogoods_id,
     62            0.0 as orest,
     63            0.0 as oprihod,
     64            dg.kilk as orashod
     65             from t_documents d left join t_doc_records dr on (d.document_id = dr.document_id and d.objects_id = 1)
     66                    left join t_doc_goods dg on (dr.docrec_id = dg.docrec_id)
     67union all
     68  select    dg.goods_id as ogoods_id,
     69            0.0 as orest,
     70            dg.kilk as oprihod,
     71            0.0 as orashod
     72             from t_documents d left join t_doc_records dr on (d.document_id = dr.document_id and d.clients_id = 1)
     73                    left join t_doc_goods dg on (dr.docrec_id = dg.docrec_id)
     74
     75) aa
     76group by aa.ogoods_id
     77}}}
     78
     79Аналогічне справедливо і для залишку по товару та записів в документах (без врахування аналітичних карток):
     80{{{
     81#!text/x-sql
     82select aa.onomen_id,
     83        sum(aa.orest) as orest,
     84        sum(aa.oprihod) as oprihod,
     85        sum(aa.orashod) as orashod,
     86        sum(aa.oprihod) - sum(aa.orashod) - sum(aa.orest) as orizn from
     87(
     88  select r.nomen_id as onomen_id,
     89         r.rest as orest,
     90         0.0 as oprihod,
     91         0.0 as orashod
     92          from t_rests r
     93union all
     94  select    dr.nomen_id as onomen_id,
     95            0.0 as orest,
     96            0.0 as oprihod,
     97            dr.kilk as orashod
     98             from t_documents d left join t_doc_records dr on (d.document_id = dr.document_id and d.objects_id = 1)
     99union all
     100  select    dr.nomen_id as onomen_id,
     101            0.0 as orest,
     102            dr.kilk as oprihod,
     103            0.0 as orashod
     104             from t_documents d left join t_doc_records dr on (d.document_id = dr.document_id and d.clients_id = 1)
     105
     106) aa
     107group by aa.onomen_id
     108}}}
     109
     110Іще один варіант, при якому сумарна кількість по t_goods не відповідає залишку в t_rests. Після виконання наступного запиту, різниця в останньому стовпчику має бути нульовою:
     111{{{
     112#!text/x-sql
     113select nomen_id, sum(orst_rest), sum(ogoods_rest), sum(orst_rest)-sum(ogoods_rest) from
     114(
     115select r.nomen_id, r.rest as orst_rest, 0 as ogoods_rest from t_rests r
     116
     117union all
     118
     119select g.nomen_id, 0 as orst_res, sum(g.goods_rest) as ogoods_rest from t_goods g
     120    group by g.nomen_id
     121)
     122group by nomen_id
     123}}}
     124
     125== [=#point4]Скрипт очистки БД ==
     126Загальний скрипт очищення бази (не зачіпає користувачів, клієнтів, дисконтників та товари) виглядає так:
     127{{{
     128#!text/x-sql
     129SET SQL DIALECT 3;
     130
     131delete from t_document_autoorder;
     132delete from t_ao_records;
     133alter sequence gen_ao_record_id restart with 0;
     134delete from t_autoorders;
     135alter sequence gen_autoorder_id restart with 0;
     136commit work;
     137
     138delete from t_rev_records;
     139alter sequence gen_rev_records_id restart with 0;
     140delete from t_revisions;
     141alter sequence gen_revision_id restart with 0;
     142commit work;
     143
     144alter trigger docgoods_ad0 inactive;
     145delete from t_doc_goods;
     146alter trigger docgoods_ad0 active;
     147alter sequence gen_docgoods_id restart with 0;
     148commit work;
     149
     150alter trigger docrec_bd0 inactive;
     151alter trigger docrec_ad4 inactive;
     152alter trigger t_record_exts_ad0 inactive;
     153delete from t_record_exts;
     154alter trigger t_record_exts_ad0 active;
     155delete from t_doc_records;
     156alter trigger docrec_ad4 active;
     157alter trigger docrec_bd0 active;
     158alter sequence gen_docrec_id restart with 0;
     159commit work;
     160
     161
     162alter trigger GOODS_AD0 inactive;
     163alter trigger T_GOODS_AD0 inactive;
     164delete from t_goods;
     165alter sequence gen_goods_id restart with 0;
     166alter trigger GOODS_AD0 active;
     167alter trigger T_GOODS_AD0 active;
     168commit work;
     169update t_rests set rest = 0.0, rest_sum = 0.0;
     170commit work;
     171
     172delete from t_tax_correctings;
     173alter sequence gen_t_tax_correctings_id restart with 0;
     174delete from t_taxes;
     175alter sequence reestr_gen_id restart with 0;
     176commit work;
     177
     178alter trigger t_pays_ad1 inactive;
     179alter trigger t_pays_ad0 inactive;
     180delete from t_pays;
     181alter trigger t_pays_ad1 active;
     182alter trigger t_pays_ad0 active;
     183alter sequence gen_t_pays_id restart with 0;
     184commit work;
     185
     186update t_documents set prew_document_id = null where prew_document_id is not null;
     187alter trigger documents_bd0 inactive;
     188alter trigger documents_bd2 inactive;
     189alter trigger documents_bd3 inactive;
     190alter trigger documents_ad4 inactive;
     191delete from t_documents;
     192alter trigger documents_bd0 active;
     193alter trigger documents_bd2 active;
     194alter trigger documents_bd3 active;
     195alter trigger documents_ad4 active;
     196alter sequence gen_documents_id restart with 0;
     197commit work;
     198
     199delete from t_price_logs;
     200delete from t_del_docrecs;
     201delete from t_del_documents;
     202delete from docrec_del;
     203delete from docrec_log;
     204delete from docrec_tmp;
     205delete from doc_del;
     206delete from t_doc_records_log;
     207alter sequence gen_t_doc_records_log_id restart with 0;
     208commit work;
     209
     210delete from t_markup_records;
     211delete from t_markups;
     212commit work;
     213
     214delete from t_delete_logs;
     215commit work;
     216
     217delete from t_io_logs;
     218delete from t_z_reports;
     219delete from t_nomens_log;
     220commit work;
     221
     222delete from t_abc_lists;
     223delete from t_logs;
     224delete from t_nomen_bars_log;
     225commit work;
     226
     227update t_objects set uuid = gen_uuid();
     228commit work;
     229}}}
     230Очистити товари можна, виконавши наступний блок:
     231{{{
     232#!text/x-sql
     233execute block
     234as
     235declare variable TNOMEN_ID integer;
     236declare variable TCNT integer;
     237begin
     238    for select n.nomen_id from t_nomens n
     239              -- тут, за необхідності, може бути довыльна умова
     240            into tnomen_id
     241    do begin
     242      select count(ocount) from PS_NOMEN_DEL(:tnomen_id) into :tcnt;
     243
     244      delete from t_nomens_log where nomen_id = :tnomen_id;
     245      delete from t_nomen_bars_log where nomen_id = :tnomen_id;
     246    end
     247end
     248}}}
     249якщо в цей блок вставити певну умову (наприклад шаблон імен, чи приналежності до акцизу) то можна видаляти товар вибірково.
     250
     251== [=#point5]Скрипт очистки ЦБД ==
     252Повне очищення центральної БД:
     253{{{
     254#!text/x-sql
     255SET SQL DIALECT 3;
     256
     257SET NAMES WIN1251;
     258
     259delete from t_abc_lists;
     260commit work;
     261
     262delete from t_ao_records;
     263commit work;
     264alter sequence gen_t_ao_records_id restart with 0;
     265commit work;
     266delete from t_autoorders;
     267commit work;
     268alter sequence gen_t_autoorders_id restart with 0;
     269commit work;
     270
     271delete from t_goods;
     272commit work;
     273delete from t_rests;
     274commit work;
     275
     276delete from t_doc_record_bonuses;
     277delete from t_doc_records;
     278delete from t_pays;
     279delete from t_documents;
     280commit work;
     281
     282delete from t_kards_ralase;
     283delete from t_kards;
     284delete from t_kard_types where kard_type_id > 0;
     285commit work;
     286
     287delete from t_nomen_links;
     288commit work;
     289delete from t_nomen_bars;
     290commit work;
     291delete from t_nomen_bars_log;
     292commit work;
     293delete from t_recipe_records;
     294commit work;
     295delete from t_recipes;
     296commit work;
     297delete from t_nomens;
     298commit work;
     299delete from t_makers where maker_id > 0;
     300commit work;
     301delete from t_indicatives where indicative_id > 0;
     302commit work;
     303delete from t_price_logs;
     304commit work;
     305
     306delete from T_ACCOUNTS;
     307alter sequence gen_clientaccount_id restart with 0;
     308commit work;
     309delete from t_contacts;
     310alter sequence gen_t_contacts_id restart with 0;
     311commit work;
     312delete from t_client_links;
     313commit work;
     314delete from t_objects where objects_id > 0;
     315        --  T_CLIENTS_BD0 not active
     316delete from t_clients where clients_id > 100 and clients_id < 1000000;
     317        --  T_CLIENTS_BD0 active
     318commit work;
     319
     320-- T_USERS_BD0 off
     321delete from t_users where user_id > 2;
     322-- T_USERS_BD0 on
     323commit work;
     324
     325update t_objects set uuid = GEN_UUID() where objects_id = 1000000;
     326
     327delete from t_delete_logs;
     328commit work;
     329}}}
     330
     331== [=#point6]Перевірка дублікатів записів у Ревізії ==
     332
     333{{{
     334select rr.nomen_id, count(1) from t_revisions r join t_rev_records rr on r.revision_id = rr.revision_id
     335        where r.revision_date = current_date - 1
     336    group by rr.nomen_id
     337}}}
     338
     339}}}