Как исправить ошибку: метод объекта не обнаружен (Метаданные) в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как исправить ошибку: метод объекта не обнаружен (Метаданные) в 1С?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38692
      Фото аватараOdineski
      Участник

        Метод объекта не обнаружен (Метаданные)
        {СуммарныйВесОбъемПлощадь ОбщийМодуль._ОбщийВызовСервера.Модуль(5)}:Мета = мДокументы[0].Метаданные();
        {СуммарныйВесОбъемПлощадь ОбщийМодуль.ВОП_ОбщийМодульКлиент.Модуль(46)}:Показатели = _ОбщийВызовСервера.ПолучитьОбщиеПоказатели(мДокументы);
        {СуммарныйВесОбъемПлощадь Обработка.ЖурналДокументовВнутреннегоТовародвижения.Форма.СписокДокументов.Форма(10)}:ВОП_ОбщийМодульКлиент._ЗаполнитьПоказателиДокументаКлиент(ЭтаФорма);

        [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]

      • #38693
        bot_avaOdin — Одинэсник
        Участник

          Ошибка возникает на строке:

          Метод Метаданные() у элемента мДокументы[0] недоступен. Скорее всего, в массив передаются не ссылки на документы, а:

          — объекты документов;
          — строки динамического списка;
          — данные формы;
          — структура;
          — другой объект, не являющийся ссылкой.

          Для получения метаданных надежнее использовать тип значения:

          Но важно: если в мДокументы находятся объекты документов, ТипЗнч() вернет тип ДокументОбъект.<ИмяДокумента>, а для поиска метаданных документа нужно получить тип ссылки.

          ## Исправление для ссылок на документы

          Если мДокументы содержит ссылки на документы, замените строку:

          на:

          Например:

          Однако такой вариант корректен только тогда, когда первый элемент действительно является ссылкой на документ.

          ## Если в массив передается объект документа

          Если мДокументы[0] является объектом документа, например:

          то его тип будет примерно таким:

          В этом случае нужно преобразовать тип объекта документа в тип ссылки:

          Но такой вариант менее удобен. Лучше передавать в ПолучитьОбщиеПоказатели() именно ссылки на документы, а не объекты.

          ## Универсальный вариант для ссылок и объектов

          Если ваш общий модуль может получать и ссылки, и объекты, используйте проверку типа:

          Тогда в функции ПолучитьОбщиеПоказатели():

          ## Если в массиве находятся строки списка

          Судя по вызову:

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

          Например, ошибочный вариант:

          где ТекущаяСтрока является данными строки динамического списка.

          Нужно добавлять именно ссылку на документ:

          В зависимости от формы поле может называться:

          или:

          или:

          Например:

          Конкретное имя реквизита зависит от источника динамического списка.

          ## Как быстро определить фактический тип

          Временно добавьте перед строкой с ошибкой:

          Либо в отладчике посмотрите значение:

          Возможные результаты:

          Тогда достаточно:

          Если результат:

          нужно либо передавать ссылку:

          либо использовать преобразование типа объекта в тип ссылки.

          Если результат:

          или:

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

          ## Рекомендуемое исправление

          В модуле _ОбщийВызовСервера замените:

          на:

          А в коде формирования массива убедитесь, что добавляется именно ссылка:

          Для формы списка документов оптимальная схема такая:

          Метод мДокументы[0].Метаданные() в данном случае использовать не нужно.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С