Оператор GOTO в 1С - табу или волшебная палочка?

0. Dementor 945 19.02.23 15:00 Сейчас в теме
В ежедневной практике программирования на платформе 1С оператор Goto (Перейти) практически не встречается. Не удивительно, что половина специалистов даже не подозревает о существовании данного оператора. Ну, а знающим он внушает ужас, и его стараются избегать. Так что же это за редкий оператор, и для чего он нужен?

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6454 19.02.23 16:11 Сейчас в теме
я забыл уже что он есть, спасибо, вспомнил!
user1900957; ubnkfl; kas1989; maksa2005; AllexSoft; Sword; lostcay; mrChOP93; t278; +9 Ответить
2. maximpl 19.02.23 18:00 Сейчас в теме
А для пункта 2, такой вариант чем хуже (в смысле, использовать в процедурах Возврат):
Код
EvilMilko; eden; independ; quazare; +4 Ответить
3. Dementor 945 19.02.23 19:22 Сейчас в теме
(2) у вас правильная декомпозиция. Но я сделал упрощенный пример - на практике с этим деревом может быть связано еще несколько расчетов да и происхождение может быть мутным (первоначально делали запрос для вывода отчета, а потом делаем второстепенные расчеты, которые не смогли выразить с помощью языка запросов). Тогда будем делать еще больше процедур, а потом героически пытаться в них не запутаться?

Т.е. у вашего решения есть плюс - не нужно вручную отслеживать наименование меток, можно использовать подсказки от EDT. Но есть и минусы - кода банально больше и возникает задача его упорядочить; появляются уровни абстракции усложняющие доработку, контекст модуля разбухает и потребляет чуть больше ресурсов.

P.S. Тогда и от Прервать/Продолжить можно отказаться - все отлично декомпозируется на систему вложенных процедур и функций.
4. maximpl 19.02.23 19:50 Сейчас в теме
(3) Спасибо, за развёрнутый ответ. )))
6. maximpl 20.02.23 07:32 Сейчас в теме
(3) Можно еще такой вариант, вроде нет озвученных недостатков (100% не гарантирую, не отлаживал, но как "мысль"):
КОД

Про "Перейти" из 1С ИТС
17. ivanov660 3881 20.02.23 15:07 Сейчас в теме
(3) Так если вы делали одно, а потом начинаете поверх пилить другое, то нужно остановиться и "переосмыслить". А не продолжать или начинать костылить.
user595646_formsg2007; ProgrammistC; eden; user1580936; +4 Ответить
47. caponid 21.02.23 03:20 Сейчас в теме
(2) Почему то мне кажется, что это код неправильно построен на уровне запроса
user1564146; +1 Ответить
5. DrAku1a 1590 20.02.23 05:40 Сейчас в теме
В типовых конфигурациях 1С данный оператор не применяется, за очень редким исключением (для быстрого выхода из вложенных циклов).
Скорее всего, про это есть в стандартах методик разработки.

Также, в типовых конфигурациях стараются избегать конструкций Попытка - Исключение. Пользователю надо показывать ошибки, чтобы он реагировал и звал программиста. Плюс, "Попытка-Исключение" - это часто лень разработчика (ON ERROR RESUME NEXT). Будет вторая статья на эту тему?))
8. paramedic 20.02.23 10:04 Сейчас в теме
(5)В типовых избегают Попытка-Исключение? Не смешите мои подковы. Да в типовых этой конструкции хоть лопатой жри.
Лень программиста писать обработку исключений - не повод для игнорирования конструкции очень важной для избегания падения критического кода во время исполнения.
Кроме того, это единственный способ не обрушить программу при выполнении явных преобразований типов.
kas1989; anvolkov1cbit; AllexSoft; cdrw3; Sword; +5 Ответить
10. DrAku1a 1590 20.02.23 12:18 Сейчас в теме
(8) Возьмите типовую (БП, КА, УТ и т.п.) и подсчитайте - сколько раз встречается отдельно слово "КонецПопытки;" во всех модулях, и сравните это с количеством, например "КонецЕсли;" или "КонецЦикла;".
Вот пример:
БП 3.0.130.22
"КонецПопытки;" =   9 935 раз;
"КонецЦикла;"   = 147 801 раз; (почти в 15 раз больше)
"КонецЕсли;"    = 632 876 раз; (почти в 64 раза больше)
Вот из этого я делаю вывод, что 1С старается избегать конструкций "Попытка-Исключение". То есть, по-возможности не использовать, но в крайних случаях - это допустимо.
Перейти ~       = 24 раза; 
И все 24 раза - в двух отчетах:
Отчет.РегламентированныйОтчетПрибыльИностраннойОрганизации.Форма.ФормаОтчета2007Кв1.Форма.Модуль;
Отчет.РегламентированныйОтчетПрибыльИностраннойОрганизации.Форма.ФормаОтчета2014Кв1.Форма.Модуль
Прикрепленные файлы:
12. gybson 20.02.23 12:46 Сейчас в теме
(10)Мне просто интересно, а где вы видели такой типовой код, в котором не стали делать попытку-исключение, хотя могли бы?
48. DrAku1a 1590 21.02.23 06:39 Сейчас в теме
(12) Я не анализирую на "вот тут можно было бы поставить Попытка-Исключение", но на вскидку - любой код вида
Если Делитель<>0 Тогда
	Частное = Делимое / Делитель;
Иначе
	Частное = 0;
КонецЕсли;
можно заменить на
Попытка
	Частное = Делимое / Делитель;
Исключение
	Частное = 0;
КонецПопытки;
, но методологически это неправильно. Т.к. такая обработка ошибок затрагивает и нештатную ситуацию, когда в Делитель не число, а, например, дата (или Ссылка, или Неопределено, или...).

(18)
КонецПроцедуры  = 301 557 раз;
КонецФункции    = 100 707 раз;
Суммарно(кп+кф) = 402 264 раз;
//(кп+кф) = (КонецПроцедуры + КонецФункции)
- сопоставимо с "КонецЕсли;", порядок тот-же.

(42)
это очень МНОГО РАЗ!
Это примерно 2,5% кода. А если сравнивать количество строк, обернутых в Попытка-Исключение с общим количеством строк - процент будет меньше.

(34) Техподдержка, пользователь присылает скриншот ошибки, доступа в базу пользователя нет (в журнал не зайти). Связи с пользователем нет. Раньше по скрину ошибки можно было хотя-бы увидеть строку кода, найти и проанализировать его, сейчас - нет.

(35) Работу с транзакциями стараюсь всегда делать без Попытка-Исключение. При исключениях, как и при выходе из процедуры, если транзакция не была зафиксирована - происходит *. Обработку больших массивов данных - тоже стараюсь делать без попыток, и, например, при обмене данными 1С - если происходит ошибка, предпочтительнее завалить обмен, чем продолжать грузить инфу с непонятными искажениями. Если же выбирается "продолжить в случае ошибки", то как минимум, ошибки эти где-то нужно собирать и мониторить.

(43) Согласен с Вами. Судя по обилию комментариев и интересу к теме - надо бы написать статью))

--
Писать код, который будет избегать ошибок (с проверками на тип данных, на наличие поля у справочника и т.п.) - всегда сложнее, чем воткнуть "Попытка - Исключение", но использовать второй вариант - это, скорее, лень программиста. Вот я о чем толкую.
Однако, всё-же, есть фрагменты кода, где нет возможности избежать исключительных ситуаций (например, работа с внешними обработками, работа с интернет-функциям), но нужно их обработать и при ошибке выполнить альтернативный алгоритм.
50. Brawler 441 21.02.23 08:06 Сейчас в теме
(48) не нужно в попытку пихать деление и ловить ошибку деления на ноль
Сама по себе попытка это же не некое условие, а обработка нештатной ситуации во время которой платформа выполняет затратные по ресурсам операции, строит тот же стек вызова, формирует там у себя в мозгах текст ошибки и прочие прелести, что явно дольше отрабатывает нежели проверка на 0 в простом Если. Можно конечно тип переменной еще проверить и если не число тогда ошибку выкинуть самостоятельно мол типа чего вы пытаетесь число на строку поделить, но это уже тоже вызывает доп расходы на вычисления этих типов данных. Тут бы помогла статическая типизация но ее в 1С нет.
54. gybson 21.02.23 09:18 Сейчас в теме
(48) Надо проанализировать и потом выдвигать утверждение, а то балаболом назовут.
18. ivanov660 3881 20.02.23 15:12 Сейчас в теме
(10)Не корректная оценка. По вашей логике в попытку исключение нужно заворачивать каждую строчку кода, но у этого оператора определенная область применения. Сравните с количеством функций и процедур.
kuntashov; Brawler; +2 Ответить
42. Brawler 441 20.02.23 21:42 Сейчас в теме
(18) Вынужден согласиться с вами!

Можно так же смело заявить, что 1С умышленно не использует циклы с условием (Пока условие Цикл), и везде их заменяет на Циклы типа Для Каждого или Для Индекс = 0 По...

Конечно же всему свое применение и назначение.

А
"КонецПопытки;" = 9 935 раз;
это очень МНОГО РАЗ!
9. Dementor 945 20.02.23 10:50 Сейчас в теме
(5) Статья на тему Try-Catch ? А смысл? Все и так используют этот оператор настолько часто, что теперь трудно находить ошибки банальной галочкой "остановка по ошибке".

А вот если бы существовала альтернативная Попыткам методология написания стабильного кода, то это реально хорошая тема для статьи.
13. gybson 20.02.23 12:48 Сейчас в теме
(9) Попытка-исключение не скрывает ошибку от этой галочки, остановка произойдет.
bilex; Brawler; +2 Ответить
52. user1513764 21.02.23 08:34 Сейчас в теме
(13) да блин, вы не в теме.
Речь о том, что пока ты доберешься до своей РЕАЛЬНОЙ ошибки - тебе надо продраться через тонну остановок в местах где прогеру тупо лень было типы значений проверить.

И использовать «остановку по ошибке» уже не хочется. Потому что палец на ф5 уже устал.

Моё мнение - попытка должна быть только в проде в критичном коде в новых участках (чтобы точно не упало) при срочной доработке
odinsmot; Evg-Lylyk; CnupT; zqzq; +4 Ответить
55. gybson 21.02.23 09:22 Сейчас в теме
(52) Мне очень жаль, что вы работает с настолько кривой конфигурацией. В моей практике такого не было.
43. Brawler 441 20.02.23 21:47 Сейчас в теме
(9) Ошибка это в Исключение проглатывать ошибку и ничего не делать.

Код
Попытка
    // делаем что-то умное приводящее к ошибке
Исключение
    // ничего не делаем
КонецПопытки;
Показать полностью


Я наоборот часто делаю эскалацию ошибки выше, чтобы вызывающий код страдал от своей тупости что передает невесть что приводящее к ошибкам.

Код
Попытка
    // делаем что-то умное приводящее к ошибке
Исключение
    // делаем что-то умное, что обязательно надо сделать при возникновении ошибки
    ВызватьИсключение; // даем вызвавшему коду понять что он олень
КонецПопытки;
Показать полностью
user1580936; DrAku1a; +2 Ответить
11. gybson 20.02.23 12:44 Сейчас в теме
(5) Если вы показываете пользователю ошибки 1С, то вы злодей, а не программист.
34. w.r. 639 20.02.23 21:06 Сейчас в теме
(11)

Ошибки можно писать в журнал регистрации. Пользователю можно выводить нужное сообщение без стэка с кодом 1с. В новых версиях платформы реализовали на уровне платформы уже
35. w.r. 639 20.02.23 21:10 Сейчас в теме
(5)

Интересно, как вы работу с транзакциями организовываете без попытка-исключение или обработку больших массивов данных
7. dsdred 2612 20.02.23 08:28 Сейчас в теме
Использую в тех случаях когда использую выполнить.
karpik666; DrAku1a; Dementor; +3 Ответить
14. paramedic 20.02.23 13:01 Сейчас в теме
(10) Не сравнивайте жопу с пальцем. Вы бы еще сравнили с количеством "КонецПроцедуры" и "КонецФункции". Никто не говорит, что Попытку надо пихать во все щели.
Судя по вашей логике, разработчики так же против использования транзакций - всего 1368 раз встречается НачатьТранзакцию() в той же УТ (это у меня еще и с кучей расширений, а если брать "чистую", то еще меньше)
А использовать GoTo народ просто фактически не умеет - выросло уже не одно поколение прикладных программистов, которые фактически даже не знают что это такое и для чего нужно. Поэтому-то и обфускация множественными goto так дико бесит. А на самом деле это один из самых простых для распутывания способ.
16. lostcay 4 20.02.23 13:07 Сейчас в теме
(14) Согласен. Эта очень странная выборка данных. Не понятно что анализируем и что нам это дает. Давайте ещё сравним количество использования буквы а и б.
15. lostcay 4 20.02.23 13:03 Сейчас в теме
Раз уж речь зашла о странных платформеных решениях, давайте поговорим о том, что константы и перечисления хранятся в бд как отдельные таблицы каждая. Есть много вопросов и к последовательности разработки самой платформы. То есть они как-то додумались реализовать задачи, ботов и т п, а гуид в запросе это слишком сложно, нужно больше времени. Вопросы к самой концепции хранилища. Отходя чуть в сторону, проблемы общей методологии найма 1с-ников.
И это только то что первое в голову пришло.
19. kembrik 7 20.02.23 15:17 Сейчас в теме
(15) Рекомендую "Вспомнить" или "Прочитать" как хранились константы или периодические реквизиты справочников в 7.7 в табличке _1SCONST и вспомнить как "легко и просто" было переливать такие данные запросом из таблицы
60. AllexSoft 21.02.23 11:37 Сейчас в теме
(15)гуид в запросе это скорее не сложно, там по политическим соображениям кое что не делают, есть вещи которые нужно давать с опаской программистам без надлежащей квалификации.. вспомните как долго сопротивлялись делать запись в внешние источники, как долго сопротивлялись дать возможность пакетного запроса в дин списки.. Ну вот дин списками то оказались от части правы, я видел формы где напихано в дин список целые отчеты, а потом эти горе программисты удивляются почему это не работает или "нам что то вешает сервер".
20. obemgyorik 99 20.02.23 15:42 Сейчас в теме
Предложу ещё один пример разумного использования оператора Перейти в 1С:

Если мы дорабатываем типовую функцию в расширении с директивой &ИзменениеИКонтроль и нам по какой-то причине нужно пропустить большое количество строк типового кода и перескочить в середину процедуры.

&ИзменениеИКонтроль
Функция СложныйМногоступенчатыйАлгоритмНа100500Строк()
   
   //100500 строк нужного кода
   
   #Вставка
   Перейти ~ПропуститьНенужныйКод;
   #КонецВставки

   //100500 строк НЕ нужного кода
    
   #Вставка
   ~ПропуститьНенужныйКод:
   #КонецВставки

   //100500 строк нужного кода

КонецФункции
Показать
maksa2005; viplelik; ZhokhovM; AllexSoft; kser87; Dementor; +6 Ответить
21. Dementor 945 20.02.23 16:31 Сейчас в теме
(20) Отличный пример! Спасибо.
33. gybson 20.02.23 21:03 Сейчас в теме
(20)

Если Ложь Тогда
КонецЕсли

Да просто закомментировать, будет более читаемый код.
maksa2005; anvolkov1cbit; +2 Ответить
36. obemgyorik 99 20.02.23 21:17 Сейчас в теме
(33)
>Если Ложь Тогда
>КонецЕсли

менее наглядно для последующей поддержки, т.к. сложно будет найти поиском/глазами конец фрагмента пропускаемого кода

>Да просто закомментировать

ломает последующее обновление

>#Удаление
>#КонецУдаления

подойдёт для этого упрощённого примера (хотя проблема быстрого поиска окончания пропускаемого кода остаётся), но неприменимо, если его немного усложнить, когда "100500 строк НЕ нужного кода" нужно выполнять в одних случаях, а в других не выполнять

Т.е. если усложнять пример "разумного использования", то он будет выглядеть так:
&ИзменениеИКонтроль
Функция СложныйМногоступенчатыйАлгоритмНа100500Строк()
   
   //100500 строк нужного кода
   
   #Вставка
  Если НЕ НадоВыполнитьКусокТиповогоКода Тогда
       Перейти ~ПропуститьНенужныйКод;
  КонецЕсли;
   #КонецВставки

   //100500 строк НЕ нужного кода
    
   #Вставка
   ~ПропуститьНенужныйКод:
   #КонецВставки

   //100500 строк нужного кода

КонецФункции
Показать
38. gybson 20.02.23 21:24 Сейчас в теме
(36)
А как вам такой вариант
#Удаление
#КонецУдаления
39. obemgyorik 99 20.02.23 21:25 Сейчас в теме
(38) я прокомментировал и этот вариант в предыдущем комментарии
40. gybson 20.02.23 21:30 Сейчас в теме
(39)Добавить Область. Вариант с "перейти" никак не исправляет ситуацию.
Если вы выкинули 100500 строк кода и решили, что они вообще никогда вам не понадобятся, то пишите "Вместо".
41. obemgyorik 99 20.02.23 21:35 Сейчас в теме
Вчитайтесь в пример
Значение флага "НадоВыполнитьКусокТиповогоКода" зависит от определенных условий

Использование "Вместо" в этом примере вообще очень плохо, т.к. ломает обновление
45. gybson 20.02.23 22:09 Сейчас в теме
(41) Никто никогда не узнает, что пропущен большой кусок кода. Это прекрасный пример того, почему "перейти" должен быть запрещен в принципе.
user1580936; +1 Ответить
44. Brawler 441 20.02.23 21:53 Сейчас в теме
(20) Лучше воздержаться от такого чтобы не путать всех прочих разработчиков.
Типовые приемы это использовать

#Удаление
#КонецУдаления
22. Alxby 1070 20.02.23 16:57 Сейчас в теме
Те, у кого действительно есть настоящий "академический навык", знают что перейти мало чем отличается от прервать, продолжить и возврат в середине процедуры. А те, кто еще и на языке ассемблера программировал, знают, что вызов функции почти то же самое, что GOTO. Все это - "синтаксический сахар" для нарушения последовательного выполнения кода. Использование / неиспользование GOTO определяется скорее соглашениями внутри коллектива разработчиков и возможностями, предоставляемыми языком. Так, в языке 1С нет аналога цикла do...while (его надо эмулировать циклом Пока... ), нет аналога switch...case...breake (можно эмулировать каскадом процедур). Последнее предоставляет средство множественного входа в блок кода. Специального средства множественного выхода из блока кода тоже нет, но его легко получить с помощью прервать или возврат. Использовать вместо перейти try..catch, технически тоже можно, но с точки зрения методологии это самый плохой вариант, механизм исключений не для этого придуман.
37. gybson 20.02.23 21:19 Сейчас в теме
(22)Все это начинает напоминать разговор об однополом сексе. Мол конечно мы допускаем и у нас был такой коллега, но сами не особо, как-то не пришлось.
23. kser87 2359 20.02.23 17:06 Сейчас в теме
Возврат по сути тоже частный случай GoTo. Заменяли код "скриптами" запускаемыми при помощи Выполнить во времена когда расширений еще не было. Приходилось все "Возврат" менять на Goto. На мой взгляд главный риск это то, что с Goto можно случайно создать бесконечный цикл, если метка стоит перед оператором.
24. Alxby 1070 20.02.23 17:11 Сейчас в теме
(23)Риск с неверным расположением метки GOTO примерно аналогичен риску бесконечной рекурсии или риску изменения итератора внутри цикла Для..., или риску бесконечного цикла Пока...
user1580936; +1 Ответить
25. kser87 2359 20.02.23 17:14 Сейчас в теме
(24) в целом да, но риск все же повыше. Циклы как-то визуально ограничены. Метки Goto можно просто не заметить в "дебрях" кода.
26. Alxby 1070 20.02.23 17:16 Сейчас в теме
(25) Согласен, хотя это дело привычки и возможностей визуализации в IDE.
27. kser87 2359 20.02.23 17:20 Сейчас в теме
(24) неверно выразился. На мой вгляд дело не в визуальном оформлении кода, а в сложности раскуриваний условий перехода. Если в случае цикла разбирать придется только внутренности Пока...Цикл..КонецЦикла, то в случае Goto все содержимое между меткой и оператором.
user1580936; Brawler; +2 Ответить
28. Alxby 1070 20.02.23 17:32 Сейчас в теме
(27)так это же одно и то же. Есть некая область кода, ограниченная Цикл... КонецЦикла или GOTO... метка (метка ... GOTO). Она может быть большой или маленькой, но одинаково влиять (или не влиять) на условие перехода к метке или на следующую итерацию цикла.
29. Dzenn 808 20.02.23 17:35 Сейчас в теме
Я люблю GoTo. GoTo любит меня.
30. Hans 2 20.02.23 18:05 Сейчас в теме
Обработчики ожидания и оповещения те же GoTo.
31. SerVer1C 626 20.02.23 18:18 Сейчас в теме
Больная тема затронута в статье.
Тех, кто использует GoTo на ЯВУ, надо по пальцам бить. Кроме запутанности кода никакого прироста производительности на практике от него нет. Если не умеете обходиться без GoTo, то может быть лучше перестроить алгоритм или сменить профессию ?
GoTo только для низкоуровневого программирования и для прошивок микроконтроллеров.
А вот про создание собственного обфускатора с автором не согласен - пишу свой с применением самых лучших практик и добавлением своих фишек.
user1580936; Brawler; +2 4 Ответить
32. Alxby 1070 20.02.23 18:27 Сейчас в теме
(31) Не надо никого бить. Даже по пальцам) Если разработчики ЯВУ включают в него GOTO, значит допускают его использование. Само по себе использование GOTO не увеличивает производительность, просто в некоторых случаях реализация алгоритмов без GOTO более сложна, о чем в статье и написано. Вопрос только в том, умеет ли программист писать качественный код с использованием GOTO, или нет. Если не умеет - то ему не следует использовать GOTO, вот и все.
AllexSoft; Dementor; tormozit; bulpi; +4 Ответить
46. tormozit 6870 21.02.23 00:11 Сейчас в теме
Со статьей полностью согласен. Буду прописывать ее "блюстителям строгих правил".
Переходы ограничены пределами текущих областей видимости - функциями, процедурами и модулями объектов, в которых применяется оператор GOTO

Может невнимательно читал, но в статье не уловил довольно важный момент - переходы по меткам разрешены в пределах видимости и только внутри текущих конструкций языка, т.е. внутрь соседнего цикла/условия/попытки снаружи запрыгнуть нельзя.

Да. Насчитал в инструментах разработчика 9 статических и 3 генерируемых переходов по меткам. Всегда не испытывал за них стыда. Наоборот даже горжусь тем, что я умею их применять.
abasovit; ardn; nyam-nyam; AllexSoft; Dementor; caponid; +6 Ответить
49. tormozit 6870 21.02.23 07:55 Сейчас в теме
(0)
Если вы каждый раз не генерируете новое уникальное название, то часто программный кэш не очищается и 1С работает со старыми версиями обработок

Такая проблема была в генераторе в консоли кода ИР на платформе 8.3.11+, где изменили кэширование внешних обработок
Но я нашел ее решение. Предлагаю добавить эту информацию в статью раз уж ты решил так глубоко копнуть.
abasovit; nyam-nyam; Dementor; +3 Ответить
59. Dementor 945 21.02.23 11:36 Сейчас в теме
(49) выглядит как магия.
В конце недели планирую вычитать все комментарии и подправить статью - сделать акцент на то, что нельзя прыгать внутрь циклов/условий/попыток и добавить интересный код. Ну и решение с внешними обработками добавлю, раз оно есть.
51. flex81 63 21.02.23 08:20 Сейчас в теме
Я рисую алгоритмы работы в Драконе и код храню тамже. Изначально он генерит код с помошью goto. Но и линейно может
61. Dementor 945 21.02.23 11:39 Сейчас в теме
(51) при подготовке статьи встречал много отсылок на Дракон. Где-то даже цитировали его разработчиков, которые утверждали, что циклы несут больший вред для алгоритмического мышления чем goto (может не такими словами, но по сути).
53. zqzq 23 21.02.23 09:03 Сейчас в теме
Использовал 1 раз GOTO для выхода из двойного цикла.
Практически, можно и нужно без него обходиться, кроме очень редких случаев.
56. gybson 21.02.23 09:24 Сейчас в теме
Проблема с безусловным переходом в том, что он условный.
57. starik-2005 2831 21.02.23 09:27 Сейчас в теме
Статья неплохая.

Но не все, кто академически занимается и программированием тоже, заканчивали какие-то кафедры (да, я там работал, но знаю и тех, кто вообще ничего не заканчивал, но они жали руки кнутам и дейкстрам направо и налево). И пункт номер РАЗ - это надуманный пункт, т.к. разные методы расчета - это функции. В части выхода из циклов, ветвлений и т.д. - полностью поддерживаю. По поводу отказа в ряде случаев от процедур и функций, то очень зыбкое такое допущение. Может быть в каком-то пограничном варианте это может привести к какой-то пользе.

Да, иногда использую "гото" для выхода из циклов и ветвлений и для того, чтобы не пилить лишний цикл на два шага (типа в последний день месяца делаем это два раза, а в остальные дни месяца - раз, тут как раз случай, когда код не выносится в процедуру, хотя можно было бы это сделать и вызвать функцию раз для дня и еще раз, если он последний в месяце, но если в функцию приходится тащить кучу локальных переменных, то пилить сто параметров или засовывать их все в структуру - это как-то убого выглядит, т.е. сильно хуже, чем "гото").

В общем, "гото" - это хорошо в некоторых случаях (как соль в еде), хотя тех, кто учился на кафедрах и не смог на достаточном уровне познать дзен-программинг, часто с "гото" плющит и колбасит. Прям как последователей чумаков, которым сказали, что вода в крещение течет заряженная с крана...

ЗЫ: Сам последний раз в 1С "гото" употреблял очень давно - года три назад. Мало в 1С сложного в последнее время требуется. А простое можно и без "гото" написать.
Dementor; +1 Ответить
58. Dementor 945 21.02.23 11:26 Сейчас в теме
(57) спасибо за столь подробный комментарий.
62. Cyberhawk 133 21.02.23 14:32 Сейчас в теме
63. alexey_kurdyukov 95 22.02.23 09:25 Сейчас в теме
Давайте просто использовать средства там, где нужно. Если нужно Перейти - то используем Перейти, если не нужно - то не используем, а не вот это вот как маленькие бородатые девочки: "Ай миня гоуту укусиль, нильзя его использовать!"
64. alexey_kurdyukov 95 22.02.23 09:29 Сейчас в теме
А Попытка-Исключение позволяет отделить рабочую логику функции от обработки ошибки и не вкорячивать всякие флаги, спецзначения, передачу параметров из функции в аргументах и тому подобное
65. Артано 738 22.02.23 13:44 Сейчас в теме
Согласен с автором, безусловные гонения именно против оператора GoTo ничем не лучше его бессистемного использования.
Причем, на практике заметил, что наиболее яркие противники ничего не имеют против Возврат, Продолжить или Прервать, хотя это тоже безусловные переходы, только к предопределённым точкам
66. w.r. 639 22.02.23 15:33 Сейчас в теме
Вообще
Перейти
удобно когда не нужно выполнять большой кусок кода. Можно обернуть этот код условием, но читаемость от это понизится
user1491286; +1 Ответить
67. flex81 63 23.02.23 13:55 Сейчас в теме
(61) На самом деле есть программа ИС ДРАКОН - в ней рисуются алгоритмы, и она переносит код с алгортимов в конфигуратор в стилистике GoTo.
Тоесть в итоге я вижу графическое представление кода 1С на схеме. А код в конфигуратор, с расставлением GoTo делает сам программа. Я работаю только над логикой решения в графическом виде. Очень удобно. Делаю целые проекты так уже лет 15.
info1i; Dementor; +2 Ответить
68. ardn 526 23.02.23 17:52 Сейчас в теме
69. info1i 208 25.02.23 01:26 Сейчас в теме
Я редко использую GoTo и обычно в маленьких блоках кода, получается очень компактно и читабельно.
70. alex_sayan 09.03.23 19:39 Сейчас в теме
Ужас. "Лесенка" из циклов и "если" даже не намекает, а прям орёт про проблемы с кодом. Такой код надо переписывать, а не подпирать GOTO. Я бы такой код даже близко к проду не подпустил
71. user1206119 69 20.03.23 22:51 Сейчас в теме
На самом деле часто оператор перейти, если его правильно использовать, очень помогает оптимизировать код. Был случай, когда переделывал код из стандартного на код с GOTO- удалось ускорить выполнение тяжелой формы в 2 раза. Другое дело, что этот оператор надо использовать очень и очень осторожно - в пределах видимости, чтобы у следующих программистов не было проблем с поиском ошибок.
72. Aleksey.Polushin 22.03.23 07:38 Сейчас в теме
Ни разу за всю свою практику не потребовалось использовать GOTO. Как-то благополучно обходился без этого.
user1491286; +1 Ответить
Оставьте свое сообщение
Вакансии
Аналитик 1C
Москва
зарплата от 120 000 руб. до 250 000 руб.
Полный день

Тестировщик 1С
Москва
зарплата от 125 000 руб.
Полный день

Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день

Программист 1С
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день