1. 1C / Говнокод #21834

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Функция ОпределитьПроцентМотивации(_Заказ)
    	Если 1=2 Тогда
    		_Заказ = Документы.ЗаказПокупателя.СоздатьДокумент();
    	КонецЕсли;
    ...
    КонецФункции

    Я вот даже не знаю, отнести к какой категории говнокода это отнести.
    То ли 1С не достаточно хорошо проработала автозаполнение, то ли автор гений.

    Запостил: Jet, 14 Декабря 2016

    Комментарии (80) RSS

    • Скорее всего, это "оригинальная заглушка" условия, следовательно, три строчки кода лишние.
      Ответить
      • Тут все гораздо глубже. Функция принимает 1 параметр, который всегда будет ссылкой на документ "Заказ покупателя". Но 1С не способна это распознать, поэтому заполнение на Alt+Space не работает. А эти три строчки ей как бы намекают, что такое _Заказ, и заполнение будет работать
        Ответить
        • В 1с не завезли статическую типизацию?
          Ответить
          • Да, типизация динамическая, но по вызовам функции можно понять какой тип у параметров, если она не экспортная.
            Ответить
            • Как хорошо в случае с "PHP" - нет вообще никакой типизации. 2="2". От программирования на этом языке получаешь одно лишь наслаждение.
              Ответить
              • а в пыхе случаем не 2*2=5?
                Ответить
                • Хуже. Там 0x00+2 = 4:
                  https://bugs.php.net/bug.php?id=61095
                  Ответить
                  • В чём проблема? Просто не используй "0x00", и вся недолга.
                    Ответить
                    • В чём проблема? Просто не используй "PHP", и вся недолга.
                      Ответить
                  • Пофикшено же. А в питоне 2 ur"c:\Users" до сих пор ошибка.
                    Ответить
                    • потому что обратный слеш это боль by design

                      Спасибо тебе, дорогой макрософт. От лица миллионов пострадавших девепоперов, от лица всех тех кто писал каждый слеш два раза ("c:\\windows\\")во всех ЯПах включая твой собственный visual c и C#.

                      От всех фреймворков где блядь пришлось вводить констатну FileSystemSeparator, сука!


                      ps: виноват айбиэм
                      https://blogs.msdn.microsoft.com/larryosterman/2005/06/24/why-is-the-dos-path-character/
                      Ответить
                      • Но ведь в DOS, Windows и даже в OS/2 (помним, скорбим) работает и строка "c:/windows/". Даже путь, в котором перемешались два типа слешей, тоже работает.
                        Ответить
                        • Вроде раньше автодополнение для имён файлов в cmd не работало для путей с прямыми руками слэшами. Не знаю, починили или нет.
                          Ответить
                          • Некоторые стандартные утилиты и встроенные команды cmd.exe/command.com не работали с прямым слешем, потому что парсер — лох. Например, команда DIR ожидает, что после прямого слеша следует параметр (ключ).
                            Ответить
                      • > От всех фреймворков где блядь пришлось вводить констатну FileSystemSeparator, сука!

                        Если бы только слеш в DOS/Windows был причиной введения этой константы! Что вообще знают о боли те, кто не видел файловых систем Mac OS Classic (не OS/X), VMS и прочего говна мамонта?

                        Macintosh HD:Documents:Letter:fileincurrentdir::fileinparent:::fileingrandparent
                        
                        SYS$SYSDEVICE:[USER.DOCS]LETTER.TXT;4


                        https://en.wikipedia.org/wiki/Path_(computing)#Representations_of_paths_by_operating_system_and_shell

                        > от лица всех тех кто писал каждый слеш два раза

                        А за это надо сказать спасибо тем, кто внедрил в строковые константы эскейп-последовательности в обязательном порядке. Хорошо хоть, что в Паскале их нет. Да даже в противном ПХП есть строки в одинарных апострофах, в которых эскейп-последовательности не интерпретируются.
                        Ответить
                        • Внедрил эскейп-последовательности в твой анус, проверь.
                          Ответить
                        • > Что вообще знают о боли те, кто не видел файловых систем Mac OS Classic (не OS/X), VMS и прочего говна мамонта?

                          Всё это счастье даже попало в стандарт Common Lisp, там есть (уже нинужная) абстракция pathname для работы с этим древним говном
                          https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node214.html

                          The dominant file systems at the time the design [of Common Lisp] was done were TOPS-10, TENEX, TOPS-20, VAX VMS, AT&T Unix, MIT Multics, MIT ITS, not to mention a bunch of mainframe [OSs]. Some were uppercase only, some mixed, some were case-sensitive but case- translating (like CL). Some had dirs as files, some not. Some had quote chars for funny file chars, some not. Some had wildcards, some didn't. Some had :up in relative pathnames, some didn't. Some had namable root dirs, some didn't. There were file systems with no directories, file systems with non-hierarchical directories, file systems with no file types, file systems with no versions, file systems with no devices, and so on.

                          -- http://www.gigamonkeys.com/book/files-and-file-io.html
                          Ответить
                        • OS Classic is irrelevant. А остальные цветут и пахнут
                          Ответить
                        • В питоне как бы тоже. Но во-первых, кавычки экранируются все равно, а во вторых в двойке эта фича битая.
                          Ответить
                      • Ещё немножко о боли: некоторые операторы шаблонизатора для регэкспов используют в качестве ограничителя слеши, а потом грызут кактус экранируют все слеши в образце или в строке замены.
                        Ответить
                        • Они просто не знают, что там может быть любой символ?
                          Ответить
                          • Кто-то не знает до поры, до времени. А в некоторых окружениях (типа встроенного конструктора регэкспов в ECMAScript) и символ сменить нельзя.
                            Ответить
                        • я так делаю
                          Ответить
                          • В этом тоже может быть смысл, если в образце слишком много специфических символов и замена ограничителя со слеша на другой символ только ещё больше запутает.
                            Ответить
                      • Штоблядь. Прыщеблядь, соси уже, не отвлекайся.
                        Бля, надо будет скрыть этого прыщеполудурка.
                        Ответить
                      • >обратный слеш это боль by design
                        Это разногласия между ibm dos-овским решением (прямой слеш был занят в опциях софта) и юниксовским. Ниже тебе подсказали, что было еще макоблядство.
                        В сисярпе же есть сырые строки?
                        Ответить
        • Костыль примотали к хлебному мякишу изолентой.

          1C такой 1С. Не удивительно что они купили написанный на пхп битрикс
          Ответить
          • Для того чтобы описать на сколько я ненавижу 1С в русском языке не таких слов. Если только словами 1С...
            Ответить
            • работу поменять не пробовал?
              Ответить
              • Нанял тебя на должность содержанца, проверь.
                Ответить
              • Вариантов нету, вобще, к сожалению. :(
                Ответить
                • Для программиста нет выбора кроме 1с?
                  Ответить
                  • Объективно я работал только с 1С, не смотря на разработки в свободное время, и для работодателя это определяющий фактор... Очень хочу вырваться из 1С, но, пока нету вариантов куда. :(
                    Ответить
                    • Объективно - на работе? Как-то впихнуть работодателю факт самоповышения квалификации у вас можно?
                      Ответить
                      • Это не повышение квалификации, а смена деятельности.)
                        Ответить
                        • Ну или устроиться программистом с самообразованием в некой области.
                          Ответить
                          • Самообразовался в области твоего ануса, проверь.
                            Ответить
                          • Куда?) Я хочу писать софт для спутников. Мне кажется с записями в трудовой "Программист 1С" мне путь туда заказан.
                            Ответить
                            • > с записями в трудовой "Программист 1С"
                              Таких не берут в космонавты :3

                              Ну через пару промежуточных контор, которые поближе к теме - может и проканать.
                              Ответить
                              • Я не говорю космонавтом быть, я озвучил то к чему душа лежит.
                                Промежуточные конторы это все сказки.
                                Ответить
                                • Моя душа лежит к твоему анусу.
                                  Ответить
                                  • Ты такой злой потому что тебя все игнорят, и даже администрация?
                                    Ответить
                                • > Промежуточные конторы это все сказки.

                                  Надо просто начать принимать активные действия для достижения цели, а не искать оправдания. Нет ничего хуже, чем каждый день ходить на работу, которую терпеть не можешь.
                                  Ответить
                                • Ну вот мне где-то года полтора назад попадалась вакансия в духе "разработка ПО для космического аппарата". Требования сейчас не помню, но ничего особо страшного там не было.
                                  Ответить
                                  • Требований никаких. Просто в случае ошибки расстреляют.
                                    Ответить
                                    • > расстреляют
                                      Да вот поэтому и не пошёл собеседоваться к ним (ну ещё зарплата маленькая, но это второстепенно). Обидно будет, если все труды и надежды за несколько минут разобьются о небесную твердь.
                                      Ответить
                                      • А если без шуток, то какие риски при работе в подобных конторах?
                                        Ответить
                                        • Риск ездить на отдых в крым или на минводы.
                                          Ответить
                                        • Один знакомый работал в Rocket Science (не в рашке), по его словам основной риск там -- тупо не дожить до релиза в том смысле, что любой проект разрабатывается много-много лет.
                                          Ответить
                                          • Не понимаю, как такое возможно? Твоё очко я разработал за пять минут.
                                            Ответить
                                    • Да всем известно, какие спецы сейчас идут работать в окологосударственные учреждения. От того и такие успехи в запуске ракет в космос в последнее время. Думаю, одинэсник там будет в самый раз.
                                      Ответить
                      • Да можно, сам проверял. Вот только если семья-дети - тупо времени может не хватить.
                        Ответить
    • Это один из приемов включить автозаполнение. До вызова функции 1с не знает параметр какого типа будет передан.
      Недостаток подобного способа в том, что при каждом вызове функции условие будет проверяться на истинность. Обычно используются детективы предпроцессора #контекствызова (сервер, клиент).
      Пример:
      #автозаполнение
      \\\код 1с \\
      #
      Не сумев распознать детективу, 1с исключить код между ## еще на этапе синтаксического анализа, интерпретатор его просто не увидит. Контекстная подсказка напротив, напрочь игнорирует ##.
      Ответить
      • Решение достойное 1с.
        Ответить
      • В том то все и дело, что 1С не умеет делать простые вещи, или умеет, но не полностью или не предсказуемо не всегда. За это ее не люблю.
        Ответить
        • например, что не умеет из простых вещей
          Ответить
          • Не умеет ждать. Нету функции Пауза(), аналог Sleep.
            На тонком клиенте не возможно получить форму открытого документа.
            В управляемом приложении нельзя простыми средствами, без изменения конфигурации (скажем во внешней обработке) вывести состояние длительного процесса серверной процедуры.
            Ответить
          • много чего не умеет. 1С это как урезанный php + framework , в котором все жестко прибито гвоздями. к примеру , в 1С нет callback-ов, а следовательно невозможно создавать свои события, а следовательно все, что касается событийных вещей, которые не заложены в этот встроенный framework , сделать встроенными средствами нельзя. к примеру , чат делают через БД и через постоянный просмотр, не появилась ли запись в БД. и фиг бы с этим. нет никакой логики в самом языке. т.е. операторы вводятся без какой-либо общей логики. достаточно посмотреть эти жуткие конструкции по разбору запросов (СхемаЗапроса и прочее). Что касается топика. Перечислять недостатки можно долго. Автор кода пытался получить скорее всего intellisense (который убог чуть более чем полностью) по _Заказ.
            Ответить
          • ах да, добавлю еще. в языке программирования 1С , отсутствуют битовые операции и операции сдвига, в языке программирования ,Карл! не, понятно, что можно и через обычные логические операции,нужные операции написать самому. ну и соответственно отсутствует какая-либо нормальная возможность (потоковая) работы с бинарными данными. т.е. с файлами. есть ДвоичныеДанные, но оно умеет только считать полностью файл (без возможности какой-либо работы с этими данными) и записать его обратно в файл. т.е. создано чисто для работы с файлами, чтобы их записать в БД. и все. обещают к какой-то версии 1С , выкатить нормальную работу с файлами. но подозреваю, что опять будет работать через одно место и код будет выглядеть как всегда убого, не имея какой-либо внутренней логики.
            Ответить
          • ну и из-за прибитости гвоздями, в 1С реализуется полноценно только императивщина. никаких ООП, ФП , ничего такого там нет. ну есть извращенцы , которые раз в год пишут статью где-нить, о том как сделать ООП в 1С. но понятно, что к реальности это имеет отношение, чуть менее чем никакое. в lua и то больше свободы.
            Ответить
            • ФП проскакивает в публикациях особо одарённых личностей:
              http://govnokod.ru/12144
              http://govnokod.ru/12146
              http://govnokod.ru/12149
              http://govnokod.ru/12239

              К сожалению, не могу оценить юмор товарища serpinski, потому что не знаю 1С.
              Ответить
              • ну это именно юмор (то бишь фантазии). никакого отношения к реальному коду 1С это не имеет(ну т.е. это все нерабочие конструкции псевдоязыка). какие-то попытки косплея под haskell . ФП в 1С по определению не может быть. там нет никаких способов оперировать функциями как first class object, нет ни указателей, нет ни каких других абстракций более высого порядка.
                Ответить
                • > абстракций более высого порядка
                  Вызов функции по имени есть?
                  Ответить
                  • Есть через костыль, типа Выполнить("ИмяМодуля.ИмяФункции();")
                    Ответить
                    • Ну вот, значит можно функции высшего порядка юзать, хоть и через жопу :)
                      Ответить
                      • Ну как тебе сказать... Функция "ИмяФункции" должна быть Экспортной, или находится в том же модуле, откуда вызывается. А еще, костыль "Выполнить" можно активизировать только в функциях с пометкой &НаСервере. Так что толку от него мало.
                        Ответить
                      • лол, я так и вижу как ты придешь к этим ребятам:
                        http://www.cyberforum.ru/1c-custom/thread1896199.html

                        и будешь им втирать про функции высшего порядка
                        Ответить
                        • Не знаю что делают фигурные скобки, но вродебы все работает =)
                          Ответить
                          • УЧитателейОстатки

                            Я, кстати, тоже не знаю что они там делают. Я думал это русский SQL, но в них обычгно нет фигурных скобок (в MDX правда)
                            Ответить
                            • У меня не работал код!
                              foo(42);
                              Не знаю, что делают джва слеша, но теперь вроде бы всё работает =)
                              // foo(42);
                              Ответить
                            • Фигурные скобки - это не из языка запросов 1С, и даже не часть кода 1С.
                              Это из костыля дополнительного "псевдо-языка" запросов (или "расширения", если угодно) для отчетов СКД, т.е. обрабатывается исключительно, когда данный кусок находится в составе запроса в СКД.
                              А здесь, т.к. любой запрос для интерпретатора - всего лишь текст (сам код запроса имеется ввиду), то и фигурные скобки игнорируются.
                              {} - означает, что то, что находится внутри - будет обрабатываться при выполнении отчета (причем их "понимает" исключительно отчет на СКД).
                              Например, в данном случае если там поставлено условие (отбор) - пользователю интерактивно при работе отчета будет дана возможность задавать или менять значение переменной "Читатель", получая в результате формирования отчет с наложенным отбором. О чем автор и пишет - "когда я убирал там галочку выводились все читатели?", - т.е. пользователю дается возможность выбора: использовать условие (и задать значение отбора), или не использовать.
                              Т.е. вся задача - из-за "хочу при работе отчета галочкой разрешения отбора то выводить всех, то только кого укажу".
                              Ответить

    Добавить комментарий