![]() |
|
Проверка уникальности номера в расширении | ☑ | ||
---|---|---|---|---|
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) и имеет смысл. Дать возможность пользователю насоздавать кучу непроведенных или помеченных на удаление документов с одинаковым номером. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |