обработка конструктора печати

анна1992

Новичок
Здравствуйте, я создала документ Счет-фактура в нем есть табл.часть "Товар", в ней есть столбцы наименование, цена. кол-во, сумма. В подвале считается Итог поля Сумма. У меня возникла проблема при добавлении конструктора Печати. когда я хочу распечатать этот документ вот этот Подвал не высвечивается на макете Печати. Я в макете создала новую область назначила имя, и одной ячейки назначила имя этого параметра. В модуле менеджера прописала:
Код:
ОбластьСумма  = Макет.ПолучитьОбласть("Сумма");
ОбластьСумма.Параметры.Сумма = Товар.Итог("Сумма");
ТабДок.Вывести(ОбластьСумма);
И он мне выводит что переменная Товар не определена, и я не могу разобраться куда ее надо забить чтоб программа ее видела
 

Andrey

ВР
Команда форума
Конфигурация какая? У разных конфигураций табличные части могут по разному называться.
 

Andrey

ВР
Команда форума
Дык и я тоже. Только конструктор работает с прикладными объектами конкретной конфигурации. И какие там в документе табличные части определяется не платформой, а конкретными прикладным решением. К тому же, скорее всего, перед "Товар.Итог("Сумма")" должно быть определение объекта. Например "МойОбъект.ТабличнаяЧастьОбъекта.Итог("Сумма")""
 

Andrey

ВР
Команда форума
Вы конструктор использовали, или макет сами "собирали". Процедура печати которая формирует печатную форму где находится в форме или в модуле объекта или в модуле менеджера? Если в модуле объекта - попробуйте "Товар.Итог("Сумма")" заменить на "ЭтотОбъект.Товар.Итог("Сумма")". Если в модуле формы - текст процедуры печати "в студию".
 

анна1992

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

    Выборка = Запрос.Выполнить().Выбрать();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьтоварШапка = Макет.ПолучитьОбласть("товарШапка");
    Областьтовар = Макет.ПолучитьОбласть("товар");

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьтоварШапка);
        Выборкатовар = Выборка.товар.Выбрать();
        Пока Выборкатовар.Следующий() Цикл
            Областьтовар.Параметры.Заполнить(Выборкатовар);
            ТабДок.Вывести(Областьтовар, Выборкатовар.Уровень());
        КонецЦикла;
                Выборкатовар = Выборка.товар.Выбрать();
        Пока Выборкатовар.Следующий() Цикл
            Областьтовар.Параметры.Заполнить(Выборкатовар);
            ТабДок.Вывести(Областьтовар, Выборкатовар.Уровень());
        КонецЦикла;
  ОбластьСумма = Макет.ПолучитьОбласть("Сумма");
ОбластьСумма.Параметры.Сумма = ЭтотОбъект.Товар.Итог("Сумма");
ТабДок.Вывести(ОбластьСумма);
 
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;

КонецПроцедуры
 

Andrey

ВР
Команда форума
1. Вы процедуру печати разместили в модуле менеджера документа. В данном контекст не существует ни ссылки на объект, ни сам объект. Обратите внимание что система сама передает ссылку на объект через параметр процедуры "Печать". Объект и ссылка на объект существуют в модуле объекта и в модуле формы объекта, за исключением модулей форм списков.
2. Данные для печати Вы получаете запросом и выборками результата запроса, значит и обращаться нужно к реквизитам соответствующим полям запроса.
3. Выборка результата запроса не имеет метода или свойства "Итог". Для того что бы получить итоги по числовым значениям полей запроса Вам нужно их накапливать в отдельных переменных в цикле обхода выборки результата запроса.

В Вашем коде я удалил вторую выборку по составу табличной части документа, и добавил переменную "СуммаТоваров". В цикле обхода по "ВыборкаТовар" я произвожу накопление значений поля "Сумма". После того как цикл завершиться накопленное значение передается в параметр области макета.

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

Выборка = Запрос.Выполнить().Выбрать();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

Шапка = Макет.ПолучитьОбласть("Шапка");
ОбластьтоварШапка = Макет.ПолучитьОбласть("товарШапка");

Областьтовар = Макет.ПолучитьОбласть("товар");
ОбластьСумма = Макет.ПолучитьОбласть("Сумма");

ТабДок.Очистить();

ВставлятьРазделительСтраниц = Ложь;
Пока Выборка.Следующий() Цикл
Если ВставлятьРазделительСтраниц Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

ТабДок.Вывести(ОбластьЗаголовок);

Шапка.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Шапка, Выборка.Уровень());
ТабДок.Вывести(ОбластьтоварШапка);

СуммаТоваров = 0;

Выборкатовар = Выборка.товар.Выбрать();
Пока Выборкатовар.Следующий() Цикл
Областьтовар.Параметры.Заполнить(Выборкатовар);
ТабДок.Вывести(Областьтовар, Выборкатовар.Уровень());

СуммаТоваров = СуммаТоваров + Выборкатовар.Сумма;

КонецЦикла;

ОбластьСумма.Параметры.Сумма = СуммаТоваров;
ТабДок.Вывести(ОбластьСумма);

ВставлятьРазделительСтраниц = Истина;
КонецЦикла;

КонецПроцедуры
 

Andrey

ВР
Команда форума
Извините, текст кода не отформатировался. :)
 

анна1992

Новичок
В модуле менеджера все хорошо ошибок не выдает, но когда я запускаю конфигурацию и нажимаю на Печать, он ругается
{Документ.Счет_фактура.МодульМенеджера(90)}: Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(15, 2)}: Неправильный псевдоним "Документ.Счет_фактура"
<<?>>Документ.Счет_фактура КАК Счет_фактура
 

Saman

Участник
Тут один человек считает, что вы троллите Анна. У Вас ошибка здесь
Код:
    |      сумма_с_ндс
    |      итогСумма
    |    Документ.Счет_фактура КАК Счет_фактура
    |ГДЕ
    |    Счет_фактура.Ссылка В (&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
 

Andrey

ВР
Команда форума
Пропущена запятая, после "сумма_с_ндс", пропущена закрывающая скобка после "итогСумма" и нет определения секции источника данных "ИЗ".

наверное должно быть так:
Код:
|     сумма_с_ндс,
|     итогСумма)
|ИЗ
|     Документ.Счет_фактура КАК Счет_фактура
 
Верх