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

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

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

Я
   DaryaKoroleva

28.06.13 — 14:03

Делаю внешнюю печатную форму. Добавила область «Приказ».

Но вылезает ошибка: «Ошибка при вызове метода контекста (ПолучитьОбласть): Область не найдена: »

Вывожу ее кодом:

ОбластьМакета = Макет.ПолучитьОбласть(«Приказ»);

ТабДокумент.Вывести(ОбластьМакета);

   ДенисЧ

1 — 28.06.13 — 14:04

Наверное, нет такой области…

   1Cv8_accepted

2 — 28.06.13 — 14:05

ОбластьМакета = ПолучитьМакет(«ИмяТвоегоМакета»).ПолучитьОбласть(«Приказ»);

   1Cv8_accepted

3 — 28.06.13 — 14:07

(0) Кстати, область, надеюсь, которая красными линиями выделяется (Ctrl+Shift+N), а не именованая область ячеек в табличном документе?

   DaryaKoroleva

4 — 28.06.13 — 14:09

(1) Есть =)

(3) Красными-красными =)

   Cyberhawk

5 — 28.06.13 — 14:11

Без фото в профиле метод ПолучитьОбласть() работать не будет

   ДенисЧ

6 — 28.06.13 — 14:11

(4) Не верю (с)

Скриншоты в студию

   DaryaKoroleva

7 — 28.06.13 — 14:19

http://s5.uploads.ru/uvGzH.png

   ДенисЧ

8 — 28.06.13 — 14:22

Ерундистика какая-то.

Может, макет не тот правишь.. А может (5) прав… :-)

   User_Agronom

9 — 28.06.13 — 14:25

А все остальные область нормально получаются?

   pessok

10 — 28.06.13 — 14:25

а нафига в отдельную область выносить константу? моар кода?

   User_Agronom

11 — 28.06.13 — 14:26

+ (9) области

   pessok

12 — 28.06.13 — 14:27

а по делу — может не тот макет? :) например, пытаешься получить общий макет ТОРГ-12, в котором нет этой области?

   DaryaKoroleva

13 — 28.06.13 — 14:33

Все исправила!)

Дошло в чем дело =)

Надо было заменить сточку:

Макет = ПолучитьОбщийМакет(«ТОРГ12»);

На:

Макет = ПолучитьМакет(«ТОРГ12»);

И по этому, как бы я не меняла макет, который был добавлен в обработку, на печать выводился общий, в котором нет моих изменений)  

Блин)))

   DaryaKoroleva

14 — 28.06.13 — 14:34

(12) Ну да)

   DaryaKoroleva

15 — 28.06.13 — 14:34

Спасибо)

  

Mitriy

16 — 28.06.13 — 14:35

гы…

TurboConf — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

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

Доброго времени суток.

Меня зовут Анатолий. Я системный администратор в небольшой компании. Только начинаю программирование, как таковое (бейсик, С и другие, общий обзор, начало Бейсик). Есть у нас 1С, которую я периодически «ковыряю». Где-то макеты подправить, где-то значения изменить. В общей «картине маслом» из меня получается пока только модератор, то есть могу разобрать, изменить значение и собрать обратно. К сожалению нового написать не могу. Тем не менее пытаюсь что-то оптимизировать в работе сотрудников.

Появилась идея. Обозначение какого-либо свойства контрагента или документа на печатной форме ЗаказПокупателя.
К примеру по некоторым контрагентам требуется письменное одобрение руководителя отдела продаж на отгрузку.
Вижу реализацию идеи примерно так:
Я создал в справочнике Контрагента реквизит с флажком и разместил его на основной форме.
В документе Заказ покупателя, в табличной части, в ячейке разместил область для вывода на печать.

Хочу связать эти два элемента так, чтобы при утановке галочки в Карточке контрагента «требуется подтверждение», в печатной форме Заказ покупателя отображалось поле (ячейка) для подписи.
Имею кое какие начальные знания в программировании 1С, но минимальные, которых, видимо, не достаточно для реализации этой идеи.
Полагаю как-то делается ссылка из карточки контрагента, а потом в табличной части Заказа покупателя она влияет на отображение или не отображение ячейки подписи, либо наличие/отсутствие текста.

Примерное представление:
В справочнике Контрагенты добавлен реквизит Одобрение, на форме установлен флажок «Одобрение».

В табличной части ЗаказПокупателя в ячейке вставлен параметр Одобрение

В модуле ЗаказПокупателя

>>ПараметрыПечати.Вставить(«Одобрение», ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), «Одобрение»));

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при восстановлении системы 0х8000fff
  • Ошибка при вызове метода контекста получитьмакет недопустимое значение параметра параметр номер 1
  • Ошибка при вызове конструктора ftpсоединение
  • Ошибка преобразования данных xdto началосвойства error processing settings
  • Ошибка при восстановлении резервной копии айфона через айтюнс