Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Алгоритм вычисления возможных комбинаций цен из дерева значений          
valleha Подменю пользователя
сообщение 22.11.15, 0:13
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день. Прошу помощи, т.к. идеи уже иссякли.
Буду ёмким и кратким.

Платформа 8.3 (обычное приложение), конф-я самописная.

Есть заполненное дерево значений ДЗ_Компонентов.
1-й уровань:
  • колонка Наименование, содержит наименование товара из Каталога Номенклатуры.

2-й уровень (последний):
  • колонки:
    • 1 Наименование, содержит наименование товара из Номенклатуры (в отличии от Каталога Номенклатуры, содержит ещё и ведомости об упаковке).
    • 2 Вес в смеси, число.
    • 3 Объём в смеси, число.
    • 4 Цена в номенклатуры за 1 кг., число.
  • количество уровней: 2
  • количество строк в 1-м или 2-м уровнях неограничено


Пример дерева:
-ТОВАР1изКаталога
--[ТОВАР1 25 кг.] [Вес:100] [Объём:72] [Цена:200]
-ТОВАР2изКаталога
--[ТОВАР2 6 л.] [Вес:25] [Объём:30] [Цена:140]
--[ТОВАР2 12,5 л.] [Вес:25] [Объём:30] [Цена:130]
--[ТОВАР2 25 л.] [Вес:25] [Объём:30] [Цена:120]
-ТОВАР3изКаталога
--[ТОВАР2 12,5 л.] [Вес:40] [Объём:45] [Цена:230]

Вес в кг, объём в литрах. Для товара1 100кг=72л по цене 200 за кг.

Задача-минимум: перебрать дерево таким образом, чтобы на выходе получить Массив или таблицу значений со всеми возможными комбинациями цен за 1кг из которой можно будет вытянуть максимальное и минимальное значение цены.

Количество кг в смеси: 100+25+40=165

Пример варианотов цен из дерева:
200*100+140*25+230*40=32700 грн/за 165 кг
200*100+130*25+230*40=32450 грн/за 165 кг
200*100+120*25+230*40=32200 грн/за 165 кг


Возможные цены:
32700 /165=198,18 грн за 1 кг смеси
32450 /165=196,67 грн за 1 кг смеси
32200 /165=195,15 грн за 1 кг смеси

Мин: 195,15
Макс: 198,18

sava1 Подменю пользователя
сообщение 22.11.15, 14:56
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Обходим дерево по первому уровню - запоминаем Товар
минцена=0; максцена=0;
Обходим дерево по второму уровню
Вычисляем ценаЗаЕдиницу = Цена/Вес
Если ценаЗаЕдиницу>максцена тогда максцена = ценаЗаЕдиницу
Конец
Если ценаЗаЕдиницу<минцена тогда минцена = ценаЗаЕдиницу
Конец
КонецЦикла
Добавляем в ТЗ,Массив,Структуру и т.д. - Товар, минцена, максцена

valleha Подменю пользователя
сообщение 22.11.15, 21:58
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Процедура Печать()
//...............
            ТЗ_Цен=Новый ТаблицаЗначений;
            ТЗ_Цен.Колонки.Добавить("СуммаКГВСмеси");
            ТЗ_Цен.Колонки.Добавить("Цена");
            РекурсияДереваКомпонентов(ДЗ_Компонентов, 0, ТЗ_Цен);
//...............
КонецПроцедуры
Процедура РекурсияДереваКомпонентов(ДЗ_Компонентов, ИндексВетки, ТЗ, СуммаЦен=0, СуммаКГ=0)
    КоличествоВеток=ДЗ_Компонентов.Строки.Количество();                             //Количество элементов верхнего уровня
    Для Каждого СтрокаВВетке Из ДЗ_Компонентов.Строки[ИндексВетки].Строки Цикл      //Перебор нижнего уровня в рамках одной ветки
        Сумма=СуммаЦен+СтрокаВВетке.Цена*СтрокаВВетке.Вес;                          //Суммируем значение цены
        КГ=СуммаКГ+СтрокаВВетке.Вес;
        Если КоличествоВеток-1=ИндексВетки Тогда                                    //Если добрались до последней ветки, тогда...
            Нов=ТЗ.Добавить();                                                      //...добавляем новую запись в таблицу значений
            Нов.Цена=Сумма;
            Нов.СуммаКГВСмеси=КГ;
        Иначе
            РекурсияДереваКомпонентов(ДЗ_Компонентов, ИндексВетки+1, ТЗ, Сумма, КГ);    //...иначе ныряем в следующую ветку с новой Суммой
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры



Всем спасибо за участие...

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 5:35
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!