Имя: Пароль:
1C
 
Итератор для значения не определен
0 Dmitryy1
 
24.06.24
22:38
Задача заключается в том, чтобы для выделенных элементов дин. списка на форме по кнопке поменять значение реквизита ВАрхиве с типом булево с Истина на Ложь. Крч разархивировать выделанные элементы. Для это добавил кнопку на форме Разархивировать и вот такую логику для нее:
&НаСервере
Процедура РасшФормы_РазархивироватьПослеНаСервере(КАрхивации)


ЗапросДляПолученияДанных = Новый Запрос;
ЗапросДляПолученияДанных.Текст =
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка,
|    Номенклатура.РасшФормы_ВАрхиве КАК РасшФормы_ВАрхиве
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Ссылка В(&МассивСсылок)";

ЗапросДляПолученияДанных.УстановитьПараметр("МассивСсылок", КАрхивации);
ВыборкаПоЗапросу = ЗапросДляПолученияДанных.Выполнить().Выбрать();

Для каждого Стр Из ВыборкаПоЗапросу Цикл
    ВыборкаПоЗапросу.РасшФормы_ВАрхиве = Ложь;
    КонецЦикла;
    
КонецПроцедуры

&НаКлиенте
Процедура РасшФормы_РазархивироватьПосле(Команда)
    КАрхивации = Элементы.СписокРасширенныйПоискНоменклатура.ВыделенныеСтроки;
    РасшФормы_РазархивироватьПослеНаСервере(КАрхивации);
КонецПроцедуры


выдает ошибку: Итератор для значения не определен.
1 sapravka
 
24.06.24
22:51
Ошибка "Итератор для значения не определен" возникает, когда вы пытаетесь итерироваться по значению, которое не является коллекцией объектов. В вашем случае, вы пытаетесь итерироваться по строке, которую возвращает метод ВыделенныеСтроки элемента формы.

Чтобы исправить эту ошибку, вам нужно убедиться, что вы итерируетесь по коллекции строк, а не по одной строке.Вместо использования цикла Для каждого Стр Из ВыборкаПоЗапросу Цикл , вы можете использовать метод Следующий для итерации по каждой выделенной строке.

Вот исправленный код:

&НаСервере
Процедура РасшФормы_РазархивироватьПослеНаСервере(КАрхивации)


ЗапросДляПолученияДанных = Новый Запрос;
ЗапросДляПолученияДанных.Текст =
    "ВЫБРАТЬ
     |    Номенклатура.Ссылка КАК Ссылка,
     |    Номенклатура.РасшФормы_ВАрхиве КАК РасшФормы_ВАрхиве
     |ИЗ
     |    Справочник.Номенклатура КАК Номенклатура
     |ГДЕ
     |    Номенклатура.Ссылка В(&МассивСсылок)";

ЗапросДляПолученияДанных.УстановитьПараметр("МассивСсылок", КАрхивации);
ВыборкаПоЗапросу = ЗапросДляПолученияДанных.Выполнить().Выбрать();

Пока ВыборкаПоЗапросу.Следующий() Цикл
    ВыборкаПоЗапросу.РасшФормы_ВАрхиве = Ложь;
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура РасшФормы_РазархивироватьПосле(Команда)
    КАрхивации = Элементы.СписокРасширенныйПоискНоменклатура.ВыделенныеСтроки;
    РасшФормы_РазархивироватьПослеНаСервере(КАрхивации);
КонецПроцедуры

Теперь ваш код должен работать корректно, и вы сможете разархивировать выделенные элементы списка на форме.
2 Guk
 
24.06.24
22:44
но ведь действительно не определен. итератор то по Стр...
3 Dmitryy1
 
24.06.24
22:50
(1) Пишет поле объекта недоступно для записи
4 Dmitryy1
 
24.06.24
22:53
(3) Загуглил, пишут надо обращаться к данным обьекта не по ссылка а надо Объект
5 sapravka
 
24.06.24
22:56
(3) Ошибка "Поле объекта недоступно для записи" указывает на то, что вы пытаетесь изменить свойство объекта, которое не предназначено для изменения или доступ к которому ограничен. Это может произойти, если свойство является свойством чтения  или если доступ к нему ограничен.

В вашем коде, вы пытаетесь установить свойство РасшФормы_ВАрхиве в значение Ложь. Возможно, это свойство не предназначено для изменения или доступ к нему ограничен в контексте, в котором вы пытаетесь его изменить.

Убедитесь, что свойство РасшФормы_ВАрхиве действительно предназначено для изменения и что вы имеете право изменять его в контексте, в котором вы работаете с объектом. Если это свойство чтения, то вы не сможете его изменить. Если это свойство записи , но доступ к нему ограничен, вам может потребоваться получить соответствующие права доступа или изменить контекст, в котором вы работаете с объектом.
6 Dmitryy1
 
24.06.24
23:04
(5) Я сам создал этот реквизит в расширении, в котором, собственно, и работаю.
7 unbred
 
25.06.24
00:35
(6)
1. если ты вдруг не обратил внимания, то ты пытаешься изменить результат запроса, а не элемент справочника "Номенклатура".
2."Я сам создал этот реквизит" создать-создал. прав то себе насыпал?)
8 Волшебник
 
25.06.24
09:13
(0) ЗапросДляПолученияДанных - плохое имя переменной
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший