понедельник, 29 января 2018 г.

Запрос для запросов

Формирует пакет SQL-запросов типа "SELECT" с фильтром по одному констрейнту (PK_PURPOSEFULGRANT) и с условием по другому констрейнту (PK_BUDGET):

Варианты попроще
(по одному констрейнту):

Для Oracle:
select 'select * from (' as STMT1 from dual union all
select
'select '''||c.table_name||'.'||cc.column_name||''' as TBLCOL, count(*) as CNT from '
||c.table_name
||' t where t.'||cc.column_name||' in (123456789) union all'
from user_constraints c
join user_cons_columns cc on cc.constraint_name = c.constraint_name
where c.r_constraint_name='PK_ESTIMATE'
union all select ') where CNT <> 0' from dual
;

Для Firebird:
/* в закомментированном блоке - отсылки к знакомым мне обозначениям из Oracle */
select 'select * from (' as STMT1 from rdb$database union all
select
/*
cc.rdb$index_name as CONSTRAINT_NAME
,trim(c.rdb$relation_name) as TABLE_NAME
,trim(cc.rdb$field_name) as COLUMN_NAME
,trim(c2c.rdb$field_name) as COLUMN_NAME2
,c.rdb$foreign_key as R_CONSTRAINT_NAME
,trim(cci.rdb$relation_name) as R_TABLE_NAME
,trim(ccs.rdb$field_name) as R_COLUMN_NAME
,trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name) as TBL_COL
*/
'select '''||trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name)||''' as TBL_COL, count(*) as CNT from '
||trim(c.rdb$relation_name)
||' t where t.'||trim(cc.rdb$field_name)||' in (123456789) union all' as SQLA
from rdb$indices c
join rdb$index_segments cc on cc.rdb$index_name = c.rdb$index_name
join rdb$index_segments ccs on ccs.rdb$index_name = c.rdb$foreign_key
join rdb$indices cci on cci.rdb$index_name = ccs.rdb$index_name
where
trim(c.rdb$foreign_key) = 'PK_ESTIMATE'
union all select ') where CNT<>0' from rdb$database
;


Вариант посложнее:
(по двум констрейнтам одновременно)

Для Oracle:
select 'select * from (' as STMT1 from dual union all
select
'select '''||c.table_name||'.'||cc.column_name||' ('||c2c.column_name||')'' as TBLCOL, count(*) as CNT from '
||c.table_name
||' t where t.'||cc.column_name||' is not null and exists (select null from PURPOSEFULGRANT p where p.ID=t.'||cc.column_name||' and p.BUDGET_ID<>t.'||c2c.column_name||') union all'
from user_constraints c
join user_cons_columns cc on cc.constraint_name = c.constraint_name
join user_constraints c2 on c2.table_name=c.table_name and c2.r_constraint_name='PK_BUDGET'
join user_cons_columns c2c on c2c.constraint_name = c2.constraint_name
where c.r_constraint_name='PK_PURPOSEFULGRANT'
union all select ') where CNT <> 0' from dual
;

Для Firebird:
/* в закомментированном блоке - отсылки к знакомым мне обозначениям из Oracle */
select 'select * from (' as STMT1 from rdb$database union all
select
/*
cc.rdb$index_name as CONSTRAINT_NAME
,trim(c.rdb$relation_name) as TABLE_NAME
,trim(cc.rdb$field_name) as COLUMN_NAME
,trim(c2c.rdb$field_name) as COLUMN_NAME2
,c.rdb$foreign_key as R_CONSTRAINT_NAME
,trim(cci.rdb$relation_name) as R_TABLE_NAME
,trim(ccs.rdb$field_name) as R_COLUMN_NAME
,trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name) as TBL_COL
*/
'select '''||trim(c.rdb$relation_name)||'.'||trim(cc.rdb$field_name)||' ('||trim(c2c.rdb$field_name)||')'' as TBL_COL, count(*) as CNT from '
||trim(c.rdb$relation_name)
||' t where t.'||trim(cc.rdb$field_name)||' is not null and exists (select null from PURPOSEFULGRANT p where p.ID=t.'||trim(cc.rdb$field_name)||' and p.BUDGET_ID<>t.'||trim(c2c.rdb$field_name)||') union all' as SQLA
from rdb$indices c
join rdb$index_segments cc on cc.rdb$index_name = c.rdb$index_name
join rdb$index_segments ccs on ccs.rdb$index_name = c.rdb$foreign_key
join rdb$indices cci on cci.rdb$index_name = ccs.rdb$index_name
join rdb$indices c2 on c2.rdb$relation_name = c.rdb$relation_name and c2.rdb$foreign_key = 'PK_BUDGET'
join rdb$index_segments c2c on c2c.rdb$index_name = c2.rdb$index_name
where
trim(c.rdb$foreign_key) = 'PK_PURPOSEFULGRANT'
union all select ') where CNT<>0' from rdb$database
;

пятница, 26 января 2018 г.

ГИС ГМП: Пример настройки для тестового стенда

Azk2Server.properties:
#---------------Сопровождение 2016-1, #8171-----------------------
#(Тестовый контур ГИС ГМП)
gisgmp.wsdlLocation=http://smev-mvf.test.gosuslugi.ru:7777/gateway/services/SID0003663?wsdl
gisgmp.wsdlLocation.endPoint=http://smev-mvf.test.gosuslugi.ru:7777/gateway/services/SID0003663
gisgmp.sign=true
gisgmp.recipientCode=RKZN35001
gisgmp.recipientName=Казначейство России
#----------------------------------------------------------

Для тестирования связки между АЦК-Финансы и ГИС ГМП для ЭП ОВ можно использовать любую валидную тестовую ЭП, для этого, необходимо импортировать ее в АЦК-Финансы и в ее карточке в поле «Статус субъекта» указать значение «Юр. лицо».
После этого, нужно указать ее в поле «Сертификат ОВ» в карточке организации финоргана.
Но ЭП СП должна быть настоящей.

Было актуально на 2016 год.
Больше не проверял.

вторник, 23 января 2018 г.

Для телеграм-бота

Журнал бота:
https://api.telegram.org/bot<TOKEN>/getUpdates;
Отправить сообщение от бота в чат/адресату:
https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=<MY_TEXT>

Директории ".xasystem" и "STORE_DATA_ON_CLIENT_IN_FILE" (не отвечено)

От чего зависит появление (или непоявление) папок ".xasystem" и "STORE_DATA_ON_CLIENT_IN_FILE" в сборке АЦК?
В поисках ответа пока что ...

Примечание 1:
Предварительная версия:
зависит от параметра "Способ обновления по умолчанию" (
пункт меню Сервис —> Системные параметры —> Обновление клиентской части —> вкладка "Настройки обновления"):
- "Отключено" - папки не появляются;
- "Через сервер приложения" - папки появляются.
(наверное, при других значениях, отличных от "Отключено" тоже будут появляться).
- появляются только тогда, когда БД запускается впервые после рестора.

Требует дополнительной проверки.

Примечание 2:
Время создания папок совпадает с сообщениями в логе СП:
23.01.18 05:01:14.671,ORB-1225499(800),WARN,DataStorage,Parameter azk.storage.conf not specified
23.01.18 05:01:14.672,ORB-1225499(800),WARN,DataStorage,com.bssys.server.system.storage.StoreDataOnCl
23.01.18 05:01:15.813,ORB-1225499(800),INFO,FileDataDevice,Booting completed for the XADisk instance.

вторник, 9 января 2018 г.

Архив