Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=11254)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Поле агрегатного объекта не обнаружено

Автор: wmatik 20.02.13, 9:35

Ситуация в следующем, необходимо в отчет вывести данные из документа "Банковская выписка", следующие реквизиты: Контрагент, Сумму и Сумма должна переводиться в национальную валюту. Я придумала следующую схему для перевода валюты, в документе есть Текст в котором отображается Валюта, вытягивать оттуда валюту, не важно по коду или кратному сокращению, но когда я вначале решила просто вывести колонку с Кодом Валюты выдается ошибка "Поле агрегатного объекта не обнаружено (Валюта)":
//*******************************************

Процедура Сформировать()
    Док = СоздатьОбъект("Документ.БанковскаяВыписка");    
    ТЗ = СоздатьОбъект("ТаблицаЗначений");  
    ТЗ.НоваяКолонка("Контрагент");
    ТЗ.НоваяКолонка("Сумма");
    ТЗ.НоваяКолонка("ВидыЗатрат");
    ТЗ.НоваяКолонка("Валюта");
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    Если Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 0 Тогда
        Таб.Показать();
        Возврат;
    КонецЕсли;      
        Номер = 0;
    Пока Док.ПолучитьДокумент() = 1 Цикл    
        //Сообщить(Док.Валюта.Кратко);    

        Док.ВыбратьСтроки();
        Пока Док.ПолучитьСтроку() = 1 Цикл
            Если (ПустоеЗначение(ВыбКод) = 0)и((Лев(СокрЛП(Док.ВидыЗатрат),СтрДлина(СокрЛП(ВыбКод))) <> СокрЛП(ВыбКод))или(СтрДлина(СокрЛП(ВыбКод))>СтрДлина(СокрЛП(Док.ВидыЗатрат)))) Тогда
                Продолжить;
            КонецЕсли;  
               Если ПустоеЗначение(Док.Субконто1) = 1 Тогда
                Продолжить;
            КонецЕсли;  
            Если Док.Проведен() = 0 Тогда
                Продолжить;
            КонецЕсли;    
            Если ПустоеЗначение(Док.РСчет) = 1 Тогда
                Продолжить;
            КонецЕсли;

            ТЗ.НоваяСтрока();
            ТЗ.Контрагент = Док.Субконто1;
                        Сообщить(Док.Валюта.Код);
            ТЗ.Валюта = Док.Валюта.Код;
            ТЗ.Сумма = Док.СуммаСНДС;        
        КонецЦикла;
        Если ТЗ.КоличествоСтрок() = 0 Тогда
            Продолжить;
        КонецЕсли;    
    КонецЦикла;

    ТЗ.Свернуть("Контрагент", "Сумма");     //Суммирование значений у повторяющихся контрагентов

    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл

        Номер = Номер + 1;
        Таб.ВывестиСекцию("Строка");
        Итого = Итого + ТЗ.Сумма;
    КонецЦикла;  
    ТЗ.УдалитьСтроки();    
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры

Подскажите пожалуйста почему не выводится валюта? Причем через сообщить все верно выводится

Автор: Vofka 20.02.13, 10:10

На какой строке ругается?

Автор: wmatik 20.02.13, 10:15

ругается на всех строках, когда выводятся контрагенты, но когда из цикла по строкам убираю все равно ругается

Автор: Cthulhu 20.02.13, 11:04

1) "на все строках" - ответ странный и неправильный.
2) после свертки ТЗ колонка "Валюта" в ней отсутствут - и именно по свернутой ТЗ в отчет выводится секция "Строка". ни на какие мысли не наталкивает?
3) на всякий случай универсальное правило при формировании таблицы отчета: если сообщение об ошибке выводится, но формирование отчета не прерывается - значит сообщения об ошибках вызваны вычислением значений в ячейках (или в расшифровках) шаблона таблицы при их выводе.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua