Бухгалтерский учёт. Двойная запись. Динамические атрибуты во Viewшках. Архитектура двойной записи

Нужен функционал по аналогии с бухгалтерским учётом - двойная запись.
Счёт дебета, счёт кредита, у каждого счёта есть набор аналитик (другие объекты системы), сумма транзакции, кол-во транзакции.

Суть вопроса: как сделать так, чтобы при выборе в окне ввода транзакции счёта дебета или кредита отображался список его аналитик (для каждого счёта список разный), каждая из аналитик которой была в виде, например, выпадающего списка его объектов (по всем классам системы).

Пример работы функционала:

  1. Создаём счёт №10, указываем для него аналитики “Материалы” и “Склады” (это два класса со своими объектами).
  2. Создаём счёт №60, и указываем для него аналитики “Контрагенты” и “Договоры” (также два разных класса системы со своими объектами и со своей взаимосвязью).
  3. Создаём транзакцию, в которой предлагается выбрать счёт дебета и счёт кредита:
  • выбираем счёт дебета №10 и для него генерируется на форме два поля “Номенклатура” и “склад”, при этом в каждом поле я могу выбрать соответствующие объекты класса.
  • выбираем счёт кредита №60 и для него, по аналогии, отображаются поля “Контрагент”, а потом выбираем договор, который связан с ранее выбранным контрагентом (классы имеют связь друг с другом).

Есть ли пример реализации подобного функционала?
Какую технологию использовать?
Если есть возможность - предложите вариант архитектуры классов. Важно, чтобы при добавлении класса в систему, он становился бы доступным для выбора в качестве аналитики в при настройке счёта учёта.

В чём глобальный смысл - универсальная система учёта, прежде всего финансов, которую можно настроить “на лету” на уровне пользователя. Выполняемые отдельные задачи и процессы BPM генерируют транзакции (по шаблонам), которые позволяют автоматизировать финансовый учёт и отчётность (завершается это всё стандартной финансовой отчётностью, а также отчётами в натуральном выражении, при использовании соответствующих аналитик).

Буду благодарен за любую ссылку на пример реализации, если такие “звери” уже кем-то делались.

2 симпатии