Работа с версиями документа и извещениями: различия между версиями
Евгений (обсуждение | вклад) |
|||
Строка 39: | Строка 39: | ||
'''Function''' GetFileDateTime(const Format: WideString; CopyID: Integer): WideString; | '''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. | |||
===Работа с извещениями об изменениях (ИИ)=== | ===Работа с извещениями об изменениях (ИИ)=== |
Версия от 15:46, 18 июня 2019
Работа с версиями документа
Для получения списка версий документа вы можете воспользоваться следующим запросом:
- 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) разделенных через запятую.