Языком запросов разместить N яблок на складах с М ячеек
Как языком запросов разместить N яблок на складах с М ячеек.
UPD: размещение нескольких номенклатурных позиций на нескольких ячеистых складах
Написать статью побудила эта тема http://infostart.ru/blogs/1242/
- Описание
- Подробнее
Описание
ВЫБРАТЬ
"Вакуум 1" КАК Наименование,
10 КАК СвободныхЯчеек,
1 КАК Приоритет
ПОМЕСТИТЬ втСклады
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Вакуум 2",
20,
2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Вакуум 3",
10,
3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Склады.Наименование,
Склады.СвободныхЯчеек,
Склады.Приоритет КАК Приоритет,
ЕСТЬNULL(СУММА(СкладыЯчеек.СвободныхЯчеек), 0) + 1 КАК ПерваяЯчейка,
ЕСТЬNULL(СУММА(СкладыЯчеек.СвободныхЯчеек), 0) + Склады.СвободныхЯчеек КАК ПоследняяЯчейка
ПОМЕСТИТЬ втСкладыЯчейки
ИЗ
втСклады КАК Склады
ЛЕВОЕ СОЕДИНЕНИЕ втСклады КАК СкладыЯчеек
ПО (СкладыЯчеек.Приоритет < Склады.Приоритет)
СГРУППИРОВАТЬ ПО
Склады.Наименование,
Склады.СвободныхЯчеек,
Склады.Приоритет
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
"Сферический конь 1" КАК Наименование,
25 КАК Количество,
1 КАК Приоритет
ПОМЕСТИТЬ втНоменклатура
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Сферический конь 2",
10,
2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Номенклатура1.Наименование,
Номенклатура1.Приоритет КАК Приоритет,
ЕСТЬNULL(СУММА(Номенклатура2.Количество), 0) + 1 КАК ПерваяПозиция,
ЕСТЬNULL(СУММА(Номенклатура2.Количество), 0) + Номенклатура1.Количество КАК ПоследняяПозиция
ПОМЕСТИТЬ втНоменклатураПорядокРазмещения
ИЗ
втНоменклатура КАК Номенклатура1
ЛЕВОЕ СОЕДИНЕНИЕ втНоменклатура КАК Номенклатура2
ПО (Номенклатура2.Приоритет < Номенклатура1.Приоритет)
СГРУППИРОВАТЬ ПО
Номенклатура1.Наименование,
Номенклатура1.Количество,
Номенклатура1.Приоритет
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СкладЯчейки.Наименование КАК СкладНаименование,
Номенклатура.Наименование КАК НоменклатураНаименование,
ВЫБОР
КОГДА Номенклатура.ПерваяПозиция > СкладЯчейки.ПоследняяЯчейка
ТОГДА 0
КОГДА Номенклатура.ПоследняяПозиция < СкладЯчейки.ПерваяЯчейка
ТОГДА 0
КОГДА Номенклатура.ПоследняяПозиция >= СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция ТОГДА СкладЯчейки.ПоследняяЯчейка - СкладЯчейки.ПерваяЯчейка + 1
КОГДА Номенклатура.ПоследняяПозиция >= СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция > СкладЯчейки.ПерваяЯчейка
ТОГДА СкладЯчейки.ПоследняяЯчейка - Номенклатура.ПерваяПозиция + 1
КОГДА Номенклатура.ПоследняяПозиция < СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция ТОГДА Номенклатура.ПоследняяПозиция - СкладЯчейки.ПерваяЯчейка + 1
КОГДА Номенклатура.ПоследняяПозиция < СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция > СкладЯчейки.ПерваяЯчейка
ТОГДА Номенклатура.ПоследняяПозиция - Номенклатура.ПерваяПозиция + 1
ИНАЧЕ 0
КОНЕЦ КАК ЗанятоНоменклатурой
ИЗ
втСкладыЯчейки КАК СкладЯчейки,
втНоменклатураПорядокРазмещения КАК Номенклатура
ГДЕ
ВЫБОР
КОГДА Номенклатура.ПерваяПозиция > СкладЯчейки.ПоследняяЯчейка
ТОГДА 0
КОГДА Номенклатура.ПоследняяПозиция < СкладЯчейки.ПерваяЯчейка
ТОГДА 0
КОГДА Номенклатура.ПоследняяПозиция >= СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция ТОГДА СкладЯчейки.ПоследняяЯчейка - СкладЯчейки.ПерваяЯчейка + 1
КОГДА Номенклатура.ПоследняяПозиция >= СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция > СкладЯчейки.ПерваяЯчейка
ТОГДА СкладЯчейки.ПоследняяЯчейка - Номенклатура.ПерваяПозиция + 1
КОГДА Номенклатура.ПоследняяПозиция < СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция ТОГДА Номенклатура.ПоследняяПозиция - СкладЯчейки.ПерваяЯчейка + 1
КОГДА Номенклатура.ПоследняяПозиция < СкладЯчейки.ПоследняяЯчейка
И Номенклатура.ПерваяПозиция > СкладЯчейки.ПерваяЯчейка
ТОГДА Номенклатура.ПоследняяПозиция - Номенклатура.ПерваяПозиция + 1
ИНАЧЕ 0
КОНЕЦ > 0
УПОРЯДОЧИТЬ ПО
СкладЯчейки.Приоритет,
Номенклатура.Приоритет