Имя: Пароль:
1C
1С v8
Динамический список, как правильно "приготовить" количество элементов
,
0 exwill
 
24.11.21
20:43
Есть динамический список и форма списка справочника. Нужно в форме отображать количество элементов в динамическом списке. Как наиболее правильно это сделать? Какой обработчик события задействовать?
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
Мертвая хотелка, чертовки тормозит работу со списком. И в конечном счете бесполезное :)