Ошибка при вызове метода контекста выбрать недопустимое значение параметра

kaso
26.03.2013 18:28 Прочитано: 20008

Код 1C v 8.х

 		Отбор_КИ = Новый Структура;
Отбор_КИ.Вставить("Объект", Контр.Ссылка);
Отбор_КИ.Вставить("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
Рез = РегистрыСведений.КонтактнаяИнформация.Выбрать(Отбор_КИ);

Ошибка при вызове метода контекста (Выбрать)
Рез = РегистрыСведений.КонтактнаяИнформация.Выбрать(Отбор_КИ);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Не могу понять в чем ошибка?
1С:Предприятие 8.2 (8.2.16.363)

Yandex
Возможно, вас также заинтересует

Реклама на портале

DJ_Serega
26.03.2013 20:45 Ответ № 1

(0) kaso, метод «Добавить()» а не «Вставить()».

kaso
27.03.2013 12:03 Ответ № 2

(1) DJ_Serega, А что для структуры есть метод «Добавить()»?

sashuly
27.03.2013 12:29 Ответ № 3

Чем не устраивает такой метод https://help1c.com/faq82/view/558.html ?


Изменено 27.03.13 12:30:11

kaso
27.03.2013 12:33 Ответ № 4

(3) sashuly, Да я уже переписал просто интересно в чем ошибка я пока еще учусь писать на 8

DJ_Serega
27.03.2013 13:22 Ответ № 5

(2) kaso, Согласен. Ошибочка. Извините.
Тогда вот цитата из СП (Синтакс-помощник):Код

Параметры:
<Отбор> (необязательный)

Тип: Структура.
Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры — значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее».

Возможно, у ваших полях отбора не стоит соответствующий признак. Если устанавливать его не нужно (или нельзя), то лучше использовать запрос для выборки.
Код 1C v 8.х

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

РезультатВыборкаИзРегистраВыполнить = ЗапросВыборкаИзРегистра.Выполнить();
РезультатВыборкаИзРегистра = РезультатВыборкаИзРегистраВыполнить.Выбрать();
РезультатВыборкаИзРегистра = РезультатВыборкаИзРегистраВыполнить.Выгрузить();


Изменено 27.03.13 13:23:08

kaso
27.03.2013 13:40 Ответ № 6

(5) DJ_Serega, Дело в том что «Объект» и «Вид» — это измерения регистра сведений «КонтактнаяИнформация» в которых стоит признак «ведущее». И наскок я понял ошибка в том что я первым параметром передаю структуру. Переписал еще вчера
Код 1C v 8.х

 		Рег_КонтИнф = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
Рег_КонтИнф.Отбор.Объект.Установить(Контр.Ссылка);
Рег_КонтИнф.Прочитать();

Просто интересно почему не работает «Выбрать()» с отбором, без отбора все работает

DJ_Serega
27.03.2013 14:11 Ответ № 7

(6) kaso,
Код

Важно! Структура может содержать только один элемент.

upd: поэтому либо устанавливать отборы и «Прочитать()», либо запросом.


Изменено 27.03.13 14:12:05

kaso
27.03.2013 17:06 Ответ № 8

(7) DJ_Serega, спасибо

kaso
27.03.2013 17:07 Ответ № 9

Вопрос закрыт!

Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
   zak555

2 — 17.03.11 — 19:10

РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
Выбрать (Select)
Вариант синтаксиса: Для периодического регистра

Синтаксис:

Выбрать(<НачалоИнтервала>, <КонецИнтервала>, <Отбор>, <Порядок>)
Параметры:

<НачалоИнтервала> (необязательный)

Тип: Дата; МоментВремени; Граница. Начало интервала, за который будут выдаваться записи периодического регистра сведений. Если не указан, то будут выдаваться записи с самого ранней включительно. Может задаваться значениями типа Дата, МоментВремени или Граница.
<КонецИнтервала> (необязательный)

Тип: Дата; МоментВремени; Граница. Конец интервала, за который будут выдаваться записи периодического регистра сведений. Если не указан, то будут выдаваться записи до самой поздней включительно. Может задаваться значениями типа Дата, МоментВремени или Граница.
<Отбор> (необязательный)

Тип: Структура. Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры — значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее». Вид сравнения может быть только Равно.
Важно! Структура может содержать только один элемент.
Если параметр не указан, то отбор не используется.
<Порядок> (необязательный)

Тип: Строка. Может содержать слово «Возр» или «Убыв», тогда стандартный порядок будет использоваться с указанным направлением.
Может содержать имя поля (реквизита или измерения, для которых указано индексирование) и слово «Возр» или «Убыв», тогда упорядочивание будет производится по указанному полю в указанном порядке.
Значение по умолчанию: «Возр»
Вариант синтаксиса: Для непериодического регистра

Синтаксис:

Выбрать(<Отбор>, <Порядок>)
Параметры:

<Отбор> (необязательный)

Тип: Структура. Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры — значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее».
Важно! Структура может содержать только один элемент.
Если параметр не указан, то отбор не используется.
<Порядок> (необязательный)

Тип: Строка. Может содержать слово «Возр» или «Убыв», тогда стандартный порядок будет использоваться с указанным направлением.
Может содержать имя поля (реквизита или измерения для которых указано индексирование) и через пробел слово «Возр» или «Убыв», тогда упорядочивание будет производится по указанному полю в указанном порядке.
В качестве значения параметра может быть задана строка «<Нет>» («<No>»). Это будет означать, что система выберет наиболее оптимальный порядок обхода такой выборки, который в общем случае не будет соответствовать порядку обхода по умолчанию.
Значение по умолчанию: «Возр»
Возвращаемое значение:

Тип: РегистрСведенийВыборка.
Описание:

Формирует выборку записей регистра сведений.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

Курсы = РегистрыСведений.КурсыВалют;
ОтборВалют = Новый Структура(«Валюта»);
ОтборВалют.Валюта = ВыбВалюта;
ВыборкаКурсовВалют = Курсы.Выбрать(,,ОтборВалют);
Пока ВыборкаКурсовВалют.Следующий() Цикл
   Сообщить(«Дата » + ВыборкаКурсовВалют.Период +
   » Валюта «+СокрЛП(ВыборкаКурсовВалют.Валюта) +
   «, Курс «+  ВыборкаКурсовВалют.Курс );
КонецЦикла;

  

Dismk

7 — 17.03.11 — 19:51

(0) Недопустимое значение параметра (параметр номер ‘3’)
Тип: Структура. Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры — значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение «Индексировать» или установлен признак «Ведущее». Вид сравнения может быть только Равно.
Важно! Структура может содержать только один элемент.

Ошибка при вызове метода контекста(Добавить)

Здравствуйте. Необходимо было изобразить игру Сапёр в 1С, по заданию из задачника Чистова. Код ниже.

По итогу столкнулся с проблемой: <Обработка.сапер.Форма.Форма.Форма(35)>: Ошибка при вызове метода контекста (Добавить)
Группа = ЭтаФорма.Элементы.Добавить(«Ряд «+Х,Тип(«ГруппаФормы»),Элементы.ИгровоеПоле);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
Недопустимое значение параметра (параметр номер ‘1’)

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка при вызове метода контекста
Здравствуйте. У меня возникла проблема (с крупным содержимым). Я пыталась сделать автоматическое.

Ошибка при вызове метода контекста
Помогите. 1с 8.3 УТ 10.3т Задача: Выгрузить реализацию из БП 2.0 и загрузить приходный ордер.

Недопустимое значение параметров элементы добавитьОшибка при вызове метода контекста(Послать)
Всем привет. Чето ни как не разберусь, пробую отправить электронку выдает «Ошибка при вызове метода.

Ошибка при вызове метода контекста (Записать)
Есть кусок кода(стандартная обработка загрузки товара из документа Excel) СтрНоменклатура =.

Решение

Добавлено через 1 минуту

И везде, идентификатор не может содержать пробелов

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Открытие формы (Ошибка при вызове метода контекста)
открываю форму методом открытьФорму(«имяФормы.через точку.из подсказки.все правильно») но не.

Недопустимое значение параметров элементы добавитьОшибка при вызове метода контекста (Добавить)
Помогите разобраться почему не работает!? Код программы: Функция.

Источник

Недопустимое значение параметра (параметр номер ‘1’)

Добрый день.Замучался немного с планировщиком.такой вопрос появилась ошибка
Ошибка при вызове метода контекста (Добавить)
НовыйМастер = ИзмерениеМастера.Элементы.Добавить(выб.Мастер);
по причине:
Недопустимое значение параметра (параметр номер ‘1’)

&НаКлиенте
Процедура Отобразить(Команда)
Планировщик.ТекущиеПериодыОтображения.Очистить();
//Планировщик.ТекущиеПериодыОтображения.Добавить(ПериодОтображенияНачало, ПериодОтображенияКонец);
Планировщик.ТекущиеПериодыОтображения.Добавить(НачалоДня(Текущаядата()), КонецДня(Текущаядата()));
Планировщик.ЕдиницаПериодическогоВарианта = ТипЕдиницыШкалыВремени.Час;
Планировщик.КратностьПериодическогоВарианта = 24;
Планировщик.ОтображатьПеренесенныеЗаголовки = Истина;
Планировщик.ОтступСНачалаПереносаШкалыВремени=8;
Планировщик.ОтступСКонцаПереносаШкалыВремени=3;

// Инициализируем измерения планировщика
ИзмеренияПланировщика = Планировщик.Измерения;
ИзмеренияПланировщика.Очистить();

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Заявка.Ссылка КАК Ссылка,
| Заявка.Мастер КАК Мастер,
| Заявка.ДатаНачала КАК ДатаНачала,
| Заявка.ДатаОкончания КАК ДатаОкончания
|ИЗ
| Документ.Заявка КАК Заявка
|ГДЕ
| ЗаявкаНаРемонтСокр.Дата МЕЖДУ &ДатаНачало И &ДатаКонец»;

Запрос.УстановитьПараметр(«ДатаНачало»,НачалоГода(Текущаядата()));
Запрос.УстановитьПараметр(«ДатаКонец», КонецДня(Текущаядата()));
выб = Запрос.Выполнить().Выбрать();

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

Источник

v8.2: Программное создание таблицы в управляемой форме

Мне необходимо программным образом в справочник Пользователи( в управляемую форму списка) добавить таблицу, отображающую регистр сведений «Контактная информация». Проблема в том, что не получается у этой таблицы объявить поля(колонки), если таблица представляет собой динамический список.

Создание реквизита
реквизиты = Новый Массив;
реквизиты.Добавить(Новый РеквизитФормы(«Поле», Новый ОписаниеТипов («ДинамическийСписок»),,»Поле таблицы»));
ЭтаФорма.ИзменитьРеквизиты(реквизиты);
ЭтаФорма.Поле.ОсновнаяТаблица=»РегистрСведений.КонтактнаяИнформация»;

создание элемента
Элемент = Элементы.Добавить(«Поле», Тип(«ТаблицаФормы»), ЭтаФорма);
Элемент.ПутьКДанным = «Поле»;
Элемент.Видимость = Истина;

При попытке создать элемент, являющийся колонкой таблицы, выдается ошибка:
<Справочник.Пользователи.Форма.ФормаСписка.Форма(211)>: Ошибка при вызове метода контекста (Добавить): Недопустимое значение параметров
Элемент1 = Элементы.Добавить(«Представление»,Тип(«Строка»),Элемент);
по причине:
Недопустимое значение параметров

Ниже код, где возникает ошибка:
Элемент1 = Элементы.Добавить(«Представление»,Тип(«Строка»),Элемент); ошибка возникает здесь!
Элемент1.Вид = ВидПоляФормы.ПолеВвода;
Элемент1.ПутьКДанным = «Поле.Представление»;

Может, кто-нибудь сталкивался с подобной ситуацией? Помогите 🙂

Можно для динамического списка задать свой запрос, но проблема та же((( Не могу создать колонки с соответствующими полями в запросе.

Источник

Вывод дерева значений на управляемую форму

<Форма.Форма.Форма(88)>: Ошибка при вызове метода контекста (Добавить)
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип(«ПолеФормы»), ЭлементДерево);
по причине: Недопустимое значение параметров

ВыборкаПериод = ВыполнениеЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
// Создание Реквизита формы типа ДанныеФормыДерево
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(«Дерево»,
Новый ОписаниеТипов(«ДеревоЗначений»)));
Для Каждого Колонка Из ВыборкаПериод.Колонки Цикл
МассивДобавляемыхРеквизитов.Добавить(
Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, «Дерево»));
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

// Преобразование объекта прикладного типа ДеревоЗначений
// в реквизит управляемой формы (данные формы)
ЗначениеВРеквизитФормы(ВыборкаПериод, «Дерево»);

// Создание элемента формы типа ТаблицаФормы для отображения дерева
ЭлементДерево = Элементы.Добавить(«Дерево», Тип(«ТаблицаФормы»));
ЭлементДерево.ПутьКДанным = «Дерево»;
ЭлементДерево.Отображение = ОтображениеТаблицы.Дерево;

Для Каждого Колонка Из ВыборкаПериод.Колонки Цикл
НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип(«ПолеФормы»), ЭлементДерево);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = «Дерево.» + Колонка.Имя;
КонецЦикла;

Источник

Форум (регистрация не требуется)

Программный изменение формы списка, Динамический список

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

p.s. Просьба задавать вопросы только по программированию. На вопросы по типовым конфигурациям обычно не отвечаю по двум причинам
1. В последнее время редко с ними работаю.
2. Чтобы ответить на вопрос требуется: установить соответствующую базу нужного релиза, смоделировать ситуацию, и только после этого возможно залезть в конфигуратор и разобраться что не так (к сожалению, у меня нет столько времени).

Программный изменение формы списка, Динамический список

Здравствуйте Сергей!
Вывожу программно новый реквизит на управляемую форму списка.
Меняю произвольный запрос из динамического списка(Добавляю в него выбор нужного мне поля).
Хочу вывести новое поле в колонке таблицы.
На строчке кода Элемент.ПутьКДанным = «Список.ВнешнийКод» выдает ошибку, и ругается на неправильный путь.
Как быть? Добавить реквизит в динамический список тоже нельзя.
Код: выделить все ЭтаФормаПерем.Список.ТекстЗапроса = СтрЗаменить(ЭтаФормаПерем.Список.ТекстЗапроса,»СправочникКонтрагенты.Ссылка,»,»СправочникКонтрагенты.Ссылка, СправочникКонтрагенты.ВнешнийКод КАК ВнешнийКод»);

Re: Программный изменение формы списка, Динамический список

НовЭлемент = ЭтаФормаПерем.Элементы.Добавить(«ПолеВнешнийКод»,Тип(«ПолеФормы»),ЭтаФормаПерем.Элементы.Список);
НовЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовЭлемент.ПутьКДанным = «Список.ВнешнийКод»;

и у поля ВнешнийКод необходимо в реквизитах формы поставить галочку «использовать всегда»

Мне до конца не ясна задача, для чего вам все это потребовалось

Более простой вариант: вытащить все колонки и программно регулировать видимость колонок.

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

и у поля ВнешнийКод необходимо в реквизитах формы поставить галочку «использовать всегда»

Все делается таким образом, для того чтобы не вмешиваться в форму.
весь код пишется в общем модуле и не затрагивает форму.
Цель обновление без проблем.

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

У меня все работает:
ЭтаФорма.Список.ТекстЗапроса = СтрЗаменить(ЭтаФорма.Список.ТекстЗапроса,»СправочникКонтрагенты.Ссылка,»,»СправочникКонтрагенты.Ссылка, СправочникКонтрагенты.ВнешнийКод КАК ВнешнийКод,»);
НовЭлемент = ЭтаФорма.Элементы.Добавить(«ПолеВнешнийКод»,Тип(«ПолеФормы»),ЭтаФорма.Элементы.Список);
НовЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовЭлемент.ПутьКДанным = «Список.ВнешнийКод»;

(Это при условии, что в динамическом списке установлен флаг «произвольный запрос», к сожалению под рукой у меня нет свежей БП 3.0, в старой БП 3.0 этот флаг не установлен)

Re: Программный изменение формы списка, Динамический список

Код: выделить все Форма.Список.ТекстЗапроса = СтрЗаменить(Форма.Список.ТекстЗапроса, «СостоянияЭД.СостояниеВерсииЭД», «,ДокументЗаказКлиента.ФАЙТ_ДополнительныйНомер КАК ДополнительныйНомер»);
Форма.Список.УстановитьОбязательноеИспользование(«ДополнительныйНомер», Истина);
Элемент = Форма.Элементы.Добавить(«ПолеДополнительныйНомер», Тип(«ПолеФормы»), Форма.Элементы.Список);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = «Список.ДополнительныйНомер»;

Re: Программный изменение формы списка, Динамический список

Re: Программный изменение формы списка, Динамический список

Источник

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

Исправляем ситуацию

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

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


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

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

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


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

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

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

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

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

{Справочник.НаимСпр.Форма.ФормаСписка}: Ошибка при вызове метода контекста (Выбрать): Недопустимое значение параметра (параметр номер «3») Выборка=Справочники.НаимСпр.Выбрать(,,Новый Структура(«ДатаИмпорта, Фирма», ЭлементыФормы.СправочникСписок.ТекущиеДанные.ДатаИмпорта, Неопределено)); Поля ДатаИмпорта и Фирма справочника индексированы

Структура может содержать только один элемент, о чем есть примечание в синтакс-помощнике. Для отбора по нескольким условиям используй запрос.

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

Тэги:

Комментарии доступны только авторизированным пользователям

bannndi

Гость


Здравствуйте!

Я учусь программировать в 8-ке, такой вопрос — нужно, что бы в данной процедуре отрабатывалась уникальность значений xls файла (по столбцу 1, к примеру), т.е. в справочник два раза не попадала одна и та жа позиция.
Процедура ЗаполнитьСпрСервисЦентрыИзЭксельНажатие(Элемент)
   ConExcel=ПолучитьCOMОбъект(«d:Сервисы.xls»);
   Спр=Справочники.СервисЦентры;
   i=2;
   Пока СтрДлина(ConExcel.Sheets(«Сервисы»).Cells(i,2).Value)>0 Цикл
      НовыйЭлемент=Спр.СоздатьЭлемент();
      z=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;
      НовыйЭлемент.Наименование=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;
      НовыйЭлемент.НомерСЦ=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
      НовыйЭлемент.Записать();
      i=i+1;
      КонецЦикла;
КонецПроцедуры
Или, если есть более грамотное решение по заполнению справочников, тоже интересно узнать профессиональное мнение, спасибо!


Записан
Kivals


Попробуй так:
   Пока СтрДлина(ConExcel.Sheets(«Сервисы»).Cells(i,2).Value)>0 Цикл
      ПроверяемоеЗначение=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
      Если Спр.Выбрать(,,Новый Структура(«НомерСЦ»,ПроверяемоеЗначение)).Следующий() Тогда Продолжить; КонецЕсли;

      НовыйЭлемент=Спр.СоздатьЭлемент();


Записан
bannndi

Гость


Спасибо за ответ,Kivals! Чего-то ругнулась на (,,Новый Структура, где 2 запятые. Может там чего-то определить тоже надо..? (Процедура или функция с указанным именем не определена)

Не, ошибку выдает другую {Справочник.СервисЦентры.Форма.ФормаСписка(8)}: Ошибка при вызове метода контекста (Выбрать): Недопустимое значение параметра (параметр номер «3»)
      Если Спр.Выбрать(,,Новый Структура(«НомерСЦ»,ПроверяемоеЗначение)).Следующий() Тогда Продолжить;

Поставил признак индексации на реквизит НомерСЦ, так загрузка первый раз прошла, а во второй раз пошел бесконечный цикл,снял только через диспетчер задач. Пока ничего не придумал больше Здесь была моя ладья...

« Последнее редактирование: 10-02-2009 17:34 от Алексей1153++ »
Записан
Kivals


Сори — такое часто бывает Улыбаюсь
бесконечный цикл из-за того, что я забыл прирастить индекс строки, потому мы крутимся в одной строке файла…
Потому я стараюсь прирост писать в начале цикла:
   i=2-1; // уменьшим на 1, чтобы в цикле увеличить
   Пока Истина Цикл // бесконечный цикл — прерываем по условию
      i=i+1;
      Если СтрДлина(ConExcel.Sheets(«Сервисы»).Cells(i,2).Value)<=0 Тогда Прервать; КонецЕсли; // заметь — условие обратное

      ПроверяемоеЗначение=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
      Если Спр.Выбрать(,,Новый Структура(«НомерСЦ»,ПроверяемоеЗначение)).Следующий() Тогда Продолжить; КонецЕсли;
      НовыйЭлемент=Спр.СоздатьЭлемент();


Записан
bannndi

Гость


Kivals, спасибо, сейчас поиспытываю!
Такая история произошла — заполнились все 999 строк пустыми значениями.Только 2 из 4-х значения занеслись из

таблицы правильно)) Может не так чего-то сделал.
Сейчас по другомуы делаю немного:
   ConExcel=ПолучитьCOMОбъект(«d:Сервисы.xls»);
   Спр=Справочники.СервисЦентры;
   i=1;
   Пока Истина Цикл
      i=i+1;
      Если СтрДлина(ConExcel.Sheets(«Сервисы»).Cells(i,1).Value)=0 Тогда Прервать
         КонецЕсли;
      ПроверяемоеЗначение=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
      Если Спр.Выбрать(,,Новый Структура(«НомерСЦ»,ПроверяемоеЗначение)).Следующий()
         Тогда Продолжить;
      КонецЕсли;
      НовыйЭлемент=Спр.СоздатьЭлемент();
      z=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;
      НовыйЭлемент.Наименование=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;
      НовыйЭлемент.НомерСЦ=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
      НовыйЭлемент.Записать();
      КонецЦикла;
Kivals, очень помог, спасибо!
Один инкремент оказался лишним))
Еще вопросик: не могу понять как сделать в том же цикле проверку и по второму полю, чтобы наименование если

пустое, то не заносить в справочник?


Записан
Kivals


не могу понять как сделать в том же цикле проверку и по второму полю, чтобы наименование если пустое, то не заносить в справочник?
Точно так же (тем же методом с использованием Продолжить):
      Если СтрДлина(ConExcel.Sheets(«Сервисы»).Cells(i,1).Value)=0 Тогда Прервать; КонецЕсли;
      Наименование=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;
      Если ПустаяСтрока(Наименование) Тогда Продолжить; КонецЕсли;

      ПроверяемоеЗначение=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
      Если Спр.Выбрать(,,Новый Структура(«НомерСЦ»,ПроверяемоеЗначение)).Следующий()
         Тогда Продолжить;
      КонецЕсли;

ПустаяСтрока в отличии от СтрДлина «не замечает» пробелов, т.е. если у тебя строка из одних пробелов, табуляций и переносов строк — то ПустаяСтрока() вернет Истина, а СтрДлина() — длину строки в символах (не ноль)


Записан
bannndi

Гость


   Наименование=ConExcel.Sheets(«Сервисы»).Cells(«i,2»).Value;
      Если ПустаяСтрока(Наименование) Тогда Продолжить;
         КонецЕсли;
      ПроверяемоеЗначение=ConExcel.Sheets(«Сервисы»).Cells(i,1).Value;
Чего-то я так сделал, и выдала, вот блин)):
{Справочник.СервисЦентры.Форма.ФормаСписка(10)}: Ошибка при вызове метода контекста (Cells): Произошла исключительная ситуация (0x80020005)
      Наименование=ConExcel.Sheets(«Сервисы»).Cells(«i,2»).Value;


Записан
Kivals


Cells(«i,2») и Cells(i,2) — это разные ячейки Улыбаюсь


Записан
bannndi

Гость


Cells(«i,2») и Cells(i,2) — это разные ячейки Улыбаюсь

)) Да, проглядел)). Таких наверно и не бывает как Cells(«i,2»)
Все получилось,Kivals! Спасибо огромное! Класс!
Если не трудно, поясни пож-ста, что делает эта строка?
z=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;


Записан
bannndi

Гость


Я сейчас убрал эту строку, ничего не произошло плохого, видимо просто задается имя для значения Cells(i,2), но потом нигде не используется, ну ладно, разобрались)))


Записан
Kivals


Если не трудно, поясни пож-ста, что делает эта строка?
z=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;

Присваивает переменной z значение из ячейки колонки «B» (2-й по счету) строки i на листе Сервисы активной книги. Тип значения определяется типом значения в ячейке.


Записан
bannndi

Гость


Если не трудно, поясни пож-ста, что делает эта строка?
z=ConExcel.Sheets(«Сервисы»).Cells(i,2).Value;

Присваивает переменной z значение из ячейки колонки «B» (2-й по счету) строки i на листе Сервисы активной книги. Тип значения определяется типом значения в ячейке.

Ну да, я почти так же сказал, Kivals))
Еще раз спасибо большое))


Записан

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста выполнить поле не найдено
  • Ошибка при вызове метода контекста выбрать измерение не найдено
  • Ошибка при вызове метода контекста выполнить пакет
  • Ошибка при вызове метода контекста вставить область
  • Ошибка при вызове метода контекста выполнить ошибка выполнения запроса