Имя: Пароль:
1C
1С v8
v8: Запрос, получить данные по месяцам
, ,
0 Uragan_a
 
19.11.13
14:45
Есть период в регистре, например
с 5.01.13 по 25.03.13, это 80 дней к примеру.

Можно ли как, то запросом получить на выходе три строки

05.01.13 по 31.01.13 26 дней
01.02.13 по 28.02.13 28 дней
01.03.13 по 25.03.13 25 дней

? или нет, с запросами совсем туго
1 Рэйв
 
19.11.13
14:47
(0)Помоему тебе надо курить РазностьДат
2 Classic
 
19.11.13
14:49
Что где есть?
Какие записи в регистре есть?
С каким периодом?
3 Жан Пердежон
 
19.11.13
14:50
календарь есть в базе? с ним проще
4 Uragan_a
 
19.11.13
14:53
(2) регистр графикотпусковоргии, нужно получить количество дней по месяцам по подразделениям

например  январь      февраль     март
     АУП  3            5           10
5 Uragan_a
 
19.11.13
14:54
(3) куда ж ему деться)
анализировать каждую строку регистра на количество месяцев, не могу совсем себе представить
6 Molinor
 
19.11.13
14:55
"графикотпусковоргии" - это мощно. Оргии устраивать в графике отпусков...
7 Uragan_a
 
19.11.13
14:59
если определить периоды каждого месяца и проверять на вхождение в этот период периода отпуска?
8 Бешеная Нога
 
19.11.13
15:07
без календаря никак
9 Бешеная Нога
 
19.11.13
15:18
в любом случае нужна вспомогательная таблица (с любыми данными) с количеством строк больше чем разность этих дат.
тогда получить нужную таблицу будет не проблема
10 FidelBoom
 
19.11.13
15:26
(0) Добавь к полям дополниельное поле МЕСЯЦ(ДатаТвояТут) И Итоги по этому полю. Или  группировка в СКД
11 FidelBoom
 
19.11.13
15:27
* Насчет Насчет выражения даты, чтобы выделять МЕСЯЦ , Посмотри как правильно я честно говоря не помню надо лезть в конфигуратор . а Лень((
12 Бешеная Нога
 
19.11.13
15:29
(10) а что дадут итоги по этому полю? развивайте мысль
13 FidelBoom
 
19.11.13
15:30
(12) ну как берем Итоги , а в нижней иерархии будут суммовые показатели.  То есть там будут данные которые были введены в этом конкретном месяце
14 FidelBoom
 
19.11.13
15:32
В нашем случае будут 3 итоговых поля. например.. отчет на СКД - создаем группировку - наше поле с Месяцами, далее Детальные записи и все. Попробуй сделать... увидишь, что получится.
15 Uragan_a
 
19.11.13
15:33
(14) я подобное видел, кажется понял о чем Вы
16 zak555
 
19.11.13
15:33
(3) (8) уверены ?
17 Uragan_a
 
19.11.13
15:36
(16) НЕТ)
18 Uragan_a
 
19.11.13
15:49
(14) не, фигня какая - то получается
19 Uragan_a
 
19.11.13
15:49
(10) возвращает просто номер месяца, итоги по нему ничего не дадут
20 Бешеная Нога
 
19.11.13
15:53
(14) ну получишь ты в запросе итоги по Месяц, а дальше то что?
21 FidelBoom
 
19.11.13
15:55
(19) Само собой номер месяца, но по текущему месяцу мы осуществляем группировку, все строки в этом месяце , как раз и объединяются за счет этого номера. Под этой строкой итоговой как раз и находятся данные за месяц..строки.
22 Uragan_a
 
19.11.13
15:56
Есть такой, запрос, но до канца не пойму как работает, но работает, но видать не совсем к месту.

"ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ВложенныйЗапрос.Приход КАК ПланПриход,
    |    ВложенныйЗапрос.Период,
    |    ВложенныйЗапрос.ПериодДень,
    |    ВложенныйЗапрос.ПериодНеделя,
    |    ВложенныйЗапрос.ПериодДекада,
    |    ВложенныйЗапрос.ПериодМесяц,
    |    ВложенныйЗапрос.ПериодКвартал,
    |    ВложенныйЗапрос.ПериодПолугодие,
    |    ВложенныйЗапрос.ПериодГод,
    |    ВложенныйЗапрос.Организация,
    |    ВложенныйЗапрос.Контрагент,
    |    ВложенныйЗапрос.ФактПриход КАК ФактПриход,
    |    ВложенныйЗапрос.ДоговорКонтрагента,
    |    ВложенныйЗапрос.Заказ,
    |    ВложенныйЗапрос.СуммаРасхода КАК СуммаРасхода
    |{ВЫБРАТЬ
    |    ПланПриход,
    |    Период,
    |    ПериодДень,
    |    ПериодНеделя,
    |    ПериодДекада,
    |    ПериодМесяц,
    |    ПериодКвартал,
    |    ПериодПолугодие,
    |    ПериодГод,
    |    Организация.*,
    |    Контрагент.*,
    |    ФактПриход,
    |    ДоговорКонтрагента.*,
    |    Заказ.*,
    |    СуммаРасхода}
    |ИЗ
    |    (ВЫБРАТЬ
    |        ПланПлатежейОстаткиИОбороты.СуммаПриход КАК Приход,
    |        0 КАК ФактПриход,
    |        0 КАК СуммаРасхода,
    |        ПланПлатежейОстаткиИОбороты.Период КАК Период,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, ДЕНЬ) КАК ПериодДень,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, НЕДЕЛЯ) КАК ПериодНеделя,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, ДЕКАДА) КАК ПериодДекада,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, МЕСЯЦ) КАК ПериодМесяц,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, КВАРТАЛ) КАК ПериодКвартал,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие,
    |        НАЧАЛОПЕРИОДА(ПланПлатежейОстаткиИОбороты.Период, ГОД) КАК ПериодГод,
    |        ПланПлатежейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |        ПланПлатежейОстаткиИОбороты.Организация КАК Организация,
    |        ПланПлатежейОстаткиИОбороты.Контрагент КАК Контрагент,
    |        ПланПлатежейОстаткиИОбороты.Заказ КАК Заказ
    |    ИЗ
    |        РегистрНакопления.апПланПлатежей.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Запись, , ) КАК ПланПлатежейОстаткиИОбороты
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        0,
    |        ХозрасчетныйОбороты.СуммаОборотКт,
    |        0,
    |        ХозрасчетныйОбороты.Период,
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕНЬ),
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, НЕДЕЛЯ),
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕКАДА),
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, МЕСЯЦ),
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, КВАРТАЛ),
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ПОЛУГОДИЕ),
    |        НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ГОД),
    |        ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто2 КАК Справочник.ДоговорыКонтрагентов),
    |        ХозрасчетныйОбороты.Организация,
    |        ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Контрагенты),
    |        Заказ.Ссылка
    |    ИЗ
    |        РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, Регистратор, Счет В ИЕРАРХИИ (&СчетаКонтрагентов), , , , ) КАК ХозрасчетныйОбороты
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.апЗаказ КАК Заказ
    |            ПО ХозрасчетныйОбороты.Субконто2 = Заказ.ДоговорКонтрагента.Ссылка
    |    ГДЕ
    |        ВЫБОР
    |                КОГДА ХозрасчетныйОбороты.КорСчет В ИЕРАРХИИ (&СчетаКонтрагентов)
    |                    ТОГДА НЕ(ХозрасчетныйОбороты.Субконто1 = ХозрасчетныйОбороты.КорСубконто1
    |                                И ХозрасчетныйОбороты.Субконто2 = ХозрасчетныйОбороты.КорСубконто2)
    |                ИНАЧЕ ИСТИНА
    |            КОНЕЦ
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        0,
    |        0,
    |        апЗатратыПоЗаказам.СуммаРасхода,
    |        апЗатратыПоЗаказам.Период,
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, ДЕНЬ),
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, НЕДЕЛЯ),
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, ДЕКАДА),
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, МЕСЯЦ),
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, КВАРТАЛ),
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, ПОЛУГОДИЕ),
    |        НАЧАЛОПЕРИОДА(апЗатратыПоЗаказам.Период, ГОД),
    |        апЗатратыПоЗаказам.ДоговорКонтрагента,
    |        апЗатратыПоЗаказам.Организация,
    |        апЗатратыПоЗаказам.Контрагент,
    |        апЗатратыПоЗаказам.Заказ
    |    ИЗ
    |        РегистрНакопления.апЗатратыПоЗаказам КАК апЗатратыПоЗаказам) КАК ВложенныйЗапрос
    |{ГДЕ
    |    ВложенныйЗапрос.Заказ.*,
    |    ВложенныйЗапрос.Организация.*,
    |    ВложенныйЗапрос.Контрагент.*,
    |    ВложенныйЗапрос.ДоговорКонтрагента.*}
    |{УПОРЯДОЧИТЬ ПО
    |    Контрагент.*,
    |    Организация.*,
    |    Заказ.*,
    |    ПериодДень,
    |    ПериодНеделя,
    |    ПериодДекада,
    |    ПериодМесяц,
    |    ПериодКвартал,
    |    ПериодПолугодие,
    |    ПериодГод,
    |    Период}
    |ИТОГИ
    |    СУММА(ПланПриход),
    |    СУММА(ФактПриход),
    |    СУММА(СуммаРасхода)
    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Период,
    |    ПериодДень,
    |    ПериодНеделя,
    |    ПериодДекада,
    |    ПериодМесяц,
    |    ПериодКвартал,
    |    ПериодПолугодие,
    |    ПериодГод,
    |    Организация.*,
    |    Контрагент.*,
    |    ДоговорКонтрагента.*,
    |    Заказ.*}";
23 Uragan_a
 
19.11.13
15:57
(21) так у меня строка одна, дата начала и дата окончания и все, кучи строк то нет (
24 Uragan_a
 
19.11.13
15:58
+ (23) было бы куча строк было бы проще
25 Бешеная Нога
 
19.11.13
15:59
(21) сам попробуй написать
26 FidelBoom
 
19.11.13
15:59
НАЧАЛОПЕРИОДА(Хозрасчетный.Период, МЕСЯЦ) КАК Поле1

ДЕЛАЙ НЕ МЕСЯЦ, ИЗВИНИ СПУТАЛ, А (СМ.ВЫШЕ). Тогда ДАТА будет на начало месяца
27 Uragan_a
 
19.11.13
15:59
но все дни есть в графике работы по видам времени, нужно как то объединить два регистра и сгруппировать по месяцу)))
28 Uragan_a
 
19.11.13
16:00
(26) я получу месяц, а как количство дней то?
29 Uragan_a
 
19.11.13
16:01
(26) дни можно вывести только из регистра календаря
30 Uragan_a
 
19.11.13
16:01
мне кажется
31 Uragan_a
 
19.11.13
16:06
есть два регистра сведений:

ГрафикОтпусков
в нем есть период
с 01.01.13 по 21.03.13

и есть регистр

ГрафикиРаботыПоВидамВремени
и в нем есть все дни
01.01.2013
02.01.2013
03.01.2013
04.01.2013
05.01.2013

05.02.2013
итд

Как то нужно объекдинить эти две таблицы и потом сгруппировать и получить итог по месяцу
32 Uragan_a
 
19.11.13
16:06
но как ?
33 Бешеная Нога
 
19.11.13
16:07
капец. наличие таблицы ГрафикиРаботыПоВидамВремени, как и наличие любой другой таблицы это равно наличию таблицы ПроизводственныйКалендарь.

а вы без них попробуйте
34 dmpl
 
19.11.13
16:08
(31) Тебе нужен регистр РегламентированныйПроизводственныйКалендарь, а не графики.
35 Uragan_a
 
19.11.13
16:08
(34) ну да или он, одно и тоже почти) проблема связатЬ)
36 FidelBoom
 
19.11.13
16:09
(33) Без Производственного календаря тоже можно, на досуге попробую . давай свое мыло тебе пришлю, покажу.
(35) Сейчас я поищу, что у меня есть было такое , передавал в запрос таблицу с датами по месяцам.
37 dmpl
 
19.11.13
16:09
(35) Не одно. В графиках записей дофига, а связываются они левым соединением по вхождению даты в период.
38 Uragan_a
 
19.11.13
16:10
(37) учту
39 dmpl
 
19.11.13
16:11
(33) Выбираешь все дни через ОБЪЕДИНИТЬ ВСЕ, потом левым соединением цепляешь.
40 Uragan_a
 
19.11.13
16:12
Ладно пойду спать, завтра буду думать, ну уже истина где-то рядом)
41 Uragan_a
 
19.11.13
16:12
Спасибо Всем
42 FidelBoom
 
19.11.13
16:14
"ВЫБРАТЬ
                            |    Таб.Дата КАК Дата
                            |ПОМЕСТИТЬ ДатыНаМесяцПоДням
                            |ИЗ
                            |    &ТаблицаМесячныхДней КАК Таб
                            |;
                            |
                            |////////////////////////////////////////////////////////////////////////////////
                            |ВЫБРАТЬ
                            |    РасчетБольничного.Сотрудник,
                            |    ВЫБОР
                            |        КОГДА ДатыНаМесяцПоДням.Дата МЕЖДУ РасчетБольничного.Начало И РасчетБольничного.Окончание
                            |            ТОГДА ДатыНаМесяцПоДням.Дата
                            |        ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
                            |    КОНЕЦ КАК Дата,

                            |ПОМЕСТИТЬ РасчетБольничного
                            |ИЗ
                            |    ДатыНаМесяцПоДням КАК ДатыНаМесяцПоДням
                            |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетБольничного КАК РасчетБольничного
                            |        ПО (ДатыНаМесяцПоДням.Дата МЕЖДУ РасчетБольничного.Начало И РасчетБольничного.Окончание)
43 FidelBoom
 
19.11.13
16:16
Я тебе постарался вырезать с какого - то запроса. запрос немаленький и фик в нем разберешься если скину весь. но мысль общая такая будет.
В первой таблице находяться  даты по дням за месяц. В втором пакете объединяетться таким образом. Что Записиь

из двух строк . напрмер начало  05.09.2013
и
44 FidelBoom
 
19.11.13
16:16
Конец 26.09.2013, добавит необходимыми датами. Дальше сам пляши с бубном, потом как хочешь эти даты верти крути
45 zak555
 
19.11.13
16:20
ВЫБРАТЬ
    0 КАК Цифра
ПОМЕСТИТЬ ТабЦифр

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК День
ПОМЕСТИТЬ ТабДней
ИЗ
    ТабЦифр КАК ТабЦифр1,
    ТабЦифр КАК ТабЦифр2,
    ТабЦифр КАК ТабЦифр3,
    ТабЦифр КАК ТабЦифр4
ГДЕ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= &ДатаКонца

ИНДЕКСИРОВАТЬ ПО
    День
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(ТабДней.День, МЕСЯЦ) КАК НачалоМесяца
ПОМЕСТИТЬ ТабДней2
ИЗ
    ТабДней КАК ТабДней
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТабДней2.НачалоМесяца КАК НачалоМесяца, КОЛИЧЕСТВО(ТабДней2.НачалоМесяца) КАК сколькоДней
ИЗ
    ТабДней2 КАК ТабДней2

СГРУППИРОВАТЬ ПО
    ТабДней2.НачалоМесяца
46 Бешеная Нога
 
19.11.13
16:39
(39) откуда выбираешь?
47 ам794123
 
19.11.13
16:40
ВЫБРАТЬ
    МЕСЯЦ(КурсыВалют.Период) КАК Месяц,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КурсыВалют.Период) КАК КолДней
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
    КурсыВалют.Период МЕЖДУ &Период1 И &Период2

СГРУППИРОВАТЬ ПО
    МЕСЯЦ(КурсыВалют.Период)
48 Бешеная Нога
 
19.11.13
16:40
(42) а &ТаблицаМесячныхДней то что? никак та самая дополнительная таблица дней (читай тот же производственный календарь, или в принципе любая таблица с любым содержимим с минимально необходимым количеством строк) и о чем я говорил в (8) и (9)?
49 FidelBoom
 
19.11.13
16:44
(48)  Согласен. Я же написал -> (36) . Персонально для тебя хотел сделать потом. Просто , то что я вытащил запрос я его видел, он у меня был. А в самом начале видимо я неправильно понял условия задачи. В принципе на данный момент ты прав. Извини.
50 Бешеная Нога
 
19.11.13
16:49
(49) блин, а я думал ты мне сейчас расскажешь как сделать... думал может сам чего не догоняю )
51 Uragan_a
 
20.11.13
03:45
Спасибо ребят! Очень помогли.
На утро все успел и сильно не получил)
Спасибо.
Вот, что получилось, если вставить в СКД, то получается готовый отчет по количеству дней планового отпуска по месяцам.

ВЫБРАТЬ
    ДатыНаМесяцПоДням.ДатаКалендаря КАК ДатаКалендаря,
    ДатыНаМесяцПоДням.Год КАК Годд,
    ДатыНаМесяцПоДням.КалендарныеДни КАК КалендарныеДни
ПОМЕСТИТЬ ДатыНаМесяцПоДням
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ДатыНаМесяцПоДням
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ГрафикОтпусков.Сотрудник,
    ВЫБОР
        КОГДА ДатыНаМесяцПоДням.ДатаКалендаря МЕЖДУ ГрафикОтпусков.Период И ГрафикОтпусков.ДатаОкончания
            ТОГДА ДатыНаМесяцПоДням.ДатаКалендаря
        ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    КОНЕЦ КАК ДатаОтпуска,
    ВложенныйЗапрос.ПодразделениеОрганизации
ПОМЕСТИТЬ ГрафикОтпусков
ИЗ
    ДатыНаМесяцПоДням КАК ДатыНаМесяцПоДням
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикОтпусковОрганизаций КАК ГрафикОтпусков
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
                РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации
            ИЗ
                РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних) КАК ВложенныйЗапрос
            ПО ГрафикОтпусков.Сотрудник = ВложенныйЗапрос.Сотрудник
        ПО (ДатыНаМесяцПоДням.ДатаКалендаря МЕЖДУ ГрафикОтпусков.Период И ГрафикОтпусков.ДатаОкончания)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ГрафикОтпусков.ПодразделениеОрганизации,
    МЕСЯЦ(ГрафикОтпусков.ДатаОтпуска) КАК ПериодМесяц,
    КОЛИЧЕСТВО(ГрафикОтпусков.ДатаОтпуска) КАК СколькоДней
ИЗ
    ГрафикОтпусков КАК ГрафикОтпусков

СГРУППИРОВАТЬ ПО
    ГрафикОтпусков.ПодразделениеОрганизации,
    МЕСЯЦ(ГрафикОтпусков.ДатаОтпуска)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.