В системе DIRECTUM записи справочников в какой-то момент времени могут иметь статус "черновика". Выделить такие записи можно с помощью признака "Утверждена" / "Не утверждена". Неутвержденные записи нельзя использовать в карточках документов или других справочников. Например, запись справочника "Персоны" неактуальна без введенных паспортных данных, и должна быть сохранена неутвержденной.
С другой стороны, если запись уже где-то используется, то ее нельзя ни удалять, ни делать "черновиком". Например, персона может использоваться в справочнике "Работники" или в карточках документов.
Кроме того, может возникнуть потребность программной проверки записи справочника на используемость в каких-либо записях справочников или типов документов. Например, для того, чтобы выводить пользователю сообщение о том, что данная запись уже используется, вместе с перечнем всех мест использования.
В подобных ситуациях можно взять за основу следующие вычисления:
REF_NAME = "код_типа_справочника_в котором_происходят_вычисления"
Recvs = SQL("EXECUTE sp_executesql N'
-- Источник вызова
select
1, rav.Kod, rav.Vid, rav.Razd
from
dbo.MBRecvAn as ra
join dbo.MBVidAn as va on
ra.VidAn = va.Vid
and va.Kod like @VA
join dbo.MBVidAnRecv as rav on
rav.Kod = ra.Kod
where
ra.Type = @VAT
union
select
2, etr.Kod, etr.TypeID, etr.Razd
from
dbo.MBRecvEDoc as re
join dbo.MBVidAn as va on
re.VidAn = va.Vid
and va.Kod like @VA
join dbo.MBEDocTypeRecv as etr on
etr.Kod = re.Kod
where
re.Type = @VAT', N'@VA varchar(50), @VAT varchar(1)', @VAT = А, @VA = " & REF_NAME)
// Если нашли реквизиты ТС и ТКЭД с заданным типом справочника
if Assigned(Recvs)
// Определить, к какому разделу относится реквизит
LabelsT = "Т;С;Р;О;Н;М;Q;W;U;R;I;Y;B;H;L;M;N;P;O;S;T;V;X;Z"
NumT = ";2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24"
QueryList = CreateStringList()
QueryList.Delimiter = " union "
Template = "select
top 1 1
from
dbo.%s
where
%s = %s
and %s = %s"
foreach RecvInfo in CSubString(Recvs; '|')
CompType = SubString(RecvInfo;";"; 1)
RecvCode = SubString(RecvInfo;";"; 2)
CompTypeID = SubString(RecvInfo;";"; 3)
Section = SubString(RecvInfo;";"; 4)
if CompType = 1
Field = "Vid"
if Section == "Ш"
Table = "MBAnalit"
else
Table = "MBAnValR" & SubString(NumT; ";"; FindSubString(Section; LabelsT; ";"))
endif
else
Field = "TypeID"
if Section == "Ш"
Table = "SBEDoc"
else
Table = "SBEDocValR" & SubString(NumT; ";"; FindSubString(Section; LabelsT; ";"))
endif
endif
// Формируем запрос на проверку используемости по текущему реквизиту
QT = Format(Template; ArrayOf(Table; Field; CompTypeID; RecvCode; Object.ID))
QueryList.Add(QT)
endforeach
Res = SQL(QueryList.DelimitedText)
if Assigned(Res)
// Запись используется, какие-то вычисления
endif
QueryList = nil
endif
Авторизуйтесь, чтобы написать комментарий