Как построить иерархию
Перейти к содержимому

Как построить иерархию

Работа с иерархиями в lsFusion

image

В различных приложениях часто возникает потребность в реализации иерархического представления объектов. Как правило, это используется для их классификации путем задания групп. Эти группы образуют дерево динамической глубины, которая в дальнейшем используется для навигации, агрегирования данных, задания параметров.

В этой статье я покажу, каким образом эту логику можно реализовать в открытой и бесплатной платформе lsFusion.

В качестве примера возьмем простую логику, в которой нужно реализовать логику товаров, объединенных в определенные группы, которые образуют иерархию динамической глубины. При этом товар может быть привязан и к промежуточному узлу дерева.

Для начала по стандартной схеме объявим сущность Группа товаров в виде простого плоского класса с формами редактирования и списка:

FORM group ‘Группа’
OBJECTS g = Group PANEL
PROPERTIES (g) name

EDIT Group OBJECT g
;

FORM groups ‘Группы’
OBJECTS g = Group
PROPERTIES (g) READONLY name
PROPERTIES (g) NEWSESSION NEW , EDIT , DELETE

LIST Group OBJECT g
;

parent = DATA Group (Group);
nameParent ‘Родительская группа’ (Group g) = name(parent(g));
level ‘Уровень’ (Group child, Group parent) =
RECURSION 1l IF child IS Group AND parent = child
STEP 2l IF parent = parent($parent) MATERIALIZED ;

По какому именно принципу работает оператор RECURSION, в данной статье я описывать не буду, но свойство level будет возвращать 2 в степени “длина пути между child и parent в соответствующем направленном дереве”. MATERIALIZED указывает, что платформа должна хранить его в отдельной таблице, где для каждой пары связанных узлов будет отдельная запись со значением level в соответствующей колонке. При любом изменении структуры дерева эта таблица будет автоматически пересчитываться.

Например, для вот такого дерева:

image

Таблица будет выглядеть вот так:

image

В ней key0 — это код потомка, а key1 — код родителя. Количество записей в этой таблице будет приблизительно равно количеству групп, умноженное на среднюю глубину дерева. Такая схема хранения будет полезна тем, что при необходимости считать всех потомков группы не придется прибегать к CTE запросам, а можно будет воспользоваться обычным JOIN к этой таблице.

Дальше на основании построенного свойства можно высчитать каноническое имя группы:

canonicalName ‘Каноническое имя’ (Group group) =
GROUP CONCAT name(Group parent), ‘ / ‘ ORDER DESC level(group, parent) CHARWIDTH 50 ;

Например, для группы Молоко на приведенной выше картинке каноническое имя будет равно Все / Продовольственные товары / Молочные продукты / Молоко. CHARWIDTH указывается для того, чтобы сказать платформе какую под это свойство отводить ширину (в символах) при построении интерфейса.

Теперь расширим форму просмотра и редактирования групп вновь созданными свойствами:

Форма со списком групп в плоском виде будет выглядеть следующим образом:

image

После того, как логика групп завершена, добавляем сущность Товар:

CLASS Product ‘Товар’ ;
name ‘Имя’ = DATA ISTRING [ 50 ] (Product);
group ‘Группа’ = DATA Group (Product);
canonicalNameGroup ‘Каноническое имя группы’ (Product p) = canonicalName(group(p));
FORM products ‘Товары’
TREE groups g = Group PARENT parent
PROPERTIES READONLY name(g)
;

При помощи команды TREE создается дерево из объектов класса Group, иерархия которых определяется по ранее созданному свойству parent.

Добавляем форму в навигатор:

NAVIGATOR <
NEW products;
>
newProduct ‘Добавить’ (Group g) <
NEW p = Product <
group(p) <- g;
>
>
EXTEND FORM products
OBJECTS p = Product
PROPERTIES (p) name, canonicalNameGroup
FILTERS level(group(p), g)
;
EXTEND FORM products
PROPERTIES newProduct(g) DRAW p TOOLBAR , DELETE (p)
;

Так как действие newProduct определено для группы товаров, то в явную нужно указать, что оно должно быть добавлено в тулбар со списком товаров (p).

Осталось настроить дизайн, чтобы дерево отображалось слева, а список товаров — справа, а между ними был разделитель, при помощи которого можно изменять размеры объектов:

DESIGN products <
OBJECTS <
NEW pane <
type = SPLITH ;
fill = 1 ;
MOVE BOX ( TREE groups);
MOVE BOX (p);
>
>
>

Итоговая форма будет выглядеть следующим образом:

После того, как иерархия товаров и групп создана, часто возникает потребность в задании некоторого параметра на любом из уровней. При этом, чем на более низком уровне иерархии он задан, тем его значение приоритетнее. Например, если для группы Молочная продукция задано значение 30, а для группы Молоко — 20, то выбраться должно последнее из них.

Предположим нужно таким образом определить параметр Надбавка. Для этого нужно сначала создать соответствующее свойство для группы:

markup ‘Надбавка, %’ = DATA NUMERIC [ 10 , 2 ] (Group);
parentMarkup ‘Надбавка (от верхней группы), %’ (Group child) =
GROUP LAST markup(Group parent) ORDER DESC level(child, parent) WHERE markup(parent);

Если переводить на обычный язык, то это выражение находит (GROUP) последнюю (LAST) надбавку (markup) по верхней группе (Group parent), в порядке убывания расстояния до нее (ORDER DESC level(child, parent)), для которой эта надбавка задана (WHERE markup(parent)). Здесь хочется отметить, насколько язык lsFusion соответствует естественному языку.

Добавим созданные выше свойства на форму с товарами в дерево групп:

EXTEND FORM products
PROPERTIES (g) markup, parentMarkup READONLY
;
dataMarkup ‘Надбавка по товару, %’ = DATA NUMERIC [ 10 , 2 ] (Product);
markup ‘Надбавка, %’ (Product p) = OVERRIDE dataMarkup(p), parentMarkup(group(p));
EXTEND FORM products
PROPERTIES (p) dataMarkup, markup READONLY
;

Механизм задания надбавок для групп и товаров будет выглядеть следующим образом:

Заключение

В приведенной статье мы смогли создать логику товаров, объединить их в группы с иерархией динамической глубины, а также предоставить пользователю возможность задавать надбавки на любом из уровней. Все это заняло около 70 значимых строчек кода. Попробовать, как это работает в онлайне, а также внести свои изменения в код, можно в соответствующем разделе сайта (вкладка Платформа). Вот весь исходный код, который нужно вставить в соответствующее поле:

FORM group ‘Группа’
OBJECTS g = Group PANEL
PROPERTIES (g) name

EDIT Group OBJECT g
;

FORM groups ‘Группы’
OBJECTS g = Group
PROPERTIES (g) READONLY name
PROPERTIES (g) NEWSESSION NEW , EDIT , DELETE

LIST Group OBJECT g
;

NAVIGATOR <
NEW groups;
>

parent = DATA Group (Group);
nameParent ‘Родительская группа’ (Group g) = name(parent(g));

level ‘Уровень’ (Group child, Group parent) =
RECURSION 1l IF child IS Group AND parent = child
STEP 2l IF parent = parent($parent) MATERIALIZED ;

canonicalName ‘Каноническое имя’ (Group group) =
GROUP CONCAT name(Group parent), ‘ / ‘ ORDER DESC level(group, parent) CHARWIDTH 50 ;

EXTEND FORM group
PROPERTIES (g) nameParent, canonicalName
;

EXTEND FORM groups
PROPERTIES (g) READONLY nameParent, canonicalName
;

CLASS Product ‘Товар’ ;
name ‘Имя’ = DATA ISTRING [ 50 ] (Product);

group ‘Группа’ = DATA Group (Product);
canonicalNameGroup ‘Каноническое имя группы’ (Product p) = canonicalName(group(p));

FORM products ‘Товары’
TREE groups g = Group PARENT parent
PROPERTIES READONLY name(g)
;

NAVIGATOR <
NEW products;
>

newProduct ‘Добавить’ (Group g) <
NEW p = Product <
group(p) <- g;
>
>
EXTEND FORM products
OBJECTS p = Product
PROPERTIES (p) name, canonicalNameGroup
FILTERS level(group(p), g)
;

EXTEND FORM products
PROPERTIES newProduct(g) DRAW p TOOLBAR , DELETE (p)
;

DESIGN products <
OBJECTS <
NEW pane <
type = SPLITH ;
fill = 1 ;
MOVE BOX ( TREE groups);
MOVE BOX (p);
>
>
>

markup ‘Надбавка, %’ = DATA NUMERIC [ 10 , 2 ] (Group);

parentMarkup ‘Надбавка (от верхней группы), %’ (Group child) =
GROUP LAST markup(Group parent) ORDER DESC level(child, parent) WHERE markup(parent);

EXTEND FORM products
PROPERTIES (g) markup, parentMarkup READONLY
;

dataMarkup ‘Надбавка по товару, %’ = DATA NUMERIC [ 10 , 2 ] (Product);
markup ‘Надбавка, %’ (Product p) = OVERRIDE dataMarkup(p), parentMarkup(group(p));

Как построить иерархию

Если вы хотите проиллюстрировать иерархические отношения, которые прогрессируют по вертикали или по горизонтали, можно создать графический элемент SmartArt, использующий макет иерархии, например Иерархия с меткой. Иерархия представляет собой ряд упорядоченных групп людей или элементов в системе. Используя графический элемент SmartArt в Excel, Outlook, PowerPoint или Word, вы можете создать иерархию и включить ее в электронную почту, сообщение электронной почты, презентацию или документ.

Важно: Если вы хотите создать организациическую диаграмму,создайте графический элемент SmartArt с помощью макета Организацивая диаграмма.

Примечание: Снимки экрана, сделанные в этой статье, Office 2007 г. Если у вас другая версия, представление может немного отличаться, но если не указано иное, функции будут одинаковыми.

На вкладке Вставка в группе Иллюстрации нажмите кнопку SmartArt.

В коллекции Выбор рисунка SmartArt щелкните Иерархияи дважды щелкните макет иерархии (например, Горизонтальная иерархия).

Для ввода текста выполните одно из следующих действий.

В области текста щелкните элемент [Текст] и введите содержимое.

Скопируйте текст из другого места или программы, в области текста щелкните элемент [Текст], а затем вставьте скопированное содержимое.

Примечание: Если область текста не отображается, щелкните элемент управления.

Щелкните поле в графическом элементе SmartArt и введите свой текст.

Примечание: (ПРИМЕЧАНИЕ.) Для достижения наилучших результатов используйте этот вариант после добавления всех необходимых полей.

Добавление поля

Щелкните графический элемент SmartArt, в который нужно добавить поле.

Щелкните существующее поле, ближайшее к месту вставки нового поля.

В разделе Работа с рисунками SmartArt на вкладке Конструктор в группе Создать рисунок щелкните стрелку под командой Добавить фигуру.

Если вкладка Работа с рисунками SmartArt или Конструктор не отображается, выделите графический элемент SmartArt.

Выполните одно из указанных ниже действий.

Чтобы вставить поле на том же уровне, что и выбранное поле, но после него, выберите команду Добавить фигуру после.

Чтобы вставить поле на том же уровне, что и выбранное поле, но перед ним, выберите команду Добавить фигуру перед.

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

Чтобы вставить поле на один уровень ниже выбранного поля, выберите команду Добавить фигуру под.

Новое поле будет добавлено после другого на том же уровне.

Удаление поля

Чтобы удалить поле, щелкните его границу и нажмите клавишу DELETE.

Если вам нужно добавить поле в иерархию, поэкспериментируйте с ним до, после, сверху или под выбранным полем, чтобы получить нужное расположение.

Несмотря на то что в макетах иерархии, таких как Горизонтальная иерархия, нельзя автоматически соединить линией два поля верхнего уровня,вы можете сымитировать это, добавив поле в графический элемент SmartArt и нарисуя линию для соединения полей.

Чтобы добавить поле из области текста:

Поместите курсор в начало текста, куда вы хотите добавить фигуру.

Введите нужный текст в новой фигуре и нажмите клавишу ВВОД. Чтобы добавить отступ для фигуры, нажмите клавишу TAB, а чтобы сместить ее влево — клавиши SHIFT+TAB.

Перемещение полей в иерархии

Чтобы переместить поле, щелкните его и перетащите на новое место.

Чтобы фигура перемещалась с очень маленьким шагом, удерживайте нажатой клавишу CTRL и нажимайте клавиши со стрелками.

Изменение макета иерархии

Щелкните правой кнопкой мыши иерархию, которую вы хотите изменить, и выберите изменить макет.

Щелкните Иерархияи сделайте одно из следующих:

Чтобы показать иерархические отношения, которые выровна сверху вниз и сгруппировать по иерархии, щелкните Иерархия с меткой.

Чтобы показать группы данных, встроенные сверху вниз, и иерархии внутри каждой группы, щелкните Иерархия таблиц.

Чтобы показать иерархические отношения в группах, щелкните Иерархический список.

Чтобы показать иерархические отношения, которые выровна по горизонтали, выберите горизонтальную иерархию.

Чтобы показать иерархические отношения, которые выровна по горизонтали и помечены иерархией, щелкните Горизонтальная иерархия с подписи.

Примечание: Чтобы изменить макет SmartArt, можно также выбрать нужный параметр в разделе Работа с рисунками SmartArt на вкладке Конструктор в группе Макеты. При выборе варианта макета можно предварительно просмотреть, как будет выглядеть графический элемент SmartArt.

Чтобы быстро оформление графического элементов SmartArt выглядело и выглядело как дизайнер, вы можете изменить цвета или применить стиль SmartArt к своей иерархии. Вы также можете добавить эффекты, такие как свечение, сглаживание или объемные эффекты.

К полям в графических элементах SmartArt можно применять цветовые вариации из Цвета темы.

Щелкните графический элемент SmartArt, цвет которого нужно изменить.

В разделе Работа с рисунками SmartArt на вкладке Конструктор в группе Стили SmartArt нажмите кнопку Изменить цвета.

Если вкладка Работа с рисунками SmartArt или Конструктор не отображается, выделите графический элемент SmartArt.

Выберите нужную комбинацию цветов.

Совет: (ПРИМЕЧАНИЕ.) При наведении указателя мыши на эскиз можно просмотреть, как изменяются цвета в графическом элементе SmartArt.

В графическом элементе SmartArt щелкните правой кнопкой мыши границу линии или фигуры, которые вы хотите изменить, и выберите пункт Формат фигуры.

Чтобы изменить цвет границы, нажмите кнопку Цвет линии ,выберите цвет , а затем выберите нужный цвет.

Чтобы изменить тип границы фигуры, щелкните Тип линии и задайте нужные параметры.

Щелкните правой кнопкой мыши границу фигуры и выберите команду Формат фигуры.

Щелкните область Заливка и выберите вариант Сплошная заливка.

Нажмите кнопку Цвет и выберите нужный цвет.

Чтобы указать степень прозрачности фонового цвета, переместите ползунок Прозрачность или введите число в поле рядом с ним. Значение прозрачности можно изменять от 0 (полная непрозрачность, значение по умолчанию) до 100 % (полная прозрачность).

Стиль SmartArt — это сочетание различных эффектов, например стилей линий, рамок или трехмерных эффектов, которые можно применить к полям графического элемента SmartArt для придания им профессионального, неповторимого вида.

Щелкните графический элемент SmartArt, стиль SmartArt которого нужно изменить.

В разделе Работа с рисунками SmartArt на вкладке Конструктор в группе Стили SmartArt выберите стиль.

Чтобы отобразить другие стили SmartArt, нажмите кнопку Дополнительно .

Если вкладка Работа с рисунками SmartArt или Конструктор не отображается, выделите графический элемент SmartArt.

(ПРИМЕЧАНИЕ.) При наведении указателя мыши на эскиз становится видно, как изменяется стиль SmartArt в рисунке SmartArt.

Вы также можете настроить графический элемент SmartArt, перемещая поля,меняя их размер,добавляя заливку или эффект и добавляя рисунок.

Если вы используете PowerPoint, вы можете анимировать иерархию, чтобы акцентировать внимание на каждом поле, каждой ветви или каждом уровне иерархии.

Щелкните иерархию графического элементов SmartArt, которую нужно анимировать.

На вкладке Анимация в группе Анимация нажмите кнопку Анимация ивыберите по ветви по одному.

Примечание: При копировании иерархии с примененной к ней анимацией на другой слайд также копируется анимация.

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект

Иерархическая структура работ (ИСР), или структурная декомпозиция работ, или WBS (Work Breakdown Structure) ― метод разбиения большой цели на чёткие шаги, который позволяет выстроить путь к достижению результата и успешно выполнить рабочий или личный проект.

Команда онлайн-сервиса для управления бизнесом Flowlu рассказывает, зачем формировать ИСР, из чего она состоит и какие принципы помогут её сформировать.

Статья будет особенно интересна проектным командам, владельцам бизнеса, руководителям и тем, кто ставит жизненные цели.

Команда flowlu

Иерархическая структура работ помогает быстрее и эффективнее достичь поставленных целей

ИСР ― это метод планирования работ, который обычно иллюстрируют в виде многоуровневой схемы задач, где главная задача — это масштабная цель, которая разбивается на этапы, а затем на более мелкие задачи и подзадачи — понятные и достижимые. Деление происходит до того момента, когда все необходимые работы для достижения результата учтены.

На каждую задачу назначаются ответственные.

ИСР позволяет команде сфокусироваться на выполнении конкретных измеримых задач и контрольных точек проекта, что помогает достичь поставленных целей быстрее и эффективнее.

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект

ИСР не включает в себя информацию о сроках и ресурсах и представляет собой первый шаг в проектной стратегии. Далее команда создаёт план-график проекта — документ со списком работ в определённой последовательности и с установленными сроками.

ИСР ― универсальный и широко используемый инструмент. Применить его можно практически ко всему: от собственных целей вроде «купить машину» до разработки программного обеспечения.

Например, вот как может выглядеть ИСР по проекту «Завести собаку»:

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект

Почему стоит использовать ИСР

Работа по проекту становится прозрачной и понятной

Команда наглядно видит, как решение каждой задачи приближает достижение конечного результата.

Грамотно распределяются задачи

ИСР обеспечивает эффективное планирование, помогает оценить загруженность команды на разных этапах и корректно закрепить задачи за участниками проекта.

Риски и стоимость проекта оценены

Декомпозиция работ отразит, сколько на каждый этап выделить ресурсов, где задач больше всего, когда может понадобиться больше вложений или людей. А также определит зону ответственности исполнителя перед заказчиком и позволит своевременно выявить недопонимание или вопросы внутри команды — и проработать их.

Проект наглядно представлен для заинтересованных сторон

Видно, на чём нужно заострить внимание, как распределить ресурсы, как заказчик представляет себе поставленные перед командой задачи и что ставит в приоритет.

ИСР становится основой для последующих задач, добавления и корректировки результатов. Может стать шаблоном для типовых проектов.

Кроме ИСР существуют и другие инструменты — их выбор зависит от условий, в которых предстоит реализовать цель.

Например, для завязанных с жёсткими сроками проектов используют метод критического пути, где также отражаются результаты и зависимости между ними, но с одной принципиальной разницей: вносятся определённые сроки их достижения. Все задачи в методе критического пути взаимозависимы, а сроки критичны, и при отклонении от графика нужно применять срочные меры, чтобы не нарушить ход всего проекта.

ИСР более гибкий с этой точки зрения инструмент, но если нужно ориентироваться на дедлайны, то больше подойдёт метод критического пути.

Принципы, по которым строится ИСР

Включаем работы, непосредственно влияющие на достижение цели

Пункт очевидный, но с нюансом: следует охватить весь спектр нужных задач, при этом оставить за рамками ИСР несоответствующие и посторонние.

Например, в планировании ремонта по ИСР нужно включить закупку материалов, но не нужно — «попросить скидку у поставщика», «ещё раз попросить скидку».

Также не нужно дублировать задачи и слишком детально прописывать шаги.

Используем больше существительных и меньше глаголов

Здесь главное «что», а не «как» — это поможет концентрироваться на результатах. Например, сравним «составить план на разработку концепции» и «разработанная концепция». Последнее, более ёмкое и краткое, акцентирует внимание на полученном результате — смещает фокус в правильное русло.

Выстраиваем иерархию от двух до четырёх уровней

Этого достаточно для большинства проектов. Ориентируясь на этот принцип, легче вычленять главное и делать упор на результат. Определить, где остановить декомпозицию, поможет положительный ответ на вопрос, можно ли поставить одного исполнителя на конкретный пакет работ. Если один человек с ним не справится ― разбивайте задачи дальше.

Распределяем нагрузку

Каждый пакет работ закрепляется за конкретной командой или за отдельным ответственным. Если сформировать ИСР верно, обязанности всем будут понятны и не будут дублироваться.

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект курс

Управление
по agile: scrum, kanban, lean

Узнать больше

  • Познакомитесь с опытом практикующих экспертов и евангелистов agile
  • Сможете поменять стиль управления в бизнесе и донести ценность продукта до клиентов
  • Научитесь управлять скоростью вывода продукта на рынок

Как создать ИСР

Исполнитель может составить ИСР проекта самостоятельно. Однако, если в процессе задействовать всю команду, а в идеале и представителя(ей) заказчика, участники будут лучше понимать суть работ, общий результат и отдельные задачи.

Шаг 1. Определяем главную цель

Ради чего создаётся планирование и к какому результату нужно прийти ― обозначаем это на вершине иерархической структуры.

Шаг 2. Выделяем ключевые этапы для первого уровня

Декомпозируем главную цель на достижимые, конкретные результаты.

Выполнить это разделение можно несколькими способами:

  • по результатам проекта ― достигнутым вехам, например, при строительстве дома это могут быть фундамент, экстерьер, интерьер;
  • по длительности выполнения или срокам — с привязкой к отчётным периодам (кварталам, полугодиям);
  • по обязанностям — исполнителя, заказчика или поставщиков;
  • по отделам — разработка, маркетинг, техподдержка;
  • по финансированию — какие результаты будут достигнуты за счёт выделяемых средств.

Деление опционально и как его выполнять зависит от предпочтений сторон. Так как один и тот же проект может быть представлен в разных способах разделения по ИСР, при выборе советуем отталкиваться от того, какой из критериев важнее конкретно для рассматриваемого проекта.

Шаг 3. Разбиваем этапы на задачи

Нужно сформулировать все задачи, которые станут ответвлениями от этапов, и внести их. По мере закрытия задач проект автоматически будет двигаться по ИСР к главной цели.

Шаг 4. Выписываем подзадачи и выделяем пакеты работ

После создания уровня иерархии нужно добавить ещё один ― для выписывания подзадач и их группировки в пакеты работ.

Пакетами работ традиционно называют завершающие ответвления ИСР на самом низком уровне, где указываются действия для закрытия этапов. У каждого пакета работ должно быть описание с данными об ответственных и ходе выполнения соответствующих задач.

Шаг 5. Назначаем ответственных

Это последняя стадия декомпозиции. За каждой задачей закрепляется представитель исполнителя, который будет отвечать за неё и участвовать в каждом из этапов работы.

Существуют разные формы графического исполнения ИСР

Выбирая визуализацию ИСР, лучше ориентироваться на комфортное восприятие.

Рассмотрим основные форматы.

Контурная структура

Самый простой и доступный вариант построения ИСР. Нужно собрать задачи вместе и расписать их значение и иерархической последовательности, пользуясь числовыми обозначениями для подзадач или располагая их друг под другом в определённой последовательности. Вот как на этом примере:

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект

Иерархическая таблица

Показывает зависимость задач друг от друга ― иерархию, но без подробной визуализации. Поскольку это компактная таблица, её удобно построить и разместить в любом файле.

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект

Древовидная структура

Как понятно из названия, по структуре этот вариант напоминает дерево. Он наглядно отображает суть построения: есть родительская и дочерняя задачи, ведущие к главной цели.

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проект

ИСР формирует общее представление о проекте, его объёме и результатах

Цели ИСР — определить задачи на каждом этапе работы, показать результаты, которых нужно достичь, и всё это наглядно представить.

Для создания ИСР можно распределять стикеры на доске, использовать простой шаблон в Word или программное обеспечение с поддержкой управления проектами и инструментами для декомпозиции, которое пригодится для взаимодействия ИСР с разными данными и документами.

Читать также

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проектЛучшие функции 15 популярных систем управления проектами

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проектКак управлять рисками IT-проекта

Что такое иерархическая структура работ и как с её помощью эффективно реализовать проектЭтапы оценки проекта: понятия, методы и полезные инструменты

Мнение автора и редакции может не совпадать. Хотите написать колонку для Нетологии? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *