Метод CardHost.SelectFromCard позволяет открывать карточки в режиме выбора. Например, из скрипта открывать справочник, чтобы пользователь выбрал значения.
При вызове этого метода одним из параметров является массив Params=Array(...), который всегда вызывает вопросы.
В этом массиве передаются различные данные в саму карточку.
Для разных справочников DocsVision они разные, но всегда:
Params(0) - ID секции, из которой выбираем (если в справочнике всего одна секция, то параметр не учитывается). Для контрагентов это будет выглядеть как m_oCardHost.SelectFromCard(RefPartners.ID, "Выбор организации", Array(cPartnersDepartments)) для выбора подразделения и m_oCardHost.SelectFromCard(RefPartners.ID, "Выбор организации", Array(cPartnersEmployees)) для выбора сотрудника.
Константы - идентификаторы секций:
Public Const cPartnersDepartments As String = "{c78abded-db1c-4217-ae0d-51a400546923}"
Public Const cPartnersEmployees As String = "{1a46bf0f-2d02-4ac9-8866-5adf245921e8}"
Params(1) - ID элемента, на который справочник спозиционируется при открытии, если это возможно. В данном случае - ID заранее выбранной организации или сотрудника.
Далее уникальные параметры:
Params(2) - ID организации в дереве (если не указан Params(1) при выборе сотрудников, то встанем на эту организацию)
Params(3) - если True, то режим поиска
Params(4) - X-Path Filter на организации
Params(5) - разрешает выбор сразу нескольких организации или сотрудников
Часто используем метод CardHost.SelectFromCard в своих проектах и нередко сталкиваемся с проблемой, что параметры приходится откровенно гадать.
ОтветитьУдалитьНавскидку, помню сколько времени потратил на определение того, что возвращает метод SelectFromCard при множественном выборе сотрудников. При програмировании на C# тип определить практически нереально(что скрывается под __comObject), тем более, что им оказался VBA.Collection.
Если интересно, как я определил тип, можно почитать здесь:
http://feorex.livejournal.com/21422.html
Если бы это было описано в документации - сэкономило кучу времени.
Для универнального справочника тоже приходилось гадать параметры.
Я думаю, все коммьюнити разработчиков на DV скажет Вам огромное спасибо, если вы подробно опишите работу метода SelectFromCard для каждого справочника.
А можно при помощи SelectFromCard открыть универсальный справочник с фильтрацией записей, например, по имени?
ОтветитьУдалитьОткрывать для выбора с установленной позицией на нужном типе записей получается без проблем. Но никак не накладывается фильтр на сами записи.
Скажите, пожалуйста, это вообще для уни-справочника возможно? Или только для справочника контрагентов (его с фильтром наподобие "@Name = '...' " открывать получается).
К сожалению, никак. Можно фильтровать записи только по признаку "Не показывать при выборе" (показывать или нет такие записи).
ОтветитьУдалитьВсе пытался задать тип "внутренние документы" из справочника типов, но пока безрезультатно .(
ОтветитьУдалитькак для универсального справочника ограничить выбор записей конкретным типом?
ОтветитьУдалить(приведите пример на .net)
Меня тоже интересует, как ограничить выбор из универсального справочника. Написал функцию, но не получается настроить ограничение по определенному типу или позиционировать на конкретную запись. Что в этой функции не порядке? Окно открывается, но если добавляю параметры, выбор значение "застывает".
ОтветитьУдалитьprivate Guid showUniversalChooser(Guid selectType, String caption, Guid selectedItem)
{
Guid RefUniversal = new Guid("B2A438B7-8BB3-4B13-AF6E-F2F8996E148B");
string[] activateParams = new string[] { "{dd20bf9b-90f8-4d9a-9553-5b5f17ad724e}", string.Empty, string.Empty};
if (!selectedItem.Equals(Guid.Empty))
{
activateParams[1] = "{" + selectedItem.ToString().ToLower() + "}";
}
if(!selectType.Equals(Guid.Empty)){
activateParams[2] = "{" + selectType.ToString() + "}";
}
CardData universalDict = this.session.CardManager.GetDictionaryData(RefUniversal);
object o = this.cardControl.CardHost.SelectFromCard(universalDict.Id, caption, activateParams);
if(o == null) return Guid.Empty;
else{
string link = (string) o;
return new Guid(link);
}
}