Бухгалтерия / Говнокод #12934 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 kovyl2404, (Updated )

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

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

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

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

    Вообще, как когда-то говорил один мой знакомый редактор спортивных новостей: пока в русском тексте нету мата, он будет вызывать интуитивное отторжение у русскоязычного читателя. Я думаю, что отсутствие жизненной правды в этом замечательном языке (1С), мешает носителям замечательного языка (русского) всецело погрузится.
    Ответить
  • Сразу видно, что умники, обсуждающие здесь изящество кода нихера в нем не соображают. Да будет вам известно, что в языке 1С нет возможности приведения типов (строка в число и наоборот). Вот и приходится прикладным программистам изгаляться.
    Ответить
    • > Да будет вам известно, что в языке 1С нет возможности приведения типов (строка в число и наоборот).
      Эээ... а функции Строка(), Формат() и Число() что тогда делают?
      Ответить
      • Имеется в виду приведение типов в запросах. Таки действительно нет, есть только Выразить для составных типов.
        Вот эта ужасная конструкция как раз и служит для такого преобразования в запросе. Выглядит ужасно, но работает.
        Практическая необходимость порой возникает, но лично я обычно иду другим путем - преобразования вне запросов, так читабельность итогового запроса намного выше.
        Ответить
        • Т.е. страшная штука, которую генерит эта процедура - аналог field :: varchar(64) или cast(field as varchar(64)) в обычных СУБД?

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

            Это ещё не все веселые моменты 😉
            Ответить
          • А что они текст запроса генерят вручную Вас не смущает?????????
            Ответить
  • Нормальный код , скорей всего надо было быстро и вчера. В среде 1 с это нормально. Понял после 13 лет на 1с и года на яве. Не всегда есть время думать :нужен конкретный результат любыми средствами , а как - ваши проблемы . 8
    Ответить
  • Надеюсь автору кода уже отбили пальцы молотком. С такими "Запросами" потом хрен разберешься, когда что-то подпилить нужно или переделать
    Ответить
  • 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]
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8