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

   Sanr231

16.10.17 — 16:10

После обновления конфигурации 1с упрощенка 8 до версии 8.3.10.2580 платформы и 3.0.52.42 конфигурации при создании счета вылезла ошибка:

Несоответствие типов (параметр номер ‘1’)

в отладчике:

{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль(838)}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)

        РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

по причине:

Несоответствие типов (параметр номер ‘1’)

На этом мои познания в программировании 1с заканчиваются. Где собака закопана?

   Heckfy

1 — 16.10.17 — 16:18

У тебя Идентификатор имеет тип НЕ УНИКАЛЬНЫЙИДЕНТИФИКАТОР.

А нужно что бы был УникальныйИдентификатор.

МенеджерРегламентныхЗаданий (ScheduledJobsManager)

НайтиПоУникальномуИдентификатору (FindByUUID)

Синтаксис:

НайтиПоУникальномуИдентификатору(<Идентификатор>)

Параметры:

<Идентификатор> (обязательный)

Тип: УникальныйИдентификатор.

Идентификатор регламентного задания.

Возвращаемое значение:

Тип: РегламентноеЗадание; Неопределено.

Если задание для заданного идентификатора не найдено, возвращает Неопределено.

Описание:

Осуществляет поиск регламентного задания по уникальному идентификатору. Получение регламентного задания возможно только для администратора.

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

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

   Sanr231

2 — 16.10.17 — 16:21

Соответственно, что мне нужно сделать?

   Heckfy

3 — 16.10.17 — 16:26

Присвоить переменной Идентификатор тип УникальныйИдентификатор. :)

   Sanr231

4 — 16.10.17 — 16:27

Так заводская конфигурация и модуль только для чтения.

   СамыйУмный

5 — 16.10.17 — 16:28

(4) А ну тогда все..ничего не сделать

   Sanr231

6 — 17.10.17 — 14:45

Функция ПолучитьРегламентноеЗадание(Знач Идентификатор) Экспорт

    
    ВызватьИсключениеЕслиНетПраваАдминистрирования();

    
    Если ТипЗнч(Идентификатор) = Тип(«РегламентноеЗадание») Тогда

        Идентификатор = Идентификатор.УникальныйИдентификатор;

    КонецЕсли;

    
    Если ТипЗнч(Идентификатор) = Тип(«УникальныйИдентификаторИдентификатор») Тогда

        Идентификатор = Новый УникальныйИдентификатор(Идентификатор);

    КонецЕсли;

    
    Если ТипЗнч(Идентификатор) = Тип(«ОбъектМетаданных») Тогда

        РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Идентификатор);

    Иначе

        РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

    КонецЕсли;

    
    Если РегламентноеЗадание = Неопределено Тогда

        ВызватьИсключение( НСтр(«ru = ‘Регламентное задание не найдено.

                                      |Возможно, оно удалено другим пользователем.'») );

    КонецЕсли;

   Sanr231

7 — 17.10.17 — 14:46

Вот весь текст модуля. Где исправить идентификатор?

   X Leshiy

8 — 17.10.17 — 14:47

(0) Кэш чистил?

   Sanr231

9 — 17.10.17 — 14:54

Чистил

   ildary

10 — 17.10.17 — 15:05

(9) выгрузку-загрузку базы делал?

   h-sp

11 — 17.10.17 — 15:09

(8) тии сделай

   Sanr231

12 — 17.10.17 — 15:09

Выгрузку загрузку — не делал.

А что такое тии?

   h-sp

13 — 17.10.17 — 15:11

тестирование и исправление в конфигураторе

   X Leshiy

14 — 17.10.17 — 15:12

(12) Тааак. А как ты чистил кэш?

   Sanr231

15 — 17.10.17 — 15:25

Тестирование  и  исправление запускал.

C:Users1AppDataRoaming1C1Cv82

C:Users1AppDataLocal1C1Cv82

Из них грохнул папки с длинными названиями

Еще пробовал через ClearCache и тонкий клиент

   Sanr231

16 — 17.10.17 — 15:56

Выгрузил — загрузил. Все равно так-же.

   Heckfy

17 — 17.10.17 — 16:33

Пройдись отладчиком, что у тебя в функцию передается? ИМХО, неопределено. И проблема не на самом деле не здесь, а при создании счета.

   Sanr231

18 — 17.10.17 — 16:40

{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль(838)}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)

        РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

по причине:

Несоответствие типов (параметр номер ‘1’)

Это в отладчике

   Sanr231

19 — 17.10.17 — 16:43

Как посмотреть, что в функцию передается?

   Sanr231

20 — 17.10.17 — 16:57

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

   h-sp

21 — 17.10.17 — 17:01

(20) это значит кэш. про кэш наврал.

   mr_K

22 — 17.10.17 — 17:02

Как говАривала Алиса «все чудесатее и чудесатее»)

  

Heckfy

23 — 17.10.17 — 17:12

(21) Не обязательно. Скорее всего на клиенте почистил. :)

  

Sanr231

16.10.17 — 16:10

После обновления конфигурации 1с упрощенка 8 до версии 8.3.10.2580 платформы и 3.0.52.42 конфигурации при создании счета вылезла ошибка:

Несоответствие типов (параметр номер ‘1’)

в отладчике:

{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль(838)}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)

        РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

по причине:

Несоответствие типов (параметр номер ‘1’)

На этом мои познания в программировании 1с заканчиваются. Где собака закопана?

  

Heckfy

1 — 16.10.17 — 16:18

У тебя Идентификатор имеет тип НЕ УНИКАЛЬНЫЙИДЕНТИФИКАТОР.

А нужно что бы был УникальныйИдентификатор.

МенеджерРегламентныхЗаданий (ScheduledJobsManager)

НайтиПоУникальномуИдентификатору (FindByUUID)

Синтаксис:

НайтиПоУникальномуИдентификатору(<Идентификатор>)

Параметры:

<Идентификатор> (обязательный)

Тип: УникальныйИдентификатор.

Идентификатор регламентного задания.

Возвращаемое значение:

Тип: РегламентноеЗадание; Неопределено.

Если задание для заданного идентификатора не найдено, возвращает Неопределено.

Описание:

Осуществляет поиск регламентного задания по уникальному идентификатору. Получение регламентного задания возможно только для администратора.

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

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

  

Sanr231

2 — 16.10.17 — 16:21

Соответственно, что мне нужно сделать?

  

Heckfy

3 — 16.10.17 — 16:26

Присвоить переменной Идентификатор тип УникальныйИдентификатор. :)

  

Sanr231

4 — 16.10.17 — 16:27

Так заводская конфигурация и модуль только для чтения.

  

СамыйУмный

5 — 16.10.17 — 16:28

(4) А ну тогда все..ничего не сделать

  

Sanr231

6 — 17.10.17 — 14:45

Функция ПолучитьРегламентноеЗадание(Знач Идентификатор) Экспорт

    
    ВызватьИсключениеЕслиНетПраваАдминистрирования();

    

    Если ТипЗнч(Идентификатор) = Тип(«РегламентноеЗадание») Тогда

        Идентификатор = Идентификатор.УникальныйИдентификатор;

    КонецЕсли;

    

    Если ТипЗнч(Идентификатор) = Тип(«УникальныйИдентификаторИдентификатор») Тогда

        Идентификатор = Новый УникальныйИдентификатор(Идентификатор);

    КонецЕсли;

    

    Если ТипЗнч(Идентификатор) = Тип(«ОбъектМетаданных») Тогда

        РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Идентификатор);

    Иначе

        РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

    КонецЕсли;

    

    Если РегламентноеЗадание = Неопределено Тогда

        ВызватьИсключение( НСтр(«ru = ‘Регламентное задание не найдено.

                                      |Возможно, оно удалено другим пользователем.’») );

    КонецЕсли;

  

Sanr231

7 — 17.10.17 — 14:46

Вот весь текст модуля. Где исправить идентификатор?

  

X Leshiy

8 — 17.10.17 — 14:47

(0) Кэш чистил?

  

Sanr231

9 — 17.10.17 — 14:54

Чистил

  

ildary

10 — 17.10.17 — 15:05

(9) выгрузку-загрузку базы делал?

  

h-sp

11 — 17.10.17 — 15:09

(8) тии сделай

  

Sanr231

12 — 17.10.17 — 15:09

Выгрузку загрузку — не делал.

А что такое тии?

  

h-sp

13 — 17.10.17 — 15:11

тестирование и исправление в конфигураторе

  

X Leshiy

14 — 17.10.17 — 15:12

(12) Тааак. А как ты чистил кэш?

  

Sanr231

15 — 17.10.17 — 15:25

Тестирование  и  исправление запускал.

C:Users1AppDataRoaming1C1Cv82

C:Users1AppDataLocal1C1Cv82

Из них грохнул папки с длинными названиями

Еще пробовал через ClearCache и тонкий клиент

  

Sanr231

16 — 17.10.17 — 15:56

Выгрузил — загрузил. Все равно так-же.

  

Heckfy

17 — 17.10.17 — 16:33

Пройдись отладчиком, что у тебя в функцию передается? ИМХО, неопределено. И проблема не на самом деле не здесь, а при создании счета.

  

Sanr231

18 — 17.10.17 — 16:40

{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль(838)}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)

        РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);

по причине:

Несоответствие типов (параметр номер ‘1’)

Это в отладчике

  

Sanr231

19 — 17.10.17 — 16:43

Как посмотреть, что в функцию передается?

  

Sanr231

20 — 17.10.17 — 16:57

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

  

h-sp

21 — 17.10.17 — 17:01

(20) это значит кэш. про кэш наврал.

  

mr_K

22 — 17.10.17 — 17:02

Как говАривала Алиса «все чудесатее и чудесатее»)

  

Heckfy

23 — 17.10.17 — 17:12

(21) Не обязательно. Скорее всего на клиенте почистил. :)

 

Пользователь 17277

Заглянувший

Сообщений: 12
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 04.11.2007

Платформа: 1С:Предприятие 8.3 (8.3.10.2561)
Конфигурация: Управление нашей фирмой, редакция 1.6 (1.6.11.81)
База файловая.

Скачал модуль 1С:Треккер Битрикс24 для

Управление небольшой фирмой»

, установил по инструкции.
Выгрузил несколько компаний и контактов на Б24.
Закрыл базу. При открытии выдает предупреждение: «РасширениеБитрикс24: Критичная: Значение контролируемого свойства РежимСовместимости у объекта  не совпадает со значением в расширяемой конфигурации».
При попытке открыть Заказы покупателей, Счета на оплату, Расходные накладные выдает ошибку:
«{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль(833)}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)
РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);
по причине:
Несоответствие типов (параметр номер ‘1’)»

В чем причина?

 

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

По всей видимости расширение 1С, которое используется в фунционале face кард, не может работать на вашем релизе. Расширение 1С тестировалось на 1.6.10.40
Если вам этот функционал не нужен, то можете удалить это расширение, если нужно — адаптировать его под ваш релиз.

 

Пользователь 272462

Постоянный посетитель

Сообщений: 268
Баллов: 25
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 24.07.2014

#3

0

13.10.2017 16:01:58

Цитата
Александр Денисюк написал:
По всей видимости расширение 1С, которое используется в фунционале face кард, не может работать на вашем релизе. Расширение 1С тестировалось на 1.6.10.40
Если вам этот функционал не нужен, то можете удалить это расширение, если нужно — адаптировать его под ваш релиз.

Не подскажите что именно нужно удалить?)

 

Александр Денисюк

Администратор

Сообщений: 4915
Баллов: 827
Авторитет:

1

Рейтинг пользователя:

3

Регистрация: 16.10.2013

#4

0

13.10.2017 16:33:18

Цитата
Станислав Шарапов написал:

Цитата
Александр Денисюк  написал:
По всей видимости расширение 1С, которое используется в фунционале face кард, не может работать на вашем релизе. Расширение 1С тестировалось на 1.6.10.40
Если вам этот функционал не нужен, то можете удалить это расширение, если нужно — адаптировать его под ваш релиз.

Не подскажите что именно нужно удалить?)

Расширение 1С. Можно или через конфигуратор(в списке расширений 1С). Или через режим предприятия. В месте, где хранятся все расширения 1С

Несоответствие типов 1С

Ошибка по причине Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Изучив статью, вы:

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

В какой момент выходит ошибка

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

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

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

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

В окне сообщений уже указано место возникновения ошибки: Несоответствие типов Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

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

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1 С Предприятие:

Из описания видно, что команда СрезПоследних имеет 2 параметра:

  • Период;
  • Отбор.

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

После исправления команды запустите отчет в 1 С Бухгалтерия по кнопке Главное меню — Файл — Открыть:

Теперь отчет формируется правильно!

Исправление ошибки в команде 1С

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2):

1С сообщает место ошибки — Параметр номер 2 при нажатии кнопки ERROR.

Для ее исправления необходимо открыть отчет в Конфигураторе 1С и найти в модуле формы строчку с командой НайтиПоСсылкам.

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

  • СписокСсылок;
  • ОбластьПоиска;
  • ВключитьОбъекты;
  • ИсключитьОбъекты.

Параметр ОбластьПоиска имеет тип «массив», а в нашем примере указано число 1: НайтиПоСсылкам(МассивПоиска, 1, , МассивИсключений)Область поиска — необязательный параметр, поэтому исправленная команда может выглядеть следующим образом: НайтиПоСсылкам(МассивПоиска,  ,  , МассивИсключений).

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть:

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Вот так можно получить ошибку 1С Несоответствие типов в 1С, поэтому контролируйте правильность указания параметров в запросах и командах 1С в Синтаксис-Помощнике

Обслуживание

Заказать консультацию

По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.

1

2

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

Платформа 1с 8.2.15.310, релиз 1.0.12.2 При открытии стандартного отчета Карточка субконто выдается сообщение: Ошибка при вызове метода контекста (Найти поле). Если доступные поля. Найти поле(Отборы.Элементы [Я]_ Левое значение).=Неопределенно Тогда по причине Несоответствии типов (параметр номер 1) <br>Причем такая ошибка выходит только у одного пользователя, у других все нормально открывается.

Sh_S

Дата регистрации: 02.03.2007
Сообщений: 7730

где-то стоит отбор со сравнением с пустым значением, зайдите в настройку и посмотрите

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

А можно ,пожалуиста, по подробнее!

Sh_S

Дата регистрации: 02.03.2007
Сообщений: 7730

мне кажется теперь, что я не права. Под рукой бухгалтерии нет, но в УПП и ЗУПе если поставить отбор по пустому значению выходит просто шапка отчета. Но все-таки посмотрите внимательно на отборы в настройках.

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

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

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

Платформу обновить до последней. Выполнить тестирование и исправление со всеми флагами.

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

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

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

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

Zebraaa

Дата регистрации: 16.03.2012
Сообщений: 23

Кстати, самое интересное, что сохраненных настроек по этому пользователю нет, а по другим есть.

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

Имеются ввиду «Сохраненные варианты отчета».

Обновились на 1C:CRM КОРП 3.0.21.7 Платформа 8.3.18.1208
При попытке выполнить синхронизацию выходит сообщение(см. скриншот).

Подробно:
Несоответствие типов (параметр номер ‘1’)
{ОбщийМодуль.ДлительныеОперации.Модуль(759)}: Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
{ОбщийМодуль.ДлительныеОперации.Модуль(358)}: Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
{Обработка.CRM_КалендарьМенеджера.Форма.Форма.Форма(3068)}: Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
{Обработка.CRM_КалендарьМенеджера.Форма.Форма.Форма(3050)}: Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда

по причине:
Несоответствие типов (параметр номер ‘1’)

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

В платформе 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С.

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

Автор Damates, 18 дек 2012, 20:30

0 Пользователей и 1 гость просматривают эту тему.

Есть такой код:

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);//находит
ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
Сообщить(ЗначениеТО.Ресурс1);//ресурс в регистре сведений

Выдает ошибку:
{Справочник.Лицевые.Форма.ФормаСписка.Форма(79)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
по причине:
Несоответствие типов (параметр номер ‘2’)

Измерение в регистре сведений берется из справочника Тарифы. В чем проблема? Подскажите , пожалуйста!


Второй параметр должен быть: (И снова приходиться цитировать СП… =( , ну неужели клавиша F1 на клавиатуре заблокирована)
ПолучитьПоследнее (GetLast)
Синтаксис:

ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

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

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

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


Спасибо! Все понял Сделал так:

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);
      //Сообщить(НайтиТО);
      Тариф = Новый Структура;
      Тариф.Вставить(«Тариф», НайтиТО);
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,Тариф);
      Сообщить(ЗначениеТО.Ресурс1);
Фишка: Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.


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