Что значит итератор для значения не определен 1с

от admin

Итератор для значения не определен в переменной

Здравствуйте,ругается 1с вот так "Итератор для значения не определен",я сделал запрос ,ин мне вернул 2 колонки,содержащие ссылки на номенклатуру,я выгрузил в таблицу значений,и поместил в переменную "данныеНормОдежды"это все в модуле обьекта документ,потом в форме документа я хотел сделать вот так
Для Каждого строчка Из данныеНормОдежды Цикл

Если строчка.спецодежда.код= редактируемаяСтрока.текущаястрока.НаименованиеНМНА.код Тогда

редактируемаяСтрока.текущаястрока.СпецодеждаНов =строчка.спецодежда;
редактируемаяСтрока.текущаястрока.ВидНормыНовый =строчка.ВидНормыВыдачи;
иначе

Сообщить("нет по норме");

подскажите,пожалуйстачто не так, если можно поподробней,и не пинайте сильно,я только учусь.

в модуле объекта

Перем данныеНормОдежды Экспорт;

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

ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();

я запутался,я что сказать должен?

есть к примеру 6 строк,возвращает точно.

из отладчика
ВыборкаНорм ТаблицаЗначений ТаблицаЗначений

ВыборкаНорм.Колонки.Спецодежда.ТипЗначения ТипЗначения Null, Номенклатура ОписаниеТипов

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

ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Родитель.Код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();

(17) ну так обходишь ты не ВыборкаНорм , а данныеНормОдежды

Смысл в этой строчке?
ДанныеНормОдежды= ВыборкаНорм;

там точно между запросом и этой строкой ничего? ДанныеНормОдежды — это не какой-нибудь реквизит объекта или формы, где тип определен?

Если ты просто хочешь обойти результат запроса, либо обходит ТЗ ВыборкаНорм, а лучше вообще не выгружай запрос, а обходи выборку

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

(33) а вдруг ты его украдешь?

ТС, короче, разберись в отладчике, как у тебя вместо ТЗ оказывается ссылка, в какой момент и почему.

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

ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();

//СтруктураОтбор = Новый Структура("Подразделение, КодРабочегоМестаНовый, Спецодежда", Подразделение, РабочееМестоКод, Неопределено);
//Пока ВыборкаНорм.Следующий() Цикл
//
//СтруктураОтбор.Спецодежда = ВыборкаНорм.Спецодежда;
//МасСтрСпецодежда = Перемещение.НайтиСтроки(СтруктураОтбор);
Если ВыборкаНорм.Количество()=0 Тогда
ЗапросНорм = Новый Запрос;
ЗапросНорм.Текст =
"ВЫБРАТЬ
| НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
| НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
|ИЗ
| РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
|ГДЕ
| НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
| И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
;

Читать:
Как отсортировать несколько столбцов в excel одновременно

ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",строка(РабочееМестоКод));
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();

Если ВыборкаНорм.Количество()=0 Тогда

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

ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Родитель.Код);
ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();

КонецЕсли;
КонецЕсли;
//КонецЦикла;
// ДанныеНормОдежды= ВыборкаНорм;

возврат ДанныеНормОдежды//МасСтрСпецодежда
КонецФункции // ПолучениеНормОдежды()

Что значит итератор для значения не определен 1с

Недавнее обновление 1С:Бухгалтерии 8.3 (редакция 3.0) на версию 3.0.43.194 преподнесло многим пользователям неприятный сюрприз.

После обновления при попытке зайти в 1С:Предприятие в режиме пользователя у многих начала появляться ошибка «Итератор для значения не определен«:

Это явная ошибка разработчиков 1С, которые не предусмотрели ситуацию, когда у некоторых пользователей не создан производственный календарь для российской федерации (с кодом «РФ»).

Вариантов исправления два (второй самый быстрый).

Первый вариант

  1. Восстановите базу из архива сделанного перед обновлением.
  2. Затем создайте и заполните производственный календарь с кодом РФ (вот инструкция).
  3. Снова повторите обновление — на этот раз ошибки не возникнет.

Второй вариант

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

Скачайте и распакуйте вот эту обработку на рабочий стол (она простейшая, я написал её за 1 минуту — в ней программным способом создаётся производственный календарь с кодом РФ):

В момент возникновения ошибки нажмите кнопку «Ещё» и выберите пункт «Открыть внешнюю обработку»:

Укажите эту обработку и в открывшейся форме нажмите кнопку «Добавить календарь»:

Теперь перезапустите 1с — ошибки больше не возникнет.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Похожие статьи