Имя: Пароль:
1C
1С v8
Хранение данных в 1С
0 Djoko
 
30.09.19
10:26
1. Свой вариант, напишу в комментариях 86% (6)
2. Хранить в базе блок Б и В 14% (1)
3. Хранить только блок В 0% (0)
4. Оба блока хранить не нужно. 0% (0)
Всего мнений: 7

Добрый день!
Недавно с другом, программистом на С++, возникла дискуссия на тему какие данные правильно хранить в базе, а какие рассчитывать. Прошу помощи у общественного сознания, для разрешения этого вопроса.
К примеру у нас есть документ с табличной частью, в этой табличной части есть три группы данных:

А. Первичные данные:
-Номенклатура;
-Количество;
-Цена;
-Процент скидки;
-Цена себестоимости;

Б. Прямые расчетные данные:
-Сумма;
-Сумма скидки;
-Сумма себестоимости;

В. Не прямые расчетные данные.
-Процент от общей суммы в документе;
-Процент от максимальной суммы в документе;

Вопрос, какие из этих блоков необходимо хранить в базе, а какие рассчитывать.
С блоком А понятно, его хранить необходимо в любом случае.
Вопросы по блокам Б и В.
Если будет обоснование выбранного варианта буду благодарен:)
1 shuhard
 
30.09.19
10:30
(0)[Недавно с другом, программистом на С++, возникла дискуссия на тему какие данные правильно хранить в базе, а какие рассчитывать. ]

форум не комментирует религиозные споры кодеров разных конфессий

Свой вариант, напишу в комментариях
2 Лефмихалыч
 
30.09.19
10:34
глупый детский спор в песочнице

Нет никакого "правильно". Чем больше хранишь, тем больше весит. Чем больше рассчитываешь, тем медленнее работает. Нужно искать баланс, опираясь на соображения эффективности с точки зрения самых массовых прецедентов использования.
3 Cyberhawk
 
30.09.19
10:36
"какие из этих блоков необходимо хранить в базе, а какие рассчитывать" // Кому необходимо?
4 ПесДобряк
 
30.09.19
10:36
(0) Зависит от ТЗ. Какие впоследствии данные понадобятся. Для отчетов, для изменения условий скидок.

Свой вариант, напишу в комментариях
5 Василий Алибабаевич
 
30.09.19
10:36
(0) Блок Б.
Результат операции. Будет использоваться в дальнейших расчетах (отчетах). Каждый раз рассчитывать построчно сумму взаиморасчетов - есть полный бред. Хранить в базе.
Блок В.
Потешить любопытство. Ни на какие дальнейшие расчеты не влияет. Можно не хранить.
А вообще см.(2)
6 ПесДобряк
 
30.09.19
10:40
(5) > Ни на какие дальнейшие расчеты не влияет.

Зависит от бизнес-процессво предприятия.
7 Василий Алибабаевич
 
30.09.19
10:41
(6) Ага.
8 unregistered
 
30.09.19
10:41
Неизменные данные - хранить в документе
Изменяемые (или те, которые могут меняться) - рассчитывать.

Из блока "Б" - храним только Сумма и Сумма скидки. Они ведь не могут поменяться после того, как покупатель уже ушёл. Сумма себестоимости может храниться в документе в том случае, если она рассчитывается только единожды при записи документа и никогда в последующем не будет меняться вне зависимости от исправлений предшествующих данных.

Из блока "В" данные можно хранить в документе. Но см (2) - надо понимать, что это занимает место в базе. И хранить их в базе имеет смысл только, если эти данные очень часто нужны, а их расчет - очень трудозатратен для системы.

ОФФ. Согласен с оратором (2) - вопрос тупой и странный.

Свой вариант, напишу в комментариях
9 unregistered
 
30.09.19
10:43
И вообще. Что значит "в документе"? Записи регистров, привязанные к регистратору (документу) - это данные "в документе" или "вне документа"?
10 Djoko
 
30.09.19
10:46
(2) Помимо быстродействия есть же ещё вопрос удобства.
Условно если данные в базе не хранить, то формулы по их расчету будут в нескольких местах, в запросе для отчетов, на форме для отображения, в каком нибудь источнике данных и печатной форме, и при каждом изменение формулы нужно будет править их во всех местах. Но при добавление данных не через форму(стороннее соединение, загрузка из экселя и т.д.) не нужно будет задумываться о их правильном расчете, достаточно занести первичные данные.
11 Djoko
 
30.09.19
10:47
(9) если при открытие формы документа необходимо проделать какие то операции, а не просто вывести реквизит на форму - это вне документа.
12 Cyberhawk
 
30.09.19
11:04
(10) Никто не мешает и расчет сделать, и хранить его. Почему ты противопоставляешь?
13 Лефмихалыч
 
30.09.19
14:22
(10) ага, а теперь покажи мне, где в (2) я пишу, о том, что руководствоваться надо быстродействием?
14 H A D G E H O G s
 
30.09.19
14:37
Хранить надо любой чих, если планируешь задерживаться в фирме или иметь положительную карму от программистов - потомков.

Хранить в базе блок Б и В
15 Nyoko
 
30.09.19
14:40
Зависит от тз, например есть показатель который считается из 100500 параметров, и если массив данных типа 10 млн ед. считает этот показатель будет просто убийственно долго. Другое дело если от рассчитан и лежит в регистре.
Если массив данных 1000 то пусть считается демонически ..

Свой вариант, напишу в комментариях
16 Eiffil123
 
30.09.19
14:41
(14) главное - не дублировать реквизиты. А то бывают базы 1С где реквизиты Сумма и НоваяСумма. и хз, что использовать

Свой вариант, напишу в комментариях
17 unregistered
 
30.09.19
14:43
(10) Какой феерический бред.
Ни быстродействие, ни удобство не имеют значения.
Значение имеет лишь конкретный бизнес-процесс и то как он реализован в конкретном прикладном решении (вне зависимости от того на каком языке программирование оно написано).

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

Или с какого перепугу надо каждый раз пересчитывать сумму скидки, если эта скидка предоставлена была в момент продажи, будучи рассчитанной по правилам, действовавшим на тот момент. И как рассчитать скидку в документе годовалой давности, если правила 5 раз с тех пор поменялись? - Хранить в документе или где-то еще сами правила расчета скидки?

У автора каша в голове. И не видно никакого прояснения.
ИМХО.
18 VladZ
 
30.09.19
14:45
(0) А - хранить, Б - хранить.
В - непонятная хрень. Проанализировать для чего нужна и какие нужны ресурсы для получения актуальных данных. Если "быстрее" хранить, чем "получать" - тоже хранить.
19 Nyoko
 
30.09.19
14:47
(0) + (15) Попробуйте сформировать отчет по ССЧ в зуп за год в по компании в которой десятки тысяч сотрудников.. сразу все поймете ..
20 shuhard
 
30.09.19
14:48
(10) открой для себя разницу OLTP и OLAP
(17) +100500
21 Djoko
 
30.09.19
14:55
(12) Не понял вашу мысль, уточните, пожалуйста.
22 Сияющий в темноте
 
30.09.19
14:56
Кстати,в sql таблицах есть понятие рассчитываемое поле для таких целей,чтобы было ощущение,что хранится,но не было хранения.
23 Cyberhawk
 
30.09.19
14:58
(21) "Но"
24 Сергей2334
 
30.09.19
15:03
это рассчитывается:

Б. Прямые расчетные данные:
-Сумма себестоимости;

В. Не прямые расчетные данные.
-Процент от общей суммы в документе;
-Процент от максимальной суммы в документе;

Свой вариант, напишу в комментариях
25 Djoko
 
30.09.19
15:24
(13) На прямую на это отсылки не было, но фраза " Чем больше хранишь, тем больше весит. Чем больше рассчитываешь, тем медленнее работает." относиться больше к производительности, нежели к принципу по которой данные заносяться в БД.
(14)  Спасибо за первое конкретное мнение.
(17) Если абстрагироваться от негатива в вашем сообщение, то давайте рассмотрим  ваши примеры.
По бизнес процессу мы хотим видеть себестоимость на момент создания документа. Себестоимость нельзя заносить задним числом. Себестоимость храниться в отдельном периодическом регистре сведений.
какой вариант выберете вы:
1 . При открытие формы получать данные из регистра сведений, и выводить их на форму.(для отчетов вам тоже прийдется получать эти данные из регстра отдельно)
2. Заносить данные в документ.
Пример 2.
В документе есть стоимость в рублях и сумма скидки в рублях. Расчитывается процент этой скидки.
Процент нужно хранить в базе?
Для варианта хранения:
+ во всех отчетах и печатных формах вы просто берете значение из базы и выводите.
- Если формула изменилась, и вам нужно в старых документах видеть данные по актуальной формуле, необходимо либо обрабатывать все документы, либо опять же править все отчеты добавляя новые условия.
Для варианта расчета:
- если в какой то момент формулу расчета скидки решат поменять(Для примера, не учитывать НДС в стоимости) , вам необходимо править все печатные формы, отчеты и т.д.
+при занесение данных сторонними методами(внешнее подключение, групповые обработки и т.д.) вам не нужно переживать о расчете доп данных. Вы заносите только первичные данные.
(18) приведенные реквизиты исключительно для примера расчетов, по которым недостаточно данных текущей строки, но нужно учитывать и другие строки в документе. Просто хочу для себя понять сам принцип, по которому "правильнее"(удобнее, практичнее и т.д.)  хранить данные в базе.
26 ам794123
 
30.09.19
15:43
(0) Все давно разобрано по полкам до нас. Нам остается только изучить и использовать.

Нормализация отношений. Шесть нормальных форм: https://habr.com/ru/post/254773/
27 unregistered
 
30.09.19
15:47
(25) Мои подозрение о каше в голове только усиливаются.
Не обижайтесь. Просто либо сказывается недостаток образования, либо опыта.
Вы даже не можете сформулировать задачу связно.
А ведь именно исходя из конкретных условий задачи будет приниматься решение о том, где хранить данные.

Что касается примеров.


>> Пример 1. мы хотим видеть себестоимость на момент создания документа. Себестоимость нельзя заносить задним числом.

Что значит "заносить задним числом"? Вы сами понимаете что пишите? Осмелюсь предположить, что речь идёт о том, что себестоимость, рассчитанная при записи документа, не может меняться в последующем. Если я прав, то в таком случае действительно можно хранить себестоимость в документе. Собственно говоря именно такой пример я привёл в (8).

Другой вопрос, что ни одна из типовых конфигураций 1С (УТ, БП, КА, УПП, ERP) не предусматривают подобную логику событий. И я с ними склонен согласиться. Ибо я ещё не видел ни одной организации, где документы вносили в базу данных в строгом хронологическом порядке, позволяющем рассчитать себестоимость корректно и один единственный раз. Но это всё лирика. Требования определяет бизнес. Если бизнес сказал, что считаем себестоимость при записи и никогда в жизни её не меняем, то пусть так - можно хранить и в документе.

Про периодический регистр сведений относительно себестоимости вообще ничего не понял. Какой-то горячечный бред.

>> Пример 2.
>> В документе есть стоимость в рублях и сумма скидки в рублях. Расчитывается процент этой скидки.

Очередная безумная постановка задачи.
Если есть сумма 100 рублей и сумма скидки 15 рублей, то как может поменяться величина предоставленной скидки - 15% ? Да хоть каждый день по 100 раз меняй формулу, скидка предоставленная покупателю вчера  в 15 рублей уже не поменяется. Хранить ли этот самый процент (15%) в базе или рассчитывать каждый раз - не имеет принципиального значения (кроме некоторой избыточности). Т.к. сам расчет простой и никак не зависит от каких-то там формул, которые у тебя где-то там в каких-то печатных формах меняются. Даже через 100 млн лет 15 рублей от 100 рублей - это будет 15%, а не 20% и не 10%. Хоть ты тресни. Это арифметика за 4 класс.