Re: Обработка исключений

Здравствуйте, уважаемые!
Есть вот такой кусок кода:

    // GUID представляет собой вот такую строчку 2c0ded82-2d48-11dd-90b1-001708508aba
    if not BalanceDocs.Locate['NUMBER', GUID, 0] then
    begin
      DocDate:= StrToDate(Copy(ADODataSet.Fields[3].AsString, 0, 10));
      i:= BalanceDocs.AddBalanceDocument['', DocDate,
        ADODataSet.Fields[2].AsString, ADODataSet.Fields[10].AsString,
        DocType, CehID, -1, 0, '', -1];
      BalanceDocs.DateStart:= DocDate - 1;
      BalanceDocs.DateEnd:= DocDate + 1;
      BalanceDocs.Refresh;
      if BalanceDocs.Locate['ID', i, 0] then
      begin
        BalanceDocs.Edit;
        BalanceDocs.Properties['NUMBER'].AsString:= GUID;
        try
          BalanceDocs.SaveChanges;
        except
          BalanceDocs.CancelChanges;
        end;
      end;
    end;

Этот кусок взят из программы импорта учетных документов из dbf файла в ТКС (dbf формировался из 1С). В этом куске кода создается учетный документ, если его не существует. Проблема в том, что на одном из GUIDов почему то документ не находится (хотя он существует) и документ создается вновь, но при попытке переименовать его возникает ошибка, ТКС пишет, что документ уже существует и не может переименовать его.
Собственно сам вопрос: как можно обработать эту ошибку и сделать так, чтоб она не выводилась на экран? Блок try...except не помогает. Может это нужно делать как то подругому?

Re: Обработка исключений

1. Версия TechnologiCS?
2. Нужен скриншот ошибки.
3. Строка

if not BalanceDocs.Locate['NUMBER', GUID, 0] then

работает только по тому гриду, который пользователь "видит" перед собой. То есть, при первоначальном создании объекта BalanceDocs могут быть не настроены цеха, даты, типы документов для отображения.

Re: Обработка исключений

Версия ТКС 4.7.1

Сергей Девятериков писал(а):
3. Строка

if not BalanceDocs.Locate['NUMBER', GUID, 0] then

работает только по тому гриду, который пользователь "видит" перед собой. То есть, при первоначальном создании объекта BalanceDocs могут быть не настроены цеха, даты, типы документов для отображения.

Тут все настроено, суть проблемы в том, что ТКС выдает ошибку только на некоторых позициях, а не на всех.
Вот сделал небольшой примерчик, который демонстрирует суть. dbf файл нужно положить в C:\Temp. Первый проход программы выполняется корректно, все документы создаются, при повторном выполнении, по идее, все документы должны пропускаться т.к. уже существуют, но почему то на GUID=9ee14422-2bb0-11dd-90b1-001708508aba, ТКС не находит документа с таким номером, но при редактировании номера он ругается.

Re: Обработка исключений

перед Locate добавьте BalanceDocs.First

Ну и проверяется работа проги так: вставляете строчку до и после Locate, и поймете как работает

res = BalanceDocs.ShowModal("Отладка")

Re: Обработка исключений

Исправил ошибки, сейчас все работает, спасибо за ответы.

Re: Обработка исключений

А вообще можно как то обрабатывать исключения? Чтоб, например, если документ с таким номером уже существует, то выводилась бы не ошибка:

SQL Server Error: The statement has been terminated. Cannot insert duplicate key row in object 'BL_DOCS' with unique index 'BL_DOCS_NAME_IDX1'.

А что то более userfriendly?

Re: Обработка исключений

AlexB писал(а):
А что то более userfriendly?

Сами используете смешанный русскоанглийский, а от нас хотите чтобы все по русски?

Re: Обработка исключений

:D ну Вы же меня поняли...
З.Ы.: userfriendly - дружественный к пользователю.