OPENCHILDDOC — различия между версиями
Hisava (обсуждение | вклад) м (→Примеры) |
Hisava (обсуждение | вклад) м (→Смотрите также) |
||
(не показано 28 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | [[OPENCHILDDOC]] - это функция | |
+ | closeform( ( car1 )->( getform( getarea() ) ), true ) | ||
− | + | Открывает этаж документа | |
+ | |||
+ | Затем его нужно закрывать <font size=10>'''[[CloseForm]]'''</font> | ||
+ | [[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 := | + | uth2 := openchilddoc( 'UTH', '2', ( uth1 )->rgnum,, ( uth1 )->( getform( getarea() ) ) ) |
// документ YTM, уровень 1 | // документ YTM, уровень 1 | ||
− | ytm1 := [[ | + | ytm1 := [[OPENCHILDDOC]]( '[[YTM]]', '1', ~ParentForm := "", ~IsCondition := false, ~Month := [[MONTH]]( data ), ~Year := [[YEAR]]( data ) ) |
flt := [ KINDDOC = '[[YTM]]' and LVLNUM = '1' ] | flt := [ KINDDOC = '[[YTM]]' and LVLNUM = '1' ] | ||
− | ( ytm1 )->( [[ | + | ( ytm1 )->( [[SETFILTER]]( flt ) ) |
− | ( ytm1 )->( [[ | + | ( ytm1 )->( [[REFRESH]]() ) |
// открыть уровень PAZ2 ( работает, если курсор установлен на уровне PAZ1 ) | // открыть уровень PAZ2 ( работает, если курсор установлен на уровне PAZ1 ) | ||
− | paz2 := [[ | + | 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]] | [[SCADA]] | ||
− | |||
= Ошибки = | = Ошибки = | ||
− | |||
Если файл на диске был поврежден, то эта функция вам может вернуть ошибку | Если файл на диске был поврежден, то эта функция вам может вернуть ошибку | ||
Строка 82: | Строка 111: | ||
= Смотрите также = | = Смотрите также = | ||
+ | [[Corrupt index]] | ||
[[AddAll]] | [[AddAll]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Текущая версия на 14:52, 2 сентября 2020
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 )
Использование
Ошибки
Если файл на диске был поврежден, то эта функция вам может вернуть ошибку
В этом случае смотрите статью Как восстановить разрушенные данные
Предположим, adtfix не нашел ошибок
Читаем лог
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.
Удаляем индекс
После этого ошибка исчезает