Консультация онлайн # 189396

Раздел: Пакет MSOffice
Автор вопроса: Peachpuncher (Посетитель)
Дата: 17.05.2016, 12:36 Консультация неактивна
Поступило ответов: 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Здравствуйте! У меня возникли сложности с таким вопросом:

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

то есть сколько уровней от высшего до низшего и кто на каком уровне
пример данных такой (для наглядности)

00610 СД
00641 00610
00536 00610
02063 00610
00615 00610
00175 00610
00135 00610
00022 00610
00523 00610
00612 00641
00591 00612
3319 00523
17546 13809
13809 00022
00535 13809

и таких строк 3000

Ответ # 1, Megaloman (Мастер-Эксперт)

Здравствуйте, Peachpuncher! В приложении текст макроса, который выстраивает структуру подчинённости. Таблица с Вашим примером и макросом для формирования иерархии Опасаюсь, что не очень понимаю задачу и, скорее всего, в Вашей таблице более двух столбцов, поэтому решение не очень подойдёт - но тут уж будет Ваша вина - не точно поставили задачу. Будем дорабатывать

Приложение:


Megaloman

Мастер-Эксперт
17.05.2016, 22:54
Нет оценки ответа

Мини-форум консультации # 189396

Megaloman

Мастер-Эксперт

ID: 137394

289632

= общий =    17.05.2016, 13:26
Peachpuncher, Какой айди самого главного начальника?
Последнее редактирование 17.05.2016, 13:30 Megaloman (Мастер-Эксперт)
=====
Нет времени на медленные танцы
Peachpuncher

Посетитель

ID: 400336

289633

= общий =    17.05.2016, 13:31
Самого главного СД
Megaloman

Мастер-Эксперт

ID: 137394

289635

= общий =    17.05.2016, 16:41
Peachpuncher, Неплохо бы получить Ваш файл полностью.
=====
Нет времени на медленные танцы
Peachpuncher

Посетитель

ID: 400336

289637

= общий =    17.05.2016, 17:05
Парни файл выгрузить к сожалению не получится из-за супер жестких требований о конфиденциалньости

максимум могу перешифровать там все
все цифры заменить на буквы и так отправить
и то сообщением, нам нельзя ничего выгружать
Peachpuncher

Посетитель

ID: 400336

289672

= общий =    18.05.2016, 10:16
извиняюсь еще не успел протестить, но из того примера что видел меня смутила одна вещь

Там две позции под СД - 00610 и 00641 - они обе на втором уровне иеррархии получаются
а у вас согласно коду выходит что один выше другого
давайте я вам кину изначальный вариант в сообщении прямо
может быть когда данных больше ввам будет легче написать
Последнее редактирование 23.05.2016, 16:23 Megaloman (Мастер-Эксперт)
Megaloman

Мастер-Эксперт

ID: 137394

289673

= общий =    18.05.2016, 10:50
А Вы Определитесь, что такое иерархия и в каком виде вы хотите её видеть. Главный босс СД. В примере ему напрямую подчиняются 2 человека (641 и 610) на одном уровне иерархии, номера по порядку 1 и 2. Человеку 610 подчиняются напрямую 8 человек 2.1...2.8. Кстати, данные некорректны- не может один чел подчиняться одновременно 2 начальникам. 641 одновременно подчиняется и СД и 610-у. Но это получилось из-за того, что я в данные добавил строку для тестирования не корректную, так что на правильных данных правильно отработает.
22 подчиняется 610-у (2.4), 13809 подчиняется 22-у (2.4.1), а 4 человека подчиняются 13809-у (2.4.1.1 ..... 2.4.1.4)
То есть иерархия выстроена.
Я не берусь преобразовывать ваш текстовый массив в эксел-таблицу (времени жалко), пришлёте ексел-таблицу с примером, буду смотреть. На портале есть раздел "мои файлы", туда можно её поместить и сослаться в вашем сообщении на мини-форуме вопроса.
Последнее редактирование 18.05.2016, 10:53 Megaloman (Мастер-Эксперт)
=====
Нет времени на медленные танцы
Peachpuncher

Посетитель

ID: 400336

289675

= общий =    18.05.2016, 11:27
Ну смотрите в чем там суть, они 610 и 641 не 1 и 2 а оба 2 - то есть вторя ступень иерархии
извиняюсь что недостаточно подрбоно объяснил

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

На счет того что иехархия есть я согласен но она не совсем точно отображет рельное положение дел, поскольку добавляет лишние уровни, получается каждый начальник эт оновый уровень а на самом деле первые два эт оодин уровень следующие , допустим 28 это следующий уровень и так далее
Megaloman

Мастер-Эксперт

ID: 137394

289687

= общий =    18.05.2016, 15:53
приведите свой пример исходных данных, желательно более развитый чем в вопросе, и покажите, как он должен выглядеть после обработки.
По моему скромному мнению, если боссу СД подчиняются непосредственно 5 чел, то они на одном уровне иерархии, их условно можно пронумеровать
1
2
3
4
5
Здесь 1,2,3,4,5 не уровни иерархии, а номер по порядку в одном уровне иерархии- они все подчиняются непосредственно СД.
Если руководителям этого уровня иерархии кто-то подчиняется, это более низкий уровень иерархии, условно их можно пронумеровать
1.1
1.2
....
2.1
2.2
....
....
5.1
5.2
.....
Все эти люди находятся на одном уровне иерархии, они подчиняются человеку, который непосредственно подчиняется СД.

Если любому человеку из этого списка, например 2.4, еще кто-то подчиняется, то это еще более низкий уровень иерархии,и его пронумеруем
2.4.1
2.4.2
2.4.3
......
Или аналогично для людей, подчиняющихся руководителю 5.10
5.10.1
5.10.2
.....
Все эти люди на одном уровне иерархии, они подчиняются каждый своему руководителю, который подчиняется руководителю, который подчиняется непосредственно его светлости главному боссу. smile
И так далее если есть более глубокая подчинённость.
Именно этот алгоритм реализован. То есть, уровень иерархии тут наглядно виден по числу разделителей в номере, как это обычно делается в документах, что то типа том 5, глава 45, параграф 13: 5.45.13

Там две позции под СД - 00610 и 00641 - они обе на втором уровне иеррархии получаются
а у вас согласно коду выходит что один выше другого

А как бы вы хотели, в таблице из двух столбцов кто-то обязательно будет помянут раньше, хоть они и на одном уровне иерархии.
А Что хотите Вы?

Кстати, при чём тут нарушение конфиденциальности: два столбца в ексел- таблице с числами, ничего никому не говорящими, без фамилий, наименования отделов, не имеют ни для кого иного практического смысла, кроме как объект решения задачи.
Упакуйте раром, например, можно с паролем, пришлите мне ссылку в личную почту. Все дела ... smile
Последнее редактирование 18.05.2016, 16:29 Megaloman (Мастер-Эксперт)
=====
Нет времени на медленные танцы
Peachpuncher

Посетитель

ID: 400336

289696

= общий =    18.05.2016, 17:09
Я бы и рад прислать, и я с вами согласен что это просто цифры, и в отрыве от контекста они ничего не значат, но у нас фиксируются все выгрузки внешние и тщательно проверяются
Прибегут IT безопасники и им не объяснишь что это цифры которые никому не понятны, у них свои инструкции - они обязаны об утечке данных информировать головной офис в США.

Так что я могу только в сообщение вставить данные

И еще - у этой задачи есть скажем так шаблон по которому мы будем их презентовать
Цель - узнать сколько в компании уровней подчинения - если идти по вашей струкуте - она имеет логику несомненно, но тогда получится что 1,2,3.ит.д это уровни иерархии, а у нас их всего 8
и нам надо понять сколько подчиненных под каждым начальником и сколько начальников над подчиненным
то есть цифра 5 фактически значит что он на 5 уровне (это ближе к низу)
должно быыть условно так
1 CEO
2 Начальники управлений
3 Начальники отделов
и т.д.
а если 123456 - у нас там 560 менеджеров и каждый будет как новый уровень читаться
вот такая проблма
Megaloman

Мастер-Эксперт

ID: 137394

289697

= общий =    18.05.2016, 18:55
Вот слегка изменённая таблица. Данные придумал сам. Таблицу организовал с фильтром. Можете фильтровать как по уровню подчиненности, так и по любому боссу. Внизу автоматом подсчитывается кол-во человек, выбранных по фильтру. Можно указать фильтр, например: "Начинается с 2." и посчитать, сколько людей в подразделении 2. Можно выбрать фильтр, например, иерархия 4 уровня, получим число людей этого уровня иерархии. А если очень хочется, можно отсортировать таблицу по уровням иерархии. Можно средствами эксел, можно и макрос поменять.
Последнее редактирование 18.05.2016, 19:10 Megaloman (Мастер-Эксперт)
=====
Нет времени на медленные танцы
Peachpuncher

Посетитель

ID: 400336

289698

= общий =    18.05.2016, 18:57
На первый взгляд выглядит как будто все в порядке, но надо обкатать на реальных данных
Megaloman

Мастер-Эксперт

ID: 137394

289703

= общий =    18.05.2016, 19:36
=====
Нет времени на медленные танцы
Peachpuncher

Посетитель

ID: 400336

289749

= общий =    20.05.2016, 11:04
Извиняюсь за поздний ответ последние дни были очень загруженными, у меня просто параллельно несколько задач)
Я посмотрел ваш результат, и есть одна вещь которая меняя смущает
00641 - он тоже второй уровень а не третий
они оба подчиняются напрямую СД
по вашей классификации он на 3-м уровне вместе с еще несколькими позициями
это неправильно, и проблема в том что если на втором уровне я просто фильтрами в экселе могу отследить человека, то на 3-5 это будет уже невозможно отследить всех, а они похоже там все съезжают.
у нас 7-8 уровней примерно, а по такой логике получится очень много, и если второго я могу руками поменять потому как я его вижу то дальше я уже не смогу найти)
Прошу отнестись с пониманием к моим притязаниям)
Давайте я вам все 3700 отправлю в сообщении?
Megaloman

Мастер-Эксперт

ID: 137394

289770

= общий =    20.05.2016, 14:33

00641 - он тоже второй уровень а не третий
они оба подчиняются напрямую СД


Во первых, давайте договоримся о терминологии. У меня те, кто подчиняется СД - первый уровень. Если надо отобразить по другому - не проблема прибавить единичку в значение уровеня иерархии.

Во вторых, где Вы видите в Вашей постановке, что 641 подчиняется СД?
А раз он не подчиняется СД, то он ниже в иерархии чем 610, как следует из Вашей постановки, 641 подчинён 610.

00610 СД
00641 00610

Начинаю подозревать, что вам нужно, чтобы все, у кого есть кто-то в подчинении - это один уровень иерархии, а все остальные - в другом. Иначе не берусь объяснить, почему 610 и 641 на одном уровне.

В третьих, если что-то отправите в сообщении, то мне не нужна абракадабра с непонятными данными как в предыдущем сообщении. Там айди с пробелами, имхо, чего не должно быть, как их потом в таблицу корректно без затрат времени переместить - не представляю. Работа с некорректными данными утомляет smile

Чтобы иметь минимум временнЫх затрат, я бы предложил Вам сохранить лист таблицы в csv-формате (Меню Файл-Сохранить как-тип файла выбрать csv.) Затем его можно как текст передать в сообщении.

Если Вы не против, я бы предыдущее сообщение вычистил от этих данных. Сейчас мне не хочется этого делать без вашего разрешения - вдруг кто-то на них польстится. smile
Последнее редактирование 20.05.2016, 15:10 Megaloman (Мастер-Эксперт)
=====
Нет времени на медленные танцы
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.