Текст в таблицах СКД

1. newvideo 29.04.19 12:55 Сейчас в теме
2 дня уже потратил, ищу тему про СКД, как выводить в таблице не ресурсы, а текстовые значения? Посоветуйте что почитать? Или помогите разобраться...

Есть регистр сведений :

Сотрудник, Расписание (измерения)
Иванов | Пн
Иванов | Ср
Иванов | Пт
Петров | Пт
Петров | Вс

Нужно в отчете (скрин):

В строках сотрудники, колонки пользовательские поля День1-День7.
В пересечении строк и колонок данные из регистра из измерения Расписание: "Пн", "Вт", "Ср".

Сотрудники | День1 | День2 ...
Иванов | Пн | Ср
Петров | Пт | Вс

Как подскажите это реализовать?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 29.04.19 13:49 Сейчас в теме
(1) Уточните, пожалуйста. В исходной таблице у Вас есть две колонки: Сотрудник и Расписание (дни недели). А что тогда такое "День1, "День2" и т.д.? И каким образом у Вас задано выражение ресурса?
3. newvideo 29.04.19 14:12 Сейчас в теме
(2) Да 2 поля в регистре сведений. А день1 и день2 - это колонки отчета с абстрактными названиями дней, как бы по этим колонкам можно быстро сказать сколько дней отмечено в расписании сотрудника. Т.е. максимум 7 колонок (7дней). Они не относятся к каким-либо полям таблиц. Можно сказать они фиксированные, пользовательские. Но как это сделать в СКД я не знаю. Поэтому я в отчете в таблице в колонках задал Расписание и оно же Ресурс - догадываюсь, что так нельзя делать. Но сам не пойму как создать эти колонки. В колонке День1 может быть для одного сотрудника Пн, а для другого Вс. Не важно, что Вс будет День1, это как бы не номер дня недели, а номер дня в расписании сотрудника и для него может быть только одна запись в регистре, она означает, что у него в расписании один день Вс. С ресурсом "Расписание" сделал по аналогии как в найденных статьях, поставил функцию максимум, которая должна работать не только с числами. Но к сожалению "Расписание" в регистре не является ресурсом, а лишь измерением. Переделывать регистр нет возможности. Хотя конечно если решений не найдется наверное придется переделывать регистр, тогда нужно перепроводить документы? или писать отчет программно. Хочется понять, можно ли на СКД сделать такой отчет))
4. dhurricane 29.04.19 14:18 Сейчас в теме
(3) Уверен, что сделать можно. :) Прошу прощения, но я так и не понял, что за синтетические колонки "ДеньN" и как они связаны с расписанием.
5. newvideo 29.04.19 14:29 Сейчас в теме
(4) Прикрепляю скрин, я уже создал в отчете Пользовательские поля День1-День7 и даже ошибок нет, отчет выводит ресурсы (они же измерения Расписание), функция Количество выводит количество дней, теперь нужно написать в выражении чтобы выводился первый элемент, а в поле7 чтобы выводился 7-й, но список функций ресурсов этого не позволяет сделать
Прикрепленные файлы:
6. toypaul 63 29.04.19 14:43 Сейчас в теме
Не понятно как надо выводить. Надо чтобы дни недели попадали в колонку с нужным номером (пн = 1, вск = 7) или надо выводить по=порядку как есть у сотрудника?
7. newvideo 29.04.19 14:45 Сейчас в теме
(6) по порядку, если у сотрудника 3 записи в регистре, значит он отмечался 3 дня, для него поля с День4 по День7 будут пустыми.
8. newvideo 29.04.19 14:47 Сейчас в теме
Группировки убрал, они ни к чему, они остались от линейного отчета.
9. toypaul 63 29.04.19 15:00 Сейчас в теме
задача про то как пронумеровать строки в запросе в пределах группировки...

можно сделать в этом конкретном случае соединив набор с самим собой вроде такого

sel ect s, d, sum(d) n fr om t t0 join t t1 on t0.s = t1.s and t0.d >= t1.d
group by t0.s,t0.d
10. newvideo 29.04.19 15:02 Сейчас в теме
(9) спасибо, куда вставить этот код?))
11. toypaul 63 29.04.19 15:03 Сейчас в теме
(10) этот код надо адаптировать под свою задачу. ну и вставить в запрос набора
13. tusv 211 29.04.19 19:31 Сейчас в теме
(9)В СКД НомерПоПорядку это НомерПоПорядкуВГруппировке это штатные поля
14. dhurricane 29.04.19 20:49 Сейчас в теме
(13) Только вот их использовать как поля группировки нельзя.
12. newvideo 29.04.19 18:35 Сейчас в теме
Что прописать в агрегатных функциях?
15. Oldsad 30.04.19 09:01 Сейчас в теме
что то задачка посложнее оказалась, чем в соседней теме.
решена частично, т.к. в запросе используется конструкция первые 1000 для сортировки
ВЫБРАТЬ
	"День1" КАК ДеньПоПорядку,
	1 КАК НомерПоПорядку
ПОМЕСТИТЬ ДниПоПорядку

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"День2",
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"День3",
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"День4",
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"День5",
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"День6",
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"День7",
	7
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1000
	ЕщеРасписание.Физлицо КАК Физлицо,
	ЕщеРасписание.День КАК День,
	АВТОНОМЕРЗАПИСИ() КАК НомерЗаписи
ПОМЕСТИТЬ ТабАвтопорядок
ИЗ
	РегистрСведений.ЕщеРасписание КАК ЕщеРасписание

УПОРЯДОЧИТЬ ПО
	Физлицо,
	ЕщеРасписание.День.Порядок
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТабАвтопорядок.Физлицо КАК Физлицо,
	МИНИМУМ(ТабАвтопорядок.НомерЗаписи) КАК МинНомер
ПОМЕСТИТЬ ТабМинимум
ИЗ
	ТабАвтопорядок КАК ТабАвтопорядок

СГРУППИРОВАТЬ ПО
	ТабАвтопорядок.Физлицо
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТабАвтопорядок.Физлицо КАК Физлицо,
	ТабАвтопорядок.День КАК День,
	ТабАвтопорядок.НомерЗаписи - ТабМинимум.МинНомер + 1 КАК НомерПоПорядку
ПОМЕСТИТЬ ТабИтоговая
ИЗ
	ТабАвтопорядок КАК ТабАвтопорядок
		ЛЕВОЕ СОЕДИНЕНИЕ ТабМинимум КАК ТабМинимум
		ПО ТабАвтопорядок.Физлицо = ТабМинимум.Физлицо
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДниПоПорядку.ДеньПоПорядку КАК ДеньПоПорядку,
	ТабИтоговая.Физлицо КАК Физлицо,
	ТабИтоговая.День КАК День
ИЗ
	ДниПоПорядку КАК ДниПоПорядку
		ЛЕВОЕ СОЕДИНЕНИЕ ТабИтоговая КАК ТабИтоговая
		ПО ДниПоПорядку.НомерПоПорядку = ТабИтоговая.НомерПоПорядку
Показать

Физлицо - строки, ДеньПоПорядку - колонки, День - Ресурс (Максимум)
16. Oldsad 30.04.19 09:23 Сейчас в теме
каюсь, там такой же сложности задача
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот