Вернуть массив из функции. #740879


#0 by S3rGotcha
Только начинаю осваивать 1С. Столкнулся с проблемой: Есть строка вида: СТР="Префикс1=Значение1;Префикс2=Значение2..." Есть массив префиксов: МассивПрефиков = {Префикс1=, Префикс2=, ...} Есть процедура, где строку разбивают на массив вида ИсходныйМассив = {Префикс1=Значение1, Префикс2=Значение2, ...} Далее в процедуре вызывается функция, на вход ей подаются элементы массива ИсходныйМассив и весь МассивПрефиксов. Задача функции - вернуть ВыходнойМассив вида {Префикс1, Значение1} (конечно попутно там происходит проверка еще кое-каких условий, но ВыходнойМассив должен отдаваться с 2 значениями). По факту получаю: Вызываю в основной процедуре эту функцию: Заканчивается ошибкой: итератор для значения не определен Заканчивается ошибкой: Получение элемента по индексу для значения не определено Отсюда вопрос: в чем я не прав?
#1 by ДенисЧ
Не вижу оператора Возврат в функции
#2 by ДенисЧ
Кроме того - всегда есть отладчик, в котором можно посмотреть на тип результатат
#3 by Ненавижу 1С
ВыходнойМассив должен отдаваться с 2 значениями это называется Структура или Соответствие, на крайний случай таблица значений или список значений
#4 by S3rGotcha
Оператор возврат есть. Выглядит он вот так: Значения в выходной массив предварительно задаются так: ВыходнойМассив.Добавить(ПервыйЭлемент); ВыходнойМассив.Добавить(ВторойЭлемент);
#5 by Гёдза
покажи полный код
#6 by ДенисЧ
Отлично. Теперь переходи ко второму пункту
#7 by S3rGotcha
Это функция: Это процедура:
#8 by asady
#9 by S3rGotcha
Тогда пишет: Индекс находится за границами массива
#10 by asady
дальше уже сам догадаешься?
#11 by S3rGotcha
увы, нет.
#12 by asady
у тебя условие    (Найти(ЗаписьВСтроке, МассивАтрибутов[ИндексПрефикса])>0 и СравнитьПервыеСимволы(ЗаписьВСтроке, МассивАтрибутов[ИндексПрефикса])>0) никогда не ИСТИНА
#13 by asady
+ а почему знаешь?
#14 by S3rGotcha
Забыл еще 1 функцию. Сейчас:
#15 by S3rGotcha
судя по тому, что в основной функции в качестве маркера я использую: Сообщить("Функция ВыборАтрибутов. Выходое значение 0: "+ВыходнойМассив[0]); Сообщить("Функция ВыборАтрибутов. Выходое значение 1: "+ВыходнойМассив[1]); И вижу вывод, то условие-таки выполняется. Разве нет?
#16 by asady
ИндексПрефикса = ИндексПрефикса + 1; вот это зачем?
#17 by S3rGotcha
а как по массиву атрибутов двигаться? )) Я далек от программирования. Использовал классический цикл for для массива. Вроде верно?
#18 by Лесной
#19 by Лесной
ой, я чета попутал. Пардонте...
#20 by asady
а где ты в цикле for  видел инкрементацию переменной цикла
#21 by 1Сергей
в С++ третим параметром :)
#22 by S3rGotcha
for ( int counter = 0; counter < 15; counter++)
#23 by 1Сергей
в 1С не надо этого делать. Тут Для...Цикл сам делает ++
#24 by asady
это конструкция языка - это другое. где ты видел инкрементацию переменной цикла в теле цикла?
#25 by S3rGotcha
ну я просто по аналогии решил сделать. Раз в условиях нельзя задать - задал в теле цикла после выполнения. Яжнезнал ))
#26 by 1Сергей
Язык 1С - это "бейсик, переведённый промтом", а не Си
#28 by S3rGotcha
Запустил уже. В процедуре Вроде правильно отображает, но на последний элемент ругается: Индекс находится за границами массива. Т.е. первые 2 параметра со значениями выводятся. Последний - нет.
#30 by Jonny_Khomich
#31 by Гёдза
Для а=0 по МассивСтроки.ВГраница - 1цикл
#32 by S3rGotcha
такая же ерунда. Не помогло.
#33 by asady
у тебя выскакивает сообщение "массив пустой"? ты отладчиком вообще пользоваться умеешь?
#34 by S3rGotcha
нет, у меня выскакивает сообщение Индекс находится за границами массива. Все предыдущие элементы нормально отрабатываются функцией, а вот последний - никак.
#35 by asady
какие сообщения у тебя выскакивают - скопируй сюда включая твои отладочные
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С