Исходный код
Option Explicit
Call CallSetSignDlg(ThisObject, "SGN_TEST")
'==============================================================================
' Вывести диалог инициализации подписи c указанным SysID на указанном объекте
'==============================================================================
Sub CallSetSignDlg(Obj, SignSysname)
Dim SignDlg, Signs, MySign
'Получить ссылку на коллекцию подписей объекта
Set Signs = Obj.Signs
'Получить ссылку на первую пустую (неинициализированную) подпись нужного типа
For Each MySign In Signs
If (MySign.SignDef.SysName=SignSysname) And MySign.Empty Then Exit For
Next
'Если пустая подпись не найдена на объекте, то нужно создать её
If (IsEmpty(MySign)) Or (Not Signs.Has(SignSysname)) Then
'Создаем на объекте подпись (пустую)
Set MySign = Signs.Create(SignSysname)
'ЗАМЕЧАНИЕ !!! С помощью метода TDMSSigns.Add нельзя добавить подпись к объекту,
'а можно лишь добавить подпись к локальной (временной) коллекции
End If
'Для того, чтобы подписать объект, используем стандартный диалог
'Подпись должна быть пустой (неинициализированной), иначе вызов диалога приведет к ошибке
Set SignDlg = ThisApplication.Dialogs.SetSignDlg
SignDlg.Object = Obj
SignDlg.Sign = MySign
SignDlg.Show 'Вывести диалог на экран
End Sub
'==============================================================================