0
Антиквар
28.09.20
✎
01:52
|
Всем привет!
Вопрос по ЗУП 2.5, по регистру расчета Основные начисления. Но по сути это не важно, любой регистр, да вообще любая таблица, где есть дата начала и дата конца, а также признак сторно-записи.
Нужно получить из регистра периоды, на которые нет сторно записей. Поясню:
Допустим есть в регистре невыход на работу с 10 по 25 сентября 2020 г. Т.е. такая запись:
Невыход, 10.09.2020, 25.09.2020, Сторно = Ложь
Затем работник принес Б\Л с 15 по 18 сентября, в результате в регистре появилась такая запись:
Невыход, 15.09.2020, 18.09.2020, Сторно = Истина
Мне нужно вывести периоды невыхода, которые реально имели место быть. Т.е. мне нужно вывести два периода:
с 10 по 14
и
с 19 по 25
Может и в типовой конфе ЗУП 2.5 есть такие отчеты, где можно подсмотреть алгоритм (запрос), но я не нашел.
Мне приходит на ум только прямой как рельса метод: разбивать периоды на дни, писать их куда-то, а потом то же самое с периодами сторно. Если день сторно-записи есть в обычных днях, то удаляем этот день. И потом из оставшихся неудаленных дней клеить новые периоды.
Но может есть более красивый алгоритм?
|
|
2
Classic
28.09.20
✎
09:51
|
В чем проблема запросом сделать?
ВЫБРАТЬ
тз.ДатаНачала КАК Дата
ПОМЕСТИТЬ ДатыПериодов
ИЗ тз КАК тз
ОБЪЕДИНИТЬ
ВЫБРАТЬ
тз.ДатаОкончания
ИЗ тз КАК тз
;
ВЫБРАТЬ
ДатыПериодов.Дата КАК ДатаНачала,
МИНИМУМ(ДатыПериодов1.Дата) КАК ДатаОкончания
ПОМЕСТИТЬ Периоды
Из ДатыПериодов КАК ДатыПериодов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПериодов КАК ДатыПериодов1
ПО ДатыПериодов.Дата < ДатыПериодов1.Дата
СГРУППИРОВАТЬ ПО
ДатыПериодов.Дата
;
ВЫБРАТЬ
Периоды.ДатаНачала,
Периоды.ДатаОкончания
ИЗ Периоды КАК Периоды
ЛЕВОЕ СОЕДИНЕНИЕ тз КАК тз
ПО тз.ДатаНачала <= Периоды.ДатаОкончания
и тз.ДатаОкончания >= Периоды.ДатаНачала
и тз.Сумма < 0
ГДЕ
тз.ДатаНачала ЕСТЬ NULL
|
|
5
mistеr
28.09.20
✎
12:39
|
В одной большой системе, с которой я работал (не 1С), большинство таблиц были с периодами. И эти пересечения нужно было делать почти в каждом запросе. Скажем, три-четыре таблицы с периодами, и пара обычных. И сидишь, херачишь простыню... Где-то ошибся, и результат неверный. И при отладке все возможные случаи проверить. И чтобы план при этом был нормальный.
Как вспомню, так вздрогну.
|
|