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

Группировка в отчёте

Автор Sinsinmin, 04 фев 2011, 11:44

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

progmikon

Я прикрепил пример отчета с группировкой.

Sinsinmin

Я использую метод выгрузить, свернуть, сортировать, а в примере метод выбрать.

progmikon

Цитата: Sinsinmin от 07 фев 2011, 10:16
Я использую метод выгрузить, свернуть, сортировать, а в примере метод выбрать.

Пример приведен не для того, чтобы вы просто скопировали и вставили в отчет. Если вы не поняли что такое уровень ни из примера, ни из синтаксиса помощника, то я попробую объяснить так: уровень это число.
Выводить области по уровням вы можете через конструкцию:

ТабДок.Вывести(ОбластьМакета, Уровень); //где уровень, это число 1,2,3 и т.п.


Дата1 //уровень 1
  документ1// уровень 2
  документ2// уровень 2
Дата2 //уровень 1
  документ3//уровень2

Sinsinmin

То что уровень это цифра я понял. Как должно сворачиваться я тоже понимаю, но вот чего не понимаю это что и где писать. В данный момент я написал так.
Пока КоличествоДней > 0 цикл
      КоличествоБрака = 0;
      КоличествоНевыхода = 0;
      КоличествоДней = КоличествоДней - 1;      
      Для каждого СтрокаБрака из МассивПоБраку цикл
         ЭлементыФормы.ТабДок.НачатьАвтогруппировкуСтрок();
         ДатаСтроки =Дата_(СтрокаБрака.ДатаБракаМакет);
         Если ДатаСтроки >= НачальнаяДатаЦикла и ДатаСтроки <  НачальнаяДатаЦикла + 86400 тогда
            Если СтрокаБрака.Невыход <> 0 тогда               
               КоличествоБрака = СтрокаБрака.Количество;
               Отливка = СтрокаБрака.отливка;
               ПроцентНевыхода = СтрокаБрака.Невыход;
               Область.Параметры.КоличествоНевыхода = КоличествоБрака;
               Область.Параметры.ПроцентНевыхода = ПроцентНевыхода;
               Область.Параметры.Дата = СтрокаБрака.ДатаБракаМакет;
               Область.Параметры.Отливка = СтрокаБрака.Отливка;
               ЭлементыФормы.ТабДок.Вывести(Область,1,"ДатаБракаМакет");
             КонецЕсли;
         КонецЕсли;
      
      КонецЦикла;   
         ЭлементыФормы.ТабДок.ЗакончитьАвтогруппировкуСтрок();
   НачальнаяДатаЦикла = НачальнаяДатаЦикла + 86400;
   КонецЦикла;   

Ничё не получается.



progmikon

Конечно ничего не получится.

ЭлементыФормы.ТабДок.Вывести(Область,1,"ДатаБракаМакет");


Уровень у вас везде первый, какую же иерархию вы хотите увидеть?

Sinsinmin

Для начала нужно свернуть по дате. К примеру есть три строки с датой 01.01.2011 и две с 02.02.2011. Нужно свернуть чтобы было две строки и раскрывались они на плюсик. Дальше я конечно уже сам разберусь, но вот как начать я не пойму.

progmikon

Цитата: Sinsinmin от 07 фев 2011, 11:32
Для начала нужно свернуть по дате. К примеру есть три строки с датой 01.01.2011 и две с 02.02.2011. Нужно свернуть чтобы было две строки и раскрывались они на плюсик. Дальше я конечно уже сам разберусь, но вот как начать я не пойму.
Я бы это сделал через ИТОГИ в запросе (как и в моем примере). Я не очень понимаю зачем вам вообще нужно "Свернуть" и "Сортировать", если это все можно сделать в запросе?

Sinsinmin

Если делать итоги, то получается строка с пустой датой, которая не пройдёт процедуру перевода даты из строки в дату. Чтобы было всё по порядку и в каждой строке были даты я вижу только такой способ. Не спорю что есть другие способы, но я их не знаю. Отчёт выводится правильно. Все даты и проценты по порядку. Остаётся только свернуть по дате, но без лишних изменений в запросе и коде. Как я понимаю проблема в уровнях. Пока что достаточно одного уровня свёртки. Это по дате.

progmikon

Цитата: Sinsinmin от 07 фев 2011, 12:05
без лишних изменений в запросе и коде.

Может тогда на этом и закончим дискуссию? )
Цитата: Sinsinmin от 07 фев 2011, 12:05
Если делать итоги, то получается строка с пустой датой, которая не пройдёт процедуру перевода даты из строки в дату.

Вот это я вообще не понял.

Ну да ладно.
Используйте тогда следующий подход: в цикле проверяем дату: если она не равна предыдущей, значит выводим ее в первый уровень иначе - второй.

ТекДата = "";
Для Каждого ТекСтрока Из МассивЧегоТоТам Цикл
Если ТекДата <> ТекСтрока.Дата Тогда
//выводим первый уровень
ТекДата = ТекСтрока.Дата;
КонецЕсли;
//здесь стабильно выводим 2
КонецЦикла;

Sinsinmin

Вот) спасибо) теперь буду уже дальше сам доделывать. Главное вывелись 2 плюсика из 3 требуемых) так как видимо ещё вначале нужно где то вписать. Спасибо. Тему можно закрыть)

Теги:

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

Рейтинг@Mail.ru

Поиск