Условие проверки значения

Здравствуйте. Имеется поле, в него вводится лот товара, после проверки он попадает в грид, который отображает корзину клиента. Необходимо сделать так, чтобы если цена лота составляет "0" руб, он не добавлялся. Функция проверки на данный момент:

function btnAddPartTableOnClick(Control) {
        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), но как обратиться к значению датасета с нужным условием по синтаксису - в этом мой вопрос.
На всякий случай, ещё функция, малоли нужна будет.

function DoSaveEditDatasetByChildGrid(BaseDBEdit, EditWindow, GridWindow, SaveChangeFunc) {
        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;
}

Нравится

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

"Нестеров Артем Валерьевич" написал:но как обратиться к значению датасета с нужным условием по синтаксису - в этом мой вопрос.

Ваш вопрос не понятен.
Напишу так как понял, может верно, может нет, тогда давайте больше объяснений.
Чтобы обратится к датасету карточки, нужно посмотреть, как он у вас в ней называется в невизуальных параметрах (у меня на картинке это 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 выше.

Большое спасибо за идеи, направившие в правильном направлении! Задача решена немного другим способом, относительно моего кода.

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