Добрый день.
Хочу реализовать такие функции. Данные, которые я планирую получать, это значения с таблицы. Есть ли в террасофт возможнось напрямую сделать запрос к БД для получения нужных результатов?
К примеру, как на php mysql_query + mysql_feach_array
function FillMemoryDataset(Dataset) {
var Items = GetAttribute(Dataset, 'Items');
if (!Assigned(Items)) { return; }
Dataset.DisableEvents();
try {
for (var i = 0; i < Items.length; i++) {
var Item = Items[i];
Dataset.Append();
Dataset.ValAsInt('id') = Item['id'];
Dataset.ValAsStr('type') = Item['type'];
Dataset.ValAsStr('pricecode') = Item['pricecode'];
Dataset.ValAsStr('title') = Item['title'];
Dataset.ValAsStr('text_method') =
PrepareTestInfoStringToSearch(Item['text_method']);
Dataset.ValAsStr('material') =
PrepareTestInfoStringToSearch(Item['material']);
Dataset.ValAsStr('is_block') = GetBlockedTestInformation(Item['pricecode']);
Dataset.ValAsStr('is_day') = GetDayTestInformation(Item['pricecode']);
Dataset.ValAsStr('is_stop') = GetStopedTestInformation(Item['pricecode']);
Dataset.ValAsBool('is_custom') = (Item['is_custom'] == true);
Dataset.Post();
}
}
finally {
Dataset.EnableEvents();
Dataset.GoToFirst();
}
}
function GetBlockedTestInformation(pricecode)
{
Result = '';
//Тут нужно получить данные из другого запроса sq_
return Result;
}
function GetDayTestInformation(pricecode)
{
Result = '';
return Result;
}
function GetStopedTestInformation(pricecode)
{
Result = '';
return Result;
}
Нравится
Сделал так
var ds = Services.GetNewItemByUSI('mds_KsCallInvitroApiTestAdds');
ApplyDatasetFilter(ds, 'pricecode', Item['pricecode'], true);
var IsBlock = '';
var IsDay = '';
var IsStop = '';
ds.Open();
IsBlock = ds.ValAsStr('is_block');
IsDay = ds.ValAsStr('is_day');
IsStop = ds.ValAsStr('is_stop');
ds.close();
Dataset.ValAsStr('is_block') = IsBlock;
Dataset.ValAsStr('is_day') = IsDay;
Dataset.ValAsStr('is_stop') = IsStop;
Добрый день.
Вы можете реализовать представление (view) и использовать его в Вашем гриде.
Посмотрите похожая тема обсуждается здесь.
Возможно ли это функциями Террасофта провернуть без использования Dataset?
Сделал так
var ds = Services.GetNewItemByUSI('mds_KsCallInvitroApiTestAdds');
ApplyDatasetFilter(ds, 'pricecode', Item['pricecode'], true);
var IsBlock = '';
var IsDay = '';
var IsStop = '';
ds.Open();
IsBlock = ds.ValAsStr('is_block');
IsDay = ds.ValAsStr('is_day');
IsStop = ds.ValAsStr('is_stop');
ds.close();
Dataset.ValAsStr('is_block') = IsBlock;
Dataset.ValAsStr('is_day') = IsDay;
Dataset.ValAsStr('is_stop') = IsStop;
Для тех кто хочет получить данные из другого dataset это прост отлично подходит
Алексей, кроме предложенного Аллой варианта есть и более простой штатный способ: можно в дизайнере sq настроить колонку-подзапрос или колонку с произвольным SQL-кодом, где и реализовать вычисление нужного значения или вызов SQL-функции.
Спасибо. Но для моей задачи подошел мой вариант. Так как основной dataset формируется не по sql, а с выборки в api и мне нужно было к нему приплюсовать еще и sq.
Алексей, сразу не заметил, что Вам нужно обязательно через программное наполнение полей MemoryDataset.
Если оба источника данных, и основной, и вспомогательный типа MemoryDataset, то так, как Вы написали.
А если вспомогательный — обычный Dataset, считывающий из базы по sq и ds, то его при желании тоже можно программно создать, наложить фильтр, открыть и считать значения полей.