CREATE PROC FetchtTITRSignalsOnPLC
@NameRNU VARCHAR(50),
@NumberPLC INT,
@isTISignal BIT
AS
DECLARE @ID_PLC INT
exec @ID_PLC = FindPLC @NameRNU, @NumberPLC, 1
IF @ID_PLC = 0 RETURN
SELECT NameSignal [Наименование сигнала], NameDataType
[Тип данных], MEKAdress [Адрес МЭК], MaxEnginGrade
[Max инж. ранг], MinEnginGrade [Min инж. ранг],
MaxPhysicGrade [Max физ. ранг], MinPhysicGrade
[Min физ. ранг], Comment [Примечания]
FROM (SELECT *
FROM TITRSignals s
WHERE s.ID_PLC = @ID_PLC AND
isDeleted != 1 AND isTISignal = @isTISignal) s
INNER JOIN DataTypes d
ON s.ID_DataType = d.ID_DataType
ORDER BY MEKAdress ASC
Помимо ввода данных по заявке и генерации выходной формы физическая модель БД также обеспечивает доступ к данным о последней заявке, по которой в характеристики определённого сигнала вносились изменения. Реализуется это с помощью следующей хранимой процедуры:
ALTER PROCEDURE [dbo].[GetRequestOnSignalFields]
@NameRNU VARCHAR(50),
@NumberPLC INT,
@MEKAdress SMALLINT,
@Prefix CHAR(2) OUT,
@Number INT OUT,
@WriteDate SMALLDATETIME OUT,
@ExecDate SMALLDATETIME OUT,
@LoginName VARCHAR(256) OUT
AS
BEGIN
BEGIN TRAN
DECLARE @ID_PLC INT
@ID_Signal INT
DECLARE @ID_Request INT
DECLARE @ID_SPTZAdminLogin INT
EXEC @ID_PLC = FindPLC @NameRNU, @NumberPLC, 1
IF @ID_PLC = 0 BEGIN
RETURN
END
SELECT @ID_Signal = ID_TITRSignal, @ID_Request = ID_Request
FROM TITRSignals
WHERE ID_PLC = @ID_PLC AND MEKAdress = @MEKAdress
IF COUNT(@ID_Signal) = 0 BEGIN
SELECT @ID_Signal = ID_TUTSSignal, @ID_Request = ID_Request
FROM TUTSSignals
WHERE ID_PLC = @ID_PLC AND MEKAdress = @MEKAdress
END
IF COUNT(@ID_Signal) > 1 BEGIN
raiserror('В базе данных хранится несколько сигналов с Адресом МЭК = %d,
принадлежащих ПЛК №%d из РНУ %s не содержится в базе данных!
Нарушено ограничение целостности базы данных!', 15, 1, @MEKAdress, @NumberPLC, @NameRNU)
RETURN
END
IF COUNT(@ID_Signal) = 1 BEGIN
SELECT @Prefix = Prefix, @Number = Number, @WriteDate = WriteDate,
@ExecDate = ExecDate,
@ID_SPTZAdminLogin = ID_SPTZAdminLogin
FROM Requests
WHERE ID_Request = @ID_Request
SELECT @LoginName = NameLogin
FROM SPTZAdminsLogins
WHERE ID_SPTZAdminLogin = @ID_SPTZAdminLogin
END
ELSE BEGIN
raiserror('Сигнал с Адресом МЭК = %d, принадлежащий ПЛК №%d из РНУ %s не содержится в базе данных!', 15, 1, @MEKAdress, @NumberPLC, @NameRNU)
END
END
Таким образом, реализованная физическая модель базы данных поддерживает бизнес-логику процесса и обеспечивает ввод данных из входных форм, а также формирование выходных документов.
При проектировании пользовательского интерфейса на основании выделенных прецедентов (курсовой проект по дисциплине теория информации) было принято решение разместить все управляющие элементы на двух панелях, переключение между которыми осуществляется нажатием одной из двух соответствующих кнопок на навигационной панели. Одна панель предназначена для выполнения заявки сотрудником СПТЗ, другая – для получения выходных форм телемехаником.