Расчет суммы операций

Добрый день, помогите решить задачку

Нужно в карточку редактирования Договора (wnd_ContractEdit) добавить поле, в котором будет просчитываться сумма всех Операций по данному договору (из раздела Cashflow) c состоянием Выполнена (StatusID).

Нравится

8 комментариев

Можно так:
Добавляете обычное поле с галкой "только для чтения", затем пишете триггеры на добавление, удаление, изменение в таблице операций, которые при каждом срабатывании пересчитывают сумму по указанному договору.

Не могли б более подробно рассказать о том как это сделать?

Пример, в таблице договоров есть поле "FactTotalAmount", которое является суммой поля "AmountToPay" счетов по договору. Триггеры:

CREATE TRIGGER [dbo].[tr_UpdateContractFactTotalAmount_AU] 
   ON [dbo].[tbl_Invoice]  
   AFTER UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	UPDATE c 
	SET c.FactTotalAmount = (
		SELECT SUM(i2.AmountToPay)
		FROM tbl_Invoice i2
		WHERE i2.ContractID = c.ID
	)
	FROM tbl_Contract c
		INNER JOIN inserted i ON i.ContractID = c.ID
		INNER JOIN DELETED d ON d.Id = i.Id AND ISNULL(i.AmountToPay,0) <> ISNULL(d.AmountToPay,0)
END
CREATE TRIGGER [dbo].[tr_UpdateContractFactTotalAmount_AI] 
   ON [dbo].[tbl_Invoice]  
   AFTER INSERT
AS 
BEGIN
	SET NOCOUNT ON;
	UPDATE c 
	SET c.FactTotalAmount = (
		SELECT SUM(i2.AmountToPay)
		FROM tbl_Invoice i2
		WHERE i2.ContractID = c.ID
	)
	FROM tbl_Contract c
		INNER JOIN inserted i ON i.ContractID = c.ID
END
CREATE TRIGGER [dbo].[tr_UpdateContractFactTotalAmount_AD] 
   ON [dbo].[tbl_Invoice]  
   AFTER DELETE
AS 
BEGIN
	SET NOCOUNT ON;
	UPDATE c 
	SET c.FactTotalAmount = (
		SELECT SUM(i2.AmountToPay)
		FROM tbl_Invoice i2
		WHERE i2.ContractID = c.ID
	)
	FROM tbl_Contract c
		INNER JOIN DELETED d ON d.ContractID = c.ID
END

Вам нужно то же самое, только по другому полю, другой таблице и добавить в условие проверку на состояние операции.

Александр, большое спасибо за помощь!!! все получилось=)))

а как здесь добавить проверку на состояние операции?

В условие WHERE везде дописать:

and i2.StatusID = '{GUID_нужного_состояния}'

Добрый день. А где триггеры писать? В каком скрипте?

Триггеры пишутся в базе данных.

Показать все комментарии