Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 07:14

Как правильно передать значение в макет?

Автор Yamuna, 04 мар 2020, 11:27

0 Пользователей и 1 гость просматривают эту тему.

Yamuna

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


//Итог области ШапкаНемАктивы
ШапкаНемАктивы.Параметры.ВсегоКолВоНемАкт = ВсегоКолНемАкт;
ШапкаНемАктивы.Параметры.ВсегоСуммаНемАкт = ВсегоСумНемАкт;
ТабДок.Вывести(ШапкаНемАктивы);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТиповойОстатки.Субконто1.Представление КАК НаименованиеНемАкт,
| 1 КАК КоличествоНемАкт,
| ТиповойОстатки.СуммаОстаток КАК СуммаНемАкт
|ИЗ
| РегистрБухгалтерии.Типовой.Остатки(&ДатаНачала, Счет = &Счет, &СубНемАкт, Субконто1.ВидНМА = &ПрочНемАктивы) КАК ТиповойОстатки";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ПрочНемАктивы", Перечисления.ВидыНМА.ПрочиеНематериальныеАктивы);

СубНемАкт = Новый Массив;
СубНемАкт.Добавить(ПланыВидовХарактеристик.ВидыСубконтоТиповые.НематериальныеАктивы);

Запрос.УстановитьПараметр("СубНемАкт", СубНемАкт);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Типовой.ПрочиеНематериальныеАктивы);

РезультатЗапроса = Запрос.Выполнить();

ВсегоКолНемАкт = 0;
ВсегоСумНемАкт = 0;

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

ef0din

Цитата: Yamuna от 04 мар 2020, 11:27
Добрый день, подскажите как правильно передать значение в ячейку макета. В отчете есть под заголовок "Прочие нематериальные активы" и у него должно выводиться сумма количества и сумма денег накапливаемые в цикле, а ниже проходит сам цикл. и у меня не получается вывести суммируемые количество и сумму в макет так как подзаголовок находится выше Цикла. как быть в этой ситуации?


//Итог области ШапкаНемАктивы
ШапкаНемАктивы.Параметры.ВсегоКолВоНемАкт = ВсегоКолНемАкт;
ШапкаНемАктивы.Параметры.ВсегоСуммаНемАкт = ВсегоСумНемАкт;
ТабДок.Вывести(ШапкаНемАктивы);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТиповойОстатки.Субконто1.Представление КАК НаименованиеНемАкт,
| 1 КАК КоличествоНемАкт,
| ТиповойОстатки.СуммаОстаток КАК СуммаНемАкт
|ИЗ
| РегистрБухгалтерии.Типовой.Остатки(&ДатаНачала, Счет = &Счет, &СубНемАкт, Субконто1.ВидНМА = &ПрочНемАктивы) КАК ТиповойОстатки";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ПрочНемАктивы", Перечисления.ВидыНМА.ПрочиеНематериальныеАктивы);

СубНемАкт = Новый Массив;
СубНемАкт.Добавить(ПланыВидовХарактеристик.ВидыСубконтоТиповые.НематериальныеАктивы);

Запрос.УстановитьПараметр("СубНемАкт", СубНемАкт);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Типовой.ПрочиеНематериальныеАктивы);

РезультатЗапроса = Запрос.Выполнить();

ВсегоКолНемАкт = 0;
ВсегоСумНемАкт = 0;

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


Может прям в запросе вычислить сумму, добавить ее в каждую из строк запроса и, при первой итерации, выводить шапку?

Yamuna

Цитата: ef0din от 04 мар 2020, 11:31
Может прям в запросе вычислить сумму, добавить ее в каждую из строк запроса и, при первой итерации, выводить шапку?
можете подсказать как это реализовать?

LexaK

самое простое, попробуйте так

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

    //вывод итогов
        ОбластьНемАктивы.Параметры.НаименованиеНемАктив = "ИТОГИ";
        ОбластьНемАктивы.Параметры.КолВоНемАкт = ВсегоКолНемАкт;
        ОбластьНемАктивы.Параметры.СуммаНемАкт = ВсегоСумНемАкт;
        ТабДок.Вывести(ОбластьНемАктивы); // уровень?

если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 04 мар 2020, 11:36
самое простое, попробуйте так

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

    //вывод итогов
        ОбластьНемАктивы.Параметры.НаименованиеНемАктив = "ИТОГИ";
        ОбластьНемАктивы.Параметры.КолВоНемАкт = ВсегоКолНемАкт;
        ОбластьНемАктивы.Параметры.СуммаНемАкт = ВсегоСумНемАкт;
        ТабДок.Вывести(ОбластьНемАктивы); // уровень?



LexaK а там у меня итоги должны вывестись выше цикла в макете, сначала выводится итоги, а потом уже разные записи, а итоги сверху хотят выводить, это надо как то в запросе уже сразу считать и потом когда выводить сначала итоги в цикле а потом записи,вот только не знаю как итоги сразу посчитать в запросе, это еще один пакетный запрос надо?

LexaK

можно так сделать, вот это
ВыборкаНемАктивы = РезультатЗапроса.Выбрать();
замените на
ТЗНемАктивы = РезультатЗапроса.Выгрузить();
получаете таблицу значений, по ней легко посчитать итоги

//вывод итогов
        ОбластьНемАктивы.Параметры.НаименованиеНемАктив = "ИТОГИ";
        ОбластьНемАктивы.Параметры.КолВоНемАкт = ТЗНемАктивы.Итог("КоличествоНемАкт");
        ОбластьНемАктивы.Параметры.СуммаНемАкт = ТЗНемАктивы.Итог("СуммаНемАкт");
        ТабДок.Вывести(ОбластьНемАктивы);
//затем выводите ТЗ
Для каждого ВыборкаНемАктивы Из ТЗНемАктивы Цикл
    //как было
КонецЦикла;
если помогло нажмите: Спасибо!

ef0din

Цитата: Yamuna от 04 мар 2020, 11:27
Добрый день, подскажите как правильно передать значение в ячейку макета. В отчете есть под заголовок "Прочие нематериальные активы" и у него должно выводиться сумма количества и сумма денег накапливаемые в цикле, а ниже проходит сам цикл. и у меня не получается вывести суммируемые количество и сумму в макет так как подзаголовок находится выше Цикла. как быть в этой ситуации?


//Итог области ШапкаНемАктивы
ШапкаНемАктивы.Параметры.ВсегоКолВоНемАкт = ВсегоКолНемАкт;
ШапкаНемАктивы.Параметры.ВсегоСуммаНемАкт = ВсегоСумНемАкт;
ТабДок.Вывести(ШапкаНемАктивы);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТиповойОстатки.Субконто1.Представление КАК НаименованиеНемАкт,
| 1 КАК КоличествоНемАкт,
| ТиповойОстатки.СуммаОстаток КАК СуммаНемАкт
|ИЗ
| РегистрБухгалтерии.Типовой.Остатки(&ДатаНачала, Счет = &Счет, &СубНемАкт, Субконто1.ВидНМА = &ПрочНемАктивы) КАК ТиповойОстатки";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ПрочНемАктивы", Перечисления.ВидыНМА.ПрочиеНематериальныеАктивы);

СубНемАкт = Новый Массив;
СубНемАкт.Добавить(ПланыВидовХарактеристик.ВидыСубконтоТиповые.НематериальныеАктивы);

Запрос.УстановитьПараметр("СубНемАкт", СубНемАкт);
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Типовой.ПрочиеНематериальныеАктивы);

РезультатЗапроса = Запрос.Выполнить();

ВсегоКолНемАкт = 0;
ВсегоСумНемАкт = 0;

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



В запросе добавляете поле и заполняете для каждой из строк необходимой общей суммой.
Перед циклом: "ЭтоПервый = Истина". В цикле:
Если ЭтоПервый Тогда
//получаем макет шапки, подставляем значением добавленного в запросе поля, выводим
ЭтоПервый = Ложь;
Иначе
КонецЕсли;

LexaK, видимо имеет в виду, что это через параметр метода "Вывести" "уровень" можно сделать проще. Самому как-то не приходилось пользоваться им, так что почитайте об этом методе подробней в синтаксис-помощнике, мб и правда изобретать велосипед нет смысла.

Yamuna

Цитата: LexaK от 04 мар 2020, 12:43
можно так сделать, вот это
ВыборкаНемАктивы = РезультатЗапроса.Выбрать();
замените на
ТЗНемАктивы = РезультатЗапроса.Выгрузить();
получаете таблицу значений, по ней легко посчитать итоги

//вывод итогов
        ОбластьНемАктивы.Параметры.НаименованиеНемАктив = "ИТОГИ";
        ОбластьНемАктивы.Параметры.КолВоНемАкт = ТЗНемАктивы.Итог("КоличествоНемАкт");
        ОбластьНемАктивы.Параметры.СуммаНемАкт = ТЗНемАктивы.Итог("СуммаНемАкт");
        ТабДок.Вывести(ОбластьНемАктивы);
//затем выводите ТЗ
Для каждого ВыборкаНемАктивы Из ТЗНемАктивы Цикл
    //как было
КонецЦикла;


LexaK Как всегда у Вас все правильно, спасибо большое!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск