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

    −134

    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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    Запрос = Новый Запрос;
    	Запрос.Текст = 
    	"ВЫБРАТЬ ПЕРВЫЕ 1
    	|	ВложенныйЗапрос.Ссылка,
    	|	ВложенныйЗапрос.Заказ,
    	|	ЕСТЬNULL(ВложенныйЗапрос.ВРезерве, 0) + ЕСТЬNULL(СвободныеОстаткиТоваровНаСкладахОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиТоваровНаСкладахОстатки.ВРезервеОстаток, 0) КАК СвободныйОстаток
    	|ИЗ
    	|	(ВЫБРАТЬ ПЕРВЫЕ 1
    	|		ВложенныйЗапрос.Ссылка КАК Ссылка,
    	|		ВложенныйЗапрос.Заказ КАК Заказ,
    	|		СвободныеОстаткиТоваровНаСкладах.ВРезерве КАК ВРезерве,
    	|		ВложенныйЗапрос.Размер КАК Размер
    	|	ИЗ
    	|		(ВЫБРАТЬ ПЕРВЫЕ 1
    	|			Номенклатура.Ссылка КАК Ссылка,
    	|			ЗаказПокупателя.Ссылка КАК Заказ,
    	|			ВЫБОР
    	|				КОГДА &Размер = ЗНАЧЕНИЕ(Справочник.Размер.ПустаяСсылка)
    	|					ТОГДА ЗНАЧЕНИЕ(Справочник.Размер.ПустаяСсылка)
    	|				ИНАЧЕ &Размер
    	|			КОНЕЦ КАК Размер
    	|		ИЗ
    	|			Справочник.Номенклатура КАК Номенклатура,
    	|			Документ.ЗаказПокупателя КАК ЗаказПокупателя
    	|		ГДЕ
    	|			Номенклатура.Ссылка = &Номенклатура
    	|			И ЗаказПокупателя.Ссылка = &Ссылка) КАК ВложенныйЗапрос
    	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстаткиТоваровНаСкладах КАК СвободныеОстаткиТоваровНаСкладах
    	|			ПО ВложенныйЗапрос.Ссылка = СвободныеОстаткиТоваровНаСкладах.Номенклатура
    	|				И ВложенныйЗапрос.Заказ = СвободныеОстаткиТоваровНаСкладах.Регистратор
    	|				И ВложенныйЗапрос.Размер = СвободныеОстаткиТоваровНаСкладах.Размер
    	|	
    	|	СГРУППИРОВАТЬ ПО
    	|		ВложенныйЗапрос.Ссылка,
    	|		ВложенныйЗапрос.Заказ,
    	|		СвободныеОстаткиТоваровНаСкладах.ВРезерве,
    	|		ВложенныйЗапрос.Размер) КАК ВложенныйЗапрос
    	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстаткиТоваровНаСкладах.Остатки(
    	|				,
    	|				Склад = &Склад
    	|					И Организация = &Организация) КАК СвободныеОстаткиТоваровНаСкладахОстатки
    	|		ПО ВложенныйЗапрос.Размер = СвободныеОстаткиТоваровНаСкладахОстатки.Размер
    	|			И ВложенныйЗапрос.Ссылка = СвободныеОстаткиТоваровНаСкладахОстатки.Номенклатура
    	|
    	|СГРУППИРОВАТЬ ПО
    	|	ВложенныйЗапрос.Ссылка,
    	|	ВложенныйЗапрос.Заказ,
    	|	ЕСТЬNULL(ВложенныйЗапрос.ВРезерве, 0) + ЕСТЬNULL(СвободныеОстаткиТоваровНаСкладахОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиТоваровНаСкладахОстатки.ВРезервеОстаток, 0)" );
    	
    	Запрос.УстановитьПараметр("Номенклатура",ТекущийЭлемент.ТекущаяСтрока.Номенклатура);
    	Запрос.УстановитьПараметр("Размер",ТекущийЭлемент.ТекущаяСтрока.Размер);
    	Запрос.УстановитьПараметр("Склад",Склад);
    	Запрос.УстановитьПараметр("Ссылка",Ссылка);
    	Запрос.УстановитьПараметр("Организация",Ссылка.Организация);
    	Выборка = Запрос.Выполнить().Выбрать();

    Человек, написавший такой запрос явно был с перепоя. С учетом его двухлетнего опыта программирования в 1С - никогда бы на него не подумал... но факт.

    Запостил: Maikl_kar, 31 Января 2012

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

    • <<ЕСТЬNULL(СвободныеОстаткиТоваровНаСкла дахОстатки
      Я когда вижу 1c тут мне обычно хочется убиться чтобы не знать что на свете есть такое, но это уже точно придет ко мне в ночных кошмарах.
      Добавьте сюда кнопку развидеть...
      Ответить
      • >>Я когда вижу 1c тут мне обычно хочется убиться чтобы не знать что на свете есть такое
        Круто! А зачем ходишь в этот раздел на ресурсе? Из идейных соображений? "Ежики плакали и кололись, но продолжали есть кактусы"? Ну-ну. "Мы в восхищении!" (с)
        Если серьезно, давайте вспомним, для чего вообще придумали 1С - для автоматизации учета и быстрой разработки учетных систем. И попытаемся написать код для этих сущностей на английском, да так, чтобы это было наглядно и удобно потом сопровождать. Переведи на английский "Счет-фактура", "Требование-накладная", "Расходы будущих периодов". Таких понятий в "их" учете просто нет. Даже если все время помнить, что НДС по-английски VAT, не факт, что в контексте это будет всегда понятно. Транслитом? Один напишет Ostatki, другой Remains, разбирайся потом.
        Можно писать гибридно:
        Documents.СчетФактураВыданный.CreateNew( );
        Не уверен, что это менее криво, чем то, над чем тут смеются. Да и раскладку переключать невесело.
        Хреново, говорите, смотрится с общепрограммерской точки зрения все это? Так вам что писать - учетную задачу или системную утилиту? 1С - инструмент под вполне жизненные задачи. Расчет вашей же ЗП, со всеми налогами и премиями, как бы криво они не назывались и не считались, спасибо правительству.
        Ответить
        • Хм, первый внятный аргумент в пользу "делания языка через русcкий язык".
          Ответить
    • вертикальная палка является элементом синтаксиса?
      Ответить
    • ВЫБРАТЬ ПЕРВЫЕ 1
      Ну блин не подходит русский язык для кодинга из-за своей сложности! Пиздец как звучит же.
      Ответить
    • > ЛЕВОЕ СОЕДИНЕНИЕ
      Резьбовое.
      Быдло-SQL - отличное развлечение. Когда я начинаю думать, что в восьмёрке появилась вменяемая архитектура и 1с не так плох, я смотрю на его язык запросов и меня пробивает на ха-ха.
      Ответить
      • как бы тебе это помягче объяснить то...
        это - не быдло-sql, это корректная глубокая локализация. что не отменяет пробивания на ха-ха.
        приблизительно так же (с точностью до обозначения!), как китайский - не быдло-язык. что не отменяет от пробивания на ха-ха от многих его фраз, так созвучных привычной уху обсценной лексике родного великого и могучего.
        Ответить
        • Самый натуральный быдло, никакая не лохализация. Промтом перевести ключевые слова, вставить свой кривой велосипед с блекджеком - офигенный повод для гордости.
          Вероятность того, что человек, приходя делать запросы уже знает _нормальный_ язык запросов не нулевая. А тут, фактически, нужно освоить тот же, только без крыльев и с быдлозапросами.
          1с вэй.
          Ответить
          • ЕСТЬNULL как бы окончательно и бесповоротно символизирует
            Ответить
    • > КОНЕЦ КАК Размер
      Ответить
    • А вот интересно, для кого его сделали на русском языке)))
      Одна из причин, по которым я всеми руками и ногами упираюсь от его изучения - это реализация синтаксиса...
      Ответить
      • Для патриотов.
        Ответить
      • Насколько я в курсе, 1С позволяет использовать англоязычный синтаксис... безо всяких ограничений. Правда все 1С-ки почему то пишут исключительно на русском.
        А какая разница какой язык? Качество кода то зависит не от этого.
        Ответить
        • > почему то пишут исключительно на русском
          Корпоративная солидарность.
          Вот есть у меня старая конфа. Буду я там писать If вместо Если. Будет смешенье французского с нижегородским. Нафиг такое надо?
          Ответить
        • Разницы нет, привычка есть.
          Ответить
        • А разница большая, так как если есть мало-мальский опыт общения с другими ЯП, синтаксис которых, как правило, на английском, то на уровне подсознания уже выработался инстинкт чтения и понимая кода именно на этом языке. А тут элементарно как минимум глаза ломаются, а если еще и писать такое, чтобы ломать глаза себе и еще кому-нибудь, то это не весело...
          Ответить
          • Ага... я уже заметил что почти все оставившие здесь комментарии господа - явно приверженцы других ЯП. ))))
            Хотя кроме привычки, никаких других достоинств в англоязычной транскрипции языка запросов (да и просто команд ЯП) я не вижу. А привычка она зависит от того на чем ты пишешь чаще.
            Надеюсь никто не будет спорить с тем что английский язык - это в первую очередь человеческий язык, а не "язык программистов". И для алгоритмического применения он ничуть не лучше русского, немецкого или финского.
            Просто они (англоговорящие) первые смогли массово внедрить компьютеры.
            Слава богу что это были не китайцы... а то сейчас была бы масса комментариев типа - "Ну надо же какие 1С идиоты-патриоты - все ведь привыкли писать запросы иероглифами!" )))))
            Ответить
            • ВЫБРАТЬ ПЕРВЫЕ 1, подходит, ага, только надо притвориться что слова не склоняются.
              Ответить
            • приверженцы 1С такие приверженцы
              Ответить
            • а мне кажется, что все на английском не потому что они первые внедряли, а потому что это международный язык.
              Ответить
              • А международным он стал в том числе благодаря и компам ;)
                лет сто назад, международным считался французский... а английский был распространен и популярен, как сейчас болгарский.
                Ответить
                • > распространен
                  Сто миллионов американцев, хрен знает сколько англичан и это без индусов.
                  Ответить
                • >лет сто назад, международным считался французский...

                  http://ru.wikipedia.org/wiki/Британская_империя
                  Британская империя — крупнейшее из когда-либо существовавших государств за всю историю человечества с колониями на всех континентах. Наибольшей площади империя достигла в середине 30-х годов XX в., тогда земли Соединённого Королевства простирались более чем на 37 млн км², что составляет около четверти земной суши. Общая численность населения империи составляла примерно 500 млн человек (примерно одна четвёртая часть человечества).

                  >а английский был распространен и популярен, как сейчас болгарский.

                  ОГЛЫ?
                  Ответить
                • Распрастранен он не из-за компов, а из-за того, что он прост в изучении. Французский может быть и был международным, в чем я сильно сомневаюсь, но это было веке так в 18, а сейчас как бы 21.
                  Ответить
          • это не инстинкт, это - привычка.
            отказываться от инструмента в силу сформированной ранее привычки (особенно памятуя о том, что использование этого инструмента неизбежно выработает новую привычку)... ну, это, приблизительно как отказываться от бензопилы и пользоваться молотком просто потому что молотком привычнее.
            (за скобками - возможность таки юзать в той же одинэсине англо-транскрипцию во весь рост)
            Ответить
      • А теперь вспомни про американских программистов.
        Ответить
    • > ЕСТЬNULL
      НЕ ПЫТАЙТЕСБ ЧТОТ0 N3МЕНИТЬ!
      Ответить
    • 1. "Говность" кода от т анскрипции не зависит.
      2. В 1с русский для русскоязычных более удобен в связи с двумя обстоятельставами: во-первых, есь код бъётся без переключения регистров (писать русскоязычному комментарии и сообщения для русскоязычных в междумордие на латинице - нухуйзнает); во-вторых именования и ключевые слова на русском понимаются и конструируются (русскоязычным прогом на русском языке) просто понятнее и проще.
      ЕСЛИ есть возможность упростить процесс разработки (повысив тем самым эффективность труда) - при наличии(!) таковой возможности - то, как раз, глупее отказываться от такой возможности чем наоборот.
      Прим.: и, вот, интересно, на Brainfuck апологеты англика в синтаксисе не называют весь(!) код говнокодом?..
      Ответить
      • Что "Говногость"?
        Ответить
      • Чтобы поставить символ & - нужно переключаться в англоязычную раскладку
        Чтобы написать NULL - нужно переключаться в англоязычную раскладку
        Чтобы поставить символ | - нужно переключаться в англоязычную раскладку
        Ответить
        • нет
          нет
          нет
          (шаблоны рулят)
          Ответить
          • Тогда к чему была аргументация насчет переключения раскладки? Из шаблонов можно любой славянский шкаф вставить.
            Ответить
            • Лѣпо глаголюще бояринъ.
              Ответить
            • не тупи.
              имена объектов данных и переменных, а также комментарии комментарии ВСЕ в шаблоны забить - невозможно; при кириллической нотации встроенного языка в шаблоны забивается не так уж много замен (по кириллическим сигнатурам) для ввода некоторых(!!) ключевых лексем встроенного языка с не кириллическими символами.
              Ответить
              • а всё потому, что 1С - говно
                кто-нибудь ведет счет защитникам 1С?
                Ответить
    • вот это я понимаю ЛОШАРА
      и скорее всего этот код выполняется построчно)) радует строка; Запрос.УстановитьПараметр("Номенклатура" ,ТекущийЭлемент.ТекущаяСтрока.Номенклату ра);
      Ответить
      • Слава богу, кто-то обратил внимание хотя бы на сам код, а не на то что это "ненавидимый всеми нормальными программистами 1С". Спасибо :)
        Этот код я запостил как говнокод не из за того что он на 1С, а из за того как был построен запрос.
        Ответить
        • > Слава богу
          Вот что крест животворящий делает!
          Ответить

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