Имя: Пароль:
1C
1С v8
использование Возврат в процедуре
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) Ну да, а еще транзисторы на кремниевой пластине.. речь не об этом
Независимо от того, куда вы едете — это в гору и против ветра!