Работа с версиями документа и извещениями

Материал из Intermech Wiki
Перейти к навигации Перейти к поиску

Работа с версиями документа

Для получения списка версий документа вы можете воспользоваться следующим запросом:

OpenQuery(’select * from rc where doc_id=<DocID> order by version_id’)

Описание полей таблицы RC приводится в разделе 15.17 данного руководства.

Пример получения информации о версиях документа приводится в программе s5test.exe – команда Документ|Извещения и Версии|Список версий.

OpenDocVersion

Эта функция является аналогом функции OpenDocument с той лишь разницей, что дополнительно, в качестве параметра в нее передается идентификатор интересующей вас версии документа VersionID. После вызова этой функции вы можете использовать все остальные функции, описанные в разделе Функции для работы с документом, а также описанные ниже в этом разделе функции.

Синтаксис:

Procedure OpenDocVersion( DocID : Integer; VersionID : Integer );

DocID – идентификатор документа;

VersionID – идентификатор версии документа.

FileOfVersionExistsInStore

Эта функция позволяет узнать, существует ли файл версии документа в архивном хранилище. Функция возвращает 1 – если файл есть и 0 – если файла нет.

Синтаксис:

Function FileOfVersionExistsInStore : Integer;

CopyVersionToDir

Эта функция позволяет скопировать файл версии в указанную директорию. Функция возвращает полное имя скопированного файла.

Синтаксис:

Function CopyVersionToDir( const dirName : WideString ) : WideString;

GetFileDateTime

Эта функция описана в разделе 16.5.7 данного руководства. В случае использования ее после вызова функции OpenDocVersion эта функция возвращает дату и время модификации

Синтаксис:

Function GetFileDateTime(const Format: WideString; CopyID: Integer): WideString;

CreateDocVersionWithECO

Эта функция позволяет создать новую версию документа по извещению ecoDocID.


Синтаксис:

Function CreateDocVersionWithECO(ecoDocID: Integer; baseDocID: Integer; baseVersionID: Integer;

                              const VersionCode: WideString; const VersionNote: WideString;
                              const VersionFileName: WideString; VersionState: Integer;
                              const OTDRegNum: WideString; const PrevOTDRegNum: WideString;
                              const DublOTDRegNum: WideString): Integer; safecall;
 эта функция позволяет создать новую версию документа по извещению ecoDocID. 
 Параметры:
   ecoDocID - Инвентарный номер извещения, в которое новая версия должна быть включена;
   baseDocID - Инвентарный номер документа для которого необходимо создать новую версию;
   baseVersionID - номер версии документа, на основе которой будет создана новая версия;
   VersionCode - поле "Изм." для новой версии;
   VersionNote - поле "Комментарии" для новой версии документа;
   VersionFilename - имя файла новой версии документа;
   VersionState - идентификатор статуса версии для новой версии документа - это
                  поле VERSION_STATE_ID из таблицы VERSION_STATE;
   OTDRegNum - инвентарный номер ОТД;
   PrevOTDRegNum - взамен инвентарного номера ОТД;
   DublOTDRegNum - инвентарный номер дубликата;
 Эта функция возвращает:
   в случае успеха - номер созданной версии документа;
   в случае ошибки функция вернет -1. Текст ошибки будет записан в ErrorMessage.
 Рекомендуется после создания новой версии включить ее в извещение на бланке при помощи
 функции ecoAttachDocVersion2Eco (если этого не сделать, то Search сам добавит версию документа
 в извещение при его следующем открытии, но добавление может быть сделано не в нужное место, 
 например в конец ИИ).
 Пример использования этой функции с исходным текстом на Delphi добавлен в s5test.dpr.
 В s5test.dpr смотрите команду Документ/Извещения и версии/Создать новое ИИ
 До появления этой функции создать новую версию можно было только для документов, которые
 еще не были утверждены, т.е. для документов, по которым еще не было выпушено извещений и 
 неподписанных утверждающими подписями. Это можно было сделать при помощи функции 
 CreateDocVersion.

Работа с извещениями об изменениях (ИИ)

Эта группа функций позволяет получать информацию из извещений об изменениях (ИИ) документов:

  • Данные из основной надписи ИИ и данные расположенные на бланке извещения – обозначение ИИ, статус ИИ (утверждено/не утверждено), вид извещения (ИИ/ПИ/ПР), причину изменения, указание о заделе, указание о внедрении и др.
  • Данные по каждому изменению документов, включенных в извещение, из графы «Содержание изменений» - обозначение изменяемого документа, номер изменения, текст изменения, иллюстрации.

Информация из основной надписи ИИ и данных, расположенных на бланке ИИ (кроме данных из графы «Содержание изменения») получаются не непосредственно из ИИ, а из параметров архива, в котором это ИИ хранится. А в параметры ИИ в архиве информация из самого ИИ записывается при сохранении ИИ при соблюдении следующего условия: имя параметра в архиве должно совпадать с именем примитива на бланке ИИ. Т.е. для того, чтобы например информация из графы «Указание о заделе» попала в карточку извещения, необходимо, чтобы в архиве, в котором хранится ИИ, был параметр с точно таким же именем. Увидеть имена примитивов, расположенных на бланке ИИ, вы можете, открыв используемый вами бланк извещения при помощи входящей в комплект поставки программы BLANKS2.EXE.

Для получения информации из основной надписи ИИ и данных, расположенных на бланке ИИ следует использовать следующий алгоритм работы:

  • Открыть ИИ при помощи функции OpenDocument( ecoDocID ), где ecoDocID – инвентарный номер ИИ;
  • При помощи функции GetDocType узнать тип ИИ:
  • 100000 – Извещение об изменении;
  • 100001 – Предварительное извещение;
  • 100002 – Предложение об изменении.
  • При помощи функции GetFieldCount получить количество полей у этого ИИ в архиве;
  • При помощи функции GetFieldName получить имена полей ИИ;
  • При помощи функции GetFieldValue получить значения полей ИИ.

Функции могут использоваться для работы как с утвержденными ИИ, так и с неутвержденными.

Пример работы с извещениями с исходными текстами на Delphi приведен в программе s5test.exe – команда Документ|Извещения и Версии|Список версий.

OpenECO

Эта функция открывает ИИ с указанным инвентарным номером, после чего можно использовать остальные функции по доступу к содержимому ИИ приведенные ниже в этом разделе.

Синтаксис:

Procedure OpenECO( ecoDocID : Integer );

CloseECO

Эта функция закрывает ранее открытое ИИ.

Синтаксис:

Procedure CloseECO;

GetNumberOfEcoChanges

Эта функция возвращает количество документов, включенных в ИИ.

Синтаксис:

Function GetNumberOfEcoChanges : Integer;

OpenEcoChange

Эта функция открывает для последующей работы содержимое графы «Содержание изменений» для документа, включенного в извещение под порядковым номером chgNo.

Синтаксис:

Procedure OpenEcoChange( chgNo : Integer );

GetChangedDocDesignation

После выполнения функции OpenEcoChange( chgNo ) эта функция позволяет узнать обозначение документа, включенного в ИИ под порядковым номером chgNo.

Синтаксис:

Function GetChangedDocDesignation : WideString;

GetChangedDocVerID

После выполнения функции OpenEcoChange( chgNo ) эта функция позволяет узнать идентификатор версии (VERSION_ID) документа, включенного в ИИ под порядковым номером chgNo.

Синтаксис:

Function GetChangedDocVerID : Integer;

GetChangedDocVerCode

После выполнения функции OpenEcoChange( chgNo ) эта функция позволяет узнать номер изменения (код версии) документа, включенного в ИИ под порядковым номером chgNo.

Синтаксис:

Function GetChangedDocVerCode : WideString;

GetEcoChangeChildNum

Эта функция позволяет узнать количество примитивов, описывающих содержание изменений документа, включенного в ИИ под порядковым номером chgNo. Эта функция работает только после вызова OpenEcoChange( chgNo ).

Синтаксис:

Function GetEcoChangeChildNum : Integer;

OpenEcoChangeChild

После вызова OpenEcoChange( chgNo ), при помощи данной функции вы можете открыть для работы примитив под порядковым номером childNo.

Синтаксис:

Procedure OpenEcoChangeChild( childNo : Integer );

GetEcoChangeChildName

После вызова OpenEcoChangeChild( childNo ), данная функция позволяет узнать тип примитива. Эта функция может вернуть следующие значения:

’ptTextField’ – если примитив содержит только текст;

’Один текст’ – если примитив содержит только текст;

’Два текста’ – данный примитив состоит из двух текстовых примитивов;

’Один рисунок ’ – если примитив содержит кадр с OLE-контейнером;

’Два рисунка’ – если примитив содержит два кадра с OLE-контейнерами;

’Рисунок и текст’ – если примитив содержит кадр с OLE-контейнером и текстовый примитив.

Примечание: Текстовые примитивы содержат текст в формате RTF.

Синтаксис:

Function GetEcoChangeChildName : WideString;

GetChildData

При помощи этой функции вы можете получить данные, содержащиеся в примитиве ИИ, предварительно открытом при помощи вызова OpenEcoChangeChild( chgNo ). Функция возвращает значение типа OleVariant, которое представляет собой вариант-массив с данными, содержащимися в открытом примитиве. Пример работы с данными примитивов ИИ вы можете найти в исходных текстах к программе s5test.exe (входит в комплект поставки) – см. команду Документ/Извещения и версии/Список версий.

Синтаксис:

Function GetChildData : OleVariant;

GetEcoChangeChildSubChildNum

При помощи этой функции вы можете узнать сколько под-примитивов входит в примитив ИИ, открытый при помощи OpenEcoChangeChild( childNo ). Например, для примитива типа ’Два текста’ эта функция вернет 2.

Синтаксис:

Function GetEcoChangeChildSubChildNum : Integer;

OpenEcoChangeChildSubChild

При помощи этой функции вы можете открыть под-примитив с порядковым номером subChildNo, входящий в примитив ИИ, открытый ранее при помощи OpenEcoChangeChild( childNo ).

Синтаксис:

Procedure OpenEcoChangeChildSubChild( subChildNo : Integer );

GetEcoChangeChildSubChildName

Эта функция возвращает тип под-примитива, открытого при помощи OpenEcoChangeChildSubChild( subChildNo ). Эта функция возвращает одно из двух значений:

’Text field’ - если примитив содержит текст;

’OLE-container’ – если примитив является OLE-контейнером.

Синтаксис:

Function GetEcoChangeChildSubChildName : WideString;

GetSubChildData

При помощи этой функции вы можете получить данные, содержащиеся в под-примитиве ИИ, предварительно открытом при помощи вызова OpenEcoChangeChildSubChild( subChildNo ). Функция возвращает значение типа OleVariant, которое представляет собой вариант-массив с данными, содержащимися в открытом примитиве. Пример работы с данными примитивов ИИ вы можете найти в исходных текстах к программе s5test.exe (входит в комплект поставки) – см. команду Документ/Извещения и версии/Список версий.

Синтаксис:

Function GetSubChildData : OleVariant;

GetArticlesByEco

Функция возвращает набор данных (TClientDataSet) со списком версий объектов по включенным в извещение версиям документов.

Синтаксис:

function GetArticlesByEco(EcoID: integer): OleVariant;

EcoID: инвентарный номер документа - извещения.
Результат функции - набор данных с полями: ART_ID, ART_VER_ID, VART_ID - идентификатор объекта, номер версии объекта, идентификатор версии объекта.

GetVArticlesByEco

Функция возвращает строку с идентификаторами версий объектов по включенным в извещение версиям документов.

Синтаксис:

function GetVArticlesByEco(aEcoID: Integer): WideString;

aEcoID: инвентарный номер документа - извещения.
Результат функции - строка со списком идентификаторов версий объектов (VART_ID) разделенных через запятую.