|
использование Возврат в процедуре | ☑ | ||
---|---|---|---|---|
0
amadeus2010
24.08.12
✎
08:10
|
Доброе утро подскажите пожалуйста как можно использовать Возврат в процедуре.
///////////////////////////////////////////////////////// Процедура ПроверитьУникальностьКодФилиала(КодФилиала)Экспорт Запрос=Новый Запрос(" |ВЫБРАТЬ |кпкТорговыеТочки.Ссылка | ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Владелец = &Владелец |И кпкТорговыеТочки.КодФилиала = &Код"); Запрос.УстановитьПараметр("Владелец",Владелец); Запрос.УстановитьПараметр("Код",КодФилиала); Результат=Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда Предупреждение("Код Филиала не уникален"); Возврат; //Отказ = Истина; КонецЕсли; КонецПроцедуры ////////////////////////////////////////////////////// мне надо проверить если КодФилиала есть то вывод предупреждения и выход из процедуры. Вызов процедуры я указал в ПриЗаписи(). Сейчас у меня выводится предупреждение и после нажатия ОК Код записывается даже если он есть уже в справочнике |
|||
1
Godofsin
24.08.12
✎
08:15
|
Функция ПроверитьУникальностьКодФилиала(КодФилиала)Экспорт
Запрос=Новый Запрос(" |ВЫБРАТЬ |кпкТорговыеТочки.Ссылка | ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Владелец = &Владелец |И кпкТорговыеТочки.КодФилиала = &Код"); Запрос.УстановитьПараметр("Владелец",Владелец); Запрос.УстановитьПараметр("Код",КодФилиала); Результат=Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда Предупреждение("Код Филиала не уникален"); Возврат Истина; //Отказ = Истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции ПриЗаписи() Если ПроверитьУникальностьКодФилиала(КодФилиала) тогда Отказ = Истина; КонецЕсли; КонецПроцедуры; |
|||
2
RSBIR
24.08.12
✎
08:15
|
Я так думаю проблема в вызове ПРОЦЕДУРЫ, а не ФУНКЦИИ
|
|||
3
andrewks
24.08.12
✎
08:18
|
эх вы, ламеры :)
Процедура ПроверитьУникальностьКодФилиала(КодФилиала,Отказ) Если НЕ Результат.Пустой() Тогда Предупреждение("Код Филиала не уникален"); Отказ = Истина; Возврат; КонецЕсли; |
|||
4
Wobland
24.08.12
✎
08:19
|
(0) >мне надо проверить если КодФилиала есть то вывод предупреждения и выход из процедуры
хорошо. а несли нету кода филиала? |
|||
5
Wobland
24.08.12
✎
08:19
|
хотя, да. по смыслу это функция
|
|||
6
Chai Nic
24.08.12
✎
08:19
|
(1) Функции с названием "ПроверитьЧтототам", возвращающие булевское значение, реально бесят. :)
Что мешает именовать их "ЧтототамТакоеТо"? И не придется делать оговорок типа "истина-не уникален, ложь-уникален" с риском перепутать. В данном случае функция должна называться КодФилиалаУникален() |
|||
7
Godofsin
24.08.12
✎
08:21
|
(6) Я просто его код скопировал, лень было править максимально =)
|
|||
8
amadeus2010
24.08.12
✎
08:21
|
в принципе важно не само название,а сам код внутри процедуры или функции
|
|||
9
andrewks
24.08.12
✎
08:22
|
(6) подразумевается, что функция с именем Проверить/Check, возвращает true, если проверка проведена успешно, и false в противном случае.
так что не надо тут гнать волну |
|||
10
Irbis
24.08.12
✎
08:22
|
Я бы исходил, что любая процедура должна дорабатывать до конца.
|
|||
11
HEKPOH
24.08.12
✎
08:26
|
(6) плюс пиццот! Сам всегда так делаю и не возникает непоняток что же истина, а что ложь)
|
|||
12
amadeus2010
24.08.12
✎
08:32
|
В итоге сделал так как советовали и заработало
/////////////////////////////////////////////////// Процедура ПроверитьУникальностьКодФилиала(КодФилиала,Отказ)Экспорт Запрос=Новый Запрос(" |ВЫБРАТЬ |кпкТорговыеТочки.Ссылка | ИЗ |Справочник.кпкТорговыеТочки КАК кпкТорговыеТочки |ГДЕ |кпкТорговыеТочки.Владелец = &Владелец |И кпкТорговыеТочки.КодФилиала = &Код"); Запрос.УстановитьПараметр("Владелец",Владелец); Запрос.УстановитьПараметр("Код",КодФилиала); Результат=Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда Предупреждение("Код Филиала не уникален"); Отказ=Истина; Возврат; КонецЕсли; КонецПроцедуры Процедура ПриЗаписи(Отказ) ПроверитьУникальностьКодФилиала(КодФилиала,Отказ); КонецПроцедуры /////////////////////////////////////////////////////// всем спасибо, просто я неправильно разместил Отказ и Возврат изначально и плюс потом закоментировал Отказ |
|||
13
Wobland
24.08.12
✎
08:37
|
(12) ПриЗаписи(), надеюсь, в модуле объекта находится?
|
|||
14
Chai Nic
24.08.12
✎
08:39
|
(9) Что такое "проверка проведена успешно"? Что считать успехом, наличие уникальности или неуникальности в данном случае? :)
|
|||
15
andrewks
24.08.12
✎
08:41
|
(14) по-русски читать умеем?
ПроверитьУникальностьКодФилиала уникальность - успех неуникальность - неудача |
|||
16
Chai Nic
24.08.12
✎
08:41
|
(15) Эту вводную нужно отлить в граните, и читать 10 раз в день. Чтобы не забыть))
|
|||
17
andrewks
24.08.12
✎
08:43
|
(16) знаешь анекдот про ГБ-старичка?
|
|||
18
Chai Nic
24.08.12
✎
08:44
|
(17) Ага, дебет слева...
Но на самом деле, функции не следует именовать как процедуры.. |
|||
19
Wobland
24.08.12
✎
08:44
|
(18) пример: НайтиПоНаименованию
|
|||
20
andrewks
24.08.12
✎
08:45
|
(19) позор Нуралиеву! :)
|
|||
21
andrewks
24.08.12
✎
08:46
|
(18) открою страшную тайну: процедур не существует!
|
|||
22
Chai Nic
24.08.12
✎
08:46
|
(19) Это вообще кошмар) Я считал и считаю, что функция должна быть функцией в математическом смысле.. и побочных эффектов у ней быть не должно, как и изменяемых формальных параметров. На это есть процедуры.
ЗЫ Си - переносимый ассемблер, а не ЯВУ :) |
|||
23
Wobland
24.08.12
✎
08:48
|
(22) ты не путай математику с программизмом
|
|||
24
Chai Nic
24.08.12
✎
08:50
|
(23) Вот из-за "непутающих" фобос-грунты и улетают в сторону моря)
|
|||
25
Wobland
24.08.12
✎
08:51
|
(24) подпрограмма и отображение очень одинаковые вещи?
|
|||
26
Chai Nic
24.08.12
✎
08:58
|
(25) Подпрограмма - это оформленная часть программы - конечный автомат, изменяющий состояние системы. А функция это действительно отображение множества входных параметров на множество выходных. В силу математических традиций выходной параметр один (он же возвращаемое значение), но ничто не мешает возвращать структуру(СЗ, ТЗ и т.п.) - язык позволяет.
И путать процедуры и функции не следует. Ну а то, что 1с сама не очень-то продумала свою среду разработки, не означает то, что с неудачных деталей нужно брать пример.. |
|||
27
Wobland
24.08.12
✎
09:03
|
чорт! void main() - это процедура, оказывается. не знал, спасибо
|
|||
28
andrewks
24.08.12
✎
09:04
|
(26) я тебе ещё раз открою страшную тайну: процедура не соответствует этому описанию в ФПВУ, и компилируется как функция с пустым возвращаемым значением
|
|||
29
andrewks
24.08.12
✎
09:05
|
* ЯПВУ
|
|||
30
andrewks
24.08.12
✎
09:06
|
(26) подпрограмма - это безусловный джамп на область памяти с кодом, затем безусловный джамп назад
|
|||
31
amadeus2010
24.08.12
✎
09:21
|
(13) в модуль я поставил саму процедуру ПроверитьУникальность...() Экспорт
|
|||
32
Wobland
24.08.12
✎
09:26
|
(31) не стоит делать предупреждений в модулях объектов. может статься, что предупреждать будет некого
|
|||
33
amadeus2010
24.08.12
✎
09:39
|
(32)дело в том что при размещении в модуль только ПриЗаписи() выдается ошибка что такая процедура не обнаружена, поэтому я так и сделал, конечно можно в модуль поставить 2 процедуры ПроверитьУникальность() и ПриЗаписи(),только насколько правильный такой подход?
|
|||
34
Wobland
24.08.12
✎
09:44
|
(33) пациент, о каком модуле речь?
|
|||
35
Godofsin
24.08.12
✎
09:44
|
(33) Ты в модуль объекта запихал ПриЗаписи()?!?
|
|||
36
amadeus2010
24.08.12
✎
09:55
|
я о модуле объекта т.е справочника. (35)Нет я не запихнул ПриЗаписи() я только спросил о правильности такого подхода, а так у меня ПроверитьУникальность() в модуле объекта, а ПриЗаписи() в модуле формы
|
|||
37
Godofsin
24.08.12
✎
09:57
|
(36) Это неправильный подход =) ну и (32) тоже учти
|
|||
38
amadeus2010
24.08.12
✎
10:16
|
т.е имеете ввиду что предупреждение вынести в ПриЗаписи и там сделать проверку
////////////////////////// Если ПроверитьУникальностьКодФилиала(КодФилиала,Отказ)Тогда Предупреждение("папапа") КонецЕсли; ///////////////////////// |
|||
39
Godofsin
24.08.12
✎
10:20
|
(38) Да, только тогда делать надо функцией, смотри (1)
|
|||
40
Chai Nic
24.08.12
✎
10:25
|
(27) Мало ли что там Керниган с Ричи придумали для своего переносимого ассемблера..
|
|||
41
Chai Nic
24.08.12
✎
10:27
|
(28) Какая разница, как оно выглядит внутри системы? Важно, как с этим инструментом работает прикладной программист. А глубоко внутри вообще нет ни процедур ни функций, есть подпрограммы и стек..
|
|||
42
andrewks
24.08.12
✎
11:03
|
(41) есть ещё регистры, оперативная память, и много чего ещё
|
|||
43
Chai Nic
24.08.12
✎
11:09
|
(42) Ну да, а еще транзисторы на кремниевой пластине.. речь не об этом
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |