Имя: Пароль:
1C
 
Выбор оптимальной ячейки
🠗 (Волшебник 22.03.2024 13:11)
0 DeadFlowers
 
22.03.24
09:23
Задание: есть склад, в котором заказы хранятся в ячейках. Заказы могут быть "маленькими" и "обычными" (т.е. в 1 ячейку можно поместить 2 маленьких заказа или 1 обычный).
Необходимо, чтобы система автоматически выбирала ячейку в зависимости от типа заказа. Если заказ обычный то тут все понятно, но вот с маленькими проблема.


Мне нужен запрос, который бы подобрал оптимальную ячейку для маленького заказа (то есть, чтобы система отсеяла все занятые ячейки (т.е. в которых либо 2 маленьких либо 1 обычны
1 DeadFlowers
 
22.03.24
09:23
(0) обычный заказ. А выбрала либо ячейку с 1 маленьким заказом, либо пустую.
2 DeadFlowers
 
22.03.24
09:27
(0) p.s.
ячейки хранятся в справочнике, а хранящиеся заказы в регистре сведений (в регистре реквизит ячейка со ссылочным типом на 1)
3 Волшебник
 
22.03.24
09:28
используйте СКД
4 Волшебник
 
22.03.24
10:12
Предлагаю Вам решить другую задачу:

Есть большой склад с ячейками, стеллажами, проходами. Компьютер знает карту склада.
Есть товары с количеством и с привязкой к ячейкам.
Есть задания на комплектацию заказов и пучок кладовщиков.
Нужно сгруппировать задания по кладовщикам и рейсам следующим образом:
1. Каждому кладовщику в рейс предписывается взять разноцветные корзины (цвета не должны пересекаться в рамках рейса) для комплектации N заказов, например, сразу 4 заказов.
2. Система строит оптимальный маршрут по складу, чтобы обойти все требуемые ячейки и набрать нужное количество товара для каждого заказа (в каждую корзину).
3. Кладовщик начинает рейс и идёт по маршруту, отмечая по пути, что он взял, а что не удалось собрать (временно пропускаем или выдаём адрес ближайшей ячейки, где товар должен быть)
4. Рейс заканчивается, собрано N заказов, они идут далее на отгрузку.

Учесть, что после начала рейса товара в ячейке может не хватить для другого рейса, т.е. должно быть резервирование на рейс, если его не было под заказ.
5 Ненавижу 1С
 
гуру
22.03.24
10:17
(0) запрос: выбрать ячейки и количество по большим и маленьким заказам в них. Сгруппируйте по ячейкам с условием, что количество больших равно 0 и количество маленьких меньше 2
6 Волшебник
 
22.03.24
10:21
(4) ах, да... Всё надо сделать одним отчетом на СКД

(5) А Вы скучны
7 shuhard
 
22.03.24
10:26
(0) class Склад:
    def __init__(self):
        self.ячейки = {'маленькие': [], 'обычные': []}

    def добавить_заказ(self, тип_заказа):
        if тип_заказа == 'маленький':
            self.ячейки['маленькие'].append(тип_заказа)
        elif тип_заказа == 'обычный':
            self.ячейки['обычные'].append(тип_заказа)

    def выбрать_ячейку(self, тип_заказа):
        if тип_заказа == 'маленький' and len(self.ячейки['маленькие']) > 0:
            return 'Выбрана ячейка для маленького заказа'
        elif тип_заказа == 'обычный' and len(self.ячейки['обычные']) > 0:
            return 'Выбрана ячейка для обычного заказа'
        else:
            return 'Нет подходящих ячеек для данного типа заказа'

# Пример использования
склад = Склад()
склад.добавить_заказ('маленький')
склад.добавить_заказ('обычный')

print(склад.выбрать_ячейку('маленький'))
print(склад.выбрать_ячейку('обычный'))
Это простой пример, который можно доработать и оптимизировать в соответствии с более конкретными требованиями вашей системы складского управления.
8 Кондер
 
22.03.24
10:27
Я бы вообще начал с приоритета размещения у ячеек. Ячейки должны иметь оптимальный маршрут обхода при размещении товара и его отборе
9 DeadFlowers
 
22.03.24
10:29
(6) Мне нужен не отчет, мне нужен именно запрос, тк ячейка это поле формы и у меня есть кнопка оптмимальный подбор
10 АгентБезопасной Нацио
 
22.03.24
10:33
(4) Не указана "грузоподъемность кладовщика"
(6) для дополнительного веселья:
5. Заказы собирать в порядке планового времени убытия машин в рейсы.
6. при этом заказы рейса собирать в порядке загрузки в машину
7. порядок загрузке обратен порядку доставки
8. порядок доставки определяется задачей коммивояжера с учетом ограничений дорожного графа, грузоподъемностью и вместительностью ТС, предельным временем работы водителя и окном приемки каждого клиента.
11 Кондер
 
22.03.24
10:43
(10) ну все правильно, только задача про размещение
12 Волшебник
 
22.03.24
10:48
(10) Да-да, Вы всё правильно поняли. А то тут свободную ячейку не могут подобрать... Тьфу
13 PLUT
 
22.03.24
11:20
(0)

Деза от GPT
Для решения этой задачи вам нужно написать запрос, который выполнял бы следующие действия:
1. Отбор всех ячеек, в которых либо 2 маленьких заказа, либо 1 обычный
2. Определение свободных ячеек среди отобранных в пункте 1.
3. Выбор оптимальной ячейки для маленького заказа из свободных ячеек.

Пример запроса на SQL для поиска оптимальной ячейки для маленького заказа:

sql
SELECT ячейка
FROM склад
WHERE
    (тип = 'маленький' AND (SELECT COUNT(*) FROM склад WHERE ячейка = склад.ячейка) < 2)
    OR тип = 'обычный'
GROUP BY ячейка
HAVING COUNT(*) < 2


Этот запрос отбирает ячейки, в которых либо уже есть обычный заказ, либо не более одного маленького заказа, и после этого выбирает из них свободные ячейки для маленького заказа.
14 Волшебник
 
22.03.24
10:59
(13) запрос кривой, не выполнится.
15 АгентБезопасной Нацио
 
22.03.24
11:14
(8) ячейки не могут "иметь маршрут". Это маршрут должен "иметь ячейки".
16 shuhard
 
22.03.24
11:30
(14) GPT просил передать, что он так не думает =)
17 АгентБезопасной Нацио
 
22.03.24
11:38
(16) а он уже научился думать?
18 DeadFlowers
 
22.03.24
11:41
(13) Через SQL довольно понятно, спасибо!
Однако не понимаю как это реализовать через запрос 1С.

Непонятно SELECT COUNT(*) FROM склад WHERE ячейка = склад.ячейка (именно как посчитать количество записей)
И
HAVING COUNT(*) < 2
19 АгентБезопасной Нацио
 
22.03.24
11:43
(18) так может вам программиста позвать?
20 FIXXXL
 
22.03.24
11:46
(18) у тебя условий по факту:
0 - пустая, можно брать
0,5 - один "маленький" - только для "маленького"
1 - полна ячейка - не занимать
21 PLUT
 
22.03.24
12:42
(18)
бездушный робот грабит спровочники
не бездушный робот, а биоробот написал пример:

спровочник Ячейки:

ячейка
А
Б
В
Г

Регистръ сведений:

ячейка    заказ    тип
А    заказ1    маленький
А    заказ2    маленький
Г    заказ4    маленький
Б    заказ3    обычный

Результат:

ячейка
Г

Запрос:

ВЫБРАТЬ
    Ячейки.ячейка КАК ячейка,
    ЕСТЬNULL(Регистр.тип, "пустая") КАК тип,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Регистр.заказ) КАК Количество
ПОМЕСТИТЬ Размещение
ИЗ
    Ячейки КАК Ячейки
        ЛЕВОЕ СОЕДИНЕНИЕ Регистр КАК Регистр
        ПО Ячейки.ячейка = Регистр.ячейка

СГРУППИРОВАТЬ ПО
    Регистр.тип,
    Ячейки.ячейка
;
ВЫБРАТЬ первые 1
    Размещение.ячейка КАК ячейка
ИЗ
    Размещение КАК Размещение
ГДЕ
    Размещение.тип <> "обычный"
    И Количество < 2

УПОРЯДОЧИТЬ ПО
    тип,
    Количество УБЫВ
22 АгентБезопасной Нацио
 
22.03.24
12:13
(21) "Ячейка Г" - хорошо звучит!
"переместить товар Х для клиента П в ячейку Г". Хотя, может у них и "товар - Г"...

А вообще, я бы решал в общем виде - ячейка с минимумом оставшегося объема (ну и максимумом критерия оптимальности - например, порядка обхода) . Тогда и ячейки можно будет ставить любого размера, и заказы любого размера... а для ячеек с размером 1 и заказами объемом 0.5 и 1 - задача сводится к задаче ТС.
23 PLUT
 
22.03.24
12:15
(22) и так сойдет :)

ХХП
24 DeadFlowers
 
22.03.24
12:45
(21) большое спасибо! все получилось
25 Волшебник
 
22.03.24
12:47
(24) У Вас что реально тип задаётся строкой? Ну Вы блин даёте...
26 Волшебник
 
22.03.24
12:48
(24) А регистр называется Регистр, да?
Что у Вас там получилось-то?
27 DeadFlowers
 
22.03.24
12:48
(25) нет, у меня тип это булево значение небольшой, переделал под себя
28 DeadFlowers
 
22.03.24
12:48
(26) ну так я же не копировал запрос, мне нужна была логика
29 Волшебник
 
22.03.24
12:50
(28) Ага, врите дальше
30 Web00001
 
22.03.24
13:05
(29)А что ему делать? Оправдываться, что оскорбил чувства ВР придя на форум просить помощи по недостаточно сложному вопросу?
31 Злопчинский
 
22.03.24
13:08
(12) (10) вы еще в ТС оптимальную укладку грузовых мест забыли... ;-)
32 Волшебник
 
22.03.24
13:11
(30) Каяться за мёртвые цветы
33 Ненавижу 1С
 
гуру
22.03.24
13:51
(28) еще в (5) написал
34 Волшебник
 
22.03.24
14:40