Страницы: 1
RSS
Сборка готовой продукции из комплектующих, по остаткам комплектующих собираем готовую продукцию
 
Добрый день.
Уже не первый месяц перечитываю форум, по интернету ищу такую информацию. Но так и не нашел подходящего варианта.
Есть варианты списания готовой продукции и потом списания комплектующих.
Или я не правильно запрос формулирую. Так что извиняйте сразу.
А мне надо в обратно порядке.

Есть таблица с готовой продукцией: стоек (1У-А, 1У-В, 1У-С, 1У-D, 1У-Е, 1Ш-А, 1Ш-В, 1Ш-С, 1Ш-D, 1Ш-Е, 2У-А,
2У-В, 2У-С, 2У-D, 2У-Е, 2Ш-А, 2Ш-В, 2Ш-С, 2Ш-D, 2Ш-Е) состоящих из комплектующих (Рама односторонняя, Рама двухсторонняя, Перекладина узкая, Перекладина широкая, Крючок, Лоток  нижний узкий, Лоток  нижний широкий, Корзина  узкая, Корзина широкая)

Таблица снизу в файле.
Надо из таблицы по остаткам комплектующих собрать готовую продукцию. Есть нюанс, комплектующие подходя для разной готовой продукции (см. файл, лист Table 1).
И потом вывести количество готовой продукции и остаток по комплектующим, которые остались.

Спасибо заранее. Очень жду Вашей помощи.  
 
На сколько я понимаю, решается надстройкой "поиск решения", но нужен еще какой-либо параметр приоритета. (цена например). То есть если комплектующих хватает на два вида ГП, то какой из них сделать первый или второй?
Изменено: mktoll - 22.01.2016 16:07:51
 
кнопка цитирования не для ответа [МОДЕРАТОР]

Поиск решения не подходит. Так как количество остатков комплектующих постоянно меняется. И поиск решения постоянно выполнять не совсем удобно. Параметров больше нет, только количество в штуках.

Если комплектующих хватает на два вида ГП, то берем первый вид, по очереди.  
 
мне немного не понятно как построен процесс. сколько куда деталей нужно? как они распредлеляются?
 
Fomainc, насколько я понял, то в файле только справочник и остатки, а где таб. с Вашим ручным вариантом как должно быть в итоге?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
grigju, Это все есть в листе Table 1.
Вот переделал файл, с пояснениями.  
Изменено: Fomainc - 22.01.2016 17:34:54
 
Никто не сможет подсказать, хотя б с чего начать?  
 
Fomainc, обратитесь в платный раздел.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Нормально все делать макросом, но я не силен. Формулами проба для понимания идеи. Промежуточные расчеты можно сделать на доплисте (попробовал)
Изменено: Vik_tor - 16.02.2016 14:49:59 (замена файла)
 
Vik_tor, спасибо. Мне даже этого, наверное, будет достаточно. Только надо разобраться.
Подскажите, пожалуйста, на листе "Проба" по этой формуле:
Код
=ОКРВНИЗ(B3-B4*ВПР($A4;Итоговый!$A$4:$C$23;3;0);1)+0,4
Для чего в конце Вы прибавляете 0,4?
 
чтобы 0 не получался, т.к. деление на 0 будет
 
Здравствуйте! Вариант с помощью макросов и надстройки "Поиск решения".
 
наверно принцип распределение:
сначала попробовать собрать по одному всех видов(с постоянно уменьшаемся остатками), потом второй круг и т.д.
не нужно оскорблять.
 
Вот мой принцип в экселе сделал, на примере 2 циклов, но судя что у Вас там 156
циклов надо, то это уже надо макрос рисовать. если будет время попробую нарисовать.
не нужно оскорблять.
 
вот собственно результат по моему алгоритму (200 циклов)

Код
Sub СборГорок()
Dim мОстатки(1 To 9) As Long
Dim мКомплекты(1 To 20, 1 To 10) As Long
Dim а As Long, б As Long, в As Long, г As Long
Dim м As Range

'Перенос данных в массив остатки
Set м = Sheets("Комплектующие").Range("a1")

        For а = 1 To 9
            мОстатки(а) = м.Offset(а, 1)
        Next а

'Перенос  комплектов в массив
Set м = Sheets("Варианты комплектации горок").Range("A2")
    For б = 1 To 9
        For а = 1 To 20
            мКомплекты(а, б) = м.Offset(а, б)
        Next а
    Next б

Цикл1:
For а = 1 To 20
в = 1
    For б = 1 To 9 'проверка Хватает ли остатков
     If мКомплекты(а, б) <= мОстатки(б) Then в = в * 1 Else в = в * 0
     Next б
  If в = 1 Then
    мКомплекты(а, 10) = мКомплекты(а, 10) + в ' Добавляем количество комплекта
    For б = 1 To 9 ' снимаем с остатка использованное
        мОстатки(б) = мОстатки(б) - мКомплекты(а, б)
    Next б
    End If
Next а
г = г + 1
If г < 200 Then GoTo Цикл1 'Повторить 200 раз

' возврат результата на лист
Set м = Sheets("Горки").Range("a1")
For а = 1 To 20
    м.Offset(а, 1) = мКомплекты(а, 10)
Next а

' возврат остатков для проверки на лист (необезательно)
Set м = Sheets("Комплектующие").Range("a1")
For а = 1 To 9
    м.Offset(а, 2) = мОстатки(а)
Next а


End Sub

не нужно оскорблять.
 
Спасибо всем за помощь. Первый вариант мне понравился (от Vik_tor). С макросом не разобрался. Но уже нет необходимости. Я ухожу из фирмы и мои старания никому не нужны.
Еще раз огромное спасибо за помощь!!! ;)
Страницы: 1
Наверх