Если верить синтаксис помощнику(он же справочник), то решение простое, элементарное и даже предсказуемое:
в определении функции перед нужным параметром указать ключевое слово Знач - "...Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т.е. изменение значения формального параметра при выполнении функции никак не повлияет на фактический параметр, переданный при вызове функции...".
Я на радостях и отписался что решение найдено.
Но на самом деле никакого эффекта от присутствия этого ключевого слова Знач НЕТУ, что наталкивает на мысль что либо я бестолочь, либо 1с -это один большой баг.
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14052
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1
Цитата
Но на самом деле никакого эффекта от присутствия этого ключевого слова Знач НЕТУ, что наталкивает на мысль что либо я бестолочь, либо 1с -это один большой баг
Не хочу вас обидеть, но 1с это не "один большой баг". Пример кода покажите.
Не хочу вас обидеть, но 1с это не "один большой баг". Пример кода покажите.
Вот это модуль формы обработки:
Функция ПараметрыОбъекта(Объект) Результат = Новый Массив();
Попытка Если Тип("Массив") = ТипЗнч(Объект)Тогда ВерхнийИндекс = Объект.ВГраница(); Для Счетчик = 0 По ВерхнийИндекс Цикл Результат.Добавить(Счетчик); КонецЦикла; Иначе Для Каждого Элемент Из Объект Цикл Результат.Добавить(Элемент.Ключ); КонецЦикла; КонецЕсли; Исключение ВызватьИсключение " |Ошибка: неподдерживаемый тип данных """+ ТипЗнч(Объект) +"""."; КонецПопытки;
Возврат Результат; КонецФункции Функция ПечатьОбъекта(Объект, Параметры = Неопределено) Результат = Строка(ТипЗнч(Объект)) +":";;
Если Неопределено = Параметры Тогда Параметры = ПараметрыОбъекта(Объект); КонецЕсли;
Если Параметры.Количество() Тогда Для Каждого Элемент Из Параметры Цикл Результат = Результат +"["+ Элемент +"]=>'"+ Объект[Элемент] +"',"; КонецЦикла;; Иначе Результат = Результат +"пустой "; КонецЕсли;
Я хочу, чтобы переданная в качестве параметра структура, передавалась по значению, а не по ссылке.
В контексте вышеприведенного примера, я хочу, чтобы структура в переменной "парам1" не менялась после вызова функции.
Вот что я получаю когда выполняю обработку: До вызова функции; Структура:[Ключ1]=>'aadsd'; После вызова функции; Структура:[Ключ1]=>'aadsd',[фывфы]=>'фывфыв';
А должно быть; До вызова функции; Структура:[Ключ1]=>'aadsd'; После вызова функции; Структура:[Ключ1]=>'aadsd';
Живет на форуме
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1443 раз
Рейтинг: 0
Знаемс "фишку", попрбуйте следующий метод для копирования структуры:
Структура1 = Новый Структура(); Структура1.Вставить("Ключ1","Значение1"); Структура2 = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Структура1)); Сообщить(Структура1.Ключ1); Структура2.Вставить("Ключ1", "Значение2"); Сообщить(Структура1.Ключ1); // теперь выводит что Ключ1 = Значение1 Сообщить(Структура2.Ключ1); // а здесь выводит что Ключ1 = Значение2
Но этот способ опасен тем что если в структуре будет вложенная структура, то она не скопируется. Самым верным способом будет написание функции которая создаст новую структуру на основании данных исходной, путем рекурсивного перебора ключей, учитывая возможную вложенность (структура в структуре)
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!