Имя: Пароль:
1C
 
1С устарела в доменах данных?
☑
0 Гений 1С
 
гуру
09.11.26
✎
17:09
Когда я проектировал Free 1s, столкнулся с архитектурной проблемой.

Что сделать, один документ поступление товаров (с видом операции от поставщика, возврат от покупателя, прием на хранение, прием на комиссию)

Или четыре документа:
Поступление от поставщика, возврат от покупателя, прием на хранение, прием на комиссию.

Аналогичные проблемы возникают и с контрагентами-партнерами, физлицами, контактными лицами, которые являются частями друг друга.

Спросил у ИИ, оно ничего толкового не сказало, так как это сейчас грамотно проектируется (не в 1С конечно)?

Ответ ИИ

Такие базы данных и подходы к организации данных называются объектно-ориентированными или объектно-реляционными базами данных.

————————

📚 1. Объектно-ориентированные СУБД (OODBMS / ООБД)
Базы данных, которые изначально проектировались вокруг парадигм ООП (классы, полиморфизм, наследование, инкапсуляция).

⦁ Суть: В таких СУБД нет традиционных таблиц в реляционном понимании. Вы создаете класс Документ, объявляете дочерние классы ПриходнаяНакладная и РасходнаяНакладная, и они напрямую сохраняются в хранилище как объекты.
⦁ Примеры: InterSystems Caché / IRIS, ObjectStore, db4o, Versant.
⦁ Минусы: На практике чистые ООБД сейчас используются редко из-за сложности построения произвольных аналитических выборок, агрегаций и стандартизации (SQL в них заменен на OQL или языковые API).
————————

📚 2. Объектно-реляционные СУБД (ORDBMS)
Реляционные базы, в которые встроена поддержка объектных концепций (включая наследование таблиц на уровне движка).

Самый яркий и популярный пример — PostgreSQL.
В PostgreSQL есть нативное наследование таблиц (INHERITS):

-- Базовая таблица
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    doc_number VARCHAR(50),
    doc_date DATE,
    status VARCHAR(20)
);

-- Таблица-наследник
CREATE TABLE incoming_invoices (
    incoming_number VARCHAR(50),
    incoming_date DATE,
    counterparty_id INT
) INHERITS (documents);

-- Таблица-наследник
CREATE TABLE outgoing_invoices (
    outgoing_number VARCHAR(50),
    outgoing_date DATE,
    counterparty_id INT
) INHERITS (documents);


⦁ При запросе SELECT * FROM documents база вернет все документы (и базовые, и приходные, и расходные).
⦁ При запросе SELECT * FROM incoming_invoices вернутся только приходные со всеми своими и унаследованными полями.
————————

📚 3. ORM-паттерны в классических реляционных БД (RDBMS)
В современной промышленной разработке чаще всего используют стандартные реляционные СУБД (PostgreSQL, MySQL, MS SQL, Oracle), а само наследование реализуют через слой ORM (Object-Relational Mapping).

Описанная вами задача решается одним из паттернов Мартина Фаулера (Inheritance Mapping Patterns):

1. Class Table Inheritance (Joined Table Inheritance):
  ⦁ Создается таблица documents с общими полями (id, number, date, status).
  ⦁ Создаются отдельные таблицы incoming_invoices и outgoing_invoices, где первичный ключ id одновременно является внешним ключом (FOREIGN KEY) к documents.id.
  ⦁ При выборке конкретного документа ORM делает JOIN, а при выборке общего реестра читается только базовая таблица.
2. Single Table Inheritance (STI):
  ⦁ Все поля всех типов документов хранятся в одной таблице, плюс поле type (дискриминатор). Поля, специфичные для конкретного подтипа, остаются NULL для остальных.
3. Concrete Table Inheritance:
  ⦁ Каждая накладная живет в отдельной таблице, полностью дублируя общие поля базового документа.
————————

📚 4. Документоориентированные NoSQL БД
Если вам важна гибкость схемы (schemaless), когда базовые атрибуты общие, а специфичные зависят от типа:

⦁ Примеры: MongoDB, Couchbase или реляционные БД с колонками JSONB (PostgreSQL).
⦁ Суть: В единой коллекции документов хранятся JSON-объекты. У всех документов есть поля number, date, status, но в зависимости от типа структуры документа вложенный объект attributes содержит индивидуальный набор полей.
1 Fish
 
гуру
09.11.26
✎
17:11
(0) "Что сделать..." - Нанять грамотного системного архитектора.
2 RomanYS
 
09.11.26
✎
17:16
(0) ожидается один универсальный ответ?
Реализация от целей и требований зависит.
3 Волшебник
 
09.11.26
✎
17:19
Если ограничиться бухучётом, то документ "Операция" заменяет все остальные.
4 Гений 1С
 
гуру
09.11.26
✎
17:27
(2) ожидается озвучивание подходов. например, как расписать эти документы в подобной объектной базе.
Цель - красиво расписать структуру данных.
(3) и один справочник AnyObject, ага. Давайте без фанатизма.
5 LoneMan
 
09.11.26
✎
17:33
Я бы посмотрел как это сделано в сторонних системах типа SAP, чтобы понимать как люди вообще ведут учёт.
6 Гений 1С
 
гуру
09.11.26
✎
17:35
(5) я знаю, как это сделано в Navision, там обычные таблицы Customers, Vendors и т.п. С документами что-то в этом духе.
Не думаю что в SAPе начали использовать домены данных. Там такие же реляционные таблицы.
7 mikecool
 
09.11.26
✎
17:35
(5) если я правильно помню, а мне Мойша напел по телефону, то эта симфония звучит как (3)
то бишь - все ручками-ручками
8 Ненавижу 1С
 
гуру
09.11.26
✎
17:39
разные сущности, применять композицию и паттерн Декоратор
9 Ненавижу 1С
 
гуру
09.11.26
✎
17:40
(6) таблицы вообще не первичны, это периферия хранения сущностей
10 Гений 1С
 
гуру
09.11.26
✎
17:40
(8) чего сказать то хотел?
11 Ненавижу 1С
 
гуру
09.11.26
✎
17:41
(10) какое слово непонятно в фразе?
12 Гений 1С
 
гуру
09.11.26
✎
17:42
(11) ты не понял мой вопрос?
13 Krendel
 
09.11.26
✎
17:43
(4) Ну так расписывай, показывай, а мы посмотрим -красиво или нет
14 Krendel
 
09.11.26
✎
17:45
(0) в тз указано что проектировал -т.е. уже должны быть результаты проекта
15 Гений 1С
 
гуру
09.11.26
✎
17:47
(13) что расписывать. Я не знаю методики, потому и справшиваю, кто сталкивался. ИИ тоже не знает

(14) Если я тебе что-то должен, покажи расписку.
16 Ненавижу 1С
 
гуру
09.11.26
✎
17:49
(12) ты решил что тут конкурс демагогии?
17 mikecool
 
09.11.26
✎
17:50
пришел Серега и всех начал гнобить ))
но мне больше вспоминается поговорка "никто так хорошо не разбирается в дорогих часах, как нищий"
18 Krendel
 
09.11.26
✎
17:51
В чем преимущество управления доменами данных по сравнению с формами организации баз данных?
19 Гений 1С
 
гуру
09.11.26
✎
17:51
(18) в простоте проектирования, в отсутствии компромиссов в архитектуре, примеры которых описаны в сабже.
20 Krendel
 
09.11.26
✎
17:54
(15) тогда какой смысл задавать вопрос и ждать ответа, если сам не хочешь отвечать на банальные вопросы согласования времен
21 Гений 1С
 
гуру
09.11.26
✎
17:55
Ну как самое тупое решение в духе VMT (таблица виртуальных методов) в том же примере добавляем в таблицу Документ поле "вид операции".
Тогда если вид операции = "Поступление от поставщика"
то линкуется таблица ПоступлениеОтПоставщика_Реквизиты
ну и доп.реквизиты табличных частей, например
ПоступлениеОтПоставщика_Запасы_Реквизиты

И получается, что для таблицы поступление от поставщика мы можем добавлять доп. поля.

Но мало того, "Поступление от поставщика" всегда наследует поля вида операции "Поступление" (контрагент, договор, номер вх, дата вх) и просто таблицы документ (номер, дата)
22 Гений 1С
 
гуру
09.11.26
✎
17:55
(20) на какой вопрос, имеющий отношение к теме, я не ответил? повтори, отвечу.
23 Krendel
 
09.11.26
✎
17:55
(19) ну раз есть простота проектирования, то в чем сложность в 0?
24 Гений 1С
 
гуру
09.11.26
✎
17:57
(23) где есть? мой запрос на описание методов доменного проектирования. Искал их в ИИ, не нашел. Спрашиваю, может кто знает
25 Krendel
 
09.11.26
✎
17:57
(22) в (14)
26 Krendel
 
09.11.26
✎
17:59
(24) я просто не понимаю термина "доменное проектирование", если есть 6 форм организации бд. 1с использует 3ю форму
27 Ненавижу 1С
 
гуру
09.11.26
✎
17:59
(24) ты хоть одну книгу прочел про доменное проектирование?
Закон Брукера: Даже маленькая практика стоит большой теории.