How to make custom Attach function?

I am trying to create my own Attach function Astor to Component because of fundamental problems with the Attach function. My problem is that I apparently do not understand the math and my function does not work even though it seems like I did everything correctly, but apparently I am missing something.

My сode now:
.h

    UFUNCTION(BlueprintCallable, Category = "Attachment")
    void AddAttachedActor(AActor* Actor, USkeletalMeshComponent* SkeletalMesh, FName BoneName);

    UFUNCTION(BlueprintCallable, Category = "Attachment")
    void UpdateAttachedActors();

private:

    struct FAttachedActorData
    {
        AActor* AttachedActor;
        USkeletalMeshComponent* SkeletalMeshComponent;
        FName BoneName;
        FTransform InitialOffset;
    };

    TArray<FAttachedActorData> AttachedActors;

.cpp

void AWorldASyncAttachActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    UpdateAttachedActors();
}



void AWorldASyncAttachActor::AddAttachedActor(AActor* Actor, USkeletalMeshComponent* SkeletalMesh, FName BoneName)
{
    FTransform SocketTransform = SkeletalMesh->GetSocketTransform(BoneName, ERelativeTransformSpace::RTS_World);
    SocketTransform.SetScale3D(FVector(1.0f, 1.0f, 1.0f));
    FTransform ActorTransform = Actor->GetActorTransform();
    FTransform InitialOffset = SocketTransform.GetRelativeTransform(ActorTransform);

    FAttachedActorData Data;
    Data.AttachedActor = Actor;
    Data.SkeletalMeshComponent = SkeletalMesh;
    Data.BoneName = BoneName;
    Data.InitialOffset = InitialOffset;

    AttachedActors.Add(Data);
}

void AWorldASyncAttachActor::UpdateAttachedActors()
{
    for (FAttachedActorData& Data : AttachedActors)
    {
        FTransform SocketTransform = Data.SkeletalMeshComponent->GetSocketTransform(Data.BoneName, ERelativeTransformSpace::RTS_World);
        SocketTransform.SetScale3D(FVector(1.0f, 1.0f, 1.0f));
        FTransform NewActorTransform = SocketTransform * Data.InitialOffset;
        Data.AttachedActor->SetActorTransform(NewActorTransform);
    }
}

I’ll say in advance that it’s easy to swap the multiplication in the line

        FTransform NewActorTransform = SocketTransform * Data.InitialOffset;

does not lead to the desired result.

My desired result is the Attach with “Keep World” function.