8.х Заполнение макета отчета

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Sh.u.t, 6 июн 2015.

  1. TopicStarter Overlay
    Sh.u.t
    Offline

    Sh.u.t

    Регистрация:
    20 мар 2014
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Добрый вечер помогите заполнить макет отчета. С помощью запроса получаю необходимые данные, но в макет отчета данные не попадают, не знаю где ошибка. Макет и образец во вложении. Можете предложить свой вариант решения задачи.

    Код:
    &НаСервереБезКонтекста
    Процедура СформироватьОтчет(ТабДок, Номенклатура, Марка)
        Макет = Отчеты.ОтчетПоМаркам.ПолучитьМакет("Макет");
        ОблШапка = Макет.ПолучитьОбласть("ОблШапка");
        
        ТабДок.Очистить();
        ОблШапка.Параметры.Номенклатура = Номенклатура;
        ОблШапка.Параметры.Марка = Марка;
        ТабДок.Вывести(ОблШапка);
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиГотовойПродукцииОбороты.НомерКипаПриход КАК НомерКипа,
        |    ОстаткиГотовойПродукцииОбороты.БруттоПриход КАК Брутто
        |ИЗ
        |    РегистрНакопления.ОстаткиГотовойПродукции.Обороты(, , Запись, ) КАК ОстаткиГотовойПродукцииОбороты
        |ГДЕ
        |    ОстаткиГотовойПродукцииОбороты.Номенклатура = &Номенклатура
        |    И ОстаткиГотовойПродукцииОбороты.Марка = &Марка
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерКипа";
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Запрос.УстановитьПараметр("Марка", Марка);
        Результат = Запрос.Выполнить();
        Таблица = Результат.Выгрузить();
        КоличествоСтраниц = Цел(Таблица.Количество() / 256);
    
        Для СчетчикЛистов = 0 По КоличествоСтраниц - 1 Цикл
        Для СчетчикСтрок = 1 По 32 Цикл
            ОбластьСтрока = Макет.ПолучитьОбласть("ОблСтрока");
           Номер = (СчетчикЛистов*256)+СчетчикСтрок - 1;
               Если Номер <= Таблица.Количество() Тогда
                    ОбластьСтрока.Параметры.Стр1 = Таблица[Номер].Номер;
                    ОбластьСтрока.Параметры.Стр2 = Таблица[Номер].Брутто;
               КонецЕсли;
            Номер = Номер + 32;         
                Если Номер <= Таблица.Количество() Тогда
                    ОбластьСтрока.Параметры.Стр3 = Таблица[Номер].Номер;
                    ОбластьСтрока.Параметры.Стр4 = Таблица[Номер].Брутто;
               КонецЕсли;
    
                ТабДок.Вывести(ОбластьСтрока);
           КонецЦикла;
        КонецЦикла
    
    
    
        КонецПроцедуры

    Вложения:

    Последнее редактирование модератором: 6 июн 2015
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    В самом конце допишите
    Код:
    ТабДок.Показать();
  3. TopicStarter Overlay
    Sh.u.t
    Offline

    Sh.u.t

    Регистрация:
    20 мар 2014
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    (ТабДок.Показать(); тоже не помогает.) Неправильно выразился в начале: в отчете все области "ОблШапка" и "ОблСтрока" отображаются, но только "ОблСтрока" не заполняется данными.

    Вложения:

  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Значит цикл не инициализируется. Отладчиком умеете пользоваться?
  5. TopicStarter Overlay
    Sh.u.t
    Offline

    Sh.u.t

    Регистрация:
    20 мар 2014
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Да, умею.
  6. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Тогда в чем сложность поставить точку останова и поэтапно посмотреть что происходит с кодом? Со значениями и т.д.
    --- Объединение сообщений, 7 июн 2015 ---
    Запомните. За Вас никто не будет делать. Мы, можем подсказать, направить, дать совет.
  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А зачем Вы обрасть строка каждый раз в цикле получаете- он же получается что обновляется - вынесите за цикл.
    Сделайте строкой ниже шапки
    ОблШапка = Макет.ПолучитьОбласть("ОблШапка");
    ОбластьСтрока = Макет.ПолучитьОбласть("ОблСтрока");
  8. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Draco, все правильно же. Чтобы таблицу вывести.
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    ОбластьСтрока = Макет.ПолучитьОбласть("ОблСтрока");

    Это что то аналогично того что
    ТЗ=Новый ТаблицаЗначений;

    Зачем каждый раз в цикле это делать?
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    затем, чтобы заного получать область из макета, т.к. полученную ранее область, перед выводом в ТабДок, могут окрашивать в разные цвета/устанавливать шрифты/прочие извращения.
  11. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну это я понимаю, но у него же по коду не окрашивается нигде , а тупо пераназнаяаются реквизиты.
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    дык это очень частный случай :)

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