|
Как получить неперекрывающиеся периоды из регистра | ☑ | ||
---|---|---|---|---|
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 есть такие отчеты, где можно подсмотреть алгоритм (запрос), но я не нашел. Мне приходит на ум только прямой как рельса метод: разбивать периоды на дни, писать их куда-то, а потом то же самое с периодами сторно. Если день сторно-записи есть в обычных днях, то удаляем этот день. И потом из оставшихся неудаленных дней клеить новые периоды. Но может есть более красивый алгоритм? |
|||
1
hhhh
28.09.20
✎
02:42
|
(0) наверно режим вытеснения - это механизм платформы, а не какие-то там регистры сведений.
|
|||
2
Classic
28.09.20
✎
09:51
|
В чем проблема запросом сделать?
ВЫБРАТЬ тз.ДатаНачала КАК Дата ПОМЕСТИТЬ ДатыПериодов ИЗ тз КАК тз ОБЪЕДИНИТЬ ВЫБРАТЬ тз.ДатаОкончания ИЗ тз КАК тз ; ВЫБРАТЬ ДатыПериодов.Дата КАК ДатаНачала, МИНИМУМ(ДатыПериодов1.Дата) КАК ДатаОкончания ПОМЕСТИТЬ Периоды Из ДатыПериодов КАК ДатыПериодов ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПериодов КАК ДатыПериодов1 ПО ДатыПериодов.Дата < ДатыПериодов1.Дата СГРУППИРОВАТЬ ПО ДатыПериодов.Дата ; ВЫБРАТЬ Периоды.ДатаНачала, Периоды.ДатаОкончания ИЗ Периоды КАК Периоды ЛЕВОЕ СОЕДИНЕНИЕ тз КАК тз ПО тз.ДатаНачала <= Периоды.ДатаОкончания и тз.ДатаОкончания >= Периоды.ДатаНачала и тз.Сумма < 0 ГДЕ тз.ДатаНачала ЕСТЬ NULL |
|||
3
mistеr
28.09.20
✎
10:09
|
||||
4
Антиквар
28.09.20
✎
12:33
|
(2),(3) Спасибо, надо переварить :)
|
|||
5
mistеr
28.09.20
✎
12:39
|
В одной большой системе, с которой я работал (не 1С), большинство таблиц были с периодами. И эти пересечения нужно было делать почти в каждом запросе. Скажем, три-четыре таблицы с периодами, и пара обычных. И сидишь, херачишь простыню... Где-то ошибся, и результат неверный. И при отладке все возможные случаи проверить. И чтобы план при этом был нормальный.
Как вспомню, так вздрогну. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |