Имя: Пароль:
1C
 
Что-то подзабыл "Функция без Возврат"
0 Point
 
25.09.09
14:43
Если внутри функции нет "Возврат <какое-нибудь значение>", что же тогда возвращает функция?
1 ДенисЧ
 
25.09.09
14:43
Пустое значение
2 Point
 
25.09.09
14:44
(1) типа "0"
3 Rie
 
25.09.09
14:45
(2) Нет, пустое значение.
4 Point
 
25.09.09
14:47
Но что самое интересное конструкция следующая:

Функция Назв()
 //действия
КонецФункции

Процедура НазваниеДругое()
 //действия
 Если Назв()=0 Тогда
   //Действия
 КонецЕсли;
КонецПроцедуры
5 Happy Bear
 
25.09.09
14:49
(0) вроде семёрка ругается, что функция ничего не возвращает
6 bse
 
25.09.09
14:49
Функция ххх(зн1,зн2)
  зн2 = 7;
КонецФункции

...
зн1 = 5;
зн2 = 0;
Функция ххх(зн1, зн2)
Сообщить(зн2);
...
7 ДенисЧ
 
25.09.09
14:49
(5) нет, не ругается.
8 Point
 
25.09.09
14:51
(6) параметров у функции нет
9 bse
 
25.09.09
14:51
(8) работает с объявленными переменными...?
10 Дядя Васька
 
25.09.09
14:52
Поменяй на следующую, хуже точно не будет:
Функция Назв()
 //действия

КонецФункции

Процедура НазваниеДругое()
 //действия

 Если ПустоеЗначение(Назв())=1 Тогда
   //Действия

 КонецЕсли;
КонецПроцедуры
11 Дядя Васька
 
25.09.09
14:52
(7) Ругается на Возврат без значения.
12 skunk
 
25.09.09
14:55
функция анНичего()
конецфункции

//*******************************************
Процедура Сформировать()
   если пустоезначение(анНичего()) = 1 тогда
       сообщить("чет не фига");
   конецесли;
КонецПроцедуры
13 Point
 
25.09.09
14:56
(9) да внутри функции есть не переменные, но не объявленные, вот например: м=0, где м потом в зависимости от условий меняется.

Не хочешь ли ты сказать, что именно значение вот этой "м" и возвращиется?
14 DGorgoN
 
25.09.09
14:56
функция анНичего()
Возврат "";
конецфункции
15 povar
 
25.09.09
14:56
(0) зачем ? Если Функция всегда одно и тоже значение возвращает ?
16 ДенисЧ
 
25.09.09
15:01
(11) Это-то понятно
17 Дядя Васька
 
25.09.09
15:02
К чему холивар-то развели? Функция без возврат - это криво написаная функция. Оторвать руки разработчику, и всего делов :)
18 Point
 
25.09.09
15:04
Вроде разобрался. Я так понял если, что если в функции есть вновь созданные или объявленные переменная и в функции отсутствует "Возврат", то она возвращает значение объявленной переменной.
Вроде так....
19 Ёпрст
 
гуру
25.09.09
15:05
(17)Брехня..
Функцию не обязательно пихать в условие или в вычисление выражений.
Можно её просто вызывать как процедуру, и тогда возврат там ну нафик не упёрся..
Тем более, в 1сине, где во многих местах можно пихать только функцию.
20 Ёпрст
 
гуру
25.09.09
15:07
(18) Чего за бредни ? Читай (1).
21 Point
 
25.09.09
15:11
(20) растолкуй тогда:

Функция Назв()
 //действия
 м=0;
 Если Условие Тогда
   м=1;
 КонецЕсли;

 Если м=0 Тогда
  //Действия
 КонецЕсли;
КонецФункции

Процедура НазваниеДругое()
 //действия

 Если Назв()=0 Тогда
   //Действия

 КонецЕсли;
КонецПроцедуры
22 Ёпрст
 
гуру
25.09.09
15:15
(21) растолковать чего?
Что пустоеЗначение с нулём сравниваешь. или что ?
23 Sakura
 
25.09.09
15:16
а что, отладчиком в семерке нельзя проверить функцию на возвращаемое значение?
24 Ёпрст
 
гуру
25.09.09
15:17
+22 Твоя функция Назв() ВСЕГДА возвращает ПустоеЗначение...

И условие Если Назв()=0 Никогда не выполнится..
25 ДенисЧ
 
25.09.09
15:18
(20)
ункция Назв()
//действия
м=0;
Если 1 = 2 Тогда
  м=1;
КонецЕсли;

Если м=0 Тогда
 //Действия
КонецЕсли;
КонецФункции

Процедура Тест()
//действия

Если Назв()=0 Тогда
  сообщить("ноль");
Иначе
   Сообщить("не ноль");

КонецЕсли;
КонецПроцедуры


Результат - не ноль
26 Ёпрст
 
гуру
25.09.09
15:18
(23) Думаешь, 2+2=5 ?
:)
27 ДенисЧ
 
25.09.09
15:18
и что объяснять? Где ложка?
28 Point
 
25.09.09
15:18
(22) давай определим сразу, что <<Что пустоеЗначение с нулём сравниваешь. или что ?>> - это не я сравниваю, а разбираб чужой код.
А растолковать тебя прошу конструкцию в (21) и что конкретно возвращает функция
29 Sakura
 
25.09.09
15:18
(26) в смысле?)
30 Point
 
25.09.09
15:19
(24) но меня смущает, что в этом условии прописаны действия
31 Ёпрст
 
гуру
25.09.09
15:20
(28) Ёпт.. ты издеваешься ?
Тебе еще в (1) ответили!

(29) Какой смысл в отладчике, когда и так всё ясно как 2+2..
32 ДенисЧ
 
25.09.09
15:21
(28) Если внтури функции нет оператора Возврат 0;, то этот код бессмысленен.
33 Sakura
 
25.09.09
15:21
(31) я просто с семеркой не работала, не знаю, как там это можно проверить, тем более, если функция ничего не возвращает
34 Ёпрст
 
гуру
25.09.09
15:22
(30) И чего ?
Функция не обязана что либо возвращать...
Она просто может это. За счет этого, результат выполнения функции можно пихать в логические и в вычисляемые выражения.. вот и всё.
35 Дядя Васька
 
25.09.09
15:22
(19) Можно-то можно, но не нужно. Для этого процедуры есть. А раз уж назвал ее функцией, значит предполагается что будет что-то возвращать. Вроде как правила хорошего тона...
36 DGorgoN
 
25.09.09
15:23
(35) неправда - функцию можно с чем то сравнить, к примеру с null, процедуру нет
37 Дядя Васька
 
25.09.09
15:24
(36) Не понял, зачем ее сравнивать, если ничего не возвращает? Всегда null и будет...
38 Ёпрст
 
гуру
25.09.09
15:25
(35) Это-то да... Но в 1с-ине во многих местах можно запихнуть только функцию (реквизиты диалога, шаблон)
Да и мало ли, как будет функция вызвана потом..
39 DGorgoN
 
25.09.09
15:26
(37) нуль с нулем сравнить - равно или не равно
40 Злопчинский
 
25.09.09
15:28
а насчет неявного возврата последнегго вычисленного значения...???
41 ДенисЧ
 
25.09.09
15:31
(40) Чего??
42 IKSparrow
 
25.09.09
15:33
Умники, в отладчик хоть кто-нибудь залезал? :)
43 Ёпрст
 
гуру
25.09.09
15:35
(42) см. (23,26).
44 Ёпрст
 
гуру
25.09.09
15:36
(41) Уже видать пыхнул...
:)
45 Злопчинский
 
25.09.09
15:43
Потому что если функци явно не возвращает значения - то пофиг вообще что она там возвращает - функция тогда тупо используется для капсулирования кода и все... и в отладчик лазить не надо - независимо от того тупим или не тупим. Писать надо ПРАВИЛЬНО. в отладчик не надо будет лазить. апологеты экстремального программирования блин.. главное понять вововремя где кончается экстрим и начинается 3.14здец
46 orefkov
 
25.09.09
15:47
Для передачи возвращаемого значения функции движком клюшек используется статический глобальный объект CValue. Непосредственно перед выполнением функции у этого объекта вызывается метод CValue::Reset, который устанавливает его в пустое значение с типом 0. Если в функции нет Возврат'а, то это значение таким и остается. Для проверки можно написать
Сообщить(ТипЗначения(ВызовФункцииБезВозрата()));
47 Ёпрст
 
гуру
25.09.09
15:48
(45) отмазался ?
:)
48 Ёпрст
 
гуру
25.09.09
15:51
(46) можешь напомнить, чего там в кишочках 1с-ины забыли, при добавлении строк в новый документ через контекст открытой формы ?..
49 orefkov
 
25.09.09
15:57
(48)
Помоему то ли надо сделать CDocContext::SetEnableNewLine, то ли запустить CGetDoc7::OnStartBatch