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

1С 8.3 Итератор для значения не определен

Автор Александр Мун, 18 июл 2019, 10:22

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

Александр Мун

Добрый день!

1С 8.3 БП 3.0

Собственно код:

&НаКлиенте
Процедура ПолеЯПаркПриИзменении(Элемент)

ТЗ = ЗаполнитьЯУсловияРаботы(Объект.ЯндексПарк);

Для каждого Запись из ТЗ Цикл
Сообщить(Строка(Запись.ИмяУсловия) + " " + Строка(Запись.ИД));
КонецЦикла;

КонецПроцедуры

&НаСервере
Функция ЗаполнитьЯУсловияРаботы(ЯндексПарк)
Попытка
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        | ЯПарки.Ссылка КАК ЯндексПарк,
| ЯПаркиТЧУсловияРаботы.Ссылка КАК ЯПаркиТЧУсловияРаботыСсылка,
| ЯПаркиТЧУсловияРаботы.ИмяУсловия,
|   ЯПаркиТЧУсловияРаботы.ИД
|ИЗ
        |   Справочник.ЯПарки КАК ЯПарки
|ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ЯПарки.ТЧУсловияРаботы КАК ЯПаркиТЧУсловияРаботы
|ПО
| ЯПаркиТЧУсловияРаботы.Ссылка = ЯПарки.Ссылка
        |ГДЕ
        |   ЯПарки.Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО
| ЯПарки.Ссылка,
| ЯПаркиТЧУсловияРаботы.Ссылка,
| ЯПаркиТЧУсловияРаботы.ИмяУсловия,
| ЯПаркиТЧУсловияРаботы.ИД
        |";
Запрос.УстановитьПараметр("Ссылка", ЯндексПарк);

Выборка = Запрос.Выполнить().Выбрать();

ТЗ = Новый ТаблицаЗначений;

Пока Выборка.Следующий() Цикл
НСтр = ТЗ.Добавить();
НСтр.ИмяУсловия = Выборка.ИмяУсловия;
    НСтр.ИД = Выборка.ИД;
КонецЦикла;

Возврат ТЗ;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецФункции


Получаю ошибку:

{Справочник.Водители.Форма.ФормаЭлемента.Форма(30)}: Итератор для значения не определен
Для каждого Запись из ТЗ Цикл


Что не так?

antoneus

Не так вот это:

        ТЗ = Новый ТаблицаЗначений;
       
        Пока Выборка.Следующий() Цикл
            НСтр = ТЗ.Добавить();
            НСтр.ИмяУсловия = Выборка.ИмяУсловия;
            НСтр.ИД = Выборка.ИД;   
        КонецЦикла;


Вы просто объявляете таблицу значений, не добавляете колонки и в цикле по выборке пытаетесь запихнуть значения в несуществующие ячейки строки ТЗ. Как вариант попробуйте ТЗ = Запрос.Выполнить().Выгрузить()

Александр Мун

antoneus, ну тогда получаем:
Вариант 1:

ТЗ = Запрос.Выполнить().Выгрузить();

Вариант 2:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИмяУсловия");
ТЗ.Колонки.Добавить("ИД");
Пока Выборка.Следующий() Цикл
    НСтр = ТЗ.Добавить();
    НСтр.ИмяУсловия = Выборка.ИмяУсловия;
    НСтр.ИД = Выборка.ИД;
КонецЦикла;


Получаем ошибку:

Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
{Справочник.Водители.Форма.ФормаЭлемента.Форма(28)}: ТЗ = ЗаполнитьЯУсловияРаботы(Объект.ЯндексПарк);

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'


То есть нужно передавать либо Массив, либо юзать ВременноеХранилище?
Добавлено: 18 июл 2019, 11:50


Использую временноехранилище


&НаКлиенте
...
УИД = ЗаполнитьЯУсловияРаботы(Объект.ЯндексПарк);
ТЗ = ПолучитьИзВременногоХранилища(УИД);
Для Каждого Запись Из ТЗ Цикл
Сообщить(Строка(Запись.ИмяУсловия) + " " + Строка(Запись.ИД));
КонецЦикла;
...

&НаСервере
...
ТЗ = Запрос.Выполнить().Выгрузить();
УИД = УникальныйИдентификатор;
ВременноеХранилище = ПоместитьВоВременноеХранилище(ТЗ, УИД);
Возврат УИД;
...

Получаю ошибку:

Ошибка получения значения из временного хранилища
{Справочник.Водители.Форма.ФормаЭлемента.Форма(29)}: ТЗ = ПолучитьИзВременногоХранилища(УИД);

по причине:
Ошибка получения значения из временного хранилища


Ну тут, то что не так?

antoneus

Тут не так то, что таблицы значений на клиенте не существует. Создавайте реквизит формы с типом Таблица значений и колонками ИмяУсловия и ИД и в процедуре на сервере пишите

РеквизитФормыТЗ.Загрузить(Запрос.Выполнить().Выгрузить())


Александр Мун

antoneus, В общем для меня пока полностью не ясень механизм передачи с сервера на клиент. Почитаю книгу.

Теги:

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

Рейтинг@Mail.ru

Поиск