Итератор для значения не определен в переменной
Здравствуйте,ругается 1с вот так "Итератор для значения не определен",я сделал запрос ,ин мне вернул 2 колонки,содержащие ссылки на номенклатуру,я выгрузил в таблицу значений,и поместил в переменную "данныеНормОдежды"это все в модуле обьекта документ,потом в форме документа я хотел сделать вот так
Для Каждого строчка Из данныеНормОдежды Цикл
Если строчка.спецодежда.код= редактируемаяСтрока.текущаястрока.НаименованиеНМНА.код Тогда
редактируемаяСтрока.текущаястрока.СпецодеждаНов =строчка.спецодежда;
редактируемаяСтрока.текущаястрока.ВидНормыНовый =строчка.ВидНормыВыдачи;
иначе
Сообщить("нет по норме");
подскажите,пожалуйстачто не так, если можно поподробней,и не пинайте сильно,я только учусь.
в модуле объекта
Перем данныеНормОдежды Экспорт;
ЗапросНорм = Новый Запрос;
ЗапросНорм.Текст =
"ВЫБРАТЬ
| НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
| НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
|ИЗ
| РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
|ГДЕ
| НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.код = &подразделение
| И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
;
ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
я запутался,я что сказать должен?
есть к примеру 6 строк,возвращает точно.
из отладчика
ВыборкаНорм ТаблицаЗначений ТаблицаЗначений
ВыборкаНорм.Колонки.Спецодежда.ТипЗначения ТипЗначения Null, Номенклатура ОписаниеТипов
ЗапросНорм = Новый Запрос;
ЗапросНорм.Текст =
"ВЫБРАТЬ
| НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
| НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
|ИЗ
| РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
|ГДЕ
| НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
| И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
;
ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Родитель.Код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
(17) ну так обходишь ты не ВыборкаНорм , а данныеНормОдежды
Смысл в этой строчке?
ДанныеНормОдежды= ВыборкаНорм;
там точно между запросом и этой строкой ничего? ДанныеНормОдежды — это не какой-нибудь реквизит объекта или формы, где тип определен?
Если ты просто хочешь обойти результат запроса, либо обходит ТЗ ВыборкаНорм, а лучше вообще не выгружай запрос, а обходи выборку
ВыборкаНорм = ЗапросНорм.Выполнить().выбрать();
Пока Выборка.Следующий() Цикл
// тут твой код
КонецЦикла;
и т.п.
(33) а вдруг ты его украдешь?
ТС, короче, разберись в отладчике, как у тебя вместо ТЗ оказывается ссылка, в какой момент и почему.
Функция ПолучениеНормОдежды(Подразделение,РабочееМестоКод,Дата) экспорт
ЗапросНорм = Новый Запрос;
ЗапросНорм.Текст =
"ВЫБРАТЬ
| НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
| НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
|ИЗ
| РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
|ГДЕ
| НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.код = &подразделение
| И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
;
ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
//СтруктураОтбор = Новый Структура("Подразделение, КодРабочегоМестаНовый, Спецодежда", Подразделение, РабочееМестоКод, Неопределено);
//Пока ВыборкаНорм.Следующий() Цикл
//
//СтруктураОтбор.Спецодежда = ВыборкаНорм.Спецодежда;
//МасСтрСпецодежда = Перемещение.НайтиСтроки(СтруктураОтбор);
Если ВыборкаНорм.Количество()=0 Тогда
ЗапросНорм = Новый Запрос;
ЗапросНорм.Текст =
"ВЫБРАТЬ
| НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
| НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
|ИЗ
| РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
|ГДЕ
| НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
| И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
;
ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",строка(РабочееМестоКод));
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
Если ВыборкаНорм.Количество()=0 Тогда
ЗапросНорм = Новый Запрос;
ЗапросНорм.Текст =
"ВЫБРАТЬ
| НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
| НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
|ИЗ
| РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
|ГДЕ
| НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
| И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
;
ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Родитель.Код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
КонецЕсли;
КонецЕсли;
//КонецЦикла;
// ДанныеНормОдежды= ВыборкаНорм;
возврат ДанныеНормОдежды//МасСтрСпецодежда
КонецФункции // ПолучениеНормОдежды()
Что значит итератор для значения не определен 1с
Недавнее обновление 1С:Бухгалтерии 8.3 (редакция 3.0) на версию 3.0.43.194 преподнесло многим пользователям неприятный сюрприз.
После обновления при попытке зайти в 1С:Предприятие в режиме пользователя у многих начала появляться ошибка «Итератор для значения не определен«:
Это явная ошибка разработчиков 1С, которые не предусмотрели ситуацию, когда у некоторых пользователей не создан производственный календарь для российской федерации (с кодом «РФ»).
Вариантов исправления два (второй самый быстрый).
Первый вариант
- Восстановите базу из архива сделанного перед обновлением.
- Затем создайте и заполните производственный календарь с кодом РФ (вот инструкция).
- Снова повторите обновление — на этот раз ошибки не возникнет.
Второй вариант
Для тех кто не хочет повторять обновление или, не дай бог, не сделал резервную копию перед обновлением.
Скачайте и распакуйте вот эту обработку на рабочий стол (она простейшая, я написал её за 1 минуту — в ней программным способом создаётся производственный календарь с кодом РФ):
В момент возникновения ошибки нажмите кнопку «Ещё» и выберите пункт «Открыть внешнюю обработку»:
Укажите эту обработку и в открывшейся форме нажмите кнопку «Добавить календарь»:
Теперь перезапустите 1с — ошибки больше не возникнет.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.