Ошибка 1с итератор для значения не определен

Содержание:

1.       Функции итератора

2.       Диагностика ошибки «Итератор не определен»

3.       Ошибка после обновления конфигурации 1С

4.       Итератор для объектов-не коллекций  

1.    Функции итератора

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

Вначале дадим определение того, что такое итератор. Итератор – это специальный интерфейс, функция итератора – давать доступ ко всем элементам из конкретной коллекции, а также предоставлять навигацию по этим элементам. Для простых языков программирования итератором является обычный указатель.

Работа с итераторами для значения в программировании – это, по сути, реализация работы с различными боксами (контейнерами).  

2.    Диагностика ошибки «Итератор не определен»

Ошибка «Итератор для значения не определён» в 1С может появляться по следующим причинам:

1.     обновление конфигурации 1С 8.3;

2.     итератор применялся к тем объектам, которые не являются коллекциями.

Могут быть и иные первопричины возникновения неполадки «Итератор не определен», но это скорее единичные случаи, требующие частного разбора кейса. Далее мы будем опираться на вышеописанные причины возникновения ошибки, так как они являются наиболее распространёнными.  

3.    Ошибка после обновления конфигурации 1С

Опишем ситуацию, когда ошибка «Итератор для значения не определён» возникает при переходе с одного релиза конфигурации 1С на другой. При ошибки обновления конфигурации 1С в справочнике «Производственные календари» попросту не будет некоторой соответствующей записи. То есть нам необходимо сделать запись в этом справочнике. Она должна называться «Российская Федерация» и далее код «РФ».

Данная процедура делается перед обновлением. Если обновление на новый релиз уже было произведено, то необходимо обратно перейти на прежнюю версию (в резервной копии) и сделать запись, как было описано выше, после чего подтвердить стандартные настройки и только после можно проводить обновление конфигурации 1С 8.3:

Рис. 1 Исправление ошибки при обновлении конфигурации 1С

Если резервная копия базы не была создана, то устранение ошибки итератора для значения будет более сложным.

Так как ошибка «Итератор для значения не определён» производит полную блокировку рабочего экрана, то нужно действовать по следующему алгоритму:

1.     вызвать справку, при помощи клавиши «F1»;

2.     вызвать навигационную ссылку, как показано ниже:

Рис. 2 Вызов навигационной ссылки для исправления ошибки при обновлении конфигурации 1С

3.     ввести «1cib/list/Справочник.ПроизводственныеКалендари»:

Рис. 3 В навигационной ссылки для исправления ошибки при обновлении конфигурации 1С

4.     кликнуть на «Перейти» и завести календарь аналогичным образом.  

4.    Итератор для объектов-не коллекций

Если вдруг вышло так, что разработчик допустил оплошность и применил итератор к объекту-не коллекции, также возникнет ошибка «Итератор не определен».

Здесь важно понимать, что итератор – это некоторый протокол, который способствует получению доступа ко всем элементам внутри конкретной коллекции. Также, при помощи итератора, мы не только получаем доступ, но и можем обойти коллекцию.

Есть следующие способы обхода:

·        коллекция как список;

·        коллекция как массив.

Коллекции-списки используют такую конструкцию:

Рис. 4 Конструкции для коллекций списком

В случае обхода коллекций массивом необходим цикл, который будет иметь обращение к элементам из нашей коллекции по индексу.

Так как коллекции, сами по себе, могут быть разнообразными, помимо разделения по массивам и спискам, их также можно поделить на универсальные (таблицы со значениями, различные соответствия, структуры и массивы) и специализированные (например, табличная часть в документе).

Исходя из этого, ошибка «Итератор для значения не определён» может возникать если:

·        итератор был применён к объектам-не коллекциям;

·        доступ к коллекции был прописан не верно (например, вид списка, но обращение как к массиву).

Чтобы избежать появления этой ошибки итератора для значений, необходимо очень внимательно проверять связь всех итераторов с коллекциями и правильность обращения к самой коллекции.

Специалист компании «Кодерлайн»

Айдар Фархутдинов

Ошибка Итератор для значения не определен 1С 8.3 связана с доступом к элементам коллекций в программном коде. Она возникает при обращении через итератор к массиву или таблице значений, которые не являются коллекцией.

Изучив статью, вы получите подробные инструкции, как действовать в случае появления ошибки после:

  • обновления Конфигурации 1С;
  • внесения собственных доработок в 1С.

Поиск ошибки и ее исправление будет рассмотрен на конкретном примере.

Содержание

  • Итератор для значения не определен
    • Поиск ошибки в сервисе 1С
    • Исправление ошибки «Итератор для значения не определен»

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

Ошибка Итератор для значения не определен 1С 8.3 может возникать при обновлении типовой информационной базы и выполнении собственных доработок в Конфигураторе 1С.

Если вы используете типовую 1С, в которую не вносились доработки в Конфигурацию, то, скорее всего, появление этой ошибки связано с выполненным обновлением. В этом случае лучше всего воспользоваться поиском ошибок в сервисе 1С или дождаться следующего релиза обновления 1С.

Поиск ошибки в сервисе 1С

Ошибка 1С Итератор значения не определен может появиться после обновления 1С. Список регистрации этой ошибки в последних обновлениях 1С:Бухгалтерия 3.0 следующий:

  • Документооборот с контролирующими органами;
  • При открытии электронного документа;
  • Очистка кодов маркировки;
  • Сверка оплат налогов;
  • Распаковка пакета электронных документов;
  • Заполнение адреса в Декларации по ЕНВД;
  • Обновление Производственного календаря;
  • и т. д.

Поэтому при получении ошибки Итератор для значения не определен 1С 8.3 после обновления конфигурации нужно воспользоваться поиском ошибки в сервисе 1С:

Для работы с сервисом нужно указать:

  • слова, по которым производится поиск ошибки — в строке Найти;
  • Конфигурацию 1С, где проявилась ошибка.

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

После обновления 1С 8.3 на релиз 3.0.43.194 выходит ошибка Итератор для значения не определен при формировании справки НДФЛ. Что делать?

Инструкция по исправлению ошибки:

  1. Перейдите в сервис поиска ошибок 1С.
  2. Укажите в форме поиска:
    • Строка поискаИтератор;
    • КонфигурацияБухгалтерия предприятия 3.0.
  3. Нажмите кнопку Найти.
    В сервисе поиска ошибок 1С зарегистрирована ошибка 50005128. В ее описании указаны причина появления ошибки и как можно ее исправить: установить код РФ в справочнике Производственный календарь.
  4. Откройте справочник Производственные календари (кнопка Главное меню — Все функции — Производственные календари).
  5. Установите код РФ, как рекомендует 1С.

Сохраните изменения по кнопке Записать и закрыть.

Если есть ограничения на изменение данных в информационной базе, можно обновить конфигурацию на релиз 3.0.50.10, где ошибка уже исправлена разработчиками.

Как правило, такие ошибки регистрируются и исправляются очень быстро. В течении 2-3 дней после сбора информации об ошибках выходит релиз с исправлениями, на который нужно обновиться пользователям 1С.

Исправление ошибки «Итератор для значения не определен»

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

В рассмотренном выше примере с производственным календарем ошибка возникала в общем модуле Учет НДФЛ в строке 12542.

Исправление ошибки в этом случае заключается в открытии указанного модуля Учет НДФЛ и анализа строчки кода 125452.

Но подсказка по месту ошибки выводится не всегда. Поэтому ее исправить довольно сложно. Покажем исправление ошибки 1С Итератор для значений неопределен при подключении внешней печатной формы в программу.

При попытке подключить в 1С внешнюю печатную форму Счет Фактура выданный (ошибка) 1.07.2020 появляется ошибка Итератор для значения не определен.

Поскольку сообщение об ошибке не содержит подсказки о месте ее возникновения, обратите внимание на заполнение параметра регистрации Назначение в модуле объекта внешней печатной формы СведенияОВнешнейОбработке. Раз мы только подключаем эту внешнюю форму в 1С, логично искать ошибку именно в сведениях подключения.

В функции СведенияОВнешнейОбработке указывается параметр Назначение — массив документов, к которым будет подключена внешняя печатная форма. Обратите внимание, что в нашем примере коллекция назначений указывает не на массив данных, а на пустую строку:

Обращение итератора к строке, не являющейся коллекцией, и приводит к появлению ошибки 1С Итератор для значения не определен. Правильный пример кода описывает в процедуре СведенияОВнешнейОбработке массив назначения — документ Счет фактура выданный:

После внесения изменений в МассивНазначений подключение внешней печатной формы Счет Фактура выданный (правильно) 1.07.2020 в 1С выполнится без ошибок.

При правильно прописанном коде в списке печатных форм Счета-фактуры выданные отображается подключенная внешняя печатная форма Счет-фактура от 01.07.2020.

См. также:

  • Неоднозначное поле в запросе
  • Исправление технических ошибок при работе с 1С:Бухгалтерия: для начинающих и опытных пользователей
  • Метод объекта не обнаружен
  • Неизвестный идентификатор формы
  • Переменная не определена

Если Вы еще не подписаны:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы Бухэксперт8, записи поддерживающих эфиров и вы сможете задавать любые вопросы по программе 1С.

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Ни для кого не секрет, что в 1С, как и в каждой информационной системе с большим количеством функций, встречаются ошибки. В каждом выпускаемом релизе компания 1С исправляет их, но из-за постоянного развития и освоения новых областей появляются другие. С ошибкой «Итератор для значения не определен» сталкивались многие программисты и администраторы 1С. Именно поэтому знать о ней нужно каждому специалисту, работающему с системами 1С.

Причины и решение ошибки

Возникновение окна с ошибкой о неопределенном итераторе чаще всего проявляется в двух случаях:

  • Неудачное обновление конфигурации;
  • Обращение через итератор к элементам объектов, не являющихся коллекциями – массивам, таблицам значений и другим.

В первом случае достаточно часто администраторы сталкиваются с одной и той же проблемой: отсутствием в справочнике производственных календарей записи с наименованием «Российская Федерация». Поэтому перед тем, как обновлять конфигурацию, удостоверьтесь, что данный элемент справочника на месте. Если же процесс обновления уже запущен, и вылезла подобная ошибка, то остается только самостоятельно добавить недостающие данные в систему.

По всем вопросам, связанным с ошибками и сбоями в системе, обращайтесь на линию консультаций фирмы 1С, а также оставляйте заявки на нашем сайте. Наши специалисты свяжутся с вами в кратчайшие сроки.

Создать новый календарь в справочнике можно несколькими путями, и первый из них – восстановление резервной копии и дальнейшая работа по обновлению уже с ней. Если же перед обновлением резервная копия создана не была, есть еще один вариант решения проблемы:

Вариант решения проблемы
Вариант решения проблемы

При возникновении ошибки вызываете справку по горячей клавише F1, затем нажимаете на кнопку «Перейти по ссылке…» и пишите в открывшееся окно текст «e1cib/list/Справочник.ПроизводственныеКалендари». Вследствие этого действия вы попадаете в справочник производственных календарей. Далее нужно лишь завести необходимый календарь, и ошибка «Итератор для значения не определен» больше вас не побеспокоит.

Возможность вести недостающий календарь также появляется, если нажать «Еще» («Все действия») на окне с ошибкой и выбрать «Открыть внешнюю обработку». Правда, для этого придется потрудиться и написать программу, добавляющую нужный справочник с правильно заполненными полями. Это несложно, поэтому любой программист справится с этим.

Решение с помощью обработки
Решение с помощью обработки

Вторая причина сложнее, так как здесь нет универсального рецепта. Ее суть в том, что в коде допущена логическая ошибка – вместо обращения к таблице описано обращение к другой переменной. У каждой строки любой таблицы есть свой порядковый номер, через который можно обращаться к ней и ее полям. На фрагменте 1 представлен обход переменной, являющейся коллекцией, а на 2 – попытка обхода текстовой строки, которая закончится ошибкой неопределенного итератора.


НоваяТаблицаЗначений = Новый ТаблицаЗначений;
Для Каждого элемента из НоваяТаблицаЗначений цикл 
    элемента.Номер = итератор;
КонецЦикла;

Фрагмент 1


Текст = "ТекстовоеПоле";
Для Каждого элемента из Текст цикл 
    элемента.Номер = итератор;
КонецЦикла;

Фрагмент 2

Чтобы исправить подобные ошибки и не допускать их в будущем, необходимо разбираться в коде 1С. Если вашей квалификации не хватает, исправлять код, не будучи уверенным в своих действиях, не следует. Обратитесь к нашим специалистам: мы проконсультируем вас, сделаем соответствующие доработки, подобрав для вас оптимальную цену на сопровождение 1С.

Стоит заметить, что в типовом коде конфигураций подобные ошибки не были замечены, а вот доработанные процедуры иногда выдают подобное окно. Поэтому при работе с таблицами стоит быть крайне внимательным и прорабатывать все возможные ситуации.

Итератор (от англ. iterator ― перечислитель) позволяет получать в переменной с указанным именем поочередно все элементы коллекции. К элементам коллекций можно обращаться через числовой индекс (только если коллекция имеет определенную последовательность) или через итератор. В 1С Предприятии более универсальным способом обхода является обход через итератор «Для каждого…», поскольку может применяться для обхода большинства коллекций. Но и у него есть ряд нюансов, из-за которых может возникать ошибка 1С Итератор значения не определен.

Содержание

  • 1 Причины возникновения ошибки
  • 2 Неверное обращение к элементу коллекции
  • 3 Способ исправления
    • 3.1 Вам будет интересно

Причины возникновения ошибки

  • Основная: обращение через итератор к элементу, который не является коллекцией при самостоятельной доработке конфигурации.
  • Дополнительная: обновление конфигурации на новую версию релиза.

Неверное обращение к элементу коллекции

Если обратиться к каталогу ошибок (Публикации ошибок) и задать в окне поиска Итератор для значения не определен 1С 8.3, то окажется не так уж много зарегистрированных ошибок, которые происходят в результате обновления релиза. Всего 67 по всем конфигурациям, что очень мало по сравнению с другими видами зарегистрированных ошибок.

image002

В некоторых ошибках сразу в публикации видно, что сообщение 1С Итератор для значения не определен получено в момент попытки перебора коллекции.

image003

Скорее всего, в этом примере МассивОрганизаций и Вложения имеют значения Неопределено, тогда как обращение через итератор явно предполагает, что данные элементы являются, например, таблицей значений или массивом.

Способ исправления

Если сообщение Итератор для значения не определен было получено сразу после обновления на более свежую версию релиза, необходимо начать с каталога ошибок, и если там нет решений для вашей ситуации, то обратиться к разработчикам.

Когда конфигурация не является типовой, ошибка может быть допущена при самостоятельной доработке программы без участия официальных разработчиков, поэтому и устранять ее придется самим. Для этого необходимо разобраться в причине, которая вызвала ошибку в 1С Итератор для значения не определен.

Универсального рецепта исправления нет, поэтому для каждого такого сообщения придется разбираться в коде.

Для разбора причины возникновения ошибки создадим обработку в конфигурации «1С: Зарплата и управление персоналом». На форме выберем документ для обработки, в нашем случае документ Премия, в котором есть табличные части. Определим, что ТаблицаНачислений — это табличная часть документа.

image004

При обращении через итератор к ТаблицаНачислений в цикле будем получать требуемые нам значения и работать с ними по своему усмотрению. Но если обратиться к другому элементу документа, не являющимся коллекцией, то получим сообщение, что итератор значения не определен.

image005

ИсправленныйДокумент — это ссылка на документ, а не табличная часть, поэтому обращение к такому элементу вызовет следующее:

image006

Часто такие ошибки происходят, когда получают переменную из параметров функции, и ее значение по умолчанию не определено, при этом в дальнейшем обращение происходит как к коллекции. Создадим процедуру ОбработатьТаблицу, в которой будем перебирать строки таблицы значений.

image007

В примере на картинке выше мы передали табличную часть документа в параметр выполняемой процедуры. Но вместо коллекции передать можно и неверное значение. Например, передадим строку или Булево. У выполняемой процедуры один параметр, и примеров неверной передачи можно привести очень много: передача строки, реквизита, значения Неопределено и так далее.

image008

В каждом случае будем получать ошибку, что программа не смогла выполнить процедуру ОбработатьТаблицу, поскольку попыталась обработать через итератор то, что коллекцией не являлось.

image009

Перейдем по кнопке Подробно в режиме конфигуратора в строку, где программа не смогла отработать, и исправим ошибку. В приведенном примере укажем не реквизит документа или Булево, а таблицу.

Бывают случаи, когда таблица значений до момента вызова процедуры была переопределена (до вызова процедуры ОбработатьТаблицу таблица значений ТаблицаНачислений получила значение Неопределено), и у вас никак не получается исправить передаваемый параметр, а выполнение процедуры крайне необходимо для получения правильного результата. Тогда можно попробовать добавить проверку на тип значения получаемого параметра. Например, проверить является ли ТаблицаДанных ТаблицейЗначений.

image010

Когда решение найти не получается, добавьте хотя бы конструкцию «Попытка–исключение» в процедуру или закомментируйте вызов процедуры. Это не является решением, а лишь устраняет проявление ошибки. Попытка не дала программе «запнуться», но и не обработала таблицу так, как предполагалась, а значит, на выходе могут получиться искаженные данные.

image011

См. также:

  • Неоднозначное поле в запросе 1С 8.3
  • Слишком много фактических параметров в 1С 8.3
  • Поле объекта недоступно для записи в 1С 8.3
  • Переменная не определена в 1С 8.3
  • Метод объекта не обнаружен в 1С 8.3

Поставьте вашу оценку этой статье:

Загрузка…

Дата публикации: Апр 29, 2021

Поставьте вашу оценку этой статье:

Загрузка…

Итератор для значения не определен в переменной ☑ 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

надо попробовать

Понравилась статья? Поделить с друзьями:
  • Ошибка 19225 кейс магнум 340
  • Ошибка 1935 ошибка при установке autocad
  • Ошибка 19221 шкода
  • Ошибка 1935 как исправить при установке
  • Ошибка 1922 при удалении касперского