diff --git a/pkg/files/field_test.go b/pkg/files/field_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..7b6317309654c9027ca0b373b2362b7d3aad54af
--- /dev/null
+++ b/pkg/files/field_test.go
@@ -0,0 +1,34 @@
+package files
+
+import (
+	"testing"
+
+	"git.perx.ru/perxis/perxis-go/pkg/schema"
+	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestFileField_Get(t *testing.T) {
+	sch := schema.New(
+		"a", field.String(),
+		"b", field.Object(
+			"file", Field(),
+		),
+		"file", Field(),
+	)
+	sch.ClearState()
+
+	assert.Equal(t, field.String(), sch.GetField("file.id"))
+	assert.Equal(t, field.String(), sch.GetField("file.name"))
+	assert.Equal(t, field.String(), sch.GetField("file.mimeType"))
+	assert.Equal(t, field.String(), sch.GetField("file.url"))
+	assert.Equal(t, field.String(), sch.GetField("file.key"))
+	assert.Equal(t, field.Number(field.NumberFormatInt), sch.GetField("file.size"))
+
+	assert.Equal(t, field.String(), sch.GetField("b.file.id"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.name"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.mimeType"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.url"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.key"))
+	assert.Equal(t, field.Number(field.NumberFormatInt), sch.GetField("b.file.size"))
+}
diff --git a/pkg/references/field.go b/pkg/references/field.go
index 905c2d43a1b05f5e19b00a99fcc8fadddd718b61..f80e7b5a564efe81df2969fb35f14d69fd23a1c8 100644
--- a/pkg/references/field.go
+++ b/pkg/references/field.go
@@ -26,9 +26,22 @@ func (p ReferenceParameters) Clone(reset bool) field.Parameters {
 	}
 	return &p
 }
-func (p ReferenceParameters) GetField(f *field.Field, name string) *field.Field { return nil }
+func (p ReferenceParameters) GetField(f *field.Field, name string) *field.Field {
+	var fld *field.Field
+	switch name {
+	case "id", "collection_id":
+		return field.String()
+	case "disabled":
+		return field.Bool()
+	}
+	return f.SetFieldState(name, fld)
+}
 func (p ReferenceParameters) ListFields(f *field.Field, filter ...field.FieldFilterFunc) []*field.Field {
-	return nil
+	return []*field.Field{
+		f.SetFieldState("id", field.String()),
+		f.SetFieldState("collection_id", field.String()),
+		f.SetFieldState("disabled", field.Bool()),
+	}
 }
 
 type ReferenceType struct{}
diff --git a/pkg/references/field_test.go b/pkg/references/field_test.go
index 8891c5a41307a2d568ae22e314785281da550174..ac9d5c03db107ed8f284cab3c9205afe95f1502b 100644
--- a/pkg/references/field_test.go
+++ b/pkg/references/field_test.go
@@ -298,3 +298,23 @@ func TestReference_JSON(t *testing.T) {
 
 	assert.Equal(t, fld, res)
 }
+
+func TestReferenceField_Get(t *testing.T) {
+	sch := schema.New(
+		"a", field.String(),
+		"b", field.Object(
+			"ref", Field(nil),
+		),
+		"ref", Field(nil),
+	)
+	sch.ClearState()
+
+	assert.Equal(t, field.String(), sch.GetField("ref.id"))
+	assert.Equal(t, field.String(), sch.GetField("ref.collection_id"))
+	assert.Equal(t, field.Bool(), sch.GetField("ref.disabled"))
+
+	assert.Equal(t, field.String(), sch.GetField("b.ref.id"))
+	assert.Equal(t, field.String(), sch.GetField("b.ref.collection_id"))
+	assert.Equal(t, field.Bool(), sch.GetField("b.ref.disabled"))
+
+}