Добрый день!

Продукт CRM 3.3.0.49 (это версия tscrm.exe), клиент на Win 2008, а SQL 2005

Преамбула:
В ходе реализации задачи (выгрузка в XML определенных изменений из журнала логов) в tbl_DatabaseLog было создано поле "IsChecked" (тип: булево, хотя в SQL тип получился число), это же поле было добавлено и в sq_DatabaseLog и в ds_DatabaseLog - и скорее всего всё правильно настроено.
В SQL у данного поля по умолчанию установлено устанавливать значение 0 (ноль), а не null

Ситуация
В CRM в настройках журнала добавляем "следить" за изменениями Наименования справочника Контрагенты.
Открываем любого контрагента, немного меняем название, сохраняем.
Смотрим в SQL в записи таблицы tbl_DatabaseLog, находим изменение нашего контрагента и видим что поле IsChecked приняло значение 0 - отлично. Это означает для меня что появилась запись в журнале логов, которое еще я не обработал.

В jscript`е я не силен, поэтому скорее всего что-то делаю не так, и поэтому прошу уважаемую аудиторию помочь :smile:
Проблема
Скрипт приведенный ниже выполняет выборку данных. В конце обхода каждой записи из выборки мне нужно в поле IsChecked устанавливать значение true (таким образом помечать запись, что она обработана)

/////......................
var Dataset = Services.GetNewItemByUSI('ds_DatabaseLog');
      //Применим фильтр к таблице изменний , где TableID =Контрагенты,
      ApplyDatasetFilter(Dataset, 'TableID','03D2B91C-93A7-4D3F-80DC-8D80C397FBDE', true);
      //Применить фильтр на отбор только не проверенных записей.
      ApplyDatasetFilter(Dataset, 'IsChecked',false, true);

      EnableDatasetFilters(Dataset, true,'TableID','IsChecked');

      Dataset.FetchRecordsCount = -1;
   
      Dataset.Open();
   
        while (!Dataset.IsEOF) {
       //////Сначала здесь чтение данных
     
       /////Затем здесь у данной записи (элемента выборки) мне необходимо установить
       /////значение поля IsChecked = true и делаю я это след. образом
       Dataset.Edit();    //режим редактирования вкл
       Dataset.Values('IsChecked') = true;  //установка значения
       Dataset.Post();   //запись изменений
       
       Dataset.GotoNext();
       }
       Dataset.Close();

Но! смотрю в SQL и вижу что у обработанных записей поле IsChecked действительно приняло значение = 1 , а в полях TableID, RecordID, RecordTitle, ActionID отсутствуют значения (т.е. null).
Вопрос: Как присвоить полю IsChecked нужное значение, но при этом не затереть значения в других полях?

Нравится

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

Попробуйте это сделать сервисом UpdateQuery. Я тоже заметил что если не передавать при редактировании в поля значения то они становяться null. незнаю почему так.UpdateQuery точно должно работать.

Иван, Огромное спасибо! :twisted: Всё получилось!

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