DirectumRX. Отчет для поиска связей при ошибке удаления "Запись уже используется".

29 2

Добрый день, коллеги!

Неоднократно наблюдал на ресурсе вопросы о том, что делать, если запись не удаляется, потому что "уже используется". А функционала по поиску связанных записей в системе нет. Мы также сталкивались с этой проблемой. И до недавнего времени, полагаясь на удачу, удавалось её решить. Пока эта самая удача не закончилась. В итоге было найдено другое решение (правда, пока только для Microsoft SQL Server).

Что вам понадобится:

  1. Доступ к SQL-серверу
  2. Имя таблицы для вашего типа сущности (можно посмотреть в SDS)
  3. ИД записи, которая не удаляется
--Заполнить имя БД
use DirectumRX
GO
--Указать таблицу типа сущности, который не удаляется
DECLARE @tableName nvarchar(max) = 'Sungero_Parties_Counterparty'
DECLARE @CursorQuery nvarchar(max);
--Указать ИД сущности, которая не удаляется
DECLARE @taregtId nvarchar(max) = '32'

DECLARE @tmp_Accounts TABLE (
PKTABLE_QUALIFIER sysname
,PKTABLE_OWNER sysname
,PKTABLE_NAME sysname
,PKCOLUMN_NAME sysname
,FKTABLE_QUALIFIER sysname
,FKTABLE_OWNER sysname
,FKTABLE_NAME sysname
,FKCOLUMN_NAME sysname
,KEY_SEQ smallint
,UPDATE_RULE smallint
,DELETE_RULE smallint
,FK_NAME nvarchar(max)
,PK_NAME nvarchar(max)
,deferrability smallint
)

insert into @tmp_Accounts exec sp_fkeys @tableName

DECLARE CUR_FK CURSOR FAST_FORWARD FOR
    select 'select Id, \"' + FKTABLE_NAME + '" from ' + FKTABLE_NAME + ' where ' + FKCOLUMN_NAME + ' = ' + @taregtId  from @tmp_Accounts
 
OPEN CUR_FK
FETCH NEXT FROM CUR_FK INTO @CursorQuery
 
WHILE @@FETCH_STATUS = 0
BEGIN
   exec sp_executesql @CursorQuery

   FETCH NEXT FROM CUR_FK INTO @CursorQuery
END
CLOSE CUR_FK
DEALLOCATE CUR_FK
GO

Заполнив параметры, выполните скрипт, который вернет результат в следующем виде:

Если есть связь - вы увидите строку с ИД и наименованием таблицы связанной сущности, ну а найти её в системе уже не составит труда.

Илья Лёвин

Добрый день. Простите, а как посмотреть имя таблицы для нашего типа сущности?
Вот, например, Подразделения - где в SDS это можно увидеть? И что такое SDS?

Илья Лёвин: обновлено 08.06.2021 в 16:05
Антон Максунов

Илья, SDS (DDS) это Sungero Development Studio (Directum Development Studio) - среда разработки. Справа есть список объектов, в ветке Базовые решения можно найти стандартные справочники. Например для Подразделений

Свои справочники смотрите в своих решениях (отдельные ветки выше Базовых).

Антон Максунов: обновлено 08.06.2021 в 19:19

Авторизуйтесь, чтобы написать комментарий