Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2012, 22:09   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

По-моему здесь речь идет о номере документа, который будет фигурировать например в приходном или расходном складском ордере. И скорее всего приход и расход в одной таблице, а нумерация разная в зависимости от типа документа. Т.е. номер навряд ли автоинкриментный счетчик. В качестве составного уникального индекса, если не ключевого, так альтернативного он может фигурировать. Авто-формированиия нет, все равно его нужно каким то образом вычислить и попытаться избежать возникновения дырок хотя бы при вставке. Или все не так?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.09.2012, 22:46   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Аватар, +1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.09.2012, 23:55   #13
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а что мешает сканить это на уровне тригера (before insert\update) в самой БД? ... ловим new.№_документа и ищем такой же ... нашли - выводим сообщение что такое уже есть, не нашли - даём сохранить
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 18.09.2012, 07:21   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И скорее всего приход и расход в одной таблице, а нумерация разная в зависимости от типа документа.
Ну в таком случае я автора поздравляю с граблями.
Цитата:
а что мешает сканить это на уровне тригера
Лишняя нагрузка на СУБД, и потом, если один юзер ввел номер, и второй ввел такой же номер, вторая транзакция (допустим в ней уже вбито 100 документов) глюканет и откатит не один, который пересекается с первым юзером а все 100 документов. Какой же манагер станет наново их перевводить?
I'm learning to live...

Последний раз редактировалось Stilet; 18.09.2012 в 07:25.
Stilet вне форума Ответить с цитированием
Старый 18.09.2012, 08:38   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Stilet, таких граблей с нумерацией документов в реальных задачах бухгалтерского документооборота на предприятии конь не валялся. Всем хочется автоматического формирования, фигурирования номера уже в начале создания документа, который не факт, что будет записан в базу, требования к уникальности самые разнообразные. И все вопят по поводу дырок, которые сами же наделали, удалив ранее введенные документы. Триггер - вполне нормальное решение, но не для отфутболивания, а для корректной генерации номера документа. По поводу отката сотни документов - это претензии к программисту, не зачем такие транзакции делать, куча причин по которым rollback может произойти.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.09.2012, 09:41   #16
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Универсальное давно придуманное (до изобретения компьютеров) решение ЖУРНАЛ учета документов.
в документе предусматриваем функцию получить номер.
Она выполняет генерацию рег. номера документооборота.
при создании нового док-та ф-я естественно не вызывается.
Ее можно вызвать пользователь в любой момент формирования документа (хоть в самом начале с "пустым" документом).
при этом в БД должно быть сохранено текущее состояние документа.
Но можно сохранить документ и без рег. номера (нечто вроде черновика документа).
Для рег. номеров документов есть свойство исполнитель автоматически заполняемое при генерации номера.(что бы знать кому давать по шапке за лишние номера).
при исключении документа с рег. номером фиксируется исполнитель удаливший такой-то номер (чтобы знать кому дать по шапке за исключение номера).

можно даже отдельную таблицу рег. номеров. а документы имеют ссылку на оную.
рег. номер; кто завел документ; когда; кто исключил документ; когда;
И никаких удалений из данной таблицы.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 18.09.2012, 20:11   #17
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
По-моему здесь речь идет о номере документа, который будет фигурировать например в приходном или расходном складском ордере. И скорее всего приход и расход в одной таблице, а нумерация разная в зависимости от типа документа. Т.е. номер навряд ли автоинкриментный счетчик. В качестве составного уникального индекса, если не ключевого, так альтернативного он может фигурировать. Авто-формированиия нет, все равно его нужно каким то образом вычислить и попытаться избежать возникновения дырок хотя бы при вставке. Или все не так?
Именно так и есть. Вы все правильно поняли.

evg_m, номер документа необходим изначально. Т.е. как только открылась форма документа, номер уже должен быть присвоен. Это важный момент. Так как пользователь может не сохраняя сам документ в базе вывести его на печать. Так что номер нужен обязательно.
Водку мы пьем для запаха - а дури нам своей хватает!

Последний раз редактировалось Stilet; 18.09.2012 в 21:01.
Vit@L вне форума Ответить с цитированием
Старый 18.09.2012, 20:29   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Да и я хочу сделать так, чтобы при попытке открыть документ, который заблокирован другим пользователем, выдавалось сообщение, что документ заблокирован таким-то пользователем. Т.е. будет известно, кому потом по шапке надавать :-)
Вариант, конечно, не идеален, но для моего случая - самый подходящий.
Vit@L, за такую реализацию не знаю как пользователям, но вам точно по шапке надают.

ADD Ди печатать разрешить можно только после сохранения документа в базу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.09.2012 в 20:39.
Аватар вне форума Ответить с цитированием
Старый 18.09.2012, 20:56   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
печатать разрешить можно только после сохранения документа в базу
категорически и безусловно согласен - никакой печати ДО сохранения документа. Иначе распечатают документ с номером XX, выйдут без сохранения, другой зайдёт, создаст документ с номером XX (да, да, тем же самым) и вы потом клиенту, абоненту, начальнику, гендиру, бухгалтеру, прокуратуре (в зависимости от того, что за документ) будете расказывать, почему распечатан один документ, а в базе с таким же номером - другой!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.09.2012, 22:04   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
можно даже отдельную таблицу рег. номеров. а документы имеют ссылку на оную.
рег. номер; кто завел документ; когда; кто исключил документ; когда;
И никаких удалений из данной таблицы.
Цитата:
Так как пользователь может не сохраняя сам документ в базе вывести его на печать. Так что номер нужен обязательно.
Никаких проблем. Отключаем сохранение при получении номера.

создал документ, получил номер, распечатал, закрыл не сохраняя.

И начальникам и проверяющим доказывать будут те:
кто завел документ ;
кто исключил документ.(или забыл сохранить).
А также автор программы почему разрешено получение номеров на несуществующие документы.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как упорядочить нумерацию в списке caute Microsoft Office Word 4 17.03.2012 08:13
Процедура поиска - необходимо организовать поиск по маске *.txt в папке Test GvR Общие вопросы Delphi 3 04.11.2009 15:31
необходимо сделать несколько документов: акт, счет и т.п. Kisunya2104 Microsoft Office Excel 5 17.05.2009 18:35
нумерацию кнопок на клаве BuT@JL Помощь студентам 4 27.11.2008 22:08