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

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
  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 Maikl_kar, (Updated )

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

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

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

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

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

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

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

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


    8