Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Перехватить сообщение платформы "Номер не уникальный"

v7: Перехватить сообщение платформы "Номер не уникальный"
Я
   GrayS19
 
14.01.21 - 10:27
Чем можно перехватить событие, которое платформа генерит при попытке записи документа с неуникальным номером (когда рисуется окошко "Номер не уникальный") ?

Попробовал в самом документе принудительно
Попытка
  Записать();
Исключение
- не генерит Исключение.

Почитал ветку про Класс.Перехватчик - но как я понял, как раз Записать() не перехватывается. Есть ещё какие-то варианты ?
 
 Партнерская программа EFSOL Oblako
   trdm
 
1 - 14.01.21 - 10:28
Обратиться к АЛьФу.
   trdm
 
2 - 14.01.21 - 10:36
Да, платформе не хватает события "ПриВозникновенииОшибки" :)
   Волшебник
 
3 - 14.01.21 - 10:50
Можно перед записью сделать поиск другого документа по этому номеру.
   Mikeware
 
4 - 14.01.21 - 10:52
а разве ОписаниеОшибки после этого не заполнено?
вроде отлавливал как-то эту ошибку, "но это неточно"©
   GrayS19
 
5 - 14.01.21 - 10:53
(1) АЛьФ решил FormEx доработать, там интересно. Либо обработка ошибки уж очень глубоко в платформе и её не перехватить.
(3) да, спасибо, похоже ничего лучше не придумать
   NorthWind
 
6 - 14.01.21 - 11:00
(0) Лет 10 назад отлавливал эту ошибку. Насколько я помню, исключение работало, и ОписаниеОшибки () содержало текст "Номер не уникальный", что и позволяло отловить данный конкретный случай. Не помню каких-то существенных проблем.
   NorthWind
 
7 - 14.01.21 - 11:01
все было сделано стандартными механизмами, FormEx не использовался. Платформа 7.7.027.
   Arbuz
 
8 - 14.01.21 - 15:33
Странно.
Исключения нет. ОписаниеОшибки() пустое.
только Записать()=0
неясно как при этом отлавливать, что именно - "Номер не уникальный" - не перебирая номера
27, dbf, 1cpp, formex, + так-то у меня ещё 1spy Орефкова - я могу отлавливать сообщения и месседжбоксы.
   GrayS19
 
9 - 14.01.21 - 15:36
(7) В каком месте кода удавалось получить ОписаниеОшибки() ?  Процедура ПриЗаписи() отрабатывает без ошибок, поставил на форму как функцию, которая возвращает текст - пусто.
   GrayS19
 
10 - 14.01.21 - 15:48
(8) и если в коде поставить 
Если Записать() = 0 Тогда
   Сообщить("Не записалось");
КонецЕсли;
то сначала получаем окно предупреждения платформы "Номер не уникальный", а потом уж отрабатывает сообщение.
   alyuev
 
11 - 14.01.21 - 16:06
Исключение работает при записи. Описание сохраняю в переменную, типа ОписьОшибки=ОписаниеОшибки() и дальше в ней проверяю в том числе "Number is not unique" или "Номер не уникальный" и пр.
   trad
 
12 - 14.01.21 - 16:32
Док = СоздатьОбъект("Документ");
НомерНеУникальный = Док.НайтиПоНомеру(НомерДок, ДатаДок, Вид());
Если НомерНеУникальный = 0 Тогда
  Записать();
Иначе
  Сообщить("Номер не уникальный");
  //УстановитьНовыйНомер(); // при желании

КонецЕсли;
   МихаилМ
 
13 - 14.01.21 - 16:41
была вк для 1с77, которая все сообщения перехватывала. как завется - не помню.
но  не vkhook
   Arbuz
 
14 - 14.01.21 - 16:49
(13) я ж указал в (8) "Шпион 1С" Орефкова 1spy.dll
   NorthWind
 
15 - 14.01.21 - 19:25
(9)
//------------------------------------------------------------------------------

// Запись документа, даже несмотря на ошибку "Номер не уникальный" 
//

Функция ЗаписатьДокБезопасно (Док)
    
    Завершение = 0;                  
    Результат = 1; 
    
    Пока Завершение = 0 Цикл
        Попытка
            Док.Записать ();
            ЛоггингССообщением (ОписаниеДокумента (Док.ТекущийДокумент ()), "записан.");
            Завершение = 1;                                                                             
        Исключение             
            Описание = "Номер не уникальный";
            Ошибка = ОписаниеОшибки ();
            Если Лев (Ошибка, СтрДлина (Описание)) = Описание Тогда
                Завершение = 0;
                Док.НомерДок = Инкремент (Док.НомерДок);
                ЛоггингССообщением ("Сбой нумератора при записи", Док.Вид (), " - будет предпринята попытка с номером ", Док.НомерДок);
            Иначе 
                Завершение = 1;
                Результат = 0;
                ЛоггингССообщением ("Необработанная ошибка при записи документа", ОписаниеДокумента (Док), "-", Ошибка);
            КонецЕсли;            
        КонецПопытки; 
    КонецЦикла;       
    
    Возврат Результат;    
    
КонецФункции
   Злопчинский
 
16 - 15.01.21 - 06:37
(15) это программная запись программного объекта.
а ты вот отлови ошибку записи интерактивно открытой формы в самой этой форме.
   NorthWind
 
17 - 15.01.21 - 08:28
(16) ясно, неверно понял чего (0) хочет. Нет, такое не делал.
   Mikeware
 
18 - 15.01.21 - 08:46
(16) ну так на кнопку - назначь функцию, и в ней записывай.
Если это не поможет...©Задорнов, тогда
в этой функции создавай док программно, копируй в него содержимое текущего незаписанного, и записывай как (15)
   NorthWind
 
19 - 15.01.21 - 09:23
(18) ну это танцевать не всегда будет. Юзак может "крестиком" окно закрыть, прога спросит - записать, не надо?
   Ёпрст
 
20 - 15.01.21 - 09:26
Дык, в (12) ответ жешь..самое простое и быстро отработает
   Ёпрст
 
21 - 15.01.21 - 09:27
Эту хрень в ПриЗаписи и привет, тока Записать() там лишнее, и статусвозврата(0) в исключение воткнуть..и усе
   Mikeware
 
22 - 15.01.21 - 09:30
(19) ну, можно запретить закрывть крестиком. На хитрую оппу...
   GrayS19
 
23 - 15.01.21 - 11:57
Спасибо всем, особенно (12),(21).
   Arbuz
 
24 - 15.01.21 - 16:00
(19) (22) Можно же отлавливать ПриЗаписи() и городить тот огород
(20) Интересно, а кроме "Номер не уникальный" может ещё что так же запись обламывать?


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.