Довідковий матеріал

Технологія створення зовнішніх компонентів

Система програм "1С:Підприємство 8" призначена для розв'язання найрізноманітніших завдань автоматизації діяльності організацій. Вона має потужні засоби конфігурування, які дають змогу штатними засобами налаштувати систему на особливості обробки інформації в конкретній організації. Водночас "1С:Підприємство 8" є відкритою системою. Для зв'язку з іншими програмами можуть використовуватися вбудовані засоби завантаження-вивантаження інформації у текстовому форматі, у форматі XML, система підтримує стандарт інтеграції програм OLE Automation, надає доступ через Web-сервіси. Однак для спеціальних завдань інтеграції може знадобитися тісніша взаємодія між "1С:Підприємством 8" та іншими програмами.Вступ. Структура каталогів. Створення компонентів із використанням технології Native API. GetClassNames. GetClassObject. DestroyObject. SetPlatformCapabilities. Init. setMemManager. GetInfo. Done. RegisterExtensionAs. GetNProps. FindProp. GetPropName. GetPropVal. SetPropVal. IsPropReadable. IsPropWritable. GetNMethods. FindMethod. GetMethodName. GetNParams. GetParamDefValue. HasRetVal. CallAsProc. CallAsFunc. SetLocale. Інтерфейс "1С:Підприємства". AddError. RegisterProfileAs. Read. Write. SetEventBufferDepth. GetEventBufferDepth. ExternalEvent. CleanEventBuffer. SetStatusLine. ResetStatusLine. GetInterface. Confirm. Alert. Синтаксис. GetPlatformInfo. Відповідність типів tVariant і "1С:Підприємства". Особливості розробки компонентів із використанням Native API. Створення компонентів із використанням технології COM. Ініціалізація та вивантаження компоненти. Init. Done. GetInfo. Розширення вбудованої мови. RegisterExtensionAs. GetNProps. FindProp. GetPropName. GetPropVal. SetPropVal. IsPropReadable. IsPropWritable. GetNMethods. FindMethod. GetMethodName. GetNParams. GetParamDefValue. HasRetVal. CallAsProc. CallAsFunc. Локалізація. Використання типу COM VARIANT під час обміну даними. COM-інтерфейси "1C:Підприємства". RegisterProfileAs. AddError. Confirm. Alert. Опис:. Інформація про платформу. GetPlatformInfo. SetEventBufferDepth. GetEventBufferDepth. ExternalEvent. CleanBuffer. SetStatusLine. ResetStatusLine. Створення вікон у середовищі "1С:Підприємства 8". GetAppMainFrame. GetAppMDIFrame. Доступ до "1С:Підприємства" через механізм OLE Automation. Методи та властивості, доступні через OLE Automation:. Особливості розробки компонентів із використанням COM. Підготовка зовнішніх компонентів до роботи з Веб-клієнтом . Зовнішні компоненти для Mozilla Firefox. Зовнішні компоненти для Internet Explorer. Зовнішні компоненти для Google Chrome. Зовнішні компоненти для Safari. Підготовка зовнішніх компонентів для завантаження в конфігурацію. Опис прикладів. Вимкнути (Disable). ПоказатиУРядкуСтану (ShowInStatusLine). УвімкнутиТаймер (StartTimer). ВимкнутиТаймер (StopTimer). ЗавантажитиКартинку(LoadPicture). Засоби розробки та приклади

Об’ємний зовнішній компонент з’єднує центральну платформу з абстрактними середовищами браузера, сервера та операційних систем.

Вступ

Структура каталогів

Створення компонентів із використанням технології Native API

GetClassNames

GetClassObject

DestroyObject

SetPlatformCapabilities

Init

setMemManager

GetInfo

Done

RegisterExtensionAs

GetNProps

FindProp

GetPropName

GetPropVal

SetPropVal

IsPropReadable

IsPropWritable

GetNMethods

FindMethod

GetMethodName

GetNParams

GetParamDefValue

HasRetVal

CallAsProc

CallAsFunc

SetLocale

Інтерфейс "1С:Підприємства"

AddError

RegisterProfileAs

Read

Write

SetEventBufferDepth

GetEventBufferDepth

ExternalEvent

CleanEventBuffer

SetStatusLine

ResetStatusLine

GetInterface

Confirm

Alert

Синтаксис

GetPlatformInfo

Відповідність типів tVariant і "1С:Підприємства"

Особливості розробки компонентів із використанням Native API

Створення компонентів із використанням технології COM

Ініціалізація та вивантаження компоненти

Init

Done

GetInfo

Розширення вбудованої мови

RegisterExtensionAs

GetNProps

FindProp

GetPropName

GetPropVal

SetPropVal

IsPropReadable

IsPropWritable

GetNMethods

FindMethod

GetMethodName

GetNParams

GetParamDefValue

HasRetVal

CallAsProc

CallAsFunc

Локалізація

Використання типу COM VARIANT під час обміну даними

COM-інтерфейси "1C:Підприємства"

RegisterProfileAs

AddError

Confirm

Alert

Опис:

Інформація про платформу

GetPlatformInfo

SetEventBufferDepth

GetEventBufferDepth

ExternalEvent

CleanBuffer

SetStatusLine

ResetStatusLine

Створення вікон у середовищі "1С:Підприємства 8"

GetAppMainFrame

GetAppMDIFrame

Доступ до "1С:Підприємства" через механізм OLE Automation

Методи та властивості, доступні через OLE Automation:

Особливості розробки компонентів із використанням COM

Підготовка зовнішніх компонентів до роботи з Веб-клієнтом

Зовнішні компоненти для Mozilla Firefox

Зовнішні компоненти для Internet Explorer

Зовнішні компоненти для Google Chrome

Зовнішні компоненти для Safari

Підготовка зовнішніх компонентів для завантаження в конфігурацію

Опис прикладів

Вимкнути (Disable)

ПоказатиУРядкуСтану (ShowInStatusLine)

УвімкнутиТаймер (StartTimer)

ВимкнутиТаймер (StopTimer)

ЗавантажитиКартинку(LoadPicture)

Засоби розробки та приклади

 

  • Вступ
  • Структура каталогів
  • Створення компонентів із використанням технології Native API
    • Інтерфейс компоненти
    • Інтерфейс "1С:Підприємства"
    • Відповідність типів tVariant і "1С:Підприємства"
    • Особливості розробки компонентів із використанням Native API
  • Створення компонентів із використанням технології COM
    • Ініціалізація та вивантаження компоненти
    • Розширення вбудованої мови
    • Локалізація
    • Використання типу COM VARIANT під час обміну даними
      • Виклик функції компоненти
      • Повернення значень із компоненти
      • Виклик методу об'єкта "1С:Підприємства" з компоненти
    • COM-інтерфейси "1C:Підприємства"
      • Збереження параметрів об'єкта компоненти
      • Інформаційні повідомлення про роботу об'єкта
      • Зовнішні події
      • Робота з рядком стану
    • Створення вікон у середовищі "1С:Підприємства 8"
    • Доступ до "1С:Підприємства" через механізм OLE Automation
    • Методи та властивості, доступні через OLE Automation
    • Особливості розробки компонентів із використанням COM
  • Підготовка зовнішніх компонентів до роботи з Веб-клієнтом
    • Зовнішні компоненти для Mozilla Firefox
      • Створення адаптера для Mozilla Firefox
      • Створення інсталяційного пакета
    • Зовнішні компоненти для Internet Explorer
      • Створення адаптера для Internet Explorer
      • Створення інсталяційного пакета
    • Зовнішні компоненти для Google Chrome
      • Створення адаптера для Google Chrome
      • Створення інсталяційного пакета
    • Зовнішні компоненти для Safari
      • Створення адаптера для Safari
      • Створення інсталяційного пакета
    • Підготовка зовнішніх компонентів для завантаження в конфігурацію
    • Опис прикладів
      • Властивості
      • Методи
    • Засоби розробки та приклади

Вступ

Система програм "1С:Підприємство 8" призначена для розв'язання найрізноманітніших завдань автоматизації діяльності організацій. Вона має потужні засоби конфігурування, які дають змогу штатними засобами налаштувати систему на особливості обробки інформації в конкретній організації. Водночас "1С:Підприємство 8" є відкритою системою. Для зв'язку з іншими програмами можуть використовуватися вбудовані засоби завантаження-вивантаження інформації у текстовому форматі, у форматі XML, система підтримує стандарт інтеграції програм OLE Automation, надає доступ через Web-сервіси. Однак для спеціальних завдань інтеграції може знадобитися тісніша взаємодія між "1С:Підприємством 8" та іншими програмами.

Для розв'язання таких завдань розроблено технологію зовнішніх компонентів. Ця технологія дає змогу створювати програми, які динамічно підключатимуться й тісно взаємодіятимуть із системою "1С:Підприємство 8", розширюючи її можливості. Зовнішні компоненти дають змогу розв'язувати широкий спектр спеціальних завдань, зокрема завдання, пов'язані з використанням різного торговельного обладнання спільно з "1С:Підприємством 8". Зовнішні компоненти можуть бути підключені як до сервера застосунків "1С:Підприємства", так і до клієнтських застосунків, зокрема й веб-клієнта.

До комплекту постачання входять цей посібник і набір прикладів реалізації зовнішніх компонентів за допомогою різних технологій.

У цьому посібнику описано технологію створення зовнішніх компонентів із використанням Native API та COM.

Структура каталогів

Каталог include містить набір включуваних заголовкових файлів для створення зовнішніх компонентів.

Каталог lib містить статичні бібліотеки для побудови розширень для браузерів Firefox та Internet Explorer.

Каталог example містить приклади зовнішніх компонентів, розроблених із використанням COM і Native API. У цьому ж каталозі знаходяться приклади розширень для браузерів.

Каталог template містить шаблон для створення компоненти, розробленої за технологією Native API.

Створення компонентів із використанням технології Native API

Ця технологія дає змогу створювати зовнішні компоненти, які можуть підключатися як у клієнтському застосунку, так і на сервері "1С:Підприємства", зокрема й у версії для Linux.

Кожен об'єкт компоненти має успадковуватися від абстрактного класу IComponentBase (файл ComponentBase.h входить до комплекту постачання) і реалізувати всі його методи.

Зовнішня компонента, розроблена за цією технологією, має експортувати з бібліотеки три функції:

GetClassNames

Опис:

Отримання списку імен об'єктів компоненти.

Синтаксис:

const WCHAR_T* _cdecl GetClassNames()

Повертане значення:

Масив зі списком імен об'єктів компоненти.

GetClassObject

Опис:

Створення екземпляра об'єкта компоненти.

Синтаксис:

long _cdecl GetClassObject(const WCHAR_T* clsName, IComponentBase** pIntf)

Параметри:

clsName

Тип: const WCHAR_T* . Ім'я створюваного об'єкта.

pIntf

Тип: IComponentBase**. Вказівник на змінну, до якої потрібно записати адресу щойно створеного об'єкта.

Повертане значення:

  • 0 — якщо об'єкт не може бути створений або не знайдено об'єкт із зазначеним ім'ям;
  • ненульове значення сигналізує про успішне створення об'єкта.

DestroyObject

Опис:

Видалення екземпляра раніше створеного об'єкта. Компонента має власними засобами видалити об'єкт і звільнити використовувану ним пам'ять.

Синтаксис:

long _cdecl DestroyObject(IComponentBase** pIntf)

Параметри:

Interface

Тип: IComponentBase**. Вказівник на об'єкт компоненти.

Повертане значення:

  • 0 — за успішного завершення;
  • код помилки (Runtime error) – у разі помилки.

SetPlatformCapabilities

Опис:

Установлює версію можливостей, що підтримуються платформою. Компонента має повернути версію, з якою вона може працювати. Якщо функцію не реалізовано, для компоненти будуть недоступні можливості виведення повідомлень, запиту інформації про платформу.

Синтаксис:

AppCapabilities SetPlatformCapabilities(const AppCapabilities capabilities)

Параметри:

< capabilities>

Тип: перелік AppCapabilities. Значення переліку: eAppCapabilitiesInvalid = -1, eAppCapabilities1 = 1, eAppCapabilitiesLast = eAppCapabilities1,

Інтерфейс компоненти

У цьому розділі наведено опис інтерфейсів, які можуть бути реалізовані в компоненті.

Init

Опис:

Під час завантаження "1С:Підприємство" ініціалізує об'єкт компоненти, викликаючи метод Init і передаючи вказівник на IAddInDefBase. Об'єкт може зберегти цей вказівник для подальшого використання.

Синтаксис:

bool _stdcall Init(void* Interface);

Параметри:

Interface

Тип: void* . Вказівник на інтерфейс "1С:Підприємства".

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

setMemManager

Опис:

Установлення менеджера пам'яті для компоненти. Під час передавання повертальних значень, які не можуть бути передані повністю через стек, компонента має виділяти пам'ять за допомогою функції AllocMemory, що надається менеджером пам'яті. "1С:Підприємство 8" згодом звільнить цю пам'ять за допомогою функції FreeMemory.

Увага! Не можна виділяти пам'ять для повернення значень за допомогою new або malloc(), оскільки це призведе до витоку пам'яті та нестабільності роботи програми.

Синтаксис:

bool _stdcall setMemManager(void* memManager);

Параметри:

mem

Тип: void* . Вказівник на інтерфейс менеджера пам'яті "1С:Підприємство 8".

Повертане значення:

  • true – успішне завершення,
  • false – виявлено помилки.

GetInfo

Опис:

"1С:Підприємство 8" викликає цей метод для отримання інформації про компоненту. Наприклад: версія 3.56 — число 3560.

Синтаксис:

long _stdcall GetInfo();

Повертане значення:

Версія компоненти

Done

Опис:

"1С:Підприємство 8" викликає цей метод у разі завершення роботи з об'єктом компоненти. Цей метод викликається незалежно від результату ініціалізації об'єкта (метод Init).

Синтаксис:

void _stdcall Done();

Повертане значення:

Немає.

RegisterExtensionAs

Опис:

До змінної wsExtName поміщається найменування розширення. Пам'ять для рядка виділяється об'єктом компоненти функцією AllocMemory менеджера пам'яті. "1С:Підприємство 8" звільняє цю пам'ять викликом FreeMemory.

Перша властивість має порядковий номер 0.

Синтаксис:

bool _stdcall RegisterExtensionAs(WCHAR_T** wsExtName);

Параметри:

wsExtName

Тип: WCHAR_T** . Найменування розширення вбудованої мови "1С:Підприємства".

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

GetNProps

Опис:

Повертає кількість властивостей цього розширення.

Синтаксис:

long _stdcall GetNProps();

Повертане значення:

long – кількість властивостей розширення або 0, якщо їх немає.

FindProp

Опис:

Повертає порядковий номер властивості за переданим ім'ям властивості.

Синтаксис:

long _stdcall FindProp(const WCHAR_T* wsPropName);

Параметри:

wsPropName

Тип: const WCHAR_T*. Найменування властивості.

Повертане значення:

  • порядковий номер властивості з ім'ям pszPropName;
  • -1 — властивість не знайдено.

GetPropName

Опис:

До повертального значення поміщається ім'я властивості з порядковим номером lPropNum; якщо властивість із таким номером відсутня, повертається NULL. Пам'ять для рядка виділяється об'єктом компоненти функцією AllocMemory менеджера пам'яті. "1С:Підприємство 8" звільняє цю пам'ять викликом FreeMemory.

Синтаксис:

const WCHAR_T* _stdcall GetPropName(long lPropNum, long lPropAlias);

Параметри:

lPropNum

Тип: long. Порядковий номер властивості.

lAliasNum

Тип: long. Мова найменування:

  • 0 — англійське найменування;
  • 1 — локальне найменування.

Повертане значення:

  • Потрібне ім'я властивості;
  • NULL – якщо властивість із потрібним номером не існує.

GetPropVal

Опис:

До змінної pvPropVal поміщається значення властивості з порядковим номером lPropNum; якщо властивість із таким номером відсутня або недоступна для читання, має бути тип VTYPE_EMPTY. Якщо повертальне значення має тип рядок, компонента виділяє пам'ять для нього функцією AllocMemory. "1С:Підприємство 8" звільнить цю пам'ять.

Синтаксис:

bool _stdcall GetPropVal(const long lPropNum, tVariant* pvarPropVal);

Параметри:

lPropNum

Тип: const long. Порядковий номер властивості.

pvarPropVal

Тип: tVariant*. Вказівник на структуру tVariant, що під час повернення містить значення властивості.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

SetPropVal

Опис:

Змінна pvPropVal містить значення властивості з порядковим номером lPropNum; якщо властивість із таким номером відсутня, недоступна для запису або тип переданого pvPropVal несумісний, метод має повернути false.

Синтаксис:

bool _stdcall SetPropVal(const long lPropNum, tVariant* pvarPropVal);

Параметри:

lPropNum

Тип: const long. Порядковий номер властивості.

pvarPropVal

Тип: tVariant*. Структура tVariant, що містить нове значення властивості.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

IsPropReadable

Опис:

Повертається прапорець можливості читання властивості з порядковим номером lPropNum. Якщо властивість із таким номером відсутня, метод має повертати false.

Синтаксис:

bool _stdcall IsPropReadable(const long lPropNum);

Параметри:

lPropNum

Тип: const long. Порядковий номер властивості.

Повертане значення:

  • true – читання доступне,
  • false – читання недоступне.

IsPropWritable

Опис:

Повертається прапорець можливості запису властивості з порядковим номером lPropNum. Якщо властивість із таким номером відсутня, метод має повертати false.

Синтаксис:

bool _stdcall IsPropWritable(const long lPropNum);

Параметри:

lPropNum

Тип: const long. Порядковий номер властивості.

Повертане значення:

  • true – запис доступний;
  • false – запис недоступний.

GetNMethods

Опис:

Повертається кількість методів цього розширення.

Синтаксис:

long _stdcall GetNMethods();

Повертане значення:

  • кількість методів розширення;
  • 0 – методи відсутні.

Перший метод має порядковий номер 0.

FindMethod

Опис:

Повертається порядковий номер методу з ім'ям bstrMethodName.

Синтаксис:

long _stdcall FindMethod(const WCHAR_T* wsMethodName);

Параметри:

wsMethodName

Тип: const WCHAR_T*. Ім'я методу.

Повертане значення:

  • порядковий номер методу;
  • -1 – метод відсутній.

Перший метод має порядковий номер 0.

GetMethodName

Опис:

Повертається ім'я властивості з порядковим номером. Пам'ять для рядка виділяється об'єктом компоненти функцією AllocMemory менеджера пам'яті. "1С:Підприємство 8" звільняє цю пам'ять викликом FreeMemory.

Синтаксис:

const WCHAR_T* _stdcall GetMethodName(const long lMethodNum, const long lMethodAlias);

Параметри:

lMethodNum

Тип: const long. Порядковий номер методу.

lAliasNum

Тип: const long. Мова імені методу:

  • 0 — англійське найменування;
  • 1 — локальне найменування.

Повертане значення:

  • ім'я методу із зазначеним номером;
  • NULL, якщо метод із зазначеним номером відсутній.

GetNParams

Опис:

Повертається кількість параметрів методу з порядковим номером lMethodNum.

Синтаксис:

long _stdcall GetNParams(const long lMethodNum);

Параметри:

lMethodNum

Тип: const long. Порядковий номер методу.

Повертане значення:

  • кількість параметрів методу;
  • 0 – метод відсутній або не має параметрів.

Перший параметр методу має порядковий номер 0.

GetParamDefValue

Опис:

До змінної pvParamDefVal поміщається значення за замовчуванням параметра lParamNum методу з порядковим номером lMethodNum. До pvParamDefVal поміщається тип VTYPE_EMPTY, якщо метод із таким номером відсутній, не має параметра з номером або параметр не має значення за замовчуванням. Якщо значення за замовчуванням має тип VTYPE_PSTR, VTYPE_PWSTR або VTYPE_BLOB, компонента виділяє пам'ять функцією AllocMemory менеджера пам'яті, записує туди дані й зберігає цю адресу у відповідному полі структури. "1С:Підприємство 8" звільнить цю пам'ять викликом FreeMemory.

Синтаксис:

bool _stdcall GetParamDefValue(const long lMethodNum, const long lParamNum, tVariant* pvarParamDefValue);

Параметри:

lMethodNum

Тип: const long. Порядковий номер методу.

lParamNum

Тип: const long. Порядковий номер параметра.

pvarParamDefValue

Тип: tVariant* . Вказівник на структуру tVariant, що під час повернення містить значення параметра за замовчуванням.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

HasRetVal

Опис:

Повертається прапорець наявності в методу з порядковим номером lMethodNum повертального значення.

Синтаксис:

bool _stdcall HasRetVal(const long lMethodNum)

Параметри:

lMethodNum

Тип: const long. Порядковий номер методу.

Повертане значення:

  • true – метод повертає значення;
  • false – метод не має повертального значення.

CallAsProc

Опис:

Виконується метод із порядковим номером lMethodNum. Якщо метод повертає false, виникає помилка часу виконання, і виконання модуля "1С:Підприємство 8" припиняється. Пам'ять для масиву параметрів виділяється та звільняється "1С:Підприємством 8".

Синтаксис:

bool _stdcall CallAsProc(const long lMethodNum, tVariant* paParams, const long lSizeArray);

Параметри:

lMethodNum

Тип: const long. Порядковий номер методу.

paParams

Тип: tVariant*. Вказівник на масив структур tVariant, що містить значення параметрів методу. Якщо метод не має параметрів, то містить NULL.

lSizeArray

Тип: const long. Розмір масиву paParams.

Повертане значення:

  • true – відповідний метод викликано, помилок не сталося;
  • false – метод відсутній або сталася помилка часу виконання (runtime error).

CallAsFunc

Опис:

Виконується метод із порядковим номером lMethodNum. Якщо метод повертає false, виникає помилка часу виконання і виконання модуля "1С:Підприємство 8" припиняється. Пам'ять для масиву параметрів виділяється "1С:Підприємством 8". Якщо повертальне значення має тип рядок або двійкові дані, компонента виділяє пам'ять функцією AllocMemory менеджера пам'яті, записує туди дані й зберігає цю адресу у відповідному полі структури. "1С:Підприємство 8" звільнить цю пам'ять викликом FreeMemory.

Синтаксис:

bool _stdcall CallAsFunc(const long lMethodNum, tVariant* pvarRetValue, tVariant* paParams, const long lSizeArray);

Параметри:

lMethodNum

Тип: const long. Порядковий номер методу.

pvarRetValue

Тип: tVariant*. Вказівник на структуру tVariant, що містить повертальне значення.

paParams

Тип: tVariant*. Вказівник на масив структур tVariant, що містить значення параметрів методу. Якщо метод не має параметрів, то містить NULL.

lSizeArray

Тип: const long. Розмір масиву paParams.

Повертане значення:

  • true – відповідний метод викликано, помилок не сталося.
  • false – метод відсутній або сталася помилка часу виконання (runtime error).

SetLocale

Опис:

"1С:Підприємство" викликає цей метод для локалізації компоненти відповідно до використовуваного коду локалізації. Компонента може налаштувати своє оточення для правильного виведення інформації.

Синтаксис:

void _stdcall SetLocale(const WCHAR_T* wsLocale);

Параметри:

wsLocale

Тип: const WCHAR_T*. Рядок локалізації у форматі < language> _< REGION> . Наприклад: для Linux – ru_RU, для Windows — rus_RUS.

Повертане значення:

Немає.

Інтерфейс "1С:Підприємства"

Під час ініціалізації об'єкта компоненти йому передається вказівник на інтерфейс "1С:Підприємства 8", за допомогою якого можна викликати перелічені нижче методи. Слід пам'ятати, що ці методи не працюватимуть на сервері застосунків.

AddError

Опис:

Додає інформаційне повідомлення під час роботи методів розширення мови. Якщо scode має ненульове значення, буде згенеровано виняток, який може бути перехоплений та оброблений засобами вбудованої мови "1С:Підприємства 8".

Можливі коди повідомлень і поведінку "1С:Підприємства 8" наведено в розділі "Інформаційні повідомлення про роботу об'єкта".

Синтаксис:

bool _stdcall AddError(unsigned short wcode, const WCHAR_T* source, const WCHAR_T* descr, long scode);

Параметри:

wcode

Тип: unsigned short. Код повідомлення.

source

Тип: const WCHAR_T* . Джерело помилки.

descr

Тип: const WCHAR_T* . Повідомлення про помилку.

scode

Тип: long. Код помилки.

Повертане значення:

  • true – інформацію про помилку успішно додано;
  • false – виявлено помилки.

RegisterProfileAs

Опис:

Реєструє список параметрів компоненти з іменем wsProfileName.

Синтаксис:

bool _stdcall RegisterProfileAs(WCHAR_T* wsProfileName);

Параметри:

wsProfileName

Тип: WCHAR_T* . Найменування списку параметрів компоненти.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

Read

Опис:

Читає збережене значення параметра компоненти з іменем pszPropName. У разі невдачі читання та ненульового значення errDescriptor "1С:Підприємство 8" виділить пам'ять і помістить опис помилки. Компонента має звільнити пам'ять викликом FreeMemory. Для повертальних даних типу рядок пам'ять також виділяється "1С:Підприємством 8", а адреса зберігається у відповідному полі структури tVariant. Компонента має звільнити її викликом FreeMemory.

Синтаксис:

bool _stdcall Read(WCHAR_T* pszPropName, tVariant* pVal, long* pErrCode, WCHAR_T** errDescriptor);

Параметри:

pszPropName

Тип: WCHAR_T* . Ім'я параметра.

pVal

Тип: tVariant* . Вказівник на повертальне значення параметра.

pErrCode

Тип: long* . Вказівник на змінну, куди буде поміщено код помилки, якщо вона виникне.

errDescriptor

Тип: WCHAR_T** . Подвійний вказівник на змінну, куди буде поміщено опис помилки.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

Write

Опис:

Зберігає значення параметра компоненти з іменем pszPropName.

Синтаксис:

bool _stdcall Write(WCHAR_T* pszPropName, tVariant* pVar);

Параметри:

pszPropName

Тип: WCHAR_T*. Ім'я параметра.

pVar

Тип: tVariant*. Вказівник на значення параметра.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

SetEventBufferDepth

Опис:

Установлює розмір черги подій для цього об'єкта. Якщо поточна кількість подій у черзі більша за встановлювану довжину, останні події видаляються.

Синтаксис:

bool _stdcall SetEventBufferDepth( long lDepth);

Параметри:

lDepth

Тип: long. Довжина черги повідомлень.

Повертане значення:

  • true – успішне завершення;
  • false – виявлено помилки.

GetEventBufferDepth

Опис:

Повертається розмір черги подій для цього об'єкта.

Синтаксис:

long _stdcall GetEventBufferDepth();

Параметри:

Немає.

Повертане значення:

Розмір черги повідомлень.

ExternalEvent

Опис:

Поміщає подію до черги, записуючи джерело події, найменування та параметри події. Під час обробки події ці дані передаються процедурі ОбробкаЗовнішньоїПодії(). Під час виклику методу ExternalEvent() подальша обробка події відбувається так: подія записується до черги подій (якщо черга повністю зайнята, подія втрачається), потім за відсутності системних подій із черги береться перша подія (якщо черга не порожня) і запускається процес обробки зовнішніх подій. Цей процес повторюється для всіх об'єктів зовнішніх компонентів. Таким чином, обробка зовнішніх подій синхронізується з обробкою системних подій.

Синтаксис:

bool _stdcall ExternalEvent(WCHAR_T* wsSource, WCHAR_T* wsMessage, WCHAR_T* wsData);

Параметри:

wsSource

Тип: WCHAR_T*. Рядок із найменуванням джерела повідомлення.

wsMessage

Тип: WCHAR_T*. Рядок із найменуванням повідомлення.

wsData

Тип: WCHAR_T*. Рядок c параметрами повідомлення.

Повертане значення:

  • true – подію поміщено до черги;
  • false – черга переповнена, обробка подій недоступна або невідома помилка.

CleanEventBuffer

Опис:

Очищає чергу подій, видаляючи всі наявні в черзі події.

Синтаксис:

void _stdcall CleanEventBuffer();

SetStatusLine

Опис:

Установлює текст рядка стану.

Синтаксис:

bool _stdcall SetStatusLine(WCHAR_T* wsStatusLine);

Параметри:

wsStatusLine

Тип: WCHAR_T* . Текст рядка стану.

Повертане значення:

  • true — текст відображено в рядку стану;
  • false – функція недоступна або невідома помилка.

ResetStatusLine

Опис:

Ініціалізує рядок стану.

Синтаксис:

void _stdcall ResetStatusLine();

GetInterface

Синтаксис:

IInterface* GetInterface(Interfaces iface)

Параметри:

< iface>

Тип: Interfaces. Значення переліку Interfaces: eIMsgBox, eIPlatformInfo

Повертане значення:

  • Iinterface* - вказівник на запитуваний інтерфейс.

Опис:

Запитує інтерфейс платформи. Якщо запитуваний інтерфейс підтримується платформою, буде повернуто вказівник на інтерфейс. Інакше — 0.

Confirm

Синтаксис:

bool Confirm(const WCHAR_T* queryText, tVariant* retVal)

Параметри:

< queryText>

Тип: WCHAR_T*. Текст запитання.

< retVal>

Тип: tVariant*. Повертане значення діалогу. Тип VTYPE_BOOL. Значення true відповідає кнопці ОК, false – Скасування.

Повертане значення:

  • bool - істина, якщо діалог відображено.

Опис:

Виводить діалог із текстом, заданим параметром queryText, і кнопками ОК та Скасування.

Alert

Синтаксис

bool Alert(const WCHAR_T* text)

Параметри:

< text> Тип: WCHAR_T*. Текст повідомлення.

Повертане значення:

bool — істина, якщо діалог відображено.

Опис:

  • Виводить простий діалог сповіщення з текстом, заданим параметром text і кнопкою ОК.

GetPlatformInfo

Синтаксис:

AppInfo* GetPlatformInfo()

Повертане значення:

  • AppInfo* - вказівник на структуру з полями:
  • AppVersion — Тип: WCHAR_T*, версія застосунку,
  • Application — Тип: перелік, тип застосунку, що підключив компоненту,
  • UserAgentInformation — Тип: WCHAR_T*, інформація про браузер (лише для веб-клієнта).

Опис:

Запитує інформацію про платформу. У разі підключення компоненти у веб-клієнті версії платформи нижче 8.3.3 буде заповнено лише поле Application структури AppInfo.

Відповідність типів tVariant і "1С:Підприємства"

Тип tVariant оголошено у файлі types.h (входить до комплекту постачання).

  • VTYPE_EMPTY відповідає значенню Невизначено. Під час передавання як параметра методу підставляється значення параметра за замовчуванням;
  • значення типу VTYPE_I2, VTYPE_I4, VTYPE_ERROR, VTYPE_UI1 відповідають цілочисловому значенню й містяться в lVal;
  • значення типу VTYPE_BOOL відповідають булевому значенню й містяться в bVal;
  • значення типу VTYPE_R4, VTYPE_R8, VTYPE_CY відповідають дробовому значенню й містяться в dblVal;
  • значення типу VTYPE_DATE відповідає значенню дати й міститься в date;
  • значення типу VTYPE_TM відповідає значенню дати й міститься в struct tm tmVal;
  • значення типу VTYPE_PSTR відповідає рядковому значенню char* і міститься в pstrVal із зазначенням довжини в strLen;
  • значення типу VTYPE_PWSTR відповідає рядковому значенню WCHAR_T* і міститься в pwstrVal із зазначенням довжини в wstrLen;
  • значення типу VTYPE_BLOB відповідає двійковим даним і міститься в pstrVal із зазначенням довжини в strLen;

Увага! Типи VTYPE_INTERFACE, VTYPE_VARIANT не підтримуються.

Особливості розробки компонентів із використанням Native API

Компонента з використанням цієї технології є платформозалежною. Тому розробник має будувати варіант компоненти як для платформи x86, так і для x86-64. У процесі використання розробник конфігурації визначить тип платформи та завантажить потрібний варіант компоненти.

Також слід пам'ятати, що компонента може бути завантажена на сервері застосунків "1С:Підприємства" під керуванням ОС Windows або Linux. Також компонента може бути завантажена у веб-клієнті, що функціонує в ОС Windows або Linux. Тому бажано робити реалізацію кросплатформною.

"1С:Підприємство" працює з рядками у форматі Unicode (WCHAR_T) з розміром символу 2 байти. Розмірність збігається з вбудованим типом wchar_t для ОС Windiws, але може відрізнятися для ОС Linux, де розмір wchar_t зазвичай становить 4 байти. Розробник компоненти має самостійно виконувати перетворення символьних даних цього типу.

Якщо зовнішня компонента використовує додаткові модулі, це потрібно зазначати в документації до компоненти. Використовувані несистемні run-time бібліотеки мають бути статично включені до компоненти (якщо дозволяє ліцензія на run-time бібліотеку), оскільки на комп'ютері, де використовуватиметься компонента, їх може не бути або вони можуть бути іншої версії. Також до компоненти для Windows потрібно включати маніфест.

У разі виникнення виняткових ситуацій вони мають бути перехоплені та оброблені в компоненті, а інформація про них передана до "1С:Підприємства" за допомогою методу AddError().

У разі використання компоненти на сервері застосунків зовнішні події не обробляються. Також не оброблятимуться методи роботи з рядком стану та збереження параметрів.

Компонента може повертати будь-які двійкові дані, наприклад сформоване зображення штрихкоду. Для цього дані поміщаються в поле pstrVal структури tVariant, у strLen – розмір даних, а тип установлюється в VTYPE_BLOB. "1С:Підприємство 8" використовує для них тип ДвійковіДані.

Значення дати передається до зовнішньої компоненти у вигляді структури tm із зазначенням типу VTYPE_TM. Компонента може повернути значення дати як у struct tm, так і в типі DATE Windows, зазначивши тип VTYPE_DATE. "1С:Підприємство 8" обробить його коректно.

Увага! Повертальні значення типу VTYPE_ARRAY і VTYPE_BYREF не підтримуються.

Створення компонентів із використанням технології COM

Технологія зовнішніх компонентів із використанням COM також може застосовуватися в "1С:Підприємстві" ранніших версій (версії 7.7, 8.0 та 8.1).

Під час завантаження зовнішньої компоненти функцією ЗавантажитиЗовнішнюКомпоненту() або ПідключитиЗовнішнюКомпоненту() (для компоненти, створеної за технологією COM) "1С:Підприємство 8" визначає ProgID COM-об'єкта компоненти так:

  • ProgID має вигляд Vendor.Component;
  • як перша частина (Vendor) використовується рядок AddIn;
  • як друга частина (Component) використовується рядок з ID100 із таблиці рядків компоненти. Рядок може мати вигляд Name1|Name2|...|NameN, і в цьому разі будуть створені всі об'єкти з ProgID вигляду AddIn.NameX. Якщо такого рядка немає, використовується ім'я файлу зовнішньої компоненти без розширення.

Також під час використання функції ПідключитиЗовнішнюКомпоненту() ProgID COM-об'єкта компоненти передається як параметр функції та може бути поданий рядком вигляду ProgID1| ProgID2|...|ProgIDX.

Ініціалізація та вивантаження компоненти

Для ініціалізації та вивантаження компоненти використовується інтерфейс IInitDone. Цей інтерфейс успадкований від IUnknown і призначений для ініціалізації об'єкта та завершення роботи з об'єктом.

Init

Опис:

Під час завантаження "1С:Підприємство 8" ініціалізує об'єкт компоненти, викликаючи метод Init і передаючи вказівник на IDispatch. Об'єкт може зберегти цей вказівник для подальшого використання. Усі інші інтерфейси "1С:Підприємства 8" об'єкт може отримати, викликавши метод QueryInterface() переданого йому інтерфейсу IDispatch. Об'єкт має повернути S_OK, якщо ініціалізація пройшла успішно, та E_FAIL у разі виникнення помилки. Цей метод може використовувати інтерфейс IErrorLog для виведення інформації про помилки. При цьому ініціалізація вважається невдалою, якщо одна з переданих структур EXCEPINFO має поле scode, що не дорівнює S_OK. Усі передані в IErrorLog дані обробляються під час повернення з цього методу. У момент виклику цього методу властивість AppDispatch не визначена.

Синтаксис:

HRESULT Init(IDispatch* pBackConnection);

Параметри:

pBackConnection

Тип: Idispatch* . Вказівник на інтерфейс "1С:Підприємства 8".

Повертане значення:

  • E_FAIL — під час ініціалізації сталася помилка;
  • S_OK — ініціалізація пройшла успішно.

Done

Опис:

"1С:Підприємство 8" викликає цей метод у разі завершення роботи з об'єктом компоненти. Об'єкт має повернути S_OK. Цей метод викликається незалежно від результату ініціалізації об'єкта (метод Init).

Синтаксис:

HRESULT Done(void);

Повертане значення:

  • S_OK — об'єкт завершив роботу.

GetInfo

Опис:

"1С:Підприємство 8" викликає цей метод для отримання інформації про компоненту. У технології створення зовнішніх компонентів версії 2.0 в елемент з індексом 0 необхідно записати версію підтримуваної технології у форматі V_I4 — цілого числа, при цьому старший номер версії записується в тисячні розряди, молодший номер версії — в одиниці. Наприклад: версія 1.00 — число 1000. Усі об'єкти зовнішніх компонентів можуть підтримувати версію 1.0 (відповідає числу 1000) або 2.0 (відповідає 2000). Пам'ять для pInfo виділяється "1С:Підприємством 8". Метод має повертати S_OK.

Об'єкт зовнішньої компоненти зобов'язаний реалізувати цей інтерфейс. За його відсутності компонента не буде завантажена.

Синтаксис:

HRESULT GetInfo(SAFEARRAY** pInfo);

Параметри:

pInfo

Тип: SAFEARRAY** . Подвійний вказівник на масив структур VARIANT. Пам'ять для масиву виділяється "1С:Підприємством 8".

Повертане значення:

  • S_OK — інформацію про компоненту повернуто.

Розширення вбудованої мови

Для розширення вбудованої мови компонента має реалізувати інтерфейс ILanguageExtender. Цей інтерфейс успадкований від IUnknown і призначений для розширення вбудованої мови "1С:Підприємство 8". Для використання цього розширення необхідно використовувати оператор Новий, передавши йому рядок вигляду AddIn.Ім'яРозширення, де Ім'яРозширення повертається методом цього інтерфейсу. Потім можна використовувати створений об'єкт, викликаючи його методи та властивості.

Версія 2.0 дає змогу створювати кілька об'єктів одного типу AddIn.Ім'яРозширення, однак компонента має явно зазначити підтримку версії 2.0 у методі GetInfo(). В іншому разі допускається створення лише одного об'єкта.

RegisterExtensionAs

Опис:

До змінної pExtensionName поміщається найменування розширення. Пам'ять для рядка виділяється об'єктом компоненти стандартними системними функціями для роботи з COM-рядками (наприклад, SysAllocString(). "1С:Підприємство 8" звільняє цю пам'ять викликом SysFreeString()).

Перша властивість має порядковий номер 0.

Синтаксис:

HRESULT RegisterExtensionAs(BSTR* pExtensionName);

Параметри:

pExtensionName

Тип: BSTR* . Найменування розширення вбудованої мови "1С:Підприємства".

Повертане значення:

  • S_OK

GetNProps

Опис:

Повертає кількість властивостей цього розширення, 0 – за відсутності властивостей. Пам'ять для змінної plProps виділяється "1С:Підприємством".

Синтаксис:

HRESULT GetNProps(long* plProps);

Параметри:

plProps

Тип: long* . Вказівник на змінну, що під час повернення містить кількість властивостей розширення. 0 – за відсутності властивостей.

Повертане значення:

  • S_OK

FindProp

Опис:

Повертає порядковий номер властивості з ім'ям pszPropName, -1, якщо властивість не знайдено. Пам'ять для змінної plPropNum виділяється "1С:Підприємством 8".

Синтаксис:

HRESULT FindProp(BSTR pszPropName, long* plPropNum);

Параметри:

pszPropName

Тип: BSTR. Найменування властивості.

plPropNum

Тип: long* . Вказівник на змінну, що під час повернення містить порядковий номер властивості.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — властивість з ім'ям pszPropName у цьому розширенні відсутня.

GetPropName

Опис:

До змінної pPropName поміщається ім'я властивості з порядковим номером lPropNum; якщо властивість із таким номером відсутня, до pPropName поміщається порожній рядок. Пам'ять для рядка виділяється об'єктом компоненти стандартними системними функціями для роботи з COM-рядками (наприклад, SysAllocString(). "1С:Підприємство 8" звільняє цю пам'ять викликом SysFreeString()).

Синтаксис:

HRESULT GetPropName(long lPropNum, long lAliasNum, BSTR* pPropName);

Параметри:

lPropNum

Тип: long. Порядковий номер властивості.

lAliasNum

Тип: long. Мова найменування:

  • 0 — англійське найменування;
  • 1 — локальне найменування.

pPropName

Тип: BSTR* . Вказівник на рядок, що під час повернення містить найменування властивості.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — властивість із номером lPropNum у цьому розширенні відсутня.

GetPropVal

Опис:

До змінної pvPropVal поміщається значення властивості з порядковим номером lPropNum; якщо властивість із таким номером відсутня або недоступна для читання, має бути тип VT_EMPTY.

Синтаксис:

HRESULT GetPropVal(long lPropNum, VARIANT* pvPropVal);

Параметри:

lPropNum

Тип: long. Порядковий номер властивості.

pvPropVal

Тип: VARIANT*. Вказівник на структуру VARIANT, що під час повернення містить значення властивості.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — властивість із номером lPropNum у цьому розширенні відсутня або недоступна для читання.

SetPropVal

Опис:

Змінна pvPropVal містить значення властивості з порядковим номером lPropNum; якщо властивість із таким номером відсутня, недоступна для запису або тип переданого pvPropVal не приводиться до потрібного, метод має повернути S_FALSE.

Синтаксис:

HRESULT SetPropVal(long lPropNum, VARIANT* pvPropVal);

Параметри:

lPropNum

Тип: long. Порядковий номер властивості.

pvPropVal

Тип: VARIANT*. Структура VARIANT, що містить нове значення властивості.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — властивість із номером lPropNum у цьому розширенні відсутня або недоступна для запису.

IsPropReadable

Опис:

До змінної pboolPropReadable поміщається прапорець можливості читання властивості з порядковим номером lPropNum: FALSE (0) — властивість недоступна для читання, TRUE (1) — властивість допускає читання. Якщо властивість із таким номером відсутня, метод має повертати S_FALSE.

Синтаксис:

HRESULT IsPropReadable(long lPropNum, BOOL* pboolPropReadable);

Параметри:

lPropNum

Тип: long. Порядковий номер властивості.

pboolPropReadable

Тип: BOOL*. Вказівник на змінну, що під час повернення містить прапорець можливості читання властивості.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — властивість із номером lPropNum у цьому розширенні відсутня.

IsPropWritable

Опис:

До змінної pboolPropWritable поміщається прапорець можливості запису властивості з порядковим номером lPropNum: FALSE (0) — властивість недоступна для запису, TRUE (1) — властивість допускає запис. Якщо властивість із таким номером відсутня, метод має повертати S_FALSE.

Синтаксис:

HRESULT IsPropWritable(long lPropNum, BOOL* pboolPropWritable);

Параметри:

lPropNum

Тип: long. Порядковий номер властивості.

pboolPropWritable

Тип: BOOL*. Вказівник на змінну, що під час повернення містить прапорець можливості запису властивості.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — властивість із номером у цьому розширенні відсутня.

GetNMethods

Опис:

До змінної plMethods поміщається кількість методів цього розширення, 0 — за відсутності методів.

Перший метод має порядковий номер 0.

Синтаксис:

HRESULT GetNMethods(long* plMethods);

Параметри:

plMethods

Тип: long*. Вказівник на змінну, що під час повернення містить кількість методів розширення мови.

Повертане значення:

  • S_OK

FindMethod

Опис:

До змінної plMethNum поміщається порядковий номер методу з ім'ям bstrMethodName або -1 — за відсутності методу.

Синтаксис:

HRESULT FindMethod(BSTR bstrMethodName, long* plMethNum);

Параметри:

bstrMethodName

Тип: BSTR. Ім'я методу.

plMethNum

Тип: long*. Вказівник на змінну, що під час повернення містить порядковий номер методу з ім'ям methodName.

Повертане значення:

  • S_OK

GetMethodName

Опис:

До змінної поміщається ім'я властивості з порядковим номером; якщо властивість із таким номером відсутня, поміщається порожній рядок. Пам'ять для рядка виділяється об'єктом компоненти стандартними системними функціями для роботи з COM-рядками (наприклад, SysAllocString(). 1cg звільняє цю пам'ять викликом SysFreeString()).

Синтаксис:

HRESULT GetMethodName(long lMethodNum, long lAliasNum, BSTR* pbstrMethName);

Параметри:

lMethodNum

Тип: long. Порядковий номер методу.

lAliasNum

Тип: long. Мова імені методу:

  • 0 — англійське найменування;
  • 1 — локальне найменування.

pbstrMethName

Тип: BSTR*. Вказівник на рядок, що під час повернення містить ім'я методу.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — метод із номером у цьому розширенні відсутній.

GetNParams

Опис:

До змінної plMethParams поміщається кількість параметрів методу з порядковим номером lMethodNum; якщо метод із таким номером відсутній або не має параметрів, то поміщається 0. Пам'ять для змінної виділяється "1С:Підприємством 8".

Перший параметр методу має порядковий номер 0.

Синтаксис:

HRESULT GetNParams(long lMethodNum, long* plMethParams);

Параметри:

lMethodNum

Тип: long. Порядковий номер методу.

plMethParams

Тип: long*. Вказівник на змінну, що під час повернення містить кількість параметрів методу.

Повертане значення:

  • S_OK — операцію успішно завершено,
  • S_FALSE — метод із номером у цьому розширенні відсутній.

GetParamDefValue

Опис:

До змінної pvParamDefVal поміщається значення за замовчуванням параметра lParamNum методу з порядковим номером lMethodNum. До pvParamDefVal поміщається тип VT_EMPTY, якщо метод із таким номером відсутній, не має параметра з номером або параметр не має значення за замовчуванням. Пам'ять для змінної виділяється "1С:Підприємством".

Перший метод має порядковий номер 0. Перший параметр методу має порядковий номер 0.

Синтаксис:

HRESULT GetParamDefValue(long lMethodNum, long lParamNum, VARIANT* pvParamDefVal);

Параметри:

lMethodNum

Тип: long. Порядковий номер методу.

lParamNum

Тип: long. Порядковий номер параметра.

pvParamDefVal

Тип: VARIANT*. Вказівник на структуру VARIANT, що під час повернення містить значення параметра за замовчуванням.

Повертане значення:

  • S_OK — операцію успішно завершено (незалежно від наявності в параметра значення за замовчуванням);
  • S_FALSE — метод або параметр методу відсутній.

HasRetVal

Опис:

До змінної pboolHasRetVal поміщається прапорець наявності повертального значення в методу з порядковим номером lMethodNum: TRUE для методів із повертальним значенням і FALSE в іншому разі. Пам'ять для змінної виділяється "1С:Підприємством 8".

Синтаксис:

HRESULT HasRetVal(long lMethodNum,BOOL* pboolHasRetVal);

Параметри:

lMethodNum

Тип: long. Порядковий номер методу.

pboolHasRetVal

Тип: BOOL*.. Вказівник на змінну, що під час повернення містить прапорець наявності повертального значення.

Повертане значення:

  • S_OK — операцію успішно завершено;
  • S_FALSE — метод відсутній.

CallAsProc

Опис:

Виконується метод із порядковим номером lMethodNum. Якщо метод повертає E_FAIL, виникає помилка часу виконання і виконання модуля "1С:Підприємство 8" припиняється. Пам'ять для масиву параметрів виділяється "1С:Підприємством 8".

Синтаксис:

HRESULT CallAsProc(long lMethodNum, SAFEARRAY** pVars);

Параметри:

lMethodNum

Тип: long. Порядковий номер методу.

pVars

Тип: SAFEARRAY**. Подвійний вказівник на масив структур VARIANT, що містить значення параметрів методу. Якщо метод не має параметрів, то містить NULL.

Повертане значення:

  • S_OK — відповідний метод викликано, помилок не сталося.
  • E_FAIL — відповідний метод викликано, сталася помилка часу виконання (runtime error). Виконання модуля припиняється.
  • S_FALSE – відсутній метод, що відповідає переданому lMethodNum.

CallAsFunc

Опис:

Виконується метод із порядковим номером lMethodNum. Якщо метод повертає E_FAIL, виникає помилка часу виконання і виконання модуля "1С:Підприємства 8" припиняється. Пам'ять для масиву виділяється "1С:Підприємством 8".

Синтаксис:

HRESULT CallAsFunc(long lMethodNum, VARIANT* pRetValue, SAFEARRAY** pVars);

Параметри:

lMethodNum

Тип: long. Порядковий номер методу.

pRetValue

Тип: VARIANT*. Вказівник на структуру VARIANT, що під час повернення містить повертальне значення.

pVars

Тип: SAFEARRAY**. Подвійний вказівник на масив структур VARIANT, що містить значення параметрів методу. Якщо метод не має параметрів, то містить NULL.

Повертане значення:

  • S_OK — відповідний метод викликано, помилок не сталося.
  • E_FAIL — відповідний метод викликано, сталася помилка часу виконання (runtime error). Виконання модуля припиняється.
  • S_FALSE – відсутній метод, що відповідає переданому lMethodNum.

Локалізація

SetLocale

Опис:

"1С:Підприємство" викликає цей метод для локалізації компоненти відповідно до використовуваного коду локалізації. Компонента може налаштувати своє оточення для правильного виведення інформації.

Синтаксис:

HRESULT SetLocale(BSTR bstrLocale);

Параметри:

bstrLocale

Тип: BSTR. Рядок локалізації у форматі language-REGION. Наприклад: для Росії – ru-RU.

Повертане значення:

  • S_OK

Використання типу COM VARIANT під час обміну даними

Виклик функції компоненти

Відповідність між типами "1С:Підприємства" і COM:

  • Значення Невизначено відповідає VT_EMPTY.
  • Цілочислове значення відповідає VT_I4 і поміщається в lVal.
  • Дробове значення відповідає VT_R8 і поміщається в dblVal. Слід врахувати, що внутрішнє подання може мати точність, що перевищує точність типу double (близько 15 цифр після коми), тому під час конвертації може відбуватися втрата точності.
  • Значення дати відповідає VT_DATE і поміщається в date.
  • Рядкове значення відповідає VT_BSTR і поміщається в bstrVal.
  • Об'єкти відповідають VT_DISPATCH і поміщаються в pdispVal. Під час використання об'єктів "1С:Підприємство 8" у компоненті необхідно визначити DISPID методів Об'єкта (викликавши GetIDsOfNames()) і потім викликати Invoke().
  • Під час конвертації COM-об'єкта в IDispatch перевіряються ситуації взаємного виклику 1С:Підприємство -> Компонента -> 1С:Підприємство і Компонента -> 1С:Підприємство -> Компонента, і всі необхідні операції виконуються коректно.

Повернення значень із компоненти

Відповідність між типами "1С:Підприємства" і COM:

  • VT_EMPTY відповідає невизначеному значенню. Під час передавання як параметра методу підставляється значення параметра за замовчуванням.
  • Значення типу VT_I2, VT_I4, VT_BOOL, VT_ERROR, VT_UI1 відповідають цілочисловому значенню й містяться в lVal.
  • Значення типу VT_R4, VT_R8, VT_CY відповідають дробовому значенню й містяться в dblVal.
  • Значення типу VT_DATE відповідає значенню дати й міститься в date.
  • Значення типу VT_BSTR відповідає рядковому значенню й міститься в bstrVal.
  • Значення типу VT_ARRAY відповідає масиву й міститься в parray (лише для "1С:Підприємства 8").
  • Значення типу VT_DISPATCH відповідає значенню об'єкта й міститься в pdispVal.

Увага! Типи VT_DECIMAL, VT_VARIANT і VT_UNKNOWN не підтримуються.

Під час конвертації IDispatch у COM-об'єкт перевіряються ситуації взаємного виклику 1С:Підприємство -> Компонента -> 1С:Підприємство і Компонента -> 1С:Підприємство -> Компонента, і всі необхідні операції виконуються коректно.

Виклик методу об'єкта "1С:Підприємства" з компоненти

Для виклику методу об'єкта необхідно викликати метод Invoke() отриманого раніше інтерфейсу IDispatch, передавши йому всі необхідні параметри, зокрема номер (DISPID) викликаного методу об'єкта. Цей номер можна отримати з методу GetIDsOfNames() інтерфейсу IDispatch, передавши йому назву методу об'єкта.

Відповідність між параметрами методу об'єкта та масивом структур VARIANT пряма: першому параметру відповідає структура з індексом 0, другому параметру — структура з індексом 1 тощо. Під час передавання параметрів методу об'єкта слід врахувати, що необхідно передавати значення всіх параметрів, включно зі значеннями параметрів, підставлюваними за замовчуванням. Для підстановки значень за замовчуванням достатньо призначити тип VT_EMPTY (VT_ERROR для "1С:Підприємство 8") відповідній структурі VARIANT.

COM-інтерфейси "1C:Підприємства"

Усі наведені нижче інтерфейси можуть бути отримані викликом QueryInterface(), переданого під час ініціалізації об'єкта вказівника на IDispatch. Їхні ідентифікатори (IID) ви можете знайти в шаблонах, включених до цього постачання.

Збереження параметрів об'єкта компоненти

Для збереження параметрів об'єкт зовнішньої компоненти може використовувати механізми збереження "1С:Підприємства 8" через інтерфейс IPropertyProfile. Цей інтерфейс успадкований від інтерфейсу IPropertyBag, стандартного для COM, і відрізняється єдиним методом:

RegisterProfileAs

Опис:

Реєструє список параметрів компоненти з іменем bstrProfileName.

Під час завантаження та збереження параметри можуть бути структуровані як дерево – для цього під час передавання в методах Read() і Write() ім'я параметра необхідно записувати у вигляді Вузол1\Вузол2\...\ВузолN\Ім'яПараметра:ЗначенняПараметраЗаЗамовчуванням. Під час роботи з "1С:Підприємством 7.5" параметри зберігаються в реєстраційній базі даних системи (Registry) у ключі HKEY_CURRENT_USER\Software\1C\1Cv7\7.5\Options, під час роботи з "1С:Підприємством 7.7" — у ключі HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Options, під час роботи з "1С:Підприємством 8" – у профілі, що відповідає поєднанню комп'ютер – ІБ — користувач.

Синтаксис:

HRESULT RegisterProfileAs(BSTR bstrProfileName);

Параметри:

bstrProfileName

Тип: BSTR. Найменування списку параметрів компоненти.

Повертане значення:

  • S_OK — реєстрація пройшла успішно.
  • E_FAIL — під час реєстрації сталася помилка. Інформація про помилку виводиться у вікно повідомлень.

Інформаційні повідомлення про роботу об'єкта

Для повідомлення користувачу інформації про свою роботу об'єкт може використовувати інтерфейс IErrorLog, стандартний для COM (опис методу AddError() інтерфейсу IErrorLog наводиться тут виключно для зручності роботи). Повідомлення, що виникають, обробляються як протягом роботи програми (у разі асинхронного поміщення їх до черги), так і в таких випадках: під час повернення з методу ініціалізації Init() та під час повернення з методу розширення. Усі повідомлення поміщаються до черги й обробляються в порядку появи. Кількість запам'ятовуваних повідомлень необмежена.

AddError

Опис:

Додає інформаційне повідомлення під час роботи методів розширення мови.

Можливі коди повідомлень:

#define ADDIN_E_NONE 1000

#define ADDIN_E_ORDINARY 1001

#define ADDIN_E_ATTENTION 1002

#define ADDIN_E_IMPORTANT 1003

#define ADDIN_E_VERY_IMPORTANT 1004

#define ADDIN_E_INFO 1005

#define ADDIN_E_FAIL 1006

#define ADDIN_E_MSGBOX_ATTENTION 1007

#define ADDIN_E_MSGBOX_INFO 1008

#define ADDIN_E_MSGBOX_FAIL 1009

Код повідомлення поміщається в wCode структури EXEPINFO. Коди помилок 1000 – 2000 зарезервовано.

Під час обробки повідомлення виводиться вікно попередження для кодів ADDIN_E_MSGBOX_ATTENTION, ADDIN_E_MSGBOX_INFO та ADDIN_E_MSGBOX_FAIL або рядок із повідомленням у вікні повідомлень для інших кодів. У загальному випадку рядок має вигляд:

Іконка ДжерелоПовідомлення : ОписПовідомлення (Код повідомлення = КодПовідомлення),

Іконка

  • ADDIN_E_NONE – іконка відсутня;
  • ADDIN_E_ORDINARY — іконка "> ";
  • ADDIN_E_ATTENTION — іконка "!";
  • ADDIN_E_IMPORTANT — іконка "!!";
  • ADDIN_E_VERY_IMPORTANT — іконка "!!!";
  • ADDIN_E_INFO — іконка "i";
  • ADDIN_E_FAIL — іконка "err" (для "1С:Підприємства" версій 7.5 та 7.7) або "!!!" (для "1С:Підприємства" версії 8).

Іконка відсутня, якщо використовується код повідомлення, що не збігається з переліченими вище.

ДжерелоПомилки — поле bstrSource у структурі EXCEPINFO.

ОписПомилки — поле bstrDescription у структурі EXCEPINFO.

КодПомилки — числовий код повідомлення в десятковому вигляді. Код повідомлення не виводиться, якщо використовується один із перелічених вище кодів.

Для кодів ADDIN_E_MSGBOX_ATTENTION, ADDIN_E_MSGBOX_INFO та ADDIN_E_MSGBOX_FAIL виводиться вікно повідомлення з кнопкою OK та іконками MB_ICONEXCLAMATION, MB_ICONINFORMATION і MB_ICONERROR відповідно.

Повідомлення має вигляд:

ДжерелоПовідомлення:ОписПовідомлення (Код повідомлення = КодПовідомлення),

Де опис ДжерелоПовідомлення, ОписПовідомлення та КодПовідомлення див. вище.Синтаксис:

HRESULT AddError(BSTR pszPropName, LPEXCEPINFO pExcepInfo);

Параметри:

pszPropName

Тип: BSTR. У цій реалізації параметр pszPropName ігнорується.

pExcepInfo

Тип: LPEXCEPINFO. Вказівник на структуру EXCEPINFO.

Повертане значення:

  • S_OK — повідомлення успішно додано.
  • E_OUTOFMEMORY — недостатньо пам'яті.
  • Можливі інші коди повернення, що сигналізують про помилку.

Діалогові повідомлення

Для діалогу з користувачем об'єкт може використовувати інтерфейс IMsgBox, стандартний для COM. Інтерфейс IMsgBox успадкований від IUnknown. Недоступний на сервері та у зовнішньому з'єднанні.

Confirm

Опис:

Виводить діалог із текстом, заданим параметром queryText, і кнопками ОК та Скасування.

Синтаксис:

HRESULT Confirm(const BSTR queryText, VARIANT *retVal) ;

Параметри:

< queryText>

Тип: BSTR. Текст запитання.

< retVal>

Тип: VARIANT. Повертане значення діалогу.

Тип VT_BOOL. Значення TRUE відповідає кнопці ОК, FALSE – Скасування.

Повертане значення:

  • S_OK — Діалог успішно показано.
  • E_FAIL – Показ діалогів не підтримується.

Alert

Опис:

Виводить простий діалог із кнопкою ОК.

Синтаксис:

HRESULT Alert( BSTR text)

Параметри:

< queryText>

Тип: BSTR. Текст повідомлення.

Повертане значення:

  • S_OK — Діалог успішно показано.
  • E_FAIL – Показ діалогів не підтримується.

Інформація про платформу

Для отримання інформації про застосунок, що підключив об'єкт, може використовувати інтерфейс IPlatformInfo, стандартний для COM. Інтерфейс IPlatformInfo успадкований від IUnknown.

GetPlatformInfo

Опис:

Запитує інформацію про платформу. У разі підключення компоненти у веб-клієнті старої версії платформи буде заповнено лише поле Application структури AppInfo.

Синтаксис:

HRESULT GetPlatformInfo(AppInfo** info)

Параметри:

< info>

Тип AppInfo**. - вказівник на структуру з полями:

AppVersion

Тип: BSTR, версія застосунку,

Application

Тип: перелік, тип застосунку, що підключив компоненту

UserAgentInformation

Тип: BSTR, інформація про браузер (лише для веб-клієнта)

Повертане значення:

  • S_OK — виконано успішно.

Зовнішні події

У разі виникнення асинхронної події (наприклад, зчитування штрихкоду) об'єкт може використовувати інтерфейс IAsyncEvent для створення зовнішньої події в "1С:Підприємстві 8". Інтерфейс IAsyncEvent успадкований від IUnknown. Усі події поміщаються до черги й обробляються в порядку появи. Кількість запам'ятовуваних подій обмежена довжиною черги. Під час ініціалізації довжина черги встановлюється рівною 1 і може бути змінена викликом SetEventBufferDepth(), а поточний розмір черги отримано за допомогою методу GetEventBufferDepth(). Для кожного об'єкта зовнішньої компоненти підтримується власна черга подій. Обробка зовнішньої події здійснюється визначеною процедурою ОбробкаЗовнішньоїПодії() та обробниками зовнішніх подій у модулях форм.

SetEventBufferDepth

Опис:

Установлює розмір черги подій для цього об'єкта. Якщо поточна кількість подій у черзі більша за встановлювану довжину, останні події видаляються.

Синтаксис:

HRESULT SetEventBufferDepth(long lDepth);

Параметри:

lDepth

Тип: long. Довжина черги повідомлень.

Повертане значення:

  • S_OK — розмір черги успішно встановлено.
  • E_FAIL — під час установлення розміру черги сталася помилка.
  • Можливі інші коди повернення, що сигналізують про помилку.

GetEventBufferDepth

Опис:

До змінної plDepth поміщається розмір черги подій для цього об'єкта.

Синтаксис:

HRESULT GetEventBufferDepth(long* plDepth);

Параметри:

plDepth

Тип: long*. Вказівник на змінну, що під час повернення містить довжину черги повідомлень.

Повертане значення:

  • S_OK — розмір черги успішно повернуто.
  • E_FAIL — під час отримання розміру черги сталася помилка.
  • Можливі інші коди повернення, що сигналізують про помилку.

ExternalEvent

Опис:

Поміщає подію до черги, записуючи джерело події, найменування та параметри події. Під час обробки події ці дані передаються процедурі ОбробкаЗовнішньоїПодії(). Під час виклику методу ExternalEvent() подальша обробка події відбувається так:

  • подія записується до черги подій (якщо черга повністю зайнята, подія втрачається);
  • потім за відсутності системних подій із черги береться перша подія (якщо черга не порожня);
  • запускається процес обробки зовнішніх подій.

Цей процес повторюється для всіх об'єктів зовнішніх компонентів. Таким чином, обробка зовнішніх подій синхронізується з обробкою системних подій.

Синтаксис:

HRESULT ExternalEvent(BSTR bstrWho, BSTR bstrWhat, BSTR bstrData);

Параметри:

bstrWho

Тип: BSTR. Рядок із найменуванням джерела повідомлення.

bstrWhat

Тип: BSTR. Рядок із найменуванням повідомлення.

bstrData

Тип: BSTR. Рядок c параметрами повідомлення.

Повертане значення:

  • S_OK – подію поміщено до черги.
  • E_FAIL – черга переповнена або невідома помилка.
  • E_OUTOFMEMORY – відсутність пам'яті.
  • Можливі інші коди повернення, що сигналізують про помилку.

CleanBuffer

Опис:

Очищає чергу подій, видаляючи всі наявні в черзі події.

Синтаксис:

HRESULT CleanBuffer();

Повертане значення:

  • S_OK — чергу успішно очищено.
  • E_FAIL – під час очищення черги сталася помилка.
  • Можливі інші коди повернення, що сигналізують про помилку.

Робота з рядком стану

Для інформування користувача про свій стан об'єкт компоненти може використовувати інтерфейс IStatusLine. Під час виклику методу SetStatusLine() переданий текст негайно відображається в рядку стану. Під час виклику методу ResetStatusLine() у рядку стану відображається стандартний текст.

SetStatusLine

Опис:

Установлює текст рядка стану.

Синтаксис:

HRESULT SetStatusLine(BSTR bstrStatusText);

Параметри:

bstrStatusText

Тип: BSTR. Текст рядка стану.

Повертане значення:

  • S_OK — текст відображено в рядку стану.
  • E_FAIL — невідома помилка.
  • Можливі інші коди повернення, що сигналізують про помилку.

ResetStatusLine

Опис:

Ініціалізує рядок стану.

Синтаксис:

HRESULT ResetStatusLine();

Повертане значення:

  • S_OK — рядок стану успішно переініціалізовано,
  • E_FAIL — невідома помилка,
  • Можливі інші коди повернення, що сигналізують про помилку.

Створення вікон у середовищі "1С:Підприємства 8"

Зовнішні компоненти можуть створювати власні вікна для відображення різної інформації, використовуючи інтерфейс IExtWndsSupport. Компонента може створювати два типи вікон: модальні діалоги, немодальні діалоги.

Модальні діалоги

Модальні діалоги створюються самою компонентою, але під час їх створення необхідно як батьківське вікно вказати вікно, яке повертається методом GetAppMainFrame(), щоб діалог не сприймався операційною системою як окреме завдання з кнопкою на панелі завдань. Робота системи "1С:Підприємство" призупиняється до завершення роботи з діалогом.

Немодальні діалоги

Немодальні діалоги також створюються самою компонентою, але під час їх створення необхідно як батьківське вікно вказати вікно, яке повертається методом GetAppMDIFrame(), щоб діалог не сприймався операційною системою як окреме завдання з кнопкою на панелі завдань. Діалог не зупиняє роботу "1С:Підприємства! і, по суті, аналогічний формам "1С:Підприємство 8". Однак слід врахувати, що створений діалог не входить до списку відкритих вікон і не з'являється на панелі вікон, тому використання таких діалогів не рекомендується (замість них можна використовувати форми самого "1С:Підприємства 8").

У "1С:Підприємстві 8" можливість створення вікон збережена в скороченому вигляді для сумісності з наявними компонентами. Для відображення нестандартної інформації у вікнах "1С:Підприємство 8" рекомендується використовувати форми з елементами керування ActiveX або Активні документи. Нижче наведено описи методів інтерфейсу IExtWndsSupport.

Увага! Можливість роботи з вікнами відсутня у веб-клієнті.

GetAppMainFrame

Опис:

Повертає дескриптор основного вікна "1С:Підприємства 8".

Синтаксис:

HRESULT GetAppMainFrame(HWND* pHWnd);

Параметри:

  • pHWnd

Тип: HWND*. Вказівник на дескриптор вікна.

Повертане значення:

  • S_OK

GetAppMDIFrame

Опис:

Повертає дескриптор активного вікна "1С:Підприємства 8".

Синтаксис:

HRESULT GetAppMDIFrame(HWND* pHWnd);

Параметри:

pHWnd

Тип: HWND*. Вказівник на дескриптор вікна.

Повертане значення:

  • S_OK

Доступ до "1С:Підприємства" через механізм OLE Automation

Версія технології 2.0

Переданий у методі Init() вказівник на IDispatch дає змогу отримати доступ до "1С:Підприємства 8" через механізм OLE Automation. З отриманого вказівника можна отримати властивість AppDispatch, доступну лише для читання. Ця властивість містить вказівник на IDispatch "1С:Підприємства 8" (не плутати з переданим у Init()). Під час підключення компоненти до веб-клієнта властивість AppDispatch буде недоступна. Це слід враховувати під час розробки компонентів.

Властивість AppDispatch стає доступною лише після повної ініціалізації всієї системи "1С:Підприємство 8", тому в момент завантаження зовнішньої компоненти та виклику методу Init() ця властивість забезпечує доступ не до всіх можливостей "1С:Підприємства 8".

Доступ до методів інтерфейсів "1С:Підприємства" через OLE Automation

Visual Basic має обмежені можливості роботи з різними інтерфейсами. Найбільш "природним" механізмом для Visual Basic є робота з OLE Automation, для цього у VB використовується тип Object, який є вказівником на IDispatch. Тому "1С:Підприємство 8" надає можливість використовувати механізм OLE Automation, передаючи вказівник на IDispatch у методі Init() і забезпечуючи виклики методів перелічених вище інтерфейсів через OLE Automation.

Методи та властивості, доступні через OLE Automation:

Версія технології: 1.0

  • RegisterProfileAs(< Ім'яСпискуПараметрів> ),
  • Read(< Ім'яЗмінної> ,< ПосиланняНаVARIANT> ),
  • Write< Ім'яЗмінної> ,< ПосиланняНаVARIANT> (),
  • SetEventBufferDepth(< ДовжинаЧергиПодій> ),
  • GetEventBufferDepth(< ПосиланняНаДовжинуЧерги> ),
  • ClearEventBuffer(),
  • ExternalEvent(< РядокДжерелоПодії> ,< РядокНайменуванняПодії> ,< РядокПараметриПодії> ),
  • AddError(< КодПовідомлення> ,< РядокДжерелоПовідомлення> ,< РядокОписПовідомлення> ,< КодПомилки> ),
  • SetStatusLine(< РядокСтану> ),
  • ResetStatusLine().

Версія технології: 2.0

Методи та властивості, реалізовані додатково до методів версії 1.0.

Увага! Перелічені нижче методи та властивості недоступні під час роботи з веб-клієнтом.

  • властивість AppDispatch,
  • GetAppMainFrame(< Вказівник на дескриптор вікна> ),
  • GetAppMDIFrame(< Вказівник на дескриптор вікна> ).

Особливості розробки компонентів із використанням COM

Компоненти, розроблені з використанням технології COM, можуть спочатку бути не встановлені на комп'ютері користувача. Метод ПідключитиЗовнішнюКомпоненту(< МісцезнаходженняКомпоненти> , < Ім'яМітки> , ТипЗовнішньоїКомпоненти.COM) отримує з інформаційної бази файл зовнішньої компоненти, якщо остання перебуває там, і викликає функцію реєстрації об'єктів компоненти DllRegisterServer. Якщо користувач обмежений у правах, то реєстрація та підключення зовнішньої компоненти завершаться невдачею. Розробник має передбачити можливість реєстрації компоненти для користувача за його поточними правами. У прикладі COM-компоненти, що постачається, показано, як це можна зробити. Якщо зовнішня компонента має власний інсталятор, то вона має реєструватися для комп'ютера.

Підготовка зовнішніх компонентів до роботи з Веб-клієнтом

Взаємодія зовнішніх компонентів із веб-клієнтом здійснюється за допомогою розширень. У прикладах наведено проєкти для побудови розширень для Mozilla Firefox та Internet Explorer. З метою безпеки кожне розширення може працювати лише з однією компонентою, заданою на етапі компіляції. Кожне розширення складається власне із зовнішньої компоненти та адаптера браузера. Зовнішньою компонентою може бути вже наявна зовнішня компонента, створена за технологією COM.

Скриптова мова програмування браузерів є однопотоковою. У зв'язку з цим слід уникати зворотних викликів із неосновного потоку в компоненті. В інших потоках працюватимуть лише методи ExternalEvent(), SetStatusLine(), ResetStatusLine(). Слід враховувати ці особливості під час розробки зовнішньої компоненти.

Для збирання адаптерів Firefox версій 6 і 19 для ОС Windows – слід використовувати компілятор від Visual Studio 2008, для версії 22 – компілятор від Visual Studio 2010. Для ОС Linux для Firefox-22 – слід використовувати gcc версії не нижче 4.4.

Бібліотеки для інших браузерів для ОС Windows використовують компілятор від Visual Studio 2008.

Зовнішні компоненти для Mozilla Firefox

Створення адаптера для Mozilla Firefox

Під час створення розширення для Firefox на комп'ютері розробника потрібно встановити xulrunner-sdk. Останню версію можна взяти із сайту Mozilla. Підтримувані версії: xulrunner-6.0 для Firefox із версії 4 до 18, xulrunner-19.0 для Firefox із версії 19 до 22, xulrunner-22.0 для Firefox із 22 і вище. Для різних версій Firefox мають бути зібрані різні інсталяційні пакети, у яких використовуються відповідні версії xulrunner. У процесі встановлення компоненти платформа вибере потрібний пакет, ґрунтуючись на зазначеній версії в маніфесті (див. нижче). Також для кожної версії Firefox використовуються різні файли опису інтерфейсів (файли з розширенням xpt).

Для версій Firefox від 4 до 18 включно слід використовувати xulrunner-6.0 або вище та версію бібліотеки адаптера для Firefox-6 цієї « Технології зовнішніх компонентів» . Із версії Firefox-19.0 до 22.0 слід використовувати xulrunner із версії 19.0 до 21.0 та версію бібліотеки адаптера для Firefox-19. Із версії Firefox-22.0 слід використовувати xulrunner-22.0 і версію бібліотеки адаптера для Firefox-22, бібліотека адаптера сумісна з новішими версіями xulrunner і Firefox.

За основу під час створення розширення розробник може взяти проєкт AddInFF з каталогу example. У файлі config.cpp потрібно змінити значення текстових змінних на власні значення та згенерувати нові uuid. Імена змінних змінювати не треба. Також у змінній nameFileComponent указати ім'я зовнішньої компоненти (наприклад: AddInNative.dll), а в nameFilePrj – ім'я вихідного файлу проєкту розширення (наприклад: AddInFF.dll). В опціях компілятора, у розділі General-> Additional Include Directories виправити шляхи до заголовкових файлів addn\include, xulrunner-sdk\include. В опціях компонувальника, у розділі General-> Additional Library Directories виправити так, щоб могли бути знайдені каталоги xulrunner-sdk\sdk\lib і xulrunner-sdk\lib та addin\lib зі складу цього постачання. Збирання адаптера для ОС GNU/Linux має виконуватися з прапорами компілятора -fshort-wchar – fno-rtti.

Створення інсталяційного пакета

Інсталяційний пакет для Mozilla Firefox являє собою особливим чином зібраний ZIP-архів із розширенням xpi. Структуру каталогів і файлів можна побачити в каталозі example/PackageFF. Слід звернути увагу на формування файлів install.rdf та install.js. У першому файлі міститься інформація про Ваше розширення. У ньому обов'язково потрібно змінити uuid, що знаходиться під рядком < !-— my package uuid-->, і заповнити рядки після < !-— my component info--> інформацією про створюване розширення. Докладну інформацію про заповнення install.rdf можна знайти на сайті Mozilla: http://developer.mozilla.org/en/Install_Manifests. У файлі install.js міститься скрипт установлення, у якому потрібно в змінній XPCOM_FILES указати назви файлів зовнішньої компоненти та адаптера. Файли 1CEAdnWebFF.xpt із каталогу lib, компоненти та адаптера поміщаються до каталогу Components. Збирання пакета виконується у два етапи:

1. Підкаталог content у каталозі chrome упаковується в ZIP-архів. В архіву змінюється розширення на jar. Після цього каталог content можна видалити.

2. Увесь вміст каталогу PackageFF (не включаючи сам PackageFF) упаковується в один ZIP-архів. Отриманий архів перейменовується відповідно до назви компоненти з розширенням xpi. Для перевірки правильності створеного пакета потрібно в меню Mozilla Firefox вибрати Файл - Відкрити файл… і вибрати щойно створений пакет.

Докладніше дізнатися про створення розширень для Mozilla Firefox можна на сайті Mozilla: http://developer.mozilla.org/en/Creating_XPCOM_Components/Packaging_WebLock#Component_Installation_Overview.

Зовнішні компоненти для Internet Explorer

Створення адаптера для Internet Explorer

За основу під час створення розширення розробник може взяти проєкт AddInIE з каталогу example. В idl-файлі потрібно змінити назву бібліотеки (наприклад library MyComponenIEtLib) і uuid coclass'ів та бібліотеки. Усі зміни, які має зробити розробник у цьому файлі, позначено коментарем //change. Uuid інтерфейсів та їхні імена змінювати не потрібно. Бажано перейменувати назву проєкту (наприклад MyComponentIE). У файлі config.cpp — змінити назву включуваного файлу AddInIE_i.h на згенерований середовищем розробки за файлом idl і змінити значення текстових змінних на імена coclass’ ів бібліотеки (наприклад MyComponentIE.AddInServiceEx). Змінній LIBID_AddInWebLib – призначити значення LIBID вашої бібліотеки. Також у змінній nameFileComponent указати ім'я зовнішньої компоненти (наприклад AddInNative.dll), а в nameFilePrj – ім'я вихідного файлу проєкту розширення (наприклад MyComponentIE.dll). Розширення для Internet Explorer є COM-об'єктом, тому розробник має враховувати Особливості розробки компонентів із використанням COM.

Створення інсталяційного пакета

Інсталяційний пакет для Internet Explorer являє собою CAB-архів. Для його побудови необхідно завантажити MS CAB SDK: http://support.microsoft.com/kb/310618. У каталозі example\PackageIE міститься приклад для побудови інсталяційного пакета. Розробник має змінити назву файлу addin.inf на свою (наприклад, MyComponent.inf). У цей файл внести зміни, що відповідають проєкту компоненти:

  • імена файлів, каталогів;
  • у змінній LayoutFile та секції inffile указати ім'я свого inf-файлу.

Розробник має обов'язково передбачити способи коректного видалення зовнішньої компоненти, установленої в Internet Explorer за допомогою компонента операційної системи Add/Remove Program.

"1С:Підприємство", починаючи з версії 8.2.11, уміє самостійно визначити результат установлення зовнішньої компоненти. Але якщо передбачається використання компоненти з ранніми версіями "1С:Підприємства", то розробник має обов'язково передбачити спосіб сповіщення користувача про успішне встановлення компоненти.

Докладніше дізнатися про заповнення inf-файлу можна в MSDN або на сайті Microsoft: http://msdn.microsoft.com/en-us/library/aa376858(VS.85).aspx. Усі виконувані файли, що входять до інсталяційного пакета, і сам cab-файл мають бути підписані цифровим підписом розробника. Скрипт побудови cab-файлу наведено в buildcab.bat.

Зовнішні компоненти для Google Chrome

Увага! Ця можливість підтримується лише починаючи з 1С:Підприємства 8.3.1.

Створення адаптера для Google Chrome

Адаптер зовнішньої компоненти для Chrome та Safari являє собою NPAPI-плагін. NPAPI-плагін реєструє в браузері один або кілька MIME media type, які він обслуговує. Під час створення нової компоненти розробник має вибрати для неї MIME media type, який буде її унікальним ідентифікатором. Рекомендується починати MIME media type з application/ і включати до нього номер версії компоненти, наприклад application/my-component-1. Під час вибору MIME media type потрібно подбати про відсутність конфліктів із зареєстрованими MIME media type. Якщо випускається нова версія компоненти, номер версії в MIME media type слід збільшити, інакше веб-клієнт продовжуватиме користуватися старою версією компоненти.

Припустимо, що в конфігурації використовується компонента, у якої MIME media type - application/my-component-3. Розробник компоненти випускає нову версію компоненти. Для включення її до конфігурації потрібно перезібрати адаптери для Chrome та Safari, змінивши в них MIME media type на application/my-component-4. Потім перезібрати інсталяційні пакети та включити їх до архіву, що завантажується в конфігурацію. Також потрібно змінити файл маніфесту архіву, змінивши в ньому MIME media type на application/my-component-4. Після цього завантажити архів у конфігурацію. Що відбувається під час запуску веб-клієнта з новою конфігурацією на машині, на якій раніше було встановлено попередню версію компоненти? Веб-клієнт отримує з конфігурації інформацію про те, що MIME media type компоненти - application/my-component-4. Такий MIME media type у браузері не зареєстровано, тому стара версія компоненти не буде використана. Щоб почати використання компоненти, користувач має виконати її встановлення. Стара версія компоненти при цьому не видаляється та залишається доступною для використання з ранніми конфігураціями.

За основу під час створення розширення розробник може взяти проєкт AddInNPAPI з каталогу example. У файлі AddInNPAPI.cpp потрібно змінити значення змінних nameFilePrj, nameFileComponent і mimeType. nameFilePrj має містити ім'я файлу адаптера (наприклад, AddInNPAPI.dll), nameFileComponent - ім'я файлу зовнішньої компоненти (наприклад, AddInNative.dll). mimeType містить MIME media type компоненти. Крім того, MIME media type потрібно змінити в ресурсах проєкту, у блоці VERSION. Блок VERSION обов'язково має бути присутній у ресурсах адаптера, оскільки під Windows браузер отримує MIME media type розширення саме з ресурсів. Значення MIMEType не видно в редакторі ресурсів Visual Studio, його задають вручну, редагуючи текст rc-файлу. Папка AddInNPAPI містить проєкт Visual Studio для збирання прикладу під Windows і makefile для збирання під Linux. Під Windows збирається лише 32х-розрядна версія, оскільки Chrome під Windows існує лише 32х-розрядний. Під Linux збираються 32х- і 64х-розрядні версії.

Створення інсталяційного пакета

Інсталяційний пакет для Chrome під Windows створюється у форматі MSI. Під час встановлення пакет має скопіювати файли на диск комп'ютера та зареєструвати розширення як плагін браузера в системному реєстрі. У реєстрі потрібно створити гілку HKCU\Software\MozillaPlugins\@YourCompanyName.com/YouExtensionName (замість YourCompanyName.com та YouExtensionName підставте свої значення), у якій створити такі параметри. Усі параметри рядкового типу.

Найменування

Опис

Description

Відображуваний опис компоненти

Path

Повний шлях до файлу адаптера компоненти

ProductName

Відображувана назва програмного продукту

Vendor

Розробник компоненти

Version

Номер версії

Пакет має бути підписаний цифровим підписом розробника.

У папці example\AddInNPAPISetup міститься проєкт Visual Studio, що збирає пакет MSI для прикладу компоненти. Для кожної компоненти має бути сформований унікальний UUID ProductCode.

Інсталяційний пакет для Chrome під Linux створюється у форматі CRX. Це формат інсталяційних пакетів для розширень Chrome. Докладніше про цей формат можна прочитати на сайті Google Code. Для збирання CRX-файлу на комп'ютері має бути встановлено Chrome. CRX-файл являє собою архів, що містить бінарні модулі зовнішньої компоненти, адаптера, а також файл маніфесту. Усі файли, включені до пакета, мають бути перелічені у файлі маніфесту, причому файл адаптера має фігурувати там з ознакою "public":true, а файл(и) зовнішньої компоненти - без цієї ознаки. Також до пакета можна включити логотип, який потім відображатиметься Chrome поруч із найменуванням компоненти в списку встановлених розширень. Папка PackageChrome містить файли, потрібні для створення інсталяційних пакетів для Linux. Файл manifest.json містить маніфест для Linux. Пакетний файл buildcrx.bat виконує збирання інсталяційних пакетів прикладу для Linux.

Зовнішні компоненти для Safari

Увага! Ця можливість підтримується лише починаючи з 1С:Підприємства 8.3.1.

Створення адаптера для Safari

Збирання адаптера для Safari під Windows майже не відрізняється від збирання адаптера для Chrome. Зібраний бінарний модуль адаптера для Chrome може бути використаний і для Safari. Єдина особливість збирання для Safari така. Потрібно простежити, щоб блок ресурсів VERSION знаходився в англійській секції, як це зроблено у ресурсному файлі прикладу. Інакше Safari може не виявити навіть правильно встановленого розширення. Рекомендується під час збирання власного адаптера брати rc-файл із прикладу, включати його до свого проєкту та редагувати поля блоку VERSION.

Адаптер для Safari під Mac OS X не потребує збирання, він постачається у зібраному вигляді в папці lib (1CEAdnWebNPAPISafOSX.bundle). Зовнішню компоненту під Mac OS також потрібно зібрати у вигляді bundle. Рекомендується збирати 32/64-bit Universal модуль, що містить щонайменше архітектури i386 та x86_64. У папці example/NativeAPI/MacBuild міститься проєкт XCode, що збирає приклад компоненти під Mac OS.

Створення інсталяційного пакета

Під Windows для Safari та Google Chrome використовується один і той самий інсталяційний пакет MSI. Під час установлення компоненти в одному з браузерів компонента стає доступною обом браузерам. Створення пакета описано вище, у розділі про Google Chrome.

Під Mac OS X пакет створюється за допомогою програми PackageMaker у форматі PKG. Пакет має бути підписаний цифровим підписом розробника (якщо не передбачається встановлення компоненти на версії Mac OS X 10.4 Tiger і більш ранні).

Для створення пакета потрібно виконати такі дії:

1. Скопіювати з папки lib 1CEAdnWebNPAPISafOSX.bundle в іншу папку. Перейменувати, зберігаючи розширення .bundle.

2. Знайти у вмісті bundle файл Info.plist, відкрити його для редагування. У файлі потрібно змінити MIME media type на використовуваний для Вашої компоненти, а також змінити опис розширення та інші параметри.

3. Усередині папки Contents створити папку PlugIns. До цієї папки скопіювати bundle зібраної під Mac OS зовнішньої компоненти. Отриманий bundle адаптера з компонентою всередині має встановлюватися в папку /Library/Internet Plug-Ins.

4. Зібрати інсталяційний пакет. Для цього слід використовувати утиліту PackageMaker, що входить до складу XCode. Під час установлення пакет має лише скопіювати bundle до папки /Library/Internet Plug-Ins.

Підготовка зовнішніх компонентів для завантаження в конфігурацію

Зовнішні компоненти можуть бути упаковані в ZIP-архів. Для роботи з Веб-клієнтом і тонким клієнтом – це обов'язкова умова. До нього мають увійти власне компоненти для ОС Windows (x86, x86_64), GNU/Linux (x86, x86_64), створені розширення для Internet Explorer (x86, x86_64) та Firefox (Windows x86, GNU/Linux x86 і x86_64). До складу архіву включається файл MANIFEST.XML з описом вмісту:

<
?xml version="1.0" encoding="UTF-8" ?>

<
bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">

<
component os="Windows" path="AddIn_FF6Windows_x86.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="i386" client="Firefox" clientVersion="6.*" />

<
component os="Linux" path="AddIn_FF6Linux_x86.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="i386" client="Firefox" clientVersion="6.*" />

<
component os="Linux" path="AddIn_FF6Linux_x86_64.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="x86_64" client="Firefox" clientVersion="6.*" />

<
component os="Windows" path="AddIn_FF19Windows_x86.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="i386" client="Firefox" clientVersion="19.*" />

<
component os="Linux" path="AddIn_FF19Linux_x86.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="i386" client="Firefox" clientVersion="19.*" />

<
component os="Linux" path="AddIn_FF19Linux_x86_64.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="x86_64" client="Firefox" clientVersion="19.*" />

<
component os="Windows" path="AddIn_FF22Windows_x86.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="i386" client="Firefox" clientVersion="22.*" />

<
component os="Linux" path="AddIn_FF22Linux_x86.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="i386" client="Firefox" clientVersion="22.*" />

<
component os="Linux" path="AddIn_FF22Linux_x86_64.xpi" type="plugin" object="@vendor.ru/ClassService;
1" arch="x86_64" client="Firefox" clientVersion="22.*" />

<
component os="Windows" path="Addin_IEWindows_x86.cab" type="plugin" object="MyComponenIE.AddInServiceEx" arch="i386" client="MSIE" />

<
component os="Windows" path="AddIn_IEWindows_x86_64.cab" type="plugin" object=" MyComponenIE.AddInServiceEx" arch="x86_64" client="MSIE" />

<
component os="Windows" path="AddIn_NPAPIWindows_x86.msi" type="plugin" object=" application/component-example-1" arch="i386" client="Chrome" />

<
component os="Linux" path="AddIn_ChrLinux_x86.crx" type="plugin" object=" application/component-example-1" arch="i386" client="Chrome" />

<
component os="Linux" path="AddIn_ChrLinux_x86_64.crx" type="plugin" object=" application/component-example-1" arch="x86_64" client="Chrome" />

<
component os="Windows" path="AddIn_NPAPIWindows_x86.msi" type="plugin" object=" application/component-example-1" arch="i386" client="Safari" />

<
component os="MacOS" path="AddIn_SafMacOS_x86.pkg" type="plugin" object=" application/component-example-1" arch="i386" client="Safari" />

<
component os="Windows" path="AddInNative.dll" type="native" arch="i386" />

<
component os="Windows" path="AddInNative64.dll" type="native" arch="x86_64" />

<
component os="Linux" path="AddInNative.so" type="native" arch="i386" />

<
component os="Linux" path="AddInNative64.so" type="native" arch="x86_64" />

<
/bundle>
,

Де:

  • os – операційна система:
    • Windows;
    • Linux;
  • path – назва файлу в архіві;
  • type – тип компоненти:
    • plugin – розширення для браузера;
    • native – Native-компонента;
    • com – COM-компонента.
  • object – назва об'єкта, який буде створюватися браузером;
  • arch – для якої архітектури процесора має використовуватися компонента:
    • i386 – 32-розрядний процесор;
    • x86_64 – 64-розрядний процесор;
  • Client – використовується для зазначення браузера, що використовується веб-клієнтом:
    • MSIE – Microsoft Internet Explorer;
    • Firefox – Mozilla Firefox;
  • clientVersion – версія браузера.

Відповідність версій clientVersion, зазначених у маніфесті, та версій браузера Firefox:

У разі зміни зовнішніх компонентів (новий реліз, виправлення помилок тощо) нову версію потрібно додавати до імені файлу. Наприклад: AddInNative_1_1.so. Це правило не поширюється на розширення для браузерів. Для них має бути змінено назву object.

Зверніть увагу, що записи для Google Chrome та Safari під Windows посилаються на один і той самий інсталяційний пакет.

Manifest.xml Firefox
6.* 4.0-18.*
19.* 19.0-21.*
22.0 *

Опис прикладів

До постачання цієї методики входять приклади реалізації зовнішніх компонентів, розроблених із використанням технологій Native API та СОМ, розширень для Firefox та Internet Explorer. Крім прикладу, до постачання включено шаблон, що дає змогу спростити створення компоненти "з нуля".

Реалізації компонентів максимально наближені одна до одної (однакові ідентифікатори, назви тощо), що спрощує процес освоєння та розбору різних реалізацій.

Компоненти реалізують такі властивості та методи:

Властивості

Увімкнено (IsEnabled)

Використання:

Читання та запис.

Опис:

Тип: Булево. Містить стан компоненти.

ЄТаймер (IsTimerPresent)

Використання:

Читання.

Опис:

Тип: Булево. Визначає наявність у компоненти таймера.

Методи

Увімкнути (Enable)

Опис:

Увімкнює об'єкт компоненти.

Синтаксис:

Увімкнути()

Вимкнути (Disable)

Опис:

Вимикає об'єкт компоненти.

Синтаксис:

Вимкнути()

ПоказатиУРядкуСтану (ShowInStatusLine)

Опис:

На 5 секунд виводить у рядок стану отриманий текст.

Синтаксис:

ПоказатиУРядкуСтану(< Текст> )

Параметри:

Текст.

Тип: Рядок. Текст, що виводиться в рядку стану.

УвімкнутиТаймер (StartTimer)

Опис:

Увімкнює таймер компоненти. Щосекунди компонента надсилає повідомлення "1С:Підприємство 8" з параметрами Component, Timer та рядком лічильника системного годинника.

Синтаксис:

УвімкнутиТаймер()

ВимкнутиТаймер (StopTimer)

Опис:

Вимикає таймер компоненти.

Крім того, компонента, розроблена з використанням Native API, додатково реалізує метод ЗавантажитиКартинку().

Синтаксис:

ВимкнутиТаймер()

ЗавантажитиКартинку(LoadPicture)

Опис:

Завантажує зображення із зазначеного файлу та передає його в "1С:Підприємство 8" у вигляді двійкових даних.

Синтаксис:

ЗавантажитиКартинку (< Ім'яФайлу> )

Параметри:

Ім'яФайлу

Тип: Рядок. Ім'я файлу із зображенням.

Засоби розробки та приклади

Як засоби розробки можна застосовувати:

  • Microsoft Visual C++,
  • Delphi,
  • C++ Builder,
  • gcc

Приклади створення зовнішніх компонентів знаходяться в каталозі \1CIts\EXE\VNCOMPS

Приклади для роботи з "1С:Підприємством 8.3" розташовуються в підкаталозі VNCOMP83.

ВИ МОЖЕТЕ ПРЯМО ЗАРАЗ СКОПІЮВАТИ ПРИКЛАДИ ЗОВНІШНІХ КОМПОНЕНТІВ
НА ЖОРСТКИЙ ДИСК ВАШОГО КОМП'ЮТЕРА

Копіювати

Записатися телефоном