Обновление поля

Здравствуйте!!
В Разделе Продукты (ds_Offering) есть поле Price (Цена), в закладке Цены (ds_OfferingPrice) тоже есть поле Price (Цена). Сделала так, что при создании в закладке Цены новой записи в зависимости от определенного типа (оптовая, розничная)в поле Цена (ds_OfferingPrice) подставляется значение, расчитанное по формуле соответствующее конкретному типу цены (например Price(ds_OfferingPrice)=Price(ds_Offering)*0,8).
Правда при изменении значения поля цена Price (ds_Offering) не изменяется значение поля Price(ds_OfferingPrice. Незнаю как организовать обновление цен в закладке Цены. Подозреваю, что это как то можно сделать при помощи сервиса Update Query.
Сделала следующее:
1. Создала сервис update query, назвала его uq_UpdatePrices:
UPDATE [dbo].[tbl_OfferingPrice]
SET [Price] = :UpdatePrices
WHERE([tbl_OfferingPrice].[OfferingID] = :OfferingID AND
[tbl_OfferingPrice].[ID] = :ID)
2. ds_OfferingPriceScript
Затем вызываем написанный в п 1 сервис
function ds_OfferingPriceOnDatasetBeforePost(Dataset, DoPost) {
if (Dataset.Values('Price')) {
var uq_UpdatePrices = Services.GetNewItemByUSI('uq_UpdatePrices');
var Params = uq_UpdatePrices.Parameters;
SetParameterValue(Params, 'OfferingID', Dataset.Values('OfferingID'));
SetParameterValue(Params, 'ID', Dataset.Values('ID'));
SetParameterValue(Params, 'Price', false);
uq_UpdatePrices.Execute();
}
3. при изменении поля Цена (ds_Offering) вызывается функция ds_OfferingPriceOnDatasetBeforePost:
ds_OfferingScript
function ds_OfferingOnDatasetDataChange(DataField) {
if (DataField == null) {
return;
}
var DataFields = DataField.ParentDataFields;
var Dataset = DataFields.ParentDataset;
var Value = DataField.Value;
switch (DataField.Name){
case ('Price') :
ds_OfferingPriceOnDatasetBeforePost
break;
}
Может я что то делаю не так, если нет подскажите, что исправить, пожалуйста.

Нравится

3 комментария

Здравствуйте!

В данной ситуации есть два варианта решения:

1. Update Query должен иметь приблизительно следющий вид:
UPDATE [dbo].[tbl_OfferingPrice]
SET [Price] = :UpdatePrices
WHERE([tbl_OfferingPrice].[OfferingID] = :OfferingID AND
[tbl_OfferingPrice].[TypeID] = :TypeID)

Необходимо создать функцию UpdatePrice(OfferingID, NewPrice)

Function UpdatePrice(OfferingID, NewPrice) {
NewPrice1 = NewPrice * 0.5 …. /// в функции мы считаем цену для типа продукта

И здесь вызываем UpdateQuery для того, чтобы изменить конкретную запись (для каждого типа цены).

}

2. Повесить тригер на tbl_Offering.

Terrasoft Support Team

спасибо за ответ!
правда не совсем понятно, как вызывать UpdateQuery

все поняла уже, все работает!

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