|   |   | 
| 
 | 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) Интересно, а кроме "Номер не уникальный" может ещё что так же запись обламывать? | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |