На картинке представлено окно комбинатора:
Что хотелось бы прокомментировать?
Ползунок в обл.1. Его положение указывает, какая часть суммы будет набрана случайным подбором. Чем больше сумма, которую мы пытаемся подобрать, и чем больше чисел в исходном наборе данных, - тем правее располагаем этот ползунок. Не рекомендую использовать 100% случайного подбора, иначе поиск комбинации чисел по времени может сильно затянуться или вовсе не дать положительного результата. Равно как и отказываться от случайного подбора полностью не следует - может статься, что будете ждать результат вечно.
Кнопка открытия в обл.2 устанавливает случайную сумму и запускает подбор. Полезна, если хотите "поиграть" с обработкой.
Время на одну попытку подбора в секундах. Если лимит времени при подборе будет исчерпан, процесс поиска прервется. Нулевое значение не ограничивает во времени процедуру поиска набора чисел путем перебора.
Количество попыток - указывает максимальное количество попыток подобрать требуемую сумму. Используется, если время на одну попытку ограничено, т.е. больше нуля. Количество попыток со значением -1 не ограничивает это самое количество попыток подбора суммы. Процесс будет длиться до получения нужного результата. Если замечаете, что результата все нет и нет, бесконечную цепь попыток прерываем удержанием клавиши Ctrl. Каждую попытку предваряет новый случайный подбор чисел.
Из моего опыта: время лучше ограничить 15-20 секундами и запустить несколько попыток подбора. Сумму подбирать случайно по максимуму, но не все 100%.
Помеченные суммы в списке слева не учавствуют в случайном подборе.
Помеченные суммы в списке справа все время присутствуют в выборке чисел.
Перемещать суммы между списками можете путем выбора значения в списке (либо нескольких значений сразу).
Что касается исходного набора чисел. Предполагается, что вы его передаете в обработку в списке значений. Но, можно также его получить, нажав кнопку "Заполнить".
В открывшейся форме можете либо сформировать случайный набор чисел, либо получить его из буфера обмена. Из текстового документа, колонки отчета 1С, колонки таблицы Excel... и прочие источники.
Программный вызов осуществляем так:
//Фрагмент кода
//Пример. Все параметры не обязательные
Парам = Новый Структура;
Настройки = Новый Структура;
Настройки.Вставить("ВремяНаПопытку", 6); //в секундах
Настройки.Вставить("КвоПопыток", 5);
Настройки.Вставить("ПредварительныйПодбор", 75); //Значение от 0 до 100. Если 0 - не выполняется
//предварительный (случайный) набор суммы
Настройки.Вставить("Сумма", 795);
Настройки.Вставить("Точность", 0);
Парам.Вставить("Настройки", Настройки);
Парам.Вставить("ВыходПоГотовности", Истина); //Как только получите результат, - вывалитесь из обработки, если Истина
//Если Ложь, - придется нажать кнопку "Готово" для завершения
//Лучше, конечно, сначала убедиться в готовности именно ожидаемого результата и нажать кнопку "Готово"
//Здесь должны быть ваши суммы для подбора
СписокДляПодбора = Новый СписокЗначений;
Для Инд = 1 По 300 Цикл
СписокДляПодбора.Добавить(Инд,Строка(Инд));
КонецЦикла;
Парам.Вставить("СписокДляПодбора", СписокДляПодбора);
спРез = ОткрытьФормуМодально("ВнешняяОбработка." + ИмяОбработки + ".Форма", Парам);
//В спРез получили результат
При заполнении набора чисел из буфера обмена, использованы регулярные выражения. Отладка их выполнена с помощью Построителя регулярных выражений.
В случае внесения изменений в эту обработку, вы получите оповещение. Настройка оповещений описана в этой статье.
Похожие темы:
[Z-report] "Битва титанов v.1" Подбор продаж под сумму Z-отчета
Подбор слагаемых для нужной суммы
Желаю приятного просмотра!
Обновления
24.05.2017 12:00 - теперь, сколько бы мы не запустили серий попыток подбора значений, будем располагать лучшим результатом из всех найденных подборов.
25.05.2017 10:00 - выполнена небольшая оптимизация. Теперь, при программном вызове обработки, если сумма для подбора больше половины итоговой суммы исходного набора чисел, - выполняется подбор итоговой суммы за вычетом суммы для подбора (назовем дополнением к требуемой сумме). Ибо, подобрать меньшую сумму в среднем быстрее, чем большую, в моем разумении... Результат из обработки возвращается требуемый, разумеется. Возвращаемый из обработки набор чисел мы видим или в списке справа на форме, или в списке слева при подборе дополнения к сумме.