Имя: Пароль:
1C
1С v8
УФ Собственное представление объекта
0 QbeeQ
 
27.10.12
10:58
Здравствуйте, появилась нужда пересести на управляемые формы.
В обычной форме у меня было в табличке собственное представление документа. Пока просто отрезаются лидирующие нули, в дальнейшем придумается что-нибудь ещё.

Задача решалась элементарно: При событии списка "ПриПолученииДанных" ссылка отправлялась функции общего модуля, где с ней и производились все издевательства. Результат функции писал в то же поле, в свойство "Текст".

Теперь, мне необходимо сочинить аналогию на управляемой форме. Изучая просторы мисты проблему я решил так:

В общем модуле понаписал функций:


&НаСервере
Функция СтрокаСимволов(КоличествоСимволов,НужныйСимвол=" ") Экспорт
   Результат = "";
   Для а = 1 По КоличествоСимволов Цикл
       Результат = Результат + НужныйСимвол;
   КонецЦикла;
   Возврат Результат;
КонецФункции

&НаСервере
Функция КодДляЗапроса(Ресурс,ДлинаКода=9) Экспорт
   СтрокаЗапроса = "ВЫБОР";
   Для а = 1 По ДлинаКода-1 Цикл
       СтрокаЗапроса = СтрокаЗапроса + "
       |    КОГДА ПОДСТРОКА("+Ресурс+", 1, "+(ДлинаКода-а)+") = """+СтрокаСимволов(ДлинаКода-а,"0")+""" ТОГДА ПОДСТРОКА("+Ресурс+", "+(ДлинаКода-а+1)+","+а+")";
   КонецЦикла;
   СтрокаЗапроса = СтрокаЗапроса + "
   |    ИНАЧЕ "+Ресурс+"
   |КОНЕЦ";
   Возврат СтрокаЗапроса;
КонецФункции

&НаСервере
Функция ДатаСтрокойДляЗапроса(Ресурс,Разделитель="-") Экспорт
   ЧислоСтрокой = "00";
   Для а = 1 По 99 Цикл
       ЧислоСтрокой = ЧислоСтрокой + Формат(а,"ЧЦ=2; ЧВН=");
   КонецЦикла;
   Возврат "ПОДСТРОКА("""+ЧислоСтрокой+""", ДЕНЬ("+Ресурс+")*2-1,2)+"""+Разделитель+""" +
   |ПОДСТРОКА("""+ЧислоСтрокой+""", МЕСЯЦ("+Ресурс+")*2-1,2)+"""+Разделитель+""" +
   |ПОДСТРОКА("""+ЧислоСтрокой+""", ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0))*2-1,2) +
   |ПОДСТРОКА("""+ЧислоСтрокой+""", (ГОД("+Ресурс+")-ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0)))*2-1,2)";
КонецФункции


И в форме ещё одну


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Список.ТекстЗапроса = "
   |ВЫБРАТЬ
   |    Срез.Период,
   |    Срез.Регистратор,
   |    Срез.НомерСтроки,
   |    Срез.Активность,
   |    Срез.Клиент,
   |    Срез.Объект,
   |    Срез.Заявка,
   |    Срез.ВидРемонта,
   |    Срез.Исполнитель,
   |    Срез.СтатусЗаказа,
   |    Срез.Комментарий,
   |    ""Заявка № "" + " + ОбщегоНазначения.КодДляЗапроса("Срез.Заявка.Номер",9)
           + " + "" от "" + " + ОбщегоНазначения.ДатаСтрокойДляЗапроса("Срез.Заявка.Дата",".") + " КАК ПредставлениеЗаявки
   |ИЗ
   |    РегистрСведений.Заказы.СрезПоследних КАК Срез";
       
КонецПроцедуры


Всё конечно работает, однако меня не покидает стойкое ощущение того, что я придумал велосипед размером с камаз, на одно колесе и сприцепом
Предложите мне, пожалуйста, решение попроще.
1 PiVa123
 
27.10.12
11:00
в 8.3 можно менять преставление ссылки
2 QbeeQ
 
27.10.12
11:07
Круто, утешает, что в следующей жизни мы будем чувствовать себя комформтно. А сейчас у меня есть иной выход? Я не могу заказчика заставить мигрировать на 8.3.
3 H A D G E H O G s
 
27.10.12
11:23
(2) Придется постараться
4 H A D G E H O G s
 
27.10.12
11:27
вообще код адскэй.
Расстрэлять!
5 QbeeQ
 
27.10.12
11:29
Для того здесь и написал, чтобы предложили лучше
6 PiVa123
 
27.10.12
11:50
(5) Без изменения преставления ссылки - лучшего все равно не будет
7 QbeeQ
 
27.10.12
12:11
Ну что ж, спасибо, будем считать, что вопрос решён, хотя, если кому то за хочется, можете кидать сюда более красивые и лаконичные решения
8 H A D G E H O G s
 
27.10.12
12:13
(7) Можно просто пустую неаргументированную критику?
9 QbeeQ
 
27.10.12
12:16
Вот значит как Вы здесь рейтинг зарабатываете!
10 kiruha
 
27.10.12
12:19
(0)
Почему не используете произвольный запрос ?
Чтобы на форму легли сразу нужные данные
11 H A D G E H O G s
 
27.10.12
12:21
Жесть, я 6 в списке.
Вот увидит начальство :-)
12 QbeeQ
 
27.10.12
12:37
(10) Кирилл, я именно этим и занимаюсь, однако, проблема состоит как раз в том, кто эти "нужные данные".
В моём случае это ВидДокумента + НомерБезНулей + Дата.
Что выливается как минимум в две проблемы:
1. В запросе обрезать лидирующие нули
2. В запросе же склеить строку с датой
13 vmv
 
27.10.12
12:40
(12) Компоновщик настроек, УО, текст, формат, тип группировки - дополнительная информация

я бы думал в этом направлении, а не заглядывал в попу при решении подобной задачи как в авторском исполнении
14 kiruha
 
27.10.12
12:57
(13)
Ну вообще то раньше считалось, что приведение на уровне запроса сильно быстрее чем пост обработка

Ну да ладно - это ж модно
Неплохо бы тесты провести
15 PiVa123
 
27.10.12
13:00
(13) В принципе да. Использовать составляющие объекта в группировке полей "В ячейке", тогда "+" будут не нужны в запросе
16 QbeeQ
 
27.10.12
22:22
(0) Вы уж простите, но вдруг кто-нибудь захочет использовать мой код для своих решений, а у меня там ошибка.
Вот правильный код функции генерирующей получение даты строкой:


&НаСервере
Функция ДатаСтрокойДляЗапроса(Ресурс,Разделитель=".") Экспорт
   ЧислоСтрокой = "00";
   Для а = 1 По 99 Цикл ЧислоСтрокой = ЧислоСтрокой + Формат(а,"ЧЦ=2; ЧВН="); КонецЦикла;
   Возврат "ПОДСТРОКА("""+ЧислоСтрокой+""", ДЕНЬ("+Ресурс+")*2+1,2)+"""+Разделитель+""" +
   |ПОДСТРОКА("""+ЧислоСтрокой+""", МЕСЯЦ("+Ресурс+")*2+1,2)+"""+Разделитель+""" +
   |ВЫБОР КОГДА (ГОД("+Ресурс+")-ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0))*100) < 0
   |ТОГДА
   |    ПОДСТРОКА("""+ЧислоСтрокой+""", (ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0))-1)*2+1,2) +
   |    ПОДСТРОКА("""+ЧислоСтрокой+""", (ГОД("+Ресурс+")-(ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0))-1)*100)*2+1,2)
   |ИНАЧЕ
   |    ПОДСТРОКА("""+ЧислоСтрокой+""", ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0))*2+1,2) +
   |    ПОДСТРОКА("""+ЧислоСтрокой+""", (ГОД("+Ресурс+")-ВЫРАЗИТЬ(ГОД("+Ресурс+") / 100 КАК ЧИСЛО(2, 0))*100)*2+1,2)
   |КОНЕЦ";
КонецФункции
Ошибка? Это не ошибка, это системная функция.