Имя: Пароль:
1C
 
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 клиентов.
сделайте оба способа отборов. зайдите в справочник контрагентов и поперемещайтесь. жэсть.