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

    −121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    Функция ТекстЗапросаИзСтрокиВЧисло(пИмяПоля, пДлинаСтроки, пСимволРазделителя=".")
        лТекст="ВЫБОР ";
        Для лДлинаЦелойЧасти=0 По пДлинаСтроки Цикл
            Если лДлинаЦелойЧасти=пДлинаСтроки Тогда 
                лТекст=лТекст+"ИНАЧЕ"+Символы.ПС;
            Иначе
                лТекст=лТекст+"КОГДА ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""+пСимволРазделителя+""" ИЛИ ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""" ТОГДА "+Символы.ПС;
            КонецЕсли; 
            Если лДлинаЦелойЧасти=0 Тогда лТекст=лТекст+"    0"+Символы.ПС; КонецЕсли; 
            Для лИнд=1 По лДлинаЦелойЧасти Цикл
               лТекст=лТекст+"    ВЫБОР "+Символы.ПС;
                Для лЦифра=0 По 9 Цикл
                    лТекст=лТекст+"    КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС;
                КонецЦикла;
                лТекст=лТекст+"    ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "*"+Формат(Pow(10, лДлинаЦелойЧасти-лИнд), "ЧРД=.; ЧГ=0")+"+")+Символы.ПС;
            КонецЦикла;
            Для лИнд=лДлинаЦелойЧасти+2 По пДлинаСтроки Цикл
                лТекст=лТекст+"+ ВЫБОР";
                Для лЦифра=0 По 9 Цикл
                    лТекст=лТекст+"    КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС;
                КонецЦикла;
                лТекст=лТекст+"    ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "/"+Формат(Pow(10, лИнд-лДлинаЦелойЧасти-1), "ЧРД=.; ЧГ=0"))+Символы.ПС;
            КонецЦикла;
        КонецЦикла;
        лТекст=лТекст+"КОНЕЦ";
        Возврат лТекст;
    КонецФункции

    Запостил: kovyl2404, 23 Апреля 2013

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

    • КонецЕсли, ИНАЧЕ КОНЕЦ - просто перлы
      но особо поразил CamelStyle переменных
      Ответить
      • > ИНАЧЕ КОНЕЦ
        Обычный аналог скуельного CASE WHEN THEN ELSE END.
        Ответить
      • Да меня, вообще, убило не это, а сам стиль "склеивания" этого запроса. К слову, в 1С есть достаточно развитые (если так можно выразиться, конечно) средства получения данных вроде построителей запросов и системы компоновки данных. Но нет, блять, мы будем склеивать это все так, чтобы потом хрен кто разобрался.
        Ответить
        • СтрЗаменить() нужно только тем, кто запросы только в конструкторе может прочитать. Ты такой. Т.е. обычный одинесный дятел, и SQL если и видел, то только издалека.
          Ответить
          • Гуест, ты не похапешник, случаем? А то я видел, они тоже такое говно делают.
            Ответить
        • kovyl2404
          > К слову, в 1С есть достаточно развитые
          Убогие "я-тыкаю-мышкой-смотрите-как-я-могу" средства, в которых многое можно сделать, но ничего интересного нельзя сделать легко.

          > системы компоновки данных
          Ололо, не все запросы сводятся к отчётикам. Как я уже рассказывал однажды прохладный сказ, на запросах делали поиск существующих документов, и он бы выглядел раза в два-три проще, понятнее и короче, если бы его генерировали по метаданным.
          Нет, я не одобряю такой говномешанины, но иногда только хардкор.

          guest
          > Ты такой. Т.е. обычный одинесный дятел, и SQL если и видел, то только издалека.
          Я общался однажды с одним дядькой, руководителем конторы шарашкины рога-копыта. Мы обсуждали разные вещи, в контексте баз данных и SQL, на его лице я прочитал удивление, после того, как заявил, что любой запрос можно быстрее (и эффективнее) написать руками, нежели построителем одноэса (благо местный язык запросов - унылое подмножество обычного).
          Потом я ради интереса на работе занял комп с одноэсом и битый час пытался понять, как работает этот высер мышекликаньясовершенный артефакт инопланетного разума.
          Ответить
          • Есть некоторое подобие "гайдлайнов" (см. типовые конфигурации). Почему-то там используются именно СКД и прочие построители. И используются они не только для отчетиков (см. типовую выгрузку в Битрикс в УТ 11). Объяснение этому по-моему достаточно простое. Пусть СКД убога и неоправдано сложна, но она позволяет в любой момент просто взять и изменить хуеву тучу условий и параметром в запросе, не ковыряясь в подобном говне. А за такую мешанину автора нужно просто ебать независимо от обстоятельств.
            Ответить
            • Это я был, если чо.
              Ответить
            • Я же не настоящий сварщик, а только с чем сталкиваюсь иногда.
              Если скд позволяет делать что-то, кроме отчётов, то это плюс.
              Но это не исправит говняности конструктора.
              Ответить
              • Несмотря на свою корявость (и нагроможденность), СКД позволяет строить выборки достаточно высокой сложности для любых целей (вывод данных в отчет - лишь одна из подсистем СКД), сохранив при этом возможность что-то донастраивать и менять, не трахаясь с говногерерацией запросов. Ну а то, что есть поколение 1С:Мудачья, которое кроме отчетиков-в-два-клика ничего сделать не может - это уже другая история. Если хардкорить лишь за тем, чтобы не быть похожим на них - не дохуя полезного напрограммируешь.
                Ответить
                • Ну, я вроде как с первого раза понял про настраиваемость.
                  Заценю как-нибудь в свободное время, попытаю коллег, авось где-нибудь можно будет найти вне отчётов.
                  Ответить
                  • Кстати, если интересно, есть еще такая хрень - построитель запросов. В 8.1 оно использовалось гораздо чаще, чем СКД. Но суть та же - позволяет строить конфигурируемые запросы без говносклейки. Оно использовало специальное расширение языка запросов. Может видел где - предложения заключаются в фигурные скобки, а потом этим самым билдером либо включаются в текст запроса, либо исключаются из него.
                    Ответить
                    • Нет, такого не видел. Я более-менее видел только начиная с 8.2, и то случайно обрывками.
                      Ответить
    • имяПоля - Поль!

      Вообще, как когда-то говорил один мой знакомый редактор спортивных новостей: пока в русском тексте нету мата, он будет вызывать интуитивное отторжение у русскоязычного читателя. Я думаю, что отсутствие жизненной правды в этом замечательном языке (1С), мешает носителям замечательного языка (русского) всецело погрузится.
      Ответить
    • п сокращённо пиздец
      Ответить
    • Сразу видно, что умники, обсуждающие здесь изящество кода нихера в нем не соображают. Да будет вам известно, что в языке 1С нет возможности приведения типов (строка в число и наоборот). Вот и приходится прикладным программистам изгаляться.
      Ответить
      • > Да будет вам известно, что в языке 1С нет возможности приведения типов (строка в число и наоборот).
        Эээ... а функции Строка(), Формат() и Число() что тогда делают?
        Ответить
        • Троллят новичков.
          Ответить
          • Your answer shows real ingnillteece.
            Ответить
          • Okay I'm <a href="http://dgtpvymimwq.com">condnicev.</a> Let's put it to action.
            Ответить
          • These topics are so cofunsing but this helped me get the job done. http://ytsjdihkeg.com [url=http://wircrc.com]wircrc[/url] [link=http://hendrfnvfp.com]hendrfnvfp[/link]
            Ответить
          • I can't hear annithyg over the sound of how awesome this article is. http://goaythp.com [url=http://hsdjoaarnei.com]hsdjoaarnei[/url] [link=http://kfdlypa.com]kfdlypa[/link]
            Ответить
        • Имеется в виду приведение типов в запросах. Таки действительно нет, есть только Выразить для составных типов.
          Вот эта ужасная конструкция как раз и служит для такого преобразования в запросе. Выглядит ужасно, но работает.
          Практическая необходимость порой возникает, но лично я обычно иду другим путем - преобразования вне запросов, так читабельность итогового запроса намного выше.
          Ответить
          • Т.е. страшная штука, которую генерит эта процедура - аналог field :: varchar(64) или cast(field as varchar(64)) в обычных СУБД?

            Мда, весело у вас там ;)
            Ответить
            • Именно. Очень порой не хватает того самого cast - вот прям злость берёт, почему такую полезную фичи не стырили.

              Это ещё не все веселые моменты ;)
              Ответить
            • А что они текст запроса генерят вручную Вас не смущает?????????
              Ответить
    • Нормальный код , скорей всего надо было быстро и вчера. В среде 1 с это нормально. Понял после 13 лет на 1с и года на яве. Не всегда есть время думать :нужен конкретный результат любыми средствами , а как - ваши проблемы . 8
      Ответить
    • Надеюсь автору кода уже отбили пальцы молотком. С такими "Запросами" потом хрен разберешься, когда что-то подпилить нужно или переделать
      Ответить
    • Thanks for writing such an eay-nto-understasd article on this topic.
      Ответить
    • I was drawn by the <a href="http://moeqggi.com">hosntey</a> of what you write
      Ответить
    • It's a plueasre to find someone who can identify the issues so clearly http://nfwmez.com [url=http://rxildosolxj.com]rxildosolxj[/url] [link=http://rkvoiufvn.com]rkvoiufvn[/link]
      Ответить
    • A piece of eroutiidn unlike any other! http://mkfvzsnbn.com [url=http://wdegpuelpyi.com]wdegpuelpyi[/url] [link=http://jjwnmewcga.com]jjwnmewcga[/link]
      Ответить

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