Имя: Пароль:
1C
1С v8
Динамический список, как правильно "приготовить" количество элементов
0 exwill
 
24.11.21
20:43
Есть динамический список и форма списка справочника. Нужно в форме отображать количество элементов в динамическом списке. Как наиболее правильно это сделать? Какой обработчик события задействовать?
1 acht
 
24.11.21
20:48
Миша, ты забыл переключится на твинка?
Или таки пошел по стопам гени и начал устраивать гуру-тесты?
2 exwill
 
24.11.21
20:54
(1) Как-то мимо прошло. Мне в самом деле надо
3 Casey1984
 
24.11.21
21:50
(0) Что значит "количество элементов в динамическом списке"?
4 Злопчинский
 
24.11.21
21:52
обсуждалось уже достаточно подробно или здесь или на ИС
5 polosov
 
24.11.21
21:55
(0) Настройки в построитель. Выполнить запрос. Посчитать количество. Но это извращенство.
6 mistеr
 
24.11.21
22:00
(0) Заменить динамический список на коллекцию.

У динамического списка по определению нет количества (может меняться каждые 0,1 сек.).
7 exwill
 
24.11.21
22:03
(6) Это еще большее извращение. Рисовать форму списка справочника
8 exwill
 
24.11.21
22:04
(3) Элементы можно пересчитать: один, два, три )))
9 vde69
 
24.11.21
22:04
у динамического списка количество = мин(сколько влезло на экран * 1.5, сколько доступно в таблице)

тебе эту величину надо? тогда ее считаем в событии "при получении данных"

или тебе нужен размер таблицы?

или тебе нужно сколько записей из таблицы тебе доступны по правам?

или тебе нужно еще с учетом установленых отборов?
10 exwill
 
24.11.21
22:05
(4) Да как-то скудно
11 exwill
 
24.11.21
22:06
(9) Вот! При получении данных. Спасибо!
12 Ногаминебить
 
24.11.21
22:15
В БП3 в форме ЭДО с контрагентами есть нечто похожее.
13 Casey1984
 
25.11.21
00:40
(8) А какие элементы считать? И что такое элементы? Как считать мы уже выяснили: 1, 2, 3...
14 acanta
 
25.11.21
00:42
(13) и что такое "можно"..
15 ДедМорроз
 
25.11.21
09:34
Считать можно АВТОНОМЕРЗАПИСИ.
Но,можно в при получении данных сделать тот же запрос,что и для списка только с приставкой КОЛИЧЕСТВО
16 exwill
 
25.11.21
11:01
(9) Вот ты хороший вопрос задал.
"или тебе нужно еще с учетом установленых отборов?"
Конечно с учетом. Где и кому может понадобиться без учета?
17 exwill
 
25.11.21
11:02
(15) Вопрос в том - как этот запрос вытащить. С учетом всех установленных отборов
18 Garykom
 
гуру
25.11.21
11:05
(0) ты же преподаватель и не знаешь ответ на такой простой вопрос?

нету итератора и нету количество
модифицируй запрос чтобы количество выдавал
19 Garykom
 
гуру
25.11.21
11:07
(17) погугли
неоднократно было
20 Garykom
 
гуру
25.11.21
11:09
(19)+ только в МП не работает
21 fisher
 
25.11.21
11:19
Если бы дедушка знал количество записей, то он был бы бабушкой.
Вроде бы работала недокументированная магия через построитель запроса если ему источником динамический список засунуть. Тогда он вроде бы может родить запрос с отборами динамического списка.
Слава богу за всю мою практику такая фигня ни разу не потребовалась.
22 runoff_runoff
 
25.11.21
11:21
(17) ПолучитьИсполняемуюСхемуКомпоновкиДанных(), ПолучитьИсполняемыеНастройкиКомпоновкиДанных()
23 exwill
 
25.11.21
11:22
(21) Вот и мне не требовалась, не требовалась... и вдруг бац!
24 exwill
 
25.11.21
11:23
(22) Это понятно. Только как это сделать без контекста? ПриПолученииДанных вызывает процедуру без контекста
25 fisher
 
25.11.21
11:25
(22) Точно! В 8.3.6 добавили по просьбам телезрителей.
26 Garykom
 
гуру
25.11.21
11:28
27 unbred
 
25.11.21
11:28
(0) загоняешь результат СКД в ТЗ
ТЗ.Количество()
28 exwill
 
25.11.21
11:33
(25) Ох уж! Показываешь пользователю работу со списком. Говоришь: смотри как удобно, правую кнопку нажал, в середине есть пункт "Найти...", и вот ты уже отобрал все нужные тебе записи. Пользователь: Вау! А сколько их?
Пропасть между разработчиками 1С и пользователями их продукта просто огромна. Почему такой очевидный вопрос от пользователя сразу не пришел в голову разработчику?
29 exwill
 
25.11.21
11:34
(26) Спасибо, конечно. Но у меня проблема не в этом. А в том, на какой обработчик события эту роскошь повесить
30 acht
 
25.11.21
11:36
(28) Говоришь пользователю: смотри как удобно, правую кнопку нажал, в середине есть пункт "Вывести список". Или даже есть кнопка "Еще", а в ней опять таки "Вывести список". И смотришь номер последней строки.
31 Garykom
 
гуру
25.11.21
11:37
(29) у тебя глубоко неправильный в идеологии УФ вопрос
32 mistеr
 
25.11.21
11:37
(28) Потому что за таким вопросом, как правило, кроется плохо спроектированный интерфейс и/или бизнес процесс.
33 Garykom
 
гуру
25.11.21
11:38
(31)+ Пока ты крутишь/скроллишь список в базу могли новые элементы/документы записать прикинь
34 fisher
 
25.11.21
11:38
(28) Потому что разработчик платформы решал перпендикулярную инженерную задачу - как сделать пользователю комфортную работу со списками потенциально бесконечного размера. Которая исключает знание их количества.
Когда пользователю нужно это знать - это уже задача прикладного программиста обеспечить пользователя подходящими инструментами.
35 Garykom
 
гуру
25.11.21
11:38
(32) именно
у программиста 1С числительные (которые при разработке UI) это один, два и много!
36 Aleksey
 
25.11.21
11:39
(30) хорошо, что вы машины не проектируете. Смотри как удобно лючок бензобака открыл, веточку в бак вставил, вытаскивает и смотришь уровень топлива
37 unbred
 
25.11.21
11:39
(27) у тебя ДС рисуется при открытии. при открытии (27)
38 Garykom
 
гуру
25.11.21
11:40
(36) делается отдельная элемента (индикатор уровня топлива) на нужной форме
которая обновляется в нужные моменты
39 unbred
 
25.11.21
11:40
(37) к (29)
40 exwill
 
25.11.21
11:41
(30) Хорошая шутка!
41 exwill
 
25.11.21
11:42
(37) И после открытия тоже рисуется. Ну что вы в самом деле!
42 exwill
 
25.11.21
11:43
(38) Прикольно! Осталось только определить эти нужные моменты )))
43 acht
 
25.11.21
11:45
Я так понимаю, что от любого решения Мишенька теперь будет воротить нос и выпендриваться.
Ну, что сказать... Тебе надо - ты и делай, чо.
44 exwill
 
25.11.21
11:45
(34) О чем я и говорю. Надо не "инженерные" задачи решать, а задачи пользователей.
45 Garykom
 
гуру
25.11.21
11:45
(42) или по таймеру или в момент неких действий юзера
и да получение уровня топлива никак не привязано к форме списка, это независимое
46 Garykom
 
гуру
25.11.21
11:46
(45)+ причем лучше совместить, чтобы если очень много действий то не надо каждый раз получать, ибо еще мало времени прошло
47 fisher
 
25.11.21
11:49
(44) Задачи пользователей не всегда возможно решить в реальной жизни так, как пользователям хотелось бы. Иначе все пользователи были бы молодыми, красивыми и богатыми. Но ты не инженер, тебе не понять.
ЗЫ. Но с контекстным событием обновления ДС действительно нехорошо получилось :) Нету его.
48 oslokot
 
25.11.21
11:49
(0) отображать кол-во элементов после применения платформенных пользовательских отборов? Если так, то увы не получится - событий нет и их не перехватить
49 Garykom
 
гуру
25.11.21
11:52
(47) это противоречит асинхронности и отказу от модальности
иначе разрабы конф начали бы на него разное вешать и получать фризы
50 fisher
 
25.11.21
11:58
(49) > иначе разрабы конф начали бы на него разное вешать
Хорошая присказка. Помню ее долго приговаривали, не давая пользователю делать произвольные отборы в динамических списках. Мол тормозить будет по неиндексированным полям. Потом плюнули.
51 exwill
 
25.11.21
11:58
(49) Все дело в разрабах конф? Может быть, может быть...
52 fisher
 
25.11.21
11:58
Тьфу, произвольные сортировки.
53 fisher
 
25.11.21
12:00
А забирать возможности у разрабов конф из "благих побуждений" - это дорога в ад. Вы или крестик снимите или трусы наденьте.
54 exwill
 
25.11.21
12:01
(50) Нет. Он истину глаголет. В экосистеме 1С, состоящей из разработчиков платформы, разработчиков типовых, разработчиков "последней мили" и пользователей, разработчики типовых - самое слабое звено. Их по хорошему стоило бы давно ликвидировать
55 fisher
 
25.11.21
12:04
(54) Только ликвидаторов потом тоже обязательно зачистить. Там достойных людей никогда не встречается.
56 exwill
 
25.11.21
12:12
(47) Да ладно бы и фиг с ним. Берем неконтекстное ПриПолученииДанных(). Разработчики нам туда вроде как настройки ДС кидают вторым параметром. В настройках вроде как Отбор есть. Казалось бы бери и строй запрос. Ура, вроде как. Ставишь точку останова. Заходишь в список, делаешь отбор через правую кнопку. Смотришь в конфигураторе в отбор. А он ПУСТОЙ. И вот тут начинаешь материться. 1С в очередной раз сожрала у меня время. Чавкнула и не подавилась. Недоделанность хаотично разбросана по всей 1С. Никогда не знаешь, где напорешься. Ну лучше бы не делали этот обработчик события! А начав делать, доделали бы до конца!
57 exwill
 
25.11.21
12:13
(55) Ликвидировать звено, а не людей. Экий вы кровожадный
58 acht
 
25.11.21
12:16
Вот что-что, а потрындеть Калимулин может. Любит, умеет, практикует.
Ты тему зачем создал?
59 Kassern
 
25.11.21
12:19
(56) "А он ПУСТОЙ" вы просто не умеете его готовить... https://yadi.sk/i/v6MwK0-idTQVCQ
60 exwill
 
25.11.21
12:22
(59) Просто повторите ровно то, что я описал. И убедитесь, что он будет пустым. На списке правая кнопка...
61 fisher
 
25.11.21
12:23
(57) То есть типовые не нужны? Мне тяжело понимать мысли неординарных людей.
62 DexterMorgan
 
25.11.21
12:25
63 Kassern
 
25.11.21
12:25
(60) а вы попробуйте зайти в "Настроить список" и установить отбор
64 exwill
 
25.11.21
12:26
(61) Не нужно звено разработчиков равнооторванных как от пользователей, так и от "инженерных" проблем платформы.
65 mistеr
 
25.11.21
12:26
(56) Может расскажешь нам, как бы ты поступил, если бы был начальником разработчиков платформы? У тебя полный карт-бланш. Как бы ты реализовал получение количества строк в произвольном дин. списке из приклажного кода?
66 exwill
 
25.11.21
12:27
(62) Этот обработчик не годится
67 acht
 
25.11.21
12:27
(64) Так тебя же первого ликвидируют. В полном соответствии с твоей концепцией. Ты даже религию имени себя создать не успеешь, чтобы мученником веры стать.
68 acht
 
25.11.21
12:28
(65) > Как бы ты реализовал
Задал вопрос на мисте, конечно же.
69 exwill
 
25.11.21
12:30
(63) А вы попробуйте правую кнопку. Ну о чем вы? Задача - отображать количество элементов ДС в ответ на произвольные действия пользователя.
70 exwill
 
25.11.21
12:31
(65) Я бы реализовал метод Количество() у ДС
71 exwill
 
25.11.21
12:31
(67) Я не разработчик типовых
72 Kassern
 
25.11.21
12:32
(69) ну так сделайте так, чтобы у пользователя был лишь определенный пул действий, и данные действия по отборам отражайте в настройках списка. Тогда у вас будет всегда заполненный отбор.
73 mistеr
 
25.11.21
12:33
(70) Я и спрашиваю, как бы реализовал?
Ты ведь представляешь себе, как работает ДС, какие запросы ваполняются, и т.д.?
74 Kassern
 
25.11.21
12:33
(69) правая кнопка это не отбор динамического списка, а поиск по верх результирующей таблицы.
75 exwill
 
25.11.21
12:33
(72) Пользователи уже привыкли к правой кнопке. Да она и в самом деле удобна
76 Kassern
 
25.11.21
12:34
(74) поэтому ваши крики "А он ПУСТОЙ" тут вообще не уместны к отбору дин списка
77 Kassern
 
25.11.21
12:35
(75) переропределите команды для правой кнопки мыши, создавайте нужный отбор вместо поиска
78 exwill
 
25.11.21
12:36
(76) Очень даже уместны. Вот здесь, в аналогичной ситуации
https://wonderland.v8.1c.ru/blog/poluchenie-dannykh-dinamicheskogo-spiska/?sphrase_id=228175
отбор не пустой
79 exwill
 
25.11.21
12:38
(73) Да, да. Это все очень сложно. Не под силу человеческому разуму
80 DEVIce
 
25.11.21
12:40
Видимо следующей хотелкой станет: "Так, количество есть. А давайте теперь добавим полосу прокрутки, чтобы понимать в каком месте из этого количества мы находимся".
81 polosov
 
25.11.21
12:43
(79) Уже бы давно убедил заказчика, что ему это не нужно, вместо нытья на форуме.
82 Kassern
 
25.11.21
12:45
(78) вы же не знаете, что разработчики платформы вшили в "ПолучитьИсполняемыеНастройкиКомпоновкиДанных". По факту у вас отбор дин списка пустой и есть пользовательский отбор по текущей ячейке. Видимо данный метод накладывает второй отбор на первый и выводит все отборы НастройкиКомпоновкиДанных
83 Kassern
 
25.11.21
12:49
(82) Тут же все черным по белому написано "Важным моментом является то, что схема и настройки, которые вы получаете от таблицы динамического списка, учитывают, в том числе, видимость колонок и применённый поиск." Есть отбор дин списка, есть видимость колонок, есть примененный поиск. Вы смотрите при получении данных на отбор дин списка и восклицаете "он ПУСТОЙ!" бред же...
84 Garykom
 
гуру
25.11.21
12:49
(80) угу и превратим в 1С 7.7
85 Garikk
 
25.11.21
12:53
(79) дело не в сложности, а в том что весь смылсл динамического списка пропадет если ты реализуешь количество
86 polosov
 
25.11.21
12:56
(85) Человек похоже не понимает, как работает ДС.
87 Василий Алибабаевич
 
25.11.21
12:58
Никто не мешает после каждого запроса устанавливать (например) в свойство динсписка количество обработанных записей. Ну... например как это делает в PHP mysqli. Или в переменную уровня СУБД как в VFP. Видимо в 1С порешали что это не нужно. Ну или сложно.
88 exwill
 
25.11.21
12:58
(85) С чего вдруг он пропадает? Если метод выполняется по требованию, а не автоматом?
89 fisher
 
25.11.21
12:59
(79) Ты не поверишь. Но банальная операция получения количества строк на больших таблицах является серьезной инженерной проблемой и красиво не решается. Либо страдает производительность и масштабируемость, либо страдает актуальность и адекватность этих данных. Динамический список с порционным считыванием позволяет отвязать производительность работы со списком от размера таблицы. Операция получения количества строк - приколачивает это решение обратно к плинтусу.
90 exwill
 
25.11.21
13:01
(83) Я восклицаю, потому что меня вводят в заблуждение и жрут мое время
91 polosov
 
25.11.21
13:02
(87) ДС получает данные порциями. Он не заботится заранее сколько записей удовлетворяют настройкам.
92 polosov
 
25.11.21
13:03
(88) По требованию можешь сам реализовать метод.
93 exwill
 
25.11.21
13:06
(89) Вот и выдайте разработчику молоток и гвозди в виде метода Количество(). А он уже сам решает: приколачивать или не приколачивать к плинтусу. Вот в моем конкретном случае вопросы производительности вообще не стоят. Вся база влезет в оперативную память раз десять. Мне нужно удобство, которое запросил пользователь
94 exwill
 
25.11.21
13:07
(92) С чего все и началось. Не могу. Т.е. сам метод-то не вопрос. Вопрос - к какому обработчику его прикрутить
95 acht
 
25.11.21
13:07
(90) > и жрут мое время
Сам-то чем занимаешься?
96 acht
 
25.11.21
13:08
Следующим шагом, если Мишеньке назвать метод, он потрясет кулачками и заявит что это костыли.
97 polosov
 
25.11.21
13:09
(94) Кнопку сделай, чтобы пользователь по желанию количество рассчитывал. Объясни это заботой о производительности.
98 Garykom
 
гуру
25.11.21
13:10
(93) так не пользуйся шуруповертом ДС
возьми молоток с гвоздями аля запросы и реализуй сам с канбаном и 1Сницами
99 exwill
 
25.11.21
13:11
(97) Да уж придется. Не вешать же на обработку ожидания
100 exwill
 
25.11.21
13:13
(98) Не тот уровень задачи. Я на нее изначально 10 мин. выделял (((
101 acht
 
25.11.21
13:13
Мишенька, а правда же - под своим честным ником и набросы лучше получаются, да?
Смотри, уже вторая страница!
102 fisher
 
25.11.21
13:14
(93) Ну так тебе уже рассказали, как можно реализовать метод Количество().
(94) А нету. Кому приставили пистолет к голове - те через обработчик ожидания мутят с проверкой поменялись или нет настройки списка.
103 exwill
 
25.11.21
13:16
(102) Не могу никак выбрать между кнопкой и обработчиком ожидания.
104 fisher
 
25.11.21
13:17
(103) На вот. Поставь плюсик собрату по несчастью.
https://infostart.ru/public/568012/
105 Kassern
 
25.11.21
13:17
(103) а чем не устраивает параметр "Строки"? Он как раз текущими выведенными строками ДС и заполнен с учетом отборов
106 exwill
 
25.11.21
13:22
(105) Как у тебя это получается? Всегда выпадать из контекста. Нужно количество элементов отвечающих всем условиям отбора. Оно не всегда равно количеству строк в ДС.
107 exwill
 
25.11.21
13:22
(104) Плюсанул
108 fisher
 
25.11.21
13:25
(107) Только пишут, что полнотекстовый поиск все равно в пролете.
109 fisher
 
25.11.21
13:25
Так что радикальным решением остается только статический список.
110 Kassern
 
25.11.21
13:26
(106) пример можете указать, какое условие отбора не попадает в параметр строки? Я пробовал и настройку дин списка и поиск по правой кнопке мыши, в строках у меня были как раз данные соответствующие всем отборам и выведенные на страницу. При скорлинге страницы параметр Строки так же обновляется.
111 Kassern
 
25.11.21
13:28
(110) я так понимаю нужные вообще все строки, а не то что на экране?
112 Kassern
 
25.11.21
13:29
(111) в этом случае лучше кнопку прикрутить, которая получить настройки, по ним уже получить общее количество элементов.
113 Kassern
 
25.11.21
13:29
*получит
114 fisher
 
25.11.21
13:31
(112) Новый поиск мимо настроек компоновки работает. Так что решение не универсально.
115 exwill
 
25.11.21
13:31
(112) Я тоже к кнопке склоняюсь. Можно, правда, еще и обработчик ожидания использовать
116 oslokot
 
25.11.21
13:32
Можно же было закончить тему на (48) посту, ан нет - все копошатся
117 ДедМорроз
 
25.11.21
13:33
Отборы динамического списка работают также как отборы таблицв значений,то есть пользователь отобрал строки и мы видим их,а в таблице-то все строки остались на месте,чем динамический список хуже.
А вот если явно установить отбор или программно,то мы его прекрасно получаем в настройках компоновки,так как он отвечает за запрлнение таблицы динамического списка,а не за отображение этой таблицы на экране.

В таблице значений есть меиод Количество,но в ситуации пользовательского отбора он выведет не то,что нужно.

Как вариант,при каждом обновлении списка выделять временно все строки и считать их количество,тогда будет то,что пользователь видит.
118 acanta
 
25.11.21
13:36
Существует перечень задач, которые каждый программист должен попытаться решить (возможно несколькими способами) и прийти к выводу что идеал недостижим, но вот что получилось, то получилось. Полоса прокрутки в динамическом списке вероятно одна из них.
119 acanta
 
25.11.21
13:39
(117) правильно ли я понимаю, что динамический список с отбором и динамический список без отбора формируют в платформе один и тот же sql запрос? Или есть такое СУБД, где отбор транслируется в СУБД?
120 Kassern
 
25.11.21
13:44
(119) судя по ПолучитьИсполняемыеНастройкиКомпоновкиДанных() скорее всего на конечный отбор дин списка накладывается пользовательский отбор. Это легко проверить на каком нибудь большом списке документов к примеру, если просто поиском воспользоваться и вбить первые буквы контрагента без отбора по периоду, то это может выполняться ооочень долго. Но если встать на строчку с нужным клиентом и найти по значению текущей колонки, то отбор практически моментально отрабатывает.
121 fisher
 
25.11.21
14:18
(119) > динамический список с отбором и динамический список без отбора формируют в платформе один и тот же sql запрос
Не. Иначе была бы полная задница. Просто реализовано чуток через нее родимую.
122 Garykom
 
гуру
25.11.21
14:19
(121) угу парой запросов с соединением вместо одного
123 fisher
 
25.11.21
14:22
Просто видать когда Такси рисовали, просто херанули сверху еще одним слоем асфальта, вместо капремонта.
124 mistеr
 
25.11.21
15:15
(119) Предположу, что если реквизит индексирован, то отбор транслируется в запрос.
125 acanta
 
25.11.21
15:19
(123) вероятно, для ремонта плитки бетонной шаблоны утеряны, а каменную брусчатку уже нечем пилить..
126 ДедМорроз
 
26.11.21
03:05
В табличном поле есть отбор,а есть поиск - первый должен транслироваться в запрос,а второй накладывается уже на результат запроса - причем при поиске никакогг запроса и не выполняется.
А отбор,как и сортировка - это вывод настроек СКД,и тут их не транслировать в запрос достаточно сложно.
127 DrZombi
 
гуру
26.11.21
06:30
Мертвая хотелка, чертовки тормозит работу со списком. И в конечном счете бесполезное :)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn