Запрос =>
з.Текст = «ВЫБРАТЬ
| ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
| ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ПартииТоваровНаСкладахОстатки.Номенклатура.БиТ_КодЮжногоРегиона КАК Код,
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата, ) КАК ПартииТоваровНаСкладахОстатки
|ГДЕ
| ПартииТоваровНаСкладахОстатки.Склад В (&Склад)
| И ПартииТоваровНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Родитель)»;
з.УстановитьПараметр(«Дата», КонецДня(ДатаКон));
з.УстановитьПараметр(«Склад», СписокСкладов);
з.УстановитьПараметр(«Родитель», Номенклатура);
ф= з.Выполнить().Выгрузить();
Ошибка при вызове метода контекста (Выполнить): {(9, 40)}: Неверные параметры
ПартииТоваровНаСкладахОстатки.Склад <<?>>В (&Склад)
ф=з.Выполнить().Выгрузить();
Почему в консоли отрабатывает, а на практике ругается?
В параметрах запроса пишу ЭтотОбъект.Пользователи.Ссылка
bless18 |
|
||
---|---|---|---|
|
Имеется запрос:
Код 1C v 8.х
При выполнении выдается ошибка Поле объекта не обнаружено (Ссылка) |
Yandex |
|
||
---|---|---|---|
|
E_Migachev |
|
||
---|---|---|---|
|
Этотобъект — это что? |
bless18 |
|
||
---|---|---|---|
|
Простите, код немного другой Код 1C v 8.х
И ошибка: Поле объекта не обнаружено (Ссылка) |
bless18 |
|
||
---|---|---|---|
|
Пользователи — это табличная часть обработки |
bless18 |
|
||
---|---|---|---|
|
Пользователи — это так же справочник, в котром хранятся имя пользователя и сотрудника |
bless18 |
|
||
---|---|---|---|
|
При дебаге Код 1C v 8.х
дает тип Код 1C v 8.х
|
E_Migachev |
|
||
---|---|---|---|
|
Тогда тебе нужно писать в запросе условие Пользователи.Ссылка В( &СписокПользоват) и далее выгружать из табличного поляполя список пользоватлейКод 1C v 8.х
|
bless18 |
|
||
---|---|---|---|
|
Попробовала, выдает ошибку: |
bless18 |
|
||
---|---|---|---|
|
Пользователи у меня ТЗ, в которой есть колонки:
ДатаВыполнения Исполнитель Пользователь А как параметр мне нужно передать пользователя системы Код 1C v 8.х
Система сообщает, что Ошибка при вызове метода контекста (Выполнить): {(12, 22)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля |
E_Migachev |
|
||
---|---|---|---|
|
Правильно что ругается, так как нужно писать: Пользователи.Ссылка В (&Ссылка) |
bless18 |
|
||
---|---|---|---|
|
Спасибо, заработало ))
Но в цикл заходить не хочет (( Хотя обхожу его по результатам запроса Код 1C v 8.х
|
E_Migachev |
|
||
---|---|---|---|
|
А чему равно Запрос.Выполнить().Выгрузить().Количество(); |
bless18 |
|
||
---|---|---|---|
|
Запрос.Выполнить().Выгрузить().Количество() |
E_Migachev |
|
||
---|---|---|---|
|
Значить либо нет данных к выборке, либо неправильно составлен запрос *09 |
bless18 |
|
||
---|---|---|---|
|
Если пишу |
E_Migachev |
|
||
---|---|---|---|
|
Правильно, Таблице результата у тебя 7 колонок, но строк 0. т.е. не данных соответствующих заданной выборке *11
Может так получится, попробуй *13: Код 1C v 8.х
|
bless18 |
|
||
---|---|---|---|
|
К сожалению не получается, выдается ошибка |
E_Migachev |
|
||
---|---|---|---|
|
ой, забыл по КАК |
bless18 |
|
||
---|---|---|---|
|
Странно, все равно в цикл не заходит. В чем же может быть дело? *09 |
E_Migachev |
|
||
---|---|---|---|
|
это значит что нет документов РаспределениеЗадачи в которых в табличном поле РаспределениеЗадачиСотрудникам в поле Исполнитель стоит пользователь из списка ссылка *09
А что за конфигурация? |
bless18 |
|
||
---|---|---|---|
|
конфигурация 1С:Предприятие 8.1 (8.1.9.57) |
E_Migachev |
|
||
---|---|---|---|
|
Это номер Платформы, причем очень устаревшей, уже давно есть — 8.1.15.14. обновиться бы лучше. |
bless18 |
|
||
---|---|---|---|
|
конфигурация 1С:Предприятие 8.1 (8.1.9.57) |
bless18 |
|
||
---|---|---|---|
|
Я пишу на этой конфигурации диплом. В компании, в которой я нахожусь, установили эту конфигурацию. Надо попросить, чтобы переставили. Вроде как здесь все на такой работают |
E_Migachev |
|
||
---|---|---|---|
|
Зайди Справка о программе, там первой строчкой буде твое 1С:Предприятие 8.1 (8.1.9.57) |
bless18 |
|
||
---|---|---|---|
|
Просто «Конфигурация» написано
Попробовала убрать в запросе параметры, все заработало. Видимо проблема все-таки в передаче параметра *09 Код 1C v 8.х
|
bless18 |
|
||
---|---|---|---|
|
Только через параметры запроса мне нужно получить пользователя, работающего с системой. Пользователь находится в справочнике Пользователи |
E_Migachev |
|
||
---|---|---|---|
|
В таком случае правильнее использовать запрос вида:
Код 1C v 8.х
Так как в левом соединении нет смысла — пользователи и так есть в реквизите Исполнитель И тепереь у тебя получается вообще по всем пользователям которые есть документах РаспределениеЗадачи! |
E_Migachev |
|
||
---|---|---|---|
|
Вопрос закрыт! |
Подсказка: Для выделения Кода используйте (в редакторе). |
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
MurCode
- Форумы
- Поиск
- О проекте
Неверные параметры в операции сравнения
sway
Дата: 05.04.2010 13:04:29
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Продажи.Регистратор КАК Регистратор, | Продажи.Номенклатура КАК Номенклатура, | Продажи.Количество КАК Количество, | Продажи.СтоимостьБезСкидок КАК Сумма, | Продажи.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | Продажи.НДС КАК СуммаНДС, | Продажи.НСП КАК СуммаНРТ | ИЗ | РегистрНакопления.Продажи КАК Продажи | ГДЕ | Продажи.Регистратор = &Корректировка"; Запрос.УстановитьПараметр("Корректировка", Источник);
ОписаниеОшибки = Ошибка при вызове метода контекста (Выполнить): Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. Продажи.Регистратор <<?>>= &Корректировка
Через внешнюю обработку от КД работает, а через внутренние настройки обмена выдает ошибку.
Подскажите, плиз
Программист 1с
Дата: 05.04.2010 13:17:11
1. А точно в Источник кидаете ссылку? Подозреваю что нет.
2. А зачем в запросе вот эта строка?
Продажи.Регистратор КАК Регистратор
sway
Дата: 05.04.2010 13:50:42
Программист 1с |
1. А точно в Источник кидаете ссылку? Подозреваю что нет. 2. А зачем в запросе вот эта строка? Продажи.Регистратор КАК Регистратор |
Источник в конвертации данных понимается как Источник объект.
Программист 1с |
2. А зачем в запросе вот эта строка? Продажи.Регистратор КАК Регистратор |
«Продажи.Регистратор КАК Регистратор» это в консоли запросов автоматически так написалось. Прошу не обращать на такие вещи внимение.
mista2009
Дата: 05.04.2010 14:57:29
sway |
Источник в конвертации данных понимается как Источник объект. |
А если попробовать вот так
Источник.Ссылка
Запросы же с объектами не работают.
sway
Дата: 06.04.2010 06:29:22
mista2009 | ||
А если попробовать вот так Источник.Ссылка Запросы же с объектами не работают. |
Так тож не получается. И если даже в условие добавить еще, что регистратор является ссылкой именно на документ требуемого типа, тож не работает.
leaf
Дата: 06.04.2010 09:35:26
а детализация по регистратору в регистре когда появляется?
когда заданы параметры виртуальной таблицы или есть всегда …
8.1 под рукой счас нет проверить не могу
попробуйте в регистре задать период
и вообще подобное условие на регистратор можно задать в параметрах таблицы
вроде как …
Программист 1с
Дата: 06.04.2010 10:42:55
А так тоже нет? Источник.Объект.Ссылка
Может он просто не создаете или не находит объект?
KuzEv
Дата: 06.04.2010 19:49:58
sway,
Запрос=Новый Запрос(«
|ВЫБРАТЬ
| РеализацияУслуг.Регистратор,
| РеализацияУслуг.Сумма
|ИЗ
| РегистрНакопления.РеализацияУслуг КАК РеализацияУслуг
|ГДЕ
| Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг»);
KuzEv
Дата: 06.04.2010 19:51:46
sway,
Плюс выведи результат запроса без использования «ГДЕ…». Может у тебя Регистритор=<пусто>/NULL и т.п.
Проблема в следующем. Имеется документ с табличной частью из которой надо выбрать записи определенного вида. В таблице есть поле «ОтветственныйИсполнитель» с типом «СправочникСсылка.Сотрудники». Из этого справочника «Содтрудники» выбирается сотрудник (наименование) и передается в запрос. Надо выбрать записи соответствующие выбранному сотруднику….ИначеВыдает такую ошибку: Ошибка при вызове метода контекста (Выполнить): {(16, 4)}: Неверные параметры «ПОДОБНО»И <<?>>КорректирующиеМероприятия.ОтветственныйИсполнитель ПОДОБНО (&Отв)Подскажите что не так?
Неужели никто не знает??? Я уже всю голову сломал :(Помогите кто может.
Спасибо за ответы!!!Надо было так:
Тэги:
Комментарии доступны только авторизированным пользователям