Есть код:

```1c
    &НаКлиенте
    Процедура Команда1(Команда)

    Массив = Новый Массив(4);

    Массив[0] = "А1";
    Массив[1] = "А2";
    Массив[2] = "А3";
    Массив[3] = "А4";

    Для Индекс1 = 0 По Массив.ВГраница() - 1 Цикл
    Для Индекс2 = Индекс1 + 1 По Массив.ВГраница() Цикл
    Сообщить(Массив[Индекс1] + Массив[Индекс2]);
    КонецЦикла;
    КонецЦикла;
```

Он выдает, следующее:

А1А2
А1А3
А1А4
А2А3
А2А4
А3А4

Но мне сказали, что это фиксированная фигня, мол нужно форму сделать, в которой два поля и можно туда вставить число например: 5 это типо число сочетаний и 10 это длинна значений массива.

Мне сказали, это просто, а так как я новичок, мне вообще чет тяжело въехать)) Помогите пожалуйста!
---
Ну, если перепереть (31) с C++ на язык родных осин, то получится это.
---
так?

```1c
    Процедура Рассчитать(Команда)
    СписокРезультата.Очистить(); // СписокРезультата это СписокЗначений на форме
    Если ДлинаМассива<=0 Или ЧислоСочитаний <=0 Тогда Возврат; КонецЕсли;
    Массив = Новый Массив(ДлинаМассива);
    Для к = 1 По ДлинаМассива Цикл
    Массив[к-1] = "А"+к;
    КонецЦикла;
    Для Индекс1 = 0 По Массив.ВГраница() - 1 Цикл
    Для Индекс2 = Индекс1 + 1 По Массив.ВГраница() Цикл
    СписокРезультата.Добавить(Массив[Индекс1] + Массив[Индекс2]);
    Если СписокРезультата.Количество() >= ЧислоСочитаний Тогда
    Перейти ~m1;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    ~m1:
    КонецПроцедуры
```
---
А передать в формы, где вводятся значения, что именно нужно вписать?
---
ДлинаМассива и ЧислоСочитаний это реквизиты формы тип Число.
---
Что именно является фиксированной фигней? Массив?
---
Да, типо я уже задал массив и количество сочетаний, а нужно, чтобы он задавался например цифрой ("Чтобы выдавала все сочетания по М элементам из Н списка), если можно заменить чем-то массив, то ничего страшного, лишь бы я ввел в поле предположим сочетания 2 элементов из списка 5 и мне выдало 1,1 1,2 1,3 1,4 1,2 2,2 2,3 и так далее и типо вводишь так любые числа и оно работало, я вот ума не приложу как это надо выродить, прошу помощи.
---
Создаете обработку, создаете форму (лучше упр), в реквизитах формы справа добавляете два реквизита с типом Число (мДлина, мКоличество) и перетаскиваете их на форму. Потом, справа, в разделе "Команды", создаете команду "Расчёт". Перетягиваете и её на форму. Затем по команде правой кнопкой мыши "Создать процедуру на клиенте", в тело процедуры пишете свой код, заменив необходимое на мДлина и мКоличество.
---
подскажите в конце заменив необходимое на мДлина и мКоличество, я подставил вместо массива и индекса вот так:

```1c
    &НаКлиенте
    Процедура Команда1(Команда)

    мДлина = Новый Массив(4);

    мДлина[0] = "А1";
    мДлина[1] = "А2";
    мДлина[2] = "А3";
    мДлина[3] = "А4";

    Для мКоличество1 = 0 По мДлина.ВГраница() - 1 Цикл
    Для мКоличество2 = мКоличество1 + 1 По мДлина.ВГраница() Цикл
    Сообщить(мДлина[мКоличество1] + мДлина[мКоличество2]);
    КонецЦикла;
    КонецЦикла;

    КонецПроцедуры
```

Выдает ошибку:

{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(7)}: Получение элемента по индексу для значения не определено
    мДлина[0] = "А1";

Или я Вас не правильно понял?
---
```1c
    МассивЭлементов = Новый Массив(мДлина)
```

Далее работаете с переменной МассивЭлементов.
---
это предложение или указание?
---
это вопрос
---
этот вопрос не вам был задан.
---
Это приказ.
---
ну тогда я тут это оставлю... чтобы приказы по адресу перенаправили.
---
Зачем это здесь? Я прекрасно знаю, что переменные можно называть Строка, Структура, Массив, да хоть ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент, я не против. Если вчитаться в (5), то можно увидеть, что ТС добавил числовой реквизит мДлина и дальше пытался работать с ним как с массивом, именно на эту ошибку я ему и указал.
---
а, извини, не понял. Думал это был мне ответ на Массив = Новый Массив.
---
Поставил вознаграждение, нужна помощь!
---
То есть мне нужно оставить всё как есть, только добавить в параметры (мДлина) как у Вас?
---
да, тогда будет создаваться массив нужной длины.
---
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(7)}: Значение не является значением объектного типа (ВГраница)
 Для мКоличество = 0 По мДлина.ВГраница() - 1 Цикл
---
не трогайте мДлина, это не массив, это число :) Как сейчас код выглядит?
---
Вот так

```1c
    &НаКлиенте
    Процедура Команда1(Команда)

    мДлина = Новый Массив(мДлина);

    Для мКоличество = 0 По мДлина.ВГраница() - 1 Цикл
    Для мКоличество = мКоличество + 1 По мДлина.ВГраница() Цикл
    Сообщить(мДлина[мКоличество] + мДлина[мКоличество]);
    КонецЦикла;
    КонецЦикла;

    КонецПроцедуры
```
---
так делать не надо. У вас есть числовой реквизит мДлина и вы этому числовому реквизиту пытаетесь присвоить значение массив. Не тут-то было - он как был числом, так и остался. Для массива вводите локальную переменную:

```1c
    Массив = Новый Массив(мДлина);

    Для Индекс1 = 0 По Массив.ВГраница() - 1 Цикл
    Для Индекс2 = Индекс1 + 1 По Массив.ВГраница() Цикл
    Сообщить(Массив[Индекс1] + Массив[Индекс2]);
    КонецЦикла;
    КонецЦикла;
```
---
Массив = Новый Массив(мДлина);

    Для Индекс1 = 0 По Массив.ВГраница() - 1 Цикл
        Для Индекс2 = Индекс1 + 1 По Массив.ВГраница() Цикл
       Сообщить(Массив[Индекс1] + Массив[Индекс2]);
        КонецЦикла;
    КонецЦикла;

Если брать Ваш код, то конфигуратор ругается говорит, что преобразование к типу число не может быть выполнено.
---
Так массив-то заполнить нужно.

```1c
    Массив = Новый Массив;

    Для сч = 1 по мДлина Цикл
    Массив.Добавить("А" + сч)
    КонецЦикла;

    Для Индекс1 = 0 По Массив.ВГраница() - 1 Цикл
    Для Индекс2 = Индекс1 + 1 По Массив.ВГраница() Цикл
    Сообщить(Массив[Индекс1] + Массив[Индекс2]);
    КонецЦикла;
    КонецЦикла;
```
---
https://prog-cpp.ru/combinations

Если не важно, чем будет заполнен массив элементов, то заполнять его, как в (24).
Тогда на форме разместить два реквизита типа "Число" - "Длина" (массива) и "Количество" (длина сочетания).
По статьям выше разобраться, как генерировать очередное сочетание.
Потом переложить на 1С - все нужные типы есть.
---
Потом переложить на 1С - все нужные типы есть.

Хорошая статья, но она меня не спасает, потому что там C++, а я и 1С-то не очень хорошо знаю, так как новичок в этом деле))
---
и длину при создании можно не указывать.
---
а поля из формы к чему прицеплены?
---
ну, это тоже статичная фигня, по большому счету, генерирует список из мДлина (это поле формы) по 2. Чтобы запилить список из мДлина по мКоличество - тут я под вечер не соображу)
---
Поставил вознаграждение, очень нужна помощь.
---
Может быть поздно влезаю, но зачем тут вообще массивы?
Формула сочетаний С из n по k легко гуглится, там только факториалы нужны.
Или нужно вывести все сочетания?
До сих пор был только код, выводящий C из n по 2.
---
Здравствуйте, ещё актуально. Нужно чтобы было 2 поля в одном количество элементов по которым нужно составить сочетания в другом список. Если на 1С это реально, то я буду очень признателен, ибо это очень важно.
---
Ну, если перепереть (31) с C++ на язык родных осин, то получится это.
---
Вечером попробую запустить. А вы уже пробовали? Работает?
---
Пробовал, работает.
---
Боги праведные это то, что нужно! Вы меня спасли! Спасибо большое!
---
Осталось только в коде разобраться, если что я Вам тогда в ЛС напишу, чтобы я смог рассказать как работает эта система)