Отношения «родитель-потомок» в Excel и уровень детали

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

Для ссылки на исходный пост вот ссылка: Формула Excel для присвоения родительского номера дочернему элементу

Вот ссылка на таблицу Excel с используемыми в настоящее время кодами: https://1drv.ms/x/s!Au53oWRKuRfD9kanfyQ62uW30r1V

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

Мы начинаем с ввода информации о спецификациях деталей (BOM) на первой вкладке («Инженерный выпуск»).

А Б С Д Э Ф Г ЧАС я Дж К 5 Пункт №. Номер детали. Описание Кол-во. УМ Диспо. 6 1 Д-008-165-044 ЗАДНИЙ ПОДШИПНИК КОРОЛЕВОГО ОПЕРАТОРА 1 советник Ремонт 7 1.2 152Б2157 ПАНЕЛЬ ЖУРНАЛА 1 советник Ремонт 8 1.2.3 159Х610 ПАД ШИМ 1 советник Новый 9 1.2.5 1/4-20 х 3/4 ЛГ С.Х.С.С. 3 советник Новый 10 1.3 152Б2158 ПАНЕЛЬ ЖУРНАЛА 1 советник Ремонт 11 1.3.3 159Х610 ПАД ШИМ 1 советник Новый 12 1.3.5 1/4-20 х 3/4 ЛГ С.Х.С.С. 3 советник Новый 13 1,4 Д-027-165-047 МОДИФИКАЦИЯ ЖУРНАЛА 1 советник Ремонт 14 1.4.3 159Х610 ПАД ШИМ 1 советник Новый 15 1.4.5 1/4-20 х 3/4 ЛГ С.Х.С.С. 3 советник Новый 16 1.4.6 1/8 ФФ-С ТРУБНЫЙ НИППЕЛЬ 1 советник Новый 17 1.4.7 1/8 ДД-С 90 ГР. КОЛЕНО ЖЕНСКОЕ 1 советник Новый 18 1.4.8 1/4 ПТФ ТРУБНАЯ ЗАГЛУШКА 1 советник Новый 19 1.4.9 С-202 СООБЩЕНИЕ 2 советник Новый 20 1.4.10 6-32 х 1/4 ЛГ Б.Х.С.С. 2 советник Новый 21 1.4.11 Б-026-155 ТЕРМОПАРА 1 советник Новый 22 1,5 Д-027-165-048 МОДИФИКАЦИЯ ЖУРНАЛА 1 советник Новый 23 1.5.3 159Х610 ПАД ШИМ 1 советник Новый 24 1.5.5 1/4-20 х 3/4 ЛГ С.Х.С.С. 3 советник Новый 25 1.5.6 1/8 ФФ-С ТРУБНЫЙ НИППЕЛЬ 1 советник Новый 26 1.5.7 1/8 ДД-С 90 ГР. КОЛЕНО ЖЕНСКОЕ 1 советник Новый 27 1.5.8 1/4 ПТФ ТРУБНАЯ ЗАГЛУШКА 1 советник Новый 28 1.5.9 С-202 СООБЩЕНИЕ 2 советник Новый 29 1.5.10 6-32 х 1/4 ЛГ Б.Х.С.С. 2 советник Новый 30 1.5.11 Б-026-155 ТЕРМОПАРА 1 советник Новый 31 1,6 159А601-1 ПЛАВАЮЩЕЕ УПЛОТНЕНИЕ (ПЕРЕДНЕЕ) 1 советник Ремонт 32 1.6.1 1/4-20 х 2 1/2 ЛГ С.Х.С.С. 2 советник Новый 33 1.6.2 3/16 ДИА. Х 1/2 ЛГ ДЮБЕЛЬ 2 советник Новый 34 1.6.3 5/16 ДИА. Х 1/2 ЛГ ДЮБЕЛЬ 1 советник Новый 35 1,7 159А601-2 ПЛАВАЮЩЕЕ УПЛОТНЕНИЕ (КОРМОВОЕ) 1 советник Ремонт 36 1.7.1 1/4-20 х 2 1/2 ЛГ С.Х.С.С. 2 советник Новый 37 1.7.2 3/16 ДИА. Х 1/2 ЛГ ДЮБЕЛЬ 2 советник Новый 38 1.7.3 5/16 ДИА. Х 1/2 ЛГ ДЮБЕЛЬ 1 советник Новый 39 1,8 Д-031-194 КОНЦЕВАЯ ПЛАСТИНА (ПЕРЕДНЯЯ) 1 советник Ремонт 40 1,9 Д-031-195 КОНЦЕВАЯ ПЛАСТИНА (КОДНЯЯ) 1 советник Ремонт 41 1.1 КОММ Л ПРОВОДНЫЕ ЗАЖИМЫ 8 советник Новый 42 1.11 #6-32 Х 1/4 ЛГ Б.Х.С.С. 8 советник Новый 43 1.12 159Б1680 ТРУБНАЯ СБОРКА 2 советник Новый 44 1.13 1/2-13 х 1 3/4 ЛГ С.Х.С.С. 24 советник Новый 45 1.14 159Х613-2 ШАЙБА 8 советник Новый

Столбец A (номер позиции) используется для назначения родительской детали дочерней детали и определения уровня детали в сборке. Например: Сборка = 1 — это сборка и ее уровень — 0, Компонент 1 = 1,1 — это составная часть до 1 (сборка) и ее уровень равен 1, Субкомпонент 1 = 1.1.1 является частью подкомпонента 1.1 (компонент 1) и его уровень равен 2, Компонент 2 = 1,2 – это составная часть до 1 (сборка) и ее уровень равен 1, Субкомпонент 2 = 1.2.1 является частью подкомпонента 1.2 (компонент 2) и его уровень равен 2, Sub-Sub-Component = 1.2.1.1 является частью суб-субкомпонента 1.2.1 (субкомпонент 2) и его уровень равен 3, и т. д....

На второй вкладке («BOMUploadRelease») у меня все, начиная с первого листа, автоматизировано с помощью кода для заполнения шаблонного листа, который загружается в нашу систему ERP.

А С О С 1 Номер детали Описание Уровень Родитель 2 Д-008-165-044.Р ЗАДНИЙ ПОДШИПНИК КОРОЛЕВОГО ОПЕРАТОРА 0 3 152Б2157.Р ПАНЕЛЬ ЖУРНАЛА 1 Д-008-165-044.Р 4 159Х610.Н ПАД ШИМ 2 152Б2157.Р 5 1/4-20 Х 3/4 ЛГ.Н С.Х.С.С. 2 152Б2157.Р 6 152Б2158.Р ПАНЕЛЬ ЖУРНАЛА 1 Д-008-165-044.Р 7 159Х610.Н ПАД ШИМ 2 152Б2157.Р 8 1/4-20 Х 3/4 ЛГ.Н С.Х.С.С. 2 152Б2157.Р 9 Д-027-165-047.Р МОДИФИКАЦИЯ ЖУРНАЛА 1 Д-008-165-044.Р 10 159Х610.Н ПАД ШИМ 2 152Б2157.Р 11 1/4-20 Х 3/4 ЛГ.Н С.Х.С.С. 2 152Б2157.Р 12 1/8 ФФ-С.Н. ТРУБНЫЙ НИППЕЛЬ 2 Д-027-165-047.Р 13 1/8 ДД-С.Н. 90 ГР. КОЛЕНО ЖЕНСКОЕ 2 Д-027-165-047.Р 14 1/4 ПТФ.Н ТРУБНАЯ ЗАГЛУШКА 2 Д-027-165-047.Р 15 С-202.Н СООБЩЕНИЕ 2 Д-027-165-047.Р 16 6-32 Х 1/4 ЛГ.Н Б.Х.С.С. 3 Д-027-165-047.Р 17 Б-026-155.Н ТЕРМОПАРА 3 Д-027-165-047.Р 18 Д-027-165-048.Н МОДИФИКАЦИЯ ЖУРНАЛА 1 Д-008-165-044.Р 19 159Х610.Н ПАД ШИМ 2 152Б2157.Р 20 1/4-20 Х 3/4 ЛГ.Н С.Х.С.С. 2 152Б2157.Р 21 1/8 ФФ-С.Н. ТРУБНЫЙ НИППЕЛЬ 2 Д-027-165-047.Р 22 1/8 ДД-С.Н. 90 ГР. КОЛЕНО ЖЕНСКОЕ 2 Д-027-165-047.Р 23 1/4 ПТФ.Н ТРУБНАЯ ЗАГЛУШКА 2 Д-027-165-047.Р 24 С-202.Н СООБЩЕНИЕ 2 Д-027-165-047.Р 25 6-32 Х 1/4 ЛГ.Н Б.Х.С.С. 3 Д-027-165-047.Р 26 Б-026-155.Н ТЕРМОПАРА 3 Д-027-165-047.Р 27 159А601-1.Р ПЛАВАЮЩЕЕ УПЛОТНЕНИЕ (ПЕРЕДНЕЕ) 1 Д-008-165-044.Р 28 1/4-20 Х 2 1/2 ЛГ.Н С.Х.С.С. 2 159А601-1.Р 29 3/16 ДИА. Х 1/2 ЛГ.Н ДЮБЕЛЬ 2 159А601-1.Р 30 5/16 ДИА. Х 1/2 ЛГ.Н ДЮБЕЛЬ 2 159А601-1.Р 31 159А601-2.Р ПЛАВАЮЩЕЕ УПЛОТНЕНИЕ (КОРМОВОЕ) 1 Д-008-165-044.Р 32 1/4-20 Х 2 1/2 ЛГ.Н С.Х.С.С. 2 159А601-1.Р 33 3/16 ДИА. Х 1/2 ЛГ.Н ДЮБЕЛЬ 2 159А601-1.Р 34 5/16 ДИА. Х 1/2 ЛГ.Н ДЮБЕЛЬ 2 159А601-1.Р 35 Д-031-194.Р КОНЦЕВАЯ ПЛАСТИНА (ПЕРЕДНЯЯ) 1 Д-008-165-044.Р 36 Д-031-195.Р КОНЦЕВАЯ ПЛАСТИНА (КОДНЯЯ) 1 Д-008-165-044.Р 37 КОММ Л.Н. ПРОВОДНЫЕ ЗАЖИМЫ 1 Д-008-165-044.Р 38 #6-32 Х 1/4 ЛГ.Н Б.Х.С.С. 2 Д-008-165-044.Р 39 159Б1680.Н ТРУБНАЯ СБОРКА 2 Д-008-165-044.Р 40 1/2-13 Х 1 3/4 ЛГ.Н С.Х.С.С. 2 Д-008-165-044.Р 41 159Х613-2.Н ШАЙБА 2 Д-008-165-044.Р

На этом листе находятся коды. Номеру детали присваивается буква «.(буква)», добавляемая в конец номера детали на первой вкладке на основе выбора столбца «Dispo» на первой вкладке. Столбец «Уровень» на вкладке 2 («BOMUploadRelease») назначается на основе столбца A (номер позиции), а столбец «Родительский» на вкладке 2 («BOMUploadRelease») назначается на основе столбца A (номер позиции), но вводится родительская часть. номер из столбца (Номер детали) на вкладке 2 («BOMUploadRelease»).

Первая проблема — это присваиваемые уровни. Текущий код работал нормально, пока мы не увеличили спецификацию и не использовали двузначные цифры, например 1.5.11, а из-за двузначного числа «11» после точки он дает ему уровень 3, хотя он все еще должен быть 2. По сути, для каждый "." в строке из столбца A (номер позиции) на первой вкладке («Инженерный выпуск») будет уровень, поэтому 0 «.» будет уровнем 0, 1 «." будет уровень 1, 2 "." будет уровень 2, 3 "." будет уровень 3 и т. д.

Код, используемый для решения проблемы уровней деталей:

=IF('Engineering Release'!A6<>"",LEN('Engineering Release'!A6)-LEN(SUBSTITUTE('Engineering Release'!A6,".","")),"")

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

Как это выглядит сейчас:

Что должно быть с исправленными ошибками красным текстом:

Код, используемый для присвоения номера родительской детали:

=LET(x, XLOOKUP(TEXTBEFORE(A2,".",-1),
    'Engineering Release'!$B$6:$B$62,
    'Engineering Release'!$A$6:$A$62),
 y, 'Engineering Release'!$K$6:$K$62,IFERROR( XLOOKUP(TEXTBEFORE(x,".",-1),
             TEXT('Engineering Release'!$A$6:$A$62,"@"),
             'Engineering Release'!$B$6:$B$62 &"." &IFS (y = "Ref.","REF", y = "Repair","R", y = "Reuse","U", y = "Modify","M", y = "New","N", y = "Outsource","O")),""))          

Любая помощь ценится и нужна. Пожалуйста, обратитесь к электронной таблице по ссылке, изображениям, показывающим, как это не так и как должно быть, а также используемым кодам.

Обратите внимание, что ваша проблема 1 вызвана ошибкой в ​​вашей формуле. в настоящее время там написано: =IF('Engineering Release'!A6<>"",LEN(SUBSTITUTE('Engineering Release'!A6,".",""))-1,"") в то время как в вашем вопросе вы написали формулу, которая будет правильно рассчитывать: =IF('Engineering Release'!A6<>"",LEN('Engineering Release'!A6)-LEN(SUBSTITUTE('Engineering Release'!A6,".","")),"")

P.b 31.08.2024 05:20

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

Joshua Johnson 31.08.2024 17:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если у вас есть Microsoft 365 (в противном случае сообщите мне), пожалуйста, введите это в первую ячейку BOMUploadRelease:

  • Используя Менеджер имен, определите BOMUpRel с помощью приведенного ниже кода.
  • Эта пользовательская функция принимает диапазон данных и результат, необходимые в качестве входных данных.
  • Используя col_num в качестве параметра, вы можете разместить столбец в необходимых позициях (как показано в примере).
=LAMBDA(eng_data, col_num,
    LET(
        header, TAKE(eng_data, 1),
        data, DROP(eng_data, 1),
        item_no, INDEX(data, , 1),
        part_no, INDEX(data, , 2) &
            SWITCH(
                INDEX(data, , XMATCH("Dispo.", header)),
                "Repair", "R",
                "Reuse", "U",
                "Modify", "M",
                "Ref", "F",
                "New", "N"
            ),
        level, LEN(item_no) - LEN(SUBSTITUTE(item_no, ".", "")),
        parent_item_no, TEXTBEFORE(item_no, ".", level),
        parent_part_no, IF(
            level,
            XLOOKUP(parent_item_no, item_no & "", part_no, "not found"),
            ""
        ),
        result, HSTACK(part_no, INDEX(data, , 3), level, parent_part_no),
        CHOOSECOLS(result, col_num)
    )
)
  • Очистите существующие значения в BOMUploadRelease
  • Введите =BOMUpRel('Engineering Release'!A5:K45, col_num) в первую ячейку каждого столбца.
  • Поскольку параметр col_num используется с CHOOSECOLS, чтобы получить несколько столбцов, введите 1–4 в виде массива внутри {}; например ``=BOMUpRel('Engineering Release'!A5:K45,{1,2,3,4})` вернет все столбцы.

Результат:


Я использовал описательные имена для переменных. Если необходимо подробное объяснение, сообщите мне.

Да, мы используем 365. Я использую настольные приложения для всего, кроме нескольких документов SharePoint. Эта книга Excel создается через настольное приложение. Я попробую код и свяжусь с вами, так как сейчас я в дороге. Если я смогу остановиться и войти в систему удаленно, я попробую. Большое спасибо за помощь.

Joshua Johnson 31.08.2024 17:21

Это хорошо. LAMBDA и т. д. тогда сработает.

nkalvi 31.08.2024 17:50
Ответ принят как подходящий

Вы можете использовать следующую формулу для Level в O2:

=LET(a,DROP(TOCOL('Engineering Release'!A:A,1),4),LEN(a)-LEN(SUBSTITUTE(a,".",)))

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

Тогда для Parent в S2 вы можете использовать:

=XLOOKUP(O2-1,O$1:O1,A$1:A1,"",,-1)

Немного не по теме:

Вы можете значительно упростить формулу BomUploadRelease!A2:

старая формула: =IF('Engineering Release'!K6:K6 = "Repair",CONCATENATE('Engineering Release'!B6:B6,".R"),IF('Engineering Release'!K6:K6 = "Reuse",CONCATENATE('Engineering Release'!B6:B6,".U"),IF('Engineering Release'!K6:K6 = "Modify",CONCATENATE('Engineering Release'!B6:B6,".M"),IF('Engineering Release'!K6:K6 = "Ref.",CONCATENATE('Engineering Release'!B6:B6,".F"),IF('Engineering Release'!K6:K6 = "New",CONCATENATE('Engineering Release'!B6:B6,".N"), "")))))

новая формула: =DROP(TOCOL('Engineering Release'!B:B,1),1)&"."&SWITCH(DROP(TOCOL('Engineering Release'!K:K,1),1),"Repair","R","Reuse","U","Modify","M","Ref.","F","New","N")

Или бета: =DROP('Engineering Release'!B:.B,5)&"."&SWITCH(DROP('Engineering Release'!K:.K,5),"Repair","R","Reuse","U","Modify","M","Ref.","F","New","N")

И ваша формула в BomUploadRelease!C2:

старая формула: =IF(ISBLANK('Engineering Release'!C6:F6), "", 'Engineering Release'!C6:F6)

новый (я не понимаю, почему вы ссылаетесь на столбец F, поскольку это объединены и поэтому не будут содержать данные): =TOCOL(DROP('Engineering Release'!C:C,5),1)

или бета: =DROP('Engineering Release'!C:.C,5)

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

=MAP(A2#,O2#,LAMBDA(PartNo,Level,XLOOKUP(Level-1,O2:Level,A2:PartNo,"",,-1)))

Хороший П.Б. Могу ли я спросить, что такое синтаксис «бета» C:.C? Спасибо.

nkalvi 31.08.2024 11:18

Спасибо. . означает до последней использованной ячейки. C.:.C будет от первого до последнего использования. К сожалению, вы не можете писать C6:.C (пока?). Если вы участвуете в инсайдерской программе и используете бета-канал, это новая активированная функция, которая в конечном итоге станет доступна и обычным пользователям после успешного тестирования.

P.b 31.08.2024 12:03

@nkalvi Подробнее здесь techcommunity.microsoft.com/t5/excel-blog/….

P.b 31.08.2024 12:07

Пока недоступно на Mac Beta (все еще версия 2408). Еще раз спасибо.

nkalvi 31.08.2024 12:21

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

Joshua Johnson 31.08.2024 17:15

Разлив @JoshuaJohnson открывает двери для создания динамичных решений. Они обновляются в реальном времени при изменении/добавлении данных.

P.b 31.08.2024 17:18

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

Joshua Johnson 31.08.2024 17:25

@JoshuaJohnson, если вас беспокоит порядок данных технических релизов, это может быть легко исправить: =LET(a,SORT(""&DROP(TOCOL('Engineering Release'!A:A,1),4)),LEN(a)-LEN(SUBSTITUTE(a,".",)))

P.b 04.09.2024 15:35

Другие вопросы по теме