helpf.pro
Регистрация

v8: Группировка в Табличном документе

alex81nzp
19.01.2012 14:26Прочитано: 39967
Здравствуйте!
Никак не могу разобраться, как в табличном документе, который создается на основе "Макета табличного документа", организовать Группировки.
Есть такой код:
Код 1C v 8.х
 
Запрос = Новый Запрос;
Запрос.Текст = "
"
|ВЫБРАТЬ
| ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации Как Подразделение,
| ШтатноеРасписаниеОрганизацийСрезПоследних.Должность Как Должность,
| ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок Как Количество,
| ШтатноеРасписаниеОрганизацийСрезПоследних.МинимальнаяТарифнаяСтавка Как Ставка,
|ИЗ
| РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(&ДатаСреза, ) КАК ШтатноеРасписаниеОрганизацийСрезПоследних
|ГДЕ
| ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации В ИЕРАРХИИ(&ПодразделениеОрганизации)";

Запрос.УстановитьПараметр("ПодразделениеОрганизации", ЭлементыФормы.Подразделение.Значение);
Запрос.УстановитьПараметр("ДатаСреза", ЭлементыФормы.ДатаФормирования.Значение);
Результат = Запрос.Выполнить();

Макет = ПолучитьМакет("Отчет");
ОбластьДанных = Макет.ПолучитьОбласть("Данные");

ТабДок = Новый ТабличныйДокумент;
ТабДок.НачатьАвтоГруппировкуСтрок();

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

и собственно сам макет
title

Чего не хватает, чтобы все группировалось по Подразделению?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
19.01.2012 15:20Ответ № 1
(0) alex81nzp, сделай проще:
1. скоприруй код запроса
2. зайди в конфигуратор и создай новый отчет
3. Используй конструктор печати
4. в нем укажи этот запрос и вывод в табл документ
5. смотри получившийся код *13
alex81nzp
20.01.2012 09:39Ответ № 2
Спасибо за подсказку, но результат меня не устроил, фактически получилось тоже самое за исключением вот этого кусочка:
Код 1C v 8.х
 ТабДок.НачатьАвтогруппировкуСтрок();

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

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

ТабДок.ЗакончитьАвтогруппировкуСтрок();


Есть еще идеи?

Нужно чтобы получилось вот такой структуры (взято из настроек Произвольных отчетов):

Подразделение организации (Иерархия)
Должность, Количество, Ставка

То что формируется через запрос в консоли отчетов меня устраивает, но не устраивает того для кого это делается! Потому и начал рыть в макетах. Ситуация осложняется еще и тем, что справочник подразделений имеет сложную структуру, т.е. например "1 цех" имеет глубину вложений 2, а именно:
Например:
1 цех
- Бухгалтерия
- Служба ИТ
- - Отдел по работе с пользователями
- - Еще какой-нибудь отдел
- - - какая-нибудь группа
и т.д.

в итоге при печати того же Штатного расписания, нужно чтобы в качестве группы шло название Цеха, а внутри вся его структура...
1 цех
- Бухгалтерия
...Бухгалтер, 3 шт., 10000 руб.
- Служба ИТ
- - Отдел по работе с пользователями
..........Лоботряс, 10 шт., 5000 руб.
- - Еще какой-нибудь отдел
- - - Какая-нибудь группа
.........Бездельник, 1, 3000 руб.

Вот как-то так ) Вопрос остается открытым
Изменено 20.01.12 09:41:18
E_Migachev
20.01.2012 10:41Ответ № 3
(2) alex81nzp, я правильно понял? - тебе нужено чтобы у каждого внутреннего подразделения ставился отступ больше чем у предудущего?
alex81nzp
23.01.2012 07:02Ответ № 4
(3) E_Migachev, тут дело не в отступах, попробуйте сделать запрос в консоли отчетов из первого поста, с вот такой настройкой:

Подразделение организации (Иерархия)
Должность, Количество, Ставка

Результат выполнения запроса:
title

Вот в макете (в области данных) должно быть так же сгруппировано

Поля "Категория персонала" в Вашей конфигурации нет, не обращайте на него внимание.
2 раза 14 цех потому,что так занесено в штатном (в корень цеха)

Наверное так понятнее будет.
E_Migachev
24.01.2012 11:12Ответ № 5
(4) alex81nzp, все-равно как-то не ясно что хочешь*09, сделай тот же запрос через конструктор и будет то же самое или в СКД...
alex81nzp
24.01.2012 13:42Ответ № 6
(5) E_Migachev, Простите, самое главное то я и не написал *12

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

Объясню суть, в общем есть штатное расписание, в нем заводим штатную единицу в такое-то подразделение... все это сохраняется в регистр накопления СведенияОШтатныхЕдиницах. все замечательно, но! Случилось так, что одинаковых должностей с одинаковыми разрядами в подразделении может быть несколько, что приводит к некоторым сложностям при вычислении Месячного фонда (Ставка * Оклад * Районный коэффициент). Было решено на закладке Дополнительно в поле Описание вводить расшифровку типа так: 2* 6000; 3* 4000; 7* 5000; Затем читаем строку, раскладываем её по полочкам и вуаля правильный фонд посчитан. Все это сделано, все считается и выводиться, но в виде обычной таблицы, а нужно хотябы как на рисунке выше с группировками.
Изменено 24.01.12 13:42:35
E_Migachev
24.01.2012 16:11Ответ № 7
(6) alex81nzp, ааа.... ну вот теперь понятно *13
Значит у тебя есть ТаблицаЗначений с результатом, далее грузи ее в СКД и выводи - СКД - Использования Внешнего набора данных - Таблица Значений
alex81nzp
25.01.2012 09:11Ответ № 8
(7) E_Migachev, Посмотрел пример по ссылке, что-то похожее уже делал, кажется с несколькими схемами в одном отчете, только без Набор данных - объект.
Теперь новый вопрос ) Ну вот я имею некую ТЗ, создаю в СКД Набор данных-объект, указываю имя, в коде добавляю следующее:
Код 1C v 8.х
 
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ);

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

ПриОткрытии();
ПодразделениеПриИзменении(Элемент);

////////////////////////////////////
////////////Вывод отчета////////////
////////////////////////////////////
//Из схемы возьмем настройки
Настройки = КомпоновщикНастроек.Настройки;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);

//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат; Результат.Очистить();

//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Уж простите за мою глупость, но ничего не изменилось! Разве ничего больше в СКД, кроме как Имя объекта, задавать не нужно?
alex81nzp
25.01.2012 09:27Ответ № 9
Сам ответил на свой вотрос *06
Конечно же нужно, описать поля вручную и установить связь наборов данных Конструктор СКД, закладка Наборы данных-объект
Изменено 25.01.12 09:30:07
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.