Здравствуйте. Имеется поле, в него вводится лот товара, после проверки он попадает в грид, который отображает корзину клиента. Необходимо сделать так, чтобы если цена лота составляет "0" руб, он не добавлялся. Функция проверки на данный момент:
Control.IsEnabled = false;
try{
var SaveResult = DoSaveEditDatasetByChildGrid(BaseDBEdit, Self, null, SaveChanges);
Self.BringToFront();
if (SaveResult) {
AddToPartable();
}
} finally {
Control.IsEnabled = true;
}
}
Цена хранится в датасете ds_Orders, целочисленном поле TotalAmount. Я понимаю, что нужно изменить условие примерно так if(SaveResult && "Цена" !== 0), но как обратиться к значению датасета с нужным условием по синтаксису - в этом мой вопрос.
На всякий случай, ещё функция, малоли нужна будет.
var Dataset = BaseDBEdit.Dataset;
if(Dataset.State == dstInsert){
if (System.MessageDialog(RecordMustBeSavedBeforeContinueSave,
mdtWarning, (mdbYes + mdbNo), 0) != wmrYes) {
EditWindow.BringToFront();
return false;
}
var Data = {};
var Succesfull = true;
EditWindow.Notify(GridWindow, 'CHECK_DATA', Data);
if (Data.Result == undefined){
if (!CheckSetRequiredField(Dataset)) {
MessageBox('Необходимо заполнить обязательные поля');
Succesfull = false;
}
} else if (!Data.Result){
Succesfull = false;
EditWindow.BringToFront();
return false;
}
if (!Succesfull){
EditWindow.BringToFront();
return false;
}
SaveChangeFunc(BaseDBEdit, EditWindow);
Dataset.Edit();
SendNotify(EditWindow, MSG_OK);
}
if (GridWindow) {
GridWindow.Notify(EditWindow, MSG_SAVED, null);
}
return true;
}
Нравится
"Нестеров Артем Валерьевич" написал:но как обратиться к значению датасета с нужным условием по синтаксису - в этом мой вопрос.
Ваш вопрос не понятен.
Напишу так как понял, может верно, может нет, тогда давайте больше объяснений.
Чтобы обратится к датасету карточки, нужно посмотреть, как он у вас в ней называется в невизуальных параметрах (у меня на картинке это dlData, скорее всего и у вас)
Обращаемся к нему, и вытаскиваем поле, которое связывает ваш датасет с ds_Order (наверное OrderID)
тогда обращаться к цене примерно так:
var OrderID = dlData.Dataset('OrderID'); var TotalAmount = GetDatasetFieldValueByID('ds_Order', OrderID, 'TotalAmount');
Не забудьте подключить скрипт scr_DB
"Сазанов Александр Владимирович" написал:Нестеров Артем Валерьевич пишет:
но как обратиться к значению датасета с нужным условием по синтаксису - в этом мой вопрос.
Ваш вопрос не понятен.
Напишу так как понял, может верно, может нет, тогда давайте больше объяснений.
Чтобы обратится к датасету карточки, нужно посмотреть, как он у вас в ней называется в невизуальных параметрах (у меня на картинке это dlData, скорее всего и у вас)
Обращаемся к нему, и вытаскиваем поле, которое связывает ваш датасет с ds_Order (наверное OrderID)
тогда обращаться к цене примерно так:var OrderID = dlData.Dataset('OrderID');
var TotalAmount = GetDatasetFieldValueByID('ds_Order', OrderID, 'TotalAmount');
Не забудьте подключить скрипт scr_DB
Так более ясно?
Добавление лота в корзину происходит на AddToPartable();?
Раз там вы добавляете, то там должна быть прямая связь с датасетом, а проверку на цену там не выполнить?
Здравствуйте, Артем!
Александр прав, в данном случае можно воспользоваться функцией
GetDatasetFieldValueByID(DatasetUSI, IDValue, FieldName)
DatasetUSI - название DataSet`a ('ds_Orders');
IDValue - ID лота (можно получить, зная номер);
FieldName - имя поля ('TotalAmount').
Функция вернет значение поля FieldName.
Андрей, Артем хотел сделать проверку на той же строке, что и
if (SaveResult)
что, наверное, возможно, но лучше не пытаться.
Артем, в итоге я предлагаю выполнить проверку на цену не тут, а именно там где у вас стоит Append() Post() (или какая-то функция добавления), куда вы передаете параметры лота (его ID или сразу цену, не знаю как там у вас)
Если цена, то пишите условие, если ID, то функцию как получить цену по известному ID выше.
Большое спасибо за идеи, направившие в правильном направлении! Задача решена немного другим способом, относительно моего кода.