Skip to content

int-unsigned/esb

Repository files navigation

ЕСБ – это c++ framework для создания внешней (Native, c++) компоненты 1С (ВК) с расширенным интерфейсом и возможностями.


Стандартные внешние компоненты у 1С имеют «зауженный» интерфейс через который в с++ из 1С можно передать только примитивные данные и вернуть результат тоже только в таком же примитивном виде.

ЕСБ снимает это ограничение и посредством ее интерфейса в компоненту можно передать фактически любое значение, любой объект, которые используются в языке 1С. Ну и соответственно из метода можно вернуть в среду 1С любое допустимое в 1С значение. Фактически ЕСБ позволяет делать "родной" SCOM-модуль платформы 1С.

Причем что с++ часть есб устроена так, что Вы можете работать с объектами 1С в с++ практически точно также, как в конфигураторе 1С. Можно даже по-русски.

Кроме этого ЕСБ, несколько ограниченно, но позволяет делать новые типы объектов для языка 1С и Вы можете с этими объекта работать в среде 1С практически как с «родными».

То есть, вкратце, ЕСБ – это не «компонента-для-1С», а скорее возможность расширить саму 1С согласно Вашим требованиям и своими силами.


ПС. Используются исключительно публичные, но недокументированные интерфейсы и типы 1С. Никакого взлома или модификации оригинального кода 1С. Никакого разглашения и документирования – Есб поставляется с откомпилированной esbhlp.lib, которая и работает с платформой


ЕСБ абсолютно свободен и бесплатен, с некоторыми ограничениями на бинарную часть (esbhlp.lib), которые диктуются соображениями юридического характера

см. esb-license.txt


На данный момент поддерживаются (протестированы): ОС Win32 и Win64, версии платформы 1С от 8.3.9.1818 до 8.3.23.1688. Режим - ПолныйКлиент. Используется компилятор MSVC 16.11.19 (версии 19.29.30146), c++20 и "совместимый" препроцессор - (/Zc:preprocessor)

Из 1С подключены только базовые типы языка, контейнеры, классы работы с данными, т.п. Также порядка 200 АПИ. По мере развития может быть расширено.

(см. change_log.txt)


Для удобства сделан шаблона создания проекта EsbStudio.ProjectTemplate, который создает заготовку проекта компоненты и проводит первоначальное конфигурирование решения.

(нужно установить расширение EsbStudio.vsix из подпапки esb_studio)

Также из той же папки рекомендуется установить расширение EslLanguage.vsix - это расширение редактора Visual Studio для редактирование файлов модулей 1С непосредственно в Visual Studio без запуска 1С. (пока очень сырой).

Редактор автоматически отслеживает интерфейс разрабатываемой Вами в с++ компоненты и отображает в модулях 1С подсказки, списки дополнения и т.п.

Также в редактор знает пока (очень) небольшое количество методов и объектов платформы 1С.

Интеллисенс редактора типизирован. Т.е. привычное 'Сообщить(<ТекстСообщения>, <Статус>)' в подсказках и списках дополнения будет выглядеть как 'Процедура Сообщить(<ТекстСообщения> Как Строка, <Статус> Как СтатусСообщения)'.

Проект создаваемый мастером шаблона EsbStudio.ProjectTemplate настроен для автоматического обновления тестовой базы 1С при изменении кода модулей 1С в среде Visual Studio при компиляции с++ кода компоненты (в случае изменения кода модулей)

Вам остается только нажать F5 - запуск отладки - и Ваша компонента будет откомпилирована и запустится конфигурация 1С для проверки ее работоспособности.


Пример примитивной сортировки 1С-МассиваЧисел с использованием ЕСБ (это с++) (ПС. поддержка многоязычности (русского пока) на сколько это возможно для современного с++. Отключаемо.)

Массив СортироватьМассивЧиселПоРусски(Массив Массив_) {
 Число колво = Массив_.Количество();
 Число макс_индекс = колво - 1;
 Перем<Число> врем = 0;

 for (Число индекс = 0; индекс < макс_индекс; ++индекс) {
  Число индекс_меньшего = индекс;
  for (Число индекс2 = индекс + 1; индекс2 < колво; ++индекс2) {
   if (Массив_.Получить(индекс2).КакЗначение<Число>() < Массив_.Получить(индекс_меньшего).КакЗначение<Число>())
индекс_меньшего = индекс2;
  }
  if (индекс_меньшего != индекс) {
   врем = Массив_.Получить(индекс).КакЗначение<Число>();
   Массив_.Установить(индекс, Массив_.Получить(индекс_меньшего));
   Массив_.Установить(индекс_меньшего, врем);
  }
 }

 return std::move(Массив_);
}

или

Массив СортироватьМассивЧиселИспользуяСТД(Массив Массив_) {
 using тип_значения_в_массиве = Массив::iterator::value_type;
 auto компаратор_на_меньше = [](const тип_значения_в_массиве& a, const тип_значения_в_массиве& b) -> bool 
	{
  		return (a.КакЗначение<Число>() < b.КакЗначение<Число>());
 	};
 std::sort(begin(Массив_), end(Массив_), компаратор_на_меньше);

 return std::move(Массив_);
}

Пример кода, который добавляет в среду 1С новый объект "похожий на число" на основе с++ double. (ограничение 1С: в расчетах нужно предварять оператором +)

ESB_VALUEDEF_WITH_FACTORY(RealValue, double, 
	"EFD29FF2-D9D3-4CD8-902D-CC8517A762D8", 
	("Real", "Действительное"), 
	"Действительное с плавающей точкой");

Пример кода, который добавляет в среду 1С новый объект, который выглядит как массив чисел. (Операторы индексации .[] и перечисления коллекции поддерживаются автоматически для индексируемых и/или итерируемых с++ классов.)

struct PseudoArrayOfIntObject {
	// здесь реализация с++ класса поверх std::vector<int>. (см.демо)
};
// Собственно создание и регистрация нового объекта для 1С
ESB_INTERFACEDEF_OBJECT_STABLE(
		PseudoArrayOfIntObject, 
		"2EB431BF-F5F9-48F4-8F79-3C7970504D19", 
		("PseudoArrayOfInt", "ПсевдоМассивЦелых"), 
		"Объект псевдо-массив целых чисел")
 ESB_META_INTERFACE_METH(
  ESB_META_INTERFACE_MEMB_METH( Count,   "Количество"),
  ESB_META_INTERFACE_MEMB_METH( Get,   "Получить"),
  ESB_META_INTERFACE_MEMB_METH( Set,   "Установить")
 );
 ESB_META_CTOR_INTERFACE(
  ESB_META_CTOR(),
  ESB_META_CTOR(size_t)
 );
ESB_INTERFACEDEF_DONE_WITH_VALUE_AND_FACTORY_REG(
						PseudoArrayOfIntObject, PseudoArrayOfInt);


полностью смотрите в папке demo.


Есб. О результатах тестирования быстродействия. https://docs.google.com/document/d/1elL7J8KbqKLaciR9iZ_9AZpFdWPSr0_QpWigUtEPEcQ



Разработка ведется в https://github.com/int-unsigned/esb

Связь с автором: v8classes@gmail.com

Телеграмм 1С++Есб: https://t.me/+BoPqXKtQP_M3NWZi

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published