Как предотвратить создание новой записи в MS Access 2010 до того, как текущая запись будет правильно сохранена в таблице - PullRequest
0 голосов
/ 20 января 2020

Ситуация

Я создал базу данных для выставления счетов и подобных документов. Как мы знаем, эти документы должны быть пронумерованы постепенно и однозначно без пропущенного номера из одного счета-фактуры (или другого документа) и следующего.

По этой причине я добавил поле автоматического номера в таблицу, которая является номером накладной или другого документа.

Как мы знаем, MS Access создает еще одну новую запись как раз в тот момент, когда что-то вставляется / редактируется в текущую / новую запись. Таким образом, существует новая запись, независимо от того, что сразу после того, как пользователь начал редактировать прежнюю новую запись.

Так что, если пользователь БД начинает редактировать новый счет-фактуру (или любую другую команду c), просто для выполнения упражнения или практики без желания сохранить и распечатать его, а просто выйти из записи с помощью клавиши Es c, когда он совершает ошибки или сталкивается с проблемами, которые еще не могут быть решены, номер документа теряется и остается пробел в нумерации, что не может быть восстановлено в следующей новой записи, независимо от того, что.

Проблема, которую необходимо решить

Как настроить MS Access для создания новой записи не тогда, когда предыдущая новая новая запись только что отредактирована, а когда сохраняется пользователем? Таким образом, пропущенная нумерация в полях автонумерации будет предотвращена. Другими словами, как мне заполнить поле автонумерации только тогда, когда запись «официально сохранена», а не в тот момент, когда я начинаю редактировать новую запись?

Заранее спасибо.

1 Ответ

1 голос
/ 21 января 2020

автономные номера предназначены только для внутреннего использования (это означает, что вы разработчик приложения). Например, когда вы загружаете документ Word, ОС выдает местоположение сегмента памяти - вам, как пользователю слова, все равно.

То же самое относится и к автономным номерам. Они предназначены для разработчиков, чтобы создавать отношения между таблицами. они НЕ МОГУТ использоваться для таких вещей, как номера счетов и т. д. c.

Даже если вы перейдете к новой записи, начните печатать, запись еще не сохранена. Тем не менее, новый номер будет выдан. Если пользователь нажимает клавишу ES C или edit-> un, чтобы НЕ сохранять запись, то автоматический номер не будет сохранен - ​​но теперь у вас есть пробел в автомобильных номерах. Таким образом, если пользователь решает не сохранять запись, но начинает вводить эту запись, выдается (и используется) автоматический номер. Однако, если вы не сохраните эту запись, и пользователь решит не добавлять (сохранить) запись, вы обнаружите пробел.

В результате попытка использовать авто нецелесообразна. номера таким образом. Вы найдете то же самое для Oracle, SQL сервера и подавляющего большинства систем баз данных. Простая и суть в том, что такие цифры для вас разработчик, чтобы создать и настроить отношения. У них НОЛЬ имеет отношение к таким вещам, как номера счетов и т. Д. c.

Автоматические номера предназначены для отношений. Тот факт, что вы хотите, чтобы клиенты сообщали счета-фактуры, имеет НОЛЬ и НИЧЕГО не имеет отношения к тому, что у вас есть номер счета или нет. Почему целое приложение ломается и ваши отношения перестают работать, потому что у вас нет глупого номера счета? Номер счета-фактуры имеет НУЛЕВОЙ НУЛЬ, который связан с внутренним автоматическим номером. Вы могли бы сделать номера счетов необходимыми, но с другой стороны, я работал с некоторыми системами в том, что информация счета вводится, и до тех пор, пока счет не будет утвержден или фактически отправлен, номер счета будет пустым до тех пор, пока он не будет утвержден или отправлен вне. Независимо от некоторых бизнес-правил, и даже если требуется номер счета-фактуры, он не имеет ничего общего с автоматическими номерами и установленными отношениями. Такие отношения будут работать с номером счета или без него.

Ответ таков: вы не можете и не должны использовать автоматические номера в Access для внешнего значения. Просто не существует практического способа контролировать следующий номер, а также контролировать пропуски. Хуже того, маловероятно, что такие номера счетов-фактур начнутся с 1. И многие компании используют систему, в которой каждый счет-фактура, отправляемый данному клиенту, НЕ пользуется, например, количеством счетов, выставленных с момента последнего (это может привести к раздаче). ценная информация для ваших клиентов).

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

Итак, я думаю, что это требование - нечто большее, чем просто число, начинающееся с 1, затем 2, затем 3 и c , И вы ОЧЕНЬ хотите, чтобы в вашем приложении была возможность установить следующий или начальный номер счета-фактуры.

Существует так много способов сделать это, как и вкусы мороженого. Однако типичным и распространенным подходом является настройка небольшой таблицы.

Итак, создайте таблицу с именем tblNextInvoice.

Она будет выглядеть следующим образом: tblNextInvoice ID: autonumber PK - вам нужен один из них для всех таблиц. NextInvoice: длинное целое число. - это ваша следующая таблица номеров счетов.

В этой таблице будет ОДНА строка. В приведенной выше таблице просто введите в NextInvoice следующий номер счета, с которого нужно начинать номера счетов.

Теперь в событии до обновления вашей формы:

if isnull(me!InvoiceNumber) = True then
   ' about to save record - set the invoice number
    me!InvoiceNumber = GetNextInvoiceNum()
End if

И вам нужно создать функцию publi c (размещенную в стандартном модуле кода, а не в модуле кода форм. Она может выглядеть следующим образом:

Public Function NextInvoice() as long
  Dim myRST As Dao.Recordset
  set myRST = Currentdb.OpenRecordSet("tblNextInvoice")
  NextInovice = myRST!NextInvoiceNum
  myRST.Edit
     myRST!NextInvoiceNum = myRST!NextInoiceNum  + 1
  myRST.Update
  myRST.Close
End Function

Итак, если вы хотите убедиться, что пробелы отсутствуют установить начало, и вы хотите контролировать создание номера счета-фактуры? Тогда вы, как разработчик, должны настроить, создать и разработать свою систему нумерации счетов-фактур. Поскольку система настроена индивидуально, вы можете включить, например, 01152020-00012 типы форматов (таким образом, у этого номера образца есть месяц, дата + порядковый номер. Возможно, вы даже встретитесь с сотрудниками бухгалтерии по вопросам проектирования и разработки относительно того, какого рода формат и даже правительственные нормативы требуются для вашей системы нумерации счетов-фактур. Таким образом, для получения следующего счета-фактуры не нужно ограничиваться просто числом - вы можете включить некоторые строковые значения и изменить эту функцию (и номер счета-фактуры) на столбец типа текста в отличие от просто числового типа столбца.

Например, у меня есть какое-то программное обеспечение для групп добровольцев и некоторых церковных групп - из-за их некоммерческого статуса в настоящее время действуют некоторые правительственные постановления, такие как к формату выставленного счета-фактуры. Это особенно актуально в случае номеров выданных квитанций.

Когда выписаны квитанции, в квитанции должен быть указан не только новый номер квитанции, но и ТАКЖЕ, что выданная квитанция замена для квитанции XXXX должна быть четко обозначена (это необходимо для того, чтобы кто-то не просил 2-го получения пожертвования и не сдавал его дважды для вычета двойного налога. Итак, теперь вам даже не разрешено выдавать квитанцию ​​с одним и тем же номером два раза донору! (они должны показывать новый номер и ТАКЖЕ номер, который он заменяет).

Таким образом, независимо от этих проблем, почти во всех бизнес-системах ВАМ разработчику потребуется полный контроль над тем, как эти числа будут выпущен - и вы не можете оставить этот вопрос на волю случая, а также не можете оставить этот вопрос на авто номера. Эти типы чисел предназначены для бизнес-правил и бизнес-операций - они не имеют ничего общего с использованием автоматических номеров для установки некоторых отношений в базе данных - и отношения на 100% отличаются от понятий бизнес-вещей, таких как номера счетов или номера квитанций и т. Д. c.

...