Имя: Пароль:
1C
1С v8
Отчет в 1С
,
0 Kitttt
 
17.01.22
15:43
Всем добрый вечер, пишу отчет на 1С 8.3. Подскажите пожалуйста, как можно разбить колонки по месяцам? Попробовал в ручную забить, все выводит хорошо, но эти месяца идут в алфавитном порядке, хотелось чтобы они логичней шли с января,....декабрь, когда делал не задумался об этом...как-нибудь можно решить это по другому?
Суть отчета: есть справочник Сотрудники в котором реквизит ДатаРождения, необходимо чтобы за указанный период выводилось количество сотрудников по месяцам и по возрастному диапозону. Диапозон в строках, месяца в колонках...
Запроc:
ВЫБРАТЬ
    Сотрудники.Наименование КАК Наименование,
    Сотрудники.ДатаРождения КАК ДатаРождения,
    ГОД(&ТекущаяДата) - ГОД(Сотрудники.ДатаРождения) - ВЫБОР
        КОГДА МЕСЯЦ(&ТекущаяДата) < МЕСЯЦ(Сотрудники.ДатаРождения)
            ТОГДА 1
        ИНАЧЕ ВЫБОР
                КОГДА МЕСЯЦ(&ТекущаяДата) = МЕСЯЦ(Сотрудники.ДатаРождения)
                        И ДЕНЬ(&ТекущаяДата) < ДЕНЬ(Сотрудники.ДатаРождения)
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК Возраст
ПОМЕСТИТЬ ВТ_Информация
ИЗ
    Справочник.Сотрудники КАК Сотрудники
ГДЕ
    ВЫБОР
            КОГДА ГОД(&ДатаНачала) = ГОД(&ТекущаяДата)
                ТОГДА МЕСЯЦ(Сотрудники.ДатаРождения) МЕЖДУ МЕСЯЦ(&ДатаНачала) И МЕСЯЦ(&ТекущаяДата)
            ИНАЧЕ МЕСЯЦ(Сотрудники.ДатаРождения) МЕЖДУ МЕСЯЦ(&ДатаНачала) И МЕСЯЦ(КОНЕЦПЕРИОДА(&ДатаНачала, ГОД))
                    ИЛИ МЕСЯЦ(Сотрудники.ДатаРождения) МЕЖДУ МЕСЯЦ(НАЧАЛОПЕРИОДА(&ДатаНачала, ГОД)) И МЕСЯЦ(&ТекущаяДата)
        КОНЕЦ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫБОР
        КОГДА ВТ_Информация.Возраст < 20
            ТОГДА "Менее 20"
        КОГДА ВТ_Информация.Возраст >= 20
                И ВТ_Информация.Возраст <= 30
            ТОГДА "возраст от 20 до 30"
        КОГДА ВТ_Информация.Возраст >= 31
                И ВТ_Информация.Возраст <= 40
            ТОГДА "возраст от 31 до 40"
        КОГДА ВТ_Информация.Возраст >= 41
                И ВТ_Информация.Возраст <= 50
            ТОГДА "возраст от 41 до 50"
        ИНАЧЕ "более 50"
    КОНЕЦ КАК Диапозон,
    ВТ_Информация.ДатаРождения КАК ДатаРождения,
    ВТ_Информация.Наименование КАК Сотрудник
ПОМЕСТИТЬ ВТ_Заключение
ИЗ
    ВТ_Информация КАК ВТ_Информация
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Заключение.Диапозон КАК Диапозон,
    ВЫБОР
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 1
            ТОГДА "Январь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 2
            ТОГДА "Февраль"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 3
            ТОГДА "Март"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 4
            ТОГДА "Апрель"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 5
            ТОГДА "Май"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 6
            ТОГДА "Июнь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 7
            ТОГДА "Июль"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 8
            ТОГДА "Август"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 9
            ТОГДА "Сентябрь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 10
            ТОГДА "Октябрь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 11
            ТОГДА "Ноябрь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 12
            ТОГДА "Декабрь"
        ИНАЧЕ 0
    КОНЕЦ КАК Период,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Заключение.Сотрудник) КАК Сотрудник
ИЗ
    ВТ_Заключение КАК ВТ_Заключение

СГРУППИРОВАТЬ ПО
    ВТ_Заключение.Диапозон,
    ВЫБОР
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 1
            ТОГДА "Январь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 2
            ТОГДА "Февраль"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 3
            ТОГДА "Март"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 4
            ТОГДА "Апрель"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 5
            ТОГДА "Май"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 6
            ТОГДА "Июнь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 7
            ТОГДА "Июль"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 8
            ТОГДА "Август"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 9
            ТОГДА "Сентябрь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 10
            ТОГДА "Октябрь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 11
            ТОГДА "Ноябрь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 12
            ТОГДА "Декабрь"
        ИНАЧЕ 0
    КОНЕЦ
1 серый КТУЛХУ
 
17.01.22
15:45
ТОГДА "01 Январь" ...
2 серый КТУЛХУ
 
17.01.22
15:45
или в скобках можно номер месяца - читабельнее
или через " = " - тоже читабельнее
3 Kitttt
 
17.01.22
15:55
Спасибо!!
4 evgeniy_n
 
17.01.22
16:22
А просто добавить в запрос поле МЕСЯЦ(ВТ_Заключение.ДатаРождения) и по нему упорядочить?
5 DrShad
 
17.01.22
16:53
(4) лучше НачалоПериода(, Месяц)
а в отчет выводить дату через формат
6 Kitttt
 
17.01.22
23:48
(5) Изначально и хотел все сделать без конструкции ВЫБОР ...КОГДА 1 ТОГДА Январь.., ну и так далее, думал просто будут выводиться месяца и через формат смогу их преобразовать в письменный вид, в итоге получилось что колонки у меня просто пронумерованы от 1 до 6 к примеру, вместо того чтобы выводилось с января до июня. А формат не позволяет преобразовать их в письменный вид, ну то есть в тот который мне нужен, а нужен только месяц, формат предлагает к примеру:"18 января 2022", ну или "18 января 2022 00:00:00", может я чего-то не понимаю) но кажется, что мое решение не совсем оптимальное...
7 Kitttt
 
18.01.22
00:05
А все, извиняюсь, допёр, исправил)
Только сейчас месяца дублируются чуть ли не по 8 шт...пойду дальше смотреть в чем причины)
8 Kitttt
 
18.01.22
10:52
(5) Все бы хорошо, но то что года рождения разные, из-за этого группировка в запросе не срабатывает, а в дальнейшем и в отчет выводит по 3-4 одинаковых месяца, но разные года, не знаю как в запросе отсеять года..
9 DrShad
 
18.01.22
11:14
(6) если тебе взрослые что-то советуют, то знают о чем говорят - не нужно сомневаться, нужно делать
10 Ryzeman
 
18.01.22
11:19
(8) Ты не понял, что тебе посоветовали. Оставь полноценное поле с датой, его ты будешь преобразовывать через формат. Добавь в запрос два поля - год и месяц, сортируй по ним.
11 Ryzeman
 
18.01.22
11:32
(10) +

ВЫБРАТЬ
    ВТ_Заключение.Диапозон КАК Диапозон,
    ВТ_Заключение.ДатаРождения КАК Период,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Заключение.Сотрудник) КАК Сотрудник
ИЗ
    ВТ_Заключение КАК ВТ_Заключение

СГРУППИРОВАТЬ ПО
    ВТ_Заключение.Диапозон,
    ВТ_Заключение.ДатаРождения
УПОРЯДОЧИТЬ ПО
    ГОД(ВТ_Заключение.ДатаРождения), МЕСЯЦ(ВТ_Заключение.ДатаРождения)

К периоду условное форматирование
12 Kitttt
 
18.01.22
11:56
(11) Спасибо, я так делал, только без упорядочивания, результат получается почти один и тот же, только сейчас плюс с порядком, просто у меня проблема в другом, в конечном запросе к примеру есть три сотрудника, с датой рождения: 02.03.1994, 10.03.1970, 16.03.1986, они в запросе не группируются, из-за того что у них года разные, НачалоПериода(ВТ_Заключение.ДатаРождения, Месяц) приводит, к тому что лишь у всех записей дата становится 01.**.****, но года опять же разные. Использовав формат даты над периодом, опять же вернувшись к примеру, в результате в колонках получается: "Март", "Март", "Март", ну и с подобными месяцами также, опять же из-за разных годов.
13 Ryzeman
 
18.01.22
12:13
(12) Тебе надо посчитать у скольких людей дни рожденья в каком месяце?

ВЫБРАТЬ
    ВТ_Заключение.Диапозон КАК Диапозон,
    МЕСЯЦ(ВТ_Заключение.ДатаРождения) КАК МесяцРождения,
    МИНИМУМ(ВТ_Заключение.ДатаРождения) КАК Период,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВТ_Заключение.Сотрудник) КАК Сотрудник
ИЗ
    ВТ_Заключение КАК ВТ_Заключение

СГРУППИРОВАТЬ ПО
    ВТ_Заключение.Диапозон, МЕСЯЦ(ВТ_Заключение.ДатаРождения)
УПОРЯДОЧИТЬ ПО
    МЕСЯЦ(ВТ_Заключение.ДатаРождения)

Из периода так же форматом вытягивать месяц. МесяцРождения можно не использовать.
14 Kitttt
 
18.01.22
13:24
(13) Да, нужен подсчет сотрудников по месяцам их рождения. В консоле отрабатывает верно этот запрос с подсчетом, делаю в СКД начинает ругаться, поле не входит в группу "_Заключение.ДатаРождения"(МЕСЯЦ<<?>> ВТ_Заключение.ДатаРождения). Исправил немного конструкцию в самом конструкторе СКД:
УПОРЯДОЧИТЬ ПО
   МесяцРождения
Ошибка ушла, но сейчас подсчитывает совсем по другому, к примеру 10 сотрудников записывает в один месяц, хотя у них разные месяца рождения, но опять же с этой исправленной конструкцией Упорядочить в консоле тоже все верно отрабатывает и подсчитывает.. Не понимаю почему..
15 Ryzeman
 
18.01.22
13:33
Ну, СКД тебя тут на пальцах точно никто не научит. Если тебе достаточно простого представления этого отчёта, снеси настройки и при помощи конструктора настроек выведи свои данные списком. Если же это часть какой-то другой задачи и тебе нужно адаптировать твои изменения, то тебе нужно показать всё, но лучше в таком случае сам поучи что как работает. Если планируешь вкатываться в профессию - СКД придётся учить хоть как. Да и запросы.
16 Kassern
 
18.01.22
13:40
(0) я так понимаю вы еще учитесь и это тестовое задание?
17 Kitttt
 
18.01.22
13:43
(16) Учусь
18 Kassern
 
18.01.22
13:46
(17) "ВЫБОР
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 1
            ТОГДА "Январь"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 2
            ТОГДА "Февраль"
        КОГДА МЕСЯЦ(ВТ_Заключение.ДатаРождения) = 3
            ТОГДА "Март" "
Не надо так. Дату можно через форматную строку превратить в месяц. Разбить по колонками месяца тоже можно, если правильно укажите структуру в настройках (таблица с верными группировками)
19 Kassern
 
18.01.22
13:48
В итоге у вас должна быть простенькая таблица с сотрудниками и датами рождения, верно указано отображение для месяца и правильно составленная структура
20 Kassern
 
18.01.22
13:50
помогу вам с форматной строкой ДФ=ММММ
21 Kitttt
 
18.01.22
13:51
(20) Ладно, спасибо
22 Ryzeman
 
18.01.22
13:55
(18) В запросе нельзя привести к форматированной строке, а ему по месяцам группировать надо) Сейчас у человека стопор с СКД
23 Ryzeman
 
18.01.22
13:56
(21) К слову, при помощи СКД тоже можно группировать и считать такие вещи. Причём как раз можно месяца в колонки вывести, например.
24 Kassern
 
18.01.22
14:01
(22) "В запросе нельзя привести к форматированной строке" Да лаааадно? Кто запрещает формат использовать в скд?
25 Kassern
 
18.01.22
14:01
(22) попробуйте как-нибудь, будете сильно удивлены)
26 Ryzeman
 
18.01.22
14:03
(24) то - в СКД, а то - в запросе. В (0) про СКД ни слова)
27 Мультук
 
гуру
18.01.22
14:07
(26)
Да ладно.
Там прямым текстом сказано

>>>Всем добрый вечер, пишу отчет на 1С 8.3.

Постановка задачи прямо говорит -- напиши (протестируй/оформи) за 2 часа на СКД, сдай и бери следующую задачу.
28 Kassern
 
18.01.22
14:08
(26) это 99% тестовые задания и по любому на СКД надо делать)
29 Kassern
 
18.01.22
14:09
поэтому я образно описал в какую сторону смотреть и что использовать, чтобы не городить конструкции "Выбор когда" и явное указание месяцов