Полезные запросы sql

В разделе приведены примеры запросов к базе данных в наиболее часто встречающихся ситуациях. Все запросы приведены для СУБД PostgreSQL.

Восстановление пароля пользователя admin

Для новых баз, начиная с версии 4.0:

update sec_user
set password = 'cc2229d1b8a052423d9e1c9ef0113b850086586a'
where login = 'admin';

Для старых баз:

update sec_user
set password = '21232f297a57a5a743894a0e4a801fc3'
where login = 'admin';

Рассылка большого количества уведомлений на почту

Если по каким-либо причинам сначала рассылка не работала, а сообщения накапливались, то при подключении почты будет начата отправка всех не отправленных сообщений. Чтобы этого избежать, необходимо в БД пометить эти сообщения как отправленные.

update sys_sending_message
set status = 200, updated_by=’admin’
where status<>200;

Удаление записи из журнала действий

Если по каким-либо причинам необходимо удалить строку из журнала действий, можно выполнить следующий запрос:

update WF_ASSIGNMENT
set DELETE_TS = CURRENT_TIMESTAMP, DELETED_BY = USER
where ID = 'ASSIGNMENT_ID';

где, ASSIGNMENT_ID - id назначения, которое требуется удалить. Посмотреть id можно по нажатию правой кнопкой мыши на строку журнала действий в пункте “Системная информация”.

Удаление определенных ролей у пользователей

Для удаления определенных ролей у большого количества пользователей можно воспользоваться следующим примером запроса к базе данных:

update sec_user_role
set delete_ts = now() 
where id in 
    (select ur.id 
     from sec_user_role ur 
         join sec_user u on ur.user_id = u.id 
        join sec_role r on ur.role_id = r.id 
     where u.login <> 'Haulmont' and r.name in ('doc_initiator','DocEditor','ReferenceEditor', 'task_creator')
    );

Здесь в r.name содержатся наименования ролей, которые требуется удалить, а также есть условие u.login <> ‘Haulmont’, то есть удаление ролей у всех пользователей, кроме роли Haulmont.

Отчет о правах пользователей в системе

Для вывода краткого отчета о правах пользователей в системе можно воспользоваться следующим запросом:

select sec_user.login_lc as "Логин",sec_user.name as "Полное имя", sec_group.name as "Группа доступа", sec_role.loc_name as "Роль",
sec_user.active as "Активен", sec_user.position_ as "Должность"  
from sec_user 
    join sec_user_role on sec_user.id = sec_user_role.user_id
    join sec_role on sec_user_role.role_id = sec_role.id 
    join sec_group on sec_user.group_id = sec_group.id
where sec_user_role.delete_ts is null and sec_user_role.deleted_by is null
order by sec_user.login_lc;

Проверка очереди индексации

select count(*) from SYS_FTS_QUEUE;

Изменение контрагента в договоре/документе

Если требуется изменить контрагента в договоре, необходимо воспользоваться следующим запросом:

select * from df_doc where contractor_id = 'id_contractor'

update df_doc
set contractor_id = 'id_new_contractor'
where card_id = 'id_contract'

Здесь ‘id_contractor’ – id контрагента, уже выбранного в договоре, ‘id_new_contractor’ – id контрагента, которого нужно указать в договоре, ‘id_contract’ – id карточки договора, в котором нужно изменить контрагента. Посмотреть id карточек можно по нажатию правой кнопкой мыши на карточку в пункте “Системная информация”.

Если у данного договора есть версии, то для версий тоже нужно изменять вид. Если в системе настроена интеграция с УС, то нужно убедиться, что данного договора нет в УС. Если же договор есть в УС, то нужно удостовериться, что при изменении контрагента и выгрузке в УС контрагент заменится на новый. Если это не предусмотрено самой УС, то нужно удалить объект из УС и все ссылки на него (Гиперссылка и код DF), после этого менять контрагента и выгружать в УС.

Изменение вида документа

Для изменения вида документа необходимо сначала найти id вида документа, на который необходимо изменить. Посмотреть id можно по нажатию правой кнопкой мыши на карточку в списке видов документов в пункте “Системная информация”. Далее в базе данных выполнить несколько запросов:

update DF_DOC 
set doc_kind_id='(id вида документа, на который меняем)' 
where card_id='(id карточки документа)';

update DF_DOC
set doc_kind_id='(id вида документа, на который меняем)' 
where card_id='(id карточки документа)';

update WF_CARD 
set category_id='(id вида документа, на который меняем)' 
where id='(id карточки документа)';

Далее для того, чтобы в описание документа стояли верные данные выполняется следующий запрос:

update WF_CARD 
set description='(Вид документа) № (номер документа) от (дата)' 
where id='(id карточки документа)';

Поиск файлов карточки в файловом хранилище

Для поиска файлов в файловом хранилище необходимо узнать id карточки, файлы которой нужно найти. (ПКМ по карточке в списке → Системная информация).

Далее выполнить запрос в Базе данных:

Если вложение в карточке одно

select * from sys_file 
where id = (
        select file_id from wf_attachment where card_id = 'ID_карточки'
    ) 
    

Если вложений несколько

select * from sys_file
where id in (
        select file_id from wf_attachment where card_id = 'ID_карточки' 
    )

Расширение файла в колонке ext, его имя в id. В файловом хранилище файл должен находиться в директории
tomcat/work/app-core/filestorage/год/месяц/число/id.ext (или в директории, указанной как ФХ, если задано отличное от стандартного)

1 лайк