8.х Таблица дат в запросе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем PsyTech, 29 июн 2010.

  1. TopicStarter Overlay
    PsyTech
    Offline

    PsyTech Опытный в 1С

    Регистрация:
    4 янв 2008
    Сообщения:
    198
    Симпатии:
    0
    Баллы:
    26
    Всем привет!
    Вот таким запросом можно получить таблицу дат по месяцам. Тут все относительно просто.
    Вопрос: Как получить таблицу дат по неделям, чтобы она соответствовала календарю?
    Код:
    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
    ИЗ
    (ВЫБРАТЬ
    0 КАК a
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    9) КАК aa
    ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    0 КАК b
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    9) КАК bb
    ПО (ИСТИНА)
    ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    0 КАК c
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    9) КАК cc
    ПО (ИСТИНА)
    ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    0 КАК d
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    1
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    2
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    3
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    4
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    5
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    6
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    7
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    8
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
    9) КАК dd
    ПО (ИСТИНА)
    ГДЕ
    aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)
    
    
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&;НачалоПериода, &;КонецПериода, НЕДЕЛЯ)

    не работает?
  3. TopicStarter Overlay
    PsyTech
    Offline

    PsyTech Опытный в 1С

    Регистрация:
    4 янв 2008
    Сообщения:
    198
    Симпатии:
    0
    Баллы:
    26
    Во первых не работает, т.к. РАЗНОСТЬДАТ не принимает неделю. Можно так написать: НЕДЕЛЯ(&КонецПериода) - НЕДЕЛЯ(&НачалоПериода).
    Во вторых это не будет соответствовать календарю.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    эээээ.....а если так?
    НЕДЕЛЯ(ДОБАВИТЬКДАТЕ(&;НачалоПериода, МЕСЯЦ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d)) КАК НомерНеделиВГоду

    условие - явно ошибочное, прошу пардону....
  5. TopicStarter Overlay
    PsyTech
    Offline

    PsyTech Опытный в 1С

    Регистрация:
    4 янв 2008
    Сообщения:
    198
    Симпатии:
    0
    Баллы:
    26
    Посмотрите на результат и на календарь.
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Указал период 01.06.2010 - 01.07.2010, получил 31 строку - недели 23 - 27. В году где-то 52-54 недели, если ничего не путаю.
    Середина года - середина общего количества недель. Что не так?

    Код:
    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, День, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период,
    НЕДЕЛЯ(ДОБАВИТЬКДАТЕ(&НачалоПериода, День, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d)) КАК НеделяВГоду
    
    .................................
    
    
    ГДЕ
    aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, День)
    
    
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204

    Вложения:

Поделиться этой страницей