два отчета используют один и тот же dataset, но с разными фильтрами.

если вначале открыть отчет А с
ApplyDatasetFilter(ContactDepartmentDataset, 'ContactID', OwnerID, true);
ApplyDatasetFilter(ContactDepartmentDataset, 'IsPrimary', 1, true);

а затем отчет В с
ApplyDatasetFilter(ContactDepartmentDataset, 'ContactID', UserID, true);

то у В отфильтрованных значений столько же, сколько и у А, хотя отчет В накладывает более широкие условия (то есть множество значений В содержит все значения А).

Подскажите пожалуйста, где сохраняются условия фильтрации или как их обновить/сбросить?

Нравится

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

После формирования отчета A выполните ContactDepartmentDataset.Close();

эта функция была. не помогает

ApplyDatasetFilter(ContactDepartmentDataset, 'ContactID', OwnerID, true);
ApplyDatasetFilter(ContactDepartmentDataset, 'IsPrimary', 1, true);

ContactDepartmentDataset.Open();
//...
ContactDepartmentDataset.Close();

Перед применением фильтра попробуйте отключить все фильтры:

EnableDatasetFilters(ContactDepartmentDataset, false);
ApplyDatasetFilter(ContactDepartmentDataset, 'ContactID', UserID, true);

Или отключить конкретные фильтры, которые Вы не собираетесь использовать:

EnableDatasetFilters(ContactDepartmentDataset, false, 'IsPrimary');
ApplyDatasetFilter(ContactDepartmentDataset, 'ContactID', UserID, true);
Показать все комментарии

Здравствуйте обитатели форум, пожалуйста прошу помочь мне в следующей проблеме: Когда я пытаюсь вернуть значение Dataset.Values('Dataset.Values('RemindingToOwnerID'); из ds_Task, почему-то возвращается значение null, хотя я пробывал вернуть другие значения этой же таблицы для проверки, вдруг я вообще не стем полем работаю, так все остальные значения данного поля выводятся нормально, как и следует, кроме поля 'RemindingToOwnerID'
данное значение мне нужно для фильтрации другого датасета, по данному значению, к стати так-же у меня не срабатывает ApplyDatasetFilter хотя я туда уже и записал готовое значени поля нужного мне ID, хотя ApplyDatasetIDFilter работает нормально, далее я представлю свой код, для лучшего понимания моей проблемы...

function UpdateDatasetRecordByEvent(Dataset, Event) {
var DataFields = Dataset.DataFields;
        var StartDateDataField = DataFields.ItemsByName('StartDate');
         var StartDateDataField2 = Dataset.Values('StartDate');
        var DueDateDataField = DataFields.ItemsByName('DueDate');
        var OwnerIDDataField = DataFields.ItemsByName('OwnerID');
    var RemindingToOwnerID1 = Dataset.Values('Title');
   
     var RemindingToOwnerID = Dataset.Values('ID');
//     var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID'); // вот оно это самое null значение!!!
var RemindingToOwnerID2 = Dataset.Values('RemindingToOwnerID');
ShowInformationDialog('id нужной записи = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D}'+' заголовок нужной задачи = '+RemindingToOwnerID1+'  ID нужной задачи = '+RemindingToOwnerID+'  значние поля RemindingToOwnerID нужной задачи ='+RemindingToOwnerID2);
        Dataset.Locate('ID', Event.ID);
        var PriorStartDate = StartDateDataField.ValAsDateTime;
        var PriorDueDate = DueDateDataField.ValAsDateTime;
        var ds_Remindings = GetRemindingDataset();
        var RemDataFields = ds_Remindings.DataFields;
//      Dataset.Open();
       

//      ApplyDatasetFilter(ds_Remindings, 'id',RemindingToOwnerID, true);
        var RemStartDateDataField = RemDataFields.ItemsByName('RemindTime');
        ds_Remindings.Open();
    var RemindingDescription = ds_Remindings.Values('Description');
    var RemindingDescription2 = ds_Remindings.Values('RemindTime');
   
        if (!CheckTaskCovering(Dataset, OwnerIDDataField, Event.Start,
                Event.Finish)) {
        CancelChangeEvent(Event, PriorStartDate, PriorDueDate);
                return;

               
        }
var converted = Date.parse(Event.Start) ;
var converted1 = Date.parse(StartDateDataField2) ;
var converted2 = Date.parse(RemindingDescription2) ;

if (Event.Start>StartDateDataField2) {
var conv1 = converted - converted1;
var conv2 = converted2 + conv1;
var someDate = new Date(conv2);
}

if (Event.StartStartDateDataField2) {
var conv1 = converted1-converted;
var conv2 = converted2 - conv1;
var someDate = new Date(conv2);
}


//ds_Remindings.Edit();
//RemStartDateDataField.ValAsDateTime = Event.Start;
//RemStartDateDataField.ValAsDateTime = DateToStr(someDate)+' '+TimeToStr(someDate);
//ds_Remindings.Post();
//ds_Remindings.Close();
//ds_Remindings.Open();
//ApplyDatasetFilter(ds_Remindings, 'id','0000', true);
ds_Remindings.Close();
//ApplyDatasetIDFilter(ds_Remindings,'{48EE50FD-F61F-4C01-9D01-1CF42AC3880D}', true);
ApplyDatasetFilter(ds_Remindings,'id','{48EE50FD-F61F-4C01-9D01-1CF42AC3880D}', true);
ds_Remindings.Open();
//ds_Remindings.Open();


ShowInformationDialog(ds_Remindings.Values('Description')+'hkjhkjh');
//ShowInformationDialog('id нужной записи = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D}'+' Id записи RemindingТoOwnerID = '+RemindingToOwnerID);

 //ds_Remindings.Open();
//var RemindingToOwnerID1 = Dataset.Values('RemindingToOwnerID');      
//ShowInformationDialog('id нужной записи = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D}'+' значение нужной задачи = '+RemindingToOwnerID1+'====='+RemindingToOwnerID);

        Dataset.Edit();
        Dataset.ValAsStr('Title') = Event.Caption;
        StartDateDataField.ValAsDateTime = Event.Start;
        DueDateDataField.ValAsDateTime = Event.Finish;
        UpdateDuration(Dataset);
        Dataset.Post();
        UpdateEventColorsByDatasetRecord(Event, Dataset);
       

}

:cry:

Нравится

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

ApplyDatasetFilter(ds_Remindings,'id','{48EE50FD-F61F-4C01-9D01-1CF42AC3880D}', true);
необходимо писать 'id' в верхнем регистре 'ID'

Спасибо! Теперь фильтрует, но значение переменной в которую присваиваю значение поля RemindingToOwnerID, попрежнему пустое.... как быть ?

"Мамажанов Марат Кадралдыкович" написал:попрежнему пустое.... как быть ?

вариантов может быть несколько , если нет ошибки , то лучше всего в профайлере посмотреть запрос , возможно данные берутся не оттуда , откуда хотелось бы :-)

как это сделать ?

"Мамажанов Марат Кадралдыкович" написал:как это сделать ?

какая БД у Вас?

sql-server 2005

По-моему RemindingToOwnerID хитрое поле и наличие в нем значения, отличного от пустого еще ни о чем не говорит. Учтите это.

Upd: Предлагаю после нажатия кнопки "Добавить комментарий" дизейблить ее :)

"Мамажанов Марат Кадралдыкович" написал:sql-server 2005

С инсталляцией идет SQl Server Profiler

--
www.it-sfera.com.ua

у него есть SQL Server Profiler
с его помошью можно отслеживать все запросы к серверу (очень удобная и полезная для разработки)

вы знаете, у меня что-то не совсем получаеться с данной утилитой SQL Server Profiler, но думаю что я правильно обращаюсь к базе и к таблице, просто исходя из того что, другие данные из тойже таблицы и поля, выводяться нормально, т.е. все поля данной зиписи выводятся как и следует, но именно при обращении к данному полю "RemindingToOwnerID" получаеться вот такая вот непонятная ситуация ....

Скажите может ли это быть из-за того что, я пытаюсь присвоить значение уникального идентификатора, может ли в этом крыться ошибка?, т.к. для сравнения пробовал присваивать значения других полей данной записи имеющих отличный тип данных, все выводятся нормально, но как только дело доходить до полей с уникальным идентификатором, то они как мое поле ругаются на то что, значение null...
скажите как в этом случае мне поступить ???
Может быть есть возможность конвертировать значение данного тип в строку?
С уважением Марат Мамажанов.

"Мамажанов Марат Кадралдыкович" написал:конвертировать значение данного тип в строку

Dataset.ValAsStr('FieldName')
вроде еще такое бывает SomeVariable.toString()

а вообще посмотрите для данной записи прямо в таблице значение злополучного поля - оно там значение какое имеет?

ООО "Лайнсервис"
www.ls-crm.ru

значение поля = {48EE50FD-F61F-4C01-9D01-1CF42AC3880D} уникальный идентификатор

Исключая элемент мистики))
var RemindingToOwnerID = Dataset.Values('RemindingToOwnerID');
- а если дебаггером посмотреть что присваивается переменной? если null, тогда смотрим здесь же значение поля Dataset.Values('ID'), потом в базе смотрим, действительно ли там для соответствующей записи поле RemindingToOwnerID имеет значение null или нет еще раз)).
Если нет там null, делаем вывод, что в датасете это поле сначала получает благодаря запросу правильное значение, а потом уже заполняется значением null (благодаря какому-либо скрипту) перед тем, как мы к нему обращаемся

ООО "Лайнсервис"
www.ls-crm.ru

у меня уже были такие предположения, и ID этой же записи уже смотрел, там все нормально, и делал обращения сразу после как присвоил занчение переменной, чтобы исключить возможность изменения данных в других местах скрипта...
даже и не знаю что еще можно попробывать

Если это в карточке происходит, то там идет вызов PrepareRemindControls в wnd_TaskEditOnPrepare и там есть кусок кода

if (!ExistRemindingToOwner){
	Dataset.Values('RemindingToOwnerID') = null;
}

Т.е. если в таблице поле RemindingToOwnerID не пустое, но напоминание уже удалено, то RemindingToOwnerID сбрасывается в null

данный скрипт вызыватеться при перетягивании задачи в расписании, может ли при этом происходить то действие, которое Вы описываете ?

"Мамажанов Марат Кадралдыкович" написал:данный скрипт вызыватеться при перетягивании задачи в расписании, может ли при этом происходить то действие, которое Вы описываете ?

а Вы debugger туда впишите в начале функции, вот и узнаем наверняка:smile:

ООО "Лайнсервис"
www.ls-crm.ru

Не должен, хотя чем черт не шутит :)

Вы знаете, так ничего у меня и не получилось с этим полем
:sad:
Если не затруднит, может кто-нибудь попробует проделать такое же действие, может получиться что...
Хотя бы просто присвоить значение этого поля и вывести его в сообщении ShowInformationDialog.
Заранее спасибо!

Вы бы сначала с профайлером разобрались. Ато нехорошо просить людей что-то сделать, а самому не попытаться разобраться в такой элементарной вещи. Посмотрите какой запрос. Выполните его QueryAnalizer-ом. Посмотрите там значение поля. И уже от сюда плясать будем.

Кстати убедитесь, что напоминание не удалено из базы. Мне кажется все спецэфекты с этим связаны.

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