Last active
November 12, 2019 10:36
-
-
Save atronah/78622c0c8b4f305ba4b689de7053905d to your computer and use it in GitHub Desktop.
РЕГИЗ.Справочники: Шаблон создания DICINFO-копии справочника
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Скрипт создания DICINFO-копии, в которой будут значения из последней загруженной и обработанной версии справочника РЕГИЗ. | |
Данный справочник предполагается использовать в МИС (как справочник параметров ИБ, как классификатор НСИ, как справочник для выболра значений в атрибуте сущности и т.д.). | |
**Внимание:** В данном скрипте поиск справочника среди имеющихся в МИС осуществляется по `REFDIC.REFCODE = :OID` | |
(в новых версиях, вероятно, стоит использовать `REFDIC.OID = :OID`) | |
Загрузка подразумевается через `SyncManager.exe` в режиме `Справочнике FHIR (API)` | |
из Сервиса Терминологии РЕГИЗ: | |
- Web-интерфейс тестового стенда: `http://r78-rc.zdrav.netrika.ru/nsiui` | |
- RESTful Сервис тестового стенда: `http://r78-rc.zdrav.netrika.ru/nsi/fhir/term` | |
В скрипте необходимо заменить следующие `placeholder`-ы: | |
- <oid> - OID справочника | |
- <refbook_title> - Название справочника | |
*/ | |
set term ^ ; | |
execute block | |
as | |
declare cnt smallint; | |
declare is_simple_dicinfo_ref smallint; | |
declare refid type of column refdic.refid; | |
declare refcode type of column refdic.refcode; | |
declare refname type of column refdic.refname; | |
declare reftype type of column refdic.reftype; | |
declare extref type of column refdic.extref; | |
declare systemtype type of column refdic.systemtype; | |
declare sqlopen type of column refdic.sqlopen; | |
declare sqlinsert type of column refdic.sqlinsert; | |
declare sqldelete type of column refdic.sqldelete; | |
declare mis_table varchar(31); | |
declare mis_id_field varchar(31); | |
declare mis_table_cond varchar(255); | |
declare name_title type of column refdicdet.headername; | |
declare id_title type of column refdicdet.headername; | |
declare id_sqllookup type of column refdicdet.sqllookup; | |
declare extra_fields varchar(1024); | |
begin | |
refcode = '<oid>'; | |
refname = '<refbook_title>'; | |
refid = null; | |
reftype = 1; -- Тип справочника: 1 - плоский; 2 - мастер-детальный (мастер); 3 - мастер-детальный (детальный) - не используется; 4 - древовидный, зависимость по dicinfo.parentdicid | |
systemtype = 2; -- Тип справочника: 0 - DicInfo; 2 - SQL запросы - при редактировании проверяются запросы на корректность | |
refname = 'РЕГИЗ. ' || refname || ' (' || refcode || ' )'; | |
select | |
max(refid), count(refid) | |
from refdic | |
where refcode = :refcode | |
into refid, cnt; | |
if (cnt > 1) | |
then execute procedure raise_exception('Несколько справочников с кодом @1', 2, :refcode); | |
if (refid is null) | |
then refid = next value for refid_gen; | |
-- Для редактирования справочника через Классификаторы НСИ | |
extref = 1; -- 1 - внешний справочник (нужно для отображения в Классификаторы НСИ); | |
sqlopen = 'select dicid, dicname, rekvtext1 as ext_code, txtcode as ext_version from dicinfo where refid = ' || refid || ' order by 3'; | |
sqlinsert = null; | |
sqldelete = null; | |
-- Создание/обновление справочника | |
update or insert into refdic(refid, reftype, refcode, refname, extref, systemtype, sqlopen, sqlinsert, sqldelete) | |
values (:refid, :reftype, :refcode, :refname, :extref, :systemtype, :sqlopen, :sqlinsert, :sqldelete); | |
-- Создание/обновление полей справочника | |
merge into refdicdet as cur | |
using ( -- Поля справочника | |
select rd.refid | |
, fields.sortorder | |
, fields.c as columnname | |
, fields.n as headername | |
, fields.st as sourcetype | |
, fields.q as sqllookup | |
, fields.inv as invisible | |
, fields.tn as tablename | |
from refdic as rd | |
left join ( select 'dicid' as c, 'Идентификатор записи' as n | |
, null as st, null as q | |
, 1 as inv -- 1 - Не отображать | |
, 'dicinfo' tn | |
, 30 as sortorder | |
from rdb$database | |
union | |
select 'ext_code' as c, 'Внешний код' as n | |
, 0 as st -- Тип значения: 0 - Текст | |
, null as q | |
, 0 as inv, :mis_table tn | |
, 50 as sortorder | |
from rdb$database | |
union | |
select 'dicname' as c, :name_title as n | |
, 0 as st -- Тип значения: 0 - Текст | |
, null as q | |
, 0 as inv, :mis_table tn | |
, 60 as sortorder | |
from rdb$database | |
union | |
select 'ext_version' as c, 'Версия' as n | |
, 0 as st -- Тип значения: 0 - Текст | |
, null as q, 0 as inv | |
, :mis_table tn | |
, 90 as sortorder | |
from rdb$database | |
) as fields on 1 = 1 | |
where rd.refcode = :refcode | |
order by 1, 2 | |
) as upd | |
on cur.refid = upd.refid and cur.columnname = upd.columnname | |
when not matched then insert (refdicdetid, refid, columnname, headername, sourcetype, sqllookup, invisible, tablename, sortorder) | |
values (next value for refdicdet_gen, upd.refid, trim(upd.columnname), trim(upd.headername) | |
, upd.sourcetype, trim(upd.sqllookup), upd.invisible, trim(upd.tablename), upd.sortorder) | |
when matched then update | |
set headername = trim(upd.headername) | |
, sqllookup = trim(upd.sqllookup); | |
end^ | |
set term ; ^ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment