Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 12:36

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

Автор skt-roman, 23 мар 2015, 18:57

0 Пользователей и 1 гость просматривают эту тему.

skt-roman

Мы продаем витую пару, в бабинах по 30 метров и по 70 метров, бабины не разрезаются, продаются целиком. Имеем на складе какое-то произвольное количество тех и других бабин.

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

Какие есть решения на запросе?

cska-fanat-kz

а если он запросит допустим 110 метров?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

skt-roman

Цитата: cska-fanat-kz от 23 мар 2015, 22:31
а если он запросит допустим 110 метров?
Запросит сколько угодно

vitasw

А что значит
Цитата: skt-roman от 23 мар 2015, 18:57как можно ближе к этой длине
Допустим, надо 135 метров, Это 70+70-5 или 70+30+30+30-25. Нужны более четкие критерии правильности резки бабин.


Дмитрий@

Есть такая мысль:
-определяете Количество строк = Целое("Необходимая длина бобины / Минимальную длину бобины"), например 2 = 70 / 30
-Составляете таблицу   
                            Кол1 Кол2
                            1    0
                            2    0
                            1    1
                            2    1
                            1    2
                            2    2
-Составляете таблицу    Наименование1    Длина1    Наименование2    Длина2   
-Делаете полное объединение таблиц, добавляем вычисляемое поле "Длина" = "Кол1 * Длина1 + Кол2 * Длина2", отсекаете строки с длиной больше нужной, сортируете таблицу по длине УБЫВ. И выбираем первую строку.
Только вот как сделать оптимально первую таблицу надо подумать.
                       
                       

cska-fanat-kz

Нужное количество (НК) сперва целочисленно делим на 70. Отнимаем результат от НК. Если разница больше 0, то разницу целочисленно делим на 30...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Anion

Цитата: skt-roman от 23 мар 2015, 18:57
Мы продаем витую пару, в бабинах по 30 метров и по 70 метров, бабины не разрезаются, продаются целиком. Имеем на складе какое-то произвольное количество тех и других бабин.

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

Какие есть решения на запросе?
Прикольная задачка , с точки зрения теории , а вот с точки зрения практики и стандартов "витухи" это полный ахтунг .

Дмитрий@

Сделал простенькую базу с подбором длины. Может пригодится. Ссылка https://yadi.sk/d/0eCN68xKfX47o

skt-roman

Дмитрий@, Да гуд, но нужно чтобы длина была не меньше запрошенной, если превышение запрошенной длины то минимальное

Дмитрий@

В коде
|/////////////////////////////////////////////////////////////
      |ВЫБРАТЬ ПЕРВЫЕ 1 *,
      |   "+СтрокаЗапроса+" КАК Длина
      |ИЗ
      |   Матрица КАК Матрица ПОЛНОЕ СОЕДИНЕНИЕ Данные КАК Данные По ИСТИНА
      |ГДЕ
      |   "+СтрокаЗапроса+" <= &Длина
      |УПОРЯДОЧИТЬ ПО
      |   Длина УБЫВ";

Поменяй
    |   "+СтрокаЗапроса+" >= &Длина
      |УПОРЯДОЧИТЬ ПО
      |   Длина";
Должно сработать.
Добавлено: 27 мар 2015, 20:48


И еще в коде
&НаСервере
Процедура ЗаполнитьНаСервере(Ссылка)
   
   КоличествоДлин = ПолучитьКоличествоДлин(Ссылка.Номенклатура);
   МинимальнаяДлина = ПолучитьМинимальнуюДлину(Ссылка.Номенклатура);
   МаксимальноеКоличество = Цел(Ссылка.Длина / МинимальнаяДлина);

Замени
    МаксимальноеКоличество = Цел(Ссылка.Длина / МинимальнаяДлина)+1;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск