В данной статье рассматриваются возможности настройки под себя Business Studio как коробочного продукта, а также приведено решение практической задачи с использованием дополнительных возможностей.
Business Studio является коробочным программным продуктом, т.е. таким, который может использовать любая компания, обращающая внимание на свою систему управления. Продукт создается не на заказ для какой-то отдельной компании.
В подобных продуктах есть свои плюсы и минусы. Если не рассматривать вопрос цены, то сравнение можно отобразить таблицей ниже. Подразумевается, что компания не будет создавать подобный продукт своими силами.
Вариант программного продукта | Одна сторона (видится как «плюс») | Другая сторона (видится как «минус») |
---|---|---|
Коробочный продукт |
|
|
Заказное решение |
|
|
Однозначное решение о том, какой вариант выбрать компании, определяется множеством факторов конкретной ситуации. Как говорится: «Что русскому хорошо — то немцу смерть».
В коробочном продукте потребности пользователя удовлетворяются через:
Чтобы максимально удовлетворить пользователя, коробочный продукт должен обладать широким набором неизменных функций и удобными возможностями настройки под желания пользователя.
Применительно к Business Studio видится такая картина:
Пояснение к схеме в таблице ниже.
№ | Функциональные возможности Business Studio | Комментарий |
---|---|---|
1 | Создание модели бизнес-процессов, организационной структуры, ведение документов и т.д. и т.п. | Логика нотаций моделирования и количество графических элементов четко заданы. Добавление новых нотаций пользователем не предусмотрено |
2 | Извлечение данных из модели: выборка нужных данных, создание регламентов | Имеется механизм фильтров; Регламенты создаются пошагово с использованием Мастера отчетов; Также регламенты могут создаваться с использованием VBA1, используется редко |
3 | Опции настройки поведения продукта и данных бизнес-модели | Возможна подстройка удобства работы в продукте, подстройка вывода данных в бизнес-процессах (коды процессов не показывать на диаграмме), субъектах (отображать фамилии людей на должностях на организационной диаграмме) |
4 | MetaEdit: редактор классов и параметров | Существующая структура данных бизнес-модели может быть расширена специфическими для конкретной организации характеристиками. Например, физическому лицу можно добавить характеристику — психологический тип, создать отдельный справочник психологического типа |
5 | Программирование через OLE | Business Studio поддерживает технологию OLE. Задумано для задач интеграции с другими системами |
Документация в виде методик и руководств (на данный момент это более 900 страниц), а также видео, предоставляют много информации обо всех этих возможностях. И все же, из всех перечисленных вариантов подстройки под себя менее всего описанным на данный момент, как мне кажется, является вопрос изменения бизнес-модели средствами программирования. Удивления это не вызывает, т.к. продукт ориентирован на пользователей, которые в своей массе не являются программистами, а являются аналитиками, руководителями и другими специалистами, которым по роду своей деятельности программирование знать не обязательно.
Поэтому, ниже попробую привести пример решения практической задачи средствами программирования.
Читая статью Антона Антипина «Система мотивации на основе показателей», я задумался о том, что вручную предстоит создать очень много показателей: как минимум столько же, сколько субъектов (должностей, подразделений). Это делается один раз, но все же.
Как можно уйти от рутины? Задача, которую хотелось решить, не является типовой, поэтому в базовом функционале ее нет. Мне стало интересно, как можно решить задачу и предоставляет ли Business Studio возможность создания такого количества показателей кроме как вручную? Как догадался дорогой читатель, это будет реализовано с помощью программного инструмента.
Из вышеуказанной статьи выделяем задачу для Business Studio. Важной для нас является формула формирования заработной платы сотрудника.
Заработная плата = Базовая ставка + Робщ * Базовая ставка,
Где
Заработная плата — показатель, определяющий сумму сотрудника к оплате, руб.;
Базовая ставка — сумма, которую получит сотрудник обязательно, руб.;
Робщ — общая результативность, которая формируется при определении успешности других показателей. Эти другие показатели являются показателями достижения целей всей компании, подразделения, в котором работает сотрудник или процессов, в которых участвует сотрудник.
Таким образом, нам необходимо создать по субъекту:
Причем здесь показатель подразделения? Исходя из того, что написано в статье, по вопросам, которыми занимается подразделение, очень часто будет определен показатель, связанный с результативностью, в свою очередь, это влияет потом и на показатели должности (см. Pобщ).
Если предположить, что показатели подразделений уже могли быть созданы ранее, то добавим себе в реализацию опциональное добавление показателей подразделений.
Создавая показатель, так же было бы хорошо указывать не только его название, но и по возможности заполнять другие параметры, дабы сократить время ручной работы.
Представим себе на секундочку, что для оргструктуры демонстрационной модели Business Studio, где 19 Должностей и 7 Подразделений, это 45 показателей. Речь идет только о механической работе создания показателей и заполнения части их параметров. Сколько у вас времени уходит на создание одного показателя с указанным набором параметров?
Итак:
Решение задачи видится через программирование, используя технологию OLE. Т.к. именно это таким образом можно «без рук» изменять данные. Не являясь программистом, я не имею какой-либо установленной среды разработки. Но, естественно, у меня установлен MS Office. Поэтому буду использовать то, что есть под рукой — среду VBA. В институте немного пришлось соприкасаться с VBA, справочной информации по VBA много в интернете.
Чтобы меньше программировать, можно:
Границы решения в приведенном ниже варианте:
Чтобы использование OLE было возможно, не забываем зарегистрировать необходимые библиотеки. Регистрация осуществляется путем запуска файла RegisterOleServer.bat, находящегося в папке установки Business Studio, а также необходимо открыть доступ на работу с конкретной базой средствами OLE(более детально в Руководстве администратора, Глава 3).
Создав любой пустой документ в MS Office (например, MS Word) переходим в среду Visual Basic for Application2. В проекте этого файла переходим Microsof Word Objects -> ThisDocument и создаем макрос, код которого приведен ниже. После этого запускаем его (F5) и через несколько секунд получаем задуманное.
В качестве примера была взята демонстрационная база из установки Business Studio.
Читатель может воспользоваться приведенным ниже кодом, внеся в его начало (раздел «Задание необходимых параметров перед запуском») свои данные.
Sub СозданиеПоказателей()
'Получение объекта приложения
Set oleapp = CreateObject("ByteEnterprise.OleApplication")
'=====================================================================================
' Задание необходимых параметров перед запуском.
'*************************************************************************************
'База данных и редакция Business Studio, с которыми будем работать
СерверБД = "U6SSQLEXPRESS2005" 'Ваш сервер баз данных может быть другим
База = "demo_ole" 'В примере используется стандартная демонстрационная база
РедакцияBS = "Enterprise" 'Enterprise, Professional
СоздаватьПоказателиПодразделений = True 'True - создавать или False - не создавать
Const КолВоПапок = 2 'Максимально возможное количество папок, в которых будут создаваться показатели - 3
'Определяем массив хранения нужных названий папок показателей
Dim НазваниеПапка(0 To КолВоПапок) As String
НазваниеПапка(0) = "Базовая папка" 'Название папки, где будут находиться базовые показатели
НазваниеПапка(1) = "Выплаты" 'Название папки, где будут находиться показатели выплат
НазваниеПапка(2) = "Результативность" 'Название папки, где будут показатели подразделений
'Если такая папка будет вообще создаваться
'Определяем массив хранения постоянной части названия создающегося показателя
Dim ЧастьНазвания(0 To КолВоПапок) As String
ЧастьНазвания(0) = "Базовая ставка" 'Первая часть названия показателя в папке типа "Базовая ставка"
ЧастьНазвания(1) = "Заработная плата" 'Первая часть названия показателя в папке типа "Выплаты"
ЧастьНазвания(2) = "Результативность" 'Первая часть названия показателя в папке типа "Результативность"
'Определяем массив, определяющий будет ли показатель расчетным
Dim Формула(0 To КолВоПапок) As Boolean
Формула(0) = False 'Нет формулы в папке типа "Базовая ставка"
Формула(1) = True 'Есть формула в папке типа "Выплаты"
'Ответственная должность за ввод значений показателя должности
ОтветственныйЗаВвод = "Начальник отдела кадров"
'Единица измерений показателя "рубль", согласно данным демонстрационной базы
ЕдИзмGuid = "791b7dad-ef4e-42ff-b1cc-2fd44ae0c6d4" 'Значение взято из параметра guid
'=====================================================================================
' Запуск Business Studio
'=====================================================================================
'Запустить Business Studio в редакции и базой на сервере, указанными ранее.
'В Диспетчере задач появится Business Studio. В панели задач приложения не будет видно.
Set client_app = oleapp.ЗапуститьКлиентскоеПриложение(СерверБД, База, РедакцияBS)
'=====================================================================================
' Определение глобальных переменных
'=====================================================================================
'Определяем количество папок, которые будут использоваться
'для создания в них показателей
If СоздаватьПоказателиПодразделений Then
ВсегоПапокПоказателей = 3 'всего будет использовано 3 папки
Else
ВсегоПапокПоказателей = 2 'всего будет использовано 2 папки
End If
'Определение Корневых групп классов
Set ПоказателиОПУ = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.ПоказателиBSC")
Set СиФОПУ = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.СубъектИлиФизлицо")
Set КонтролирующиеЛицаОПУ = oleapp.ПолучитьКорневуюГруппуКласса("БизнесМодель.КонтролирующиеЛицаПоказателя")
'Указание единицы измерения показателей
Set ДенежноеИзмерениеСписок = oleapp.ПолучитьОбъекты("БизнесМодель.ЕдиницыИзмеренияЗатрат", "guid", ЕдИзмGuid)
Set ДенежноеИзмерение = ДенежноеИзмерениеСписок.ПолучитьЭлемент(0)
'Ответственный за внесение значений показателя должности
'Субъект
Set ОтвВводПоказательДолжнСписок = oleapp.ПолучитьОбъекты("БизнесМодель.Субъекты", "Название", ОтветственныйЗаВвод)
Set ОтвВводПоказательДолжн = ОтвВводПоказательДолжнСписок.ПолучитьЭлемент(0)
'Физлицо субъекта
Set ОтвВводПоказательФИОСписок = oleapp.ПолучитьОбъекты("БизнесМодель.Физлица_Субъектов", "Субъект", ОтвВводПоказательДолжн)
Set ОтвВводПоказательФИО = ОтвВводПоказательФИОСписок.ПолучитьЭлемент(0) 'Первый элемент в списке сотрудников
'Массив для подсчета количества созданных показателей
Dim СозданоПоказателей(0 To КолВоПапок) As Integer
СозданоПоказателей(0) = 0
СозданоПоказателей(1) = 0
СозданоПоказателей(2) = 0
'=====================================================================================
' Создание необходимых папок в показателях, если их нет еще
'=====================================================================================
'Проверка на существование папок, с необходимыми названиями
'И если их нет, то они будет созданы
'Предполагается, что показателей с таким же названием нет
'Определяем список, в котором будут храниться папки показателей
Set ПапкаПоказателя = _
oleapp.ПолучитьОбъекты("БизнесМодель.ПоказателиBSC", "Название", "Названия этого показателя нет в базе точно!")
i = 0
Do While i < ВсегоПапокПоказателей
'Проверяем наличие папок в показателях с нужными названиями
Set СписокПапок = oleapp.ПолучитьОбъекты("БизнесМодель.ПоказателиBSC", "Название", НазваниеПапка(i))
НаличиеПапки = СписокПапок.КоличествоЭлементов
If НаличиеПапки = 0 Then
'Если папки нет, то она создается
Set ТребуемаяПапка = oleapp.СоздатьГруппу(ПоказателиОПУ)
ТребуемаяПапка.Название = НазваниеПапка(i)
ТребуемаяПапка.ТипПоказатель = 256 '256 - папка
ТребуемаяПапка.Сохранить
Else
'Если папка есть, то берется первая папка с совпадающим названием
Set ТребуемаяПапка = СписокПапок.ПолучитьЭлемент(0)
End If
'Запоминаем созданную или уже существующую папку в списке
ПапкаПоказателя.ДобавитьОбъект (ТребуемаяПапка)
i = i + 1 ' увеличиваем переменную цикла
Loop
'=====================================================================================
' Создание показателей показатели должностей
'=====================================================================================
Set Должность = oleapp.ПолучитьОбъекты("БизнесМодель.Субъекты", "ТипСубъекта", 2) '2 - Должность
КолвоДолжностей = Должность.КоличествоЭлементов
For i = 0 To КолвоДолжностей - 1
j = 0
Do While j < ВсегоПапокПоказателей - 1 'Минус 1 - чтобы не "захватить" папку показателей подразделений
'Создание показателя в папках типа "Базовая ставка" и "Выплаты"
Set Показатель = oleapp.СоздатьОбъект(ПапкаПоказателя(j)) 'Показатель создается в одной из папок
Показатель.Название = ЧастьНазвания(j) + " " + Должность(i).Название
Показатель.ЕдиницаИзмерения = ДенежноеИзмерение
Показатель.Точность = 2
Показатель.Комментарий = "Создано кодом через OLE"
'Если показатель должен быть расчетным, тогда записываем ему формулу
'Иначе назначаем ответственного за ввод значений показателя
If Формула(j) Then
'ФОРМУЛА = "[Базовая ставка <Должность>] + [Базовая ставка <Должность>] *"
Показатель.Формула = _
"[" + ЧастьНазвания(0) + " " + Должность(i).Название + "]+" + _
"[" + ЧастьНазвания(0) + " " + Должность(i).Название + "]*"
Else
'Создаем СиФ, которое будет ответственным за ввод значений показателя
Set СифВвод = oleapp.СоздатьОбъект(СиФОПУ)
СифВвод.Субъект = ОтвВводПоказательДолжн
СифВвод.Физлицо = ОтвВводПоказательФИО.Физлицо
СифВвод.Сохранить
Показатель.ОтветственныйСИФ = СифВвод
End If
Показатель.Сохранить 'Необходимо сохранить сейчас - в списках можно ссылаться только на сохраненный показатель
'Назначение контролирующего лица может быть для сохраненного показателя
'Контролирующие лица: сама должность и непосредственный начальник должности
'Контролирует сама должность
'ФизЛицо сотрудника на должности
Set ФИОДолжностиСписок = oleapp.ПолучитьОбъекты("БизнесМодель.Физлица_Субъектов", "Субъект", Должность(i))
Set ФИОДолжности = ФИОДолжностиСписок.ПолучитьЭлемент(0) 'Первый элемент в списке сотрудников должности
'Создаем СиФ по текущей должности
Set СифКонтрольДолжность = oleapp.СоздатьОбъект(СиФОПУ)
СифКонтрольДолжность.Субъект = Должность(i)
СифКонтрольДолжность.Физлицо = ФИОДолжности.Физлицо
СифКонтрольДолжность.Сохранить
'Создаем строку в списке Контролирующих лиц только что созданного показателя
Set ПоказательКонтрольДлж = oleapp.СоздатьОбъект(КонтролирующиеЛицаОПУ)
ПоказательКонтрольДлж.КонтролирующийСИФ = СифКонтрольДолжность
ПоказательКонтрольДлж.Владелец = Показатель
ПоказательКонтрольДлж.Сохранить
'Контролирует руководитель
'ФизЛицо руководителя должности
Set РукДолжностиСубъект = Должность(i).НепосредственныйРуководитель
Set ФИОРуководителяСписок = oleapp.ПолучитьОбъекты("БизнесМодель.Физлица_Субъектов", "Субъект", РукДолжностиСубъект)
Set ФИОРуководителя = ФИОРуководителяСписок.ПолучитьЭлемент(0) 'Первый элемент в списке сотрудников руководителя
'Создаем СиФ по руководителю должности
Set СифКонтрольРуководитель = oleapp.СоздатьОбъект(СиФОПУ)
СифКонтрольРуководитель.Субъект = РукДолжностиСубъект
СифКонтрольРуководитель.Физлицо = ФИОРуководителя.Физлицо
СифКонтрольРуководитель.Сохранить
'Создаем строку в списке Контролирующих лиц только что созданного показателя
Set ПоказательКонтрольРук = oleapp.СоздатьОбъект(КонтролирующиеЛицаОПУ)
ПоказательКонтрольРук.КонтролирующийСИФ = СифКонтрольРуководитель
ПоказательКонтрольРук.Владелец = Показатель
ПоказательКонтрольРук.Сохранить
'Показатель должности в папке считается созданным
СозданоПоказателей(j) = СозданоПоказателей(j) + 1 'Учет кол-ва созданных показателей
j = j + 1
Loop
Next i
'=====================================================================================
' Создание показателей показатели подразделений
'=====================================================================================
If СоздаватьПоказателиПодразделений Then
Set Подразделение = oleapp.ПолучитьОбъекты("БизнесМодель.Субъекты", "ТипСубъекта", 1) '1 - Подразделение
КолвоПодразделений = Подразделение.КоличествоЭлементов
For i = 0 To КолвоПодразделений - 1
'Создаем показатель в папке типа "Результативность"
Set Показатель = oleapp.СоздатьОбъект(ПапкаПоказателя(2))
Показатель.Название = ЧастьНазвания(2) + " " + Подразделение(i).Название
Показатель.Комментарий = "Создано программно"
'Назначаем ответственного за ввод значений показателя - руководитель подразделения
'Должность и ФИО руководителя подразделения
Set ПараметрыПодразделения = Подразделение(i).ПараметрыПодразделения
Set РукПодразделенияСубъект = ПараметрыПодразделения.Руководитель
Set ФИОРукПодразделенияСписок = oleapp.ПолучитьОбъекты("БизнесМодель.Физлица_Субъектов", "Субъект", РукПодразделенияСубъект)
Set ФИОРукПодразделения = ФИОРукПодразделенияСписок.ПолучитьЭлемент(0) 'Первый элемент в списке сотрудников руководителя
'Создаем СиФ, которое будет ответственным за ввод значений показателя
Set СифВвод = oleapp.СоздатьОбъект(СиФОПУ)
СифВвод.Субъект = РукПодразделенияСубъект
СифВвод.Физлицо = ФИОРукПодразделения.Физлицо
СифВвод.Сохранить
Показатель.ОтветственныйСИФ = СифВвод
Показатель.Сохранить 'Необходимо сохранить сейчас - в списках можно ссылаться только на сохраненный показатель
'Назначение контролирующего лица может быть для сохраненного показателя
'Контролирует руководитель подразделения
'Создаем СиФ по руководителю текущего подразделения
Set СифКонтрольДолжность = oleapp.СоздатьОбъект(СиФОПУ)
СифКонтрольДолжность.Субъект = РукПодразделенияСубъект
СифКонтрольДолжность.Физлицо = ФИОРукПодразделения.Физлицо
СифКонтрольДолжность.Сохранить
'Создаем строку в списке Контролирующих лиц созданного показателя подразделения
Set ПоказательКонтрольДлж = oleapp.СоздатьОбъект(КонтролирующиеЛицаОПУ)
ПоказательКонтрольДлж.КонтролирующийСИФ = СифКонтрольДолжность
ПоказательКонтрольДлж.Владелец = Показатель
ПоказательКонтрольДлж.Сохранить
'Показатель подразделений считается созданным
СозданоПоказателей(2) = СозданоПоказателей(2) + 1 'Учет кол-ва созданных показателей
Next i
End If
'=====================================================================================
' Показ результатов в Business Studio и вывод сообщения
'=====================================================================================
'В панели задач появится приложение
oleapp.ПоказатьКлиентскоеПриложение
'Вывод сообщения
MsgBox "Создано показаталей:" + Chr(13) + _
"- субъектов в папке '" + НазваниеПапка(0) + "' - " + CStr(СозданоПоказателей(0)) + Chr(13) + _
"- субъектов в папке '" + НазваниеПапка(1) + "' - " + CStr(СозданоПоказателей(1)) + Chr(13) + _
"- подразделений в папке '" + НазваниеПапка(2) + "' - " + CStr(СозданоПоказателей(2))
End Sub
Код в среде VBA выглядит, как приведено на рисунке ниже.
В результате выполнения кода (F5) будут созданы необходимые показатели. Выглядеть это может, например, как на рисунке ниже.
Как и всё в этом мире, приведенное решение можно оценивать с разных сторон.
С одной стороны (рассматривается как «плюс»):
С другой стороны (рассматривается как «минус»):
Приведенная задача и код является лишь примером.
Ясно одно: помимо широких базовых возможностей, Business Studio позволяет делать существенные шаги вправо и влево для индивидуальной настройки. В итоге это способствует движению компании вперед.
Возможно, читателю хотелось бы узнать взгляд автора на решение других задач с помощью программирования или других возможностей Business Studio? Пишите. Интересные вопросы могут вдохновлять на интересные статьи.
1 VBA (Visual Basic for Application) — язык программирования среды MS Office
2 Word 2003 — Сервис — Макрос — Редактор Visual Basic. Word 2007/2010 — на ленте «Разработчик» большая кнопка «Visual Basic». В свою очередь ленту можно вывести на показ через «Файл — Параметры — Настройка ленты».
Август 2011 г.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
* Поля, обязательные для заполнения.
Введите поисковый запрос:
Сообщение успешно отправлено