Почти реализация РАБДЕНЬ.МЕЖД()

#АнатомияФункций - custom



Всем привет!

Возник в чате вопрос по реализации экселевской РАБДЕНЬ.МЕЖД().

Соответственно, у меня возникло два вопроса.

Один к функции – «почему рабочие субботы не учитываем?!» - но это решаемо

g=(ot,dn,vyh,pra,rab)=>

[ a=List.Buffer(Text.PositionOf(vyh,"1",Occurrence.All)),

b=(x)=>if List.Contains(pra,x) or (List.Contains(a,Date.DayOfWeek(x,Day.Monday)) and not List.Contains(rab,x)) then 0 else 1,

c=List.Generate(()=>[d=ot,p=0,i=p],

(x)=>x[i]<=dn,

(x)=>[d=Date.AddDays(x[d],1),p=b(d),i=x[i]+p],

(x)=>if x[p]=1 then x[d] else null),

d=List.Last(List.RemoveNulls(c))][d]


или без Гены

g=(ot,dn,vyh,pra,rab)=>

[ a=List.Buffer(Text.PositionOf(vyh,"1",Occurrence.All)),

b=(x)=>if List.Contains(pra,x) or (List.Contains(a,Date.DayOfWeek(x,Day.Monday)) and not List.Contains(rab,x)) then false else true,

c=List.Dates(ot+#duration(1,0,0,0),List.Count(pra)+Number.RoundUp(dn/(7-List.Count(a)))*List.Count(a)+dn,#duration(1,0,0,0)),

d=List.Select(c,b){dn-1}][d]


Второй к вопрошающему – «а какого художника мы пытаемся экселевскую логику запихнуть в другой язык?!»

Потому как обычный код

let

g=(ot,dn)=>slct{List.PositionOf(slct,ot,Occurrence.First,(c,v)=>c>v)+dn-1},

f=(x)=>List.Transform(Table.Column(Excel.CurrentWorkbook(){[Name=x]}[Content],x),Date.From),

pra = List.Buffer(f("Праздники")),

rab = List.Buffer(f("Рабочие")),



from = Excel.CurrentWorkbook(){[Name="Дата"]}[Content],

typ = Table.TransformColumnTypes(from,{"дата размещения", type date}),



lst = List.Buffer(typ[дата размещения]),

min = List.Min(lst),

max = List.Max(lst),

dates = List.Dates(min,Duration.TotalDays(max-min)+Number.RoundUp(List.Max(typ[Дней])/5)*2+List.Count(pra),#duration(1,0,0,0)),

slct = List.Buffer(List.Sort(List.Difference(List.Select(dates,(x)=>Date.DayOfWeek(x,Day.Monday)<5),pra)&rab)),



to = Table.AddColumn(typ,"дата выполнения",(x)=>g(x[дата размещения],x[Дней]))

in

to


Будет кратно быстрее



По этому поводу смотрим рутуб



или дзен



ну а с исходниками всё давно выложено на sponsr.ru





Лайк, коммент, подписка приветствуются )))



Надеюсь, было полезно.

Всех благ!

@buchlotnik