Задачка про оптимальный запрос

1. skt-roman 23.03.15 19:00 Сейчас в теме
Мы продаем витую пару, в бабинах по 30 метров и по 70 метров, бабины не разрезаются, продаются целиком. Имеем на складе какое-то произвольное количество тех и других бабин.

Приходит клиент и просит какую-либо длину, произвольную, допустим 150 метров, необходимо написать процедуру которая одним-двумя запросами подберет необходимое количество бабин как можно ближе к этой длине с учетом товаров на складе.

Какие есть решения на запросе?
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Denis_CFO 48 23.03.15 19:24 Сейчас в теме
(1) skt-roman, если дополнительных условий нет, тогда ставь блокировку на регистр остатков товаров, выбирай остаток бОбин по 70 м из регистра остатков товара на складе, вычитай из заказанного количества количество метров в бОбине, потом проверяй, если остаток > 70 метров, тогда следующую из 70 м, если остаток заказанного количества < 70, тогда запрашивай бОбины по 30 м, пока количество метров будет => Заказанного Количества. Или сам код нужен?
+
3. DJDUH 17 23.03.15 19:31 Сейчас в теме
(1) skt-roman,А
бабины не разрезаются
это как? Клиент же не будет брать всю "Бухту кабеля"!?
+
4. Denis_CFO 48 23.03.15 19:33 Сейчас в теме
(3) DJDUH, Видимо будет, без вариантов. Нормальная функция 1с "Округлить 1 как 1,5".
+
5. spacecraft 23.03.15 19:37 Сейчас в теме
(3) DJDUH, вообще-то это обычное явление. Продается поштучно товар, который учитывается в погонных метрах. Продают не метры, а штуки.
+
8. Denis_CFO 48 23.03.15 19:45 Сейчас в теме
(3) DJDUH, пусть лучше будет лишний метр, чем нехватка 10 см
+
14. Allexe8.1 23.03.15 20:21 Сейчас в теме
(1) skt-roman,
Имеем на складе какое-то произвольное количество тех и других бабин.
Адрес склада?
+
15. Cooler 22 23.03.15 20:30 Сейчас в теме
(14) Allexe8.1, это там, где спрашивали Буденного: "Семен Михайлович, а вам нравится Бабель?" Тот, подкручивая знаменитые усы: "Так это смотря какой бабель!"
+
16. Allexe8.1 23.03.15 20:39 Сейчас в теме
(15) Cooler, Я еще другое помню, на ту же тему. Типа кандидаты в депутаты на совещании. Один из них: Бабу, бабу... бабу.... Да подождите товарищ, вот выиаграем выборы, будут вам и бабы, и бабки, все будет. - Бабу.. бабурина в президенты!
+
17. ildarovich 7861 24.03.15 00:09 Сейчас в теме
(1) skt-roman, вот вроде бы рабочий вариант решения, но желательно еще протестировать
ВЫБРАТЬ
	0 КАК Х
ПОМЕСТИТЬ Число0_1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Инь.Х + 2 * Янь.Х КАК Х
ПОМЕСТИТЬ Число0_3
ИЗ
	Число0_1 КАК Инь,
	Число0_1 КАК Янь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Инь.Х + 4 * Янь.Х КАК Х
ПОМЕСТИТЬ Число0_15
ИЗ
	Число0_3 КАК Инь,
	Число0_3 КАК Янь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Инь.Х + 16 * Янь.Х КАК Х
ПОМЕСТИТЬ Число0_255
ИЗ
	Число0_15 КАК Инь,
	Число0_15 КАК Янь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Инь.Х + 256 * Янь.Х КАК Х
ПОМЕСТИТЬ Число0_65535
ИЗ
	Число0_255 КАК Инь,
	Число0_255 КАК Янь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Число.Х КАК По70,
	ВЫБОР
		КОГДА &НужноМетров <= Число.Х * 70
			ТОГДА 0
		ИНАЧЕ ВЫРАЗИТЬ((&НужноМетров - Число.Х * 70) / 30 + 0.499999 КАК ЧИСЛО(10, 0))
	КОНЕЦ КАК По30,
	Число.Х * 70 + ВЫБОР
		КОГДА &НужноМетров <= Число.Х * 70
			ТОГДА 0
		ИНАЧЕ ВЫРАЗИТЬ((&НужноМетров - Число.Х * 70) / 30 + 0.499999 КАК ЧИСЛО(10, 0))
	КОНЕЦ * 30 - &НужноМетров КАК Остаток
ПОМЕСТИТЬ Варианты
ИЗ
	Число0_65535 КАК Число
ГДЕ
	Число.Х <= &Остаток70
	И ВЫРАЗИТЬ((&НужноМетров - Число.Х * 70) / 30 + 0.499999 КАК ЧИСЛО(10, 0))<= &Остаток30
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Варианты.По70,
	Варианты.По30,
	Варианты.Остаток
ИЗ
	Варианты КАК Варианты
ГДЕ
	Варианты.Остаток В
			(ВЫБРАТЬ
				МИНИМУМ(Варианты.Остаток)
			ИЗ
				Варианты)
Показать
+
6. skt-roman 23.03.15 19:42 Сейчас в теме
Если идет превышение длины запрошенной клиентом, то оно должно быть минимальным
+
7. Denis_CFO 48 23.03.15 19:44 Сейчас в теме
(6) skt-roman, Всё правильно, поэтому я и предлагаю сначала по 70 м, а потом по 30.
+
9. skt-roman 23.03.15 19:46 Сейчас в теме
(7) Denis_CFO, Нет, запрошенная длина может быть любая, плюс нужно учесть остаток на складе и чтобы превышение было минимум
+
11. Denis_CFO 48 23.03.15 19:52 Сейчас в теме
(9) skt-roman, ничего не понял. Что не так-то? Единственное могу дополнение сказать, что если бобин по 30 м больше нет, тогда выбирается по 70 м. Внимательно перечитай всю переписку.
+
10. Cooler 22 23.03.15 19:50 Сейчас в теме
Предлагаю такой алгоритм:
1. Пытаемся набрать нужную длину бобинами по 70 метров, это даст превышение над требуемой длиной от 0 до 69 метров.
2. Если превышение меньше 9 метров, то оптимизация не нужна.
3. Если превышение больше 9 метров, то обрабатываем его по следующим правилам: если оно больше 49 метров - один раз заменяем одну бобину 70 метров на одну бобину 30 метров, из превышения вычитаем 40 метров.
4. Оставшееся превышение 0-29 метров уменьшаем в цикле: заменяем одну бобину 70 метров на две бобины 30 метров, из превышения вычитаем 10 метров, так что проделывается это максимум 2 раза.
5. Если на складе не хватает бобин 70 метров для п.1 то добираем до превышения бобинами по 30 метров и переходим к п.4.
6. Если на любом этапе кончаются бобины 30 метров, то оптимизация прерывается.

Вот только сомневаюсь, что это можно реализовать запросом.
+
12. Denis_CFO 48 23.03.15 19:57 Сейчас в теме
(10) Cooler, я бы выгрузил все остатки в ТЗ и циклом по 70 м дошёл до значения, когда остаток меньше 70 и больше 30, а потом внутренним циклом добил до больше или равно Заказа клиента, если по 30 м больше не осталось, тогда возврат в первый цикл. Хотя и твой способ тоже хорош.
+
13. spacecraft 23.03.15 20:01 Сейчас в теме
(12) Denis_CFO, посчитай по своему алгоритму 150 метров и сравни с (10).
+
18. Painted 49 24.03.15 09:40 Сейчас в теме
Смутно мне напоминает задачу о рюкзаке. Должна же быть куча готовых решений где-то. Стандартная же задача.
+
20. Xershi 1484 24.08.15 11:06 Сейчас в теме
(19) ser6702, это что специально писал для этой ветки?)
+
21. spezc 782 24.08.15 11:27 Сейчас в теме
вроде же обычная математика, не?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот