Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Значение не представляет агрегатный объект
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
wmatik
1С Предприятие 7.7(сетевая версия) - 7.70.027
Конфигурация: Производство-Услуги-Бухгалтерия для Украины(7.70.010)
Подскажите пожалуйста. В отчете выдается ошибка "Значение не представляет агрегатный объект ПредметЗакупки".
ПечКод = БуфКод+".00.00.00";
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
            ПечНазв = СокрЛП(Спр.ПредметЗакупки);
        КонецЕсли;
    КонецЦикла;
-=VJ=-
Цитата(wmatik @ 08.06.11, 10:19) необходимо зарегистрироваться для просмотра ссылки
1С Предприятие 7.7(сетевая версия) - 7.70.027
Конфигурация: Производство-Услуги-Бухгалтерия для Украины(7.70.010)
Подскажите пожалуйста. В отчете выдается ошибка "Значение не представляет агрегатный объект ПредметЗакупки".


Может получаете первым делом группу элементов, а у неё нет такого реквизита.
wmatik
Дело в том, что этот отчет привязан к документу, в котором есть код, который находится в сравочнике "КодыПоКлассификатору", но я получаю этот код с реквизитом ПредметЗакупки через другой справочник ТМЦ. Вот я не знаю как показать этот пеерскок через справочник
-=VJ=-
Цитата(wmatik @ 08.06.11, 10:52) необходимо зарегистрироваться для просмотра ссылки
Дело в том, что этот отчет привязан к документу, в котором есть код, который находится в сравочнике "КодыПоКлассификатору", но я получаю этот код с реквизитом ПредметЗакупки через другой справочник ТМЦ.


А зачем так-то тогда? Почему не просто НайтиПоКоду()?

А если уж так - тогда включите фильтрацию по ЭтоГруппа()
wmatik
подскажите, как например?
-=VJ=-
Цитата(wmatik @ 08.06.11, 11:02) необходимо зарегистрироваться для просмотра ссылки
подскажите, как например?


К примеру так:

Пока Спр.ПолучитьЭлемент() = 1 Цикл  
    Если Спр.ЭтоГруппа()=1 Тогда
        Продолжить;
    КонецЕсли;
    Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
        ПечНазв = СокрЛП(Спр.ПредметЗакупки);
    КонецЕсли;
КонецЦикла;
wmatik
ПечКод = БуфКод+".00.00.00";
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если Спр.ЭтоГруппа()=1 Тогда
             Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
                 ПечНазв = СокрЛП(Спр.ПредметЗакупки);
             КонецЕсли;
       КонецЕсли;
    КонецЦикла;

Так?

не помогло

может надо указать здесь справочник ТМЦ?
pablo
Цитата
ПечКод = БуфКод+".00.00.00";
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если Спр.ЭтоГруппа()<>1 Тогда
             Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
                 ПечНазв = СокрЛП(Спр.ПредметЗакупки);
             КонецЕсли;
       КонецЕсли;
    КонецЦикла;
wmatik
все одно, ошибка
-=VJ=-
Цитата(wmatik @ 08.06.11, 11:11) необходимо зарегистрироваться для просмотра ссылки
Если Спр.ЭтоГруппа()=1 Тогда
Так?


С точностью до наоборот. Вы же теперь только группы и перебираете.

Всё же не понимаю, почему нельзя просто

Спр.НайтиПоКоду(ПечКод)
wmatik
ПечКод = БуфКод+".00.00.00";
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.НайтиПоКоду(ПечКод);
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
            ПечКод = СокрЛП(Спр.ПредметЗакупки);
        КонецЕсли;
    КонецЦикла;

Так?
-=VJ=-
Так

ПечКод = БуфКод+".00.00.00";
Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
Если Спр.НайтиПоКоду(ПечКод)=1 Тогда
    ПечНазв = СокрЛП(Спр.ПредметЗакупки);
Иначе
    Сообщить("Элемент по коду "+ПечКод+" не найден!");
КонецЕсли;
wmatik
пишет элемент по коду не найден
-=VJ=-
Цитата(wmatik @ 08.06.11, 12:12) необходимо зарегистрироваться для просмотра ссылки
пишет элемент по коду не найден


А элемент с таким кодом есть?
wmatik
да, до того как я изменила на то что вы написали, выводило значения, код и сумму, а вот ПредметЗакупки не выводил. А теперь вообще ничего не выводит
-=VJ=-
Цитата(wmatik @ 08.06.11, 12:17) необходимо зарегистрироваться для просмотра ссылки
да,


Попробуйте так

Спр.НайтиПоКоду(СокрЛП(ПечКод),0)


Цитата(wmatik @ 08.06.11, 12:17) необходимо зарегистрироваться для просмотра ссылки
вот ПредметЗакупки не выводил


А такой реквизит у справочника действительно есть?
wmatik
у справочника КодПоКлассификатору есть реквизит ПредметЗакупки, но я уже писала что я с документа вытягивала этот реквизит через справочник ТМЦ. Может надо что-то именить в документе?

все равно элемент по коду не найден
-=VJ=-
Цитата(wmatik @ 08.06.11, 12:25) необходимо зарегистрироваться для просмотра ссылки
у справочника КодПоКлассификатору есть реквизит ПредметЗакупки, но я уже писала что я с документа вытягивала этот реквизит через справочник ТМЦ.


Проворонил.
Если этот реквизит - справочник, то конечно печатать не будет.

ПечКод = БуфКод+".00.00.00";
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если Спр.ЭтоГруппа()<>1 Тогда
             Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
                 ПечНазв = СокрЛП(Спр.ПредметЗакупки.Наименование);
             КонецЕсли;
       КонецЕсли;
    КонецЦикла;


А вот почему по коду не находит - это я уже не знаю.
wmatik
Реквизита Наименование нет в справочнике КодыПоКлассификатору
-=VJ=-
Цитата(wmatik @ 08.06.11, 13:26) необходимо зарегистрироваться для просмотра ссылки
Реквизита Наименование нет в справочнике КодыПоКлассификатору


Тогда посмотрите, какой есть - может там Наим или ПолнНаименование.
Данный реквизит получается отчетом, как объект - его нельзя напечатать, можно лишь напечатать, в свою очередь, его реквизит.
awp
Цитата(-=VJ=- @ 08.06.11, 14:21) необходимо зарегистрироваться для просмотра ссылки
Проворонил.
Если этот реквизит - справочник, то конечно печатать не будет.

ПечКод = БуфКод+".00.00.00";
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если Спр.ЭтоГруппа()<>1 Тогда
             Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
                 ПечНазв = СокрЛП(Спр.ПредметЗакупки.Наименование);
             КонецЕсли;
       КонецЕсли;
    КонецЦикла;


А вот почему по коду не находит - это я уже не знаю.


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

Для автор

ПечКод = БуфКод+".00.00.00";
        СООБЩИТЬ("1 " + ПечКод);
        ПечКод = "" + СокрЛП(БуфКод)+".00.00.00";
        СООБЩИТЬ("2" + ПечКод);
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если Спр.ЭтоГруппа()<>1 Тогда
             Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
                 ПечНазв = СокрЛП(Спр.ПредметЗакупки.Наименование);
             КонецЕсли;
       КонецЕсли;
    КонецЦикла;


ВыполниТЕ этот код.
Какие сообщения выводит?
5_kopeek
Цитата(awp @ 08.06.11, 13:59) необходимо зарегистрироваться для просмотра ссылки
Когда это так было ? Если этот реквизит - справочник, то конечно печатать не будет. В каждом справочнике есть способ представления - код или наименование в данном случае одно из них вывелось бы.

Именно. Но так
Цитата(wmatik @ 08.06.11, 10:19) необходимо зарегистрироваться для просмотра ссылки
ПечНазв = СокрЛП(Спр.ПредметЗакупки);

, естественно, делать нельзя.
А код дополните к такому виду:
    ПечКод = БуфКод+".00.00.00";
    СООБЩИТЬ("1 " + ПечКод);
    ПечКод = "" + СокрЛП(БуфКод)+".00.00.00";
    СООБЩИТЬ("2" + ПечКод);
    Спр = СоздатьОбъект("Справочник.КодыПоКлассификатору");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл  
        Если Спр.ЭтоГруппа()<>1 Тогда
            Сообщить(Спр.ТекущийЭлемент());
            Если СокрЛП(Спр.Код) = СокрЛП(ПечКод) Тогда
                МетСпр=Метаданные.Справочник("КодыПоКлассификатору");
                Для инд=1 По МетСпр.Реквизит() Цикл
                    ТекРеквизит=МетСпр.Реквизит(инд).Идентификатор;
                    Сообщить(ТекРеквизит+"="+Спр.ПолучитьАтрибут(ТекРеквизит));
                КонецЦикла;
                ПечНазв = СокрЛП(Спр.ПредметЗакупки.Наименование);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

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