Ошибка при перезаполнении переменной ФиксированныйМассив другим фиксированным массивом

1. EvgeniyOlxovskiy 74 15.12.22 12:00 Сейчас в теме
После обновления плаформы до версии 8.3.20.1996 в 1С Рознице (2.3.8.22) стала выскакивать ошибка:

Недопустимое значение
{ОбщийМодуль.ОбщегоНазначенияРТ.Модуль(1019)}:ПараметрыВыбора = Новый ФиксированныйМассив(МассивДляВнешнихОбработок);
{Справочник.СкидкиНаценки.Форма.ФормаЭлемента.Форма(117)}:ОбщегоНазначенияРТ.УдалитьПараметрыВыбораРасширений(Элементы.ВнешняяОбработка.ПараметрыВыбора);

по причине:
Недопустимое значение


Я посмотрел. Вот процедура которая сломалась:
// Удаляет устаревшие параметры выбора 
//  Параметры:
//   ПараметрыВыбора - Фиксированные массив
Процедура УдалитьПараметрыВыбораРасширений(ПараметрыВыбора) Экспорт
	
	Если ПараметрыВыбора.Количество() > 0 Тогда
		МассивДляВнешнихОбработок = Новый Массив;
		
		СтрокаПоиска = НСтр("ru = '<Объект из отключенного расширения конфигурации>'");
		Для каждого ПараметрВыбора Из ПараметрыВыбора Цикл
			Если СтрНайти(ПараметрВыбора.Значение, СтрокаПоиска) = 0 Тогда
				МассивДляВнешнихОбработок.Добавить(ПараметрВыбора.Значение);
			КонецЕсли;
		КонецЦикла;
		
		ПараметрыВыбора = Новый ФиксированныйМассив(МассивДляВнешнихОбработок);
		
	КонецЕсли;
	
Конецпроцедуры
Показать


Как я понимаю процедура пытается заменить фиксированный массив другим фиксированным массивом, а так как массив менять нельзя, то программа выдает ошибку. Как быть в этой ситуации. Прошу подсказать...
У Фиксированного массива
Методы:
ВГраница (UBound)
Количество (Count)
Найти (Find)
Получить (Get)
Заменить метода нет...
Найденные решения
2. SlavaKron 15.12.22 12:08 Сейчас в теме
(1)
МассивДляВнешнихОбработок.Добавить(ПараметрВыбора.Значение);
Код процедуры неправильный. В массив надо добавлять не значение из параметра выбора, весть параметр выбора.
Да и сам подход бредовый – искать НСтр("ru = '<Объект из отключенного расширения конфигурации>'") в значении параметра отбора.
EvgeniyOlxovskiy; +1 Ответить
9. EvgeniyOlxovskiy 74 15.12.22 12:41 Сейчас в теме
(2) Да Вы правы. Сделал как Вы сказали и заработало.

Отредактировал через расширение.
&ИзменениеИКонтроль("УдалитьПараметрыВыбораРасширений")
Процедура ИСП32_УдалитьПараметрыВыбораРасширений(ПараметрыВыбора)
	
	Если ПараметрыВыбора.Количество() > 0 Тогда
		МассивДляВнешнихОбработок = Новый Массив;
		
		СтрокаПоиска = НСтр("ru = '<Объект из отключенного расширения конфигурации>'");
		Для каждого ПараметрВыбора Из ПараметрыВыбора Цикл
			Если СтрНайти(ПараметрВыбора.Значение, СтрокаПоиска) = 0 Тогда
#Удаление				
				МассивДляВнешнихОбработок.Добавить(ПараметрВыбора.Значение);
#КонецУдаления
#Вставка
				МассивДляВнешнихОбработок.Добавить(ПараметрВыбора);
				
#КонецВставки
				
			КонецЕсли;
		КонецЦикла;
		
		ПараметрыВыбора = Новый ФиксированныйМассив(МассивДляВнешнихОбработок);
		
	КонецЕсли;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 15.12.22 12:08 Сейчас в теме
(1)
МассивДляВнешнихОбработок.Добавить(ПараметрВыбора.Значение);
Код процедуры неправильный. В массив надо добавлять не значение из параметра выбора, весть параметр выбора.
Да и сам подход бредовый – искать НСтр("ru = '<Объект из отключенного расширения конфигурации>'") в значении параметра отбора.
EvgeniyOlxovskiy; +1 Ответить
3. DBV 15.12.22 12:13 Сейчас в теме
(2) Возможно ПараметрыВыбора - это не ФиксированныйМассив, а структура или соответствие
4. SlavaKron 15.12.22 12:19 Сейчас в теме
(3) Тип коллекции ПараметрыВыбора не имеет значения. Ее элементом, судя по всему, является ПараметрВыбора (Значение и Имя).
5. DBV 15.12.22 12:22 Сейчас в теме
(4)
является ПараметрВыбора (Значение и Имя)

Если это массив, то какое там имя может быть?
6. SlavaKron 15.12.22 12:29 Сейчас в теме
(5) Элементом массива может быть что угодно, в частности, ПараметрВыбора.
7. DBV 15.12.22 12:31 Сейчас в теме
8. DBV 15.12.22 12:33 Сейчас в теме
(2) а какая разница, что мы добавляем в массив? (Значение параметра или сам параметр)
9. EvgeniyOlxovskiy 74 15.12.22 12:41 Сейчас в теме
(2) Да Вы правы. Сделал как Вы сказали и заработало.

Отредактировал через расширение.
&ИзменениеИКонтроль("УдалитьПараметрыВыбораРасширений")
Процедура ИСП32_УдалитьПараметрыВыбораРасширений(ПараметрыВыбора)
	
	Если ПараметрыВыбора.Количество() > 0 Тогда
		МассивДляВнешнихОбработок = Новый Массив;
		
		СтрокаПоиска = НСтр("ru = '<Объект из отключенного расширения конфигурации>'");
		Для каждого ПараметрВыбора Из ПараметрыВыбора Цикл
			Если СтрНайти(ПараметрВыбора.Значение, СтрокаПоиска) = 0 Тогда
#Удаление				
				МассивДляВнешнихОбработок.Добавить(ПараметрВыбора.Значение);
#КонецУдаления
#Вставка
				МассивДляВнешнихОбработок.Добавить(ПараметрВыбора);
				
#КонецВставки
				
			КонецЕсли;
		КонецЦикла;
		
		ПараметрыВыбора = Новый ФиксированныйМассив(МассивДляВнешнихОбработок);
		
	КонецЕсли;
	
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот