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

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

Почитал ветку про Класс.Перехватчик - но как я понял, как раз Записать() не перехватывается. Есть ещё какие-то варианты ?
1 trdm
 
14.01.21
10:28
Обратиться к АЛьФу.
2 trdm
 
14.01.21
10:36
Да, платформе не хватает события "ПриВозникновенииОшибки" :)
3 Волшебник
 
14.01.21
10:50
Можно перед записью сделать поиск другого документа по этому номеру.
4 Mikeware
 
14.01.21
10:52
а разве ОписаниеОшибки после этого не заполнено?
вроде отлавливал как-то эту ошибку, "но это неточно"©
5 GrayS19
 
14.01.21
10:53
(1) АЛьФ решил FormEx доработать, там интересно. Либо обработка ошибки уж очень глубоко в платформе и её не перехватить.
(3) да, спасибо, похоже ничего лучше не придумать
6 NorthWind
 
14.01.21
11:00
(0) Лет 10 назад отлавливал эту ошибку. Насколько я помню, исключение работало, и ОписаниеОшибки () содержало текст "Номер не уникальный", что и позволяло отловить данный конкретный случай. Не помню каких-то существенных проблем.
7 NorthWind
 
14.01.21
11:01
все было сделано стандартными механизмами, FormEx не использовался. Платформа 7.7.027.
8 Arbuz
 
14.01.21
15:33
Странно.
Исключения нет. ОписаниеОшибки() пустое.
только Записать()=0
неясно как при этом отлавливать, что именно - "Номер не уникальный" - не перебирая номера
27, dbf, 1cpp, formex, + так-то у меня ещё 1spy Орефкова - я могу отлавливать сообщения и месседжбоксы.
9 GrayS19
 
14.01.21
15:36
(7) В каком месте кода удавалось получить ОписаниеОшибки() ?  Процедура ПриЗаписи() отрабатывает без ошибок, поставил на форму как функцию, которая возвращает текст - пусто.
10 GrayS19
 
14.01.21
15:48
(8) и если в коде поставить
Если Записать() = 0 Тогда
   Сообщить("Не записалось");
КонецЕсли;
то сначала получаем окно предупреждения платформы "Номер не уникальный", а потом уж отрабатывает сообщение.
11 alyuev
 
14.01.21
16:06
Исключение работает при записи. Описание сохраняю в переменную, типа ОписьОшибки=ОписаниеОшибки() и дальше в ней проверяю в том числе "Number is not unique" или "Номер не уникальный" и пр.
12 trad
 
14.01.21
16:32
Док = СоздатьОбъект("Документ");
НомерНеУникальный = Док.НайтиПоНомеру(НомерДок, ДатаДок, Вид());
Если НомерНеУникальный = 0 Тогда
  Записать();
Иначе
  Сообщить("Номер не уникальный");
  //УстановитьНовыйНомер(); // при желании
КонецЕсли;
13 МихаилМ
 
14.01.21
16:41
была вк для 1с77, которая все сообщения перехватывала. как завется - не помню.
но  не vkhook
14 Arbuz
 
14.01.21
16:49
(13) я ж указал в (8) "Шпион 1С" Орефкова 1spy.dll
15 NorthWind
 
14.01.21
19:25
(9)
//------------------------------------------------------------------------------
// Запись документа, даже несмотря на ошибку "Номер не уникальный"
//
Функция ЗаписатьДокБезопасно (Док)
    
    Завершение = 0;                  
    Результат = 1;
    
    Пока Завершение = 0 Цикл
        Попытка
            Док.Записать ();
            ЛоггингССообщением (ОписаниеДокумента (Док.ТекущийДокумент ()), "записан.");
            Завершение = 1;                                                                            
        Исключение            
            Описание = "Номер не уникальный";
            Ошибка = ОписаниеОшибки ();
            Если Лев (Ошибка, СтрДлина (Описание)) = Описание Тогда
                Завершение = 0;
                Док.НомерДок = Инкремент (Док.НомерДок);
                ЛоггингССообщением ("Сбой нумератора при записи", Док.Вид (), " - будет предпринята попытка с номером ", Док.НомерДок);
            Иначе
                Завершение = 1;
                Результат = 0;
                ЛоггингССообщением ("Необработанная ошибка при записи документа", ОписаниеДокумента (Док), "-", Ошибка);
            КонецЕсли;            
        КонецПопытки;
    КонецЦикла;      
    
    Возврат Результат;    
    
КонецФункции
16 Злопчинский
 
15.01.21
06:37
(15) это программная запись программного объекта.
а ты вот отлови ошибку записи интерактивно открытой формы в самой этой форме.
17 NorthWind
 
15.01.21
08:28
(16) ясно, неверно понял чего (0) хочет. Нет, такое не делал.
18 Mikeware
 
15.01.21
08:46
(16) ну так на кнопку - назначь функцию, и в ней записывай.
Если это не поможет...©Задорнов, тогда
в этой функции создавай док программно, копируй в него содержимое текущего незаписанного, и записывай как (15)
19 NorthWind
 
15.01.21
09:23
(18) ну это танцевать не всегда будет. Юзак может "крестиком" окно закрыть, прога спросит - записать, не надо?
20 Ёпрст
 
15.01.21
09:26
Дык, в (12) ответ жешь..самое простое и быстро отработает
21 Ёпрст
 
15.01.21
09:27
Эту хрень в ПриЗаписи и привет, тока Записать() там лишнее, и статусвозврата(0) в исключение воткнуть..и усе
22 Mikeware
 
15.01.21
09:30
(19) ну, можно запретить закрывть крестиком. На хитрую оппу...
23 GrayS19
 
15.01.21
11:57
Спасибо всем, особенно (12),(21).
24 Arbuz
 
15.01.21
16:00
(19) (22) Можно же отлавливать ПриЗаписи() и городить тот огород
(20) Интересно, а кроме "Номер не уникальный" может ещё что так же запись обламывать?