Имя: Пароль:
1C
1С v8
Таблица дат конец месяца запросом
,
0 extrim-style
 
21.10.14
14:55
Нужен запрос, возвращающий таблицу дат, состоящую из концов месяца между двумя датами. Поделитесь кодом. Заранее благодарю.
1 Нахожусь в оппозиции
 
21.10.14
15:00
соединение с производственным календарем
2 extrim-style
 
21.10.14
15:01
(1) производственный календарь не всегда заполнен и т.д.
3 YFedor
 
21.10.14
15:01
(0) СКД
4 Один С
 
21.10.14
15:01
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Дат = КонецМесяца(НачПериода);
    Пока Дат < КонПериода Цикл
        Сообщить(Дат);
        Дат = КонецМесяца(ДобавитьМесяц(Дат, 1));
    КонецЦикла;    
КонецПроцедуры
5 extrim-style
 
21.10.14
15:01
(4) запросом
6 Нахожусь в оппозиции
 
21.10.14
15:03
есть код, который позволяет запросом получить аналог производственного календаря. есть пример на инфостарте, я тут перепост делал
7 extrim-style
 
21.10.14
15:04
(6) мне не нужен весь календарь
8 Нахожусь в оппозиции
 
21.10.14
15:05
(7) тебе нужен календарь, если хочешь запросом
9 extrim-style
 
21.10.14
15:06
(8) ок. ты самоустранился.
10 mergan
 
21.10.14
15:09

ВЫБРАТЬ
    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.Цифра) <= &ДатаКонца

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТабДней.День
ПОМЕСТИТЬ тзИтого
ИЗ
    ТабДней КАК ТабДней
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КОНЕЦПЕРИОДА(тзИтого.День, ДЕНЬ) КАК Поле1
ИЗ
    тзИтого КАК тзИтого
ГДЕ
    КОНЕЦПЕРИОДА(тзИтого.День, ДЕНЬ) = КОНЕЦПЕРИОДА(тзИтого.День, МЕСЯЦ)
11 Нахожусь в оппозиции
 
21.10.14
15:10
(9) как я понимаю, твой уровень профессионализма позволяет тебе быть уверенным, что получить сабж запросом без использования "календаря" МОЖНО, однако в тоже время он не позволяет тебе это сделать?
12 Нахожусь в оппозиции
 
21.10.14
15:11
(10) именно про этот вариант я и говорил
13 extrim-style
 
21.10.14
15:14
(10) спасибо. вроде работает. правда нужно будет допилить, т.к. не показывает КонецМесяца конечной даты
(12) ок
14 mergan
 
21.10.14
15:17
в условии было сказано про концы месяцев между периодами


ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= КОНЕЦПЕРИОДА(&ДатаКонца, МЕСЯЦ)
15 extrim-style
 
21.10.14
15:17
(10) помоему, запрос избыточен, т.к. сначала выбирает все дни, а потом делает отбор. Может кто знает вариант компактнее?
16 extrim-style
 
21.10.14
15:19
(14) спасибо) осталось упростить
17 mergan
 
21.10.14
15:19
18 mergan
 
21.10.14
15:22
хз насколько оптимальнее

ВЫБРАТЬ
    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.Цифра) <= КОНЕЦПЕРИОДА(&ДатаКонца, МЕСЯЦ)
    И КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра), ДЕНЬ) = КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра), МЕСЯЦ)
ИНДЕКСИРОВАТЬ ПО
    День
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТабДней.День
ИЗ
    ТабДней КАК ТабДней
    
19 extrim-style
 
21.10.14
15:26
(18) спасибо. работает.
20 extrim-style
 
21.10.14
15:28
(19) осталось только к концу дня привести
21 Нахожусь в оппозиции
 
21.10.14
15:34
мне одноку кажется, что автор немного борзеет?
22 extrim-style
 
21.10.14
15:37
(21) хочешь об этом поговорить?)
23 extrim-style
 
21.10.14
15:38
(21) к концудня я уже привел, если ты об этом
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан