Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.07.2022
Сообщений: 8

Расчет количества деталей в сборочной единице

31.03.2025, 22:37. Показов 2825. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу прощения за, возможно, простой вопрос, не являюсь специалистом по СУБД, а являюсь простым инженером.
Возникла потребность в создании БД изделия.
Суть задачи такая: имеется "Изделия" с элементами - обозначениями изделий. Таблица связана 1 к 1 с таблицей "Сборочные единицы", в которой определены те изделия, которые являются сборочными единицами (комплектами). Так же таблица "Изделия" связана с таблицей "Детали", в которой определены изделия, являющиеся деталями (неделимыми). Создана таблица "Ведомость изготовления" в которой первый столбец Изделия связан 1 ко многим с таблицей "Изделия", второй столбец Входимость связан 1 ко многим с таблицей "Сборочные единицы" и третий столбец - Количество.
Требуется сформировать такой запрос, который бы смог бы извлечь из "Ведомости изготовления" необходимое число "Деталей" для её изготовления.

Например, в таблице "Изделия" определены изделия А, Б, В, Г, Д. Сборочными единицами являются изделия А, Б, В. Деталями являются изделия Г, Д.

Ведомостью изготовления определено, что изделие А состоит из двух изделий Б, одного В и одного Г. В то же время изделие Б состоит из одного изделия В, одного Г и одного Д. В то же время изделие В состоит из двух изделий Г и одного Д.

В ответ на запрос о номенклатуре деталей в изделии А должен сформироваться ответ: в изделии А 7 деталей Г и 3 детали Д.

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

Подскажите, пожалуйста!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2025, 22:37
Ответы с готовыми решениями:

Получить номера деталей, поставляемых для лондонских проектов (2 сп-ба). Получить номера деталей, поставляемых для проек
Получить номера деталей, поставляемых для лондонских проектов (2 сп-ба). Получить номера деталей, поставляемых для проекта в Лондоне. ...

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

Структура БД "Детали и сборочные единицы"
Добрый вечер. Задача: Составить базу деталей и сборочных единиц. Описание: В сборочную единицу могут входить как детали так и сами...

8
Эксперт MS Access
 Аватар для Eugene-LS
11756 / 5818 / 1490
Регистрация: 05.10.2016
Сообщений: 16,390
01.04.2025, 00:34
Цитата Сообщение от SchProT Посмотреть сообщение
сформировать такой запрос
Пример БД к вопросу прицепить никак?!
И схема данных странная, по моему (картинка ниже).
Миниатюры
Расчет количества деталей в сборочной единице  
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,375
01.04.2025, 02:19
Цитата Сообщение от SchProT Посмотреть сообщение
не являюсь специалистом по СУБД, а являюсь простым инженером.
А простой инженер разве не читает документацию прежде, чем приступает к работе с новым оборудованием?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12216 / 5059 / 812
Регистрация: 07.08.2010
Сообщений: 14,917
Записей в блоге: 4
01.04.2025, 06:31
Лучший ответ Сообщение было отмечено SchProT как решение

Решение

Цитата Сообщение от SchProT Посмотреть сообщение
Возникла потребность в создании БД изделия.
Суть задачи такая:
-имеется "Изделия" с элементами - обозначениями изделий.
-Таблица связана 1 к 1 с таблицей "Сборочные единицы", в которой определены те изделия, которые являются сборочными единицами (комплектами).
-Так же таблица "Изделия" связана с таблицей "Детали", в которой определены изделия, являющиеся деталями (неделимыми).
-Создана таблица "Ведомость изготовления" в которой первый столбец Изделия связан 1 ко многим с таблицей "Изделия", второй столбец Входимость связан 1 ко многим с таблицей "Сборочные единицы" и третий столбец - Количество.
задача Состав изделия много лет была моей основной задачей

основные таблицы
- наименования деталей/сборок(код, гравировка, наименование....)
- входимость(код, деталь куда, деталь что, сколько)

одна деталь/сборка может входить несколько раз в изделие, во многие изделия, уровней вхождения до 15-17
у меня одна из деталей входила в 800+ сборок 200+ изделий

для удобства работы создавалась рабочая таблица комплектация_на_изделие
-код,
-код_изделия,
-код_детали,
-комплектация- дробное поле, на изделие может относится к примеру 1/2 или 1/4 ящика или 1/8
2
Эксперт MS Access
 Аватар для Eugene-LS
11756 / 5818 / 1490
Регистрация: 05.10.2016
Сообщений: 16,390
01.04.2025, 09:19
Цитата Сообщение от shanemac51 Посмотреть сообщение
- Таблица "Входимость" (код, деталь куда, деталь что, сколько)
Дополню:
Поле: "деталь куда" связано без поддержки целостности данных, в отличии от "деталь что".

Добавлено через 1 минуту
SchProT, настоятельно рекомендую вам прислушаться к мнению ув. shanemac51, из пост #4.
0
133 / 57 / 2
Регистрация: 23.11.2024
Сообщений: 685
01.04.2025, 11:07
Цитата Сообщение от shanemac51 Посмотреть сообщение
создавалась
Ну вот топикстартер и спрашивает - как такая кеширующая таблица создавалась?
Она создавалась кодом на языке высокого уровня на сервере приложений, через вытаскивание данных из основных таблиц, агрегацию и вставку в эту вспомогательную, либо без передачи данных по сети между сервером базы данных и сервером приложений, сразу кодом внутри СУБД.

LLM пишет: «материализованные представления (materialized views) позволят вам выполнять агрегацию и кэшировать результаты непосредственно в базе данных, не вытаскивая данные на сервер приложений»
«Чтобы реализовать рекурсивный подсчет деталей в PostgreSQL, можно использовать рекурсивные CTE (Common Table Expressions)

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CREATE MATERIALIZED VIEW product_parts_count AS
WITH RECURSIVE part_hierarchy AS (
    SELECT 
        p.id AS product_id,
        p.name AS product_name,
        1 AS level
    FROM 
        products p
    UNION ALL
    SELECT 
        p.id AS product_id,
        ph.product_name,
        ph.level + 1
    FROM 
        parts pt
    JOIN 
        part_hierarchy ph ON pt.part_id = ph.product_id
    JOIN 
        products p ON pt.product_id = p.id
)
SELECT 
    product_id,
    product_name,
    COUNT(*) AS parts_count
FROM 
    part_hierarchy
GROUP BY 
    product_id, product_name;
Код этот я не проверял, но подписался на тему и слежу за успехами топикстартера

См. также
https://habr.com/ru/articles/269497/


Цитата Сообщение от alvk Посмотреть сообщение
простой инженер разве не читает документацию прежде, чем приступает к работе с новым оборудованием?
А чем это инженеру поможет, если оборудование просто не умеет делать то, что нужно?
Там тогда в документации нужного не будет написано.

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

LLM пишет: «SQL в Access не поддерживает ни циклы, ни рекурсию»
«Язык запросов Microsoft Access, известный как SQL для Access (или Jet SQL), не является тьюринг-полным.»

LLM пишет:
«вы можете создать кеширующую таблицу, используя VBA для рекурсивного обхода и заполнения таблицы»
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sub PopulateProductPartsCount()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim productId As Long
    Dim partsCount As Long
    
    Set db = CurrentDb()
    
    ' Удаляем старые данные из кеширующей таблицы
    DoCmd.RunSQL "DELETE FROM ProductPartsCount"
    
    ' Получаем все изделия
    Set rs = db.OpenRecordset("SELECT ProductID FROM Products")
    
    Do While Not rs.EOF
        productId = rs!ProductID
        partsCount = GetPartsCount(productId)
        
        ' Вставляем результат в кеширующую таблицу
        DoCmd.RunSQL "INSERT INTO ProductPartsCount (ProductID, PartsCount) VALUES (" & productId & ", " & partsCount & ")"
        
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub
 
Function GetPartsCount(productId As Long) As Long
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim count As Long
    
    Set db = CurrentDb()
    
    ' Считаем количество деталей для данного изделия
    Set rs = db.OpenRecordset("SELECT COUNT(*) AS PartCount FROM Parts WHERE ProductID = " & productId)
    
    If Not rs.EOF Then
        count = rs!PartCount
    End If
    
    rs.Close
    
    ' Рекурсивно считаем детали для каждой детали
    Set rs = db.OpenRecordset("SELECT PartIDDetail FROM Parts WHERE ProductID = " & productId)
    Do While Not rs.EOF
        count = count + GetPartsCount(rs!PartIDDetail)
        rs.MoveNext
    Loop
    
    rs.Close
    GetPartsCount = count
End Function
Цитата Сообщение от SchProT Посмотреть сообщение
не могу понять, как без кода на Visual Basic сформировать такой запрос. Число уровней может быть любым, запрос должен быть универсальным.
Нормально, что не получается. Этого сделать нельзя никак.

Мне за этот пост поставили -70 ("Опять про PostgreSQL в разделе MS Access "). Верно ли было бы создать новую тему в разделе postgres и дать на неё ссылку отсюда? Или там бы заминусовали за Access в разделе postgres ? Мне очень хочется блог попробовать, но что-то я делаю не так.
1
1312 / 526 / 112
Регистрация: 29.03.2016
Сообщений: 1,283
01.04.2025, 16:14
Цитата Сообщение от Tupiel Reuschin Посмотреть сообщение
Мне за этот пост поставили -70
Возможно, не за PostgreSQL, а за "LLM пишет"?
Или "по совокупности".
0
 Аватар для Silur
1366 / 286 / 16
Регистрация: 16.01.2014
Сообщений: 897
01.04.2025, 16:55
Что-то Вы не туда углубились.

Когда я работал конструктором на заводе, а это было давно, у нас была система, в которую загоняли спецификации. Спецификации шли на сборочные единицы, блоки, узлы и само изделие.
Каждое изделие, начиная от простой детали и до завершающего изделия имело свой код.
Например
АВС1.000.000 - Буквы - это шифр предприятия, следующая цифра - это уровень изделия
1, 2, 3 - законченные изделия, блоки, узлы
4, 5, 6 - сборочные единицы
7, 8, 9 - простые детали

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

Продолжу описание позже. Выгоняют с рабочего места.
0
 Аватар для Silur
1366 / 286 / 16
Регистрация: 16.01.2014
Сообщений: 897
01.04.2025, 22:23
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Цитата Сообщение от Silur Посмотреть сообщение
Продолжу описание позже. Выгоняют с рабочего места.
Данные вносились по спецификации. Причём вносились все позиции: документы, сборки, детали, Покупные изделия, метизы, материалы...
На основе этой информации получали ПО - производственную опись, ВП - ведомость покупных, ВД - ведомость документов, и ещё что-то, не помню уже. Вроде ведомости материалов, список метизов, технологические карты.

Программа крутилась на ЕС ЭВМ и была написана на коболе (кажется).
Я эту программу не писал, я её тестировал и плотно общался с разработчиками

Добавлено через 18 минут
создавалась таблица из 3 столбцов
код узла (сборки), код входящей детали (сборки), количество
Считалась опись так. Брался верхний узел и заносился в таблицу, так же 3 столбца потом проходились по таблице и создавали список сборочных узлов. В эту же таблицу теперь загоняли описание сборочных узлов, заново проходились по таблице и составляли список новых сборочных узлов и теперь их заносили в таблицу. и так до тех пор, пока сборки не кончались. Не забывая при этом о количестве.
А уж из этой большой таблицы делали документы как на всё изделие, так и на отдельные блоки
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2025, 22:23
Помогаю со студенческими работами здесь

БД "Автосервис". Запрос для расчета общей суммы стоимостей услуг и деталей
Есть база данных автосервис, в таблице заказ есть поле "общ стоимость", в нем должна выводиться сумма стоимостей услуг и деталей....

Нужно вывести номер детали, количество деталей, количество умноженное на вес
Есть 2 таблицы детали и поставки. Нужно вывести номер детали, количество деталей, количество умноженное на вес Create table . ...

Запрос, выводящий количество проектов для каждой детали
Есть база данных.. Нужно создать запрос: Что выводит количество проектов для каждой детали, получить название детали цвет, вес фамилия...

Выдать номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью P1 в количестве, б
Всем привет! Суть в следующем: есть 4 таблицы поставщики S S1 Смит 20 Лондон S2 Джонс 10 Париж S3 Блейк 30 Париж S4 Кларк 20...

Запросы Определить:общее количество деталей
Определить:общее количество деталей, собранных сборщиками цеха; фамилию сборщика, собравшего наибольшее число изделий, и определить день,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru