Текст программы экспорта классов из Cache в Обобщенный документ
getclass
; смотрим список всех имеющихся классов 
  New result, classname, cdef, superclass, a, i, j, Tmp1, Tmp2, Tmp3, x, y, TmpC, 
  TmpS, 
  ; получение объектной ссылки на множество экземпляров классов 
  Set result=##class(%ResultSet).%New("%ClassDefinition.ClassInfo") 
  
  Do result.Execute() 
  For Quit:result.Next()=0 Do 
  . Set classname = result.GetDataByName("Name") ; получение имени очередного 
  класса 
  . Do GetProp(classname) 
  ; формирование вспомогательных массивов Tmp2 и Tmp3 
  Set x = “” 
  For Set x = $Order(Tmp1(x)) Quit: x=“” Do ; запись в переменную x имени 
                                                                                ; 
  следующего по порядку класса из массива Tmp1 
  . Set TmpC = x, a=0, y = x, TmpS2=" " 
  . Set TmpS=Tmp1(y, “Super”) ; запись в переменную TmpS имени родительского 
  класса 
  . For Quit:TmpS=“” Do ; выход из цикла, если нет родительского класса, иначе 
  переход на верхний уровень 
                                            
  ; иерархии 
  .. Set TmpS=Tmp1(y, “Super”) Quit: TmpS = “ ” 
  .. Set a=a+1, TmpS2=TmpS, y = TmpS 
  .Set Tmp2(TmpC,TmpS2,a)= “” ; запись в массив Tmp2 имя класса, имя родительского 
  класса, номер уровня 
                                                              
  ; иерархии 
  .Set i=0 
  .If ‘$Data(Tmp3(TmpS2)) Do 
  .. Set Tmp3(TmpS2)= i, i=i+1 
  .. Quit 
  .Else Quit 
  ; формирование потока 
  Set x = “” 
  For Set x=$Order(Tmp2(x)) Quit: x=“” Do ; запись в переменную x имени следующего 
  
                                                                              ; 
  по порядку класса из массива Tmp2 
  . Set superclass = Tmp1(x, “Super”) ; запись в переменную superclass имени 
  родительского класса 
  . Set y = “” 
  . Set a = $Order(Tmp2(x, superclass, )) ; извлечение номера уровня иерархии 
  класса из Tmp2 
  . Set:TmpS="" TmpS=" " 
  . For y=$Order(Tmp1(x, “Property”, y)) Quit: y=“” Do ; запись в переменную 
  y имени 
                                                                                                   ; 
  следующего по порядку свойства класса 
  .. Set Potoc(Tmp3(superclass), “Yfeat”, “level”, a+2, y) = “” 
  Q 
   GetProp(classname) ;Функция сохранения 
  свойств заданного класса в массив Tmp1 
  if classname="" Quit:$Q "" Q 
  Set cdef=##class(%ClassDefinition).%OpenId(classname) ; получение объектной 
  ссылки на текущий класс 
  if cdef.System q 0 ; выход, если класс является системным определение свойств 
  
  Set count=cdef.Properties.Count() ; общее количество свойств 
  if count>0 Do 
  .For i=1:1:count Set Tmp1(classname, “Property”, cdef.Properties.GetAt(i).Name) 
  = “” 
  ; определение родительского класса 
  Set superclass=cdef.Super 
  Set Tmp1(classname, “Super”) = superclass 
  Do cdef.%Close() 
  Q 1