2014-02-02

Работа со справочниками в DocsVision

В DocsVision имеются различные справочники. Например, справочник сотрудников, контрагентов и т.д. Также, есть универсальный справочник, в который можно добавлять свои секции и записи в них. Справочники служат для выбора отдельных записей из них и последующего использования в различных карточках.

Рассмотрим примеры работы со справочниками сотрудников, контрагентов и универсальным справочником.
Все необходимые идентификаторы предустановленных справочников и секций хранятся в DocsVision.BackOffice.CardLib.CardDefs.

// RefStaff // справочник сотрудников
// RefStaff.Employees // секция сотрудников
// RefStaff.Units // секция компаний
// RefPartners // справочник контрагентов
// RefPartners.Employees // секция сотрудников
// RefPartners.Companies // секция компаний

// описание аргументов есть в документации, они отличаются для разных справочников
// в аргументах может быть задана выбранная секция, выбранная запись, множественный или одиночный выбор и т.д.
object arguments = new object[]
{
 Type.Missing,
 Type.Missing,
 Type.Missing,
 true,
 Type.Missing,
 true
};

Object res;
// ref_guid должен содержать ид. справочника RefStaff.ID, RefPartners.ID и т.д.
var result = this.CardControl.CardHost.SelectFromCard(ref_guid, "Select ...", arguments, out res);
String str = "";
if (result != null)
{
 foreach (Object item in (List<Object>)result)
 {
  // в зависимости от справочника будут возвращены соответствующие типы данных
  str += item.ToString() + " : ";
  //MessageBox.Show((String)item);
  /*StaffEmployee se = (StaffEmployee)this.CardControl.ObjectContext.GetObject<StaffEmployee>(new Guid((String)item));
  str += se.FullName;*/
  /*StaffUnit su = (StaffUnit)this.CardControl.ObjectContext.GetObject<StaffUnit>(new Guid((String)item));
  str += su.Name;*/
  /*PartnersEmployee pe = (PartnersEmployee)this.CardControl.ObjectContext.GetObject<PartnersEmployee>(new Guid((String)item));
  str += pe.FullName;*/
  /*PartnersCompany pc = (PartnersCompany)this.CardControl.ObjectContext.GetObject<PartnersCompany>(new Guid((String)item));
  str += pc.Name;*/
  str += "\n";
 }
}
MessageBox.Show(str);

Аналогично осуществляется выбор из универсального справочника.

// конструктор справочников
String REF_DIC = "{4538149D-1FC7-4D41-A104-890342C6B4F8}";
// секция строк
String REF_DIC_ROW = "{1B1A44FB-1FB1-4876-83AA-95AD38907E24}";
// строки секции
String REF_DIC_ROW_ITEM = "{72B372B4-A33C-40A4-830D-4DB1057B6D74}";

object arguments = new object[]
{
 new Guid(REF_DIC_ROW),
 new Guid(REF_DIC_ROW_ITEM),
 false,
 false,
 false,
 false
};

var result = this.CardControl.CardHost.SelectFromCard(new Guid(REF_DIC), "Выбор записи из справочника", arguments);
Guid guid = new Guid((String)result);
BaseUniversalItem x = (BaseUniversalItem)this.CardControl.ObjectContext.GetObject<BaseUniversalItem>(guid);
MessageBox.Show(x.GetType().FullName + " : " + x.Name);