[РЕШЕНО] 1С 8.3 УФ, как вывести в печатную форму подвал из табличной части документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ExtreMe, 25 сен 2014.

  1. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    Добавил новый документ в конфигурацию БП 3.0, для него сделал печатную форму
    как добавить подсчёт по колонкам в подвале разобрался в этой теме
    http://1c-pro.ru/threads/ne-mogu-vyvesti-summu-v-podval-kolonki-v-dokumente.49101
    как вывести эти данные в печатную форму, не разберусь
    текса программы сформировался через запрос, при создании кнопки "Печать"
    Код:
    &НаСервере
    Процедура Печать(ТабДок, Ссылка) Экспорт
        Макет = Документы.мкГрафикОбучения.ПолучитьМакет("Печать");
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    мкГрафикОбучения.Дата,
        |    мкГрафикОбучения.Номер,
        |    мкГрафикОбучения.Категория,
        |    мкГрафикОбучения.Автомобиль,
        |    мкГрафикОбучения.МастерОбучения,
        |    мкГрафикОбучения.Комментарий,
        |    мкГрафикОбучения.График.(НомерСтроки,    Учащийся,УчебнаяГруппа,
        |        д1,    д2,    д3,    д4,    д5,    д6,    д7,    д8,    д9,    д10,
        |        д11, д12, д13, д14, д15, д16, д17, д18, д19, д20,
        |        д21, д22, д23, д24, д25, д26, д27, д28, д29, д30, д31,
        |        Итог)
        //|        Итогд1, Итогд2, Итогд3, Итогд4, Итогд5, Итогд6, Итогд7, Итогд8, Итогд9, Итогд10,
        //|        Итогд11, Итогд12, Итогд13, Итогд14, Итогд15, Итогд16, Итогд17, Итогд18, Итогд19, Итогд20,
        //|        Итогд21, Итогд22, Итогд23, Итогд24, Итогд25, Итогд26, Итогд27, Итогд28, Итогд29, Итогд30, Итогд31,
        //|        ИтогИтог,
        |ИЗ
        |    Документ.мкГрафикОбучения КАК мкГрафикОбучения
        |ГДЕ
        |    мкГрафикОбучения.Ссылка В (&Ссылка)";
        Запрос.Параметры.Вставить("Ссылка", Ссылка);
        Выборка = Запрос.Выполнить().Выбрать();
    
        Шапка = Макет.ПолучитьОбласть("Шапка");
        ОбластьГрафикШапка = Макет.ПолучитьОбласть("ГрафикШапка");
        ОбластьГрафик = Макет.ПолучитьОбласть("График");
        Подвал = Макет.ПолучитьОбласть("Итого");
    
        ТабДок.Очистить();
    
        ВставлятьРазделительСтраниц = Ложь;
        Пока Выборка.Следующий() Цикл
            Если ВставлятьРазделительСтраниц Тогда
                ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            КонецЕсли;
          
            //вывод шапки табличного документа
            Шапка.Параметры.Заполнить(Выборка);
            Шапка.Параметры.Категория    = Выборка.Категория;  
            Шапка.Параметры.Автомобиль = Выборка.Автомобиль;
            Шапка.Параметры.ДатаС            = Формат(НачалоМесяца(Выборка.Дата),"ДЛФ=D");
            Шапка.Параметры.ДатаПо        = Формат(КонецМесяца(Выборка.Дата),"ДЛФ=D");
            Шапка.Параметры.МастерОбучения = Выборка.МастерОбучения;
            ТабДок.Вывести(Шапка, Выборка.Уровень());
          
            //вывод шапки таблицы
            ТабДок.Вывести(ОбластьГрафикШапка);
          
            //вывод строк таблицы
            ВыборкаГрафик = Выборка.График.Выбрать();
            Пока ВыборкаГрафик.Следующий() Цикл
                ОбластьГрафик.Параметры.Заполнить(ВыборкаГрафик);
                ТабДок.Вывести(ОбластьГрафик, ВыборкаГрафик.Уровень());
            КонецЦикла;
          
            //вывод подвала
            Подвал.Параметры.Заполнить(Выборка);
            //Для Н=1 По 31 Цикл
            //    Подвал.Параметры["д"+Н]=Выборка.График.Итог["д"+Н];
            //КонецЦикла;
            //Подвал.Параметры.Итог=Выборка.График.Итог("ИтогИтог");
            ТабДок.Вывести(Подвал);
          
            ВставлятьРазделительСтраниц = Истина;
        КонецЦикла;
    КонецПроцедуры
    
  2. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    В чем сложность ?
    ТабДок.Показать() ?
  3. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    Это вариант для 8.2?
    на 8.3 сообщает
    Код:
    Ошибка при вызове метода контекста (Показать)
            ТабДок.Показать();
    по причине:
    Метод недоступен на сервере
    Печать формируется в Модуле менеджере из Команды "Печать"
  4. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Пффф, так конечно. Тогда по идее функция Печать должна возвращать табличный документ на клиент, и уже его показывать.
  5. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    тьфу блин, ТабДок.Показать() то есть в модуле команды
    Код:
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
        ТабДок = Новый ТабличныйДокумент;
        Печать(ТабДок, ПараметрКоманды);
       
        ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
        ТабДок.ОтображатьСетку = Ложь;
        ТабДок.Защита = Ложь;
        ТабДок.ТолькоПросмотр = Ложь;
        ТабДок.ОтображатьЗаголовки = Ложь;
        ТабДок.Показать();
        //}}
    КонецПроцедуры
    
    &НаСервере
    Процедура Печать(ТабДок, ПараметрКоманды)
        Документы.мкГрафикОбучения.Печать(ТабДок, ПараметрКоманды);
    КонецПроцедуры
    
  6. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    У вас функция должна быть, чтобы вернуть на клиента табличный документ.
  7. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    печатная форма выводится, и данные по строкам табличной части документа есть, не могу понять как к подвалу обратиться из запроса
    есть варианты?
    --- Объединение сообщений, 25 сен 2014 ---
    вон же на клиенте
    ТабДок.Показать()
  8. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Ну у вас же код есть:
    Код:
    Подвал.Параметры.Заполнить(Выборка);
    Тут вы как раз заполняете параметры, но они должны совпадать с полями запроса.
    Заполнить можете так, например:
    Код:
    Подвал.Параметры.ВашПараметр = КакиеТоДанные;
  9. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    вот я там белеберду и закомментировал, потому что на неё 1с ругается
    КакиеТоДанные нет в запросе, в этом вся и загвоздка
    и в запросе тоже ошибки закомментированы

    нужно как то из табличной части документа получить данные из подвала, что бы их потом встывлять
    Последнее редактирование: 25 сен 2014
  10. alexburn
    Online

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Отладчик вам в помощь. Но что-то мне подсказывает, что дело было не в бабине......
  11. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Код:
    //Для Н=1 По 31 Цикл
    //    Подвал.Параметры["д"+Н]=Выборка.График.Итог["д"+Н];
    //КонецЦикла;
    
    Итог["д"+Н]
    Вот оно что, Михалыч (с).

    Хотя это всё равно не правильно, нужно в запросе итоги брать и обходить результат по группировкам.
  12. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    это были мои попытки обратиться к подвалу табличной части
    не силён я ещё пока в 1с, что бы прям так и сразу брать и обходить
    мог бы код написать, что бы понятней было?
  13. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Ты уже к нему обращался.
    ТЧ.Итог(ИмяПоля) - метод табличной части, а ты через индекс...
    Код:
    Подвал.Параметры.Итог=Выборка.График.Итог("ИтогИтог");
  14. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    да и так и эдак обращался уже, ругается на "Итог", нет такого поля в "Выборка.График", как его там добавить не могу разобраться
    Код:
    Метод объекта не обнаружен (Итог)
    Подвал.Параметры.Итог=Выборка.График.Итог("ИтогИтог");
  15. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Ууу... как все запущено o_O
    Варианта 2:
    1) добавить ссылку на документ в запросе, а далее обращаться через Выборка.Ссылка.График.Итог(Колонка);
    2) в самом запросе получить итоги полей табличной части "График"
  16. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    при создании конструктором кнопки "Печать" создаётся команда "Печать"
    в ней есть процедура с директивой на сервере
    Код:
    &НаСервере
    Процедура Печать(ТабДок, ПараметрКоманды)
        Документы.<НазваниеДокумента>.Печать(ТабДок, ПараметрКоманды);
    КонецПроцедуры
    ПараметрКоманды это Массив, со всякими полезнастями :)
    вот эта процедура и передаётся в модуль менеджера
    Код:
    &НаСервере
    Процедура Печать(ТабДок, Ссылка) Экспорт
    ***
    КонецПроцедуры
    и из Ссылка уже можно получить то что нужно
    Код:
            //вывод подвала
            Итого.Параметры.Заполнить(Выборка);
            Для Н=1 По 31 Цикл
                Итого.Параметры["д"+Н]=Ссылка[0].График.Итог("д"+Н);
            КонецЦикла;
            Итого.Параметры.Итог=Ссылка[0].График.Итог("Итог");
            ТабДок.Вывести(Итого);
    
    З.Ы. сам спросил, сам ответил, всем спасибо за варианты :)
  17. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    не учёл что в Ссылку могут попадать несколько документов
    вот так будет правильней
    Код:
        ВставлятьРазделительСтраниц = Ложь;
        СчСтрок = 1;
        Пока Выборка.Следующий() Цикл
            Если ВставлятьРазделительСтраниц Тогда
                ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            КонецЕсли;
           
            //вывод шапки табличного документа
           
            //вывод шапки таблицы
           
            //вывод строк таблицы
    
            //вывод подвала 
            Итого.Параметры.Заполнить(Выборка);
            Для СчетчикСтрок=СчСтрок По Ссылка[СчСтрок-1].Номер Цикл
                Для СчетчикЯчеек=1 По 31 Цикл
                    Итого.Параметры["д"+СчетчикЯчеек]=Ссылка[СчетчикСтрок-1].График.Итог("д"+СчетчикЯчеек);
                КонецЦикла;
                Итого.Параметры.Итог=Ссылка[СчетчикСтрок-1].График.Итог("Итог");
                Прервать;
            КонецЦикла;
            СчСтрок = СчСтрок+1;
            ТабДок.Вывести(Итого);
           
            ВставлятьРазделительСтраниц = Истина;
        КонецЦикла;
    
Похожие темы
  1. lumor
    Ответов:
    3
    Просмотров:
    1.978
  2. Lily_1C
    Ответов:
    5
    Просмотров:
    2.281
  3. daab
    Ответов:
    15
    Просмотров:
    1.189
  4. 4ndr3j
    Ответов:
    3
    Просмотров:
    709
  5. badsector
    Ответов:
    3
    Просмотров:
    786
Загрузка...

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