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

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

веселый цикл

Запостил: Vezunchik Vezunchik, (Updated )

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

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

    В этом коде смешаны компоненты 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 количество(*)"
      Ответить
  • Лично мне тяжело такое читать. Потому что с таким никогда дело не имел. Даже не стал разбираться в коде. Не знаю что там не так.
    Ответить
  • все умещается в одну строчку
    ОформлениеСтроки.Ячейки.НормаВремениТекс т.УстановитьТекст(РегистрыСведений.Нормы ВремениПоПостам.ПолучитьПоследнее(, Новый Структура("ПостОхраны", ДанныеСтроки.Ссылка).НормаВремени);

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

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

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

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


    8