(Terrasoft 2.8.9)
Здравствуйте.
Есть небольшой вопрос. В разделе "Компании" по правому клику мышки можно создать задачу для выбранной компании. При создании задачи необходимо, чтобы список контактов этой задачи ограничивался только списком контактов выбранной компании. Сейчас появляется весь список контактов.Не подскажете как правильно настроить фильтр ?
Нравится
Добрый день.
Для реализации необходимо открыть скрипт карточки редактирования задачи и привести в ней обработчик события 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.
Извините, поспешил с ответом. Работает, но некорректно.
Если создать в сеансе первую задачу на компанию, то по ней корректно определяются контакты, но при дальнейшем создании задач контакты, определенные в первой задаче сеанса появляются у всех компаний. Т.е.
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.