8.х Метод объекта не обнаружен (ПолучитьОбъект())

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Tilda, 26 авг 2010.

  1. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Добрый день!
    Имеется вот такая функция в общем модуле (нужна для получения имени макета из ранее сформированного списка макетов конкретного документа).
    Код:
    Функция ПодобратьМакет(Объект) <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/экспорт')">Экспорт	</span>
    
    Попытка 
    НазваниеОрганизации = Объект.Организация;
    Исключение 
    Предупреждение("Нет реквизита Организация");
    КонецПопытки;
    ТипДока = Объект.ПолучитьОбъект().Метаданные.Имя;
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |	МакетыОрганизаций.ИмяМакета
    |ИЗ
    |	Справочник.МакетыОрганизаций КАК МакетыОрганизаций
    |ГДЕ
    |	МакетыОрганизаций.Организация = &Организация
    |	И МакетыОрганизаций.ТипДокумента = &ТипДокумента";
    Запрос.УстановитьПараметр("Организация",НазваниеОрганизации);
    Запрос.УстановитьПараметр("ТипДокумента",ТипДока);
    
    Таблица = Запрос.Выполнить().Выгрузить();
    Возврат Таблица[0].ИмяМакета;
    
    КонецФункции
    
    Раньше эта функция находилась в модуле справочника МакетыОрганизаций, но потом ее пришлось "отселить" в общий модуль. НО на строке
    Код:
    ТипДока = Объект.ПолучитьОбъект().Метаданные.Имя;
    
    выдается ошибка "Метод объекта не обнаружен (ПолучитьОбъект())".
    В связи с этим вопрос! Подскажите, пожалуйста, какой метод тут нужно использовать взамен этого? Как можно реализовать мою задачу?
    Заранее спасибо! P.S. Я пока еще конкретный чайник, прошу изъясняться как можно более простыми словами! =))
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.574
    Симпатии:
    717
    Баллы:
    204
    я так понимаю, в функцию должна передаваться ссылка на документ.

    поправьте код вызывающий данную функцию.
  3. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Вызывающий код сейчас вот такого вида:
    Код:
    Макет = МойМодуль.ПодобратьМакет(ЭтотОбъект);
    
    Если Макет = Неопределено Тогда
    Предупреждение("Ошибка! Получить макет невозможно.");
    Возврат ТабДокумент;
    КонецЕсли;
    
    
  4. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Тогда попробуйте так
    Код:
    ТипДока = Объект.Метаданные.Имя;
    
    
    ЗЫ: Использовать "Предупреждение" без таймаута не есть хорошо
  5. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Выдается ошибка
    Код:
    {ОбщийМодуль.МойМодуль(7)}: Поле объекта не обнаружено (Метаданные)
    ТипДока = Объект.Метаданные.Имя;
    
    
    Спасиба, буду знать! :)
  6. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Тогда скажите какой тип у переменной Объект?
  7. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Это ссылка на документ. :)
  8. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    А попробуйте передавать не ссылку, а сам объект. И имя переменной поменяйте
  9. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Есть другой вариант, вызывать эту функцию из модуля справочника МакетыОрганизаций, но я не знаю, как это делается. Был вариант:
    Код:
    Макет = Справочники.МакетыОрганизаций.ПодобратьМакет(ЭтотОбъект);
    Если Макет = Неопределено Тогда
    Предупреждение("Ошибка! Получить макет невозможно.");
    Возврат ТабДокумент;
    КонецЕсли;
    
    
    Но оказалось, что так нельзя вызвать функцию. Не подскажете, как ее можно вызвать оттуда? Так было бы проще. Функция вызывается в процедуре СоздатьТабличныйДокументПечатиСчетаЗаказа документа ЗаказПокупателя.
  10. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    там надо получить объект справочника МакетыОрганизаций и вызывать функцию
  11. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    А можете написать кодом, пожалуйста? =)
  12. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Берете ссылку на нужный элемент справочника и пишете
    Код:
    СправочникОбъект = СсылкаНаЭлемент.ПолучитьОбъект();
    Макет = СправочникОбъект.ПодобратьМакет(ЭтотОбъект);
    
    
    как-то так примерно
  13. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Спасибо, что помогаете! К сожалению, та же ошибка на тот же метод...
  14. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    "то ли лыжи не едут, то ли я..."©
    Давайте сделаем так. Берем первоначальный вариант и в МойМодуль передаем 2 параметра, т.е.
    Код:
    Макет = МойМодуль.ПодобратьМакет(ЭтотОбъект, ТипДокумента);
    
    Если Макет = Неопределено Тогда
    Предупреждение("Ошибка! Получить макет невозможно.");
    Возврат ТабДокумент;
    КонецЕсли;
    
    
    а в общем модуле уже не выполняем код Объект.ПолучитьОбъект() и т.д.
  15. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    тьфу блин, я еще не проснулся. Вобщем тут ситуация простая до нельзя :unsure:
    Код:
    ТипДока = Объект.ПолучитьОбъект().Метаданные().Имя;
    
    
    скобки после метаданных поставить надо
  16. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Говорю же, я чайник полнейший)) Мне надо все разжевывать.
    Неа, чего-то не вышло) Та же ошибка.
    Сразу извиняюсь за свои тупые вопросы))) Программирование - не мой конек =)
  17. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    ошибку какую выдает и как вызываете? Оставьте все как в первоначальном варианте и просто добавьте скобки после метаданные
  18. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Ошибка - Метод объекта не обнаружен (ПолучитьОбъект()). Все вернула к первоначальному варианту, поставила скобки после Метаданные. Вызываю функцию так:
    Код:
    Макет = МойМодуль.ПодобратьМакет(ЭтотОбъект);
    
    Если Макет = Неопределено Тогда
    Предупреждение("Ошибка! Получить макет невозможно.");
    Возврат ТабДокумент;
    КонецЕсли;
    
    
    :unsure: Кажется, все же я не еду, а не лыжи)))


    Убрала ПолучитьОбъект() в тексте общего модуля. Теперь ошибка другая (что не очень, но все же чуток радует =) ):
    Код:
    {ОбщийМодуль.МойМодуль(22)}: Индекс находится за границами массива
    Возврат Таблица[0].ИмяМакета;
    
    
  19. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    убрать ПолучитьОбъект() надо было, потому что вы передаете не ссылку, а сам объект. Теперь у Вас видимо пустая таблица, т.е. запрос ничего не выдает
  20. TopicStarter Overlay
    Tilda
    Offline

    Tilda Опытный в 1С

    Регистрация:
    29 июл 2010
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Досадно.. Интересно, почему запрос не выдает ничего... Может быть дело в строке
    Код:
    Возврат Таблица[0].ИмяМакета;
    
    ? Если ИмяМакета - реквизит справочника МакетыОрганизаций, то уместен ли он в данной строке?

Поделиться этой страницей