- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 
                        Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // при выводе строки в ТабличноеПоле1, перебор ячеек строки
 
    Для Каждого Ячейка Из ОформлениеСтроки.Ячейки Цикл
        // если имя текущей ячейки "НормаВремени"
 
        Если Ячейка.Имя = "НормаВремениТекст" Тогда     
            // получить норму времени текущего поста охраны на текущую дату и вывести в соотв. ячейку Тч
 
            Запрос = Новый Запрос;
            Запрос.Текст =
                "ВЫБРАТЬ
                |    НормыВремениПоПостамСрезПоследних.Период,
                |    НормыВремениПоПостамСрезПоследних.ПостОхраны,
                |    НормыВремениПоПостамСрезПоследних.НормаВремени
                |ИЗ
                |    РегистрСведений.НормыВремениПоПостам.СрезПоследних(&ВыбДата) КАК НормыВремениПоПостамСрезПоследних
                |ГДЕ
                |    НормыВремениПоПостамСрезПоследних.ПостОхраны = &Пост";
            Запрос.УстановитьПараметр("ВыбДата",ТекущаяДата());
            Запрос.УстановитьПараметр("Пост",   ДанныеСтроки.Ссылка);
            ТекНормаВремени = Запрос.Выполнить().Выгрузить();    
            //ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока[Ячейка.Имя].Значение = ТекНормаВремени[0].НормаВремени;
 
            ОформлениеСтроки.Ячейки["НормаВремениТекст"].ОтображатьТекст = Истина;
            //ОформлениеСтроки.Ячейки["НормаВремениТекст"].Значение        = ТекНормаВремени[0].НормаВремени;
 
            ОформлениеСтроки.Ячейки["НормаВремениТекст"].Текст           = ТекНормаВремени[0].НормаВремени;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
                                 
        
В этом коде смешаны компоненты MVC, что и родило говнокод
1. Запрос выполняется хоть и в цикле, но один единственный раз. Оправдание, но все равно неоптимально. Это обычно по-другому делается, через коллекцию колонок.
2. Выводится не в табличный документ. А в табличное поле экранной формы. Опять-таки легче ;-)
И, самый ужас, предопределенные процедуры ПриВыводеСтроки выполняется энцать раз в СЕКУНДУ. Кошмар, да?
Но это единственный способ вывода дополнительной информации без кореживания конфигурации.
Говнокода здесь нет. Все вполне нормально.
Из минусов - по правилам хорошего тона значения параметров запроса объявляются до объявления текста запроса.
1. ПриПолученииДанных вызывается ОДИН раз на 17-50 строк. Во столько же раз можно сократить количество запросов к базе.
2. Вместо цикла и условия можно написать ОформлениеСтроки.Ячейки["НормаВремениТекст"]. Вобщем-то это написано далее. Почему не использовал выше? Непонятно.
Если нет уверенности что такая ячейка присутствует, то напиши ОформлениеСтроки.Ячейки.Найти("НормаВрем ениТекст") и настанет счастье.
3. Нафига запрос выгружать в тз? Открой выборку и получи первую строку без создания ненужных переменных.
Короче говнокод истинный. Повеселился.
Интересно там LEFT JOIN есть?
Пипец я в хуае от такого.
Интересен запрос CREATE TABLE на русском:)
(если сие есть, я не одинсексник )
<code>
создай таблицу `Пользователи`
( кодЪ цел_число не ноль с_авто_увеличением,
Логин куча_символов ( 60 ) не пустой,
Пароль_ куча_символов (60) не_пустой
ГЛАВНЫЙ КЛЮЧ ( кодЪ ) ) кодировка символов УТФ8;
ДОБАВИТЬ В Пользователи ( Логин, Пароль_ ) ЗНАЧЕНИЯ ( " администратор ", Пароль ("йцукен") );
Я хочу такой трава чтоб так на этот язык говорить
И кстати, для упёртых баранов специально, 1С поддерживает англоязычную структуру точно так же, как русскоязычную.
"select count(*)
from РегистрСведений.НормыВремениПоПостам.Сре зПоследних(&ВыбДата) as RegTable
where RegTable.Период between &ВыбДата1 and &ВыбДата2
group by RegTable.ПостОхраны"
отлично понимаются, как и любая смесь, типа "выбор count(*)" или "select количество(*)"
ОформлениеСтроки.Ячейки.НормаВремениТекс т.УстановитьТекст(РегистрыСведений.Нормы ВремениПоПостам.ПолучитьПоследнее(, Новый Структура("ПостОхраны", ДанныеСтроки.Ссылка).НормаВремени);
цикл совершенно лишний, потому что к ячейке потом можно обратиться напрямую, что потом автор и делает.