Отчет-календарь СКД

Программирование - Практика программирования

Хотите повысить наглядность отчетов и выходных форм? Достаточно совместить их с календарем ) Это довольно легко реализовать при помощи СКД.

Сразу отмечу, что источником отчета может быть любая таблица системы: количество созданных документов, данные по продажам, долги контрагентам и проч.

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

ВЫБРАТЬ
    0 КАК Цифра
ПОМЕСТИТЬ Таблица

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

ВЫБРАТЬ
    1

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

ВЫБРАТЬ
    2

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

ВЫБРАТЬ
    3

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

ВЫБРАТЬ
    4

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

ВЫБРАТЬ
    5

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

ВЫБРАТЬ
    6

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

ВЫБРАТЬ
    7

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

ВЫБРАТЬ
    8

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

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаДесятков.Цифра * 10 + Таблица.Цифра КАК НомерДня,
    ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, МЕСЯЦ), ДЕНЬ, ТаблицаДесятков.Цифра * 10 + Таблица.Цифра - 1) КАК ДатаМесяца
ПОМЕСТИТЬ ДниМесяца
ИЗ
    Таблица КАК ТаблицаДесятков,
    Таблица КАК Таблица
ГДЕ
    ТаблицаДесятков.Цифра * 10 + Таблица.Цифра МЕЖДУ 1 И ДЕНЬ(КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ))

;

В первом запросе пакета формируем таблицу цифр от 0 до 9. Во втором запросе получаем дни месяца.

Теперь остается соединить эту таблицу с интересующей нас. В моем случае это таблица поступлений на расчетный счет - РегистрБухгалтерии.Хозрасчетный с отбором по счету 51.

ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(ДниМесяца.ДатаМесяца, ДЕНЬ) КАК Дата,
    НАЧАЛОПЕРИОДА(ДниМесяца.ДатаМесяца, ДЕНЬ) КАК ДатаКалендаря,
    НЕДЕЛЯ(ДниМесяца.ДатаМесяца) КАК Неделя,
    ДЕНЬНЕДЕЛИ(ДниМесяца.ДатаМесяца) КАК День,
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДниМесяца.ДатаМесяца, НЕДЕЛЯ, -НЕДЕЛЯ(ДниМесяца.ДатаМесяца) + 1), ДЕНЬ) КАК НормДН,
    ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотДт, 0) КАК Сумма
ИЗ
    ДниМесяца КАК ДниМесяца
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, День, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета), , Организация = &Организация, , ) КАК ХозрасчетныйОбороты
        ПО ДниМесяца.ДатаМесяца = ХозрасчетныйОбороты.Период

Остается установить условное оформление и получаем результат как на картинке (данные по поступлениям на расчетный счет в тыс. руб.).

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

Скачать файлы

Наименование Файл Версия Размер
Отчет-календарь
.erf 7,86Kb
01.06.17
18
.erf 1.0.0.1 7,86Kb 18 Скачать

См. также

Комментарии
1. Nikita Leleko (sigmov) 07.06.17 05:06 Сейчас в теме
2. Александр Крынецкий (echo77) 739 07.06.17 07:12 Сейчас в теме
Скрин настроек добавьте, пожалуйста
3. Олег К. (kiberiq) 65 07.06.17 08:47 Сейчас в теме
(2) Интерес вероятно представляет условное оформление. Скрин прикладываю. Более детально можно ознакомится в файле отчета erf публикации.
Прикрепленные файлы:
4. Николай Зайков (Mortiferus) 270 07.06.17 09:10 Сейчас в теме
5. Vlad (vld_trade) 25 07.06.17 10:27 Сейчас в теме
Необычно! Спасибо за идею!
Только вот 1С-овское "НЕДЕЛЯ(Дата)" в большинстве своем не совпадает с печатными календарями.
6. Babys (babys) 76 07.06.17 12:16 Сейчас в теме
(5) Я уже писал 1С-кам, года так с полтора назад, так и висит в неисправленных.
7. Дмитрий (sommid) 07.06.17 13:50 Сейчас в теме
(5) (6) я в запросе так определяю:
|	ГОД(ДОБАВИТЬКДАТЕ(Посетители.День, ДЕНЬ, -(ДЕНЬНЕДЕЛИ(Посетители.День) - 4))) КАК Год,
	|	(ВЫРАЗИТЬ((ДЕНЬГОДА(ДОБАВИТЬКДАТЕ(Посетители.День, ДЕНЬ, -(ДЕНЬНЕДЕЛИ(Посетители.День) - 4))) - 1) / 7 КАК ЧИСЛО(15, 0))) + ВЫБОР
	|		КОГДА (ВЫРАЗИТЬ((ДЕНЬГОДА(ДОБАВИТЬКДАТЕ(Посетители.День, ДЕНЬ, -(ДЕНЬНЕДЕЛИ(Посетители.День) - 4))) - 1) / 7 КАК ЧИСЛО(15, 0))) > (ДЕНЬГОДА(ДОБАВИТЬКДАТЕ(Посетители.День, ДЕНЬ, -(ДЕНЬНЕДЕЛИ(Посетители.День) - 4))) - 1) / 7
	|			ТОГДА -1
	|		ИНАЧЕ 0
	|	КОНЕЦ + 1 КАК НеделяГода
...Показать Скрыть


в коде так (в коде лично мне надо было вместе с годом):
Функция НомерНеделиПоIso8601(Дата)
	
	ЧетвергТойЖеНедели = Дата - (ДеньНедели(Дата) - 4) * 24 * 3600;	
	НомерНедели = Цел((ДеньГода(ЧетвергТойЖеНедели) - 1) / 7) + 1;
	
	Возврат Формат(ЧетвергТойЖеНедели, "ДФ=гггг") + Формат(НомерНедели, "ЧЦ=3; ЧВН=; ЧГ=0");
  
КонецФункции
...Показать Скрыть
8. Владимир (Vlad_2008) 9 07.06.17 16:01 Сейчас в теме
Да, идея хорошая. Тоже пользуюсь выводом статистики в форме календаря.
Давно даже делал публикацию на эту тему, где описывал разные варианты.

Статистика по документам выглядела так



и более подробный вариант



Но особого интереса к публикации не было, снес ее.
Оставьте свое сообщение