![]() |
![]() |
![]() |
|
Принудительный выход из оператора Если...КонецЕсли ↓ (длинная ветка 20.01.2011 09:18) |
☑ | ||
---|---|---|---|---|
0
МишельЛагранж
17.01.11
✎
12:03
|
Как выйти принудительно из Если?
Из цикла можно, процедуры и функции, а вот из Если не могу. |
|||
1
Grusswelle
17.01.11
✎
12:03
|
КонецЕсли;
|
|||
2
Господин ПЖ
17.01.11
✎
12:03
|
не кури больше...
|
|||
3
KishMish
17.01.11
✎
12:05
|
(0) Можно кинуть в отдельную Процедуру/Функцию и выходить Возвратом
|
|||
4
МишельЛагранж
17.01.11
✎
12:05
|
Смешно :)
Так как выйти изнутря оператора Если...КонецЕсли? |
|||
5
МишельЛагранж
17.01.11
✎
12:06
|
(3) так возврат будет опять же в Если...
|
|||
6
Ненавижу 1С
гуру
17.01.11
✎
12:06
|
используй вложенный Если:
Если ... Тогда ... Если Не МыХотимВыйти Тогда КонецЕсли; КонецЕсли; |
|||
7
KishMish
17.01.11
✎
12:06
|
(4) Перейти (Goto)
|
|||
8
Ненавижу 1С
гуру
17.01.11
✎
12:06
|
(7) плять
|
|||
9
vicof
17.01.11
✎
12:07
|
(0) метки тебя спасут
|
|||
10
SnarkHunter
17.01.11
✎
12:07
|
Увеличь вложение
|
|||
11
Rie
17.01.11
✎
12:07
|
(4) А что значит "выйти из Если"? Пример приведи.
|
|||
12
aka AMIGO
17.01.11
✎
12:07
|
Перейти (Goto)
Синтаксис: Перейти <Метка>; |
|||
13
KishMish
17.01.11
✎
12:08
|
(5) все начиная с "если" и заканчиая "КонцеЕсли;" закинуть в функцию/Процедуру
|
|||
14
Живой Ископаемый
17.01.11
✎
12:08
|
не делай вложенных условий, пользуйся логическими операторами И/ИЛИ
|
|||
15
aka AMIGO
17.01.11
✎
12:09
|
(11) ну что ты мучишь человека? надо ему "выйти" - значит надо :)
|
|||
16
Ненавижу 1С
гуру
17.01.11
✎
12:09
|
(14) почему нельзя делать вложенные? всегда ли спасают И/ИЛИ?
|
|||
17
aka AMIGO
17.01.11
✎
12:10
|
(16) ИначеЕсли могут спасти гиганта? :)
|
|||
18
Ненавижу 1С
гуру
17.01.11
✎
12:11
|
(17) меня неотчего спасать ))
|
|||
19
aka AMIGO
17.01.11
✎
12:12
|
(18) но запасной парашют лучше иметь.. под задом :)
|
|||
20
МишельЛагранж
17.01.11
✎
12:12
|
(8) согласен, с Перейти ж*па у 1С... :)
(6) громоздко получается... да и более одного раза выходить, получается: Если ... Тогда ... Если НЕ МыХотимВыйти Тогда ... Если НЕ СноваХотимВыйти Тогда КонецЕсли; КонецЕсли; КонецЕсли; - буквально, "Яд, мудрецом тебе предложенный, прими," :) |
|||
21
Ненавижу 1С
гуру
17.01.11
✎
12:12
|
(19) уговорил)))
|
|||
22
Rie
17.01.11
✎
12:13
|
(15) Сильно подозреваю, что человек перемудрил с условиями - вот и мучается с проблемой. А когда будет строить пример - сообразит, где у него собака порылась.
|
|||
23
KishMish
17.01.11
✎
12:14
|
а в приципе можно исопльзовать ЦИКЛ как ЦУсловие
Вместо Если НеобходимоеУсловие Тогда КонецЕсли; Заглушка =Истина; Пока НеобходимоеУсловие и Заглушка Цикл /// ну а тут гщдето Прервать; /// Заглушка =Ложь; КонецЦикла; |
|||
24
Rie
17.01.11
✎
12:15
|
(20)
Если ... Тогда ... Если ЕщёЧтоТо Тогда ... Если ЕщёЧтоНибудь Тогда ... КонецЕсли; КонецЕсли; КонецЕсли; Что тут плохо? |
|||
25
Господин ПЖ
17.01.11
✎
12:15
|
Если ....
ф = 1/0; и ловить в эксепшенах... |
|||
26
Ненавижу 1С
гуру
17.01.11
✎
12:15
|
варварский способ:
Выходим = Ложь; Пока Не Выходим Цикл Выходим = Ложь; ... Если Выходим Тогда Прервать КонецЕсли; ... Если Выходим Тогда Прервать КонецЕсли; ... Выходим = Истина; КонецЦикла; |
|||
27
Живой Ископаемый
17.01.11
✎
12:16
|
(16) не знаю. я просто вообразил с какой ветряной мельницей борется автор.. Придумал такую:
Если Условие1 Тогда Если Условие2 Тогда Иначе //вот тут он вдруг хочет выйти не только из вложенного Если, но и из внешнего КонецЕсли; Иначе КонецЕсли; очевидно, что такое можно решить так: Если Условие1 И Условие2 Тогда ИначеЕсли Условие1 И НЕ Условие2 Тогда ИначеЕсли Условие2 И НЕ Условие1 Тогда Иначе КонецЕсли; |
|||
28
Песец
17.01.11
✎
12:17
|
ХочуВыйти = Ложь;
Если <Условие> ИЛИ НЕ ХочуВыйти Тогда ... ХочуВыйти = Истина; ... КонецЕсли; Это для тех, кому диета (зачеркнуто) рилигия запрещает ходить по меткам. |
|||
29
Песец
17.01.11
✎
12:19
|
(28+) Тху, в условии "И" надо
|
|||
30
KishMish
17.01.11
✎
12:19
|
(28) ХочуВыйти = Истина;
вызовет выход из конструкции Если-КонецЕсли? |
|||
31
МишельЛагранж
17.01.11
✎
12:21
|
(11) пример:
Если Флаг Тогда ПеременнаяРаз = ПеременнаяДва = ПеременнаяТри = //если ПеременнаяТри равна 0, то все, что в Если смысла не имеет. А сама ПеременнаяТри определяется через выборку только для вот этого Если. И что - весь кусок запроса для ПеременнаяТри выносить наружу "Если", теряя логику алгоритма? ... Если Условие Тогда Иначе <надо выходить и переход к "Код дальше"> КонецЕсли; ... КонецЕсли; <Код дальше> |
|||
32
Песец
17.01.11
✎
12:21
|
ХочуВыйти = Ложь;
Если НужноеУсловие=Истина И НЕ ХочуВыйти Тогда ... Если НадоВыйти()=Истина Тогда ХочуВыйти = Истина; КонецЕсли; КонецЕсли; |
|||
33
Живой Ископаемый
17.01.11
✎
12:22
|
Клево... надо вспомнить, где это я так прокачал телепатический модуль
|
|||
34
Живой Ископаемый
17.01.11
✎
12:22
|
2(31) читай (27)
|
|||
35
МишельЛагранж
17.01.11
✎
12:23
|
(28) на самом деле, нужно не войти с условием, а _выйти при условии_
|
|||
36
KishMish
17.01.11
✎
12:24
|
(35) см (23)
используется "прервать" |
|||
37
Живой Ископаемый
17.01.11
✎
12:26
|
2(35)
Если Флаг Тогда ПеременнаяРаз = ПеременнаяДва = ПеременнаяТри = КонецЕсли; //если ПеременнаяТри равна 0, то все, что в Если смысла не имеет. А сама ПеременнаяТри определяется через выборку только для вот этого Если. И что - весь кусок запроса для ПеременнаяТри выносить наружу "Если", теряя логику алгоритма? ... Если Флаг и ПеременнаяТри = 0 Тогда Иначе КонецЕсли; ... <Код дальше> |
|||
38
Живой Ископаемый
17.01.11
✎
12:26
|
проблема гроша выеденного не стоит
|
|||
39
Песец
17.01.11
✎
12:27
|
Пока 1=1 цикл
Если Условие Тогда ... Если ЗахотелосьВыйти тогда Прервать; КонецЕсли; ... КонецЕсли; Прервать; КонецЦикла |
|||
40
Песец
17.01.11
✎
12:28
|
(39+) Не сработает при наличии вложенных циклов.
|
|||
41
y22-k
17.01.11
✎
12:34
|
(0) приведи пожалуйста пример когда надо выйти Если можешь
|
|||
42
Rie
17.01.11
✎
12:40
|
(31) Вот ничего не понятно. Рискну предположить, что если аккуратно расписать логику алгоритма - никаких выходов не понадобится. По крайней мере, в этом примере необходимости в них не видно.
|
|||
43
Песец
17.01.11
✎
12:40
|
Попытка
Если Условие1 Тогда Если Условие2 Тогда Если Условие3 Тогда //... Если ХочуВыйти Тогда ызщвапфыжвдьа = 1/0; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Исключение КонецПопытки; |
|||
44
Живой Ископаемый
17.01.11
✎
12:41
|
божеэтокошмаркакойто
|
|||
45
aka AMIGO
17.01.11
✎
12:43
|
ого!.. всё еще не вышел из "если"?.. лабиринт с минотавром какой-то :)
|
|||
46
Песец
17.01.11
✎
12:43
|
Все предложенные способы не что иное, как эмуляция ГоуТу :(
|
|||
47
НП
17.01.11
✎
12:43
|
procedure Хочу(параметры)
if Хочу1 then if НеХочу then return; endif; endif; endprocedure //Хочу |
|||
48
МишельЛагранж
17.01.11
✎
12:44
|
(13) это тогда на крайняк :)
а то пустая функция ради выхода появится. (23) интересный вариант, главное, не забыть в конце Заглушка = Ложь )) (25) а если ошибка внутри запроса будет, который внутри Попытки? а код отлично отработает, и никто не узнает, что результат - полная лажа :) (26) это как в (23), углубленный )) (27) под каждым ИначеЕсли тогда (ведь меняется только Условие 2 в этом примере - Условия 3 нет) надо повторять один и тот же код не на одну страницу прокрутки. Но можно попробовать, может, что-то и получится. (34) прочитал (27) :)) |
|||
49
Живой Ископаемый
17.01.11
✎
12:45
|
для повторяемых кодов давно придумали процедуры...
|
|||
50
МишельЛагранж
17.01.11
✎
12:45
|
(36) в (28) нет никакого намека на Цикл ))
|
|||
51
Живой Ископаемый
17.01.11
✎
12:46
|
и потом, если он повторяется для каждого - вынеси его за КонецЕсли...
|
|||
52
МишельЛагранж
17.01.11
✎
12:48
|
(49) в (48) я в ответе на (13) уже указал, что появится функция затолько ради выхода, а может и не одна ))
|
|||
53
МишельЛагранж
17.01.11
✎
12:50
|
(51) ну как бы код-то под "Если.." должен исполняться при наличии основного условия, а вот выходить из "Если.." - при невыполнении и проблем внутри него.
|
|||
54
МишельЛагранж
17.01.11
✎
12:52
|
(37) это как-то вольно с моим кодом обошлись ))
у меня "..." под "Если.." - это код, который должен выполняться при Флаг )) |
|||
55
VladZ
17.01.11
✎
12:54
|
(0) А теперь русским языком объясни: чего хочешь?
|
|||
56
orefkov
17.01.11
✎
12:54
|
Вывожу из Если по фотографии.
Отворот, приворот процедур и функций. Снимаю порчу с циклов. 100% гарантия. |
|||
57
aka AMIGO
17.01.11
✎
12:55
|
+56 ..+"дорого!" :))
зы. чтоб неповадно :) |
|||
58
Дикообразко
17.01.11
✎
12:56
|
Если <условие 1 не выполняется> Тогда
Возврат; КонецЕсли; Если <условие 2 не выполняется> Тогда Возврат; КонецЕсли; Если <условие 3 не выполняется> Тогда Возврат; КонецЕсли; и т.д. в (0) полный бред |
|||
59
Smallrat
17.01.11
✎
12:56
|
(56) А можно телепат для 8-ки дл фотографии Нуралиева ?
|
|||
60
VladZ
17.01.11
✎
12:56
|
(56) Принудительно выводишь? :)
Это же обязательно условие! :) |
|||
61
Smallrat
17.01.11
✎
12:56
|
+(59) *по
|
|||
62
Живой Ископаемый
17.01.11
✎
12:57
|
2(54) поэтому я и написал
Если ФЛАГ и ПеременнаяТри = 0 ТОГДА //выход Иначе //тот код который вы собирались выполнять под если в 31 КонецЕсли; |
|||
63
Rie
17.01.11
✎
12:57
|
Интересно, до 1000 постов дотянет ветка?
|
|||
64
МишельЛагранж
17.01.11
✎
12:57
|
(43) нежелательность Попытка...Исключение я описал в (48)
(46) работал бы он только железно, а не как придется :( (47) новая функция за ради выхода появится, это смущает. |
|||
65
Дикообразко
17.01.11
✎
12:58
|
(63) не...
всех раньше забанят |
|||
66
Mort
17.01.11
✎
12:58
|
(55) Очередной мегакодер запутался в своём творении.
|
|||
67
VladZ
17.01.11
✎
12:58
|
(65) Точно... Причем принудительно и безусловно...
|
|||
68
orefkov
17.01.11
✎
12:58
|
(59)
Делаю потихоньку, фото Нуралиева не помогает, лучше несколько фото Франклина. |
|||
69
Дикообразко
17.01.11
✎
12:59
|
(64)
можно без функции ВсеУсловиеВыполнены = Истина; Если <условие 1 не выполняется> Тогда ВсеУсловиеВыполнены = Ложь; КонецЕсли; Если <условие 2 не выполняется> Тогда ВсеУсловиеВыполнены = Ложь; КонецЕсли; Если <условие 3 не выполняется> Тогда ВсеУсловиеВыполнены = Ложь; КонецЕсли; .... Если ВсеУсловиеВыполнены Тогда <....> КонецЕсли |
|||
70
Дикообразко
17.01.11
✎
13:00
|
(68) тут фото Волочковой выкладывали
|
|||
71
Rie
17.01.11
✎
13:00
|
(68) Фотки Франклина - ерунда. Требуй гравюры.
|
|||
72
y22-k
17.01.11
✎
13:00
|
(0) Объясни нафига это нужно?
|
|||
73
Дикообразко
17.01.11
✎
13:01
|
(72) автор просто с дискретной математикой видимо не знаком
|
|||
74
МишельЛагранж
17.01.11
✎
13:02
|
(58) "Возврат" куда?
после "Если..." другой исполняемый код в этой функции, общий для "Если..." и "Если НЕ..." (62) если "выход" - это выход из функции, то строчкой выше (ответ на (58) описал, что не получается. |
|||
75
VladZ
17.01.11
✎
13:02
|
(70) Ты до сих пор под впечатлением? ;)
|
|||
76
МишельЛагранж
17.01.11
✎
13:06
|
(69) ну это вариант
"Если ... Если ... Если... Конец ... " (73) с какой математикой не знаком? :) Мне всего лишь понадобился выход из оператора "Если". Если есть время, объясните связь математики и условия выше )) |
|||
77
Дикообразко
17.01.11
✎
13:06
|
(74) см (69)
(75) а то...такого ужаса я давно не видел, сэкономила на фотографе :) |
|||
78
Дикообразко
17.01.11
✎
13:07
|
(76) еще раз.. в твоем случае вложенные если не нужны
|
|||
79
Дикообразко
17.01.11
✎
13:08
|
можно еще так, в зависимости от постановки задачи
ВсеУсловиеВыполнены = Истина; Если <условие 1 не выполняется> Тогда ВсеУсловиеВыполнены = Ложь; КонецЕсли; Если <условие 2 не выполняется> И ВсеУсловиеВыполнены Тогда ВсеУсловиеВыполнены = Ложь; КонецЕсли; Если <условие 3 не выполняется> И ВсеУсловиеВыполнены Тогда ВсеУсловиеВыполнены = Ложь; КонецЕсли; .... Если ВсеУсловиеВыполнены Тогда <....> КонецЕсли |
|||
80
Живой Ископаемый
17.01.11
✎
13:11
|
2(74)
блин... вот ты тугой... Еще раз: Если ФЛАГ и ПеременнаяТри = 0 ТОГДА //просто нет операторов в этой ветке - управление пролучит первый оператор после КОнецЕсли; Иначе //тот код который вы собирались выполнять под если в 31 //а тут да - есть операторы .... КонецЕсли; // и тут есть операторы .... |
|||
81
Smallrat
17.01.11
✎
13:11
|
(68) эх жаль, с фотками франклина нонче дефицит ((
|
|||
82
Denp
17.01.11
✎
13:14
|
(0) неправильно построенное Если.
переделай. (31) это только подтверждает. |
|||
83
fisher
17.01.11
✎
13:26
|
(31) Глупость какая-то...
Если Флаг Тогда ПеременнаяРаз = ПеременнаяДва = ПеременнаяТри = ... Если Условие Тогда ... КонецЕсли; КонецЕсли; <Код дальше> |
|||
84
ВераТ
17.01.11
✎
13:28
|
(56) выведи плиз :) вторую неделю уже там нахожусь :)))
|
|||
85
МишельЛагранж
17.01.11
✎
14:32
|
(83) глупость - это когда пишут программы не сложнее калькулятора, зато сами. И то в виде виндовского "Режим обычный, функционала нет".
Множественное вложение "Если... Если..." ведет к полной переделке этой большой функции, а переделка чревата ошибками. (80) это сродни (69): Проверка валидности переменных до основного их использования. Но тогда в вашем случае, нахождение и проверку валидности ВСЕХ внутренних ключевых переменных основной конструкции "Если Флаг..." нужно выносить за эту самую "Если Флаг..." и делать до. Т.е.: ПеременнаяДва = Запрос.Выгрузить()[0]; //все проверки и перекрестные зависимости ПеременнойТри от ПеременнойДва ПеременнаяТри = Запрос2.Выгрузить()[0]; Если ФЛАГ и ПеременнаяДва = 0 И ПеременнаяТри = 0 ТОГДА //просто нет операторов в этой ветке - управление пролучит первый оператор после КОнецЕсли; Иначе //тот код который вы собирались выполнять под если в 31 //а тут да - есть операторы .... КонецЕсли; // и тут есть операторы .... При том, что ПеременнаяДва = 0 И ПеременнаяТри = 0 и остальные используются только для "Если ФЛАГ...", и более нигде не нужны. А т.к. это тоже код не одной строчкой, и даже не страничкой, зеленить комменты, что и откуда это взялось, и зачем тут нарисовалось. Опять же, всю эту проверку в отдельную функцию - можно, но осторожно и неудобно из-за принципа объявления и передачи переменных: переменные из локальных для функции превращаются глобальными для модуля, либо гонять их десятком параметров туда-сюда, что опять же усложняет дальнейшее исправление (ну да, в УПП так и сделано, согласен. Но это не есть хорошо :) ). |
|||
86
Дикообразко
17.01.11
✎
14:40
|
мдя... поток сознания какой то
|
|||
87
МишельЛагранж
17.01.11
✎
14:43
|
(40) не сработает в плане что "Прервать" будет внутри вложенного цикла и будет относится к выходу из вложенного?
Только если мудрить опять же с перестановками кода. |
|||
88
Denp
17.01.11
✎
14:44
|
(85) можно все-таки расписать исходную задачу подробнее, чем (31)?
|
|||
89
МишельЛагранж
17.01.11
✎
14:44
|
(86) с циклами попробую, решение занятное ))
|
|||
90
rsergio
17.01.11
✎
14:47
|
Я обычно делаю так
Пока 1=1 Цикл ... Если ХХХ Тогда Прервать; КонецЕсли; ... КонецЦикла; |
|||
91
rsergio
17.01.11
✎
14:47
|
забыл Прервать перед окончанием цикла ;)
|
|||
92
Дикообразко
17.01.11
✎
14:49
|
(90) Пока НЕ ХХХ Цикл
КонецЦикла не используется по религиозным соображениям? |
|||
93
МишельЛагранж
17.01.11
✎
14:51
|
(88) а там все и есть, только переменные "ПеременнаяРаз" и т.д. получаем с помощью других функций и запросами, а используются они как внутренние для этой функции и только внутри оператора "Если Флаг ...".
Из=за этого и не хочется гонять куски кода туда-сюда, соединяя его потом правильно и плодя новые ошибки. И что еще потом, после опытной эксплуатации, всплывет в плане проверки валидности - тоже неизвестно. |
|||
94
Лефмихалыч
17.01.11
✎
14:52
|
вы тут все упоротые штоле?..
У кого-нибудь, кроме ТС вообще в жизни были такие случаи, чтобы ЕСЛИ надо было прерывать? |
|||
95
Лефмихалыч
17.01.11
✎
14:52
|
93 поста навертели...
|
|||
96
МишельЛагранж
17.01.11
✎
14:52
|
(90), (91) главное, не зациклить и Прервать в верхнем цикле ставить ))
|
|||
97
МишельЛагранж
17.01.11
✎
14:54
|
(94) а никто, наверное, кроме ТС, в одном Если ... КонецЕсли и не использует мильен всякой понаписанной пакости ))
|
|||
98
Лефмихалыч
17.01.11
✎
14:56
|
(97) а ты код вместо пакости писать не пробовал?
|
|||
99
Aprobator
17.01.11
✎
15:03
|
(94) народ тупо убивает рабочее время.
|
|||
100
Grusswelle
17.01.11
✎
15:04
|
сто
|
|||
101
Aprobator
17.01.11
✎
15:04
|
(97) из серии - запхнем весь код в одну процедуру?
|
|||
102
МишельЛагранж
17.01.11
✎
15:07
|
+(96) обойти это можно так: нужно выйти из верхнего - инициализировать флаг внутри вложенного, и прерывать по флагу уже вне вложенного цикла. Другого способа не вижу.
(98) вы спецом к словам придираетесь? )) ну, тогда читайте в (97): "и не в Если... использует >400 строк кода с локальными переменными, которые нужно проверять особым образом, т.к. возникают ошибки выхода за границы массива и прочее, трудно уловимое на этапе разработки" |
|||
103
МишельЛагранж
17.01.11
✎
15:09
|
(97) это из серии "запихнуть весь алгоритм процедуры в одну процедуру, и чтоб было в одном месте" :))
|
|||
104
Rie
17.01.11
✎
15:09
|
Дискуссия на 100 постов по поводу одного-единственного условного оператора... Вот ведь человеку заняться нечем!
|
|||
105
Дикообразко
17.01.11
✎
15:11
|
(104) задротство и не более того
|
|||
106
МишельЛагранж
17.01.11
✎
15:12
|
(104) если поддаться на "провокации" убери все под другие если - то работы по исправлению не на один день. А так циклом вроде прокатило, главное, механизм и последовательность задания/снятия флагов внутри "одного-единственного условного оператора" не нарушена ))
|
|||
107
МишельЛагранж
17.01.11
✎
15:14
|
+(106) да, провокации типа "убери все под другие Если, идиот!" )))
|
|||
108
y22-k
17.01.11
✎
15:19
|
(107) а такое было?
для а = 1 по 1 цикл твои если прервать конецесли конеццикла; |
|||
109
Rie
17.01.11
✎
15:21
|
(106) То есть, кривизна кода не нарушена? :-)
|
|||
110
МишельЛагранж
17.01.11
✎
15:27
|
(109) рабочего кода, заметьте! Это - самое главное для 1С! ))
(108) нет. Именно такого не было, но это тот же цикл, только без проверки условия. Кстати, смешки смешками, но такой код будет полезен, чтобы не дергать лишнюю переменную и не вязаться к основной (основным) переменной входа. |
|||
111
МишельЛагранж
17.01.11
✎
15:28
|
+ (110) но у меня вход в конструкцию должен проверяться по Флаг, а потому - через Пока Флаг и НЕ ЗавершитьЦикл Цикл
|
|||
112
Ненавижу 1С
гуру
17.01.11
✎
15:29
|
(110) да уж, вернётесь в ещё к этому коду через полгода, тогда посмотрим...
|
|||
113
5 Элемент
17.01.11
✎
15:32
|
(110) а с чего ты взял, что не нарушив кривизну кода, не привнесешь ошибки?
Делай по-человечески и развивай в себе навык аккуратного написания кода. А не поддержку кривезны. |
|||
114
orefkov
17.01.11
✎
16:27
|
Да, на какие только ухищрения не пойдет "тру"-программер, лишь бы богомерзкий goto не использовать.
|
|||
115
Denp
17.01.11
✎
16:43
|
(114) а зачем? ты реально сталкивался с необходимостью нештатного выхода из условия? вот во всем твоем богатом опыте было такое?
|
|||
116
МишельЛагранж
17.01.11
✎
17:00
|
Вот примерно такой алгоритм:
Функция Рассчитать () Флаг1 = ... Флаг2 = ... Флаг3 = ... Если Флаг Тогда ПеременнаяОдин = Запрос(Документ,Номер,Склад,Менеджер,Отгрузка,Сумма).Выгрузить()[0]; Если ПеременнаяОдин <= 1 Тогда <Выход из Если>; КонецЕсли; <Код1> Запрос3.Выгрузить(); Для Каждого ... Цикл Если Флаг 2 Тогда ... ИначеЕсли Флаг 3 Тогда ... КонецЕсли; КонецЦикла; Пока а = 1 По КолСтрок Цикл Если ... Тогда Флаг5 = ... Флаг5 = ... ... Флаг10 = ... КонецЕсли; Если Флаг7 Тогда ПеременнаяДва = Запрос(ПеременнаяОдин,Склад,СуммаЗаМесяц,Перерасход,План).Выгрузить()[0]; <Код2> Если ПеременнаяДва => 100 Или НЕ Флаг10 Тогда <Выход из Если>; КонецЕсли; Если Флаг 2 Тогда .... ИначеЕсли Флаг 3 Тогда .... КонецЕсли; <Код3> КонецЕсли; КонецЦикла; <Код4 с переменными Один и Два> КонецЕсли <Код5 общий> Возврат ТЗ; КонецФункции - выходы из Если...Тогда помечены, может, и еще где потом понадобится. |
|||
117
МишельЛагранж
17.01.11
✎
17:10
|
+(116) надеюсь, понятно, что перед "Если Флаг Тогда..." еще другого кода полно.
Разделяя на разные функции, нужно все перетряхать по области видимости переменных, и все эти флаги и прочее тащить либо в параметры, либо в общие переменные (и следить, чтобы таких переменных больше не было нигде). |
|||
118
palpetrovich
17.01.11
✎
18:28
|
психи
|
|||
119
orefkov
17.01.11
✎
23:49
|
(115)
Было. Тока не на 1С. Ядро линуха пытался допилить под свой телефон, аудио-драйвер под OMAP-850. Там так принято, суть примерно такова: . Выделение памяти 1 .. если успех то выделение памяти 2 иначе гото освобождение памяти 1 ... работа всякая ... выделение памяти 3 .... если ошибка гото освобождение памяти 2 ..... работа всякая .... конецесли .. конецесли .освобождение памяти 3 .освобождение памяти 2 .освобождение памяти 1 |
|||
120
Лефмихалыч
17.01.11
✎
23:56
|
(110) >рабочего кода, заметьте! Это - самое главное для 1С! ))
омерзительные слова профана, ни разу не пробовавшего поддерживать чужой код. А так же - того, у кого ни когда не было необходимости свой собственный код развивать через несколько месяцев после того, как всё про него забыл. Объясни вон Ежову (v8: Мозгокруты от 1С, что без разницы, как код написан, если он запустился и не упал, когда его автор тестил, а то он не знает, что на самом деле главное в коде 1С... |
|||
121
Лефмихалыч
17.01.11
✎
23:57
|
если в коде возникает необходимость вот такого изврата (0), значит код надо удалить чуть менее, чем полностью - он не жизнеспособен.
|
|||
122
LYuri
18.01.11
✎
00:33
|
(121) Согласен, изврат. Зачем такой код, если нужно из него срочно выйти. Тут только обработчик ошибок поможет.
|
|||
123
LYuri
18.01.11
✎
00:41
|
(117) а не проще сделать через ИначеЕсли! Условие заменить на НЕ а выход перенести в ИначеЕсли!?
|
|||
124
МишельЛагранж
18.01.11
✎
09:37
|
эх, как раскритиковали ))
(120), (123) ни один из крутых 1с-ников не понимает, что УСЛОВИЕ (Если Флаг Тогда...) НИКАК не связано с необходимостью выхода: условие само по себе (по нему выполняется код 1, код 2 и т.д., а потом еще и общий для условия и без него), а обработка ошибок и последующий выход - происходят вне зависимости от наличия Флаг (входа) и по своим(ограничениям платформы) условиям (нельзя работать дальнейшему коду "Если Флаг", раз ошибка произошла с данными, которые используются ТОЛЬКО в "Если Флаг ...", а вот общий код может и дальше отрабатывать - там эти данные не участвуют). А потому играться с Если..Иначе - переписывать всю логику кода. Ладно, переписали. А потом в другом месте стала возникать ошибка - и снова переписывать вместо эмуляции исключения кода? Почему нельзя Попытку использовать - уже отвечал: в Попытке ошибка обходится, но не исправляется, в итоге - ни ошибки, ни правильного результата (как же можно обработать исключение правильно, если не знаешь, что за ошибка произошла и где, а у меня - уже более одной ошибки, и более одного прерывания потребовалось в "Если Флаг ..."). Вы никак не поймете, что ошибка может возникать, а может - и не возникать: все зависит от исходной ситуации и данных, и код в ЛЮБОМ случае рабочий: хоть прямой, хоть с прерываниями. Вот Орефков в (119) описал идентичную ситуацию, только во всех языках Goto работает, а в 1с - где сталкивался, криво работает. Может, я и профан, но "Перейти... Метка" могу в код вставить )) |
|||
125
Песец
18.01.11
✎
09:47
|
(124) А в чем кривизна работы одинэсного "Перейти" вообще и для твоего случая (116) в частности?
|
|||
126
Aprobator
18.01.11
✎
09:51
|
(124) это что такая за "блуждающая" ошибка, которая может всплыть фиг знает где?
|
|||
127
Denp
18.01.11
✎
09:53
|
(116) Мне одному кажется, что в данном случае проблема решается использованием Иначе?
|
|||
128
Aprobator
18.01.11
✎
09:56
|
(127) боюсь, что здесь проблема не в Если и не в Иначе, а в стиле программирования ТС.
|
|||
129
Denp
18.01.11
✎
09:57
|
(116) даже так:
Функция Рассчитать () Флаг1 = ... Флаг2 = ... Флаг3 = ... Если Флаг Тогда ПеременнаяОдин = Запрос(Документ,Номер,Склад,Менеджер,Отгрузка,Сумма).Выгрузить()[0]; Если ПеременнаяОдин > 1 Тогда <Код1> Запрос3.Выгрузить(); Для Каждого ... Цикл Если Флаг 2 Тогда ... ИначеЕсли Флаг 3 Тогда ... КонецЕсли; КонецЦикла; Пока а = 1 По КолСтрок Цикл Если ... Тогда Флаг5 = ... Флаг5 = ... ... Флаг10 = ... КонецЕсли; Если Флаг7 Тогда ПеременнаяДва = Запрос(ПеременнаяОдин,Склад,СуммаЗаМесяц,Перерасход,План).Выгрузить()[0]; <Код2> Если ПеременнаяДва < 100 И Флаг10 Тогда Если Флаг 2 Тогда .... ИначеЕсли Флаг 3 Тогда .... КонецЕсли; <Код3> КонецЕсли; КонецЕсли; КонецЦикла; <Код4 с переменными Один и Два> КонецЕсли; КонецЕсли <Код5 общий> Возврат ТЗ; КонецФункции |
|||
130
МишельЛагранж
18.01.11
✎
09:58
|
(120) дорогой вы мой человек, не то главное, что главное, а то главное, что в 1С это вынуждают делать и потом, замерев, молиться, чтобы это все работало и не пыхтело ))
|
|||
131
IKSparrow
18.01.11
✎
10:00
|
Полагаю, что с помощью конструкции
Попытка Исключение КонецПопытки и ВызватьИсключение() Можно решить большинство подобных ситуаций. Чем не устраивает? |
|||
132
Ненавижу 1С
гуру
18.01.11
✎
10:00
|
(130) а чем оператор Если в 1С отличается от C++ или Delphi? Там получается теже проблемы
|
|||
133
Ненавижу 1С
гуру
18.01.11
✎
10:00
|
(131) глупо его здесь применять
|
|||
134
МишельЛагранж
18.01.11
✎
10:08
|
(127), (128) - четвертый раз объясняю (в смысле, в этом топике): нужно выйти не из "Если ПеременнаяДва < 100 И Флаг10", а из общего с верхнего уровня "Если Флаг...", а у вас дальше (с уже произошедшей ошибкой) исполняется код 2 и код 3, а должен (при ошибке) - только уже код 5 (общий).
(126) эти ошибки из-за того, что в 1С нет нормальных стандартных средств предварительной обработки данных, и везде приходится выкручиваться по факту: выбрал 10 строк - нет ошибки, выбрал 0 строк - есть ошибка; данные получены запросом - нет ошибки, не получены - есть ошибка. |
|||
135
МишельЛагранж
18.01.11
✎
10:09
|
(131) смотрите хотя бы последнее мое сообщение (124) на эту тему )))
|
|||
136
Ненавижу 1С
гуру
18.01.11
✎
10:09
|
(134) "эти ошибки из-за того, что в 1С нет нормальных стандартных средств предварительной обработки данных, и везде приходится выкручиваться по факту: выбрал 10 строк - нет ошибки, выбрал 0 строк - есть ошибка; данные получены запросом - нет ошибки, не получены - есть ошибка."
никак не пойму этот поток сознания |
|||
137
МишельЛагранж
18.01.11
✎
10:10
|
(132) это больше было ответом на (120) "Объясни вон Ежову (v8: Мозгокруты от 1С), что без разницы, как код написан" :))
|
|||
138
Denp
18.01.11
✎
10:11
|
(134) не вижу проблемы. если не курочить столь стройный алгоритм, то во втором Если ставим новый флаг (их все равно дофига) и Прервать
|
|||
139
Ненавижу 1С
гуру
18.01.11
✎
10:11
|
(137) и все же
|
|||
140
Scooter
18.01.11
✎
10:12
|
проф программерского стаже чутьбольше чем семь слишнем лет
ниразу не пользовал гото ни разу не возникало таких ситуаций как в (0) ЧЯДН |
|||
141
Ненавижу 1С
гуру
18.01.11
✎
10:13
|
(140) шаман?
|
|||
142
МишельЛагранж
18.01.11
✎
10:17
|
(136) а что, есть? Стандартные? Или все-таки каждый раз надо выкручиваться на месте по факту?
И как вот вы предугадываете, какой финт выкинут пользователи? Становитесь дурней паровоза? Я вот только могу стать дурней локомотива )))) |
|||
143
Ненавижу 1С
гуру
18.01.11
✎
10:18
|
(142) с такими доводами - программирование вообще зло и неблагодарное дело
|
|||
144
Denp
18.01.11
✎
10:19
|
(142) вам шашечки или ехать? нужно из если выйти или алгоритм написать?
если последнее, то все прекрасно делается. ЗЫ Ну никак я не понимаю необходимости нештатно выйти из Если |
|||
145
zak555
18.01.11
✎
10:19
|
Возврат ?
|
|||
146
МишельЛагранж
18.01.11
✎
10:19
|
(134) это вы вложенный цикл прервете и выйдете на код 4, а надо - из "Если Флаг ..." на код 5.
|
|||
147
МишельЛагранж
18.01.11
✎
10:20
|
(145) вы совсем выйдете из функции, а надо еще и отработать код 5 - он тут совершенно ни при чем, и ошибки в внутри "Если Флаг.." его не волнуют ))
|
|||
148
zak555
18.01.11
✎
10:23
|
(147) вынести "если" в процедуру/функцию
|
|||
149
МишельЛагранж
18.01.11
✎
10:25
|
(134) собственно, заменой общего "Если Флаг..." на "Пока Флаг и зАглушка...Цикл" я и сделал, с Прервать в двух указанных местах (во втором - из-за вложенного цикла сначала выход из него с установкой флага, потом снова Прервать и выход уже наружу совсем), пока еще других ошибок не поступало ))
|
|||
150
Denp
18.01.11
✎
10:25
|
(146) то есть слова про дополнительный флаг не насторожили и надо разжевывать? перед прервать ставим новый флаг, а перед кодом4 его проверяем.
Кста, поюзай (148) |
|||
151
МишельЛагранж
18.01.11
✎
10:27
|
(148) можно и так, но не забыть массу параметров передавать туда, плюс полная проверка алгоритма на работоспособность вне этой процедуры (переменные опять же могут пересекаться из кода вне "Если Флаг..." и внутри него).
И лишняя функция появляется. Циклом проще. |
|||
152
Ненавижу 1С
гуру
18.01.11
✎
10:28
|
да, NULL и Неопределено по сравнению с этим нервно курят в сторонке
|
|||
153
Denp
18.01.11
✎
10:29
|
(151) проще на АСМе
|
|||
154
zak555
18.01.11
✎
10:29
|
(151) передай "СЗ"
|
|||
155
МишельЛагранж
18.01.11
✎
10:30
|
(150) тогда вам потребуется масса комментариев, что "если меняешь здесь, и здесь, и здесь код - ставь его за вот этот флаг, иначе бадабум, и ничего работать нормально не будет" )))
|
|||
156
Scooter
18.01.11
✎
10:33
|
ИМХО трабла в (0) явно надуманная
приведите мне кусок типовой где реально такое встречается |
|||
157
МишельЛагранж
18.01.11
✎
10:33
|
(152) в смысле, проверки на NULL и Неопределено? Уже пытался стандартно вставлять "для превентивной проверки" в разных кострукциях сравнение с ними (по примеру других языков), работает в 80% из 100, то есть, можно сказать, не работает ))))
|
|||
158
Denp
18.01.11
✎
10:33
|
(155) может все-таки прочитать еще какую книжку, кроме ЖКК, и написать нормальный алгоритм?
|
|||
159
МишельЛагранж
18.01.11
✎
10:35
|
(156) это не типовая, почему и изъеденная условиями как швейцарский сыр - дырками )))
|
|||
160
Ненавижу 1С
гуру
18.01.11
✎
10:35
|
(157) всмысле того, что целых три термина: NULL, Неопределено и пустая ссылка созданы для одной пустой сущности
|
|||
161
МишельЛагранж
18.01.11
✎
10:36
|
(158) алгоритм рос вместе с аппетитом заказчика. Прочитать книжку от заказчика?
|
|||
162
МишельЛагранж
18.01.11
✎
10:37
|
(160) а, ну так все равно даже на Мисте не всех переубедили, что именно для одной пустой сущности ))))
|
|||
163
Scooter
18.01.11
✎
10:37
|
(161)переписать код
|
|||
164
eklmn
гуру
18.01.11
✎
10:38
|
(151) для того функции и придуманы чтоб огород не городить
|
|||
165
Ненавижу 1С
гуру
18.01.11
✎
10:38
|
(162) так их разве переубедишь, это же религиозная секта
|
|||
166
Ненавижу 1С
гуру
18.01.11
✎
10:38
|
кстати методы длиной больше экрана не камильфо, но разработчикам типовых пофиг, тексты запросов не в счет, они читаются конструктором
|
|||
167
Scooter
18.01.11
✎
10:39
|
(162)>именно для одной пустой сущности
данекуяподобного |
|||
168
Ненавижу 1С
гуру
18.01.11
✎
10:42
|
(167) а вот во многих СУБД вполне
|
|||
169
МишельЛагранж
18.01.11
✎
10:43
|
(154) можно и структурой, согласен, но меня всегда пугали забитые доверху параметрами структуры без описания. Тогда еще и руководство к этой структуре писать надо, чтобы ничего в пути не потерялось, а если надо добавить - то в нужном месте )))
У меня где-то есть код, где передается таким образом соответствие внутри соответствия - уже через месяц было проблематично найти без описания все куски заполнения такой "структуры", и пришлось хотя бы составлять краткий перечень всех вводимых в неё параметров. |
|||
170
Scooter
18.01.11
✎
10:45
|
(168)хз
но удобно жешь когда они разделены |
|||
171
MM
18.01.11
✎
10:47
|
(16) у пустой ссылки есть вполне определённый тип, неопределено - показывает, что даже типа нет, но некоторое значение всё же есть в базе, ну и тд.
(0) На правах курьёза, где то я видел доказательство, что любые операторы управления, которых выделялось 7 видов (метки, подпрограммы, множественный выбор, Если полный и неполный, цикл с пост-условием, цикл с предусловием) всегда можно свести к циклу с предусловием, т.е. к Пока в 1С. Так что если соблюдать стандарты: не писать длинные подпрограммы и использовать структурные конструкции управления, то досрочный выход из целой конструкции будь, то Если или Пока ни к чему. |
|||
172
МишельЛагранж
18.01.11
✎
10:48
|
(167) собственно, моя проблема вырастает и из этого: есть куча типов данных, которые все не проверишь, но каждый вызывает ошибку, если он - это не он, а примерно похож.
Особенно, если заказчику требуется гибкая система ввода данных и приходится клепать составные типы и универсальные поля ввода (в смысле, оперативно подменять один тип поля другим). |
|||
173
Scooter
18.01.11
✎
11:17
|
(172)накидай особо хитрую задачу
подумаю на досуге |
|||
174
МишельЛагранж
18.01.11
✎
11:19
|
да без проблем:
сделай имитацию функционала Ексель в формах 1С. Можно без ввода формул и Бэйсика )))) |
|||
175
МишельЛагранж
18.01.11
✎
11:23
|
Чтобы клиент думал, что у него каждая ячейка обрабатывается независимо от другой (составные типы в ячейках (строка+справочник+другой справочник+список), тип элемента ячейки, кнопочки "стереть-открыть" и т.д. каждая в зависимости от текущего типа данных в этой ячейке, ну начнешь делать - поймешь).
|
|||
176
0xFFFFFF
18.01.11
✎
11:27
|
(0)
Если нужно принудительно выйти из Если, используйте Если. Если же вы не хотите использовать Если, то не используйте это Если вообще. |
|||
177
ado
18.01.11
✎
11:27
|
(0) Почитай про конечные автоматы, нормально формализуй свой алгоритм и напиши нормальные условия.
|
|||
178
Stado_adama
18.01.11
✎
11:27
|
ну чо решили? :)))
|
|||
179
0xFFFFFF
18.01.11
✎
11:37
|
(0) Пользуйся на здоровье...
Вперед = Истина; Если Условие1 и Вперед Тогда Если Условие2 и Вперед Тогда Вперед = РандомБулева(); КонецЕсли; Если Условие3 и Вперед Тогда Вперед = РандомБулева(); КонецЕсли; Вперед = РандомБулева(); Если Условие4 и Вперед Тогда Вперед = РандомБулева(); КонецЕсли; Если Условие5 и Вперед Тогда Вперед = РандомБулева(); Если Условие6 и Вперед Тогда Вперед = РандомБулева(); КонецЕсли; КонецЕсли; КонецЕсли; |
|||
180
МишельЛагранж
18.01.11
✎
11:37
|
(178) да уже решили ))
на цикле сделано. (176) это как принудительно выйти из Если? ЕслиПрервать? )) (177) пример кода конечного автомата в 1С приведите |
|||
181
0xFFFFFF
18.01.11
✎
11:37
|
такой вот бред-с.
Хотя в жизни "выйти из Если" не приходилось :) |
|||
182
ado
18.01.11
✎
11:39
|
(180) >> пример кода конечного автомата в 1С приведите
Ты, для начала, поинтересуйся, что это такое вообще. |
|||
183
0xFFFFFF
18.01.11
✎
11:40
|
(180) "это как принудительно выйти из Если? ЕслиПрервать? )) "
Это использовать другой Если. Вообще чесгря не сталкивался ни разу с такой необходимостью.... Если у тебя уж такой суперуникальное ветвление, пихаем в функцию, используем возврат. |
|||
184
Лефмихалыч
18.01.11
✎
11:41
|
(124) вот это все и означает, что код нежизнеспособен.
(130) такой код на любой платформе и на любом языке называется быдлокодом, 1С тут ни при чем. В общем, по сабжу единственная дельная рекомендация: |
|||
185
fisher
18.01.11
✎
11:57
|
(116) При таких раскладах goto - самое бескровное решение. В этом коде оно уже ничего испортить не может.
|
|||
186
ado
18.01.11
✎
11:58
|
(184) "Чо тут думать, пут прыгать надо!"
|
|||
187
fisher
18.01.11
✎
12:06
|
Необходимость в принудительном выходе из "Если" = необходимости в использовании goto. Если она возникает - с вероятностью 99,99% код неправильно структурирован. Пример в (116) показывает результат неправильной структуризации. И он слишком абстрактен, чтобы можно было предложить более оптимальный вариант.
|
|||
188
kosts
18.01.11
✎
12:20
|
(185) +1. используй гото, оно для того и предназначено.
Его использование не запрещается, только не рекомендуется. Но по хорошему, код нужно разбить на отдельные процедуры. |
|||
189
fisher
18.01.11
✎
12:21
|
Злоупотребление "Прервать" и "Возврат" - тоже, кстати, не способствует повышению читабельности кода.
Одно дело заменить кучу вложенных подряд условий на блок последовательных возвратов. И другое дело - неочевидные возвраты/прервать, разбросанные по закоулкам. Это тоже обычно признак плохой структуризации и ничем от goto не отличается. |
|||
190
ado
18.01.11
✎
12:25
|
(187) Щас автор тебе скажет, что ты академический теоретик, и на практике сложных программ на 1С не писал.
|
|||
191
МишельЛагранж
18.01.11
✎
12:39
|
(190) да нет, автор просил пример конечного автомата в 1С в коде.
А то автоматы да автоматы, а как с помощью этих автоматов вытащить у заказчика окончательную и бесповоротную и никогда-не-изменяемую-ни-при-каких условиях ТЗ - уважаемый ado почему-то умалчивает, отсылаю ну к совершенно незнакомым заказчику авторам книжек. |
|||
192
МишельЛагранж
18.01.11
✎
12:39
|
*отсылая
|
|||
193
Denp
18.01.11
✎
12:44
|
(191) какая связь между частотой смены ТЗ и алгоритмом выполнения задачи из ТЗ?
|
|||
194
МишельЛагранж
18.01.11
✎
12:50
|
вот и я прошу дать пример, как ваши конечные автоматы (именно ваши!) учитывают ввод новых условий, все изменения в ТЗ и настроения заказчика?
|
|||
195
ado
18.01.11
✎
12:55
|
(190) Реализация конечного автомата в 1С-коде выглядит примерно так:
Теперь формализуй свой алгоритм в терминах состояний и переходов между ними, и реализуй в вышеописанном виде. |
|||
196
Denp
18.01.11
✎
12:57
|
(194) это же жесть какая то...
|
|||
197
ado
18.01.11
✎
12:58
|
(194) Изменения в ТЗ и настроения заказчика при этом легко реализуются вводом новых состояний и их обработчиков.
|
|||
198
fisher
18.01.11
✎
12:59
|
Вспомнилось.
"Код нужно писать так, будто сопровождать его будет маньяк-психопат, который знает где ты живешь". Опыт, сын ошибок трудных... Сейчас я даже несложные разработки стараюсь сразу структурировать так, как будто завтра они будут базой миллионного проекта. И уже не раз себя за это горячо благодарил. Ибо сплошь и рядом сегодня простые и второстепенные разработки завтра постепенно или внезапно обретают важность, начинают обрастать функционалом и т.п. А без хорошей базы они быстро и неотвратимо превращаются в жуткого монстра, которого проще переписать с нуля, чем отрефакторить. |
|||
199
fisher
18.01.11
✎
13:03
|
(197) А с чего ты взял, что сабжевая задача хорошо ложится на обработку состояний? По ходу, автор вообще ничего не сказал об исходной задаче.
|
|||
200
Siberia
18.01.11
✎
13:04
|
-=200=-
|
|||
201
ado
18.01.11
✎
13:04
|
(191) >> а как с помощью этих автоматов вытащить у заказчика окончательную и бесповоротную и никогда-не-изменяемую-ни-при-каких условиях ТЗ
Вообще-то, автоматное программирование, и прочие умные парадигмы придумывались как раз для того, чтобы можно было легко вносить изменения в код не теряя его сторйности, при изменении ТЗ в процесси жизни программы. |
|||
202
fisher
18.01.11
✎
13:04
|
Хотя миллион флагов какбэ намекает, согласен...
|
|||
203
ado
18.01.11
✎
13:04
|
(199) Попой чую ;-)
|
|||
204
-Mig
18.01.11
✎
13:05
|
ну ладно... 1с допустим отстой...
но мне интересно, где например автор видел оператор "breakIF"... |
|||
205
ado
18.01.11
✎
13:05
|
(202) Во-во ;-)
|
|||
206
Калиостро
18.01.11
✎
13:08
|
(198) +1
За 25 часов с начала обсуждения пора было переписать этот долбаный Если... |
|||
207
МишельЛагранж
18.01.11
✎
13:18
|
(206) вы с ума сошли, это ж не один день придумывалось )))
|
|||
208
trdm
18.01.11
✎
13:20
|
Еще не вышли? О_о
|
|||
209
fisher
18.01.11
✎
13:24
|
Автор очень хочет использовать goto, но где-то слышал что это плохо. Поэтому изобретает еще более жуткие способы.
|
|||
210
Denp
18.01.11
✎
13:25
|
(207) еще один симптом ошибок в консерватории - сложность модификации нелинейно растет с ростом объема кода.
|
|||
211
trdm
18.01.11
✎
13:30
|
(209) гоутушка норм если не злоупотреблять.
|
|||
212
ado
18.01.11
✎
13:32
|
(211) Лучше не употреблять вовсе. Это такой оператор, без которого можно обойтись абсолютно безболезненно.
|
|||
213
МишельЛагранж
18.01.11
✎
13:41
|
(209) нет, автор сам пытался изобразить когда-то давно ГоТу в 1С, и с тех пор остались мрачные воспоминания )))
|
|||
214
Vladal
18.01.11
✎
13:41
|
(0) А пример действующего кода с комментарием - ГДЕ надо выйти?
|
|||
215
МишельЛагранж
18.01.11
✎
13:42
|
(210) ваши бы слова да разработчикам/начальникам разработчиков/начальникам начальников разработчиков всяческих "типовых" УПП в уши ))
|
|||
216
Deon
18.01.11
✎
13:46
|
(213) а в чём косяуи-то возникли с гото?
|
|||
217
Deon
18.01.11
✎
13:47
|
(126) *косяки
|
|||
218
fisher
18.01.11
✎
13:48
|
(212) Т.е, его оставили в составе языка по ошибке? ;)
(216) +1 |
|||
219
Deon
18.01.11
✎
13:49
|
(215) Пример-то будет или нет?
|
|||
220
kosts
18.01.11
✎
14:24
|
Модификация твоего алгоритма (116) без "выхода из если"
Функция Рассчитать (Флаг1, Флаг2, Флаг3) Если Флаг Тогда ПеременнаяОдин = ПолучитьЗапрос(Документ,Номер,Склад,Менеджер,Отгрузка,Сумма).Выгрузить()[0]; Если ПеременнаяОдин <= 1 Тогда Код5Общий(...); Возврат ТЗ; КонецЕсли; Код1(...); Запрос3.Выгрузить(); Для Каждого ... Цикл Если Флаг2 Тогда //... ИначеЕсли Флаг3 Тогда //... КонецЕсли; КонецЦикла; Пока а = 1 По КолСтрок Цикл Если ... Тогда Флаг4 = ... Флаг5 = ... ... Флаг10 = ... КонецЕсли; Если Флаг7 Тогда ПеременнаяДва = Запрос(ПеременнаяОдин,Склад,СуммаЗаМесяц,Перерасход,План).Выгрузить()[0]; Код2(...); Если ПеременнаяДва >= 100 Или НЕ Флаг10 Тогда Код5Общий(...); Возврат ТЗ; КонецЕсли; Если Флаг2 Тогда //.... ИначеЕсли Флаг3 Тогда //.... КонецЕсли; Код3(...); КонецЕсли; КонецЦикла; Код4СПеременнымиОдинИДва(...); КонецЕсли; Код5Общий(...); Возврат ТЗ; КонецФункции |
|||
221
ado
18.01.11
✎
15:56
|
(218) Скорее по традиции. Вон, в Яве выкинули, и нчего, никто не плакает.
|
|||
222
Ненавижу 1С
гуру
18.01.11
✎
16:14
|
+(221) и добавили break с меткой
|
|||
223
ado
18.01.11
✎
16:27
|
(222) Да? Не знал. Вот редиски.
|
|||
224
Ненавижу 1С
гуру
18.01.11
✎
16:29
|
(223) зато стало возможно сразу и внезапно выйти из кучи вложенных циклов
|
|||
225
МишельЛагранж
19.01.11
✎
12:06
|
(193) вообще-то алгоритм пишется под ТЗ и всецело от него зависит.
Нет, крутые 1С-ники сразу при получении заказа берут типовую УПП и дорабатывают под нужды заказчика. Даже если заказчик просил только кнопочку другую сделать. Зато уже в конфе есть много чего другого, что может заказчику понадобится в ближайшие 10 лет, и он по мере роста осваивает новые документы и не жужжит. А некрутые парятся с нуля, сначала делают по ТЗ, потом переделывают по доработкам к ТЗ, потом и вовсе без ТЗ ))) (195) вот именно. Наконец-то до академических слушателей дошло, что есть Начальные состояния 1...n, и есть конечные 1...m. Теперь вопрос: кто в полной мере даст описание всех возможных состояний 1...n...m, если в ТЗ из описано, к примеру, всего 5? Программист (берет УПП+УТ+еще какую любимую типовую и дорабатывает)? Заказчик, который двух слов связать не может в плане описания задания? Уважаемый ado опишет все состояния по любым задачам? (194) это если состояния отличаются друг от друга на единичку, а не сменой типов регистров или "а теперь двигаемся перпендикулярно!" (199) исходные задачи, которые я делаю - это: сделай А (1) - сделал? - так, теперь тут нужно Б (2) - сделал? теперь общий вывод в В (3) - ага, а вот теперь неплохо бы из А попасть в Д, но чтобы и в В это тоже отразилось (4). Прошу сделать конечные автоматы всей задачи (можно через Если-Иначе простыми блоками переходов), имея на руках только информацию (1). |
|||
226
Rie
19.01.11
✎
12:12
|
(195) Так в чём проблема с "если описано всего 5"?
Вот и реализуются эти самые 5, которые описаны. Понадобилось ещё - добавить их труда не составляет. (Кроме того, "описано в ТЗ" и "спроектировано программистом на основе ТЗ" - это не одно и то же). Третий день подряд человек воду в ступе толчёт! |
|||
227
Песец
19.01.11
✎
12:12
|
ИМХО, автор ошибся в выборе профессии...
Либо он компутерный гений, которому невыносимо тесно в прокрустовом ложе языков программирования высокого уровня, в таком случае ему следует перейти на ассемблер или вообще на машинные коды ("Там это реализовано") и искать работу в организациях типа Intel. |
|||
228
МишельЛагранж
19.01.11
✎
12:37
|
(224) пример зрелости языка. Это и ответ на (204) "а где... а где".
Во всех языках, мне встретившихся, есть четко определенные, остро заточенные и безукоризненно работающие операторы, не допускающие не то что бы разночтения, а однозначно и 100% работающие раз и навсегда заложенным (и четко описанным) способом с железным выводом всегда однозначного результата. Но это же западные системы. А 1С - наш ответ западу. (214), (219) - вам что надо, чтобы вы взяли код и навтыкали там везде обход "ЕслиИначе", обойдя таким образом без выхода весь код, где нежелательны переменные с ошибкой? )) Я это знаю, и сам так могу. Только получится вот это: http://s56.radikal.ru/i152/1008/39/ca50e0b2759c.jpg |
|||
229
МишельЛагранж
19.01.11
✎
12:41
|
(226) вам тоже надо озадачится (225) :))
озвучено 5, а надо - 1...n...m вариантов. Надо еще - вот и добавляю. Или и вы тоже пишете код из сплошных "Если...Иначе" в каждой строке? (227) вот настоящий 1С-ник )) Никаких там сомнений и вариантов - ты или за белых, или за желтых! Будешь за желтых - орден дадим, против - расстреляем и дело с концом! )) |
|||
230
Rie
19.01.11
✎
12:42
|
(228) А какой оператор 1С допускает разночтения? Какой оператор 1С выдаёт неоднозначный результат?
Проблему-то ты - так и не описал (несмотря на неоднократные вопросы). Только болтаешь о том, что у тебя чего-то там сделать не получается путём раскрытия зонтика левой рукой в правом ухе. |
|||
231
Rie
19.01.11
✎
12:45
|
(229) Когда я пишу код - я использую те конструкции, которые нужны для реализации выбранного алгоритма. А те, которые не нужны - не использую. Если нужно "Если ... Иначе" - то использую "Если ... Иначе". Нужен цикл - будет цикл.
Если не умеешь писать - то или учись, или и не берись. |
|||
232
МишельЛагранж
19.01.11
✎
12:49
|
(230) проблема была быстром неплановом выходе из Если.
Я уже её решил. Сейчас уже идет обсуждение наиболее оптимального варианта )) Какой оператор? да полно. Вот: Каждый Цикл - увеличивает свой счетчик (причем это недокументировано). Пока ... Цикл - нет (если задаешь числовое условие) Шага в циклах нет, установки счетчика - нет, начального значения счетчика - нет. Это что, однозначный результат на выходе? |
|||
233
МишельЛагранж
19.01.11
✎
12:51
|
(231) ну понятно, для реализации условия "Флаг такой-то стал равен Истина" вы всегда используете Цикл, и не паритесь ))
|
|||
234
Denp
19.01.11
✎
12:51
|
(232) "Каждый Цикл - увеличивает свой счетчик (причем это недокументировано).
Пока ... Цикл - нет (если задаешь числовое условие) Шага в циклах нет, установки счетчика - нет, начального значения счетчика - нет." о_О у меня нет слов |
|||
235
Rie
19.01.11
✎
12:57
|
(230) "Внеплановый выход из Если" - не проблема, а её следствие. Проблема же в неправильном проектировании, из-за которого и возникла потребность во "внеплановом выходе".
В общем виде задача преобразования структур со "внеплановыми" выходами в регулярные была решена ещё в 1970-е годы (а возможно, и раньше). Причём в нескольких вариантах. Обсуждение же вариантов - возможно только в случае, когда сформулирована задача. Ты задачу не сформулировал - что тогда обсуждается? Впрочем, рассуждения о "Каждый" и "Пока" показывают, что с языками программирования вообще, и с 1Сиком в частности - у тебя проблемы. Тут "неоднозначность результата" у тебя - просто из-за незнания. |
|||
236
YV
19.01.11
✎
12:58
|
(0) Жесть ..., ну если уж так надо
Если Условие Тогда // Выполнение программы ЯХочуВыйти = Истина; Если НЕ(ЯХочуВыйти) Тогда // Продолжение выполнения программы КонецЕсли; КонецЕсли; |
|||
237
МишельЛагранж
19.01.11
✎
13:26
|
(234) для Вас это новость?
Для Каждого ... Цикл используется только для обхода коллекций значений. Пока ... Цикл - нет начала, шага и счетчика. (235) согласен только с "с 1Сиком в частности - у тебя проблемы" - как у нормального программиста, пытающегося программировать алгоритмы и быстро их менять, а не спотыкаться об ограничения языка программирования. |
|||
238
Песец
19.01.11
✎
13:43
|
(237) Мы тут отсталые... расскажи, на каком языке ты программировал до одинэсика?
На чем программируют сейчас "нормальные программисты"? Перечисли языки, в которых есть "ПрерватьЕсли". |
|||
239
Lama12
19.01.11
✎
14:01
|
(237)В той теории по структурному программирования, по которой обучался я, основной принцип любой логической структуры - один вход, один выход.
А со всякими прерываниями "Если", получается не один выход. Как вариант - безусловный переход,но он не приветствуется в структурном программирование. |
|||
240
YV
19.01.11
✎
14:02
|
(235) Таки да. При достаточных знаниях и достаточном опыте в программировании (неважно на каком языке), такие проблемы просто не могут возникать. И дело тут не в 1С. Собственно 1С унаследовал от С++ (на котором и был написан) практически все конструкции, предназначенные для таких случаев (break, continue, return).
|
|||
241
Rie
19.01.11
✎
14:05
|
(237) Чтобы рассуждать об "ограничениях языков программирования" - неплохо бы для начала эти языки изучить (а заодно - и базовые понятия программирования). Хотя бы на том уровне, чтобы не путать "счётчик" и "итератор", а также знать разницу между циклами "Для" и "Пока".
|
|||
242
Rie
19.01.11
✎
14:07
|
(238) Есть такой язык :-)
Только и там прерывается не "Если". |
|||
243
Лефмихалыч
19.01.11
✎
14:08
|
нужен эвтаназепам в больших дозах
|
|||
244
aka AMIGO
19.01.11
✎
14:08
|
всё еще из оператора "если" не вышел?
вот это дааа!! :)) эврика, однако.. :) бесконечный квазиоператор цикла, или тупиковая кольцевая рекурсия :) |
|||
245
Лефмихалыч
19.01.11
✎
14:09
|
(244) тупиковая не рекурсия, а ветвь эволюции...
|
|||
246
YV
19.01.11
✎
14:13
|
Если Истина Тогда
КонецЕсли; |
|||
247
ДенисЧ
19.01.11
✎
14:25
|
(232) это полный здец, товарщи...
|
|||
248
МишельЛагранж
19.01.11
✎
16:15
|
(238) на Дельфях.
"Нормальные"? не знаю на чем. А так программирование на С, Фоксе и Дельфях не вызывает таких ожесточенных споров "ты с нами или против нас?!" и "сам дурак". (240) что 1С - потомок С, эт сильно :)) (244) ну там дальше еще выход из Функция...КонецФункции. Есть куда двигаться )))) (246) Если Истина Тогда Лефмихалыч: "тупиковая не рекурсия, а ветвь эволюции..." КонецЕсли; мрачно как-то.... ) (247) не уходите, митинг еще не кончился )) |
|||
249
Denp
19.01.11
✎
16:19
|
(248) а тебя не настораживает, что у тебя не нашлось ни одного единомышленника, а только противники?)
|
|||
250
Ненавижу 1С
гуру
19.01.11
✎
16:20
|
(248) в делфях есть прерывание Если?
|
|||
251
МишельЛагранж
19.01.11
✎
16:33
|
(250) нету. Но и задачи там такие проще решаются.
Для Дельфи полно компонент, которые "хоть как в Ексель", хоть как у марсиан представят визуально данные. И понятно все. Те же циклы: for a := 'A' to 'Z' do while a < 10 do repeat...until а >= 10; И все ясно )) |
|||
252
Denp
19.01.11
✎
16:37
|
(251) а компоненты в дельфи на каком-то другом языке написаны, с прерыванием Если? нет, конечно. Не в языке дело, а в прокладке.
|
|||
253
НЕА123
19.01.11
✎
16:39
|
(251)
понятно. непонятно: что делать, если яйца мешают? |
|||
254
Rie
19.01.11
✎
16:45
|
(251) Набор управляющих структур - практически один и тот же.
Если "такие задачи" (а о задаче сказано лишь - "выход из Если") в Delphi "проще решаются" - поделитесь образцом кода на Delphi, "проще решающего" эту задачу? |
|||
255
МишельЛагранж
19.01.11
✎
16:47
|
(252) не путайте законченный компонент и развивающийся проект.
|
|||
256
Rie
19.01.11
✎
16:48
|
Насчёт "компонент в Delphi" - есть вариант старого анекдота "Сколько программистов на Delphi нужно, чтобы заменить перегоревшую лампочку...".
Похоже, автор - из тех самых "программистов". |
|||
257
МишельЛагранж
19.01.11
✎
16:48
|
(254) я же сказал - и делать бы не стал, взял бы подходящую таблицу-компонент, и работал бы на ней.
|
|||
258
Rie
19.01.11
✎
16:49
|
(255) Особенно компонент, который написал кто-то другой?
(Ибо есть сильное подозрение относительно написания "законченных компонентов" топикстартером). |
|||
259
Rie
19.01.11
✎
16:49
|
(257) YES!!!!
Автор, с Вами всё понятно. |
|||
260
Evgenchik
19.01.11
✎
16:52
|
чем
Пока a < 10 Цикл .. .. а=а+1; КонецЦикла; отличается от while a < 10 do begin .. .. a=a+1; end; ась? |
|||
261
ЗлобнийМальчик
19.01.11
✎
16:53
|
сумасшедший дом какой то
300 постов ни о чем... |
|||
262
Rie
19.01.11
✎
16:53
|
Рано ветка появилась. Не доживёт до пятницы.
|
|||
263
Ненавижу 1С
гуру
19.01.11
✎
16:56
|
видел на форумах по делфе даже "программистов" ищущих готовые компоненты для сортировки массива
|
|||
264
Denp
19.01.11
✎
16:56
|
(262) хорошая пятница приходит в понедельник)
|
|||
265
МишельЛагранж
19.01.11
✎
17:24
|
(263) ну так и перебор букв от A до Z тоже одинаково делается всеми. Тут грань проходит между "часто используемыми алгоритмами" и "встроенная функция".
|
|||
266
Rie
19.01.11
✎
17:35
|
(265) Что такое "встроенная функция" - топикстартер тоже не знает :-(
|
|||
267
ЗлобнийМальчик
19.01.11
✎
17:39
|
(263) почему нет? желаете реализовать сами алгоритм quick sort?
|
|||
268
Rie
19.01.11
✎
17:44
|
(267) Как ни странно, в реальной задаче на Delphi весьма вероятно, что придётся писать свой QuickSort (или другой алгоритм сортировки). А искать готовую компоненту для этого - окажется малоосмысленным занятием.
Артиллерия - она против воробьёв мало эффективна. |
|||
269
МишельЛагранж
19.01.11
✎
17:48
|
(258) я прикладник, а с вашей стороны меня можно обвинить и в "есть сильное подозрение относительно написания "законченных языков программирования" топикстартером ))
Люди и на ассемблере порываются учетные программы писать, а я как-то попроще, взял наработанное - и создал свое на основе. Но вы можете себе и 1С, и Дельфи другие сделать, раз разговор в такое русло пошел ))) |
|||
270
МишельЛагранж
19.01.11
✎
17:51
|
(267) QuickSort потому и быстрая сортировка, что делается на основе быстрого алгоритма и без затей.
И алгоритм qSort никто еще "модифицировать" или менять не сподобился )) |
|||
271
Rie
19.01.11
✎
17:54
|
(269) Дело не в "прикладник", а в элементарном незнании Вами ни инструмента, который используете, ни базовых понятий программирования. Но зато у Вас весьма неплохо с гибкостью пальцев.
|
|||
272
МишельЛагранж
19.01.11
✎
18:00
|
(271) положим, сравнивая 1С с "инструментом", вы погорячились - это, скорей, тачка с колесами разного диаметра и без ручки, в днище которой присутствуют многочисленные, закрашенные краской, дыры.
Что "базовые понятия программирования" (именно программирования, а не 1с-граммирования) не подходят для 1С - тоже убеждался не раз. А теперь вот говорят, что qSort надо заново писать, потому что 1С... Ненавижу 1С... |
|||
273
Rie
19.01.11
✎
18:04
|
(272) Кто Вам говорит, что "qSort надо заново писать, потому что 1С"? (Это по поводу того, что Вы не читаете того, что Вам пишут).
Что же касается Вашего мнения по поводу 1С - оно ничтожно. Поскольку 1С Вы не знаете. И базовых понятий программирования тоже не знаете - независимо от того, 1С или какую другую систему Вы используете. Знали бы - не начинали эту тему (в Delphi, замечу, тоже нет выхода из условного оператора; так что если бы Вы умели писать программы на Delphi, идея "выйти из Если" Вам просто в голову не пришла бы). |
|||
274
supremum
19.01.11
✎
18:04
|
(272) Для плохого скрипача и скрипка Страдивари будет деревом, а хороший и на одной струне сыграет ;)
|
|||
275
YV
19.01.11
✎
18:07
|
(248) Не потомок и не С, а написан на С++.
|
|||
276
AlteZ
19.01.11
✎
18:12
|
(272) заинтересовали дыры, хоть и оффтоп, но для вкручивания вожделенного интелисенса может одну посоветуете?
|
|||
277
МишельЛагранж
19.01.11
✎
18:15
|
(273) дорогой Вы мой человек, такая идея мне НИКОГДА не приходила в голову, пока не пришлось заниматься 1С.
ну дальше из цикла "сам дурак" )) (274) то-то "однострунные" типовые и вызывают столько споров... в отличие от "страдиварей", на которых 1С и написана. (275) Вы сказали - "унаследовал от С". Если я перевожу легковушку на на тягаче - легковушка тоже потом сможет бревна ворочать? )) |
|||
278
МишельЛагранж
19.01.11
✎
18:16
|
(276) чего вкручивания? вы или по 1С-фене давайте, или по-русски. Если ничего другого не знаете ))
|
|||
279
Rie
19.01.11
✎
18:21
|
(277) А зачем Вам понадобилось _в 1С_ "выходить" из условного оператора? И почему Вам не приходила эта идея в голову, когда Вы якобы "писали на Delphi"?
(Ответ на этот вопрос известен - Вы и на Delphi толком ничего не писали). |
|||
280
Rie
19.01.11
✎
18:22
|
Такое ощущение, что нас вновь посетила Света Семененко.
|
|||
281
ILM
гуру
19.01.11
✎
18:27
|
(271) Пять лет назад, переползая с Delphi7+Oracle на 1С+MS SQl - тоже так думал! А сейчас другого мнения. Нужные задачи нужно решать нужными инструментами.
У вас такое мнение об 1С пройдет месяцев через шесть-десять... Если БудетеДальшеПрограммироватьВ_1С Тогда ПоменяетеМнение = Истина; Иначе ПоменяетеМнение = Ложь КонецЕсли; |
|||
282
ILM
гуру
19.01.11
✎
18:28
|
Упс (281) к (272)
|
|||
283
Hawk_1c
19.01.11
✎
18:37
|
Не поленился. Дочитал, автор жжет... Пример на другом языке выхода из "Если" в студию плиз.
|
|||
284
GreyK
19.01.11
✎
18:38
|
Это столько речей про IF и GoTO?
А если автор ТС что в 7ке функция Число("000001.1111....") выдает результат? Банить ТС пожизненно :) |
|||
285
GreyK
19.01.11
✎
18:40
|
"А если автор ТС что в 7ке функция" = "А если ТС узнает что в 7ке функция"
|
|||
286
YV
19.01.11
✎
19:11
|
(277) Во-первых я не писал С, я писал С++, а это это два разных языка.
Во-вторых "унаследовал" всего-лишь означает, что разработчики языка 1с позаимствовали некоторые идеи из С++, на котором собственно 1с и писали, а вовсе не то, что 1с является наследником С++ или С. К слову, прямыми наследниками С можно считать С++ или Objective-C, родственными языками - Java или С#, но никак не 1с. |
|||
287
aka AMIGO
19.01.11
✎
22:17
|
(278) - не, насчет вкручивания интеллисенса в (276) написано корректно, и именно по фене-1С :)
если не слыхал, существует опенконф, без которого нормальные(паранормальные :) ) одноэсники не мыслят себе жизни в конфигураторе! ибо, вкусивший хоть раз этого продукта, засунутого в закрашенную 1С-дыру, подседает на него навсегда.. :) опенконф и включает в себя интеллисенс :) кхм.. куху.. мда.. :)) |
|||
288
orefkov
19.01.11
✎
22:36
|
Да, как говориться - неча на зеркало пенять, коли рожа крива. Классический пример. Делириум тременс таксать.
|
|||
289
Lama12
19.01.11
✎
22:51
|
(272) Так... для просвещения... на платформе 1С и шахматы написаны.
По поводу общей теории программирования. Программа легко модифицируемая, стоит дороже быстро работающей (исключения составляют системные программы для встроенных систем и то это не на долго). Структурное программирование зарождалось как раз для того чтоб легко поддерживать программу (один из первых шагов на данном пути). Досрочный выход из "Если" можно сделать только безусловным переходом с поломкой логической структуры кода. |
|||
290
vudo
19.01.11
✎
22:52
|
от (0) до (289) У меня жена работает с населением и уже более 13 лет, так вот самые тяжелые дни - это в полнолуние(статистика)... Такие экземпляры приходят, жесть! Я это к тому, что в полнолуние странные мысли посещать могут, например (0). Сегодня ведь полнолуние, а протянется это еще 2-3 дня... М-да... Ждем свежих идей. :-)
|
|||
291
orefkov
19.01.11
✎
23:00
|
(276)
Что, настолько уж вожделенный? Штатного не хватает? Таки есть такие дыры! v8: Требуется оттестить на 8.2 http://www.1cpp.ru/forum/YaBB.pl?num=1166788221/49#49 |
|||
292
Fynjy
19.01.11
✎
23:14
|
Чем страшен GOTO ... Моя не понимать ... Кому то потом будет читать код? Да по(-), нет да наср(-), то же нет ... А по барабану на того кто будет читать код ...
|
|||
293
orefkov
19.01.11
✎
23:17
|
(292)
GOTO страшен тем, что в (124) он у человека в 1С криво работает. Промахивается мимо меток что-ли? Непонятненько как-то. |
|||
294
YF
19.01.11
✎
23:18
|
Не удержался, закладочку поставлю. В особо грустные времена буду перечитывать ...
|
|||
295
Fynjy
19.01.11
✎
23:19
|
(293) В интерес на истината GOTO има в много повече езици, отколкото изглежда. … Страшен спор се е развихрил ... За Фортрана мога да кажа само един основен недостатък - няма поддръжка.
|
|||
296
Fynjy
19.01.11
✎
23:21
|
(294) вот это почитай http://forum.offroad-bulgaria.com/showthread.php?t=8428&page=2 : ))))
|
|||
297
aka AMIGO
19.01.11
✎
23:27
|
(296) во, блин!! ""Използването на GOTO автоматично означава че програмиста е слаба ракия...""
и българы туда-ж :) |
|||
298
aka AMIGO
19.01.11
✎
23:30
|
""Има една теорема на .. "" - ну, всё, как у нас, на мисте :))
""Някво рядко име беше. В нея се доказва принципната невъзможност за генериране на код без нито една грешка по-дълъг от колко там реда беше."" - ну, прям бальзам на душу :)) |
|||
299
vudo
19.01.11
✎
23:42
|
Вот переделал немного фразу из (292), по моему сильно получилось! :-)
Чем страшен GOTO Мне не понять Кому то что-ли код читать? Да по(х-ю)... Да нет! Наср(-)! И по барабану на того Кто будет код читать!!! |
|||
300
AlteZ
20.01.11
✎
00:10
|
(291) Красава! Успею за билетом на БТ?
|
|||
301
МишельЛагранж
20.01.11
✎
08:46
|
(292) Даже синтаксис пугает )):
Перейти ... ~Метка ("Джек Воробей, а ну-ка, покажи свою ладонь... Это же черная метка!!!"). Собственно, именно так он у меня и (не)заработал )) |
|||
302
МишельЛагранж
20.01.11
✎
08:56
|
(298) что-то сомневаюсь я, что Вы болгарский знаете, най-умен ))
"""Някво рядко име беше. В нея се доказва принципната невъзможност за генериране на код без нито една грешка по-дълъг от колко там реда беше."" - ну, прям бальзам на душу :))" - допуснал бе обаче една глупава грешка, и то защото беше попретупал предварителната си подготовка |
|||
303
Aprobator
20.01.11
✎
09:18
|
ппц - на ровном месте такую бодягу раздуть. Вот что значит на работе реально нечем заняться.
|
|||
304
МишельЛагранж
20.01.11
✎
09:33
|
(276) вон вы про что - про опенконф. Так на 8-ке его не было еще, и когда будет - неизвестно ))
Вот уважаемый Орефков, наверное, знает )) Я не про повторно юзаемые дыры в целях раздербанить 1С и сделать её путной системой, а про явное решето. Дятел первый: Если вы в нормальной базе определяете в СУБД тип хранимых данных, то там НИКОГДА и НИЧЕГО кроме этого типа хранится не может и не будет. А в 1С в точно таком же "строго" фиксированном по типу данных поле может появиться и NULL, и <Объект не найден фигня-типа-идентификатор-20-ти-значный>, и еще чего там в голову сбрело сунуть, что больше некуда поместить. И кранты вашему запросу, ищите, где "умный" менеджер накосячил (и ловите его, и кол тешите на голове, пока он не ушел и не стал таким "умным" 1С-ником :))) |
|||
305
МишельЛагранж
20.01.11
✎
09:48
|
(286) если бы они идеи позаимствовали и смысл, для чего пишутся языки программирования, мы бы с Вами здесь не сидели и гундели )), а две трети топиков на Мисте просто бы не существовала.
Всем желающим поймать ТС "а где такой есть?!" "а нигде нету!": Во-первых, везде железно работает Goto. Но только в 1С с ним какие-то заморочки. Во-вторых, вот пример родственника If в С++ - оператор выбора (switch): есть безусловный выход по break. Провокации от Rie понятны и простительны. Свете привет )) |
|||
306
Asmody
20.01.11
✎
09:53
|
На 300+ веток растянули эту глупь? Да вы охренели!
|
|||
307
МишельЛагранж
20.01.11
✎
10:06
|
(303) так вы еще работаете? а мы уже тут реально выживаем.
с голоду вот обмороки. |
|||
308
kosts
20.01.11
✎
10:11
|
(305) >>Во-первых, везде железно работает Goto. Но только в 1С с ним какие-то заморочки.
Какие еще заморочки. Никаких заморочек нет. Перейти ~Метка; ~Метка:; Всегда работало без проблем... |
|||
309
kosts
20.01.11
✎
10:13
|
(304) Если вы в нормальной базе определяете в СУБД тип хранимых данных, то там НИКОГДА и НИЧЕГО кроме этого типа хранится не может и не будет.
Пример в студию, а то может я что-то пропустил... :-) |
|||
310
МишельЛагранж
20.01.11
✎
10:15
|
(309) какой вам пример? если поле определено как Double, вы что - туда String загоните? ну-ну. 1С еще не этому научит ))
(308) а "~метка" - пример работающий можно? вот не хочет она понимать метки, ругается, сама черную метку выдает )) |
|||
311
kosts
20.01.11
✎
10:25
|
(310) В (308) рабочий код.
// код Перейти ~Метка; // код ~Метка:; // код |
|||
312
kosts
20.01.11
✎
10:27
|
(310) >>какой вам пример? если поле определено как Double, вы что - туда String загоните? ну-ну. 1С еще не этому научит ))
Ни разу в числовых полях не встречал посторонних символов. (Не считая конечно частичного разрушения БД при сбоях). |
|||
313
МишельЛагранж
20.01.11
✎
10:33
|
(312) вы пример посмотрите внимательней - 1С сама напридумывала себе работы (типы справочников и прочее), сама же толком не сумела это реализовать (фиг вы сделаете новый справочник и что-то в нем поменяете - только копия существующего функционала), потом снова требует соответствия этим типам (иначе проверки типов не сойдутся), а если пришел вот такой "тип" <Объект не найден фигня-типа-идентификатор-20-ти-значный> - сама же и ругается "не могу ничо сделать, тут не совпадает, примите телефонограмму и срочно выезжайте на место", вместо того, чтобы обработать это все дело, раз уже позволила себе в ячейку "это" вписать.
|
|||
314
Rie
20.01.11
✎
10:40
|
(305) Какие провокации?
Я просто говорю "программисту" МишельЛагранж, умеющему лишь гнуть пальцы, что он кроме как гнуть пальцы, ничего не умеет. Это незнание и неумение подтверждается, в частности постами МишельЛагранж (232), где автор расписался в своём незнании операторов цикла, (304), где автор показывает непонимание того, что такое "ссылочная целостность", а также незнание разницы между NULL и "битой" ссылкой, и, наконец, (305), где автор выдал очередной перл относительно C++, не удосужившись разобраться в различиях между switch и if, пытается выдать анахронизм за достижение. |
|||
315
Rie
20.01.11
✎
10:41
|
+(314) Ну и, выполняя просьбу, передаю:
МишельЛагранж , тебе просили передать "Привет!". |
|||
316
МишельЛагранж
20.01.11
✎
11:24
|
(314) ой анахронизм, конечно ))
из версии в версию десятилетиями гуляет. Скажите еще - С++ анахронизм, а С# - наше все. Далее. Это горячо любимая 1С не знает разницы между ними, знала бы - не спрашивала. Ну остальное понятно, вам простительно и даже не обидно )) +(315) пусть заходит на огонек )) |
|||
317
МишельЛагранж
20.01.11
✎
11:31
|
да, Переменная = NULL ||| ЛОЖЬ
- это тоже по 1с-овски, зачетнО и грамотнО. Ввести тип непонятно зачем, а потом с "честью" придумывать где его можно употреблять и как его готовить )) |
|||
318
Rie
20.01.11
✎
11:34
|
(316) Слово "совместимость" ничего не говорит? Это насчёт того, почему "из версии с версию десятилетиями гуляет". Ну то, что switch - это родственник вовсе не if, а "вычисляемого goto" - это для МишельЛагранж явно будет открытием.
Что касается "1С не знает" - да нет, не 1С не знает, а МишельЛагранж не знает, что означает "Объект не найден фигня-типа-идентификатор-20-ти-значный>". И даже рискну предположить, что понятие "первичный ключ" для МишельЛагранж - тайна великая есть, и что такое GUID - он ни разу не слышал. Впрочем, разгадка может оказаться куда проще. МишельЛагранж - обычный тролль. |
|||
319
Rie
20.01.11
✎
11:35
|
(317) SQL тоже не знаете? Ну-ну...
|
|||
320
Песец
20.01.11
✎
11:52
|
Нет, это не Света... В тупизме не хватает искрометности :(
Но все равно - аутор, пеши исчо! |
|||
321
МишельЛагранж
20.01.11
✎
11:57
|
(318) этим теперь заканчиваются все диспуты на Мисте? похвально.
Верной дорогой идете. |
|||
322
МишельЛагранж
20.01.11
✎
12:04
|
+(321) вот поэтому я смеюсь, когда мне говорят о развитии программирования в России. И хохочу, когда утверждают, что 1С - среда разработки.
|
|||
323
Rie
20.01.11
✎
12:09
|
(322) Смех без причины - признак...
|
|||
324
Rie
20.01.11
✎
12:16
|
(321) Диспут? Какой диспут, если Вы просто троллите?
Оставляем в стороне Ваши суждения об 1С - эту систему Вы попросту не знаете. Но Вы же и ничего другого не знаете! Вы не знаете даже операторов цикла (если делаете заявления о "счётчиках" в for each и while). Не знаете, что NULL - это изобретение не 1C, а "наследие" SQL. Не знаете, что из себя представляют компоненты Delphi, в каких случаях их следует создавать, а когда - не стоит. Не знаете, что switch в C++ - это _не_ структурный оператор, а аналог goto, и внутрь оператора switch можно смело входить, минуя заголовок. И т.д. |
|||
325
fisher
20.01.11
✎
15:04
|
(322) Это уже троллинг? По-поводу языков программирования, NULL и т.п? Или вы действительно неуч?
А так перспективно начиналась ветка... Думал разбогатеть на примерчик, когда гоуту повышает читабельность кода... |
|||
326
МишельЛагранж
21.01.11
✎
12:22
|
Знатокам программирования посвящается
(325) почти пример необходимого использования GoTo. Что GoTo читабельность кода повышает - это откуда взялось? Разве что лишнего кода писать не надо )) Ладно, пример: Процедура КоманднаяПанель2Кнопка(Кнопка) Если ВвестиЧисло(Число, Текст) Тогда Для Каждого Стр Из ОТ Цикл //Перерасчет данных по ОТ: РасчетДанных(Стр); КонецЦикла; КонецЕсли; КонецПроцедуры Процедура РасчетДанных(ТекДанныеСтроки) Если ТекДанныеСтроки.Приоритет1 И НЕ ТекДанныеСтроки.Приоритет2 Тогда Если НЕ ЗначениеЗаполнено(ТекДанныеСтроки.Длина) Тогда Предупреждение("Введите значение длины!", 5); //ЗДЕСЬ ВЫХОД НА ПРЕДЫДУЩУЮ ВКЛАДКУ И ЗАПОЛНЕНИЕ ДЛИНЫ (1) ИначеЕсли НЕ ЗначениеЗаполнено(ТекДанныеСтроки.Ширина) Тогда Предупреждение("Введите значение ширины!", 5); //ЗДЕСЬ ВЫХОД НА ПРЕДЫДУЩУЮ ВКЛАДКУ И ЗАПОЛНЕНИЕ ТОЛЩИНЫ (2) КонецЕсли; ТекДанныеСтроки.Площадь = ТекДанныеСтроки.Длина * ТекДанныеСтроки.Ширина; ИначеЕсли ТекДанныеСтроки.Приоритет2 И НЕ ТекДанныеСтроки.Приоритет1 Тогда ТекДанныеСтроки.Площадь1 = ТекДанныеСтроки.Площадь2; КонецЕсли; КонецПроцедуры Поля Ширина и Длина оказались незаполнены (или 0). Нужна проверка. Варианты проверки введенных данных: 1) Проверка при вводе невозможна - Длина и Ширина могут быть введены, могут быть и не введены, в зависимости от выставленных приоритетов. Какой приоритет и что заполнять - решает оператор при заполнении. 2) Проверка при выставлении приоритетов - тогда при переключении приоритетов будут постоянно выскакивать назойливые предупреждения. Не вариант. 3) При начале расчета: проверка введенных данных в зависимости от приоритета и введенных данных. Расчет вызывается из разных мест (кнопками, при переключении вкладок, изменении полей). Вызов расчета и ввод данных не являются непрерывным потоком. Не вариант. Тут же - вынесение проверки в отдельную функцию и вставка вызова проверки везде, где вызов расчета. 4) Проверка в самом расчете, передача флагов "наверх", вставка везде "Если Ошибка Тогда ..." Искать все входы в Расчет, введение флагов, дополнительных параметров в вызов, не забыть изменить во всех точках вызова. В идеале проверка должна быть в одном месте и именно перед самим расчетом - т.е. в (1) и (2). С полным выходом из всех Если, Циклов и процедур. |
|||
327
МишельЛагранж
21.01.11
✎
12:35
|
(319) NULL в C - это указатель на нулевой указатель, или ссылку на заведомо несуществующий адрес в памяти.
И каким образом "NULL" оказался вдруг "наследством" в 1С от SQL, которое якобы "платформенно-независимое", и 1С понадобилось "из-за этого" коверкать язык запросов и выдумывать свои наклейки - большой вопрос. В том числе и к вам. |
|||
328
fisher
21.01.11
✎
15:21
|
(326) Если честно - сходу в твой <irony> предельно наглядный и понятный </irony> пример не врубился, а телепатировать именно сейчас нет не времени ни желания (хотя обычно неплохо получается). Ладно, я догадался что речь о проверке заполнения данных каких-то строк и расчет их в зависимости от выставленных "приоритетов". Дальнейший поток сознания я нифига не понял и даже на всякий случай отключил мозг, опасаясь перегрева. Что такое "выход на предыдущую вкладку" в контексте проверяемой строки - осталось для меня тайной за семью печатями. Давай так - не пость сюда свой код, он только смущает. Сделай человеческую постановку задачи (без своих рассуждений о методах реализации. просто озвучь задачу). Мы её обсудим и код я тебе сам напишу. Без всяких гоуту.
Теперь вот что - ФИЗИЧЕСКИ НЕОБХОДИМОЙ потребности использования гоуту НЕ БЫВАЕТ! Без него можно обойтись ВСЕГДА. Это математически доказано. Оператор существует до сих пор только потому, что очень редко его использование всё-таки упрощает код. Поэтому его использование и может оправдываться только повышением читабельности и упрощением кода. Теперь по-поводу NULL. Возможно для тебя будет новостью, но NULL используется практически во всех SQL-диалектах. И поверь мне на слово - не спроста. А 1С (возможно это тоже будет для тебя новостью), в отличие от "чистых" языков является предметно-ориентированным, неотделимым от работы с базой данных в рамках своего предметно-ориентированного фреймворка. Так что NULL в 1С - абсолютно логичное наследство SQL, т.к. язык запросов 1С является по сути диалектом SQL (предметно-расширенным). И вне контекста работы с базой данных NULL в 1С не то что не используется - просто не имеет смысла. То, что null у тебя стойко ассоциируется с си - это твои проблемы. То, что ты не в курсе что такое NULL в SQL и почему его нельзя заменить ни "Неопределено" ни пустым значением - это опять-таки твои проблемы. |
|||
329
МишельЛагранж
22.01.11
✎
15:33
|
(328) можно и без GoTo, все GoTo заменяются на "Если ... То". Когда имеешь на руках всю информацию. А когда нет - либо пишешь все заново (за те же деньги), либо обходишь (через Перейти или еще как придумаешь).
() Выход на вкладку - это переход на форме на другую вкладку. Задача поставлена предельно ясно - без переписывания кода закрыть все циклы и выйти из нагромождения других условий туда, где код работоспособен. Модель задачи давно поставлена еще в (225). Я рассматриваю 1С как отдельную среду разработки, Вы (и многие остальные здесь) - рассматриваете 1С так, как скажет в последней пресс-конференции сама 1С. И оправдаете любой разворот линии партии, все петляния и хождения на 180 градусов, все возвращения и прыжки чем угодно, лишь бы не портило картину "славности" 1С. Оправдаете даже "наследством" любых языков, которые "якобы" 1С и хотела заменить собой (С, SQL), наследством СУБД, которые 1С тоже хотела заменить, раздуваясь в щеках (SQL, Oracle). И уже 1С-последователям не важен смысл того или иного, для чего это было "в Си" или в "в SQL", или еще где; какие вообще направления важны и какие задачи должен решать язык разработки, а какие - СУБД, и как они должны взаимодействовать, чтобы решение было максимально эффективным - все это остается далеко за рамками и в лесу лозунгов "Зато это 1С!". Так зачем было тогда весь огород городить с разработкой своего языка, 1С-сервера и прочего, когда 1С потом воспитывает таких вот "ура"-программистов? |
|||
330
МишельЛагранж
22.01.11
✎
15:42
|
Когда начинаешь спорить с 1С-овцами, все сводится к "зато где ты регистры найдешь?! А вот План счетов сделать? А?!".
Ну так и оставалась бы 1С на бухгалтерии, для чего создавалась, разрабатывалась, и которая кроме 1С больше никому для автоматизации не нужна. Вот тут все выкрики о всемогуществе 1С как раз были бы в тему и по назначению. |
|||
331
fisher
24.01.11
✎
11:52
|
(329), (330) Какие-то детские нападки, чесслово. Если на то пошло, велосипеды с квадратными колесами 1С изобретала в 7.7
В 8-ке всё достаточно грамотно сделано, по моему мнению. Но моё мнение можно выбросить в топку, ведь я уже заочно записан в "ура"-программисты... Прежде чем хаять всех и вся, лучше в своем глазу бревна поищите. Их там достаточно, как по мне. Я, кстати, давно заметил, что настоящим программистам на самом деле пофиг в чём програмить. Их неотъемлемая черта - обучаемость и прагматичность. Они везде в первую очередь видят положительные моменты и подходящие сферы применения. Корни неприятия 1С у горе-прогов лежат в предметной заточке 1С. Т.е. фреймворк не "чистый", а заточен на решение учетных задач. А опыт многих горе-программистов, гнущих пальцы, зачастую ограничивается написанием парочки утилиток на дельфях. Они просто не в курсе тех проблем, которые возникают перед разработчиком более-менее серьезной учетной системы. Ибо квалификация не та. Тут как минимум на СУБД нужно собаку съесть. В итоге плюсов они не видят или они представляются им несущественными, зато отличия работы и написания какого-то оператора в сравнении с привычной им средой разработки вызывают у них лютое неприятие и вопли ненависти. |
|||
332
Песец
24.01.11
✎
13:03
|
(329) "...без переписывания кода ... выйти ... туда, где код работоспособен".
Да уж... тут без ПрерватьЕсли никак не обойтись. |
|||
333
Odavid
09.02.11
✎
23:24
|
А вот у меня пример на GoTo:
Здесь замена условия в запросе в зависимости от данных документа. Как не повторяя кода - перестроить все Если...Тогда, чтобы условие 2 не повторялось (т.е. каждое условие должно быть в одном месте и один раз)? Если ЗначениеЗаполнено(НазваниеПолное) Тогда Если НЕ ДокОснование.Пустая() Тогда //условие 1: СтрЗаменить(ТекстЗапроса, "УсловиеЗапроса", "РегистрПромежуточный.Регистратор = &РегСсылка" Запрос.УстановитьПараметр("РегСсылка", ЭтотОбъект.ДокОснование); Иначе //здесь - подстановка условия 2 КонецЕсли; Иначе //условие 2: СтрЗаменить(ТекстЗапроса, "УсловиеЗапроса", "РегистрПромежуточный.Ответственный = &Пользователь" Запрос.УстановитьПараметр("Пользователь", ЭтотОбъект.Ответственный); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |