Как сделать поле уникальным

1. Запустить TSAdmin.exe

2. В дереве сервисов найти сервис таблицы Счета (tbl_Invoice), открыть (\Invoices\General\Main Grid\tbl_Invoice).
3. В Indexes, с помощью контекстного меню добавить индекс, указать ему название, как показано на скриншоте ниже.

4. Установите для поля галочку «Уникальное»

5. Затем добавьте индексное поле

6. И свяжите его с номером счета:

7. Сохраните таблицу:

В результате при дублировании номера счета программа будет уведомлять оператора:

и запрещать сохранять запись:

Нравится

Поделиться

4 комментария

Анна, сообщения об ошибке нервируют пользователей. Я бы даже сказала "пугает".
Нельзя ли как-то сделать это предупреждением?

Согласен с Алёной. Такая ошибка слишком жестка для пользователя.
Выходом может быть автоматическое формирования уникального поля и закрытие его редактирования пользователем.

Как вариант, можно в scr_BaseDBEditUtils в функции SaveChangesWithCheck отлавливать сообщение об ошибке и анализировать его (благо имя индекса уникально):

...
catch (e) {
		var Message = e.message;
		if (Message.indexOf('IInvoiceNumber') != -1) {
			Message = "Номер не уникальный!"+'\n'+
				"невозможно сохранить запись";
			System.MessageDialog(Message, mdtInformation, mdbOK, 0);
		} else {
			System.MessageDialog(Message, mdtError, mdbOK, 0);
		}
		Result = false;
	}
...

Здорово :) Пока я думала над решением, Максим меня опередил :)

В принципе, хотела предложить то же самое:

в скрипте scr_BaseDBEditUtils в функции function SaveChangesWithCheck в блоке catch добавить проверку:

if (e.number == -2147418113){
			MessageBox("Невозможно сохранить счет, так как счет с таким номером уже существует! Введите другой номер.");
			Result = false;
		} else

Скрипт в итоге будет выглядеть так:

А программа будет выдавать то сообщение, которое Вы введете в MessageBox:

В любом случае, реализация Максима лучше, поэтому рекомендую использовать ее.

Показать все комментарии