powered by simpleCommunicator - 2.0.47     © 2025 Programmizd 02
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Непротиворечивость данных
25 сообщений из 47, страница 1 из 2
Непротиворечивость данных
    #33467959
практик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Под непротиворечивостью данных я имею ввиду не ссылочную целостность, а отсутствие в наборе данных явных внутренних противоречий как со здравым смыслом,

например:
Остаток товара ААА = -1;
Поступление = 50, Отгрузка = 51,

так и с действующими в конкретной компании правилами,

например:
«Клиентам категории VIP возможна отгрузка без предоплаты, остальным клиентам отгрузка без предоплаты в 30% не производится»;
при этом в системе существует отгрузка без предоплаты для клиента, который не VIP

Хотелось бы обсудить:
- Насколько важно обеспечение такой непротиворечивости – стоит ли овчинка выделки
- Если это важно, то каким образом она обеспечивается в практике различных внедренцев.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33467984
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
практикПод непротиворечивостью данных я имею ввиду не ссылочную целостность, а отсутствие в наборе данных явных внутренних противоречий как со здравым смыслом
Это называется логической целостностью.
Поищите. Много чего написано и на этом форуме и в других местах в рамках обсуждения целостности базы данных.

Ответы:
1. Очень важно.
2. Технически - дописыванием проверки при записи (validate write). Технических сложностей в этом вопросе много.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33467995
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Важно.
Лучше всего достигается серверными процедурами постинга (учета, проведения). Это означает, что в базу можно записать все что угодно, но запись в регистры, по которым формируется отчетность производится пакетной процедурой, в теле которой и выполняются проверки на логическую целостность полученных в результате данных. Если целостность нарушается, учет отменяется и пакет записей возвращается на корректировку.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468012
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmв базу можно записать все что угодно, но запись в регистры...
Можно спросить в целях повышения образованности?
Чем отличается запись в базу от записи в регистры?
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468016
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Технических сложностей не замечено. Упрощенно, примерно так. Сначала делаете результирующие действия, потом проверяете целостность и если ее нет - отменяете транзакцию.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin tran
-- учет записей документа
update invtrbatch set st= 1  where id = :pBatchId

if @@ERROR <>  0  or exists (
-- проверка отрицательных остатков на карточках, с которых выполняется списание
select d.itemid
from vwhitemsavailable d,
invtrline t
where t.batchid = :pBatchId and t.whitemid = d.id and  d.oh <  0  )
rollback tran
else
commit tran
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468034
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mazzy iscrafmв базу можно записать все что угодно, но запись в регистры...
Можно спросить в целях повышения образованности?
Чем отличается запись в базу от записи в регистры?
Можно конечно :) Как пример цепочка Entry-Jornal-Ledger, Вам знакомая. Строить отчеты по сохраненным документам гиблое дело. А запись в Ledger требует процедуры учета, в которой проверяется целостность. Не все данные сохраненные в БД являются актуальными и правильными...
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468059
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmТехнических сложностей не замечено. Упрощенно...
А теперь напишите это для нескольких таблиц, которые обновляются в одной транзакции :)

Например, должна ли проверка кредитного лимита учитывать проводимый в данный момент документ? А если должна, то как и когда? И т.п...

iscrafm mazzy iscrafmв базу можно записать все что угодно, но запись в регистры...
Можно спросить в целях повышения образованности?
Чем отличается запись в базу от записи в регистры?
Можно конечно :) Как пример цепочка Entry-Jornal-Ledger,...
:)
Разве это не таблицы?
Почему вы хоите логически выделить термин регистры?
Еще раз, Чем отличается запись в базу от записи в регистры?
Вообще говоря, запись в базу данных и логическая целостность...
Ладно, в сторону уходим...
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468084
практик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mazzy2. Технически - дописыванием проверки при записи (validate write). Технических сложностей в этом вопросе много.

Возможных противоречий - просто миллион. И все описывать в SP? И даже если описать, то как потом это развивать? А если не описать, то у работающей системы с завидной регулярностью будут появляться всякие непредсказуемые баги. Есть ли вообще теория создания непротиворечивых наборов данных?
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468086
практик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafmТехнических сложностей не замечено. Упрощенно, примерно так. Сначала делаете результирующие действия, потом проверяете целостность и если ее нет - отменяете транзакцию.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin tran
-- учет записей документа
update invtrbatch set st= 1  where id = :pBatchId

if @@ERROR <>  0  or exists (
-- проверка отрицательных остатков на карточках, с которых выполняется списание
select d.itemid
from vwhitemsavailable d,
invtrline t
where t.batchid = :pBatchId and t.whitemid = d.id and  d.oh <  0  )
rollback tran
else
commit tran


Ничего себе технических сложностей не замечено!! Попробуйте-ка таким способом предотвратить ВСЕ ВОЗМОЖНЫЕ противоречия в данных даже для некрупной компании.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468092
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MazzyА теперь напишите это для нескольких таблиц, которые обновляются в одной транзакции

Разве это принципиально что-то меняет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
begin tran
-- оприходование
insert into whitems (
id,
itemid,
qty,
pdate,
sertnum,
sertdue,
rdate,
whid,
...
)
select
newid(),
d.itemid,
d.qty,
s.pdate,
d.sertnum,
d.sertdue,
d.rdate,
s.batchto,
...
from invtrline d
inner join invtrbatch s on s.id = d.batchid
inner join inventory t on t.id = d.itemid
where d.batchid = :pBatchId
-- учет записей документа
update invtrbatch set st= 1  where id = :pBatchId

if @@ERROR <>  0  or exists (
-- проверка отрицательных остатков на карточках, с которых выполняется списание
select d.itemid
from vwhitemsonhand d,
invtrline t
where t.batchid = :pBatchId and t.whitemid = d.id and  d.oh <  0  )
rollback tran
else
commit tran

mazzyНапример, должна ли проверка кредитного лимита учитывать проводимый в данный момент документ? А если должна, то как и когда? И т.п...
Зависит от политики работы с клиентами. Встречалось и так и так. В любом случае проверяется процедурой учета. Как? Делается запись в карточку клиента, если кредитный лимит в результате записи получается превышенным - делается откат. Принцип работы известен по интернет-формам. Попробуйте в форме регистрации не заполнить обязательные поля и нажать Submit. Вернетесь назад и не сможете выполнить последующие действия. Проверка на клиенте мало что дает.

mazzyРазве это не таблицы?
Почему вы хоите логически выделить термин регистры?
Конечно, это обычные таблицы. Отличие в том, что в них запрещена прямая запись, путем ввода данных через формы. Отчеты формируются на основании записей, сделанных в такие таблицы. Вся логика заложена в таких таблицах. Очень удобно расширять систему, подключая новые формы и дополнительные процедуры учета, не изменяя при этом отчетность и общую логику. Назвать можно как угодно, регистры - не принципиально.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468097
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть ли вообще теория создания непротиворечивых наборов данных?Вряд ли.. Точнее вряд ли существует к-л "особая теория", выходящая за рамки теории построения РСУБД.
Вопрос (не)противоречивости решается в каждом случае индивидуально в т.ч. где распологать логику "на клиенте" или "на сервере".
ТУТ НЕ СУЩЕСТВУЕТ ЗОЛОТОЙ СЕРЕДИНЫ. ВСЁ ОПРЕДЕЛЯЕТСЯ ЦЕЛЛЕСООБРАЗНОСТЬЮ ВЫПОЛНЕНИЯ той или иной проверки. Особенно если учесть, что кроме общей логики могут присутствовать "особые полномочия" некоторых пользователей (разрешать действие/учёт только при наличии набора прав).
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468112
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
практикПопробуйте-ка таким способом предотвратить ВСЕ ВОЗМОЖНЫЕ противоречия в данных даже для некрупной компании
А Вы не пытайтесь устранить сразу все возможные противоречия. Разбейте систему до элементарных наборов данных и поработайте с каждым. Допустим, тот же журнал движения товара. Сколько наберете условий, для выполнения в него записи об отгрузке? Два известны: в результате не должно быть красных остатков, кредитный лимит не должен быть превышен. Цена не должна быть меньше установленной минимальной, нельзя "разрывать" упаковку, если для товара установлен флаг - продажа только упаковками, подобранный товар должен быть не просрочен и т.п.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468128
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm
Отличие в том, что в них запрещена прямая запись, путем ввода данных через формы.

1 Минимальный слой кода лежит под кнопкой "Добавить"/"Обновить" всех известных лично мне многопользовательских учетных систем,поправьте указанием источников.
2 Может быть Вы имеете в виду двухфазный ввод через промежуточные(временные) таблицы ? Как при этом выглядит интерфейс со стороны оператора , т.е. кнопок 2 тест и ввод или одна с асинхронной отменой введеного ?
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468133
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
практик mazzy2. Технически - дописыванием проверки при записи (validate write). Технических сложностей в этом вопросе много.

Возможных противоречий - просто миллион. И все описывать в SP? И даже если описать, то как потом это развивать? А если не описать, то у работающей системы с завидной регулярностью будут появляться всякие непредсказуемые баги. Есть ли вообще теория создания непротиворечивых наборов данных?
1. про SP я ничего не говорил. давайте говорить о просто проверке. А уж в SP или не в SP - вопрос технический. Главное - при записи :) Причем обратите внимание, что не уточняется при записи чего.
2. Квантор ВСЕ - опасный квантор. Когда появляется слово ВСе - жди логической ошибки.

3. Насчет теории. Есть теория предикатов. На ее базе основаны базы знаний и экспертные системы. Теория занимается двумя вещами:
3.1. минимальный и ортогональный набор предикатов инвариантный вашему набору условий
3.2. работа с вашим набором, без преобразований к непротиворечивому набору...

В общем, ищите теорию предикатов.
Но
а) эта тема выходит далеко за рамки темы данного форума
б) скорее всего, ваш набор существенно проще. Скорее всего, вы просто не знаете вашу предметную область, если боитесь описать "ВСЕ противоречия". В бизнес-приложениях пока число проверок исчисляется десятками. Вовсе не сотнями и не тысячами. Подумайте о следующем: пока бизнесом управляют люди. И они держат эти проверки в памяти... Да, ошибаются. Да, периодически забывают. Но держат :) iscrafm об этом хорошо сказал.

Вот если бы вы переходили с базы знаний на ERP... тогда да, в базе знаний проверок может быть ОЧЕНЬ много...
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468139
mazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shuhard1 Минимальный слой кода лежит под кнопкой "Добавить"/"Обновить" всех известных лично мне многопользовательских учетных систем,поправьте указанием источников.
Вы забыли про Удалить :)

Теоретически еще может быть Реплицировать.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468141
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в дополнение mazzy мне случилось построить сложную очистку стат.отчетности на основе теории конечных автоматов , писал свой макропроцессор и язычок.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468146
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mazzyВы забыли про Удалить :)

т.е. сторнировать - забыл , виноват.
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468174
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shuhard1 Минимальный слой кода лежит под кнопкой "Добавить"/"Обновить" всех известных лично мне многопользовательских учетных систем,поправьте указанием источников.
2 Может быть Вы имеете в виду двухфазный ввод через промежуточные(временные) таблицы ? Как при этом выглядит интерфейс со стороны оператора , т.е. кнопок 2 тест и ввод или одна с асинхронной отменой введеного ?
1. У всех по разному
Nav: Сохранение и учет - разные по сути веши. Учет вынесен на отдельную кнопку. Документ можно сохранить, учесть в любой момент.
Ax: тот же постинг
SBO: противоречивые данные нельзя даже сохранить. По кнопке Добавить сразу выполняется проверка. Т.е. пойти на перекур, предварительно не сохранив правильный документ нельзя, по крайней мере у меня не получилось.
ISCRA: Примерно как в Navision, только кнопка меняет свое назначение с Учет на Отмена учета и обратно. Выполняется вызов назначенных процедур. Править учтенные записи так же, нельзя.

2. Не всегда. Когда это выгодно. Часто - изменение статуса и формирование связанной цепочки. Отмена - обратные действия. Про кнопки в п.1
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468184
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s.
Варианты:
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468203
практик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSVОсобенно если учесть, что кроме общей логики могут присутствовать "особые полномочия" некоторых пользователей (разрешать действие/учёт только при наличии набора прав).

Не понял. Разные логики для разных пользователей?
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468227
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm
SBO: противоречивые данные нельзя даже сохранить. По кнопке Добавить сразу выполняется проверка. Т.е. пойти на перекур, предварительно не сохранив правильный документ нельзя, по крайней мере у меня не получилось.

Черновик - любые данные , вплоть до дат вперед
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468232
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm
1. У всех по разному
Nav: Сохранение и учет - разные по сути веши. Учет вынесен на отдельную кнопку. Документ можно сохранить, учесть в любой момент.
Ax: тот же постинг
ISCRA: Примерно как в Navision, только кнопка меняет свое назначение с Учет на Отмена учета и обратно. Выполняется вызов назначенных процедур. Править учтенные записи так же, нельзя.

и в 1С8.0 отдельные галки для разных учетов, речь шла о прямом вводе в таблицы , во всех приведенных системах сидят обработчики
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468235
Ц4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ц4
Гость
практик LSVОсобенно если учесть, что кроме общей логики могут присутствовать "особые полномочия" некоторых пользователей (разрешать действие/учёт только при наличии набора прав).

Не понял. Разные логики для разных пользователей?

Нет, это просто логика такая :)
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468238
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за подсказку
...
Рейтинг: 0 / 0
Непротиворечивость данных
    #33468270
практик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm Разбейте систему до элементарных наборов данных и поработайте с каждым.

Не окажется так, что не удастся выделить достаточно независимые наборы? Та же отгрузка товаров клиентам управляется правилами а)продаж б)логистики. А в правила логистики управляют и закупками и ...

iscrafm в результате не должно быть красных остатков, кредитный лимит не должен быть превышен.

Например: как может быть получен "красный" остаток?
- Отгрузить количество больше, чем есть на остатке
- Отгрузить количество меньше, чем есть на остатке, и поменять даты:
а) приходной накладной, по которой пришел отгружаемый товар
б) расходной накладной, по которой товар отгрузился
так, чтобы "красный" остаток возник на некоторый диапазон дат.
- Отгрузить задним числом такое количество, которое меньше остатка на прошлую дату, но которое приведет к "красному" остатку в последующие даты с учетом уже совершенных отгрузок. Пример. Есть: а) 01.01.2006 приход 10 шт. б) 05.01.2006 отгрузка 6 шт. Вводим: 03.01.2006 отгрузка 8 шт.
Что каждый раз при вводе задним числом рассчитывать "разрешенное количество"? А если есть отгрузки введенные будущими датами, постоянно рассчитывать "разрешенное количество"?
- Удалить (отменить, сторнировать) приходный документ
- Поменять у приходного документа "склад поступления".
- Поиграться с единицами измерения товара (не знаю как в разных системах, а в стандартном 1С Предприятии 7.7 точно можно, я пробовал)
Уф..
Про кредитный лимит примерно то же самое.
Запрещать редактировать вышеперечисленное (хотел написать ВСЕ, но вспомнил mazzy ;-)))? Системой становится тяжело пользоваться.

mazzyВ бизнес-приложениях пока число проверок исчисляется десятками. Вовсе не сотнями и не тысячами.

Без кредитного лимита, при рассмотрении исключительно отгрузки товара, уже набралось 7 точек контроля непротиворечивости. Причем каждая такая точка может контролировать далеко не только движения товара, чего только стоит контроль ввода/редактирования даты, склада ...
Это мы пока не коснулись продаж в целом...
маркетинга в целом ...
закупок, финансов, персонала ...
не говоря уже о производстве .... Вообще не вспоминали о планировании, где есть свои жесткие правила, в разных планах (или бюджетах) разные... Не вспоминали о справочниках, а в них также могут быть внесены противоречивые данные (не только единицы измерения у товара, например клиенту не назначен менеджер или назначен уволенный человек)
Короче, мое мнение - только в продажах таких точек контроля сотни (это если делать по взрослому).
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Непротиворечивость данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]