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

Обход массива через один

Автор RUFFRYDA, 17 сен 2014, 14:48

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

RUFFRYDA

модуль формы документа.

Есть массив МассивТоварИзм - в нем чередуются значения типа Строка и Число, всего 4 элемента (строка, число, строка, число), но может быть и больше, но обязательно четное количество (из-за особенности создания массива).
Хочу занести данные из массива в строку таким образом:
"Текст0" + ЭлементМассива0 + "Текст1" + ЭлементМассива1 "ТекстХ" + "Текст0" + ЭлементМассива2 + "Текст1" ЭлементМассива3 и т.д.

Т.е. необходимо занести такую информацию в текстовое поле:

"Имя: " + МассивТоваровИзм[Имя] + ", Сумма: " + МассивТоваровИзм[Сумма] + " || "

Причем определенно (n = количество элементов массива / 2) количество раз. В данной ситуации у меня всего 4 элемента, поэтому использовал "Для Х = 0 По 1 Цикл"
Вроде бы алгоритм продумал, но после первой итерации цикл заканчивается. Не могу понять почему.
код (много строк сообщить использовал, чтобы проверять значения переменных):
Цитировать&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Для каждого Х из МассивТоваровИзм Цикл
      Сообщить ("iks=" + Х);
   КонецЦикла;
   Строка = "";
   Сообщить ("kolvo" + (МассивТоваровИзм.Количество()/2-1));
   Сч = 0;
   
   Для Сч = 0 По 1 Цикл
      Имя = Сч*2;
      Сумма = Сч*2 + 1;
      Сообщить ("hek1=" + Имя);
      Сообщить ("hek2=" + Сумма);
      Строка = Строка + "Имя: " + МассивТоваровИзм[Имя] + ", Сумма: " + МассивТоваровИзм[Сумма] + " || ";
      Сообщить ("iterator=" + Сч + "_Элементы=" + Имя + ", " + Сумма);
      Сч = Сч + 1;
   КонецЦикла;
КонецПроцедуры

Вот что получается в окне сообщить:
Цитироватьiks=Транзистор Philips
iks=50
iks=Ремонт отечественного телевизора
iks=600
kolvo1
hek1=0
hek2=1
iterator=0_Элементы=0, 1
Все хорошо, но цикл прошел только по первому значению (0). Хочу понять почему цикл не пошел на значение 1 и исправить.

TreeDogNight

Зачем в конце к сч прибавляешь 1? Понимаю, если бы у тебя была конструкция:
СЧ = 0;
Пока НЕ СЧ = 2 Цикл
Имя = Сч * 2;
Сумма = Сч * 2 + 1;
Сообщить ("hek1=" + Имя);
Сообщить ("hek2=" + Сумма);
Строка = Строка + "Имя: " + МассивТоваровИзм[Имя] + ", Сумма: " + МассивТоваровИзм[Сумма] + " || ";
Сообщить ("iterator=" + Сч + "_Элементы=" + Имя + ", " + Сумма);
СЧ = СЧ + 1;
КонецЦикла;


В случае твоего цикла, просто убери вконце "СЧ = СЧ + 1;" и будет тебе счастье.

RUFFRYDA

Цитата: TreeDogNight от 17 сен 2014, 15:15
Зачем в конце к сч прибавляешь 1? Понимаю, если бы у тебя была конструкция:
СЧ = 0;
Пока НЕ СЧ = 2 Цикл
Имя = Сч * 2;
Сумма = Сч * 2 + 1;
Сообщить ("hek1=" + Имя);
Сообщить ("hek2=" + Сумма);
Строка = Строка + "Имя: " + МассивТоваровИзм[Имя] + ", Сумма: " + МассивТоваровИзм[Сумма] + " || ";
Сообщить ("iterator=" + Сч + "_Элементы=" + Имя + ", " + Сумма);
СЧ = СЧ + 1;
КонецЦикла;


В случае твоего цикла, просто убери вконце "СЧ = СЧ + 1;" и будет тебе счастье.

Елы-палы... Все из-за того, что до этого в циклах требовался дополнительное значение-итератор, который ручками плюсовать надо было под конец тела цикла. А здесь простую конструкцию цикла надо было, а меня уже переклинило с этим +1... Мде. Спасибо большое)):xfbnsdfb:

Теги:

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

Рейтинг@Mail.ru

Поиск