Всем привет!
В таблице по имеющимся связям нужно определить возможность монтажа элементов, то есть представим, что у нас есть пирамида из кирпичей и если одного из элементов нет, то и возможности монтировать последующие связные элементы, которые связываются выше от отсутствующего, отсутствует. Описание длинное, но я пытался очень подробно описать ТЗ
На примере:
Вычисления в столбце «ОФ2»
Описание только для одной ветви цепи, в файле примере по всем ветвям!
«Идентификатор элемента» «52275» проверяем наличие ТМЦ, столбец «Наличие_ТМЦ» если значение «Да», идем по цепочке, проверяем его родителей, столбцы «Родитель1» (54765) и «Родитель2» (53100), но замечу берем из столбцов Родитель, а проверяем по столбцу «Идентификатор элемента», находим элементы «54428» и «54800» (их может быть 3 и 4, то есть у каждого может быть пара родителей и каждый нужно будет проверить далее по цепочке) и если оба Родителя имеют значение «Наличие_ТМЦ» «Да», проверяем их «Родитель1» и «Родитель2» пока не дойдем до момента, когда родителей не будет совсем (у обоих родителей значение «-»), в нашем примере это «54800» и «54428» – крайние элементы.
Если на протяжении всей цепочки наличие ТМЦ хотя бы у одного Родителя «Нет», значит все проверенные элементы по своей ветке, до текущего, должны быть отмечены в столбце значением «Нет», так как отсутствует один из самых последних родителей, но если бы отсутствовал только элемент «53100» (Наличие ТМЦ со значением «Нет»), тогда в столбце ОФ2 значение «Нет» присвоилось элементам «52275» и «53100», так как «Нет» самого элемента «53100» и соответственно если его «Нет», то последующие элемент(ы) то же «Нет» в нашем случае это «52275» так сказать его «Ребенок»
Если при проверке цепочки значение Родителя «-», то его исключаем из проверки
В примере реализовано формулой, есть цикличная формула ВПР, пришлось включить итеративные вычисления.
Вычисления в столбце «ОФ»
При расчете значений нужно учесть, что некоторые элементы объединены в группы столбец «Укр_Сборка» и если элемент состоит в группе, то алгоритм расчета следующий:
Учитываем условие в столбце «ОФ2» если оно «Нет», то сразу значение в столбце «ОФ» «Нет», далее проверяем наличие ТМЦ во всей группе, столбец «Укр_Сборка» если хотя бы одного элемента «Нет», то в столбце «ОФ» значение «Нет», если да, то проверяем всех Родителей группы на наличие ТМЦ (столбцы «Родитель1» и «Родитель2»), но не забываем, берем из столбцов Родитель, а проверяем по столбцу «Идентификатор элемента», если все Родители с значением «Да» в столбце «Наличие_ТМЦ», то значение в столбце «ОФ» «Да», если хотя бы один из родителей «Нет», то вся группа «Нет»
Так же нужно учесть, что, если у группы в столбце «Укр_Сборка» хотя бы один из Родителей в столбце «ОФ2» (это мы вычисляли в начале нашего пути) со значением «Нет», значит вся группа имеет значение в столбце «ОФ» «Нет», «Да» же если наличие ТМЦ, в группе, со значением «Да» и опять не забываем берем из столбцов Родитель, а проверяем по столбцу «Идентификатор элемента»
Последнее условие, при расчете учитываем Столбец Приоритет и если элементы из приоритета 1 имеют значение в столбце «ОФ2» «Нет», значит приоритет 2, а это все оставшиеся элементы то же принимают значение «Нет», всего два приоритета 1 и 2
Так же на листе 2 схематично показана связь данных элементов, но только по расчету значения столбца «ОФ2»
Решение нужно макросами, так как таблица очень большая, тем более потом код я буду помещать в книгу макросов или в надстройку.
Файл примера оригинала вышлю на почту, размер 2,5 метра, во вложении ниже урезанный файлБюджет 3 т.р.