1. Запустить TSAdmin.exe
2. В дереве сервисов найти сервис таблицы Счета (tbl_Invoice), открыть (\Invoices\General\Main Grid\tbl_Invoice).
3. В Indexes, с помощью контекстного меню добавить индекс, указать ему название, как показано на скриншоте ниже.
4. Установите для поля галочку «Уникальное»
5. Затем добавьте индексное поле
6. И свяжите его с номером счета:
7. Сохраните таблицу:
В результате при дублировании номера счета программа будет уведомлять оператора:
и запрещать сохранять запись:
Согласен с Алёной. Такая ошибка слишком жестка для пользователя.
Выходом может быть автоматическое формирования уникального поля и закрытие его редактирования пользователем.
Как вариант, можно в 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:
В любом случае, реализация Максима лучше, поэтому рекомендую использовать ее.