- 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].НормаВремени;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
guest 11.12.2009 14:13 # 0
guest 11.12.2009 15:19 # +5
nolka4 13.12.2009 00:11 # 0
guest 11.12.2009 15:47 # 0
guest 11.12.2009 15:54 # −1
В этом коде смешаны компоненты MVC, что и родило говнокод
oldfornit 14.12.2009 11:42 # 0
1. Запрос выполняется хоть и в цикле, но один единственный раз. Оправдание, но все равно неоптимально. Это обычно по-другому делается, через коллекцию колонок.
2. Выводится не в табличный документ. А в табличное поле экранной формы. Опять-таки легче ;-)
И, самый ужас, предопределенные процедуры ПриВыводеСтроки выполняется энцать раз в СЕКУНДУ. Кошмар, да?
Но это единственный способ вывода дополнительной информации без кореживания конфигурации.
Говнокода здесь нет. Все вполне нормально.
Из минусов - по правилам хорошего тона значения параметров запроса объявляются до объявления текста запроса.
guest 14.12.2009 14:07 # 0
1. ПриПолученииДанных вызывается ОДИН раз на 17-50 строк. Во столько же раз можно сократить количество запросов к базе.
2. Вместо цикла и условия можно написать ОформлениеСтроки.Ячейки["НормаВремениТекст"]. Вобщем-то это написано далее. Почему не использовал выше? Непонятно.
Если нет уверенности что такая ячейка присутствует, то напиши ОформлениеСтроки.Ячейки.Найти("НормаВрем ениТекст") и настанет счастье.
3. Нафига запрос выгружать в тз? Открой выборку и получи первую строку без создания ненужных переменных.
Короче говнокод истинный. Повеселился.
oldfornit 14.12.2009 14:17 # 0
AlDjabad 11.12.2009 16:14 # 0
Интересно там LEFT JOIN есть?
Пипец я в хуае от такого.
Интересен запрос CREATE TABLE на русском:)
(если сие есть, я не одинсексник )
<code>
создай таблицу `Пользователи`
( кодЪ цел_число не ноль с_авто_увеличением,
Логин куча_символов ( 60 ) не пустой,
Пароль_ куча_символов (60) не_пустой
ГЛАВНЫЙ КЛЮЧ ( кодЪ ) ) кодировка символов УТФ8;
ДОБАВИТЬ В Пользователи ( Логин, Пароль_ ) ЗНАЧЕНИЯ ( " администратор ", Пароль ("йцукен") );
Я хочу такой трава чтоб так на этот язык говорить
oldfornit 14.12.2009 11:36 # 0
guest 14.12.2009 14:08 # +2
guest 11.12.2009 18:02 # +2
guest 12.12.2009 15:17 # +5
nolka4 13.12.2009 00:11 # 0
guest 24.12.2009 14:39 # +1
И кстати, для упёртых баранов специально, 1С поддерживает англоязычную структуру точно так же, как русскоязычную.
"select count(*)
from РегистрСведений.НормыВремениПоПостам.Сре зПоследних(&ВыбДата) as RegTable
where RegTable.Период between &ВыбДата1 and &ВыбДата2
group by RegTable.ПостОхраны"
отлично понимаются, как и любая смесь, типа "выбор count(*)" или "select количество(*)"
apple-way 12.12.2009 17:02 # 0
Vezunchik 14.12.2009 11:43 # +1
ОформлениеСтроки.Ячейки.НормаВремениТекс т.УстановитьТекст(РегистрыСведений.Нормы ВремениПоПостам.ПолучитьПоследнее(, Новый Структура("ПостОхраны", ДанныеСтроки.Ссылка).НормаВремени);
цикл совершенно лишний, потому что к ячейке потом можно обратиться напрямую, что потом автор и делает.
Johnny 24.12.2009 21:57 # −1
-A- 24.08.2021 20:44 # 0