8.х Сортировка колонок в отчете

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

  1. TopicStarter Overlay
    finkor
    Offline

    finkor

    Регистрация:
    12 авг 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Добрый день.

    У меня не получается организовать сортировку (упорядочивание) колонок в отчете,
    по полям "Дата оплаты" - первый уровень, и "Номер заявки" - второй уровень.


    ===============================================================

    Код:
    Процедура СформироватьНажатие(Элемент)
    
    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    ТабДок.Очистить();
    
    Макет  = ЭтотОбъект.ПолучитьМакет("Макет");
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьЗаголовок.Параметры.Период =	ПредставлениеПериода(НачалоДня(НачПериода), КонецДня(КонПериода), "ФП = Истина");
    ТабДок.Вывести(ОбластьЗаголовок);
    
    ОбластьПовтораШапки = ТабДок.Область("R7C1:R7C13");
    ТабДок.ПовторятьПриПечатиСтроки = ОбластьПовтораШапки;
    
    ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ТабДок.Вывести(ОбластьШапка);
    
    ЗапросОплаченоЗаПериод = Новый Запрос;
    ЗапросОплаченоЗаПериод.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ОснованияДляОплаты.Регистратор.ДокументОснование КАК Заявка,
    |	ЗаявкаНаОплатуБюджет.Статья,
    |	ЗаявкаНаОплатуБюджет.Сумма,
    |	ЗаявкаНаОплатуБюджет.Ссылка.АналитическийЦентр,
    |	ЗаявкаНаОплатуБюджет.Ссылка.Контрагент
    |ИЗ
    |	РегистрНакопления.ОснованияДляОплаты КАК ОснованияДляОплаты
    |	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаОплату.Бюджет КАК ЗаявкаНаОплатуБюджет
    |	ПО ОснованияДляОплаты.Регистратор.ДокументОснование = ЗаявкаНаОплатуБюджет.Ссылка
    |ГДЕ
    |	ОснованияДляОплаты.Период >= &ДатаНач
    |	И ОснованияДляОплаты.Период <= &ДатаКон
    |	И ЗаявкаНаОплатуБюджет.Сумма <> 0";
    
    
    ЗапросОплаченоЗаПериод.УстановитьПараметр("ДатаНач", НачалоДня(НачПериода));
    ЗапросОплаченоЗаПериод.УстановитьПараметр("ДатаКон", КонецДня(КонПериода));	
    
    РезультатОплаченоЗаПериод = ЗапросОплаченоЗаПериод.Выполнить().Выгрузить();
    
    //РезультатОплаченоЗаПериод.Сортировать("АналитическийЦентр, Статья, Контрагент");
    
    Для Каждого СтрокаПериода Из РезультатОплаченоЗаПериод Цикл
    
    ОбластьСтроки = Макет.ПолучитьОбласть("СтрокаТаблицы");
    
    ОбластьСтроки.Параметры.АналитЦентр   = СтрокаПериода.АналитическийЦентр;
    ОбластьСтроки.Параметры.НомерЗаявки   = СтрокаПериода.Заявка.Номер;
    ОбластьСтроки.Параметры.Статус        = СтрокаПериода.Заявка.Статус;
    ОбластьСтроки.Параметры.СтатьяБюджета = СтрокаПериода.Статья;
    ОбластьСтроки.Параметры.Контрагент    = СтрокаПериода.Заявка.Номер;
    ОбластьСтроки.Параметры.ТоварУслуга   = СтрокаПериода.Заявка.НазначениеПлатежа;
    СуммаВал = СтрокаПериода.Сумма;
    ОбластьСтроки.Параметры.CуммаВал      = СуммаВал;
    ОбластьСтроки.Параметры.Валюта        = СтрокаПериода.Заявка.Договор.ВалютаВзаиморасчетов;
    
    ЗапросДатаОплаты = Новый Запрос;
    ЗапросДатаОплаты.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
    |ОснованияДляОплаты.Период
    |ИЗ
    |РегистрНакопления.ОснованияДляОплаты КАК ОснованияДляОплаты
    |ГДЕ
    |ОснованияДляОплаты.Регистратор.ДокументОснование = &Заявка
    |
    |УПОРЯДОЧИТЬ ПО   	
    |ОснованияДляОплаты.Период";
    
    ЗапросДатаОплаты.УстановитьПараметр("Заявка", СтрокаПериода.Заявка);
    
    РезультатДатаОплаты = ЗапросДатаОплаты.Выполнить().Выбрать();
    
    РезультатДатаОплаты.Следующий();
    ОбластьСтроки.Параметры.ДатаОплаты  = Формат(РезультатДатаОплаты.Период, "ДЛФ=Д");
    
    
    ЗапросКурс = Новый Запрос;
    ЗапросКурс.Текст = "ВЫБРАТЬ
    |КурсыВалютСрезПоследних.Курс
    |ИЗ
    |РегистрСведений.КурсыВалют.СрезПоследних(&ДатаЗаявки, Валюта = &НужнаяВалюта) КАК КурсыВалютСрезПоследних"; 
    
    ЗапросКурс.УстановитьПараметр("ДатаЗаявки",   РезультатДатаОплаты.Период);
    ЗапросКурс.УстановитьПараметр("НужнаяВалюта", СтрокаПериода.Заявка.Договор.ВалютаВзаиморасчетов);
    
    РезультатКурс = ЗапросКурс.Выполнить().Выбрать();
    
    Пока РезультатКурс.Следующий() Цикл
    СуммаТенге = Окр((РезультатКурс.Курс * СуммаВал), 2);
    ОбластьСтроки.Параметры.Курс          = РезультатКурс.Курс;
    ОбластьСтроки.Параметры.СуммаТенге    = СуммаТенге;
    КонецЦикла;
    
    
    ОбластьСтроки.Параметры.ДатаДоговора  = СтрокаПериода.Заявка.Договор.ДатаДоговора;
    ОбластьСтроки.Параметры.Договор       = СтрокаПериода.Заявка.Договор;
    ТабДок.Вывести(ОбластьСтроки);
    КонецЦикла;	
    
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.АвтоМасштаб = Истина;
    
    КонецПроцедуры
    
    ===================================================================

    Помогите pls разобраться.
    пс: прошу строго не ругать, ибо только учусь.

    Спасибо!

    Вложения:

  2. Oleg_NSK
    Offline

    Oleg_NSK Опытный в 1С

    Регистрация:
    25 окт 2010
    Сообщения:
    164
    Симпатии:
    0
    Баллы:
    26
    Как я понял тут запрос вызывается в цикле. Надо бы все данные за раз извлекать если возможно. При таком способе сортировки не получится. Если хотите использовать именно этот алгоритм, тогда сначала запихните все данные в таблицу значений, отсортируйте как надо а потом печатайте
  3. TopicStarter Overlay
    finkor
    Offline

    finkor

    Регистрация:
    12 авг 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    Спасибо,а других вариантов нет?
  4. Vladius
    Offline

    Vladius Опытный в 1С

    Регистрация:
    10 ноя 2010
    Сообщения:
    663
    Симпатии:
    3
    Баллы:
    29
    Запрос через конструктор запроса делали или в ручную?
  5. TopicStarter Overlay
    finkor
    Offline

    finkor

    Регистрация:
    12 авг 2009
    Сообщения:
    7
    Симпатии:
    0
    Баллы:
    1
    в ручную.

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