Имя: Пароль:
1C
1С v8
Сформировать таблицу периодов.
0 егаис
 
11.06.19
09:56
Господа, есть красивое решение, как реализовать такую задачу?
Есть таблица периодов
01.05 - 18.05
19.05 - 31.05

И есть период начисления с 15.05 по 29.05

В итоге надо наложить период начисления на таблицу периодов. Результат должен быть
15.05 - 18.05
19.05 - 29.05

Научите красоте, а не простым перебором
1 mistеr
 
11.06.19
10:09
(0)

    ВЫБРАТЬ
        ...
    ИЗ
        Периоды КАК Т1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Начисления КАК Т2
        ПО
            Т1.НачалоПериода <= Т2.КонецПериода
            И Т1.КонецПериода >= Т2.НачалоПериода
2 mistеr
 
11.06.19
10:10
Границы сам определишь?
3 егаис
 
11.06.19
10:12
спасибо, попробую
4 егаис
 
11.06.19
11:19
где неправ?
ВЫБРАТЬ
    ТаблицаПериодов.ДатаНачала КАК ДатаНачалаНачисления,
    ТаблицаПериодов.ДатаОкончания КАК ДатаОкончанияНачисления
ПОМЕСТИТЬ ТаблицаПериодов
ИЗ
    &ТаблицаПериодов КАК ТаблицаПериодов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаПериодовСтажа.ДатаНачала КАК ДатаНачалаСтажа,
    ТаблицаПериодовСтажа.ДатаОкончания КАК ДатаОкончанияСтажа,
    ТаблицаПериодовСтажа.Процент КАК Процент
ПОМЕСТИТЬ ТаблицаПериодовСтажа
ИЗ
    &ТаблицаПериодовСтажа КАК ТаблицаПериодовСтажа
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаПериодов.ДатаНачалаНачисления КАК ДатаНачалаНачисления,
    ТаблицаПериодов.ДатаОкончанияНачисления КАК ДатаОкончанияНачисления,
    ТаблицаПериодовСтажа.Процент КАК Процент
ИЗ
    ТаблицаПериодов КАК ТаблицаПериодов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПериодовСтажа КАК ТаблицаПериодовСтажа
        ПО ТаблицаПериодов.ДатаНачалаНачисления <= ТаблицаПериодовСтажа.ДатаОкончанияСН
            И ТаблицаПериодов.ДатаОкончанияНачисления >= ТаблицаПериодовСН.ДатаНачалаСтажа


для такого примера
01.05 - 18.05 40%
19.05 - 31.05 50%



период с 01.05 по 31.05
формируется две строчки
01.05 - 31.05 40%
01.05 - 31.05 50%
5 егаис
 
11.06.19
11:24
очепятка в тексте запроса
////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТаблицаПериодов.ДатаНачалаНачисления КАК ДатаНачалаНачисления,
    ТаблицаПериодов.ДатаОкончанияНачисления КАК ДатаОкончанияНачисления,
    ТаблицаПериодовСтажа.Процент КАК Процент
ИЗ
    ТаблицаПериодов КАК ТаблицаПериодов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПериодовСтажа КАК ТаблицаПериодовСтажа
        ПО ТаблицаПериодов.ДатаНачалаНачисления <= ТаблицаПериодовСтажа.ДатаОкончанияСтажа
            И ТаблицаПериодов.ДатаОкончанияНачисления >= ТаблицаПериодовСтажа.ДатаНачалаСтажа
6 savaB
 
11.06.19
11:26
мин для датаОкончания и макс для ДатаНачала
7 егаис
 
11.06.19
11:42
не понимаю
8 егаис
 
11.06.19
11:57
максимум, минимум через выбор реализовал, насколько верно?
ВЫБРАТЬ
                       ВЫБОР
                           КОГДА ТаблицаПериодов.ДатаНачалаНачисления > ТаблицаПериодовСтажа.ДатаНачалаСтажа
                               ТОГДА ТаблицаПериодов.ДатаНачалаНачисления
                           ИНАЧЕ ТаблицаПериодовСтажа.ДатаНачалаСтажа
                       КОНЕЦ КАК ДатаНачалаНачисления,
                       ВЫБОР
                           КОГДА ТаблицаПериодов.ДатаОкончанияНачисления < ТаблицаПериодовСтажа.ДатаНачалаСтажа
                               ТОГДА ТаблицаПериодов.ДатаОкончанияНачисления
                           ИНАЧЕ ТаблицаПериодовСтажа.ДатаОкончанияСтажа
                       КОНЕЦ КАК ДатаОкончанияНачисления,
                       ТаблицаПериодовСтажа.Процент КАК Процент
                   ИЗ
                       ТаблицаПериодов КАК ТаблицаПериодов
                           ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаПериодовСтажа КАК ТаблицаПериодовСтажа
                           ПО ТаблицаПериодов.ДатаНачалаНачисления <= ТаблицаПериодовСтажа.ДатаОкончанияСтажа
                               И ТаблицаПериодов.ДатаОкончанияНачисления >= ТаблицаПериодовСтажа.ДатаНачалаСтажа
9 mistеr
 
11.06.19
12:17
(8) А по-другому в 1С и не сделать.

Пожалели, блин, две функции, МИН() и МАКС()...