![]() |
|
ERP Пооперационный план | ☑ | ||
---|---|---|---|---|
0
xraf
24.06.19
✎
10:59
|
Обработка ПооперационноеПланирование2_2.
Суть в том, что выгребаются все Этапы к выполнению, дальше по их маршрутным картам строится Пооперационное расписание исходя из загрузки РЦ. И есть там процедура такая: Функция ИнтервалПригоденДляРазмещенияОперации(ПараметрыПланирования, ДоступныйИнтервал, ПараметрыПодбора) Результат = Истина; ВыполнениеПрерывается = ДоступныйИнтервал.Время < ПараметрыПодбора.ВремяПлан; Если ВыполнениеПрерывается Тогда Если ДоступныйИнтервал.Время < МинимальноеВремяОперации() Тогда Результат = Ложь; ИначеЕсли СледующийИнтервалЗагружен(ПараметрыПланирования, ПараметрыПодбора, ДоступныйИнтервал) Тогда Результат = Ложь; КонецЕсли; КонецЕсли; ИнтервалЗагруженСинхронно = ДоступныйИнтервалЗагруженСинхронно(ДоступныйИнтервал); Если ИнтервалЗагруженСинхронно И Не ДоступныйИнтервал.Время = ПараметрыПодбора.ВремяПлан + ВремяПереналадкиОперации(ПараметрыПланирования, ДоступныйИнтервал, ПараметрыПодбора.Операция) Тогда Результат = Ложь; ИначеЕсли ПараметрыПодбора.ПараллельнаяЗагрузка И ЗначениеЗаполнено(ДоступныйИнтервал.ВариантНаладки) И Не ПараметрыПодбора.ВариантНаладки = ДоступныйИнтервал.ВариантНаладки Тогда Результат = Ложь; ИначеЕсли ПараметрыПодбора.ПараллельнаяЗагрузка И ПараметрыПодбора.ЗагрузкаКратность > ДоступныйИнтервал.ДоступнаяЗагрузка И ПараметрыПодбора.ЗагрузкаКратность <= ПараметрыПодбора.МаксимальнаяЗагрузка Тогда Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции |
|||
1
xraf
24.06.19
✎
11:00
|
То есть функция, она возращает Истину в ошибочном случае, когда время Наладки сопоставима со временем операции
|
|||
2
Вафель
24.06.19
✎
11:00
|
напиши в 1с
|
|||
3
Вафель
24.06.19
✎
11:01
|
только не забудь демо пример подготовить
|
|||
4
xraf
24.06.19
✎
11:04
|
(2) возможно я не до конца понял вот это :
ИнтервалЗагруженСинхронно = ДоступныйИнтервалЗагруженСинхронно(ДоступныйИнтервал); Функция ДоступныйИнтервалЗагруженСинхронно(ДоступныйИнтервал) Если ДоступныйИнтервал.СинхроннаяЗагрузка Тогда Результат = Не ДоступныйИнтервал.ДоступнаяЗагрузка = ДоступныйИнтервал.МаксимальнаяЗагрузка; Иначе Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции Если бы это сработало, тогда будет проверятся время с учетом наладки : ПараметрыПодбора.ВремяПлан + ВремяПереналадкиОперации(ПараметрыПланирования, ДоступныйИнтервал, ПараметрыПодбора.Операция) |
|||
5
xraf
24.06.19
✎
11:06
|
Хотя нет
СвободноеВремя.РабочийЦентр.ВидРабочегоЦентра.ВариантЗагрузки = ЗНАЧЕНИЕ(Перечисление.ВариантыЗагрузкиРабочихЦентров.Синхронный) |
|||
6
xraf
24.06.19
✎
11:08
|
Для примера, пусть время операции 30 минут, наладка 40 минут.
На РЦ свободен час. Тогда ДоступныйИнтервал.Время = 60, ПараметрыПодбора.ВремяПлан = 30. ВыполнениеПрерывается тогда Ложь. ИнтервалЗагруженСинхронно Ложь, так как РЦ не синхронный, это станок. Ну и дальше соотвественно Возврат Истина. Все ведь так? |
|||
7
xraf
24.06.19
✎
11:28
|
И вот тут нет наладки
Процедура РассчитатьГраницыИнтервалаРазмещенияОперации(ПараметрыПодбора, ИнтервалРазмещения) ДоступныйИнтервал = ПараметрыПодбора.ДоступныйИнтервал; МоментРазмещения = ПараметрыПодбора.МоментРазмещения; ВремяПлан = ПараметрыПодбора.ВремяПлан; ПрямоеРазмещение = ПараметрыПодбора.ПрямоеРазмещение; // Первая граница (левая при прямом, правая при обратном размещении). Если ПрямоеРазмещение Тогда ИнтервалРазмещения.Начало = Макс(ДоступныйИнтервал.Начало, МоментРазмещения); Иначе ИнтервалРазмещения.Окончание = Мин(ДоступныйИнтервал.Окончание, МоментРазмещения); КонецЕсли; Если ИнтервалРазмещения.Начало < ИнтервалРазмещения.Окончание Тогда // Вторая граница (правая при прямом, левая при обратном размещении). ВремяИнтервала = ИнтервалРазмещения.Окончание - ИнтервалРазмещения.Начало; Если ВремяИнтервала > ВремяПлан Тогда ВремяИнтервала = ВремяПлан; Если ПрямоеРазмещение Тогда ИнтервалРазмещения.Окончание = ИнтервалРазмещения.Начало + ВремяИнтервала; Иначе ИнтервалРазмещения.Начало = ИнтервалРазмещения.Окончание - ВремяИнтервала; КонецЕсли; КонецЕсли; ИнтервалРазмещения.ВремяПлан = ВремяИнтервала; ИнтервалЗагруженСинхронно = ДоступныйИнтервалЗагруженСинхронно(ДоступныйИнтервал); Если ИнтервалЗагруженСинхронно И (Не ДоступныйИнтервал.Начало = ИнтервалРазмещения.Начало Или Не ДоступныйИнтервал.Окончание = ИнтервалРазмещения.Окончание) Тогда ИнтервалРазмещения = Неопределено; КонецЕсли; Иначе ИнтервалРазмещения = Неопределено; КонецЕсли; КонецПроцедуры |
|||
8
xraf
24.06.19
✎
11:45
|
Шухард спит
|
|||
9
xraf
24.06.19
✎
13:28
|
Но, если отталкиваться от мысли, что работу можно начать сейчас, и перенести остаток на другой день, тогда вроде все Ок )
|
|||
10
xraf
24.06.19
✎
13:31
|
Шухард, ты где, блин
|
|||
11
xraf
24.06.19
✎
15:12
|
up
|
|||
12
xraf
24.06.19
✎
15:38
|
ПриоритетыЭтапов и РангиРабочихЦентров. Похоже что дело в этом.
|
|||
13
xraf
25.06.19
✎
11:14
|
up
давайте поговорим про MES |
|||
14
xraf
25.06.19
✎
11:43
|
ДоступныйИнтервал.Время
и ПараметрыПланирования.ЗанятоеВремяПоСменам не состыковываются |
|||
15
shuhard
25.06.19
✎
14:06
|
(13)[давайте поговорим про MES]
отказано |
|||
16
Dmitry1c
25.06.19
✎
14:11
|
Мне кажется нужно отдельный раздел на мисте завести "Вопросы Шухарду"
|
|||
17
shuhard
25.06.19
✎
14:26
|
(16) не потянет бюджет Волшебника такие разделы,
была уже попытка собрать компетенции и монетизировать - загнулась |
|||
18
Buster007
25.06.19
✎
14:27
|
у тебя хорошо получается самостоятельная работа. Продолжай и все получится ;)
|
|||
19
xraf
25.06.19
✎
15:52
|
(15) а причина?
|
|||
20
xraf
25.06.19
✎
15:56
|
Смотри как:
Пока ПараметрыПодбора.ВремяПлан > 0 Цикл Отказ = Ложь; ПодобратьДоступныйДляРазмещенияИнтервал(ПараметрыПланирования, ПараметрыПодбора, Результат, Отказ); Если Отказ Тогда Возврат Неопределено; КонецЕсли; ОпределитьИнтервалРазмещения(ПараметрыПланирования, ПараметрыПодбора, Результат, Отказ); Если Отказ Тогда Продолжить; КонецЕсли; ОпределитьИнтервалРазмещенияВспомогательных(ПараметрыПланирования, ПараметрыПодбора, Результат, Отказ); Если Отказ Тогда Продолжить; КонецЕсли; СохранитьИнтервалРазмещения(ПараметрыПланирования, ПараметрыПодбора, Результат); КонецЦикла; |
|||
21
xraf
25.06.19
✎
15:56
|
важные 1, 2 и 4
|
|||
22
xraf
25.06.19
✎
16:06
|
на 1 шаге анализируется ПараметрыПланирования.ДоступноеВремя
но не анализируется ПараметрыПланирования.ЗанятоеВремяПоСменам Притом если взять такой пример: Есть станок Есть куча этапов с разными приоритетами, пусть их 100 (50 срочных, 20 средних, 30 низкий приоритет) На верхнем уровне этапы все распланировались. Теперь планируем операции. Пусть будет 30 дней. Пусть операция Фрезеровка. и есть наладка фрезы - долгая операция. На 1 прогоне планировании 50 срочных раскидались на 30 дней. то есть от некоторых из 30 дней откусились части. Второй прогон средних 20 этапов. Опять от 30 дней откусились части. Перед третим прогоном последних 30 этапов картина такая, что да, есть 30 рабочих дней, но в каждом из них свободный остаток то 2часа, то час, то 3 часа. скажем одному из этих последних этапов нужно 1.5 часа и 2 часа наладки. система подберет на 1.5 часа окно в 2 часа, а потом уже при занятии этого интервала проверит, что не хватает на наладку, и посмотрит сосодний день, а он тоже откушен, соотвественно утром завтра уже не получится продолжить работу. Интервал отброшен. И так и будет цикл продолжаться. Интервал подобран, интервал пытается быть занятым, интервал отброшен. |
|||
23
Вафель
25.06.19
✎
16:20
|
(22) подготовь уже демо пример и напиши в 1с
|
|||
24
xraf
25.06.19
✎
16:26
|
(23) и каждый раз тыкать их в нее? )
|
|||
25
Вафель
25.06.19
✎
16:30
|
(24) они тебе скажут что не так, или что так и должно быть.
тогда будешь пилить ну или бросишь затею |
|||
26
Вафель
25.06.19
✎
16:34
|
по ерп, если демо пример есть, отвечают всегда
|
|||
27
xraf
26.06.19
✎
10:40
|
Меня пока интересует были ли у других форумчан аналогичные загвоздки
|
|||
28
xraf
26.06.19
✎
11:29
|
Никто тут с mes не работает, да? Мне к Мироненко идти на поклон? )
|
|||
29
rsv
26.06.19
✎
11:36
|
(0) лучше о проводках
|
|||
30
shuhard
26.06.19
✎
12:08
|
(28) зевая
ну ты халявки хотел - получил |
|||
31
xraf
26.06.19
✎
12:35
|
(30)
Т.е. этот форум предполагает получение ответов за деньги? |
|||
32
xraf
29.06.19
✎
16:00
|
Процедура РассчитатьПриоритетЭтапов(Этапы)
КолЭтапов = Этапы.Количество(); Если КолЭтапов > 0 Тогда КолПартий = Окр(Log(КолЭтапов)); КолПартий = ?(КолПартий > 0, КолПартий, 1); Иначе КолПартий = 1; КонецЕсли; РазмерПартии = Окр(КолЭтапов/КолПартий); СчЭтапов = 0; НомерПартии = 1; Для Каждого Строка Из Этапы Цикл Строка.Приоритет = НомерПартии; СчЭтапов = СчЭтапов + 1; Если СчЭтапов = РазмерПартии Тогда СчЭтапов = 0; НомерПартии = НомерПартии + 1; КонецЕсли; КонецЦикла; КонецПроцедуры Еще одно непонятное место ) |
|||
33
xraf
29.06.19
✎
16:04
|
Оказывается было еще вот
Процедура РассчитатКатегориюИНапряженностьЭтапов(Знач ПараметрыПланирования, Этапы) Для Каждого Строка Из Этапы Цикл Если Строка.Окончание <= ПараметрыПланирования.МоментПланирования Тогда Строка.Категория = 1; Строка.Напряженность = ПараметрыПланирования.МоментПланирования - Строка.Окончание; ИначеЕсли Строка.Начало < ПараметрыПланирования.МоментПланирования Тогда Строка.Категория = 2; ОстатокОпераций = ВремяНеразмещенныхОперацийЭтапа(ПараметрыПланирования, Строка.Этап); ОстатокВремени = Строка.Окончание - ПараметрыПланирования.МоментПланирования; Строка.Напряженность = ОстатокОпераций / ОстатокВремени; Иначе Строка.Категория = 3; Строка.Напряженность = 0; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
34
xraf
29.06.19
✎
16:04
|
И вот
Этапы.Сортировать("Категория Возр, Напряженность Убыв, Начало Возр, РаспоряжениеПриоритет Возр"); |
|||
35
xraf
29.06.19
✎
16:12
|
Разбили этапы по приоритетам,
и сложность размещения следующей партии возрастает экспоненциально? Поэтому логарифм? |
|||
36
Krendel
29.06.19
✎
17:10
|
(31) Этот форум предполагает наличие желания разбираться с проблемой, в случае МЕС желания такого обычно ни у кого не возникает
|
|||
37
xraf
30.06.19
✎
00:30
|
(36) странные люди
для чего нужна ерп если не для мес |
|||
38
xraf
30.06.19
✎
00:31
|
Бухучёт на ура можно и в бп вести
|
|||
39
Фрэнки
30.06.19
✎
08:29
|
(37) работа с серьезным внедрением предполагает серьезные деньги за высокие нагрузки по времени. Весьма очевидно, что реально загруженные работой спецы на мисту пишут реже. Тем более, когда задаются именно требующие разбирательства вопросы, а не тяп-ляп какое-то, грубо говоря.
|
|||
40
xraf
30.06.19
✎
11:59
|
(39) Да я не искал помощи, я просто хотел найти с кем можно разбирать и обсуждать.
Так как работаю один и поговорить элементарно не с кем. Разобрать алгоритм из 30 процедур это не сложно. Интереснее понять замысел почему разрабы выбрали именно этот путь. Тут ведь как раз не учётная задача, которая жестко регламентируется законами, а задача выбора оптимальной программы производства. Продолжу свои изыскания дальше :) |
|||
41
xraf
28.07.19
✎
19:17
|
В РН ДоступностьВидовРабочихЦентров в процедуре ПроверитьЗагрузкаНеПревышаетДоступностьГрафика не предусмотрели, что Начатые этапы, не должны вытесняться
ВЫБРАТЬ | Доступность.ВидРабочегоЦентра КАК ВидРабочегоЦентра, | Доступность.ДатаИнтервала КАК ДатаИнтервала, | Доступность.Регистратор КАК Регистратор, | ВЫБОР | КОГДА Доступность.ВидРабочегоЦентра.ВводитьДоступностьДляВидаРЦ | ТОГДА Доступность.ДоступностьПоВидуРЦ | ИНАЧЕ Доступность.ДоступностьПоРЦ | КОНЕЦ КАК Доступность, | 0 КАК Загрузка | ИЗ | РегистрНакопления.ДоступностьВидовРабочихЦентров КАК Доступность | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИнтервалы КАК ВТИнтервалы | ПО Доступность.ВидРабочегоЦентра = ВТИнтервалы.ВидРабочегоЦентра | И Доступность.ДатаИнтервала = ВТИнтервалы.ДатаИнтервала | ГДЕ | Доступность.ЭтоДвижениеВводаДоступности | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Доступность.ВидРабочегоЦентра, | Доступность.ДатаИнтервала, | Доступность.Регистратор, | 0, | Доступность.Занято | ИЗ | РегистрНакопления.ДоступностьВидовРабочихЦентров КАК Доступность | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИнтервалы КАК ВТИнтервалы | ПО Доступность.ВидРабочегоЦентра = ВТИнтервалы.ВидРабочегоЦентра | И Доступность.ДатаИнтервала = ВТИнтервалы.ДатаИнтервала | ГДЕ | Доступность.Регистратор ССЫЛКА Документ.ЭтапПроизводства2_2 | И ВЫРАЗИТЬ(Доступность.Регистратор КАК Документ.ЭтапПроизводства2_2).Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЭтаповПроизводства2_2.Завершен) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Доступность.ВидРабочегоЦентра, | Доступность.ДатаИнтервала, | Доступность.Регистратор, | 0, | Доступность.Занято | ИЗ | РегистрНакопления.ДоступностьВидовРабочихЦентров КАК Доступность | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИнтервалы КАК ВТИнтервалы | ПО Доступность.ВидРабочегоЦентра = ВТИнтервалы.ВидРабочегоЦентра | И Доступность.ДатаИнтервала = ВТИнтервалы.ДатаИнтервала | ГДЕ | Доступность.Регистратор ССЫЛКА Документ.ЗаказНаПроизводство | И ВЫРАЗИТЬ(Доступность.Регистратор КАК Документ.ЗаказНаПроизводство).Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовНаПроизводство.Закрыт) |
|||
42
xraf
28.07.19
✎
19:21
|
Получается, что или Заказ Закрыт или Этап Завершен указывает на Занятость интервала,
а что этап Начат нет, отсюда получается что Начатые этапы попадают в РегистрыСведений.ЗаданияКРасчетуГрафикаПроизводства.ДобавитьЗадания(Этапы) из которого они никогда не удалятся, так как в самом этапе: // Возвращает статусы документа, находясь в которых он может быть запланирован в графике производства. // // Возвращаемое значение: // Массив - массив статусов документа. // Функция СтатусыЭтапМожетБытьЗапланирован() Экспорт Результат = Новый Массив; Результат.Добавить(Перечисления.СтатусыЭтаповПроизводства2_2.Формируется); Результат.Добавить(Перечисления.СтатусыЭтаповПроизводства2_2.Сформирован); Результат.Добавить(Перечисления.СтатусыЭтаповПроизводства2_2.КВыполнению); Возврат Результат; КонецФункции |
|||
43
xraf
28.07.19
✎
19:22
|
доколе? :)
|
|||
44
PiotrLoginov
28.07.19
✎
22:28
|
что "доколе"?
доколе мы будем находить ошибки в типовых? какое-то количество ошибок будет всегда. не ошибается только тот, кто ничего не делает. |
|||
45
xraf
28.07.19
✎
23:12
|
(44) Разрабы ерп не дают расслабиться, постоянно держат в тонусе, приходится не только свои ошибки дебажить, но ещё их тоже
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |