Страницы: 1
RSS
Вставка даты не по порядку
 
Добрый день!

В строках записаны названия работ и длительность выполнения в днях. некоторые работы связаны друг с другом и должны начитаться только после окончания предыдущей. Связи записаны в поле "В", даты выполнения в полях "D" и "E" , Нужно чтоб даты начала и окончании всех связанных между собой работ заполнялись автоматически при введении первоначальной даты.Работы считаются связанными между собой, если в названии связи начальные 6 символов совпадают. Сложность состоит в том что работы нельзя сортировать, а связи идут не по порядку. Проставленная мною дилетантская формула в таком случае не работает.  

Прошу помощи!
 
Добрый день!
решение через доптаблицу + впр
 
Спасибо!

но это не очень удобный вариант(((, предется вести 2 таблицы.
Я думала может как нибудь можно используя массив данных или еще какую формулу. например как-то просмотреть все данные выше и найти первое совпадение. вот бы кто-нибудь подсказал как это формулой прописть.
 
Я немного "невкурил" как работает столбец "связь/очередность". Это номер раздела точка номер строки в разделе?

P.S. Любите же вы геморрой себе и другим сделать. Почему нельзя было столбец соответствующий добавить?
Изменено: Alexey_Spb - 25.01.2019 15:11:51
 
Доп. столбец
=ЕСЛИ(C3="";"";СЧЁТЕСЛИ($C$3:C3;ЛЕВБ(C3;7)&"*")+ПОДСТАВИТЬ(ПСТР(C3;6;2);".";)*100)
Дата начала:
=ЕСЛИ(D4;ВПР(НАИМЕНЬШИЙ($A$3:$A$14;СЧЁТЕСЛИ($A$3:$A$14;"<"&A4));$A$3:$F$14;6;)+1;)
Разделов <=99, работ в одном разделе <=99
 
vikttur, в какой столбик первую формулу поставить? у меня не работает(((

)) Извиняюсь, поменяла немного. Если в столбце  B одинаковые данные то эти работы должны следовать друг за другом.
Например Я заполнила дату в первой работе с Графиком номер "1" и все работы с графиком "1" подсчитались сами. Я заполнила первоую работу с графиком номер "2" и другие работы с графиком 2 заполнились сами т тд
 
Kedr Iohan,
Не бойтесь совершенства. Вам его не достичь.
 
Низкий Вам поклон!!!!!
 
Несколько замороченный вариант на PQ, который сам генерирует номера разделов и пунктов, а так же проставляет даты.
Писал на скорую руку, много прилизывания данных и не самый оптимальный код.

P.S. Автор, у вас в исходных данных почти все ссылки были "битые" - указывали на несуществующие пункты.

Код
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Fil = Table.SelectRows(Source, each [Название работ] <> null and [Название работ] <> ""),
    Ct = Table.TransformColumnTypes(Fil,{{"С", type date}, {"ПО", type date}, {"Длительность, дней", type number}, {"Связь/Очередность", type text}, {"Название работ", type text}}),

    // Определение ключа состоящего из номера раздела и подраздела.
    T1 = Table.TransformColumns
           (
            Ct,
            {"Связь/Очередность", each if _ = null then null else Text.End(_, Text.Length(_) - 5)}
            ),
    List = List.Accumulate
            (
             T1[Название работ], 
             [A = 0, B = 0, Out = {}], 
             (acc, this) =>
              let
               NewA = try Text.From(Text.Range(this, 7, Text.PositionOf(this, ".", Occurrence.First) - 7)) otherwise acc[A],
               NewB = if acc[A] <> NewA then 0 else acc[B] + 1
              in [A = NewA, B = NewB, Out = acc[Out] & {Text.From(NewA) & "." & Text.From(NewB)}]
            )[Out],
     T2 = Table.FromList(List),


    AddI1 = Table.AddIndexColumn(T1, "Index", 0, 1),
    AddI2 = Table.AddIndexColumn(T2, "Index", 0, 1),
    MQ = Table.NestedJoin(AddI1,{"Index"},AddI2,{"Index"},"Exp",JoinKind.LeftOuter),
    Tr1 = Table.ExpandTableColumn(MQ, "Exp", {"Column1"}, {"Column1"}),
    Tr2 = Table.RenameColumns(Tr1,{{"Column1", "Ref"}, {"Длительность, дней", "Длит"}, {"С", "Start"}, {"Связь/Очередность", "LinkTo"}}),
    Tr3 = Table.Buffer(Tr2),

    // Решение зависимостей
    DeepDive = (Ref, optional Deep) =>
      let
       CheckDeep = if Deep = null then 0 else Deep,
       Row = Tr3{[Ref = Ref]}
      in
       if Row[Start] = null then 
         if CheckDeep < 1000 then 
           try Date.AddDays(@DeepDive(Row[LinkTo], CheckDeep + 1), Tr3{[Ref = Row[LinkTo]]}[Длит]) otherwise null
         else
           null
       else 
         Row[Start],


    Tr5 = Table.AddColumn(Tr3, "NewStart", each DeepDive([Ref])),
    Tr6 = Table.AddColumn(Tr5, "NewEnd", each try Date.AddDays([NewStart], [Длит]) otherwise null),
    Rc = Table.RemoveColumns(Tr6,{"LinkTo", "Ref", "Start", "ПО", "Index"}),
    Ct2 = Table.TransformColumnTypes(Rc,{{"NewStart", type text}, {"NewEnd", type text}}),
    Final = Table.RenameColumns(Ct2,{{"NewStart", "Начало"}, {"NewEnd", "Конец"}})

in
    Final
Изменено: Alexey_Spb - 25.01.2019 18:19:23
 
Цитата
Kedr Iohan написал: в какой столбик первую формулу поставить?
Извините, не тот файл прикрепил.
Заменил.
Страницы: 1
Наверх