|   |   | 
| 
 | Проверка уникальности номера в расширении | ☑ | ||
|---|---|---|---|---|
| 0
    
        bfss-732 28.10.21✎ 21:20 | 
        Всем привет!
 Пишу такой код проверки уникальности номера. Но все равно не прерывается код и документ в итоге создается. Что не так делаю? &НаКлиенте Процедура Расш1_НомерПриИзмененииПосле(Элемент) ИзменитьНомер() КонецПроцедуры Процедура ИзменитьНомер(); //Запрос всех номеров в день создания СФ ЗапросПоследнегоНомера = Новый Запрос; ЗапросПоследнегоНомера.Текст = "ВЫБРАТЬ | СчетФактураВыданный.Ссылка КАК Ссылка, | СчетФактураВыданный.ВерсияДанных КАК ВерсияДанных, | СчетФактураВыданный.ПометкаУдаления КАК ПометкаУдаления, | СчетФактураВыданный.Номер КАК Номер, | СчетФактураВыданный.Дата КАК Дата, | СчетФактураВыданный.Проведен КАК Проведен |ИЗ | Документ.СчетФактураВыданный КАК СчетФактураВыданный |ГДЕ | НЕ СчетФактураВыданный.ПометкаУдаления | И СчетФактураВыданный.Проведен | И СчетФактураВыданный.Дата <= &ДатаКон | И СчетФактураВыданный.Дата >= &ДатаНач | |УПОРЯДОЧИТЬ ПО | Номер"; ЗапросПоследнегоНомера.УстановитьПараметр("ДатаКон", КонецДня(Объект.Дата)); ЗапросПоследнегоНомера.УстановитьПараметр("ДатаНач", НачалоДня(Объект.Дата)); РезультатЗапроса = ЗапросПоследнегоНомера.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить(); Для Каждого ЗначениеЭлементаМассива Из ВыборкаДетальныеЗаписи Цикл Если ЗначениеЭлементаМассива.Номер = Объект.Номер Тогда Сообщить("Номер не уникален!"); Отказ = Истина; Возврат; КонецЕсли; КонецЦикла; КонецПроцедуры | |||
| 1
    
        bfss-732 28.10.21✎ 21:21 | 
        Почему полностью не прерывается код?
 Отказ = Истина; Возврат; | |||
| 2
    
        bfss-732 28.10.21✎ 21:24 | 
        В итоге если ЗначениеЭлементаМассива.Номер = Объект.Номер будет ИСТИНА, полностью прервать операцию с сообщением "Номер не уникален!"     | |||
| 3
    
        Homer 28.10.21✎ 23:23 | 
        Отказ работаем там где он прописан. Какое отношение имеет номер к отказу в штатной конфигурации     | |||
| 4
    
        серый КТУЛХУ 29.10.21✎ 01:11 | 
        //а.хре.неть!
 Если ДокПоНомеру <> Неопределено Тогда Если НачДата <= ДокПоНомеру.Дата И ДокПоНомеру.Дата <= КонДата Тогда Отказ = Истина КонецЕсли КонецЕсли; | |||
| 5
    
        серый КТУЛХУ 29.10.21✎ 01:12 | 
        а. и. перед. вотето:
 ДокПоНомеру = Документы.СчетФактураВыданный.НайтиПоНомеру(Объект.Номер,Объект.Дата); | |||
| 6
    
        bfss-732 29.10.21✎ 10:15 | 
        (4) Тут проверка на уникальность номера?     | |||
| 7
    
        Dmitrii гуру 29.10.21✎ 10:24 | 
        Сам код - полное *авно. Но ключевая проблема не в этом.
 С какого перепугу ты решил, что Отказ = Истина должно привести к отмене записи? Как какая-то там переменная "Отказ" в какой-то твоей процедуре связана с событием записи документа? Что такое "Отказ" у тебя? Если ты обрабатываешь событие изменения значения в поле ввода, то должно выводиться сообщение или предупреждение пользователю и поле ввода должно очищаться или возвращаться предыдущее значение. Если ты обрабатываешь событие записи (например, ПередЗаписью), то и пиши код там. Там есть флаг "Отказ". | |||
| 8
    
        Ёпрст гуру 29.10.21✎ 10:25 | 
        (0)
 >>>После | |||
| 9
    
        Dmitrii гуру 29.10.21✎ 10:27 | 
        (6) Сначала (5) потом (4).
 А весь запрос в (0) - полный бред. Если конечно только у тебя не отключен контроль уникальности номеров. Тогда может запрос в (0) и имеет смысл. Дать возможность пользователю насоздавать кучу непроведенных или помеченных на удаление документов с одинаковым номером. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |