Перейти к содержанию

Запрос связанных данных

Конфигурация

Структура описывается в файле internal/data/collector/types/index.go:

// Config представляет общий конфиг для сборки связанных сущностей для модели одного типа
type Config struct {
	// Собственный тип модели, применяется для запросов через ent
	SelfModelType string

	// Тип соответствующих данных в 1С, применяется при запросе обратно связанных сущностей для ограничения запроса.
	// Например:
	// Обратно связанной сущностью для transport_operations может быть transport_operation_states. Последняя сущность
	// может указывать на конкретную транспортную операцию с помощью trip_type и trip_uid.
	// Технически, trip_type может быть равен не только значению "jcfg:DocumentRef.ТранспортнаяОперация".
	// Указание типа SelfCargoType = "jcfg:DocumentRef.ТранспортнаяОперация" добавит помимо сравнения trip_uid
	// сравнение по trip_type = "jcfg:DocumentRef.ТранспортнаяОперация".
	SelfCargoType string

	// Набор базовых предикатов, то есть условий для выборки моделей без учёта применения фильтра.
	// Пример: может использоваться для транспортных операций, выбирая только те, у которых методом транспортировки
	// указано авто.
	Predicates []func(selector *sql.Selector)

	// Колонки для запроса данных сущности. Имеет смысл указывать только те, что потребуются для вывода.
	SelfFields []string

	// Функция для преобразования данных текущей сущности
	SelfMapper func(item any, prefetched PrefetchedByModelType) ItemMapped

	// Конфигурация запрашиваемых сущностей вместе с основным запросом параллельно.
	// Используется для небольших справочников или перечислений, чтобы не запрашивать их отдельными запросами.
	// Позволяет сократить общее время запроса.
	PrefetchTypes *RelatedConfig

	// Набор конфигураций для связанных сущностей. Конфигураций может быть несколько по следующей причине:
	// Первая конфигурация запрашивает связанные сущности,
	// вторая конфигурация запрашивает следующие связанные сущности для предыдущих связанные сущностей.
	RelationConfigs []RelationConfig

	// Функция для дозапроса нужных сущностей после основных запросов.
	// Используется потому, что не все нужные связанные сущности получается выразить с помощью существующих
	// конфигураций.
	// Например:
	// Для списка Контрагентов прямо связанными сущностями являются Физические лица,
	// для которых обратно связанными сущностями являются Документы физических лиц.
	// Сейчас нет возможности для каждого отдельного физического лица указать конфигурацию обратно связанных сущностей.
	// Потому решением этой проблемы является произвольный дозапрос нужных данных.
	PostFetch PostFetcher
}

Чаще всего применяется две версии конфигурации:

  • by_filter — конфигурация при запросе с произвольным фильтром для модели данных;
  • by_uids — конфигурация при запросе конкретных моделей данных по их уникальным идентификаторам.

Конфигурация по фильтру обычно применяется для вывода данных в таблице.

Конфигурация по идентификаторам применяется для вывода одной или нескольких моделей данных в отдельном окне. Такая конфигурация обычно содержит больше связанных данных, чем конфигурация по фильтру.

Примеры конфигураций можно посмотреть в файлах internal/data/repository/*/config_by_*.go