0. Fragster 852 15.09.16 16:26 Сейчас в теме

Хватит создавать формы выбора!

Программа 1С предполагает, что каждому объекту нужна отдельная форма выбора. Да, такое иногда нужно. Но в моей практике почти всегда удобно пользоваться одинаковыми формами для выбора (не подбора!) и для списка.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. Поручик 4159 24.09.16 21:59 Сейчас в теме
А я не знал. В понедельник воспользуюсь.
2. slipers 26.09.16 10:16 Сейчас в теме
Изящно. Беру на заметку.
3. konstruktiv 26.09.16 12:21 Сейчас в теме
4. TODD22 17 26.09.16 12:28 Сейчас в теме
(3) konstruktiv,
Получается здесь какая-то неактуальная информация

Как мне кажется создавать одну форму списка и форму выбора не правильно с точки зрения подходов к разработке.
Это как с обработчиками событий. Для каждого обработчика своя процедура. Так же и тут для каждой задачи своя форма. Как минимум путаницы будет меньше. Особенно если работаешь не один. И после тебя людям поддерживать и дорабатывать конфигурацию. И люди которые придут со стороны как минимум ожидают что это будут разные формы.
И что потом делать если вдруг надо изменить поведение формы списка, а поведение формы выбора оставить как есть... придётся делать две формы.

ИМХО не очень красивое решение...
kambekon; rpgshnik; Stim213; DrAku1a; Silenser; Shmell; 7OH; Tyler Durden; МимохожийОднако; kostik_love; alyaev.a.v; ZOMI; Irwin; +13 3 Ответить
6. Fragster 852 26.09.16 12:34 Сейчас в теме
(4) TODD22, тут можно поспорить. Повторю публикацию - мне много раз приходилось убеждаться, что когда при выборе значения в поле ввода открывается такая же форма, как и при отображении списка - у пользователя возникает меньший дискомфорт. Он пользуется теми же приемами (например для отбора), что и при работе в форме списка. Колонки находятся на тех же местах, их ширина запомнена, ненужные для пользователя данные он сам выключил, условное оформление, которое он для себя настроил - схоранилось. А когда это две разных формы - то, например, добавлении реквизита или изменения запроса ДС для вывода доп. информации, приходится дорабатывать две формы, что влечет дублирование кода.

И что потом делать если вдруг надо изменить поведение формы списка, а поведение формы выбора оставить как есть... придётся делать две формы.

Как часто приходилось это делать? Понятно, что есть случаи типа отображения остатков и прочие особенности форм подбора. Но посчитайте по своим конфигурациям, сколько форм выбора по отображаемой информации дублируют формы списка. Или отображают меньше информации (которая бывает необходима)?
ErshKUS; lost-s0u1; Deletex; IrinaKostroma; freeek; SoldierOne; Krepkov; cefew; zqzq; sigmov; Трактор; IgorS; Gorus; ander_; +14 Ответить
7. TODD22 17 26.09.16 12:40 Сейчас в теме
(6)
тут можно поспорить.

ИМХО тут даже спорить не о чем.
Нужно придерживаться стиля применяемого в типовых...
А не придумывать свои велосипеды...

влечет дублирование кода.

Так создание однотипных обработчиков событий то же ведёт к дублированию кода. Может тогда один обработчик начать делать?
Он пользуется теми же приемами (например для отбора), что и при работе в форме списка.

А что приёмы в форме выбора и форме списка отличаются?
Tyler Durden; +1 2 Ответить
8. Fragster 852 26.09.16 12:50 Сейчас в теме
(7) TODD22,
А что приёмы в форме выбора и форме списка отличаются?

вот именно - меньше разных контекстов, меньше раздражение кожи пользователя
9. TODD22 17 26.09.16 12:58 Сейчас в теме
(8)
вот именно - меньше разных контекстов, меньше раздражение кожи пользователя

Ещё ни разу не видел раздражения пользователя на список формы и список выбора... Да так что бы раздражение вызывало что это две разные формы и нужно срочно переделать в одну.

А вот такие "неожиданные" решения ИМХО не правильно. Механизмы должны быть так сказать с ожидаемым поведением и очевидной реализацией, 1С в первую очередь открытая система.

Если везде и всегда используются две разные формы то наверное правильно делать так же. Чем придумывать свой велосипед.
Пусть даже это увеличивает трудоёмкость. Зато это понятно и очевидно.
10. Fragster 852 26.09.16 13:08 Сейчас в теме
(9) TODD22, ну, у вас пользователи не настраивают условное оформление, видимо. Не настраивают ширину колонок, не выключают "лишние" для них.

Я посчитал, сколько у меня одинаковых форм и как часто приходится дорабатывать обе, и вывел для себя подобное решение. Например когда дополнительная связанная информация хранится в РС и данные в этом РС вдруг расширили доп. реквизитом, надо этот реквизит добавить в обе формы.

Естественно, данное решение не панацея. Я не призываю его применять вообще везде. Например брать и перепиливать вдоль и поперек объекты типовых конфигураций не следует. А вот провести анализ, понять, сколько же одинаковых форм у нас есть в конфигурации - бывает полезно.
46. zurapa 13.07.18 05:37 Сейчас в теме
Да вы провокатор батенька.
Вам люди говорят о не нужности лишнего кода и работы, когда можно обойтись одной формой. Это основной принцип программирования - не плодить дубли. Если у вас одна база на три сотрудника и вы её почти не дорабатываете, а только обновляете и регулярно скучаете от просмотра YouTube на работе, то тогда, да, ваш вариант делать много повторяющихся формочек - так не забудете, как программировать. Если вы франчик, который сегодня делает изменения в конфигурации, а завтра его прогнали и взяли другого, а через три месяца снова прибежали к вам, потому что вы делаете "дёсыва", тогда это тоже ваш вариант.
А, если у вас сотрудников 20 тыс. и пользователей около 10 тыс, баз по регионам обменивающихся конфигурацией штук - 100, и во всей этой каше вам постоянно нужно делать разные хотелки в этих конфигурациях, то вы вероятно, будете экономить ваши силы на создание повторяющегося кода. В том числе и ценой общих функций вставляемые в обработчики событий, чтобы не фигачить, как оголтелый, когда нужно будет глобально везде сменить механизм обработки какого-то шаблонного события. Вы работаете в обольшой корпорации, где история работающей конфигурации уже насчитывает второй десяток лет. У вас многие бизнес-процессы не так, как у 1С (потому что это жизнь, а не сферический конь в вакууме!).
Вот об этом толкуют люди. Что касается самой 1С, то она в своём коде уж очень любит всё попилить на кусочки в общих функциях, чтобы это всё бегало из процедуры в процедуру и выполняло там "по одному шажочку".
21. monkbest 97 28.09.16 08:26 Сейчас в теме
(7) TODD22, чувак, открой ЗУП 3.0!!! Это АДДДДДДДД. Там фильтров в форме выбора сотрудников (уволен, организация, подразделение, архивный) жесть скока. И может так случиться, что в форме выбора сотрудника нет, а в форме списка есть. И пользователь сходу не врубается, почему данные отличаются. Я молчу, что при выборе физ-лица они показывают формы выбора сотрудника.

Я с автором солидарен: одна форма, единая логика работы! Прячем "архивных" сотрудников, следовательно прячем их и там и там. Один справочник - одна форма со списком.
lost-s0u1; +1 Ответить
22. TODD22 17 28.09.16 08:35 Сейчас в теме
(21) monkbest,
чувак, открой ЗУП 3.0!!! Это АДДДДДДДД. Там фильтров в форме выбора сотрудников (уволен, организация, подразделение, архивный) жесть скока.

Запустил штук 10 зупов 3.0. Никаких проблем описанных тобой не было ни у одного пользователя с формами списков и выборов так что бы их нужно было переделать в одну форму.
33. AlexO 125 06.09.17 09:57 Сейчас в теме
(7)
Может тогда один обработчик начать делать?
Это как?!
34. TODD22 17 06.09.17 10:02 Сейчас в теме
(33)писать одну процедуру и назначать её нескольким обработчикам....
35. AlexO 125 06.09.17 10:21 Сейчас в теме
(34) так реакция все равно будет только по своему обработчику. Да и полностью совместить обработку параметров разных обработчиков в одной процедуре не удастся.
13. alyaev.a.v 26.09.16 23:01 Сейчас в теме
(6) Есть конечно и такие формы выбора и списка где одинаково все, но чаще наоборот форма списка раскрашенная , куча настроек быстрых отборов и т.д. А форма выбора минималистична, а порой ввод по строке вообще избавляет от формы выбора.А еще форма выбора очень часто открывается с программным отбором который не нужен списку, ну и так далее, если если если....
Ali1976; Tyler Durden; dj_serega; TODD22; CSiER; +5 Ответить
14. Drak0n 156 27.09.16 10:01 Сейчас в теме
Поддержу (13) alyaev.a.v.
Решение с 1 формой не рекомендовал бы только из-за наложенных отборов. На форму списка почти всегда накладываются пользовательские отборы. При использовании этой формы как формы выбора мы рискуем:
- пересечь пользовательский отбор с "программным"
- ввести пользователя в заблуждение, не отобразив доступные для выбора элементы, скрытые пользовательскими отборами.

Хотя реализация с 1 формой встречается и в типовых конфигурациях 1С.
Tyler Durden; kostik_love; herfis; Fragster; +4 Ответить
15. TODD22 17 27.09.16 10:07 Сейчас в теме
(14) Drak0n,
Хотя реализация с 1 формой встречается и в типовых конфигурациях 1С.

В каких ?
Мне вроде не попадалось что бы было сделано одной формой форма списка и выбора.
20. Drak0n 156 27.09.16 11:50 Сейчас в теме
(15) TODD22, помнится в УНФ у справочников "Контрагенты" и "Номенклатура" тоже 1 форма...
18. Fragster 852 27.09.16 11:16 Сейчас в теме
(14) Drak0n, да, с пользовательскими отборами косяк есть. Это один из самых спорных моментов, причем это спорный момент в архитекторе платформы, о который немало копий сломано на партнерском форуме. Сломать форму можно не только в данном случае, но и в случае разных форм. Например, если есть несколько полей, открывающих одну форму выбора с разной связью параметров выбора.
Вроде бы есть даже записанное пожелание у разработчиков 1с, чтобы снималось "использование" пользовательского отбора в случае пересечения фиксированных и пользовательских настроек.
5. Fragster 852 26.09.16 12:30 Сейчас в теме
(3) konstruktiv, там очень туманно написано. Описанный мной вариант работает. Лишних вызовов сервера не плодит.
11. jerry_maguire 26.09.16 13:59 Сейчас в теме
А зачем свойство структуры сравнивать с Неопределено ?

Параметры.МножественныйВыбор <> Неопределено


Можно воспользоваться методом

Параметры.Свойство("МножественныйВыбор")
12. Fragster 852 26.09.16 14:06 Сейчас в теме
(11) jerry_maguire, к сожалению, этот параметр у формы всегда есть (просто равен Неопределено) и .Свойство() возвращает Истина. А Параметры.Свойство("МножественныйВыбор", Элементы.Список.МножественныйВыбор) вообще выдает ошибку "несоответствие типов".
16. olgerd666 42 27.09.16 10:11 Сейчас в теме
Например в Бухгалтерия предприятия, редакция 3.0 (3.0.43.258) Форма списка в справочнике Физические лица используется в Выборе и Списке
Прикрепленные файлы:
17. TODD22 17 27.09.16 10:18 Сейчас в теме
19. herfis 264 27.09.16 11:35 Сейчас в теме
Ну, для простейших справочников (которые суть перечисления с парой доп-реквизитов) предложение вполне здравое.
Вряд ли там когда-то потребуется отдельная форма выбора, как и отборы.
23. kg_am 119 28.09.16 11:44 Сейчас в теме
Мы с самого начала отказались от идеи плодить лишние сущности. Только стандартный код при создании на сервере у нас немножко другой:
ЭтаФорма.Элементы.Список.РежимВыбора = Параметры.РежимВыбора;
Если ЭтаФорма.Элементы.Список.РежимВыбора Тогда
	ЭтаФорма.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
КонецЕсли;

За нюанс с множественным выбором - спасибо.
24. Fragster 852 28.09.16 12:03 Сейчас в теме
(23) kg_am, добавлю в пост, если не против
UPD: проверил, при стандартной обработке начала выбора окно и так открывается в этом режиме, эта строка не требуется.
25. kg_am 119 28.09.16 12:09 Сейчас в теме
(24)

При стандартном - да, но если выбор открывается программно, то тут оно и пригождается.
Конечно не против. Как можно быть против? ;)
26. Fragster 852 28.09.16 12:29 Сейчас в теме
(25) kg_am, если программно - то можно и в параметр ОткрытьФорму указать.
27. clev 24 25.11.16 10:30 Сейчас в теме
28. stolya 3 21.12.16 19:41 Сейчас в теме
Не так давно тоже начал применять данный подход и столкнулся с двумя особенностями из-за которых перестал использовать данный способ:
1. Сохраняются все настройки формы (добавленные поля, пользовательский отбор, размещение элементов на форме). Добавил я как то в форму списка подчиненного владельцу пользовательский отбор по владельцу, так как на форме списка его не было по бизнес логике, и соответственно он сохранился и применялся в режиме выбора с установленным отбором по владельцу через Связи параметров выбора.
2. Если используется метод глобального контекста ПоказатьВводЗначения или ВвестиЗначение, то в открываемой форме режим выбора не устанавливается, в результате приходится дописывать параметр РежимВыбора в модуль менеджера в событие ОбработкаПолученияФормы при открытии формы выбора что не очень удобно. Не тестировал еще работу в режиме подбора в список значений, открываемый в отборе компоновки с видом сравнения "В списке" и т.п.
Fragster; +1 Ответить
29. Fragster 852 26.12.16 11:14 Сейчас в теме
(28) Спасибо за замечания!
1. Проблема понятна, обход делается в три строчки:
Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда
Параметры.КлючПользовательскихНастроек = "РежимВыбора";
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
КонецЕсли;
добавлю это в публикацию.
2. Странно, видимо имеет место ошибка платформы в конкретном вашем релизе. У меня при ПоказатьВводЗначения Параметры.РежимВыбора = Истина. Проверял на релизе 8.3.8.2137, режим совместимости = не использовать.
41. zqzq 17 24.01.18 10:08 Сейчас в теме
(29)
1. Проблема понятна, обход делается в три строчки:
Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда
Параметры.КлючПользовательскихНастроек = "РежимВыбора";
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
КонецЕсли;
добавлю это в публикацию.
На платформе 8.2.19 выдаёт ошибку на этих строках
)}: Поле объекта не обнаружено (КлючПользовательскихНастроек)
	Если Параметры.РежимВыбора И Не ЗначениеЗаполнено(Параметры.КлючПользовательскихНастроек) Тогда

И т.к. в 8.2 отборы не запоминаются, то оно и не нужно.
30. Pawlick 9 21.02.17 12:06 Сейчас в теме
Ещё ни разу не видел раздражения пользователя на список формы и список выбора...


У Вас еще все впереди, видимо :)

И после тебя людям поддерживать и дорабатывать конфигурацию. И люди которые придут со стороны как минимум ожидают что это будут разные формы.


Может стоит посмотреть в основные формы в конфигураторе?

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

Для меня как для разработчика проще обслуживать одну и туже форму, особенно на сильно доработанных конфигурациях, и особенно на сложных формах. Если в форме 100500 отборов, и она находится в активной разработке, и в день приходит 15 "указивок" что и как изменить.
Например у меня форма документа заказ покупателя:
на форме колонки с текущим долгом, датой ближайшей отгрузки, статусом обеспечения и оплаты, менеджер видит только свои заказы, старший менеджер заказы своего отдела, руководить направления только заказы по своему направлению и еще 50 "если".
И ты еще одну задачу типа "если это младший менеджер, то что бы только не отгруженные", и все это надо сделать в двух СОВЕРШЕННО ОДИНАКОВЫХ ФОРМАХ, открывающихся в разных режимах...

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

А с точи зрения пользователя - уже писали выше. Одни колонки, одно оформление.








31. Fragster 852 21.02.17 12:25 Сейчас в теме
(30)
С проблемой программных отборов при открытии формы в режиме выбора пока не сталкивался, но уверен что решение есть. Тоже программное :)

при наличии отборов можно выключать "предопределенные" пользовательские настройки, и использовать отдельный ключ для "непредопределенных". Вторая часть есть в примере кода, первая часть (и для фиксированных настроек для сложногоотбора и для отбора при связи параметров выбора) используется, например в http://infostart.ru/public/556514/ в форме списка документа "Задачи".
32. Hatson 108 05.09.17 17:15 Сейчас в теме
Разные формы списка и выбора и раньше выбешивали.
36. AlexO 125 06.09.17 10:59 Сейчас в теме
Кстати, у 1С в типовых все тоже самое (немного видоизменен код в "ПриСозданииНаСервере" у формы списка), только никаких "нюансов" со множественностью выбора, работает и без этого:
	Если Параметры.РежимВыбора Тогда
		Элементы.Список.РежимВыбора = Истина;
	КонецЕсли;

Подозреваю, что код статьи подсмотрен через партнерский форум в типовых, т.к. навряд ли 1С использовала данный материал в своих разработках ))
Прикрепленные файлы:
37. Octopus 337 06.09.17 11:07 Сейчас в теме
(36)
Элементы.Список.РежимВыбора = Параметры.РежимВыбора;
38. AlexO 125 06.09.17 11:19 Сейчас в теме
(37) ну вот не написали так, сделали через условие. Я же говорю - немного видоизменили.
Главное - что никаких проблем с множественным выбором и пользовательскими настройками.
Поэтому нет дополнительного кода.
40. Fragster 852 06.09.17 11:56 Сейчас в теме
(38) а вот есть проблема с множественным выбором. в варианте (36) он не работает.
39. Fragster 852 06.09.17 11:47 Сейчас в теме
(36) нет, никакой код не подсматривался.
42. spenser123 25.04.18 11:19 Сейчас в теме
Не актуально совсем... 8.3.11.3034 (без режима совместимости)- если форма не является формой выбора - стандартные команды выбора исчезают и недоступны, а в старых формах списка которые использовались как формы выбора - получаем программные ошибки с завершением работы (форма пользователей от ут например)
43. Fragster 852 25.04.18 13:01 Сейчас в теме
(42) Ну не знаю, у меня работает, в т.ч. в https://infostart.ru/public/556514/
Одна и та же форма является формой списка и формой выбора:
44. spenser123 26.04.18 12:26 Сейчас в теме
(43) условия проявления косяка - 8.3.11.3034, Режим совместимости - Не использовать.
Поясню итоги исправлений:
Косяк провился в первую очередь в справочниках из типовой УТ (Пользователи, внешние пользователи, группы пользователей), там форма списка была назначена и на список и на выбор, программно устанавливался Режим выбора у списков на форме, и в зависимости от "РежимВыбора" прятались/показывались кнопки выбора - результат был выбивание из программы. Если у каждого отдельного элемнта формы списка не установлен режим выбора - в списке команд нет стандартной команды "Выбрать", в результате если вынесена кнопка этой команды на форму и управляется её видимость, а режим выбора назначается программно - в случае параметра РежимВыбора = Ложь, у кнопки пропадает команда и кнопка сама пропадает из элемнтов формы, в результате код который их прячет - вызывает ошибку с вылетом.
45. Fragster 852 26.04.18 13:09 Сейчас в теме
(44)
1. Это очень похоже на ошибку платформы
2. БСП 2.4 У(и УТ в частности) не поддерживает режим совместимости, отличный от 8.3.10 ;)
надо проверить в БСП 3.0 (ну и на платформе 8.3.12), но там куча косяков и я пока не готов её себе ставить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день