Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не получается сделать отчет
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
Mr_Best
Доброе время суток.
Приношу свои извенения, что обращаюсь к вам здесь за помощью, но перекопав весь интернет я обнаружил что это лутший сайт с лутшими статьями.
Уже второй день толкусь на одном месте с отчетом и не как не могу заставить его работать.

Отчет простой, одна кнопка сформировать и одна сводная таблица на форме, только вот не чего не появляется в этой таблице.
Я перепробывал массу разных способов, и те, что вылажены в этой статье тоже и все без толку.

Вод код обработчика события нажатия кнопки "Сформировать":
Процедура КнопкаСформироватьНажатие(Кнопка)
    Построитель = Новый ПостроительОтчета;
    Построитель.Текст = "ВЫБРАТЬ
                        |    ТоварыПереданные.Номенклатура КАК Номенклатура,
                        |    ТоварыПереданные.Контрагент КАК Контрагент,
                        |    СУММА(ТоварыПереданные.Количество) КАК Количество
                        |ИЗ
                        |    РегистрНакопления.ТоварыПереданные КАК ТоварыПереданные
                        |
                        |СГРУППИРОВАТЬ ПО
                        |    ТоварыПереданные.Номенклатура,
                        |    ТоварыПереданные.Контрагент
                        |ИТОГИ
                        |    СУММА(Количество)
                        |ПО
                        |    Номенклатура,
                        |    Контрагент";
    Построитель.ЗаполнитьНастройки();
                        
    Таблица = ЭлементыФормы.Резултат.ВстроенныеТаблицы.СводнаяТаблица1;
    Таблица.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед);
    
    Построитель.Выполнить();
    
    Таблица.ИсточникДанных = Построитель;
    
    Таблица.Поля.Добавить(Таблица.Поля.Номенклатура);
    Таблица.Колонки.Добавить(Таблица.Поля.Контрагент);
    Таблица.Данные.Добавить(Таблица.Поля.Количество);
    
    Построитель.Макет.Показать();
КонецПроцедуры


Что здесь не так ? Пожалуйста, подскажите.
Mr_Best
Чуть не забыл, данный код выдает следующую ошибку:
"Ошибка при вызове метода контекста (Добавить): Недопустимое значение пораметра (пораметр номер "1")"
Mr_Best
Только что пробывал зделать не через "ПостроительОтчета", а через "Запрос", так как описано в статье.
Результат: та же самая ошибка!!!
Zaval
А "Таблица" разве не относится к зарезервированным словам, которые нельзя использовать для имен переменных и объектов?
Остановите Отладчик на ошибочной строке и посмотрите, что у Вас в Таблица.
Mr_Best
Нет, однозначно "Таблица" не относится к зарезервированным словам, следующий код работает точно так же как и предидущий:
Процедура КнопкаСформироватьНажатие(Кнопка)
    Построитель = Новый ПостроительОтчета;
    Построитель.Текст =
                        "ВЫБРАТЬ
                        |    ТоварыПереданные.Номенклатура КАК Номенклатура,
                        |    ТоварыПереданные.Контрагент КАК Контрагент,
                        |    СУММА(ТоварыПереданные.Количество) КАК Количество
                        |ИЗ
                        |    РегистрНакопления.ТоварыПереданные КАК ТоварыПереданные
                        |
                        |СГРУППИРОВАТЬ ПО
                        |    ТоварыПереданные.Номенклатура,
                        |    ТоварыПереданные.Контрагент
                        |ИТОГИ
                        |    СУММА(Количество)
                        |ПО
                        |    Номенклатура,
                        |    Контрагент";
    Построитель.ЗаполнитьНастройки();
                        
    ТаблицаНеРезерв = ЭлементыФормы.Резултат.ВстроенныеТаблицы.СводнаяТаблица1;
    ТаблицаНеРезерв.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед);
    
    Построитель.Выполнить();
    
    ТаблицаНеРезерв.ИсточникДанных = Построитель;
    //ТаблицаНеРезерв.ОтображатьПоля = Истина;

    
    ТаблицаНеРезерв.Поля.Добавить(ТаблицаНеРезерв.Поля.Номенклатура);
    ТаблицаНеРезерв.Колонки.Добавить(ТаблицаНеРезерв.Поля.Контрагент);
    ТаблицаНеРезерв.Данные.Добавить(ТаблицаНеРезерв.Поля.Количество);
    
    Построитель.Макет.Показать();
КонецПроцедуры


Зато, ниже изложенный код работает без ошибок но поля приходится устанавливать вручную, при формировании отчета:
Процедура КнопкаСформироватьНажатие(Кнопка)
    Построитель = Новый ПостроительОтчета;
    Построитель.Текст =
                        "ВЫБРАТЬ
                        |    ТоварыПереданные.Номенклатура КАК Номенклатура,
                        |    ТоварыПереданные.Контрагент КАК Контрагент,
                        |    СУММА(ТоварыПереданные.Количество) КАК Количество
                        |ИЗ
                        |    РегистрНакопления.ТоварыПереданные КАК ТоварыПереданные
                        |
                        |СГРУППИРОВАТЬ ПО
                        |    ТоварыПереданные.Номенклатура,
                        |    ТоварыПереданные.Контрагент
                        |ИТОГИ
                        |    СУММА(Количество)
                        |ПО
                        |    Номенклатура,
                        |    Контрагент";
    Построитель.ЗаполнитьНастройки();
                        
    ТаблицаНеРезерв = ЭлементыФормы.Резултат.ВстроенныеТаблицы.СводнаяТаблица1;
    ТаблицаНеРезерв.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед);
    
    Построитель.Выполнить();
    
    ТаблицаНеРезерв.ИсточникДанных = Построитель;
    ТаблицаНеРезерв.ОтображатьПоля = Истина;

    
    //ТаблицаНеРезерв.Поля.Добавить(ТаблицаНеРезерв.Поля.Номенклатура);
    //ТаблицаНеРезерв.Колонки.Добавить(ТаблицаНеРезерв.Поля.Контрагент);
    //ТаблицаНеРезерв.Данные.Добавить(ТаблицаНеРезерв.Поля.Количество);
    
    Построитель.Макет.Показать();
КонецПроцедуры


Получается, что "ПостроительОтчета" прекрасно передается в "СводнуюТаблицу". Проблема в том, что я не правельно устанавливаю поля програмным образом, т. е. вот эти строчки не верны:
    //ТаблицаНеРезерв.Поля.Добавить(ТаблицаНеРезерв.Поля.Номенклатура);
    //ТаблицаНеРезерв.Колонки.Добавить(ТаблицаНеРезерв.Поля.Контрагент);
    //ТаблицаНеРезерв.Данные.Добавить(ТаблицаНеРезерв.Поля.Количество);


Как правельно программно установить поля для сводной таблицы???
Mr_Best
Все, всем спасибо - работает!!!
Надо было так:
Процедура КнопкаСформироватьНажатие(Кнопка)
    Построитель = Новый ПостроительОтчета;
    Построитель.Текст =
                        "ВЫБРАТЬ
                        |    ТоварыПереданные.Номенклатура КАК Номенклатура,
                        |    ТоварыПереданные.Контрагент КАК Контрагент,
                        |    СУММА(ТоварыПереданные.Количество) КАК Количество
                        |ИЗ
                        |    РегистрНакопления.ТоварыПереданные КАК ТоварыПереданные
                        |
                        |СГРУППИРОВАТЬ ПО
                        |    ТоварыПереданные.Номенклатура,
                        |    ТоварыПереданные.Контрагент
                        |ИТОГИ
                        |    СУММА(Количество)
                        |ПО
                        |    Номенклатура,
                        |    Контрагент";
    Построитель.ЗаполнитьНастройки();
                        
    ТаблицаНеРезерв = ЭлементыФормы.Резултат.ВстроенныеТаблицы.СводнаяТаблица1;
    ТаблицаНеРезерв.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед);
    
    Построитель.Выполнить();
    
    ТаблицаНеРезерв.ИсточникДанных = Построитель;
    //ТаблицаНеРезерв.ОтображатьПоля = Истина;

    
    ТаблицаНеРезерв.Строки.Добавить(ТаблицаНеРезерв.Поля.Номенклатура);
    ТаблицаНеРезерв.Колонки.Добавить(ТаблицаНеРезерв.Поля.Контрагент);
    ТаблицаНеРезерв.Данные.Добавить(ТаблицаНеРезерв.Поля.Количество);
    
    //Построитель.Макет.Показать();
КонецПроцедуры


Правду говорят, что 80% ошибок из-за невнимательности!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.