Имя: Пароль:
1C
1С v8
Итератор для значения не определен в переменной
0 desaint08
 
18.04.16
13:05
Здравствуйте,ругается 1с вот так "Итератор для значения не определен",я сделал запрос ,ин мне вернул 2 колонки,содержащие ссылки на номенклатуру,я выгрузил в таблицу значений,и поместил в переменную  "данныеНормОдежды"это все в модуле обьекта документ,потом в форме документа я хотел сделать вот так
         Для Каждого  строчка Из данныеНормОдежды Цикл
        
            Если строчка.спецодежда.код= редактируемаяСтрока.текущаястрока.НаименованиеНМНА.код Тогда
                            
            редактируемаяСтрока.текущаястрока.СпецодеждаНов    =строчка.спецодежда;
            редактируемаяСтрока.текущаястрока.ВидНормыНовый  =строчка.ВидНормыВыдачи;
        иначе             

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

подскажите,пожалуйстачто не так, если можно поподробней,и не пинайте сильно,я только учусь.
1 salvator
 
18.04.16
13:06
данныеНормОдежды - какой тип?
2 zbv
 
18.04.16
13:06
в модуле объекта

Перем данныеНормОдежды Экспорт;
3 desaint08
 
18.04.16
13:18
(2) это есть
4 desaint08
 
18.04.16
13:19
(1) справочник ссылка
5 desaint08
 
18.04.16
13:21
ЗапросНорм = Новый Запрос;
                ЗапросНорм.Текст =
                "ВЫБРАТЬ
                |    НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
                |    НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
                |ИЗ
                |    РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
                |ГДЕ
                |    НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.код = &подразделение
                |    И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
                ;
                
                                 ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
                ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.код);
                ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
                ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
6 lera01
 
18.04.16
13:22
(4) А какие у тебя строчки в справочникессылке?
7 desaint08
 
18.04.16
13:25
я запутался,я что сказать должен?

СправочникСсылка.Номенклатура,

есть к примеру 6 строк,возвращает точно.
8 Мимохожий Однако
 
18.04.16
13:26
Отладчиком встань на ошибочную строчку и вычисли проблемное значение. Возможно, удивишься.
9 salvator
 
18.04.16
13:27
(4) и как ты ссылку хочешь перебрать?
10 lera01
 
18.04.16
13:27
Ты пытаешься перебрать что-то там называемое Строчка в Справочникессылке? Ну нету там строчек никаких. В таблице значений, которую ты создал в (5), есть что перебирать. А в элементе справочника нету.
11 Sabbath
 
18.04.16
13:30
(4) в (0) говоришь, что там таблица значений, а теперь ссылка
Это не коллекция чтобы ее обходить, смотри, как получаешь переменную, что-то там не так
12 desaint08
 
18.04.16
13:31
я хочу код номенклатуры полученной из запроса сравнивать в поле на форме,заранее выбранном
13 desaint08
 
18.04.16
13:31
секунду
14 Sabbath
 
18.04.16
13:32
(5) ВыборкаНорм - это таблица, а как получил данныеНормОдежды не видно
15 Jokerman
 
18.04.16
13:32
Не видим как присвоил данныеНормОдежды
16 lera01
 
18.04.16
13:33
(14) Для Каждого  строчка Из данныеНормОдежды Цикл а в (5) у тебя ВыборкаНорм таблица.
17 desaint08
 
18.04.16
13:35
из отладчика
ВыборкаНорм    ТаблицаЗначений    ТаблицаЗначений

ВыборкаНорм.Колонки.Спецодежда.ТипЗначения ТипЗначения    Null, Номенклатура    ОписаниеТипов
18 desaint08
 
18.04.16
13:35
ЗапросНорм = Новый Запрос;
                ЗапросНорм.Текст =
                "ВЫБРАТЬ
                |    НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
                |    НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
                |ИЗ
                |    РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
                |ГДЕ
                |    НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
                |    И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
                ;
                
                                 ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
                ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Родитель.Код);
                ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
                ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
                
                //    
                    
        
                
             ДанныеНормОдежды= ВыборкаНорм;
19 desaint08
 
18.04.16
13:37
(16)  да у меня таблица значений,или я не правильно организовал выборку?
20 Мимохожий Однако
 
18.04.16
13:39
Вычисли в отладчике редактируемаяСтрока.текущаястрока
21 Sabbath
 
18.04.16
13:40
(17) ну так обходишь ты не ВыборкаНорм     , а  данныеНормОдежды

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

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

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

ВыборкаНорм = ЗапросНорм.Выполнить().выбрать();
Пока Выборка.Следующий() Цикл
//  тут твой код
КонецЦикла;
и т.п.
22 Sabbath
 
18.04.16
13:41
(21) В смысле ВыборкаНорм.Следующий()
а то вдруг не поймешь
23 desaint08
 
18.04.16
13:50
данныенормОдежды,это я сам переменную написал,а как правильно? если я вдруг в будущем столкнусь с этой ситуацией,в чем ошибка моя?
24 desaint08
 
18.04.16
13:52
(20) редактируемаяСтрока.ТекущаяСтрока    ДокументТабличнаяЧастьСтрока.ПеремещениеСпецодежды.Перемещение    ДокументТабличнаяЧастьСтрока.ПеремещениеСпецодежды.Перемещение
25 Мимохожий Однако
 
18.04.16
13:52
(23)Основная ошибка - нежелание\неумение пользоваться отладчиком и анализировать конкретную ситуацию. Без обид.
26 desaint08
 
18.04.16
13:54
нет вот я сейчас другого человека выбрал и нормально все без ошибок выполнилось
27 desaint08
 
18.04.16
13:54
(25) бро ты подскажи...
28 desaint08
 
18.04.16
13:58
строчка.Спецодежда

Спецодежда    Куртка


СправочникСсылка.Номенклатура
29 Мимохожий Однако
 
18.04.16
13:59
(27)К сожалению, я не телепат.
30 desaint08
 
18.04.16
14:02
я выгружаю таблицу значений из запроса,значение справочник ссылка.номенклатура в переменную,как потом из этой переменной мне сравнить код выгруженной номенклатуры с кодом в поле формы?
31 desaint08
 
18.04.16
14:05
все заработало,само без изменений,странно...
32 desaint08
 
18.04.16
14:20
не непойму я,снова не работает!
33 salvator
 
18.04.16
14:34
(32) Код давай полностью.
34 Sabbath
 
18.04.16
14:54
(33) а вдруг ты его украдешь?

ТС, короче, разберись в отладчике, как у тебя вместо ТЗ оказывается ссылка, в какой момент и почему.
35 desaint08
 
18.04.16
15:19
сейчас будет страшно,но не кричите плз.
36 desaint08
 
18.04.16
15:20
Функция ПолучениеНормОдежды(Подразделение,РабочееМестоКод,Дата)   экспорт
    ЗапросНорм = Новый Запрос;
    ЗапросНорм.Текст =
    "ВЫБРАТЬ
    |    НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
    |    НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
    |ИЗ
    |    РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
    |ГДЕ
    |    НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.код = &подразделение
    |    И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
    ;
    
    ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
    ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.код);
    ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
    ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
    
    //СтруктураОтбор = Новый Структура("Подразделение, КодРабочегоМестаНовый, Спецодежда", Подразделение, РабочееМестоКод, Неопределено);
    //Пока ВыборкаНорм.Следующий() Цикл
    //    
    //СтруктураОтбор.Спецодежда = ВыборкаНорм.Спецодежда;
    //МасСтрСпецодежда = Перемещение.НайтиСтроки(СтруктураОтбор);
    Если ВыборкаНорм.Количество()=0 Тогда
        ЗапросНорм = Новый Запрос;
        ЗапросНорм.Текст =
        "ВЫБРАТЬ
        |    НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
        |    НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
        |ИЗ
        |    РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
        |ГДЕ
        |    НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
        |    И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
        ;
        
        ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
        ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Код);
        ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",строка(РабочееМестоКод));
        ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
        
        Если ВыборкаНорм.Количество()=0 Тогда
            
            ЗапросНорм = Новый Запрос;
            ЗапросНорм.Текст =
            "ВЫБРАТЬ
            |    НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
            |    НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
            |ИЗ
            |    РегистрСведений.НормыВыдачиСпецодежды.СрезПоследних(&НаДату, ) КАК НормыВыдачиСпецодеждыСрезПоследних
            |ГДЕ
            |    НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации.Код = &подразделение
            |    И НормыВыдачиСпецодеждыСрезПоследних.КодРабочегоМеста = &КодРабочегоМестаНов"
            ;
            
            ЗапросНорм.УстановитьПараметр("НаДату", НачалоДня(Дата));
            ЗапросНорм.УстановитьПараметр("подразделение", Подразделение.Родитель.Родитель.Код);
            ЗапросНорм.УстановитьПараметр("КодРабочегоМестаНов",РабочееМестоКод);
            ВыборкаНорм = ЗапросНорм.Выполнить().Выгрузить();
            
        КонецЕсли;
    КонецЕсли;
    //КонецЦикла;
    // ДанныеНормОдежды= ВыборкаНорм;
    
    ДанныеНормОдежды= ВыборкаНорм;    
    
    возврат ДанныеНормОдежды//МасСтрСпецодежда
КонецФункции // ПолучениеНормОдежды()
37 Мимохожий Однако
 
18.04.16
15:24
Переменная ВыборкаНорм почему два раза используется. Сделай вторую переменную хотя бы ВыборкаНорм1. Но делать запрос внутри выборки...?! На какую строку вставал отладчиком?
38 desaint08
 
18.04.16
15:25
а ругалось оно потому что ,я ДанныеНормОдежды=выборкаНорм делал между Конецесли,вот кроме того я писал это после иначе,то есть
Конецесли
иначе ДанныеНормОдежды= ВыборкаНорм;
конецЕсли;
возврат ДанныеНормОдежды;
39 Мимохожий Однако
 
18.04.16
15:25
Есть такая штучка. Называется консоль запросов. На ней потренируйся
40 desaint08
 
18.04.16
15:28
когда один раз то работает,я просто не там все расположил,сейчас работает. как в иерархии элементов сделать запрос?а то 3 раза один и тот же запрос использовать не совсем верно,да?
41 desaint08
 
18.04.16
15:32
спасибо вам, что не бросаете таких как непонятливых я.
42 Мимохожий Однако
 
18.04.16
15:34
Итак. Начнём с постановки ТЗ.
43 desaint08
 
18.04.16
15:40
ищем спецодежду которая положена,есть к примеру 3 подразделения 1(родитель иерархия элементов), 101,1001, цикл мол если не 1001 то 101 и если не там то в 1 есть точно номенклатура,далее я результат запроса помещаю в переменную,и на форме делаю сравнение,с номенклатурой выбранной пользоватем.
44 desaint08
 
18.04.16
15:42
вот теперь благодаря вам все работает,но запрос я так понимаю неоптимален,но в иерархии он не ищет,почему не понятно(
45 Мимохожий Однако
 
18.04.16
15:42
Не надо писать, что ты предполагаешь делать. Напиши, что хочешь получить в результате.
46 desaint08
 
18.04.16
15:46
в результате я хочу 1 запрос который получит значение подразделения.а не 3 как сейчас,но я человек как вы понимаете недалекий,поэтому с готовностью выслушаю что делать.
47 Мимохожий Однако
 
18.04.16
15:47
Не переживай. Опустим эмоции. Что ты хочешь получить? Какие исходные данные?
48 desaint08
 
18.04.16
15:52
я их получил ,только дооолго.
НормыВыдачиСпецодеждыСрезПоследних.Спецодежда,
                |    НормыВыдачиСпецодеждыСрезПоследних.ВидНормыВыдачи
49 Мимохожий Однако
 
18.04.16
16:05
Ты хочешь получить список Спецодежды и нормы выдачи по подразделению на определенную дату? Что потом планируешь  делать с этой таблицей?
50 salvator
 
18.04.16
16:11
(36) А зачем три запроса с тремя подразделениями? Нельзя все три поместить в массив и делать в одном запросе?
51 Мимохожий Однако
 
18.04.16
16:13
(50)Ну, вот... спугнул.
52 desaint08
 
20.04.16
07:53
(50) извините приболел,а поподробней можно? как это сделать?
53 salvator
 
20.04.16
09:16
(52) МассивПодразделений= Новый Массив;
МассивПодразделений.Добавить(СсылкаНаПодразделение1);
МассивПодразделений.Добавить(СсылкаНаПодразделение2);
...
|ГДЕ
    |    НормыВыдачиСпецодеждыСрезПоследних.ПодразделениеОрганизации В (&МассивПодразделений)
54 desaint08
 
20.04.16
11:15
надо попробовать