Здравствуйте.
Нужна помощь, в реализации следующего функционала:
В разделе Счета формируется отчет, и сохраняется в БД на деталь "Файлы в продажах", ID нового файла есть. Нужно открыть новый файл (и подписаться на его изменение) из детали "Файлы в продажах" находясь в разделе Счета, т.е. сразу после формирования и сохранения отчета не переходя в другой раздел.
С открытием проблем нет (wnd_FilesDetailGridArea.grdData.grdDataOnDblClick - тут все понятно), но подписаться не получается нужно "находиться" в scr_FilesGridArea (fnFiles.SubscribeFileEvents(FileName, RecordID);).
Получается нужно послать сообщение детали в другом разделе и обработать в нем код аналогичный grdDataOnDblClick, но как получить wnd_FilesDetailGridArea из другого раздела и в случае если его еще не разу не открывали проинициализировать раздел и деталь?

Возможно есть более простое решение, подскажите.
Спасибо.

Terrasoft CRM 3.4.0.130

Нравится

1 комментарий

делал что-то похожее, подписывался из совсем другого места так:

var Self = Services.GetNewItemByUSI('wnd_FilesDetailGridArea');
	var fnFiles = Self.ComponentsByName('fnFiles');
	fnFiles.UnsubscribeFileEvents(FileID);
	fnFiles.SubscribeFileEvents(FileName, FileID);	
Показать все комментарии

Добрый день!

Продукт 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: Всё получилось!

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