Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
5 / 5 / 4
Регистрация: 24.03.2010
Сообщений: 241
Записей в блоге: 1

Определение цеха-изготовителя для ТМЦ из таблицы Транспортных отношений

08.10.2013, 18:18. Показов 1146. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые!

Имеется таблица с транспортными отношениями (ТО). Например, TRPROD. В этой таблице есть поля: Материал, Исходное местоположение (ИсхМПЛ), Целевое местоположение (ЦельМПЛ).
Материалов может быть много и соответственно количество маршрутов так же очень много. В качестве местоположений служат склады и цеха в рамках предприятия\предприятий.
Транспортное отношение – это некий маршрут, по которому может двигаться материал. Например, для материала «Кронштейн» указаны следующие строки в таблице TRPROD:

Материал ИсхМПЛ ЦельМПЛ
Кронштейн 45550102 45551953
Кронштейн 45551953 45550102
Кронштейн 45550102 45559999
Кронштейн 45559999 33332053
Кронштейн 33332053 33338765
Кронштейн 33338765 22227666
Кронштейн 22227666 23002902

Местоположение 45550102 является цехом-изготовителем материала «Кронштейн». А местоположение 23002902 является покупателем данного кронштейна. Все остальные местоположения являются складами внутри организаций (первые 4 символа обозначают номер организации).
То есть, из таблицы TRPROD видно, по какому маршруту двигается деталь, пока она от момента зарождения дойдет до заказчика. При этом может быть так, что Кронштейн изготавливается в цехе 45550102 и передается на склад, а потом со склада обратно в этот же цех (45550102) и с этого цеха (без внесения конструкторских изменений в геометрию детали) передается на тот же или на другой склад.
Ребята, помогите придумать алгоритм, как определить цех-изготовитель для этого материала (будем считать, что он не известен)? То есть, указав материал мне в Label1 нужно показать цех изготовитель. При этом, не известно, какой цех-изготовитель для данной детали. Но по таблице транспортных отношений можно найти путь, откуда начинает свое движение «Кронштейн».
По какому алгоритму его вычислять. Мозг сломал, придумать не могу.

Добавлено через 6 минут
Можно использовать циклы и запросы.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2013, 18:18
Ответы с готовыми решениями:

Задача определение отношений
Определите отношение aunt(X, Y) – «X является тетей Y» через отношения parents и sister.

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

Построение сильноветвящегося дерева на основе таблицы отношений
Мое задание состоит в том, чтоби построить дерево, имея таблицу отношений родителя к потомку. Эта таблица находиться в базе данных, а...

4
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
09.10.2013, 05:58
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Можно сделать так.
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
Option Explicit
 
Private Type typeTO
    Material As String 'какой нафиг материал, кронштейн - это изделие (или фамилия)
    IshMPL As String
    ZelMPL As String
End Type
 
Const m  As Integer = 100       ' количество материалов(изделий)
Const countTO As Integer = 1000 ' количество движений(перемещений) каждого материала
Dim Mat(1 To m, 1 To countTO) As typeTO
 
Private Sub Form_Load()
     Dim S, i As Integer, j As Integer
     i = 1 'поскольку материал пока один
     S = Split(Trim(CStr(Text2.Text)), vbCrLf) 'получаем данные из текстбокса(Вы не указали откуда)
     For j = 1 To UBound(S)
         Mat(i, j).Material = Trim(CStr(Text1.Text))
         Mat(i, j).IshMPL = Split(S(j - 1))(0)
         Mat(i, j).ZelMPL = Split(S(j - 1))(1)
     Next j
End Sub
 
Private Sub Command1_Click()
     Dim S As String, i As Integer
     For i = 1 To m
         If Mat(i, 1).Material = Trim(CStr(Text3.Text)) Then
           S = Mat(i, 1).IshMPL
           Exit For
         End If
     Next i
     If S = "" Then S = " не найден."
     MsgBox "Изготовитель материала """ & Text3.Text & """ - " & S
End Sub
Миниатюры
Определение цеха-изготовителя для ТМЦ из таблицы Транспортных отношений  
0
5 / 5 / 4
Регистрация: 24.03.2010
Сообщений: 241
Записей в блоге: 1
09.10.2013, 10:55  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
Можно сделать так.
Дополнительно несколько условий:

1) Не известно сколько заведено ТО для материала
2) Будем считать, что при определении цеха-изготовителя, на начальной форме указывается сама деталь (txtMATNR) и местоположение (txtLOC) (Указывается любое МПЛ). После указания нажимается кнопка и выполняется проверка: является ли это местоположение цехом изготовителем для этой детали.
Если указанное на начальной форме МПЛ является цехом изготовителем этой (указанной на форме) детали, то в MSGBOX выводится сообщение, в котором указано местоположение, то есть для данного примера указывается цех 45550102.
Если указанное на экране МПЛ не является цехом-изготовителем детали, то в MSGBOX указывается цех-изготовитель для этой детали.

Ребята, как сделать с применением данных условий? Уже 3 часа башку ломаю

Добавлено через 10 минут
Ещё одно дополнительное условие. Данные по МПЛ считываются из базы данных Access. Таблица TRPROD
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
09.10.2013, 16:10
RCF, можно непостредственно из акса считать источник. Попробуйте функцию, которая должна дать требуемое, в предположении, что все поля текстовые. Обработку ошибок не делал...
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
Public Function findishod(nom, path, nameTbl, fldParent, fldChild, fldFilter, FilterValue)
'nom - начальное значение для поиска, например "23002902Э
'path - путь к БД, например "c:\temp\mydb.mdb"
'nameTbl - имя таблицы в БД, например "TRPROD"
'fldParent - имя поля выпускающего изделие, например "ИсхМПЛ"
'fldChild - имя поля принимающего изделие, например "ЦельМПЛ"
'fldFilter - имя поля фильтра, например "Материал"
'FilterValue - значение фильтра, например "Кронштейн"
    Dim k, s
    Dim rst As Object, cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Mode=Share Deny None;Persist Security Info=False"
    Set rst = CreateObject("ADODB.Recordset")
    rst.Open "select * from [" & nameTbl & "] where [" & fldFilter & "]='" & FilterValue & "'", _
         cn, adOpenDynamic
        
    k = nom
    With rst
    .MoveFirst
    While True
        .MoveFirst
        .Find fldChild & "='" & k & "'"
        If .EOF Then
            .MoveFirst
            .Find fldParent & "='" & k & "'"
            If Not .EOF Then
                MsgBox "Find " & .Fields(fldParent)
                findishod = .Fields(fldParent)
                Exit Function
            End If
        Else
            k = .Fields(fldParent)
        End If
    Wend
    End With
End Function
0
5 / 5 / 4
Регистрация: 24.03.2010
Сообщений: 241
Записей в блоге: 1
22.10.2013, 17:57  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Попробуйте функцию
Уважаемый mobile!

Как в итоге вызвать эту функцию при нажатии на кнопку? У меня формируется ошибка.

вот код:

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
Public Function findishod(fldParent, fldFilter)
 
    Dim k, s
'    Dim rst As Object, cn As Object
'    Set cn = CreateObject("ADODB.Connection")
'    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & path & ";Mode=Share Deny None;Persist Security Info=False"
'    Set rst = CreateObject("ADODB.Recordset")
'    rst.Open "select * from [" & nameTbl & "] where [" & fldFilter & "]='" & FilterValue & "'", _
'         cn, adOpenDynamic
        
    k = txtMPL.Text
    With Data1.Recordset
    .MoveFirst
    While True
        .MoveFirst
        .Find fldChild & "='" & k & "'"
        If .EOF Then
            .MoveFirst
            .Find fldParent & "='" & k & "'"
            If Not .EOF Then
                MsgBox "Find " & .Fields(fldParent)
                findishod = .Fields(fldParent)
                Exit Function
            End If
        Else
            k = .Fields(fldParent)
        End If
    Wend
    End With
End Function
 
Private Sub Command1_Click()
MsgBox findishod(txtMPL.Text, txtMATNR.Text)
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2013, 17:57
Помогаю со студенческими работами здесь

Как изменить отчет для остатков ТМЦ?
Здравствуйте! Помогите, пожалуйста! Есть отчет: ОстаткиТМЦ, там выбираешь фирму, склад, остатки товара можно выбрать либо включая резерв,...

Как изменить отчет для остатков ТМЦ?
Здравствуйте! Помогите, пожалуйста! Есть отчет: ОстаткиТМЦ, там выбираешь фирму, склад, остатки товара можно выбрать либо включая резерв,...

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

Формула для расчета транспортных затрат
Требуется рассчитать правильно транспортные затраты от склада А до склада А через промежуточные точки разгрузки: От Склада А до 1ТТ – 10...

Программа для решения транспортных задач
Помогите плиз умоляю, ребята. Составить программу решающую подобные задачи. Единственное условие: Выбор столбцов и строк в массивах...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru