gifts2017

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

Опубликовал Антонио (Fragster) в раздел Программирование - Практика программирования

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

Если в свойствах объекта не указывать форму выбора - платформа делает свою форму выбора из ключевых реквизитов, если указать уже имеющуюся форму списка - то она "почему-то" не работает. Исправляем досадную недоработку платформы буквально четырьмя строчками кода в процедуре ПриСозданииНаСервере у формы списка:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

...

	// Элементы.Список - основной реквизит с динамическим списком
	Элементы.Список.РежимВыбора = Параметры.РежимВыбора;
	Если Параметры.МножественныйВыбор <> Неопределено Тогда
		Элементы.Список.МножественныйВыбор = Параметры.МножественныйВыбор;
	КонецЕсли;

...

КонецПроцедуры

Указываем форму списка в качестве формы выбора:

В 90% случаев никаких доработок больше не требуется, если указать форму списка в качестве формы выбора - она будет правильно работать.

Доработки нужны в случае сложных форм подбора, которые опираются на данные вызывающей формы.

См. также

Подписаться Добавить вознаграждение

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Естественно, данное решение не панацея. Я не призываю его применять вообще везде. Например брать и перепиливать вдоль и поперек объекты типовых конфигураций не следует. А вот провести анализ, понять, сколько же одинаковых форм у нас есть в конфигурации - бывает полезно.
11. Александр Алехин (jerry_maguire) 26.09.16 13:59
А зачем свойство структуры сравнивать с Неопределено ?

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


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

Параметры.Свойство("МножественныйВыбор")
12. Антонио (Fragster) 26.09.16 14:06
(11) jerry_maguire, к сожалению, этот параметр у формы всегда есть (просто равен Неопределено) и .Свойство() возвращает Истина. А Параметры.Свойство("МножественныйВыбор", Элементы.Список.МножественныйВыбор) вообще выдает ошибку "несоответствие типов".
13. Александр Аляев (alyaev.a.v) 26.09.16 23:01
(6) Fragster, Есть конечно и такие формы выбора и списка где одинаково все, но чаще наоборот форма списка раскрашенная , куча настроек быстрых отборов и т.д. А форма выбора минималистична, а порой ввод по строке вообще избавляет от формы выбора.А еще форма выбора очень часто открывается с программным отбором который не нужен списку, ну и так далее, если если если....
Ali1976; Tyler Durden; dj_serega; TODD22; CSiER; +5 Ответить 1
14. Алексей (Drak0n) 27.09.16 10:01
Поддержу (13) alyaev.a.v.
Решение с 1 формой не рекомендовал бы только из-за наложенных отборов. На форму списка почти всегда накладываются пользовательские отборы. При использовании этой формы как формы выбора мы рискуем:
- пересечь пользовательский отбор с "программным"
- ввести пользователя в заблуждение, не отобразив доступные для выбора элементы, скрытые пользовательскими отборами.

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

В каких ?
Мне вроде не попадалось что бы было сделано одной формой форма списка и выбора.
16. Олег Медведев (olgerd666) 27.09.16 10:11
Например в Бухгалтерия предприятия, редакция 3.0 (3.0.43.258) Форма списка в справочнике Физические лица используется в Выборе и Списке
Прикрепленные файлы:
17. борян петров (TODD22) 27.09.16 10:18
18. Антонио (Fragster) 27.09.16 11:16
(14) Drak0n, да, с пользовательскими отборами косяк есть. Это один из самых спорных моментов, причем это спорный момент в архитекторе платформы, о который немало копий сломано на партнерском форуме. Сломать форму можно не только в данном случае, но и в случае разных форм. Например, если есть несколько полей, открывающих одну форму выбора с разной связью параметров выбора.
Вроде бы есть даже записанное пожелание у разработчиков 1с, чтобы снималось "использование" пользовательского отбора в случае пересечения фиксированных и пользовательских настроек.
19. Сан Саныч (herfis) 27.09.16 11:35
Ну, для простейших справочников (которые суть перечисления с парой доп-реквизитов) предложение вполне здравое.
Вряд ли там когда-то потребуется отдельная форма выбора, как и отборы.
20. Алексей (Drak0n) 27.09.16 11:50
(15) TODD22, помнится в УНФ у справочников "Контрагенты" и "Номенклатура" тоже 1 форма...
21. Антон Антонов (monkbest) 28.09.16 08:26
(7) TODD22, чувак, открой ЗУП 3.0!!! Это АДДДДДДДД. Там фильтров в форме выбора сотрудников (уволен, организация, подразделение, архивный) жесть скока. И может так случиться, что в форме выбора сотрудника нет, а в форме списка есть. И пользователь сходу не врубается, почему данные отличаются. Я молчу, что при выборе физ-лица они показывают формы выбора сотрудника.

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

Запустил штук 10 зупов 3.0. Никаких проблем описанных тобой не было ни у одного пользователя с формами списков и выборов так что бы их нужно было переделать в одну форму.
23. Александр (kg_am) 28.09.16 11:44
Мы с самого начала отказались от идеи плодить лишние сущности. Только стандартный код при создании на сервере у нас немножко другой:
ЭтаФорма.Элементы.Список.РежимВыбора = Параметры.РежимВыбора;
Если ЭтаФорма.Элементы.Список.РежимВыбора Тогда
	ЭтаФорма.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
КонецЕсли;
...Показать Скрыть

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

При стандартном - да, но если выбор открывается программно, то тут оно и пригождается.
Конечно не против. Как можно быть против? ;)
26. Антонио (Fragster) 28.09.16 12:29
(25) kg_am, если программно - то можно и в параметр ОткрытьФорму указать.
27. V (clev) 25.11.16 10:30
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа