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

    −110

    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
    Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
        // при выводе строки в ТабличноеПоле1, перебор ячеек строки
     
        Для Каждого Ячейка Из ОформлениеСтроки.Ячейки Цикл
            // если имя текущей ячейки "НормаВремени"
     
            Если Ячейка.Имя = "НормаВремениТекст" Тогда     
                // получить норму времени текущего поста охраны на текущую дату и вывести в соотв. ячейку Тч
     
                Запрос = Новый Запрос;
                Запрос.Текст =
                    "ВЫБРАТЬ
                    |    НормыВремениПоПостамСрезПоследних.Период,
                    |    НормыВремениПоПостамСрезПоследних.ПостОхраны,
                    |    НормыВремениПоПостамСрезПоследних.НормаВремени
                    |ИЗ
                    |    РегистрСведений.НормыВремениПоПостам.СрезПоследних(&ВыбДата) КАК НормыВремениПоПостамСрезПоследних
                    |ГДЕ
                    |    НормыВремениПоПостамСрезПоследних.ПостОхраны = &Пост";
                Запрос.УстановитьПараметр("ВыбДата",ТекущаяДата());
                Запрос.УстановитьПараметр("Пост",   ДанныеСтроки.Ссылка);
                ТекНормаВремени = Запрос.Выполнить().Выгрузить();    
                //ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока[Ячейка.Имя].Значение = ТекНормаВремени[0].НормаВремени;
     
                ОформлениеСтроки.Ячейки["НормаВремениТекст"].ОтображатьТекст = Истина;
                //ОформлениеСтроки.Ячейки["НормаВремениТекст"].Значение        = ТекНормаВремени[0].НормаВремени;
     
                ОформлениеСтроки.Ячейки["НормаВремениТекст"].Текст           = ТекНормаВремени[0].НормаВремени;
            КонецЕсли;
        КонецЦикла;
    КонецПроцедуры

    веселый цикл

    Запостил: Vezunchik, 11 Декабря 2009

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

    • аж не по себе становиться когда видешь это
      Ответить
    • Блин... В этом 1С что, ещё и SQL на русский переведён?! О____О Да, у меня баттхёрт.
      Ответить
      • ога, 1с он такой 1с. Я сам был шокирован когда на днях в конфигурацию нашей 1с залез :D
        Ответить
    • то жестоко не насилуйте мой моск
      Ответить
    • Выполнение запроса в цикле, да еще при выводе в табличный документ наводит на мысль, что о том, что автор кода предпочел костыль реструктуризации кода.

      В этом коде смешаны компоненты MVC, что и родило говнокод
      Ответить
      • поправка.
        1. Запрос выполняется хоть и в цикле, но один единственный раз. Оправдание, но все равно неоптимально. Это обычно по-другому делается, через коллекцию колонок.
        2. Выводится не в табличный документ. А в табличное поле экранной формы. Опять-таки легче ;-)

        И, самый ужас, предопределенные процедуры ПриВыводеСтроки выполняется энцать раз в СЕКУНДУ. Кошмар, да?
        Но это единственный способ вывода дополнительной информации без кореживания конфигурации.

        Говнокода здесь нет. Все вполне нормально.
        Из минусов - по правилам хорошего тона значения параметров запроса объявляются до объявления текста запроса.
        Ответить
        • Алё! Такие вещи делаются не при выводе строки, а ПриПолученииДанных.
          1. ПриПолученииДанных вызывается ОДИН раз на 17-50 строк. Во столько же раз можно сократить количество запросов к базе.
          2. Вместо цикла и условия можно написать ОформлениеСтроки.Ячейки["НормаВремениТекст"]. Вобщем-то это написано далее. Почему не использовал выше? Непонятно.
          Если нет уверенности что такая ячейка присутствует, то напиши ОформлениеСтроки.Ячейки.Найти("НормаВрем ениТекст") и настанет счастье.
          3. Нафига запрос выгружать в тз? Открой выборку и получи первую строку без создания ненужных переменных.

          Короче говнокод истинный. Повеселился.
          Ответить
          • о. про "ПриПолученииДанных" буду знать, спасибо.
            Ответить
    • ААА Не могу!!!

      Интересно там LEFT JOIN есть?

      Пипец я в хуае от такого.
      Интересен запрос CREATE TABLE на русском:)
      (если сие есть, я не одинсексник )
      <code>
      создай таблицу `Пользователи`
      ( кодЪ цел_число не ноль с_авто_увеличением,
      Логин куча_символов ( 60 ) не пустой,
      Пароль_ куча_символов (60) не_пустой
      ГЛАВНЫЙ КЛЮЧ ( кодЪ ) ) кодировка символов УТФ8;

      ДОБАВИТЬ В Пользователи ( Логин, Пароль_ ) ЗНАЧЕНИЯ ( " администратор ", Пароль ("йцукен") );

      Я хочу такой трава чтоб так на этот язык говорить
      Ответить
      • в языке запросов 1с нету операций создания/обновления данных. только выборка.
        Ответить
      • Представляешь, нагличане на таком языке говорят. Несчастненькие.
        Ответить
    • Надо было комментарии к коду на английском писать... XD
      Ответить
    • В комментах масс-бараны, которые ни хрена не понимают, как писать хороший (и плохой) код на 1С, но ржут с русских лексем. Прискорбно :(
      Ответить
      • ты не прав
        Ответить
      • +1.
        И кстати, для упёртых баранов специально, 1С поддерживает англоязычную структуру точно так же, как русскоязычную.
        "select count(*)
        from РегистрСведений.НормыВремениПоПостам.Сре зПоследних(&ВыбДата) as RegTable
        where RegTable.Период between &ВыбДата1 and &ВыбДата2
        group by RegTable.ПостОхраны"
        отлично понимаются, как и любая смесь, типа "выбор count(*)" или "select количество(*)"
        Ответить
    • Лично мне тяжело такое читать. Потому что с таким никогда дело не имел. Даже не стал разбираться в коде. Не знаю что там не так.
      Ответить
    • все умещается в одну строчку
      ОформлениеСтроки.Ячейки.НормаВремениТекс т.УстановитьТекст(РегистрыСведений.Нормы ВремениПоПостам.ПолучитьПоследнее(, Новый Структура("ПостОхраны", ДанныеСтроки.Ссылка).НормаВремени);

      цикл совершенно лишний, потому что к ячейке потом можно обратиться напрямую, что потом автор и делает.
      Ответить
    • Это тихий пиздец, господа...
      Ответить
    • - Ну ладно, Лёка, давай, последний раз, пока никто не видит, - прошептал Пашка.
      Ответить

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