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

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

Я
   tatoshka0403

18.05.18 — 12:46

&НаКлиенте

Процедура НазначитьЯчейку(Команда)

    Пустышка=Пустышка();

    КлючЗаписи = Новый Структура;

    КлючЗаписи.Вставить(«Номенклатура», Номенклатура);

    КлючЗаписи.Вставить(«Склад», Склад);

    КлючЗаписи.Вставить(«Помещение»,Пустышка.Помещение);

    КлючЗаписи.Вставить(«Ячейка»,Пустышка.Ячейка );

    
    МассивКлюча = Новый Массив;

    МассивКлюча.Добавить(КлючЗаписи);

    
    КлючЗаписиРегистра = Новый(«РегистрСведенийКлючЗаписи.РазмещениеНоменклатурыПоСкладскимЯчейкам», МассивКлюча);

    
    П = Новый Структура(«Ключ», КлючЗаписиРегистра);

    
    ОткрытьФорму(«РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам.ФормаЗаписи», П);

КонецПроцедуры

Выдает ошибку:

{Документ.ПриходныйОрдерНаТовары.Форма.ФормаДокумента.Форма(3047)}: Ошибка при вызове метода контекста (ОткрытьФорму)

   ОткрытьФорму(«РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам.ФормаЗаписи», П);

по причине:

Объект не найден

Помогите решить.

   Buster007

1 — 18.05.18 — 12:59

подозреваю, что нет такой записи.

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

   tatoshka0403

2 — 18.05.18 — 13:04

(1) ОткрытьФорму(«РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам.ФормаЗаписи», П);

если убираю П то работает, но параметры не передает.

ОткрытьФорму(«РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам.ФормаЗаписи», КлючЗаписи );

так тоже открывается но параметры не передает

   Buster007

3 — 18.05.18 — 13:10

КлючЗаписиРегистра = Новый(«РегистрСведенийКлючЗаписи.РазмещениеНоменклатурыПоСкладскимЯчейкам», КлючЗаписи);

так не работает?

   ptiz

4 — 18.05.18 — 13:41

(0) «Объект не найден» — значит нет такой записи

   ptiz

5 — 18.05.18 — 13:44

А в типовых есть удобная функция ОткрытьФормуЗаписиРегистраСведенийПоОтбору()

   Мандалай

6 — 18.05.18 — 13:53

Установи нормальное имя переменной, а не П.

   Nikoss

7 — 18.05.18 — 13:56

(4) запись 100% есть, но такой код как в (0) выдает «Объект не найден»

   Nikoss

8 — 18.05.18 — 13:57

(6) чем тебе имя не нравится?) Так весь СП написан

   tatoshka0403

9 — 18.05.18 — 14:15

(5) пишет нет такой

   Мандалай

10 — 18.05.18 — 14:24

Попробуй глобальным поиском, может товарищ говорит про БСП

   ptiz

11 — 18.05.18 — 14:35

(7) » запись 100% есть» — тогда не было бы ругани

Проверь еще раз отбор и типы значений

   ptiz

12 — 18.05.18 — 14:36

А если регистр периодический, то должен быть и период в отборе.

   Nikoss

13 — 18.05.18 — 14:43

(12) все перепроверил

я думаю, если у меня как и у ТС одно и тоже, на разных база, то дело именно в коде

   tatoshka0403

14 — 18.05.18 — 14:44

(12) РС не периодический

   tatoshka0403

15 — 18.05.18 — 14:46

Мне открыть открыть форму создания новой записи независимого регистра сведений, с переданными в него реквизитами.

   Nikoss

16 — 18.05.18 — 14:46

(15) получитьФорму -> заполнитьРеквизиты

на сервер

Открыть форму

   Nikoss

17 — 18.05.18 — 14:47

чеж сразу не сказал?

   Nikoss

18 — 18.05.18 — 14:47

(17) к (15)

   ptiz

19 — 18.05.18 — 15:19

(15) Тогда поменять:

П = Новый Структура(«ЗначенияЗаполнения», КлючЗаписи);

Это если у измерений включена галка «Заполнять из данных заполнения»».

Если нет, то тоже просто:

Форма = ПолучитьФорму(«РегистрСведений.РазмещениеНоменклатурыПоСкладскимЯчейкам.ФормаЗаписи»);

ЗаполнитьЗначенияСвойств(Форма, КлючЗаписи);

Форма.Открыть();

p.s. КлючЗаписи — как у тебя, т.е. структура

   Nikoss

20 — 22.05.18 — 07:58

(20) и всёже интересно, почему не работает код из (0), в интернете фигурирует только такой

   FIXXXL

21 — 22.05.18 — 08:31

(19) второй способ не заполнит Ключ, возможны интересные фокусы :)

   ptiz

22 — 22.05.18 — 08:56

(21) Можно подробнее? И как правильно в том случае, если не включено «Заполнять из данных заполнения»?

  

FIXXXL

23 — 22.05.18 — 12:11

(22) если не заполнен параметр Ключ, форма(платформа) не понимает, что это существующая запись и ведет себя неадекватно, данные не сохраняет с первого раза и т.п.

ну как если при открытии формы документа вместо Ключа-ссылки просто набить форму данными по существующему документу :) только в случае документа получим копию, а в случае РС копии не допустимы

Решение вопроса:

1) Войдите на сервер 1С (т.е где базы 1С) с правами администратора. 2. Зайти в Пуск>Панель управления>Администрирование>Службы> Найти в списке служб службу «Агент сервера 1С:Предприятия 8.3» / «1C:Enterprise 8.3 Server Agent» и остановить её. 2) Найдите папку reg_1541 или ввести в адресной строке «%ProgramFiles%1cv8srvinforeg_1541» (расположение зависит от разрядности установленного сервера 1С) . 3) Откройте каталог snccntx / (пример C:Program Files1cv8srvinforeg_1541snccntx9ea019eb-ccdd-41c3-ac92-75661dfadd19). 4) Удалите файлы snccntx.00000000 и snccntx с расширением *.dat — как раз искомые сеансовые данные. 5) Зайти в Пуск>Панель управления>Администрирование>Службы> Найти в списке служб службу «Агент сервера 1С:Предприятия 8.3» / «1C:Enterprise 8.3 Server Agent» и запустить службу! Дополнительно почистить кэш пользователя зайдя в каталоги C:ПользоватетьИмя_ПользователяAppDataRoaming1C1cv8 или C:ПользоватетьИмя_ПользователяAppDataLocal1C1Cv8 удалить в каталогах буквенно циферные папки. Всё готово к работе.

Восстановление битых ссылок типа «Объект не найден»

24.10.2018

Поиск ссылок на удалённые объекты (битых ссылок), восстановление удаленного объекта, универсальный редактор реквизитов

Версия 2.0

Добавлена функция поиска битых ссылок.

Щелкаем на ссылке «Поиск битых ссылок», галками выбираем область поиска, нажимаем «Начать поиск».

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

Версия 1.2

Добавлен редактор реквизитов восстанавливаемого объекта.

Нужно скопировать текстовое представление битой ссылки типа «<Объект не найден> (38:98030025906bdb7111e3b5a589fcb6cb)» в соответствующее поле и нажать кнопку «Шаг 1. Начать восстановление».

После этого откроется редактор реквизитов. Нужно заполнить те реквизиты, которые явно или по смыслу (например, дата документа) являются обязательными, и нажать кнопку «Шаг 2. Записать восстановленный объект».

Далее нужно попытаться открыть форму восстановленного объекта с помощью кнопки «Открыть форму объекта». Если вместо формы будет возникать ошибка, то нужно более тщательно заполнить реквизиты и повторно сохранить объект с помощью кнопки «Записать объект».

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

Версия 1.1

Нужно скопировать текстовое представление битой ссылки типа «<Объект не найден> (38:98030025906bdb7111e3b5a589fcb6cb)» в соответствующее поле и нажать кнопку «Восстановить» — будет создан объект-пустышка. После этого нужно будет руками заполнить реквизиты восстановленного объекта.

asdfr1
16.01.2013 13:10 Прочитано: 3023

в сформированном отчёте при двойном щелчке необходимо вывести форму справочника, неудаётся дотянутся до самой формы.
Кодик=СписокИнф[2].Значение;
Форма=Справочники.ИзделияВЭксплуатации.НайтиПоКоду(Кодик);

Область.Параметры.ФормаИзделия= Форма.Открыть();

Где ФормаИзделия -ПараметрРасшифровки

как то так, подскажите плиз

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

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

asdfr1
16.01.2013 13:53 Ответ № 1

Кодик=СписокИнф[2].Значение;
Найти=Справочники.ИзделияВЭксплуатации.НайтиПоКоду(Кодик);
Форма = Найти.ПолучитьФорму();
Откр= Форма.Открыть();

Область.Параметры.ФормаИзделия= Откр;

Ошибка при вызове метода контекста (ПолучитьФорму)
Форма = Найти.ПолучитьФорму();
по причине:
Элемент не выбран!

E_Migachev
16.01.2013 13:54 Ответ № 2

(0) asdfr1, а это что? -СписокИнф[2].Значение;

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

Код 1C v 8.х

 Форма=Справочники.ИзделияВЭксплуатации.НайтиПоКоду(Кодик); 
Форма.ПолучитьФорму().Открыть();
asdfr1
16.01.2013 13:56 Ответ № 3

СписокИнф[2].Значение — код элемента справочника

E_Migachev
16.01.2013 14:25 Ответ № 4

тогда Код 1C v 8.х

 Форма=Справочники.ИзделияВЭксплуатации.НайтиПоКоду(СписокИнф[2].Значение); 
Форма.ПолучитьФорму().Открыть();
asdfr1
16.01.2013 15:34 Ответ № 5

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

Если Строка.ИзделиеВЭксплуатацииЗаводскойНомер=СправочникПоиск Тогда // Неопределено

Сообщить(Строка.ИзделиеВЭксплуатацииЗаводскойНомер);
ОбластьДетальныхЗаписей.Параметры.Расшифровка=»Ёпта2″;

Иначе
ЗавНомерМля=ВыборкаДетальныеЗаписи.ИзделиеВЭксплуатацииЗаводскойНомер;

Ёпта1=СправочникПоиск.ПолучитьФорму();
Ёпта2=Ёпта1.Открыть();
ОбластьДетальныхЗаписей.Параметры.Расшифровка=Ёпта1;
КонецЕсли;
КонецЦикла;


Изменено 17.01.13 14:20:13 по причине: изменилась ошибка

asdfr1
17.01.2013 15:19 Ответ № 6

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

Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове конструктора wsопределения ошибка http
  • Ошибка при вызове конструктора wsопределения код ответа сервера 500
  • Ошибка при вызове конструктора wsопределения аутентификация пользователя не выполнена
  • Ошибка при вызове конструктора httpсоединение установлен безопасный режим
  • Ошибка при вызове конструктора ftpсоединение ошибка работы с интернет