Добрый день, помогите решить задачку
Нужно в карточку редактирования Договора (wnd_ContractEdit) добавить поле, в котором будет просчитываться сумма всех Операций по данному договору (из раздела Cashflow) c состоянием Выполнена (StatusID).
Нравится
Можно так:
Добавляете обычное поле с галкой "только для чтения", затем пишете триггеры на добавление, удаление, изменение в таблице операций, которые при каждом срабатывании пересчитывают сумму по указанному договору.
Не могли б более подробно рассказать о том как это сделать?
Пример, в таблице договоров есть поле "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_нужного_состояния}'