OPENCHILDDOC

Материал из Фабиус wiki
Перейти к: навигация, поиск

OPENCHILDDOC - это функция

closeform( ( car1 )->( getform( getarea() ) ), true )
Открывает этаж документа
Затем его нужно закрывать CloseForm

OPENCHILDDOC( 1.kinddoc, 2.lvlnum, 3.parent, 4.SaveStatus, 5.ParentForm, 6.mModFilter, 7.IsCondition, 8.Month, 9.Year, 10.Day, 11.TableToReplace, 12.DisFormEvent, 13.OpenPrevLvl, 14.IsNewForm, 15.OpPath, 16.RefPath, 17.closefrm, 18.CurLevel, 19.FormClass, 20.Access )

ОТКРЫТИЕ ЭТАЖА ДОКУМЕНТА: поиск по Kinddoc и LvlNum среди ранее открытых этажей;

 если найден: возвращение основной таблицы открытого этажа,
 если не найден: создание формы док-та,открытие и возвращение таблицы,

SaveStatus=True - сохранение текущих установок интерпретатора (WorkArea,...) по умолчанию OpenChildDoc() меняет текущую рабочую область! При указании Parent и mModFilter=True на открываемый этаж накладывается фильтр по Parent ЕСЛИ PARENT ПУСТОЙ, ТО ФИЛЬТР НЕ НАКЛАДЫВАЕТСЯ !!! <ParentForm>-предыдущая(родительская) форма(или таблица),которая исп-ся для поиска открываемой формы(таблицы) в списке ранее открытых форм Если <ParentForm>=nil, за ParentForm принимается форма, из которой вызван OpenChildDoc Если <ParentForm>="", то OpenChildDoc всегда создает новую форму(таблицу),необходимо указание месяца и года ParentForm используется для определения месяца и года открываемой таблицы(при отсутствии Month,Year),кеширования открытых этажей док-та IsCondition - True при открытии этажа док-та выполняется поиск подходящего представления, иначе исп-ся любое представление Month,Year,Day - месяц,год и день открываемой таблицы;следует указывать только в случае:

1. отсутствия ParentForm и если нет текущей формы (например, пр-ма находится в описании пункта вертикального меню) 
2. при необходимости открытия формы за иной период,чем текущая

ПРИ ОТКРЫТИИ ФОРМЫ ЗА ИНОЙ ПЕРИОД,ЧЕМ ТЕКУЩАЯ НЕОБХОДИМО УКАЗАТЬ:<ParentForm>=""

IsNewForm - True всегда создание новой формы(нет поиска среди ранее открытых) 
OpPath - путь на базу данных 
RefPath - путь на спр-ки 
closefrm закрывать форму с таким же Folder(при указании OpPath)
CurLevel - порядковый номер формы(если не указан,текущая форма+1)

Примеры

 openchilddoc( 'UTM', 'R', rgnum )
 OPENCHILDDOC( 'EOR', '2', DOCS1->RGNUM )
  uth2 := openchilddoc( 'UTH', '2', ( uth1 )->rgnum,, ( uth1 )->( getform( getarea() ) ) )
 // документ YTM, уровень 1
 ytm1 := OPENCHILDDOC( 'YTM', '1', ~ParentForm := "", ~IsCondition := false, ~Month := MONTH( data ), ~Year := YEAR( data )  )
 flt := [ KINDDOC = 'YTM' and LVLNUM = '1' ]
 ( ytm1 )->( SETFILTER( flt ) )
 ( ytm1 )->( REFRESH() )
 // открыть уровень PAZ2 ( работает, если курсор установлен на уровне PAZ1 )
 paz2 := OPENCHILDDOC( 'PAZ', '2', RGNUM )
OPENCHILDDOC( 'U_N', '1', ~ParentForm := "", ~IsCondition := false, ~Month := Month( data ), ~Year := Year( data ) )
 openchilddoc( 'EGA', '1', ~parentform := "", ~iscondition := false, ~month := month( data ), ~year := year( data ) )
closeform( ( ega )->( getform( getarea() ) ), true )

Использование

SCADA

Ошибки

Если файл на диске был поврежден, то эта функция вам может вернуть ошибку

25-12-2015 10-30-53.png


В этом случае смотрите статью Как восстановить разрушенные данные

Предположим, adtfix не нашел ошибок

25-12-2015 10-59-42.png

Читаем лог

 Advantage Table Repair Utility ver 1.6
 Started on 25.12.2015 at 17:57:22
 *** Begin ADT Check on: f:\FABIUS\Temp\1\DOCP1115.ADT ***
   Memo file check on: f:\FABIUS\Temp\1\DOCP1115.ADM
   Memo blocks exist without a corresponding record.
   This is not corruption, i.e. not an error. You can use Advantage Data Architect
   or AdsPackTable to pack the table and release these blocks.
   These blocks account for 27.69% of the total file size.
   DOCP1115.ADM passed ADM check.
   DOCP1115.ADT passed ADT check.

Упаковываем таблицу

 Advantage Table Repair Utility ver 1.6
 Started on 25.12.2015 at 18:09:53
 *** Begin ADT Check on: f:\FABIUS\Temp\2\DOCP1115.ADT ***
   Memo file check on: f:\FABIUS\Temp\2\DOCP1115.ADM
   DOCP1115.ADM passed ADM check.
   DOCP1115.ADT passed ADT check.

Сервис - Восстановление - Разрушенных баз - Документов

Исправление некорректных значений

я Администратор - Данные - Восстановление - Разрушенных баз данных - Исправление некорректных значений

7038 Invalid record number

Problem: Attempted to read a record and the record number is greater than the number of records in the file. This error often results from using an index that contains more keys than the table has records. This can occur if a Pack or Zap is performed on the table when the index file(s) was closed.

Solution: Reposition to a valid record number. Reindex the index(es) that contain more keys than the table has records.

Удаляем индекс

После этого ошибка исчезает

25-12-2015 11-32-03.png

Смотрите также

Corrupt index

AddAll