Size: a a a

2020 February 06

🅵

🅵🅾️🆇 in 1C
Есть еще на инфостарте (вроде в минимализмах)
источник

🅵

🅵🅾️🆇 in 1C
Я сам портировал недавно на Postgres)
источник

r

russian_linux in 1C
пересекающихся надо
источник

S

Simonov in 1C
🅵🅾️🆇
Так и перекрывающиеся периоды ты хочешь объединить?
ага, а скидки - сложить )))
источник

🅵

🅵🅾️🆇 in 1C
А, сча найду пересекающихся
источник

r

russian_linux in 1C
то есть по одной позиции и пересекающиеся и непересекающиеся периоды. и это в регистре сведений
источник

🅵

🅵🅾️🆇 in 1C
russian_linux
то есть по одной позиции и пересекающиеся и непересекающиеся периоды. и это в регистре сведений
источник

S

Simonov in 1C
russian_linux
то есть по одной позиции и пересекающиеся и непересекающиеся периоды. и это в регистре сведений
из пересекающихся периодов ты какую из скидок возьмешь?
источник

🅵

🅵🅾️🆇 in 1C
Обожаю этого мужика, он мне один раз очень здорово помог
источник

🅵

🅵🅾️🆇 in 1C
А еще могу показать как я это написал именно кодом (но на 1с тебе самому портировать), если соберешься делать не в запросе)))
источник

r

russian_linux in 1C
Simonov
из пересекающихся периодов ты какую из скидок возьмешь?
сама скидка не нужна. мне нужен точный период самого факта действия скидок для того, чтобы получить продажи именно в этот период. то есть позиция продавалась по скидочной цене и продалась за такую-то сумму
источник

🅵

🅵🅾️🆇 in 1C
russian_linux
сама скидка не нужна. мне нужен точный период самого факта действия скидок для того, чтобы получить продажи именно в этот период. то есть позиция продавалась по скидочной цене и продалась за такую-то сумму
Выше ссылку дал)
источник

r

russian_linux in 1C
🅵🅾️🆇
Выше ссылку дал)
спасибо, добрый лисенок, смотрю)
источник

🅵

🅵🅾️🆇 in 1C
 final List<HTTPPeriod> _list;

 void mergeIntersections() {
   final List<HTTPPeriod> _tmp = <HTTPPeriod>[];
   for (HTTPPeriod period in this._list) {
     final int index = _tmp.indexWhere((HTTPPeriod other) => period.isOverlapped(other));
     if (index >= 0) {
       final HTTPPeriod other = _tmp[index];
       _tmp[index] = HTTPPeriod(
         start: period.start.compareTo(other.start) < 0 ? period.start : other.start,
         end: period.end.compareTo(other.end) > 0 ? period.end : other.end
       );
     } else {
       _tmp.add(period);
     }
   }
   this._list
     ..clear()
     ..addAll(_tmp)
     ..sort();
 }

 bool isOverlapped(HTTPPeriod other) =>
   this.start.compareTo(other.start) >= 0
   && this.start.compareTo(other.end) <= 0      
   ||
   this.end.compareTo(other.start) >= 0
   && this.end.compareTo(other.end) <= 0;
источник

🅵

🅵🅾️🆇 in 1C
🅵🅾️🆇
 final List<HTTPPeriod> _list;

 void mergeIntersections() {
   final List<HTTPPeriod> _tmp = <HTTPPeriod>[];
   for (HTTPPeriod period in this._list) {
     final int index = _tmp.indexWhere((HTTPPeriod other) => period.isOverlapped(other));
     if (index >= 0) {
       final HTTPPeriod other = _tmp[index];
       _tmp[index] = HTTPPeriod(
         start: period.start.compareTo(other.start) < 0 ? period.start : other.start,
         end: period.end.compareTo(other.end) > 0 ? period.end : other.end
       );
     } else {
       _tmp.add(period);
     }
   }
   this._list
     ..clear()
     ..addAll(_tmp)
     ..sort();
 }

 bool isOverlapped(HTTPPeriod other) =>
   this.start.compareTo(other.start) >= 0
   && this.start.compareTo(other.end) <= 0      
   ||
   this.end.compareTo(other.start) >= 0
   && this.end.compareTo(other.end) <= 0;
Вот так в коде написал)
Захочешь портировать на 1с - помогу)
источник

r

russian_linux in 1C
да тут псевдо-1с-код) как его прикрутить к регистру пока не понимаю
источник

🅵

🅵🅾️🆇 in 1C
russian_linux
да тут псевдо-1с-код) как его прикрутить к регистру пока не понимаю
Там не псевдо
источник

🅵

🅵🅾️🆇 in 1C
Там все как надо.
Это временная таблица же
источник

🅵

🅵🅾️🆇 in 1C
ВЫБРАТЬ РАЗЛИЧНЫЕ
   Край.От
ПОМЕСТИТЬ ЛевыеКрая
ИЗ
   Интервалы КАК Край
       ЛЕВОЕ СОЕДИНЕНИЕ Интервалы КАК Интервалы
       ПО (Интервалы.От < Край.От)
           И Край.От <= Интервалы.До
ГДЕ
   Интервалы.От ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ РАЗЛИЧНЫЕ
   Край.До
ПОМЕСТИТЬ ПравыеКрая
ИЗ
   Интервалы КАК Край
       ЛЕВОЕ СОЕДИНЕНИЕ Интервалы КАК Интервалы
       ПО (Интервалы.От <= Край.До)
           И Край.До < Интервалы.До
ГДЕ
   Интервалы.От ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
   ЛевыеКрая.От,
   МИНИМУМ(ПравыеКрая.До) КАК До
ИЗ
   ЛевыеКрая КАК ЛевыеКрая
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПравыеКрая КАК ПравыеКрая
       ПО ЛевыеКрая.От <= ПравыеКрая.До

СГРУППИРОВАТЬ ПО
   ЛевыеКрая.От


Вот же
источник

🅵

🅵🅾️🆇 in 1C
Интервалы - это у тебя так получается:

ВЫБРАТЬ НачалоДействия, КонецДействия 
ПОМЕСТИТЬ Интервалы
ИЗ Скидки ГДЕ Объект = &Объект
источник