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

‘Declare a variable as a FileDialog object.
   Dim fd As FileDialog

   ‘Create a FileDialog object as a File Picker dialog box.
   Set fd = Application.FileDialog(msoFileDialogFilePicker)

   ‘Declare a variable to contain the path
   ‘of each selected item. Even though the path is aString,
   ‘the variable must be a Variant because For Each…Next
   ‘routines only work with Variants and Objects.
   Dim vrtSelectedItem As Variant

   ‘Use a With…End With block to reference the FileDialog object.
   With fd

       ‘Use the Show method to display the File Picker dialog box and return the user’s action.
       ‘The user pressed the button.
       If .Show = -1 Then

           ‘Step through each string in the FileDialogSelectedItems collection.
           For Each vrtSelectedItem In .SelectedItems

               ‘vrtSelectedItem is aString that contains the path of each selected item.
               ‘You can use any file I/O functions that you want to work with this path.
               ‘This example displays the path in a message box.
               MsgBox «The path is: » & vrtSelectedItem

           Next vrtSelectedItem
       ‘The user pressed Cancel.
       Else
       End If
   End With

   ‘Set the object variable to Nothing.
   Set fd = Nothing

Ошибка при запуске теста

Модератор: Дмитрий Юхтимовский

Ошибка при запуске теста

Добрый день, Вячеслав!
Наши сисадмины установили сервер 1С и SQL на Windows server 2012. Он немного работает медленно, поэтому мы решили запустить Ваш тест и проверить.
Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)

Что это может быть и как побороть? Модули у Вас вырезаны, так что попасть поглядеть в чем ошибка не могу.

stig
 
Сообщений: 6
Зарегистрирован: 30 май 2014, 06:57

Re: Ошибка при запуске теста

Сообщение stig » 30 май 2014, 07:46

Запустил тест на сервере 8.2.17.143
Конфигурация: Простой тест интенсивной записи для платформы 1С:Предприятие + Многопоточный тест записи на диск (2.0.3.3)
Гилёв Вячеслав Валерьевич
(gilev.ru/1c/tpc)

И получил ошибку:
{Обработка.TPC_1C_GILV.Форма.Форма(499)}: Ошибка при вызове метода контекста (ConnectAgent): Произошла исключительная ситуация: Версия компоненты ‘comcntr’ (8.2.19.68) отличается от версии корневого модуля ‘core82’ (8.2.17.143)

Но после этого рабочий стол открылся и тестирование я провел. Не знаю влияла ли эта ошибка на тест или нет.

stig
 
Сообщений: 6
Зарегистрирован: 30 май 2014, 06:57

Re: Ошибка при запуске теста

Сообщение Гилёв Вячеслав » 30 май 2014, 18:47

наверно ставили 8.2 после 8.3, посмотрим что можно сделать
попробуйте перерегистрировать COM-соединение

Гилёв Вячеслав
 
Сообщений: 2719
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Ошибка при запуске теста

Сообщение stig » 30 май 2014, 19:46

Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?

Последний раз редактировалось stig 02 июн 2014, 07:17, всего редактировалось 1 раз.

stig
 
Сообщений: 6
Зарегистрирован: 30 май 2014, 06:57

Re: Ошибка при запуске теста

Сообщение stig » 30 май 2014, 19:57

И получил ошибку:
{Обработка.TPC_1C_GILV.Форма.Форма(499)}: Ошибка при вызове метода контекста (ConnectAgent): Произошла исключительная ситуация: Версия компоненты ‘comcntr’ (8.2.19.68) отличается от версии корневого модуля ‘core82’ (8.2.17.143)

А эту ошибку я уже устранил, спасибо!

stig
 
Сообщений: 6
Зарегистрирован: 30 май 2014, 06:57

Re: Ошибка при запуске теста

Сообщение stig » 02 июн 2014, 07:18

stig писал(а):Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?

Вячеслав, можете подсказать как запустить тест на 8.3?

stig
 
Сообщений: 6
Зарегистрирован: 30 май 2014, 06:57

Re: Ошибка при запуске теста

Сообщение ssavel » 02 июн 2014, 12:54

stig писал(а):

stig писал(а):Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?

Вячеслав, можете подсказать как запустить тест на 8.3?

Добрый день.
Я занимаюсь поддержкой данного теста.
Для более подробного анализа ошибки прошу связаться со мной по скайпу «s.savel».

ssavel
 
Сообщений: 7
Зарегистрирован: 21 мар 2014, 15:30

Re: Ошибка при запуске теста

Сообщение Гилёв Вячеслав » 03 июн 2014, 19:11

stig писал(а):

stig писал(а):Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?

Вячеслав, можете подсказать как запустить тест на 8.3?

У вас есть созданные аккаунта администратора сервера 1с или администратора кластера 1С? Если да, то создайте в администраторах учетку с виндовой авторизацией пользователем, из под которого вы запускаете тест.

Гилёв Вячеслав
 
Сообщений: 2719
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Ошибка при запуске теста

Сообщение stig » 04 июн 2014, 17:32

Понял, спасибо!

stig
 
Сообщений: 6
Зарегистрирован: 30 май 2014, 06:57

Re: Ошибка при запуске теста

Сообщение mechnotech » 07 дек 2019, 11:19

Добрый день!

Версия 8.3.16.1030. Сервер на линуксе 32 битный, postgresql 64 bit 10.10-1, оба на виртуальной машине vmware.
Конфигурации работают нормально.

Но провести данный тест не могу, выпадает следующая ошибка:

При загрузке, снизу выводит:

Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(504)}: Метод объекта не обнаружен (ConnectAgent)

При запуске теста:

Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
      НовыйЭлементСправочника.Записать();             
по причине:
Нарушено условие уникальности данных.

Попытка вставки неуникального значения в уникальный индекс:
ERROR:  duplicate key value violates unique constraint "_reference22_pkey"
DETAIL:  Key (_idrref)=(xd199000c29d1e3bf11ea18c04bac4774) already exists.

Покажите пожалуйста, в какую сторону смотреть?

mechnotech
 
Сообщений: 2
Зарегистрирован: 07 дек 2019, 10:18

Re: Ошибка при запуске теста

Сообщение Дмитрий Юхтимовский » 07 дек 2019, 14:37

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

Дмитрий Юхтимовский
 
Сообщений: 735
Зарегистрирован: 11 фев 2013, 19:28
Откуда: gilev.ru

Re: Ошибка при запуске теста

Сообщение mechnotech » 07 дек 2019, 18:36

Пробовал не один раз, ошибка регулярная, одна и та-же.
Попробую завтра запустить на 64битной версии 1С.

mechnotech
 
Сообщений: 2
Зарегистрирован: 07 дек 2019, 10:18

Re: Ошибка при запуске теста

Сообщение Дмитрий Юхтимовский » 07 дек 2019, 21:25

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

Дмитрий Юхтимовский
 
Сообщений: 735
Зарегистрирован: 11 фев 2013, 19:28
Откуда: gilev.ru

Re: Ошибка при запуске теста

Сообщение Гилёв Вячеслав » 09 дек 2019, 16:17

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

http://1c.postgrespro.ru

Гилёв Вячеслав
 
Сообщений: 2719
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Ошибка при запуске теста

Сообщение akatala » 20 дек 2019, 00:43

Добрый день!

аналогичная ошибка как у mechnotech

Версия 8.3.16.1063. Сервер на CentOs 7.7 64 битный, postgrepro 64 bit 11.6-1 (на 10.6-1 аналогично), оба на виртуальной машине vmware.
Провести данный тест не могу, выпадает следующая ошибка:

При загрузке, снизу выводит:

Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(482)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса

При запуске теста:

Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
      НовыйЭлементСправочника.Записать();             
по причине:
Нарушено условие уникальности данных.

Попытка вставки неуникального значения в уникальный индекс:
ERROR:  duplicate key value violates unique constraint "_reference22_pkey"
DETAIL:  Key (_idrref)=(xc5890050560162d611ea22a8a24a49d6) already exists.

Сборка postgrepro бралась с сайте 1c.postgres.ru

Код: выделить все
rpm --import http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO
echo [postgrespro-1c] > /etc/yum.repos.d/postgrespro-1c.repo
echo name=Postgres Pro 1C repo >> /etc/yum.repos.d/postgrespro-1c.repo
echo baseurl=http://repo.postgrespro.ru//pg1c-archive/pg1c-11.6/centos/7/os/x86_64/rpms/ >> /etc/yum.repos.d/postgrespro-1c.repo
echo gpgcheck=1 >> /etc/yum.repos.d/postgrespro-1c.repo
echo enabled=1 >> /etc/yum.repos.d/postgrespro-1c.repo
yum makecache
yum install -y postgrespro-1c-11-server-11.6-1.el7.x86_64 postgrespro-1c-11-contrib-11.6-1.el7.x86_64
/opt/pgpro/1c-11/bin/pg-setup initdb
/opt/pgpro/1c-11/bin/pg-setup service enable
service postgrespro-1c-11 start

Покажите пожалуйста, в какую сторону смотреть?

akatala
 
Сообщений: 1
Зарегистрирован: 20 дек 2019, 00:33

Re: Ошибка при запуске теста

Сообщение Гилёв Вячеслав » 20 дек 2019, 02:50

в сторону неуникальности в индексе на субд

Гилёв Вячеслав
 
Сообщений: 2719
Зарегистрирован: 11 фев 2013, 15:40
Откуда: Россия, Москва

Re: Ошибка при запуске теста

Сообщение bambr » 26 дек 2019, 12:03

Добрый день.
Я думаю, что проблема в том, что при создании баз в 8.3.16 последней нельзя указать смещение дат. На более старых платформах, где можно указать смещение с любой версией постгрес включая 12 все хорошо.

bambr
 
Сообщений: 1
Зарегистрирован: 26 дек 2019, 11:59

Re: Ошибка при запуске теста

Сообщение Павликовский Андрей » 04 янв 2020, 00:53

Та же ошибка на 8.3.16.1063

Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
      НовыйЭлементСправочника.Записать();             
по причине:
Нарушено условие уникальности данных.

Попытка вставки неуникального значения в уникальный индекс:
ОШИБКА:  повторяющееся значение ключа нарушает ограничение уникальности "_reference22_pkey"
DETAIL:  Ключ "(_idrref)=(x4a95be0d5a10e54711ea2e729ff14b78)" уже существует.

Postgres Pro Standart 12.1

Update: после отката на 8.3.15.1747 проблема пропала.

Павликовский Андрей
 
Сообщений: 1
Зарегистрирован: 04 янв 2020, 00:51

Re: Ошибка при запуске теста

Сообщение sysadmin » 08 янв 2020, 17:43

Та же ошибка на 8.3.16.1063

Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
      НовыйЭлементСправочника.Записать();             
по причине:
Нарушено условие уникальности данных.

Попытка вставки неуникального значения в уникальный индекс:
ОШИБКА:  повторяющееся значение ключа нарушает ограничение уникальности "_reference22_pkey"

postgresql_10.10_4.1C_amd64

sysadmin
 
Сообщений: 4
Зарегистрирован: 08 янв 2020, 17:36

Re: Ошибка при запуске теста

Сообщение Дмитрий Юхтимовский » 08 янв 2020, 19:30

Как можно заметить — у всех подобная ошибка вылезла после перехода на 1С 8.3.16.
И с большой вероятностью такое же поведение может наблюдаться не только на базе теста, а и на любых других базах 1С+PostgreSQL.
Если есть желание принести пользу сообществу — можно отправлять подробно документированное воспроизведение этой ошибки в техподдержку 1С, чтобы они таки исправили ошибку.

Дмитрий Юхтимовский
 
Сообщений: 735
Зарегистрирован: 11 фев 2013, 19:28
Откуда: gilev.ru

Re: Ошибка при запуске теста

Сообщение sysadmin » 09 янв 2020, 09:56

На типовых конфигурациях ошибка не воспроизводится.

sysadmin
 
Сообщений: 4
Зарегистрирован: 08 янв 2020, 17:36

Re: Ошибка при запуске теста

Сообщение Дмитрий Юхтимовский » 09 янв 2020, 10:05

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

Дмитрий Юхтимовский
 
Сообщений: 735
Зарегистрирован: 11 фев 2013, 19:28
Откуда: gilev.ru

Re: Ошибка при запуске теста

Сообщение sysadmin » 09 янв 2020, 20:51

В техподдержку 1С баги репорчу регулярно, но тут вряд ли они будут рассматривать этот тест(не типовая конфигурация)
:(
UPD 09.01.2020: запостил багрепорт, если ответят отпишусь
UPD 09.01.2020:

Здравствуйте,
Ваше обращение зарегистрировано под номером HL-101266.

UPD 13.01.2020: ТП запросила скрины
UPD 14.01.2020: отправил скрины в ТП
UPD 15.01.2020:

Добрый день,
Возможно это ошибка 10215986, проверьте , пожалуйста, на тестовой платформе 8.3.16.1148.

sysadmin
 
Сообщений: 4
Зарегистрирован: 08 янв 2020, 17:36

Re: Ошибка при запуске теста

Сообщение sysadmin » 15 янв 2020, 21:33

UPD 19.01.2020: протестил и отписал в ТП

На платформе 8.3.16.1148 ошибки нет, тест c PostgreSQL проходит.
Результат(попугаи) показывает такой же(1:1) как и с MSSQL.

sysadmin
 
Сообщений: 4
Зарегистрирован: 08 янв 2020, 17:36


Вернуться в Нагрузочное тестирование

Кто сейчас на форуме

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1

Добрый день. Работаю с плагином OLE. Получаю СОМ объект: Далее использую встроенные функции: х = Клиент.RaceList.CurrentRace; После выполнения этого кода вылазит ошибка: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта}: Ошибка при вызове метода контекста (RaceData)     Сообщить(Клиент.RaceList.RaceData(х)); по причине: Типы не совпадают (-1) Проблема в следующем: в описании плагина находится описание встроенных методов: long CurrentRace, TRaceListData RaceData(long Index). То есть Клиент.RaceList.CurrentRace возвратит long, а на вход RaceData требуется тоже long, и я не понимаю в чем причина.

TRaceListData RaceData(long Index , это как 1С может сообщить, она такого типа в глаза не видела

можно попробовать обернуть все в VBS а там с типизацией получше

Клиент.RaceList.RaceData(Клиент.RaceList.CurrentRace) не спасёт?

А в 1цэ при помещении результата вычисления в переменную разве тип этого результата может поменяться?

вернет скорее ComObject, так что, лучше Число(Клиент.RaceList.RaceData(х))

Откуда ComObject возьмётся? Все числа 1цэ хранит с плавающей точкой, так что никакие изыски не помогут, в верное направление задано.

не верю, там же TRaceListData, а не просто long. Так, что и отдаст TRaceListData, а 1С примет как ComObject, т.к. не поймет, что это за тип

Чтобы получить TRaceListData нужно выполнить RaceData, а у ТС как раз это и не получается: … Ошибка при вызове метода контекста (RaceData)

Так мудрено звучит, что аж страшно…

Может 1С не может отобразить структуру TRaceListData? Обычно внутри всегда есть приведение типа через VarCast

Тут пока дело не в отображении, а именно в том, что тип передаваемого в метод параметра не подходит. Если я правильно понимаю.

Что из себя представляет TRaceListData ?

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

ну и Сообщить(Клиент.RaceList.RaceData(х)); что тут можно сообщить ?

да пофих, пусть хоть «ком-объект»

TRaceListData это не «ком-объект» так как «ком-объект» это IDispatch.

Спасибо, посмотрю, попробую…

для начала тупо проверь эти же строки в vbs если робит, то копай дальше

как да пофих, пусть хоть «ком-объект» если 1С не понимает что-то из ole, то com-object. А что оно должно показать иначе ?

Я так думаю, что 1с передает в ComObject тип Variant, а ComObject хочет получить long. Так что делай обертку для своего ComObject.

Что ты понимашь под OLE. Все параметры в IDispatch передаются через OleVariant. ComObject  для 1С это TvarData(varPropVal).VType:=VT_DISPATCH то это ComObject   если VT_RECORD  то не уверен, что 1С может работать с таким параметром

А в х = Клиент.RaceList.CurrentRace; x чему равен в отладчике?

так и я тоже про то. Если не понимает VT_RECORD, то как 1С у себя это проявит. Имхо, только как ComObject и пофиг. А дальше, уж, если получатель знает, что это за штука, то пусть обращается к нужному через точку, если это рекорд

Та же самая ошибка: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта}: Ошибка при вызове метода контекста (Eval)     Сообщить(vbs.Eval(«GetDataLong»)); по причине: Типы не совпадают (-1)

А теперь верни GetDataLong = OLE.RaceList.RaceData(OLE.RaceList.CurrentRace).MaxSpeed

Все, я вкурил. Там не КОМобъект возвращается, потому и тип не совпадает… В общем как в описано

{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта}: Ошибка при вызове метода контекста (Eval)     Сообщить(vbs.Eval(«GetDataLong»)); по причине: Произошла исключительная ситуация (Ошибка выполнения Microsoft VBScript): Требуется объект: ‘OLE.RaceList.RaceData(…)’ Какая то беда… вот опять я что-то упустил совершенно очевидное

Скудно там написано и ничего нового.

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

Там же пример есть test.ert в примере всё работает.

vbscript структуры тоже не умеет готовить.

в LI_OLE_Library.dll есть описание типов. так что типы не причем. всё должно работать.

выводит 1 Ты прям волшебник, я пытался запустить test.ert в 1с7.7, но тоже вылазило куча ошибок. Как сумел?

нажал кнопку «Сформировать»

Может, у вас разные версии LI_OLE_Library.dll ?

значит проблема в получении в 1с конвертируй например в строку в vbs и в 1с уже строку обрабатывай

я думаю не нужно обращаться напямую к RaceData, а использовать функции RaceList типа RaceSectionBeginIndex, RaceSectionFuel

Сообщить(Клиент.RaceList.RaceSectionFuel(НомерРейса)); конеццикла

чо молчишь? работает или нет?

Сообщить(Клиент.RaceList.RaceSectionFuel);

ну всё работает. вопрос закрыт.

Сообщить(Клиент.RaceList.RaceFuelNorm); А вот это уже не работает…. Да и проблема, которая была в первом сообщении не решилась.

проблемы нету. нужно просто вызывать нужные методы и всё.

Проблема в том, что типы этих методов — это экземпляры сишных классов, а не Ком-интерфейсов. Потому возвращает тебе тот набор данных, которая 1С неосиливает. Читай внимательней мануал

1с читает типы из tlb. всё прекрасно работает. получать структуру RaceData автору не нужно. Для доступа к данным структуры есть специальные методы. Ими и надо пользоваться.

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

+ У меня просто на руках есть описание методов для работы с этим плагином в виде: TRaceListData RaceData(long Index) и все. Ну плюсом описание структур, которые я пока не трогал.

в файле «New HTML Help.chm» всё написано вот структура struct TRaceListData методы называются так же как поля структуры RaceSectionBeginIndex RaceSectionEndIndex и т.д.

в метод передаешь номер структуры

и еще. если есть рядом с тобой кто нибудь, попроси его треснуть тебе по башке линейкой. должно помочь. мне помогает.

+ я скачал этот долбаный Locarus Informer. скачал демо данные от туда же. зарегил LI_OLE_Library.dll. запустил 1с. открыл test.ert открыл Locarus Informer тыкнул мышкой на машину в test.ert нажал кнопку «Сформировать» отчет выдал ахиренную таблицу всё работает. теперь делаю всё в обратной последовательности. вот какой я очень добрый сегодня.

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

{C:DOCUMENTS AND SETTINGSADMINРАБОЧИЙ СТОЛРАБОТАРИФЛОКАРУСTEST.ERT}: Поле агрегатного объекта не обнаружено (BBDataDateTime)

ну не знаю. у меня без ошибок отработало. ковырять больше не буду. всё снёс.

Окей, значит ошибка точно у меня и практически наверняка с работой dll…

Тэги: 1С 8

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);
      //Сообщить(НайтиТО);
      Тариф = Новый Структура;
      Тариф.Вставить(«Тариф», НайтиТО);
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,Тариф);
      Сообщить(ЗначениеТО.Ресурс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С.

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