Библиотека работы с ONIX XML
[ Андрей Чудин ]
Версия 2.0 от xx.05.2004
Библиотека onixxml Library предназначена для работы с файлами в формате ONIX XML,
предоставляя удобный программный интерфейс к данным.
С ее помощью возможна загрузка данных из файла ONIX XML, их изменеие (добавление, удаление), а также
сохранение в файл.
Библиотека содержит в себе COM объект 'onixxml.TONIXXML', в который встроен парсер для десериализации
данных ONIX XML. Таким образом, наличие дополнительных сторонних библиотек не требуется.
Изменения
- версия 1.1 : добавлена секция коммерческих документов
- версия 1.2 : снято ограничение single instance
- версия 2.0 :при наличии в объекте коммерческих документов создается файл Bookcommerce XML, при отсутствии - ONIX XML.
Добавлено множество полей, см. onixxml.idl в комплекте с библиотекой
Ограничения версии 1.1
- Нет доступа к секции коммерческих документов (накладные, заказы etc). Появится в версии 1.1 в ближайшее время.
- Число авторов (Contributor) у издания ограничено одним
Регистрация
- Регистрация библиотеки выполняется командой regsvr32 "[путь к библиотеке\]onixxml.dll". Для регистрации необходимы права локального администратора.
- При использовании в Delphi рекомендуется добавить исключение XMLSerializerException в список игнорируемых.
Степень поддержки стандарта. Элемент Product
В настоящей версии(1.2) степень поддержки стандарта ограничена, но поддерживает основные, необходимые на практике поля данных.
Схема стандарта представлена в документе Графическое представление ONIX DTD
Список полей элемента Product:
{ ONIX Group PR1 Record reference number and type }
RecordReferencestring
NotificationTypeInteger
RecordSourceTypeInteger
RecordSourceIdentifierTypeInteger
RecordSourceIdentifierstring
{ ONIX Group PR2 Product numbers }
ISBN
EAN13
PublisherProductNostring
{ ONIX Group PR3 Product form }
ProductForm
{ ONIX Group PR7 Title }
DistinctiveTitle
TranslationOfTitle
{ ONIX Group PR8 Authorship }
Contributor
{ ONIX Group PR11 Language }
LanguageOfText
OriginalLanguage
{ ONIX Group PR12 Pagination and other content }
NumberOfPages
IllustrationsNote
{ ONIX Group PR19 Publisher }
CityOfPublication
ImprintName
PublisherName
{ ONIX Group PR20 Publishing dates }
PublicationDate
{ ONIX Group PR22 Dimensions }
Thicknes
Height
Width
Weight
{ ONIX Group PR15 Descriptions and other supporting text }
MainDescription
{ ONIX Group PR16 Links to image/audio/video files }
CoverImageLinkTypeCode
CoverImageLink
{ ONIX Group PR24 Supplier, availability and prices }
SupplyDetail
{ ONIX Group PR13 Subject }
Subjects { not implemented yet }
Расширение стандарта. ONIX-Z section
Для расширения стандарта ONIX использована предназначенная для этого логическая секция Z.
В ней расположены коммерческие документы - CommercialDocuments.
Более подробная документация будет размещена на сайте позднее. Пока же все примеры в приводимых ниже исходниках.
Производительность
Загрузка XML документа в объект дает вполне приемлемую производительность. Тестирование дало следующие результаты (сопоставление с MS XML Parser).
Документ: формат ONIX XML размером 10 мб.
Системная конфигурация: Celeron 450 / 256 / Windows 2000prof
парсер | приблизительное время загрузки |
MS XML Parser 2.6 синхронная загрузка без проверки состоятельности | ~6 сек |
MS XML Parser 2.6 синхронная загрузка с проверкой состоятельности | ~11 сек |
Парсер onixxml Library | 8,5 сек |
Библиотека загружает данные в синхронном режиме. Она не использует DTD или схемы.
При загрузке проводится проверка правильности (well-formed) и частично - состоятельности (valid). При
нарушении правильности документа парсер выдаст соответствующее исключение и прекратит загрузку.
Проверка состоятельности определяется тем, что при загрузке данные загружаются в свойства объекта.
Если одноименное элементу XML документа свойство не найдено, то генерируется исключение. Так как
свойства объекта типизированы и при загрузке происходит преобразование текстовых значений,
то ошибки, здесь возникающие, говорят о нарушении состоятельности документа. Таким образом,
интерфейс нашего объекта играет роль XML схемы, что очень удобно. Более того, эти проверки могут быть расширены
дополнительным кодом в обработчиках свойств объекта.
Пример клиентского кода
Пример клиентского кода на Delphi
Untitled
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TfONIXXMLClientTest = class(TForm)
Memo: TMemo;
eXMLSourceFile: TEdit;
Label1: TLabel;
Label2: TLabel;
eXMLTargetFile: TEdit;
bTest: TButton;
bCreateOrder: TButton;
procedure bTestClick(Sender: TObject);
procedure bCreateOrderClick(Sender: TObject);
private
procedure log(const FieldName: string; Value: string);
function CheckIfClientExists(INN: string): boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
fONIXXMLClientTest: TfONIXXMLClientTest;
implementation
uses ComObj, onixxml_constants;
{$R *.DFM}
{
Загружает прайслист ONIX XML из файла, копирует некоторые позиции
в окно протокола для визуальной проверки.
Затем удаляет все позиции и добавляет новую позицию в прайслист.
Сохраняет прайслист в файл под другим именем.
прудусловия
- файл eXMLSourceFile.Text должен существовать в каталоге программы
}
procedure TfONIXXMLClientTest.bTestClick(Sender: TObject);
var
onix, onix2, Product, Subject, Series: OleVariant;
i: integer;
const
OurINN = '7701023022'; // предположим, это наш ИНН
begin
{ создаем OLE объект }
onix := CreateOleObject('onixxml.TONIXXML');
{ загружаем прайслист }
onix.LoadFromFile(ExtractFilePath(ParamStr(0)) + eXMLSourceFile.Text);
log('File Loaded From', ExtractFilePath(ParamStr(0)) + eXMLTargetFile.Text );
{ копируем данные заголовка в окно протокола }
log('FromSAN', onix.Header.FromSAN); // от кого (ИНН)
log('FromCompany', onix.Header.FromCompany);
log('FromPerson', onix.Header.FromPerson);
log('ToSAN', onix.Header.ToSAN); // кому (ИНН)
{ проверяем известен ли нам отправитель }
if not CheckIfClientExists( onix.Header.FromSAN ) then
raise Exception.Create('Данный документ адресован не нам');
{ проверяем нам ли адресован документ }
// if onix.Header.ToSAN <> OurINN then
//.. raise Exception.Create('Данный документ адресован не нам');
{ число позиций }
log('Products Count', IntToStr(onix.Products.Count));
{ артикул и цена по позициям }
for i := 0 to onix.Products.Count-1 do
begin
log(' - product ' + IntToStr(i) + ' RecordReference',
onix.Products.Item[i].RecordReference);
log(' SupplyDetail.Price.PriceAmount',
onix.Products.Item[i].SupplyDetail.Price.PriceAmount);
// log('',onix.Products.Item[i].Series.Item[i].TitleOfSeries);
end;
{ Удалим все позиции }
for i := onix.Products.Count-1 downto 0 do onix.Products.Delete(i);
{ создаем новую запись от имени издательства: артикул поставщика == артикул издателя }
Product := onix.Products.Add;
{ 1. Поля идентификации издания и товара }
Product.RecordReference := '2002-fin1'; // артикул поставщика
Product.RecordSourceIdentifier := '7701023232'; // ИНН создателя записи (издателя)
Product.PublisherProductNo := Product.RecordReference;// артикул издателя
{ 2. Данные об издании }
Product.NumberOfPages := 447;
Product.PublisherName := 'Терра';
Product.PublicationDate := '1996';
Product.MainDescription :=
'Это подлинно оригинальное, значительное произведение о жизни и творчестве...';
Product.Contributors.Add;
Product.Contributors.Item[0].KeyNames := 'Черкасов-Георгиевский';
Product.Contributors.Item[0].NamesBeforeKey := 'В.';
{ 3. Коммерческие данные }
Product.SupplyDetail.PackQuantity := '12'; // число в упаковке
Product.SupplyDetail.Price.TaxRatePercent1 := '10'; // НДС
Product.SupplyDetail.Price.PriceAmount := '199'; // Цена
Product.SupplyDetail.Price.CurrencyCode := 'rubl'; // в рублях
{классификатор}
Subject := Product.Subjects.Add;
Subject.SubjectSchemeName := 'SubjectSchemeName';
Subject.SubjectCode := 'SubjectCode';
Subject.SubjectSchemeIdentifier := 24;
{ серии }
Series := Product.Series.Add;
Series.TitleOfSeries := 'TitleOfSeries';
Series.NumberWithinSeries := 'NumberWithinSeries';
Product.InitialPrintRun := 60000;
Product.BookFormDetail := 'кожаный перплет (кожа с задницы БС)';
Product.Subtitle := 'Subtitle';
Product.InitialPrintRun := 5000;
{ сохраняем прайслист }
onix.SaveToFile(ExtractFilePath(ParamStr(0)) + eXMLTargetFile.Text);
log('File Saved To', ExtractFilePath(ParamStr(0)) + eXMLTargetFile.Text );
end;
{ Записывает в окно протокола заданные значения }
procedure TfONIXXMLClientTest.log(const FieldName: string; Value: string);
begin
memo.Lines.Add(FieldName + ' = ' + Value);
end;
{ здесь может быть код проверки корректности ИНН отправителя документа ONIX }
function TfONIXXMLClientTest.CheckIfClientExists(INN: string): boolean;
begin
Result := true;
end;
{
Создает объект заказа ONIX, вносит контрагентов и одну позицию
Сохраняет прайслист в файл.
}
procedure TfONIXXMLClientTest.bCreateOrderClick(Sender: TObject);
var
onix, CommercialDocument, Contragent, Position, Tax: OleVariant;
const
msCorp_INN = '7701023022';
linuxxxInc_INN = '7701023023';
begin
{ создаем OLE объект }
onix := CreateOleObject('onixxml.TONIXXML');
{ заголовок - Заполнять обязательно ! }
onix.Header.FromSAN := msCorp_INN; // от кого (ИНН)
onix.Header.FromCompany := 'Linuxxxx inc';
onix.Header.ToSAN := linuxxxInc_INN; // кому (ИНН)
onix.Header.FromPerson := 'Microsoft corp';
onix.Header.MessageDate := DateToStr(Date);
onix.Header.FromPerson := 'user name xxx';
{
Раздел CommercialDocuments является расширением
страндарта ONIX XML, предложенным межведомственной
экспертной комиссией при МПТР России по выработке
единой государственной политики в информационном
развитии издательского, книготоргового и библиотечного дела
standards.biblio-globus.ru
}
{ создаем новый документ }
CommercialDocument := onix.CommercialDocuments.Add;
CommercialDocument.DocumentType := dtOrder; // документ - заказ
CommercialDocument.Number := '1abc'; // номер док-та
CommercialDocument.Date := DateToStr(date); // дата документа
CommercialDocument.ContractNum := '1a / 01.01.2003'; // номер контракта
{ добавляем контрегентов }
Contragent := CommercialDocument.Contragents.Add;
Contragent.Role := crSaler; // продавец
Contragent.Name := 'Microsoft corp';
Contragent.Address := 'Richmond';
Contragent := CommercialDocument.Contragents.Add;
Contragent.Role := crBuyer; // покупатель
Contragent.Name := 'Linuxxxx inc';
Contragent.Address := 'Somewhere in space';
{ создаем позицию в документе }
Position := CommercialDocument.Positions.Add;
Position.RecordReference := '98664232'; // артикул
Position.Amount := 1; // количество
Position.Price := 171; // цена
Position.RecommendedPrice := 206; // розничная цена
Position.EAN13 := '9785845902504';
Position.ISBN := '5-8459-0250-9';
Position.ProductName := 'B.Gates / MS Windows';
{ НДС на добавленную позицию }
Tax := Position.Taxes.Add;
Tax.TaxType := ttAVT; // НДС
Tax.Rate := 10; // 10%
{ сохраняем прайслист }
onix.SaveToFile(ExtractFilePath(ParamStr(0)) + 'order.xml');
log('File Saved To', ExtractFilePath(ParamStr(0)) + 'order.xml' );
end;
end.
1С Сохраняет пустой документ в файл. Как можно понять, весть код по работе с компонентом тождественен функциональности, показанной в примере на Delphi.
Перед использованием необходима регистрация компонента в системе
Пример клиентского кода 1C
MIDL интерфейс библиотеки
Свойства Index у интерфейсов предназначены только для внутреннего использования.
MIDL интерфейс библиотеки версии 1.2
Untitled
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: onixxml.dll
[
uuid(48637B3D-1C92-4C2D-981A-EDED6E6C5629),
version(1.1),
helpstring("onixxml Library - coded by Xelby - www.bookresearch.ru")
]
library onixxml
{
// TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");
// Forward declare all types defined in this typelib
interface ITONIXXML;
interface IOnixHeader;
interface IOnixProducts;
interface IOnixProduct;
interface IOnixContributor;
interface IOnixSupplyDetail;
interface IOnixPrice;
interface IONIXContributors;
interface IOnixCommercialDocuments;
interface IOnixCommercialDocument;
interface IOnixContragent;
interface IOnixPosition;
interface IOnixTaxes;
interface IOnixTax;
interface IOnixContragents;
interface IOnixPositions;
[
odl,
uuid(21BF2586-3426-45F4-8CB6-C51A5664026F),
version(1.0),
helpstring("Dispatch interface for TONIXXML Object"),
dual,
oleautomation
]
interface ITONIXXML : IDispatch {
[id(0x00000003), propget]
HRESULT Header([out, retval] IOnixHeader** Value);
[id(0x00000004)]
HRESULT LoadFromFile([in] BSTR FileName);
[id(0x00000001), propget]
HRESULT Products([out, retval] IOnixProducts** Value);
[id(0x00000002)]
HRESULT SaveToFile([in] BSTR FileName);
[id(0x00000005), propget]
HRESULT CommercialDocuments([out, retval] OnixCommercialDocuments** Value);
};
[
uuid(FFC7438C-617C-4570-8ABF-B2456E7FBF54),
version(1.0),
helpstring("TONIXXML Object")
]
coclass TONIXXML {
[default] interface ITONIXXML;
};
[
odl,
uuid(5E13465B-E924-4DEF-8647-6E6E3B2E753D),
version(1.0),
dual,
oleautomation
]
interface IOnixHeader : IDispatch {
[id(0x00000001), propget]
HRESULT FromSAN([out, retval] BSTR* Value);
[id(0x00000001), propput]
HRESULT FromSAN([in] BSTR Value);
[id(0x00000003), propget]
HRESULT FromCompany([out, retval] BSTR* Value);
[id(0x00000003), propput]
HRESULT FromCompany([in] BSTR Value);
[id(0x00000004), propget]
HRESULT FromPerson([out, retval] BSTR* Value);
[id(0x00000004), propput]
HRESULT FromPerson([in] BSTR Value);
[id(0x00000005), propget]
HRESULT ToSAN([out, retval] BSTR* Value);
[id(0x00000005), propput]
HRESULT ToSAN([in] BSTR Value);
[id(0x00000006), propget]
HRESULT ToCompany([out, retval] BSTR* Value);
[id(0x00000006), propput]
HRESULT ToCompany([in] BSTR Value);
[id(0x00000007), propget]
HRESULT ToPerson([out, retval] BSTR* Value);
[id(0x00000007), propput]
HRESULT ToPerson([in] BSTR Value);
[id(0x00000008), propget]
HRESULT MessageDate([out, retval] BSTR* Value);
[id(0x00000008), propput]
HRESULT MessageDate([in] BSTR Value);
[id(0x00000009), propget]
HRESULT MessageNumber([out, retval] BSTR* Value);
[id(0x00000009), propput]
HRESULT MessageNumber([in] BSTR Value);
[id(0x0000000a), propget]
HRESULT SentDate([out, retval] BSTR* Value);
[id(0x0000000a), propput]
HRESULT SentDate([in] BSTR Value);
[id(0x0000000b), propget]
HRESULT MessageNote([out, retval] BSTR* Value);
[id(0x0000000b), propput]
HRESULT MessageNote([in] BSTR Value);
[id(0x0000000c), propget]
HRESULT MessageRepeat([out, retval] BSTR* Value);
[id(0x0000000c), propput]
HRESULT MessageRepeat([in] BSTR Value);
[id(0x0000000d), propget]
HRESULT DefaultLanguageOfText([out, retval] BSTR* Value);
[id(0x0000000d), propput]
HRESULT DefaultLanguageOfText([in] BSTR Value);
};
[
uuid(CCD604B8-5B08-4D63-877B-12E9FA6B4733),
version(1.0)
]
coclass OnixHeader {
[default] interface IOnixHeader;
};
[
odl,
uuid(EB99AB09-65E8-41B6-A173-F6FEFDF9305F),
version(1.0),
dual,
oleautomation
]
interface IOnixProducts : IDispatch {
[id(0x00000001), propget]
HRESULT Count([out, retval] long* Value);
[id(0x00000002), propget]
HRESULT Item(
[in] long Index,
[out, retval] IOnixProduct** Value);
[id(0x00000003)]
HRESULT Add([out, retval] IOnixProduct** Product);
[id(0x00000004)]
HRESULT Delete([in] long Index);
};
[
uuid(1D741C0D-FE4C-4F1E-A43E-31BCC2110129),
version(1.0)
]
coclass OnixProducts {
[default] interface IOnixProducts;
};
[
odl,
uuid(03D0E9EB-8FD2-49D7-B59A-F597EF5F7122),
version(1.0),
dual,
oleautomation
]
interface IOnixProduct : IDispatch {
[id(0x00000001), propget]
HRESULT RecordReference([out, retval] BSTR* Value);
[id(0x00000001), propput]
HRESULT RecordReference([in] BSTR Value);
[id(0x00000002), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000002), propput, hidden]
HRESULT Index([in] long Value);
[id(0x00000003), propget]
HRESULT NotificationType([out, retval] long* Value);
[id(0x00000003), propput]
HRESULT NotificationType([in] long Value);
[id(0x00000004), propget]
HRESULT DistinctiveTitle([out, retval] BSTR* Value);
[id(0x00000004), propput]
HRESULT DistinctiveTitle([in] BSTR Value);
[id(0x00000005), propget]
HRESULT EAN13([out, retval] BSTR* Value);
[id(0x00000005), propput]
HRESULT EAN13([in] BSTR Value);
[id(0x00000006), propget]
HRESULT ISBN([out, retval] BSTR* Value);
[id(0x00000006), propput]
HRESULT ISBN([in] BSTR Value);
[id(0x00000007), propget]
HRESULT PublisherName([out, retval] BSTR* Value);
[id(0x00000007), propput]
HRESULT PublisherName([in] BSTR Value);
[id(0x00000008), propget]
HRESULT LanguageOfText([out, retval] BSTR* Value);
[id(0x00000008), propput]
HRESULT LanguageOfText([in] BSTR Value);
[id(0x00000009), propget]
HRESULT ProductForm([out, retval] BSTR* Value);
[id(0x00000009), propput]
HRESULT ProductForm([in] BSTR Value);
[id(0x0000000a), propget]
HRESULT NumberOfPages([out, retval] BSTR* Value);
[id(0x0000000a), propput]
HRESULT NumberOfPages([in] BSTR Value);
[id(0x0000000b), propget]
HRESULT MainDescription([out, retval] BSTR* Value);
[id(0x0000000b), propput]
HRESULT MainDescription([in] BSTR Value);
[id(0x0000000c), propget]
HRESULT PublicationDate([out, retval] BSTR* Value);
[id(0x0000000c), propput]
HRESULT PublicationDate([in] BSTR Value);
[id(0x0000000d), propget]
HRESULT IllustrationsNote([out, retval] BSTR* Value);
[id(0x0000000d), propput]
HRESULT IllustrationsNote([in] BSTR Value);
[id(0x0000000e), propget]
HRESULT Thickness([out, retval] BSTR* Value);
[id(0x0000000e), propput]
HRESULT Thickness([in] BSTR Value);
[id(0x0000000f), propget]
HRESULT ImprintName([out, retval] BSTR* Value);
[id(0x0000000f), propput]
HRESULT ImprintName([in] BSTR Value);
[id(0x00000010), propget]
HRESULT RecordSourceType([out, retval] long* Value);
[id(0x00000010), propput]
HRESULT RecordSourceType([in] long Value);
[id(0x00000011), propget]
HRESULT RecordSourceIdentifierType([out, retval] long* Value);
[id(0x00000011), propput]
HRESULT RecordSourceIdentifierType([in] long Value);
[id(0x00000012), propget]
HRESULT RecordSourceIdentifier([out, retval] BSTR* Value);
[id(0x00000012), propput]
HRESULT RecordSourceIdentifier([in] BSTR Value);
[id(0x00000013), propget]
HRESULT PublisherProductNo([out, retval] BSTR* Value);
[id(0x00000013), propput]
HRESULT PublisherProductNo([in] BSTR Value);
[id(0x00000014), propget]
HRESULT CoverImageLinkTypeCode([out, retval] BSTR* Value);
[id(0x00000014), propput]
HRESULT CoverImageLinkTypeCode([in] BSTR Value);
[id(0x00000015), propget]
HRESULT CoverImageLink([out, retval] BSTR* Value);
[id(0x00000015), propput]
HRESULT CoverImageLink([in] BSTR Value);
[id(0x00000016), propget]
HRESULT Contributors([out, retval] ONIXContributors** Value);
[id(0x00000017), propget]
HRESULT SupplyDetail([out, retval] OnixSupplyDetail** Value);
};
[
uuid(94B1EF0C-8C2C-4F07-B0B4-3B9BE367B462),
version(1.0)
]
coclass OnixProduct {
[default] interface IOnixProduct;
};
[
odl,
uuid(5FB67DCE-0805-43DA-A742-C9C6AEDEE909),
version(1.0),
helpstring("сведения об авторе"),
dual,
oleautomation
]
interface IOnixContributor : IDispatch {
[id(0x00000001), propget]
HRESULT ContributorSequenceNumber([out, retval] long* Value);
[id(0x00000001), propput]
HRESULT ContributorSequenceNumber([in] long Value);
[id(0x00000002), propget]
HRESULT KeyNames([out, retval] BSTR* Value);
[id(0x00000002), propput]
HRESULT KeyNames([in] BSTR Value);
[id(0x00000003), propget]
HRESULT NamesBeforeKey([out, retval] BSTR* Value);
[id(0x00000003), propput]
HRESULT NamesBeforeKey([in] BSTR Value);
[id(0x00000004), propget]
HRESULT PersonName([out, retval] BSTR* Value);
[id(0x00000004), propput]
HRESULT PersonName([in] BSTR Value);
[id(0x00000005), propget]
HRESULT PersonNameInverted([out, retval] BSTR* Value);
[id(0x00000005), propput]
HRESULT PersonNameInverted([in] BSTR Value);
[id(0x00000006), propget]
HRESULT ContributorRole([out, retval] BSTR* Value);
[id(0x00000006), propput]
HRESULT ContributorRole([in] BSTR Value);
[id(0x00000007), propget]
HRESULT BiographicalNote([out, retval] BSTR* Value);
[id(0x00000007), propput]
HRESULT BiographicalNote([in] BSTR Value);
[id(0x00000008), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000008), propput, hidden]
HRESULT Index([in] long Value);
};
[
uuid(81C821D2-6512-41B0-8A60-02F569A32B41),
version(1.0)
]
coclass OnixContributor {
[default] interface IOnixContributor;
};
[
odl,
uuid(6E18806A-13A8-48BC-87DC-E76836FE7BAB),
version(1.0),
dual,
oleautomation
]
interface IOnixSupplyDetail : IDispatch {
[id(0x00000001), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000001), propput, hidden]
HRESULT Index([in] long Value);
[id(0x00000002), propget]
HRESULT SupplierName([out, retval] BSTR* Value);
[id(0x00000002), propput]
HRESULT SupplierName([in] BSTR Value);
[id(0x00000003), propget]
HRESULT AvailabilityCode([out, retval] BSTR* Value);
[id(0x00000003), propput]
HRESULT AvailabilityCode([in] BSTR Value);
[id(0x00000005), propget]
HRESULT PackQuantity([out, retval] long* Value);
[id(0x00000005), propput]
HRESULT PackQuantity([in] long Value);
[id(0x00000006), propget]
HRESULT Price([out, retval] OnixPrice** Value);
};
[
uuid(843F0B68-5D71-48F7-B958-47DB1E2805F3),
version(1.0)
]
coclass OnixSupplyDetail {
[default] interface IOnixSupplyDetail;
};
[
odl,
uuid(3522F7E6-58EF-47CE-AB1C-90968EFB9D2B),
version(1.0),
dual,
oleautomation
]
interface IOnixPrice : IDispatch {
[id(0x00000001), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000001), propput, hidden]
HRESULT Index([in] long Value);
[id(0x00000002), propget]
HRESULT CurrencyCode([out, retval] BSTR* Value);
[id(0x00000002), propput]
HRESULT CurrencyCode([in] BSTR Value);
[id(0x00000004), propget]
HRESULT PriceAmount([out, retval] BSTR* Value);
[id(0x00000004), propput]
HRESULT PriceAmount([in] BSTR Value);
[id(0x00000005), propget]
HRESULT PriceTypeCode([out, retval] BSTR* Value);
[id(0x00000005), propput]
HRESULT PriceTypeCode([in] BSTR Value);
[id(0x00000006), propget]
HRESULT TaxRatePercent1([out, retval] BSTR* Value);
[id(0x00000006), propput]
HRESULT TaxRatePercent1([in] BSTR Value);
};
[
uuid(BBDB535A-8CA5-4CA8-BBEE-F0A674AD9437),
version(1.0)
]
coclass OnixPrice {
[default] interface IOnixPrice;
};
[
odl,
uuid(10F75F50-E16F-4C2E-8ADE-BC50A3086A9C),
version(1.0),
helpstring("сведения об авторах"),
dual,
oleautomation
]
interface IONIXContributors : IDispatch {
[id(0x00000001), propget]
HRESULT Count([out, retval] long* Value);
[id(0x00000002), propget]
HRESULT Item(
[in] long Index,
[out, retval] IOnixContributor** Value);
[id(0x00000003)]
HRESULT Add([out, retval] IOnixContributor** Contributor);
[id(0x00000004)]
HRESULT Delete([in] long Index);
[id(0x00000006), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000006), propput, hidden]
HRESULT Index([in] long Value);
};
[
uuid(E5AC6E2E-870C-4ADC-A94D-834B6F7EDC94),
version(1.0)
]
coclass ONIXContributors {
[default] interface IONIXContributors;
};
[
odl,
uuid(4513A6A3-BD9F-481B-BFC9-1595A69778A2),
version(1.0),
dual,
oleautomation
]
interface IOnixCommercialDocuments : IDispatch {
[id(0x00000001), propget]
HRESULT Count([out, retval] long* Value);
[id(0x00000002), propget]
HRESULT Item(
[in] long Index,
[out, retval] IOnixCommercialDocument** Value);
[id(0x00000003)]
HRESULT Add([out, retval] IOnixCommercialDocument** Value);
[id(0x00000004)]
HRESULT Delete([in] long Index);
};
[
uuid(92DA7229-3B4B-43FC-9DC4-80D34303A5DC),
version(1.0)
]
coclass OnixCommercialDocuments {
[default] interface IOnixCommercialDocuments;
};
[
odl,
uuid(029CAF3C-D5E7-4BA8-A63B-F25456A013B9),
version(1.0),
dual,
oleautomation
]
interface IOnixCommercialDocument : IDispatch {
[id(0x00000002), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000002), propput, hidden]
HRESULT Index([in] long Value);
[id(0x00000003), propget, helpstring("номер документа")]
HRESULT Number([out, retval] BSTR* Value);
[id(0x00000003), propput, helpstring("номер документа")]
HRESULT Number([in] BSTR Value);
[id(0x00000004), propget, helpstring("тип документа")]
HRESULT DocumentType([out, retval] TOnixDocumentType* Value);
[id(0x00000004), propput, helpstring("тип документа")]
HRESULT DocumentType([in] TOnixDocumentType Value);
[id(0x00000005), propget, helpstring("Дата документа")]
HRESULT Date([out, retval] BSTR* Value);
[id(0x00000005), propput, helpstring("Дата документа")]
HRESULT Date([in] BSTR Value);
[id(0x00000006), propget, helpstring("Дата, до которой документ должен быть оплачен")]
HRESULT PaymentDate([out, retval] BSTR* Value);
[id(0x00000006), propput, helpstring("Дата, до которой документ должен быть оплачен")]
HRESULT PaymentDate([in] BSTR Value);
[id(0x00000007), propget, helpstring("Валюта документа")]
HRESULT Currency([out, retval] BSTR* Value);
[id(0x00000007), propput, helpstring("Валюта документа")]
HRESULT Currency([in] BSTR Value);
[id(0x00000008), propget, helpstring("номер договора")]
HRESULT ContractNum([out, retval] BSTR* Value);
[id(0x00000008), propput, helpstring("номер договора")]
HRESULT ContractNum([in] BSTR Value);
[id(0x00000009), propget, helpstring("Произвольный сопроводительный текст")]
HRESULT Comment([out, retval] BSTR* Value);
[id(0x00000009), propput, helpstring("Произвольный сопроводительный текст")]
HRESULT Comment([in] BSTR Value);
[id(0x00000001), propget,
helpstring("Определяет фирмы-контрагенты в документе
(собственную фирму и контрагента) с указанием их ролей")]
HRESULT Contragents([out, retval] IOnixContragents** Value);
[id(0x0000000a), propget, helpstring("Позиции в документе")]
HRESULT Positions([out, retval] IOnixPositions** Value);
};
[
uuid(7AEB9E55-2915-4117-9C3B-249F62B5AA5E),
version(1.0)
]
coclass OnixCommercialDocument {
[default] interface IOnixCommercialDocument;
};
typedef [uuid(1F848425-9AE1-413A-A99D-1395C54D48AF), version(1.0)]
enum {
dtOrder = 0,
dtPayableBill = 1,
dtSale = 2,
dtInvoice = 3,
dtBackSale = 4,
dtComission = 5,
dtBackComission = 6,
dtReportComission = 7,
dtCash = 8,
dtBackCash = 9,
dtPayment = 10,
dtBackPayment = 11
} TOnixDocumentType;
[
odl,
uuid(C3C9B445-841E-4329-BF99-23FAD543EF5C),
version(1.0),
dual,
oleautomation
]
interface IOnixContragent : IDispatch {
[id(0x00000001), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000001), propput, hidden]
HRESULT Index([in] long Value);
[id(0x00000002), propget]
HRESULT Name([out, retval] BSTR* Value);
[id(0x00000002), propput]
HRESULT Name([in] BSTR Value);
[id(0x00000003), propget]
HRESULT ID([out, retval] BSTR* Value);
[id(0x00000003), propput]
HRESULT ID([in] BSTR Value);
[id(0x00000004), propget]
HRESULT Role([out, retval] TOnixContragentRole* Value);
[id(0x00000004), propput]
HRESULT Role([in] TOnixContragentRole Value);
[id(0x00000005), propget]
HRESULT Address([out, retval] BSTR* Value);
[id(0x00000005), propput]
HRESULT Address([in] BSTR Value);
[id(0x00000006), propget]
HRESULT LegalAddress([out, retval] BSTR* Value);
[id(0x00000006), propput]
HRESULT LegalAddress([in] BSTR Value);
[id(0x00000007), propget, helpstring("Краткое наименование")]
HRESULT ShortName([out, retval] BSTR* Value);
[id(0x00000007), propput, helpstring("Краткое наименование")]
HRESULT ShortName([in] BSTR Value);
[id(0x0000000a), propget, helpstring("Произвольный сопроводительный текст")]
HRESULT Comment([out, retval] BSTR* Value);
[id(0x0000000a), propput, helpstring("Произвольный сопроводительный текст")]
HRESULT Comment([in] BSTR Value);
[id(0x0000000d), propget]
HRESULT Parent([out, retval] IOnixContragents** Value);
[id(0x0000000d), propput]
HRESULT Parent([in] IOnixContragents* Value);
};
[
uuid(0FE2F085-2946-4737-9D4C-82CDA2F1DDB4),
version(1.0),
helpstring("контрагенты")
]
coclass OnixContragent {
[default] interface IOnixContragent;
};
[
odl,
uuid(CBEBD18B-B984-4546-98DD-CDEF7566D2AF),
version(1.0),
helpstring("Позиции в документе"),
dual,
oleautomation
]
interface IOnixPosition : IDispatch {
[id(0x00000001), propget, hidden]
HRESULT Index([out, retval] long* Value);
[id(0x00000001), propput, hidden]
HRESULT Index([in] long Value);
[id(0x00000002), propget, helpstring("Идентификатор товара")]
HRESULT RecordReference([out, retval] BSTR* Value);
[id(0x00000002), propput, helpstring("Идентификатор товара")]
HRESULT RecordReference([in] BSTR Value);
[id(0x00000003), propget]
HRESULT EAN13([out, retval] double* Value);
[id(0x00000003), propput]
HRESULT EAN13([in] double Value);
[id(0x00000004), propget, helpstring("Количество товара, шт")]
HRESULT Amount([out, retval] long* Value);
[id(0x00000004), propput, helpstring("Количество товара, шт")]
HRESULT Amount([in] long Value);
[id(0x00000005), propget, helpstring("Цена без налогов")]
HRESULT Price([out, retval] CURRENCY* Value);
[id(0x00000005), propput, helpstring("Цена без налогов")]
HRESULT Price([in] CURRENCY Value);
[id(0x00000007), propget, helpstring("Рекомендованная розничная цена")]
HRESULT RecommendedPrice([out, retval] CURRENCY* Value);
[id(0x00000007), propput, helpstring("Рекомендованная розничная цена")]
HRESULT RecommendedPrice([in] CURRENCY Value);
[id(0x00000008), propget]
HRESULT ISBN([out, retval] BSTR* Value);
[id(0x00000008), propput]
HRESULT ISBN([in] BSTR Value);
[id(0x00000009), propget, helpstring("Краткое товарное наименование Автор+Заглавие")]
HRESULT ProductName([out, retval] BSTR* Value);
[id(0x00000009), propput, helpstring("Краткое товарное наименование Автор+Заглавие")]
HRESULT ProductName([in] BSTR Value);
[id(0x0000000c), propget, hidden]
HRESULT Parent([out, retval] IOnixPositions** Value);
[id(0x0000000c), propput, hidden]
HRESULT Parent([in] IOnixPositions* Value);
[id(0x0000000d), propget]
HRESULT Taxes([out, retval] IOnixTaxes** Value);
};
[
uuid(38193822-30A2-4E36-BED7-E96ABCC4C45D),
version(1.0)
]
coclass OnixPosition {
[default] interface IOnixPosition;
};
typedef [uuid(A5CDA127-6F98-40D3-87F4-900DCDBEEB1B), version(1.0)]
enum {
crSaler = 0,
crBuyer = 1,
crPayer = 2,
crRecipient = 3
} TOnixContragentRole;
[
odl,
uuid(F1954841-B738-43A6-A86F-77B7C45F1466),
version(1.0),
dual,
oleautomation
]
interface IOnixTaxes : IDispatch {
[id(0x00000001), propget]
HRESULT Count([out, retval] long* Value);
[id(0x00000002), propget]
HRESULT Item(
[in] long Index,
[out, retval] IOnixTax** Value);
[id(0x00000003)]
HRESULT Add([out, retval] IOnixTax** Tax);
[id(0x00000004)]
HRESULT Delete([in] long Index);
[id(0x00000005), propget]
HRESULT Parent([out, retval] IOnixPosition** Value);
[id(0x00000005), propput]
HRESULT Parent([in] IOnixPosition* Value);
};
[
uuid(CA0BFED8-5F91-40A7-9377-B5DEE4988377),
version(1.0)
]
coclass OnixTaxes {
[default] interface IOnixTaxes;
};
[
odl,
uuid(472F8FE4-5EBE-424E-B28C-7F616A7892D8),
version(1.0),
dual,
oleautomation
]
interface IOnixTax : IDispatch {
[id(0x00000001), propget]
HRESULT TaxType([out, retval] long* Value);
[id(0x00000001), propput]
HRESULT TaxType([in] long Value);
[id(0x00000002), propget]
HRESULT Rate([out, retval] double* Value);
[id(0x00000002), propput]
HRESULT Rate([in] double Value);
[id(0x00000003), propget]
HRESULT Index([out, retval] long* Value);
[id(0x00000003), propput]
HRESULT Index([in] long Value);
[id(0x00000004), propget]
HRESULT Parent([out, retval] IOnixTaxes** Value);
[id(0x00000004), propput]
HRESULT Parent([in] IOnixTaxes* Value);
};
[
uuid(2F931C46-C74A-4623-B7B3-209D50E29CF5),
version(1.0)
]
coclass OnixTax {
[default] interface IOnixTax;
};
typedef [uuid(F9A67CA0-8148-4967-847B-9A494A92EF6B), version(1.0)]
enum {
ttAVT = 0,
ttST = 1
} TOnixTaxType;
[
odl,
uuid(803718EE-A61F-4DA8-8527-422506895597),
version(1.0),
dual,
oleautomation
]
interface IOnixContragents : IDispatch {
[id(0x00000001), propget]
HRESULT Index([out, retval] long* Value);
[id(0x00000001), propput]
HRESULT Index([in] long Value);
[id(0x00000002), propget]
HRESULT Count([out, retval] long* Value);
[id(0x00000003), propget]
HRESULT Item(
[in] long Index,
[out, retval] IOnixContragent** Value);
[id(0x00000004)]
HRESULT Add([out, retval] IOnixContragent** Contragent);
[id(0x00000005)]
HRESULT Delete([in] long Index);
};
[
uuid(E0795CC7-15B9-4B0F-B53A-FEB1AB3E2A9D),
version(1.0)
]
coclass OnixContragents {
[default] interface IOnixContragents;
};
[
odl,
uuid(3CBAB94E-4936-4826-BA07-DD0AEACE5B17),
version(1.0),
dual,
oleautomation
]
interface IOnixPositions : IDispatch {
[id(0x00000001), propget]
HRESULT Index([out, retval] long* Value);
[id(0x00000001), propput]
HRESULT Index([in] long Value);
[id(0x00000002), propget]
HRESULT Count([out, retval] long* Value);
[id(0x00000003), propget]
HRESULT Item(
[in] long Index,
[out, retval] OnixPosition** Value);
[id(0x00000004)]
HRESULT Add([out, retval] IOnixPosition** Position);
[id(0x00000005)]
HRESULT Delete([in] long Index);
};
[
uuid(F1EDB472-53A3-42B9-8052-6EC2B9D5A98A),
version(1.0)
]
coclass OnixPositions {
[default] interface IOnixPositions;
};
};
Загрузить версию 1.2 от 16.09.2002 (260 кб)
Загрузить версию 2.0 от xx.05.2004 (340 кб)
Весь материал, размещенный на сайте www.bookresearch.ru, является собственностью авторов соответствующих материалов.
Любая перепечатка и перенос материалов на другие сайты возможны только с разрешения авторов и администратора сайта.
Любой может предложить свой материал для публикации у нас. Пишите администратору сайта.
|