Фильтр в разделе "Задачи". Terrasoft 2.8.9

(Terrasoft 2.8.9)
Здравствуйте.
Есть небольшой вопрос. В разделе "Компании" по правому клику мышки можно создать задачу для выбранной компании. При создании задачи необходимо, чтобы список контактов этой задачи ограничивался только списком контактов выбранной компании. Сейчас появляется весь список контактов.Не подскажете как правильно настроить фильтр ?

Нравится

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

Добрый день.

Для реализации необходимо открыть скрипт карточки редактирования задачи и привести в ней обработчик события OnDataChange к такому виду:

procedure OnDataChange(FieldName: string);
  var T: TADOQuery;
  begin
    if (FieldName = 'fCompany_id') then
    begin
      if fCompany_ID = null then
         T:=OpenSQL('SELECT ID, Name FROM cm_Contact ORDER BY Name')
      else
         T:=OpenSQL('SELECT ID, Name FROM cm_Contact WHERE Company_ID='+IntToStr(fCompany_ID)+' ORDER BY Name');
      edtContact.ListSource.DataSet:=T;
    end;
  end;

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег, спасибо большое ! Все работает:smile:

Извините, поспешил с ответом. Работает, но некорректно.
Если создать в сеансе первую задачу на компанию, то по ней корректно определяются контакты, но при дальнейшем создании задач контакты, определенные в первой задаче сеанса появляются у всех компаний. Т.е.
1-я задача в сеансе:
Компания "Омега" - контакт Пупкин (правильно).
2-я задача в сеансе:
Компания "Омега-2" - контакт Пупкин (неправильно, не такого контакта).
3-я задача в сеансе:
Компания "Омега-3" - контакт Пупкин (неправильно, не такого контакта).

Действительно, я не учёл, что при открытии карточки OnDataChange не срабатывает...

В таком случае, аналогичный код необходимо добавить и в обработку события OnFormShow. Примерно так:

procedure OnFormShow;
  var Q: TADOQuery;
     ... 
  begin
    if fCompany_ID = null then
      Q:=OpenSQL('SELECT ID, Name FROM cm_Contact ORDER BY Name')
    else
      Q:=OpenSQL('SELECT ID, Name FROM cm_Contact WHERE Company_ID='+IntToStr(fCompany_ID)+' ORDER BY Name');
    edtContact.ListSource.DataSet:=Q;
    ...
  end;

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Проверил - работает :). Спасибо огромное :)

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