![]() |
|
v8: Программные отборы в формах на списках. | ☑ | ||
---|---|---|---|---|
0
Maniac
18.11.09
✎
09:46
|
Я фигею с 8.2. Для обычного отбора в форме голову сломать можно!! километр текста надо написать вместо одной строчки.
|
|||
2
Паланик
18.11.09
✎
09:50
|
(0) Расскажи подробней...
|
|||
3
Maniac
18.11.09
✎
10:20
|
Вот код в толстом клиенте:
Процедура СправочникСписокПриАктивизацииСтроки(Элемент) СписокДокументов.Отбор.Контрагент.Использование = Истина; СписокДокументов.Отбор.Контрагент.Значение = ЭлементыФормы.СправочникСписок.ТекущаяСтрока; КонецПроцедуры |
|||
4
mikecool
18.11.09
✎
10:21
|
(3) это откуда?
|
|||
5
Maniac
18.11.09
✎
10:22
|
В толстом клиенте воьсмерки все отборы заложены на уровне платформы. Во всех списках автоматом существуют отборы (кнопка на панели).
Программный отбор по нужному полю занимает несколько строк кода. У управляемой форме у меня два списка. При активаци строки в олдном списке по данному значению у меня идет отбор во втором списке. |
|||
6
Maniac
18.11.09
✎
10:28
|
А вот теперь код в управляемой форме:
&НаСервере Процедура УстановитьОтбор(ПараметрыОтбора); УстановитьОтборСписка(СписокСделок,ПараметрыОтбора); КОнецПроцедуры &НаСервереБезКонтекста Процедура УстановитьОтборСписка(СписокДокументов,ПараметрыОтбора) ЭлементыОтбора = СписокДокументов.Отбор.Элементы; ЭлементОтбораДанных = Неопределено; Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент") Тогда Если ЭлементОтбораДанных = Неопределено Тогда ЭлементОтбораДанных = ЭлементОтбора; Иначе ЭлементОтбора.Использование = Ложь; КонецЕсли; КонецЕсли; КонецЦикла; Если ЭлементОтбораДанных = Неопределено Тогда ЭлементОтбораДанных = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент"); КонецЕсли; ЭлементОтбораДанных.Использование = Истина; ЭлементОтбораДанных.ПравоеЗначение = ПараметрыОтбора["Контрагент"]; КонецПроцедуры &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("Контрагент", Элемент.ТекущаяСтрока); УстановитьОтбор(ПараметрыОтбора); КонецПроцедуры |
|||
7
tsr
18.11.09
✎
10:33
|
А никто не говорил, что будет легко
|
|||
8
milan
18.11.09
✎
11:03
|
а я вот так:
ЭтаФорма.Элементы.ГрафикПодачи.ОтборСтрок = Новый ФиксированнаяСтруктура("НомерОтправки",Элемент.ТекущиеДанные.НомерОтправки); вроде работает. |
|||
9
Maniac
18.11.09
✎
11:21
|
(8) это в толстом клиенте чтоли?
|
|||
10
Maniac
18.11.09
✎
11:22
|
список динамический?
|
|||
11
Mort
18.11.09
✎
11:23
|
(6) У тебя ошибка в коде.
|
|||
12
Mort
18.11.09
✎
11:25
|
Элемент отбора может быть папкой и содержать свою коллекцию элементов отбора.
|
|||
13
Maniac
18.11.09
✎
11:27
|
(12) по группе не стоит задачи отбирать. отбирать только по элементу.
Так чт ов этом случе будет работать. просто будет пустой список. |
|||
14
Maniac
18.11.09
✎
11:28
|
для группы достаточно вид сравнения поставить в группе. одна строчка.
|
|||
15
Mort
18.11.09
✎
11:29
|
(13) Я про другое. Зайди в отбор списка и добавить группу отборов "И", в неё отбор по контру. Твой код этот отбор не найдет.
|
|||
16
Mort
18.11.09
✎
11:31
|
И не нужно искать потому что. И вообще так писать не нужно. Не нужно пытаться натягивать идеологию 8.1 на 8.2.
|
|||
17
Maniac
18.11.09
✎
11:32
|
(16) Ничего не понял. а как писать?
|
|||
18
Maniac
18.11.09
✎
11:33
|
Добавляется строчка
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии; и все работает по папкам!! |
|||
19
Mort
18.11.09
✎
11:35
|
(17) Если у тебя подразумевается в списке постоянный отбор по контрагенту (ну с возможностью его отключения) добавь отбор по контру в конфигураторе и сделай этот элемент недоступным (кнопка подробно в списке отборов). Дальше в коде тупо можно обращаться к нему по номеру (Отбор.Элменты[0]) - юзер его переместить, изменить или удалить не сможет.
|
|||
20
Maniac
18.11.09
✎
11:35
|
(15) ничего не понял что куда добавить.
Мой код уже туда добавил отбор и все работает отлично. |
|||
21
Maniac
18.11.09
✎
11:37
|
(19) отбор подразумевается гибкий. К тому же код в (6) хочешь не хочешь при активации новой строки все равно все ставит на место.
|
|||
22
Mort
18.11.09
✎
11:37
|
(18) Имелась ввиду не группа иерархического справочника, а группа отборов. Динамические списки на СКД идут и позволяют отобрать элементы выражением с ИЛИ.
|
|||
23
Maniac
18.11.09
✎
11:38
|
(22) ну я почему то не вижу групп отборов в интерфейсе.
|
|||
24
Mort
18.11.09
✎
11:41
|
(23) Все действия - добавить новую группу.
|
|||
25
Maniac
18.11.09
✎
11:43
|
(24) ага понял. спасибо. думаю до такого вряд ли дойдет в этой конкретной форме. а вообще да, надо заудматся.
|
|||
26
Mort
18.11.09
✎
11:48
|
(25) Я в (19) все описал как программно рулить отборами. Добавляешь какой хочешь в конфигураторе, делаешь его недоступным. В коде обращаешься к нему по известному номеру, устанавливаешь использование, меняешь правое значение и т.д.
|
|||
27
milan
18.11.09
✎
12:23
|
(26) что-то туплю, как отбор-то добавить ???
|
|||
28
Mort
18.11.09
✎
12:27
|
(27) В конфигураторе - свойтсва списка, настройка списка.
|
|||
29
milan
18.11.09
✎
12:35
|
(28) Типа правое значение пустое, отбор отключен ???
У списка есть реквизит параметры, странно что нельзя устанавливать отбор по значению параметра, по-моему логично было бы. что-то товарищи в 1с не долили или я не понима... |
|||
30
Mort
18.11.09
✎
12:42
|
(29) Ты прав, ты не понимаешь. Можно сделать параметры в запросе динамического списка (если тип списка - произвольный запрос) и устанавливать их (сначала в при создании на сервере, потом когда надо). Можно добавить в конфигураторе в настройках списка недоступный элемент отбора и программно юзать его по номеру:
СписокРеализацияТребования.Отбор.Элементы[0].ПравоеЗначение = Элемент; |
|||
31
V_V_V
18.11.09
✎
16:02
|
(6) Может уже и не актуально, но был удивлен количеством кода для простого отбора при активизации строки. И обращение на сервер, и куча воды... Так не пробовал?
&НаКлиенте Процедура СписокКонтрагентовПриАктивизацииСтроки(Элемент) СписокЗначений.Отбор.Элементы.Очистить(); ЭлементОтбора = СписокЗначений.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Соответствие"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = Элементы.СписокКонтрагентов.ТекущаяСтрока; КонецПроцедуры |
|||
32
Maniac
18.11.09
✎
16:58
|
(31) так не работает. и идет значительная задержка при беганьи по списку.
|
|||
33
Maniac
18.11.09
✎
17:00
|
Стоп. Работает. Я просто соответствие поменял. Но задержка ощутима, очень, пр иактивации строк начинают часики появлятся.
|
|||
34
Maniac
18.11.09
✎
17:02
|
походу слишком затратно при каждой строке строить поля.
|
|||
35
V_V_V
18.11.09
✎
17:30
|
(34) Соответствие, СписокКонтрагентов, СписокЗначений - это все мои данные, скопировал как есть и выложил сюда (не набирать же). Укажи свои поле и таблицы. У себя видимых задержек не наблюдаю, хотя отбор идет по очень большому регистру сведений. А насчет затратности вопрос спорный...
|
|||
36
Maniac
18.11.09
✎
17:31
|
я уже сделал по своим именам. задержка идет.
|
|||
37
almar
18.11.09
✎
17:31
|
(36) На файловой торомозит? Это нормально. Пробуй на сервере.
|
|||
38
mikecool
18.11.09
✎
17:35
|
(36) а если не при активизации строки, а по таймеру обновлять связанную информацию?
помню на дельфях так обходили нагруженные места, пока жмутся кнопки - таймер сбрасывается в ноль, а отработав - обновляет списки |
|||
39
Maniac
18.11.09
✎
17:38
|
(38) да ну. ты что. в толстом клиенте это отрабатывается вообще влет. да и вообще должно все моментально работать.
у меян сейчас есть разработки где при активации строки вообще 5 таблиц на форме должны обновлятся. |
|||
40
Maniac
18.11.09
✎
17:39
|
таблица закупок с номенклатурой. чел бегает по таблице и ему выводится куча информации по продажам остаткам, динамике и т.д.
еще н епробовал её под тонкого сделать. надо будет попробовать. |
|||
41
acsent
18.11.09
✎
17:40
|
Не уж то связанных списков в 8.2 нет?
|
|||
42
acsent
18.11.09
✎
17:40
|
Чтобы совсем без кода
|
|||
43
V_V_V
18.11.09
✎
17:41
|
(39) Будешь смеяться, мой пример - это один из трех отборов для одной формы. Задержек нет.
|
|||
44
V_V_V
18.11.09
✎
17:42
|
Все по одному принципу организованы
|
|||
45
Maniac
18.11.09
✎
17:42
|
(43) ну посмотрю. просто база элементарная. вообще.
вот можно скачать http://infostart.ru/public/61021/ правда без данных. а данных сейчас у меня 30 доков и 10 клиентов. |
|||
46
Maniac
18.11.09
✎
17:44
|
в сервер гнать как то смешно чтоли))))
а файловая твой отбор медленне все равно работает. мне кажется список надо не чистить а проверять. собственной в моем коде поэтому кода и дофига. посмотри там и проверка идет и все остальное (делал на примере типовой) |
|||
47
V_V_V
18.11.09
✎
17:49
|
Ну дело хозяйское - выбирай вариант оптимальнее. :))
|
|||
48
Maniac
19.11.09
✎
09:17
|
Вообще сложилось впечатление что тонкий клиент еще тормознутее толстого.
По крайней мере с отборами (причем с обоими вариантами) какой то бред. Толстый клиент на лицо работает шустрее. |
|||
49
hhhh
19.11.09
✎
09:27
|
(48) так он и должен быть тормознутее. Он же уменьшает трафик, значит, уваличивает тормоза.
|
|||
50
Maniac
19.11.09
✎
11:37
|
(49) по лозунгам 1С тонкий клиент наоборот увеличивает быстродействие за счет работы полностью на стороне сервера. Да и в файловой писали про суперускорение.
|
|||
51
Maniac
19.11.09
✎
11:38
|
а тут 30 доков набил и уже фигня :)) я в шоке.
|
|||
52
Maniac
19.11.09
✎
11:39
|
кто не верит скачайте конфигурацию. набейте 30 доков и 5 клиентов.
сделайте оба способа отборов. зайдите в справочник контрагентов и поперемещайтесь. жэсть. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |