Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!


У костыльнных программистов достаточно таланта, чтобы справиться со всей этой хренью.
У костыльнных программистов должно быть достаточно таланта, чтобы справиться со всей этой хренью.

UPDATE CPDoComPay
SET DocState = '2'
FROM CPDoComPay AS a
LEFT OUTER JOIN CPServices AS i ON i.ServiceID=a.ServiceID
WHERE a.TransferMode = 2 AND
i.ServSettlMode = 3 AND
(a.DocSource = '3' AND a.DocState = 'b' ) AND
(ISNULL(a.ExecutionDateTime,'')<>'' AND a.ExecutionDateTime>@DateTimeFrom
AND a.ExecutionDateTime<=@DateTimeTill) AND
((Contractor = 1 AND i.ServSettlMode = 3) OR
(Contractor = 2 AND
i.ServSettlMode = '2' AND
a.ServiceID = @ServiceID AND
a.FinalDate <= GETDATE())
)
declare @DocStateId char
select @DocStateId = Id from DocStates
where Description like N'В обработке'
Да и что он гарантирует? Ничего, он упадет только если Вы поменяете описание в Description.
Две крайности — всё в базе и в тестах номера :) Связь ид-название/описание можно захардкодить в коде, чтобы можно было удобно и осмысленно писать тесты и сам код, и в то же время не допустить даже преднамеренной порчи связи администратором системы (не в смысле пользователем ОС с рутовскими правами, способного изменять бинарники, а в смысле роли в системе)
Ни разу не слышал, что это обязательно.
Учу. Полей вида DocStates на самом деле есть три вида: системные состояния, которые вообще не видны пользователю, состояния, наименования которых он задает сам (как правило админ этим занимается), состояния, наименование которых жестко задает разработчик.
И не с одним из этих видов НЕЛЬЗЯ поступать так как вы предлагаете.
SET DocState = '2'
Это не хардкод. Это процедура которая выполняет свое предназначение — называется «сформировать пакеты платежей», а DocState = '2' зафиксировать отказ тем платежам, у которых истек срок оплаты.
declare @DocStateId char
select @DocStateId = Id from DocStates
where Description like N'зафиксировать отказ тем платежам, у которых истек срок оплаты'
Не ужели Вы реально полагаете, что я буду писать болгарским или арабской вязью, чтобы связать GUI с однозначным значением '2'? И по вашему в этом заключается предметная область?
Костыльный программист