|
Решение задачи за один запрос | ☑ | ||
---|---|---|---|---|
0
AllkaR
30.11.13
✎
22:21
|
Уважаемые 1С-ки, подскажите, либо хотяб даите идею в решении задачи. Есть Справочник Физ лиц с полями Имя и дата рождения. Нужно за один запрос (без обработки результата запроса в модуле)получить таблицу в которой сотрудники будут распределены по группам в каждом месяце: до 20 лет, от 21-30, от 31-40, от 41-50, и после 50, В каждой группе сотрудники сумируются. Полагаю тут Идет конструкция Выбор- Когда и разность дат? или ошибаюсь? может есть более легкое решение
|
|||
1
IamAlexy
30.11.13
✎
22:21
|
сделай запрос.. делов то
|
|||
2
AllkaR
30.11.13
✎
22:35
|
а к делу всетаки?? есть идеи?
|
|||
3
hhhh
30.11.13
✎
22:43
|
ну вы же спми написали. пять штук ВЫБОР КОГДА, ну это 5 строчек. А какое вы более легкое решение ждете? пять групп в 4 строчки впихнуть?
|
|||
4
МихаилМ
30.11.13
✎
22:47
|
(0)
нарисуйте что есть и что должно получиться. |
|||
5
AllkaR
30.11.13
✎
22:54
|
ДатаРождения | Наименование. Должна получиться таблица со значениями: месяц1 месяц2 ....месяцн
меньше 20лет кол-во кол-во кол-во от21до30 кол-во кол-во от31-40 и более 50 |
|||
6
AllkaR
30.11.13
✎
22:55
|
ДатаРождения | Наименование. Должна получиться таблица со значениями:
месяц1 месяц2 ....месяцн меньше 20лет кол-во кол-во кол-во от21до30 кол-во кол-во от31-40 и более 50 |
|||
7
AllkaR
30.11.13
✎
23:45
|
Мне не понятно как сгруппировать, калякните хоть пару строк, заранее оч благодарен
|
|||
8
dmpl
30.11.13
✎
23:47
|
(7) В СГРУППИРОВАТЬ то же самое выражение пиши, что и в ВЫБРАТЬ.
|
|||
9
azernot
30.11.13
✎
23:57
|
Выбрать
Количество(Различные Сотрудники.Ссылка) как КолВо, Выбор Когда Месяц(Сотрудники.ДатаРождения) = 1 ТОгда "Январь" Когда Месяц(Сотрудники.ДатаРождения) = 2 ТОгда "Февраль" ... Конец как Месяц, Выбор Когда РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) <= 20 ТОгда "До 20 лет" Когда РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) > 20 И РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) <= 30 ТОгда "От 20 до 30 лет" ... Конец как Группа Из Справочник.Сотрудники как Сотрудники .. Сгруппировать по Выбор Когда Месяц(Сотрудники.ДатаРождения) = 1 ТОгда "Январь" Когда Месяц(Сотрудники.ДатаРождения) = 2 ТОгда "Февраль" ... Конец, Выбор Когда РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) <= 20 ТОгда "До 20 лет" Когда РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) > 20 И РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) <= 30 ТОгда "От 20 до 30 лет" ... Конец |
|||
10
Salimbek
01.12.13
✎
00:34
|
(9) Если лень переписывать все в СГРУППИРОВАТЬ, то можно оставить запрос без группировки и подсчета количества, затем обернуть это в подзапрос и в "верхнем" запросе уже все сгруппировать как надо.
|
|||
11
GANR
01.12.13
✎
01:55
|
(0) Можно еще операции целочисленного деления применить, скажем СтажВГодах / 10 при значениях поля СтажВГодах 21, 22 и 25 вернет одно и то же значение 2 (целая часть от деления) - вот по нему-то и надо группировать. В МС СКЛ эта операция делается просто, в 1С - посложнее, с ВЫРАЗИТЬ, так как в ее запросах может иметь место неявное преобразование к числу с плавающей точкой v8: Как в запросе получить целое от деления и остаток от деления?.
|
|||
12
mistеr
01.12.13
✎
01:56
|
(0) Я не понял до конца фразу "в каждом месяце". Надо еще разбить на 12 групп по месяцу рождения, или вывести по каждому месяцу каждого года, когда у кого-то ДР?
|
|||
13
mistеr
01.12.13
✎
01:57
|
(12) Короче, нужен пример исходных данных и требуемый результат.
|
|||
14
Classic
01.12.13
✎
02:31
|
(10)
Тебе сейчас расскажут, что подзапросы это нубство |
|||
15
hhhh
01.12.13
✎
07:40
|
(10) зачем же переписывать? Вы что, такие вещи переписываете? Есть же копипаст.
Реально автору надо набрать три строчки, всё остальное копипастом. |
|||
16
AllkaR
01.12.13
✎
11:02
|
Профи спасибо от новичка, но очень заинтересовала темы группировки и подзапрос от Salimbek. Раскажите про подзапрос. Если понятнее вот что должно получиться:
Месяц.. Месяц N меньше 20 Кол-во Кол-во возраст от 20 до 30 Кол-во Кол-во возраст от 31 до 40 Кол-во Кол-во возраст от 41 до 50 Кол-во Кол-во больше 50 Кол-во |
|||
17
Wobland
01.12.13
✎
11:08
|
а без фото взлетит?
|
|||
18
AllkaR
01.12.13
✎
11:10
|
Товарищи Ну поделитесь опытом и мастерством! Ну что вы в самом деле
|
|||
19
mistеr
01.12.13
✎
11:20
|
(16) А N - сколько?
|
|||
20
User_Agronom
01.12.13
✎
11:20
|
(17) Не, дегустация борща также обязательна ;)
|
|||
21
Wobland
01.12.13
✎
11:23
|
(18) да поделился бы, так уж всё написано
|
|||
22
AllkaR
01.12.13
✎
11:23
|
в году 12 месяцев значит N месяцев =12!
А в таблице сотрудников кроме Имени и даты рождения более ничего нет. Про борщь спорно, хотя можно поробывать сварить |
|||
23
zak555
01.12.13
✎
11:24
|
(22) > Про борщь спорно, хотя можно поробывать сварить
нет опыта ? |
|||
24
AllkaR
01.12.13
✎
11:28
|
снова не по теме
|
|||
25
User_Agronom
01.12.13
✎
11:29
|
(24) По теме: запрос сгородил? Какие поля?
Сотрудник, возраст, месяц? Кури группировки... |
|||
26
AllkaR
01.12.13
✎
11:36
|
Сотрудник | ДатаРождения
|
|||
27
User_Agronom
01.12.13
✎
11:37
|
(26) А месяц чего обидел?
|
|||
28
AllkaR
01.12.13
✎
11:40
|
Вобщем горожу следующее, если подскажите как посчитать сумму в группах- это именно группировка и еще разбить по месяцам будет ценно.
ВЫБРАТЬ ДатаРождения, Выбор Когда Месяц(ДатаРождения)=1 Тогда "Январь" Когда Месяц(ДатаРождения)=2 Тогда "Февраль" Когда Месяц(ДатаРождения)=3 Тогда "Март" Конец как месяцрождения, Выбор Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) <=20 Тогда "меньше20" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 20 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 30 Тогда "группа 20-30" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 30 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 40 Тогда "группа 31-40" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 40 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 50 Тогда "группа 41-50" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 50 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 50 Тогда "более 50" Конец как группы ИЗ Справочник.СотрудникиОрг |
|||
29
AllkaR
01.12.13
✎
11:42
|
будет интереснее как раз наверное таки внешним запросом потомучто еще и в группировке все условия перечислять , хотя может так и надо, что скажут профи???
|
|||
30
Wobland
01.12.13
✎
11:48
|
(29) в группировке все условия перечислять
|
|||
31
User_Agronom
01.12.13
✎
11:49
|
Я не профи. Сертификатов.нет :)
ИМХО, ДатаРождения нафиг не нужна. Сгруппировать по группы. |
|||
32
Wobland
01.12.13
✎
11:50
|
(31) не всякий профессионал запросы хотя бы видел. специалист - да, предполагается, что знает ;)
|
|||
33
zak555
01.12.13
✎
11:50
|
(24) ты в какой теме ?
|
|||
34
AllkaR
01.12.13
✎
11:54
|
Товарищи, если бы задачу можно решить программно- мнеб не составило труда, но тут прям принципиально в один запрос. С 1С только начал работать. Кстати, с вами обсалютно согласен, по поводу кто-то по запросам ктото по коду- я не о сертификатах сеичас. Еще к томуж чтото разность дат неоч работает . охох- может кто с запросами дружит???
|
|||
35
User_Agronom
01.12.13
✎
12:00
|
(34) тебе в СКД? Или запрос в тексте обработки?
Почти же всё написано. Нужно только правильно сгруппировать и всё. |
|||
36
Wobland
01.12.13
✎
12:01
|
(34) ээ.. предлагаю решить программно
|
|||
37
AllkaR
01.12.13
✎
12:02
|
User_Agronom покажите чаинику как это делается, можно просто запрос , мне главное понять
|
|||
38
AllkaR
01.12.13
✎
12:03
|
можете и из скд запрос
|
|||
39
User_Agronom
01.12.13
✎
12:15
|
С планшета особо не напишешь. Но смотри:
ВЫБРАТЬ ТаблицаПодРазбор.месяцрождения, ТаблицаПодРазбор.группы, Количество(ТаблицаПодРазбор.ДатаРождения) КАК СколькоЧелов ИЗ (ВЫБРАТЬ ДатаРождения, Выбор Когда Месяц(ДатаРождения)=1 Тогда "Январь" Когда Месяц(ДатаРождения)=2 Тогда "Февраль" Когда Месяц(ДатаРождения)=3 Тогда "Март" ... все остальные Конец как месяцрождения, Выбор Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) <=20 Тогда "меньше20" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 20 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 30 Тогда "группа 20-30" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 30 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 40 Тогда "группа 31-40" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 40 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 50 Тогда "группа 41-50" Когда РазностьДат(&ТекущаяДата, ДатаРождения, Год) > 50 И РазностьДат(&ТекущаяДата, ДатаРождения, Год) <= 50 Тогда "более 50" Конец как группы ИЗ Справочник.СотрудникиОрг) КАК ТаблицаПодРазбор Сгруппировать ПО ТаблицаПодРазбор.месяцрождения, ТаблицаПодРазбор.группы Еще бы упорядочить и вообще бы здорово стало. Можно пакетным запросом (удобнее к понятию), но ты же просишь один запрос. |
|||
40
User_Agronom
01.12.13
✎
12:18
|
Если В СКД пишешь, попробуй сразу сгруппировать по этим полям.
|
|||
41
azernot
01.12.13
✎
12:23
|
Я не понял, чем (9) не устраивает?
|
|||
42
User_Agronom
01.12.13
✎
12:29
|
(41) Устраивает. Он, похоже, в эту сторону и пилит.
|
|||
43
AllkaR
01.12.13
✎
12:34
|
Огромное спасибо всем, особенно User_Agronom.
|
|||
44
User_Agronom
01.12.13
✎
12:36
|
(43) получилось?
|
|||
45
AllkaR
01.12.13
✎
12:55
|
Получилось, только подскажите плиз почему не работает функция РазностьДат(&ТекущаяДата, ДатаРождения, Год) почему вдруг все сотрудники отнеслись к дате кому меньше 20?
|
|||
46
AllkaR
01.12.13
✎
13:02
|
Все работает пардон, условие у меня не выполняется, результат же с -
|
|||
47
kumena
01.12.13
✎
13:11
|
Выбор Когда РазностьДат(&ТекущаяДата, Сотрудники.ДатаРождения, Год) <= 20 ТОгда
это криво будет работать, текущая дата может быть 1 декабря, а ДР 15. полных лет будет <> разность дат |
|||
48
AllkaR
01.12.13
✎
14:04
|
таак, а вы (kumena), чтобы посоветовали использовать?
|
|||
49
Мимохожий Однако
01.12.13
✎
14:22
|
Сотрудники.ДатаРождения, Месяц) <= 240
|
|||
50
kumena
01.12.13
✎
14:32
|
(48)
ВЫБОР КОГДА ГОД(РаботникиОрганизации.Сотрудник.Физлицо.ДатаРождения) = 1 ИЛИ РаботникиОрганизации.Сотрудник.Физлицо.ДатаРождения > &Период ТОГДА 0 ИНАЧЕ ГОД(&Период) - ГОД(РаботникиОрганизации.Сотрудник.Физлицо.ДатаРождения) + ВЫБОР КОГДА МЕСЯЦ(РаботникиОрганизации.Сотрудник.Физлицо.ДатаРождения) * 100 + ДЕНЬ(РаботникиОрганизации.Сотрудник.Физлицо.ДатаРождения) > МЕСЯЦ(&Период) * 100 + ДЕНЬ(&Период) ТОГДА -1 ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК ФизЛицоВозраст Зарплата и Управление Персоналом, редакция 2.5 (2.5.69.3) © |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |