diff --git a/lib.config b/lib.config
index a4d1a82..9b68cf3 100644
--- a/lib.config
+++ b/lib.config
@@ -6,6 +6,7 @@
+
diff --git a/packagedef b/packagedef
index e0ac507..893d7ad 100644
--- a/packagedef
+++ b/packagedef
@@ -1,5 +1,5 @@
Описание.Имя("cpdb")
- .Версия("1.5.1")
+ .Версия("1.5.2")
.ВерсияСреды("1.6.0")
.ЗависитОт("logos")
.ЗависитОт("1commands")
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\320\260\320\272\320\265\321\202\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\320\260\320\272\320\265\321\202\320\260.os"
new file mode 100644
index 0000000..c692541
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\320\260\320\272\320\265\321\202\320\260.os"
@@ -0,0 +1,251 @@
+//////////////////////////////////////////////////////////////////////
+// Позаимствовано из пакета opm
+// https://github.com/oscript-library/opm
+//
+//////////////////////////////////////////////////////////////////////
+//
+// Fluent-API для описания пакета
+//
+//////////////////////////////////////////////////////////////////////
+
+Перем мСвойстваПакета;
+Перем мЗависимости;
+Перем мМодули;
+Перем мВключаемыеФайлы;
+Перем мИсполняемыеФайлы;
+
+Перем ТипыМодулей Экспорт;
+
+//////////////////////////////////////////////////////////////////////
+// ПРОГРАММНЫЙ ИНТЕРФЕЙС
+
+Функция Имя(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("Имя", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция Версия(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("Версия", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция Автор(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("Автор", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция Описание(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("Описание", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция АдресАвтора(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("АдресАвтора", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ВерсияСреды(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("ВерсияСреды", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ВерсияМанифеста(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("ВерсияМанифеста", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ТочкаВхода(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("ТочкаВхода", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция Задачи(Знач Параметр) Экспорт
+ УстановитьСвойствоПакета("Задачи", Параметр);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция Свойства() Экспорт
+
+ // Проверка обязательных свойств
+ Если Не мСвойстваПакета.Свойство("Имя") или Не ЗначениеЗаполнено(мСвойстваПакета.Имя) Тогда
+ ВызватьИсключение "Не задано имя пакета";
+ КонецЕсли;
+
+ Если Не мСвойстваПакета.Свойство("Версия") или Не ЗначениеЗаполнено(мСвойстваПакета.Версия) Тогда
+ ВызватьИсключение "Не задана версия пакета";
+ КонецЕсли;
+
+ КопияСвойств = Новый Структура;
+ Для Каждого Свойство Из мСвойстваПакета Цикл
+ КопияСвойств.Вставить(Свойство.Ключ, Свойство.Значение);
+ КонецЦикла;
+
+ Возврат КопияСвойств;
+
+КонецФункции
+
+
+//////////////////////////////////////////////////////////////////////
+// Зависимости
+
+Функция ЗависитОт(Знач ИмяПакета, Знач МинимальнаяВерсия = Неопределено, Знач МаксимальнаяВерсия = Неопределено) Экспорт
+
+ Зависимость = Зависимость(ИмяПакета);
+ Если Зависимость = Неопределено Тогда
+ Зависимость = мЗависимости.Добавить();
+ Зависимость.ИмяПакета = ИмяПакета;
+ КонецЕсли;
+
+ Зависимость.ДляРазработки = Ложь;
+
+ Если МинимальнаяВерсия = Неопределено Тогда
+ Возврат ЭтотОбъект;
+ КонецЕсли;
+
+ Зависимость.МинимальнаяВерсия = МинимальнаяВерсия;
+ Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия;
+
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция РазработкаЗависитОт(
+ Знач ИмяПакета,
+ Знач МинимальнаяВерсия = Неопределено,
+ Знач МаксимальнаяВерсия = Неопределено) Экспорт
+
+ Зависимость = Зависимость(ИмяПакета);
+ Если Зависимость = Неопределено Тогда
+ Зависимость = мЗависимости.Добавить();
+ Зависимость.ИмяПакета = ИмяПакета;
+ Зависимость.ДляРазработки = Истина;
+ КонецЕсли;
+
+ Если МинимальнаяВерсия = Неопределено Тогда
+ Возврат ЭтотОбъект;
+ КонецЕсли;
+
+ Зависимость.МинимальнаяВерсия = МинимальнаяВерсия;
+ Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия;
+
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция Зависимость(Знач ИмяПакета) Экспорт
+
+ Возврат мЗависимости.Найти(ИмяПакета, "ИмяПакета");
+
+КонецФункции
+
+Функция Зависимости() Экспорт
+ Возврат мЗависимости.Скопировать();
+КонецФункции
+
+//////////////////////////////////////////////////////////////////////
+// Модули пакета
+
+Функция ОпределяетКласс(Знач Идентификатор, Знач Файл) Экспорт
+
+ ЗарегистрироватьМодульПакета(Идентификатор, Файл, ТипыМодулей.Класс);
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция Классы() Экспорт
+ Возврат мМодули.Скопировать(Новый Структура("Тип", ТипыМодулей.Класс));
+КонецФункции
+
+Функция ОпределяетМодуль(Знач Идентификатор, Знач Файл) Экспорт
+
+ ЗарегистрироватьМодульПакета(Идентификатор, Файл, ТипыМодулей.Модуль);
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция Модули() Экспорт
+ Возврат мМодули.Скопировать(Новый Структура("Тип", ТипыМодулей.Модуль));
+КонецФункции
+
+Функция ВсеМодулиПакета() Экспорт
+ Возврат мМодули.Скопировать();
+КонецФункции
+
+Процедура ЗарегистрироватьМодульПакета(Знач Идентификатор, Знач Файл, Знач Тип)
+ УжеЕсть = мМодули.НайтиСтроки(Новый Структура("Идентификатор,Тип", Идентификатор, Тип));
+ Если УжеЕсть.Количество() Тогда
+ ВызватьИсключение "Уже определен " + НРег(тип) + " с именем " + Идентификатор;
+ КонецЕсли;
+
+ Объявление = мМодули.Добавить();
+ Объявление.Идентификатор = Идентификатор;
+ Объявление.Файл = Файл;
+ Объявление.Тип = Тип;
+
+КонецПроцедуры
+
+//////////////////////////////////////////////////////////////////////
+// Включаемые файлы
+
+Функция ВключитьФайл(Знач ИсходныйПуть) Экспорт
+
+ мВключаемыеФайлы.Добавить(ИсходныйПуть);
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция ВключаемыеФайлы() Экспорт
+ Возврат мВключаемыеФайлы;
+КонецФункции
+
+//////////////////////////////////////////////////////////////////////
+// Исполняемые файлы
+
+Функция ИсполняемыйФайл(Знач Путь, Знач ИмяПриложения = "") Экспорт
+ Стр = мИсполняемыеФайлы.Добавить();
+ Стр.Путь = Путь;
+ Стр.ИмяПриложения = ИмяПриложения;
+
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ИсполняемыеФайлы() Экспорт
+ Возврат мИсполняемыеФайлы;
+КонецФункции
+
+//////////////////////////////////////////////////////////////////////
+// Вспомогательные функции
+
+Процедура УстановитьСвойствоПакета(Знач Имя, Знач Значение)
+ мСвойстваПакета.Вставить(Имя, Значение);
+КонецПроцедуры
+
+//////////////////////////////////////////////////////////////////////
+//
+
+Процедура Инициализация()
+
+ мСвойстваПакета = Новый Структура;
+
+ мЗависимости = Новый ТаблицаЗначений;
+ мЗависимости.Колонки.Добавить("ИмяПакета");
+ мЗависимости.Колонки.Добавить("ДляРазработки", Новый ОписаниеТипов("Булево"));
+ мЗависимости.Колонки.Добавить("МинимальнаяВерсия");
+ мЗависимости.Колонки.Добавить("МаксимальнаяВерсия");
+
+ мМодули = Новый ТаблицаЗначений;
+ мМодули.Колонки.Добавить("Идентификатор");
+ мМодули.Колонки.Добавить("Файл");
+ мМодули.Колонки.Добавить("Тип");
+
+ ТипыМодулей = Новый Структура("Класс,Модуль", "Класс", "Модуль");
+
+ мВключаемыеФайлы = Новый Массив;
+
+ мИсполняемыеФайлы = Новый ТаблицаЗначений;
+ мИсполняемыеФайлы.Колонки.Добавить("Путь");
+ мИсполняемыеФайлы.Колонки.Добавить("ИмяПриложения");
+
+КонецПроцедуры
+
+Инициализация();
\ No newline at end of file
diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os"
index 43c6773..fff744f 100644
--- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os"
+++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os"
@@ -8,7 +8,6 @@
// ----------------------------------------------------------
#Использовать logos
-#Использовать opm
#Использовать tempfiles
#Использовать fs
@@ -159,7 +158,7 @@
ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета);
- ОбработчикСобытий = ЗагрузитьСценарий(ФайлМанифеста.ПолноеИмя, ВнешнийКонтекст);
+ ЗагрузитьСценарий(ФайлМанифеста.ПолноеИмя, ВнешнийКонтекст);
Свойства = ОписаниеПакета.Свойства();
Свойства.Вставить("Классы", ОписаниеПакета.Классы());
diff --git a/src/lib.config b/src/lib.config
index e790616..1079fd1 100644
--- a/src/lib.config
+++ b/src/lib.config
@@ -6,6 +6,7 @@
+