Использование флажков в динамических списках 2.0

Публикация № 1584125 13.01.22

Приемы и методы разработки - Инструментарий разработчика - Работа с интерфейсом

Флажки флажок пометка пометки динамический список подбор выбор заполнение выделение

Пример реализации динамического списка с пометками в режиме множественного и единичного выбора.

На момент решения опубликовать данный материал на инфостарте была найдена уже существующая подобная тема, а точнее некий "Зародыш". Посему, решил назвать публикацию аналогично, как бы продолжением этой эпопеи связанной с прикручиванием флажкового функционала к ДС. И вот теперь здесь и сейчас, вашему чуткому вниманию, представлена реализация уже более полноценного и наглядного примера работы динамического списка с пометками в режиме множественного и единичного выбора. Изменение значения пометки строки происходит по двойному клику мышки (событие "Выбор"). Также, можно помечать только выделенные строки (кнопками: [v] "Установить пометки" или [ ] "Снять пометки"). Событие ДС ПриПолученииДанныхНаСервере реализовано в версии платформы 8.3.10.2168, а потому начиная именно с этой версии можно пользоваться данным приёмчиком. Больше пояснять думаю ничего и необязательно, остальное немного пройдясь по коду думаю и так всё понятно станет, но если что, спрашивайте в комментах.

Внесённые в код изменения:

  • 18.01.2022 - Пофиксил существенный недочёт: когда при выборе (Процедура СписокВыбор) отключалась &ОбщаяПометка и попадался большой и не до конца пролистанный список, то в ВыбранныеДокументы соответственно не могли попадать непрочитанные порции строк ДС (Процедура СписокПриПолученииДанныхНаСервере). Благодарю dhurricane за наводку на ошибку. Выход нашел такой: добавил в пару мест список значений НевыбранныеДокументы, теперь всё отлично! Очень извиняюсь, если кто-то и куда-то уже применил код данной публикации без этой доработки, обязательно доделайте как теперь.

Запрос динамического списка с пометками и реквизиты формы подбора:

Код формы подбора:

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Если Параметры.Свойство("РежимЕдиничногоВыбора") Тогда
		РежимЕдиничногоВыбора = Параметры.РежимЕдиничногоВыбора;
	КонецЕсли;
		
	Если Параметры.Свойство("ИсключаемыеДокументы") Тогда
		ИсключаемыеДокументы.ЗагрузитьЗначения(Параметры.ИсключаемыеДокументы);
	КонецЕсли;
	Список.Параметры.УстановитьЗначениеПараметра("ИсключаемыеДокументы", ИсключаемыеДокументы);
	
	Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Истина);
	Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", Новый СписокЗначений);
	Список.Параметры.УстановитьЗначениеПараметра("НевыбранныеДокументы", Новый СписокЗначений);
	АдресХранилищаВыбранныхДокументов = ПоместитьВоВременноеХранилище(Новый СписокЗначений, УникальныйИдентификатор);
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресХранилищаВыбранныхДокументов", АдресХранилищаВыбранныхДокументов);
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("РежимЕдиничногоВыбора", РежимЕдиничногоВыбора);
		
	Если Параметры.Свойство("ТекущийДокумент") Тогда
		Элементы.Список.ТекущаяСтрока = Параметры.ТекущийДокумент;
	КонецЕсли;
	
	Если РежимЕдиничногоВыбора Тогда
		Элементы.Список.МножественныйВыбор = Ложь;
		Элементы.ГруппаПометки.Видимость = Ложь;
		Элементы.СписокПометка.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры
	
#КонецОбласти

#Область ОбработчикиСобытийЭлементовФормы

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	
	Если Настройки.ДополнительныеСвойства.РежимЕдиничногоВыбора Тогда
		Возврат;
	КонецЕсли;
	
	ВыбранныеДокументы = ПолучитьИзВременногоХранилища(Настройки.ДополнительныеСвойства.АдресХранилищаВыбранныхДокументов);
		
	Для Каждого СтрокаСписка Из Строки Цикл
		Если СтрокаСписка.Значение.Данные.Пометка И ВыбранныеДокументы.НайтиПоЗначению(СтрокаСписка.Ключ) = Неопределено Тогда
			ВыбранныеДокументы.Добавить(СтрокаСписка.Ключ);
		КонецЕсли;
	КонецЦикла;

	ПоместитьВоВременноеХранилище(ВыбранныеДокументы, Настройки.ДополнительныеСвойства.АдресХранилищаВыбранныхДокументов);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если РежимЕдиничногоВыбора Тогда
		Выбрать(Неопределено);
		Возврат;
	КонецЕсли;
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	ВыбранныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаВыбранныхДокументов);
	Если ТекущиеДанные.Пометка Тогда
		СтрокаСписка = ВыбранныеДокументы.НайтиПоЗначению(Элементы.Список.ТекущаяСтрока);
		Если СтрокаСписка <> Неопределено Тогда
			ВыбранныеДокументы.Удалить(СтрокаСписка);
		КонецЕсли;
		НевыбранныеДокументы.Добавить(Элементы.Список.ТекущаяСтрока);
	Иначе
		СтрокаСписка = НевыбранныеДокументы.НайтиПоЗначению(Элементы.Список.ТекущаяСтрока);
		Если СтрокаСписка <> Неопределено Тогда
			НевыбранныеДокументы.Удалить(СтрокаСписка);
		КонецЕсли;
		ВыбранныеДокументы.Добавить(Элементы.Список.ТекущаяСтрока);
	КонецЕсли;	
	
	ПоместитьВоВременноеХранилище(ВыбранныеДокументы, АдресХранилищаВыбранныхДокументов);
	
	Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);
	Список.Параметры.УстановитьЗначениеПараметра("НевыбранныеДокументы", НевыбранныеДокументы);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура УстановитьПометки(Команда)
	
	ИзменитьПометки(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура СнятьПометки(Команда)
	
	ИзменитьПометки(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьПометки(Значение)
	
	Если Элементы.Список.ВыделенныеСтроки.Количество() > 1 Тогда
		
		ВыбранныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаВыбранныхДокументов);
		
		Для Каждого СтрокаСписка Из Элементы.Список.ВыделенныеСтроки Цикл
			
			СтрокаВыбранных = ВыбранныеДокументы.НайтиПоЗначению(СтрокаСписка);
			Если Значение Тогда
				Если СтрокаВыбранных = Неопределено Тогда
					ВыбранныеДокументы.Добавить(СтрокаСписка);
				КонецЕсли;
			Иначе
				Если СтрокаВыбранных <> Неопределено Тогда
					ВыбранныеДокументы.Удалить(СтрокаВыбранных);
				КонецЕсли;
			КонецЕсли;
			
		КонецЦикла;
		
		ПоместитьВоВременноеХранилище(ВыбранныеДокументы, АдресХранилищаВыбранныхДокументов);
		
		Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Ложь);
		Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);
		
	Иначе
		
		ПоместитьВоВременноеХранилище(Новый СписокЗначений, АдресХранилищаВыбранныхДокументов);
		
		Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Значение);
		Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", Новый СписокЗначений);
		
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура Выбрать(Команда)
	
	Если РежимЕдиничногоВыбора Тогда
		ВыбранныйДокумент = Элементы.Список.ТекущаяСтрока;
		Если ВыбранныйДокумент = Неопределено Тогда
			Возврат;
		КонецЕсли;
		ВыбранныеДокументы = Новый СписокЗначений;
		ВыбранныеДокументы.Добавить(ВыбранныйДокумент);
		Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Ложь);
		Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);
	КонецЕсли;
	
	ПараметрыВыбора = Новый Структура;
	ПолучитьДанныеИЗаполнитьПараметры(ПараметрыВыбора);
	
	ОповеститьОВыборе(ПараметрыВыбора);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ПолучитьСписокТаблицойЗначений()
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Пометка", Истина);
	
	СКД = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки , , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	Возврат ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецФункции

&НаСервере
Процедура ПолучитьДанныеИЗаполнитьПараметры(СтруктураПараметров)
	
	Результат = ПолучитьСписокТаблицойЗначений();
	
	СтруктураПараметров.Вставить("ВыбранныеДокументы", ОбщегоНазначения.ТаблицаЗначенийВМассив(Результат));
		
КонецПроцедуры

#КонецОбласти

 

 

События интеграции для открытия формы подбора:

Код интеграции для работы с формой подбора:

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Подобрать(Команда)
	
	Если Объект.ДокументыЗаказов.Количество() Тогда
		КнопкиДиалога = Новый СписокЗначений;
		КнопкиДиалога.Добавить(КодВозвратаДиалога.Да, "Очистить и Заполнить");
		КнопкиДиалога.Добавить(КодВозвратаДиалога.Нет, "Добавить");
		КнопкиДиалога.Добавить(КодВозвратаДиалога.Отмена, "Отмена");
		ОписаниеОповещения = Новый ОписаниеОповещения("ПодобратьПослеВопроса", ЭтотОбъект);
		ПоказатьВопрос(ОписаниеОповещения, "В таблице имеются строки, как поступить?", КнопкиДиалога,,, "Заполнение по заказам");
	Иначе
		ПодобратьПослеВопроса(КодВозвратаДиалога.Нет, Неопределено);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовФормы

&НаКлиенте
Процедура ПодобратьПослеВопроса(Результат, ДополнительныеПараметеры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.ДокументыЗаказов.Очистить();
	КонецЕсли;
	
	Если Результат <> КодВозвратаДиалога.Отмена Тогда
		ОткрытьФормуПодбора();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ВыбранноеЗначение = Неопределено Тогда
		Возврат;
	КонецЕсли;
		
	Если ИсточникВыбора.ИмяФормы = "ВнешняяОбработка.ДинамическийСписокСПометками.Форма.ФормаПодбора" Тогда
		
		Для Каждого ВыбранныйДокумент Из ВыбранноеЗначение.ВыбранныеДокументы Цикл
			НоваяСтрока = Объект.ДокументыЗаказов.Добавить();
			НоваяСтрока.Документ = ВыбранныйДокумент.Документ;
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекущаяСтрока = Элементы.ДокументыЗаказов.ТекущиеДанные;
		
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("РежимЕдиничногоВыбора", Истина);
	ПараметрыОткрытия.Вставить("ТекущийДокумент", ТекущаяСтрока.Документ);
	ОткрытьФормуПодбора(ПараметрыОткрытия);
		
КонецПроцедуры

&НаКлиенте
Процедура ДокументОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Если ВыбранноеЗначение = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТекущаяСтрока = Элементы.ДокументыЗаказов.ТекущиеДанные;
	ТекущаяСтрока.Документ = ВыбранноеЗначение.ВыбранныеДокументы[0].Документ;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ОткрытьФормуПодбора(ПараметрыОткрытия = Неопределено)
	
	Если ПараметрыОткрытия = Неопределено Тогда
		ПараметрыОткрытия = Новый Структура;
	КонецЕсли;
	
	//++ Необязательное: для случаев когда нужно исключить уже подобранные
	ИсключаемыеДокументы = Новый Массив;
	Для Каждого СтрокаТаблицы Из Объект.ДокументыЗаказов Цикл
		Если ЗначениеЗаполнено(СтрокаТаблицы.Документ) Тогда
			ИсключаемыеДокументы.Добавить(СтрокаТаблицы.Документ);
		КонецЕсли;
	КонецЦикла;
	ПараметрыОткрытия.Вставить("ИсключаемыеДокументы", ИсключаемыеДокументы);
	//--
	
	ОткрытьФорму("ВнешняяОбработка.ДинамическийСписокСПометками.Форма.ФормаПодбора", 
		ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

#КонецОбласти

З.Ы.: Ну а если вдруг, у кого-то возникнет непреодолимое желание очень поблагодарить автора, то он может скачать обработку с примером, лично я не против :). Там задействованы ссылки на типовой документ ЗаказКлиента. По идее, подойдет для любой конфигурации, где есть такой документ, и даже если его не окажется, всегда можно на любой другой переназначить.

Пользуйтесь на благо! Всем Радости и Добра!

Скачать файлы

Наименование Файл Версия Размер
Динамический список с пометками

.epf 18,16Kb
2
.epf 1.1 18,16Kb 2 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. o.nikolaev 206 16.01.22 01:18 Сейчас в теме
Если 1 млн. записей пометить, то что произойдет?
kser87; maksa2005; +2 Ответить
3. ActionBlog 17.01.22 09:19 Сейчас в теме
(1) Палец устанет галочки нажимать 100% :)
rovenko.n; +1 Ответить
6. VKislitsin 684 17.01.22 10:35 Сейчас в теме
(3) Так там ведь для выделенных строк ставятся. Один раз ctrl-a, второй раз согласиться с выделением больше тыщи. Дождаться когда "отлипнет" и тынц в кнопку :)
А если серьезно, у нас такой подход реализован в продуктиве. Записей не миллион, а несколько тысяч всего лишь. Но бизнес-процесс не предусматривает большого количества галочек - ставятся только поштучно. Работает.
8. o.nikolaev 206 17.01.22 12:34 Сейчас в теме
(6) :) Ну если с таким предусловием-то, то конечно. Нет, я понимаю что у примера сценарий использования "с ограничениями". Только это как-то не указано. И на больших базах, если кто-то хлопнет выделение очень большого количества записей можно столкнуться с проблемами я так понимаю.
9. VKislitsin 684 17.01.22 12:54 Сейчас в теме
(8) Олег, ладно тебе придираться :)
Не у всех есть большие базы. А у кого есть, тот сам подумает об ограничениях.

если кто-то хлопнет выделение очень большого количества записей

Да просто не дождется окончания выделения - будет писать в техподдержку "база висит" :)
rovenko.n; o.nikolaev; mr_sav; +3 Ответить
5. SnubbyAston 48 17.01.22 09:38 Сейчас в теме
(1) Главное в статье необычный подход =) А минусы можно найти почти всегда. Для определенных задач точно можно использовать. Для справочника в тысячу значений максимум, например.
А можно еще и таблицу подобранного снизу прикрутить аналогично.
2. user1067792 17.01.22 08:46 Сейчас в теме
У вас опечатка в наименовании второго параметра в процедуре ПодобратьПослеВопроса(): ДополнительныеПарамтеры -> ДополнительныеПараметры.
11. mr_sav 60 17.01.22 18:07 Сейчас в теме
(2) Благодарю, поправлю, но особо это ничего не улучшит, кроме навыков правописания русского языка.
4. the1 975 17.01.22 09:20 Сейчас в теме
Зачем флажки в ДС? Зачем вообще эта публикация, если в исходной и так всё описано, причем даже лучше.
Прикрепленные файлы:
7OH; Revachol; Yashazz; ixijixi; +4 1 Ответить
12. mr_sav 60 17.01.22 18:21 Сейчас в теме
(4) Ну если там для тебя лучше - так лучше, я и не соревнуюсь за крутое описание, странный ты). И мне, например, в некоторых случаях быстрее и удобнее работать с ДС (и с его КомпоновщикомНастроек) чем с ТЗ. По-моему тебе просто внимания не хватает и видимо по большей части хотелось просто картинку котика поюзать)).
Obertone; starik-2005; +2 2 Ответить
15. the1 975 18.01.22 10:07 Сейчас в теме
(12) Ну то есть ты фактически скопировал отлично оформленную исходную публикацию, ухудшив качество подаваемого материала, а странный я. Окей. Про ТЗ я вообще ни слова не сказал, откуда претензия? Котик да, давно просился погулять.
starik-2005; ixijixi; +2 Ответить
20. mr_sav 60 18.01.22 16:25 Сейчас в теме
(15) Взял тот же принцип работы с ДС, на его основе захотелось сделать пофункциональнее форму выбора. Сделал для задачи заказчика. Потом решил в качестве примера опубликовать, может кому пригодится, поискал и нашел уже подобную тему, но как по мне, пример из той публикации менее функционален, там нет множественного выбора. Присмотрись внимательнее и уверен ты обязательно найдешь отличия, иначе зачем бы я тратил своё драгоценное время и тоже самое публиковал, тем более в свободный доступ. Добра тебе, внимательности и радостного котика)
Obertone; +1 Ответить
7. dhurricane 17.01.22 11:51 Сейчас в теме
Тоже есть пара вопросов:
1. Зачем в обработчике "ПриПолученииДанныхНаСервере" обновляется список выбранных документов по данными пометки, если сама пометка зависит от этого списка?
2. Зачем для возврата списка ссылок используется СКД, если уже есть коллекция ВыбранныеДокументы?
3. Немного непредсказуемо на мой взгляд работает установка всех флажков. При нажатии на кнопку помечаются все документы, а уже при завершении выбора возвращаются ссылки с учетом пользовательских отборов.
mr_sav; Rustig; +2 Ответить
13. mr_sav 60 17.01.22 18:48 Сейчас в теме
(7)
1. Для того, что, если ты не все строки будешь выбирать, то тебе надо их куда-то собирать. ДС построчно ты просто так не обойдешь, а в ПриПолученииДанныхНаСервере всё для этого имеется.
2. Затем, чтобы получить все выбранные строки со всеми колонками выведенными на форму, а не только "ключ строки". Если для твоих задач это не надо, то и используй только список значений ВыбранныеДокументы, никто не запрещает.
3. Не понял тебя, попонятнее поясни?

А вообще, я тебе советую, прежде чем подобные вопросы задавать, взять самому да попробовать набросать обработку на основе предоставленного кода, и там уже что-нибудь убрать тебе непонятное и посмотреть результат, сразу наглядно поймешь что лишнего здесь ничего нет. Код и скрины в свободном доступе, не поленись.
16. dhurricane 18.01.22 10:53 Сейчас в теме
(13) 1. Я как раз и спросил, зачем их "собирать"? Они же собираются в обработчике события "СписокВыбор". Зачем дополнительная работа? Это нужно для обновления списка выбранных после нажатия на кнопку "Выбрать все"? Если так, то такой финт не сработает, ведь в обработчике данные появляются порциями. И если какие-то порции не прогрузились (пользователь не пролистал список), то и в список выбранных они не попадут.
2. Точно, не обратил внимание.
3. У пользователя настроен свой собственный отбор в списке. Он жмет "Выбрать все". Если он снимет свой отбор, то увидит помеченными и те документы, что ранее были невидимы из-за отбора. Но если отбор не снимать, а завершить выбор в форме, то будут возвращены лишь данные по видимым документам. Эта разница между выбранными и возвращаемыми и кажется не очевидной.

В дополнение желаю Вам спокойнее принимать критику в адрес своей работы. Я вполне неплохо умею читать код, и здесь мне не зачем что-то смотреть в отладчике. То, что Вы в своих тестах своими глазами не видите ошибок, не значит, что их нет. Также, как и не значит, что другие не могут их увидеть глядя на код, без просмотра результата воочию.
24. mr_sav 60 18.01.22 17:37 Сейчас в теме
(16)
1. Точно, не обратил внимание, что, если список не малый и без ОбщаяПометка и не пролистано, то в СписокВыбора попадут только из прочитанной порции в ПриПолученииДанныхНаСервере. Буду щас думать как пофиксить это упущение. Благодарю за полезную критику, такое в наше время редко бывает).
3. Ну не знаю насколько эти моменты значимы для кого-то, что:
1) Если будет сделан пользовательский отбор (в том числе и через Найти) и он не будет снят, то, то что видишь, то и попадет
2) Если будет сделан пользовательский отбор (в том числе и через Найти) и нажать кнопку "Пометить всё" без выделенных строк, то такой отбор не учитывается. Здесь как аналоги использую: Отбор + Ctrl+A + "Пометить всё" + "Снятие отбора"
Если честно, на счет этого пока не думал, но если кто-то раньше возьмется это проработать и поделится, буду рад информации о результатах.
25. dhurricane 18.01.22 17:44 Сейчас в теме
(24) Предполагаю, что неоднозначность из пункта 3 уйдет сама собой вместе с решением проблемы из пункта 1. Видится, что корень у этих проблем один и тот же.
26. mr_sav 60 19.01.22 00:30 Сейчас в теме
(25)
1. Доработал. Ещё раз благодарю, что обратил на это внимание.
3. Пока решил не заморачиваться, как по мне, так пока вполне хватает и удобно работать с отобранными строками через выделение строк: Отбор (в том числе через Найти) -> (Ctrl+A либо выделение нужных строк с зажатым Shift) -> Кнопка "Установить пометки" или "Снять пометки" -> Снятие отбора
10. coollerinc 150 17.01.22 17:09 Сейчас в теме
Делал нечто подобное. Но двойной клик для установки флажка это непривычно и пользователи всегда непонимали, почему флажок не ставится. Привычно флажки ставить одним кликом. И обычно когда нужно где то ставить флажки, обычно строк не так много, максимум пару тысяч. Делал с помощью обычной таблицы значений.
18. Rustig 1393 18.01.22 16:13 Сейчас в теме
(10) у меня получилось через динамический список
https://youtu.be/8P9iH4AddfQ
19. coollerinc 150 18.01.22 16:19 Сейчас в теме
(18) На видео у вас же двойным кликом ставится флажок? Я просто не понял ваше сообщение, что у вас получилось? Или это не мне
21. Rustig 1393 18.01.22 16:40 Сейчас в теме
(19) сообщение для вас и других - мне казалось, что флажок реально сделать только через таблицу значений, как вы и сказали, и что двойной клик будет помехой. Но я попробовал реализовать на динамическом списке и мне показалось, что двойной клик не так ужасен. просто поделился с вами.
22. mr_sav 60 18.01.22 16:58 Сейчас в теме
(21) И я про тоже... например, чтобы просто сфокусироваться на поле, для того чтобы отбор поставить, либо скопировать данные из поля, параллельно будет срабатывать событие пометки. Мне такое не удобно, поэтому тут вот так, но это дело вкуса, не думаю что есть смысл спорить на этот счет, как говорится "на вкус и цвет..."
23. Rustig 1393 18.01.22 16:59 Сейчас в теме
(22) я проникся вашим решением, плюс поставил
27. mr_sav 60 19.01.22 00:33 Сейчас в теме
28. Rustig 1393 19.01.22 07:50 Сейчас в теме
(27) я тестировал и пробовал реализовать флажки в дин. списке - в итоге пришел к тому, как у вас, и к еще одному способу - написал тут https://infostart.ru/public/1587487/
пусть будет для истории - программистам, думаю, пригодится
14. avd74 3 18.01.22 07:58 Сейчас в теме
Насколько я понял, процедура ДокументОбработкаВыбора основной формы остаётся за бортом. Процедура ДокументНачалоВыбора открывает форму подбора, а из неё данные получаются через ОповеститьОВыборе / ОбработкаВыбора. Или я не прав?
17. qwinter 641 18.01.22 11:09 Сейчас в теме
(14) Угу, при том, что сделать отметку по одному клику плевое дело.
29. kirill_sh 19.01.22 23:14 Сейчас в теме
Интересное решение можно брать на вооружение
Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

Адаптация типовых решений Прочие инструменты разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Данная публикация является продолжением описания функционирования обработки "FormCodeGenerator " в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.

5 стартмани

21.12.2020    11447    27    huxuxuya    11    

Флажок в динамическом списке в 1С 8.3 (управляемые формы)

Работа с интерфейсом Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Продемонстрирована реализация флажков в динамическом списке на управляемых формах - еще один способ.

19.01.2022    1351    12    Rustig    9    

Интерактивная справка по объектам 1С (подключаемое расширение)

Работа с интерфейсом Практика программирования v8 ERP2 Абонемент ($m)

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

5 стартмани

29.09.2020    17275    94    sapervodichka    50    

[Механизм интерфейса] Свой флажок (чекбокс)

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Создадим свой флажок для интерфейса, используем простой универсальный алгоритм.

1 стартмани

09.08.2019    23737    21    rpgshnik    43    

Альтернативный способ добавления элементов и реквизитов на формы Промо

Работа с интерфейсом v8 ERP2 УТ11 Россия Абонемент ($m)

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

1 стартмани

09.09.2019    19127    37    bmk74    8    

Вам нравятся запросы в 1С?

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    29627    7    m-rv    91    

Открывашка ячеек таблиц

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Глобальное сочетание клавиш для открытия объекта по ссылке из текущей ячейки любой таблицы в большинстве управляемых форм

1 стартмани

27.10.2018    23592    13    tormozit    38    

Работа с публикациями "Инфостарт"

Инфостарт WEB Практика программирования v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    30409    15    RocKeR_13    16    

Расширенная настройка динамического списка УФ Промо

Работа с интерфейсом v8 v8::УФ 1cv8.cf Абонемент ($m)

Открывая управляемую форму выбора и не увидев там видимых в форме списка элементов, часто хочется узнать причину их отсутствия там, т. е. какой наложен отбор. Но стандартная настройка списка управляемой формы показывает только пользовательские настройки, скрывая от пользователя фиксированный отбор. Предлагаю вам расширение конфигурации с расширенной настройкой динамического списка, отображающей пользователю кроме пользовательских настроек еще фиксированные.

1 стартмани

31.05.2017    40370    164    tormozit    25    

Визуализация событий на временной шкале средствами "Поле HTML документа"

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Интересный способ наглядно отобразить события на временной шкале. Например, может быть применен для красивого вывода документов по клиенту. Тестировалось на платформе 8.3.12.1469

1 стартмани

31.07.2018    30380    148    Plotks2017    27    

Работа с данными выбора

Работа с интерфейсом Практика программирования v8 Россия Абонемент ($m)

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    72352    25    kalyaka    17    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    38585    97    m-rv    58    

Лучший подарок для бухгалтера - счёты 8.2 (со звуком) Промо

Работа с интерфейсом v8 1cv8.cf Россия Абонемент ($m)

(Толстый клиент) Подарите бухгалтеру счеты, и он(а) Вас никогда не забудет.

1 стартмани

13.05.2011    45760    924    Tatitutu    45    

Полезные примеры составления схемы компоновки данных #2

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Еще один набор примеров как решить частные задачи в СКД

1 стартмани

22.05.2018    43002    11    SITR-utyos    13    

Заполняем по шаблону (по умолчанию)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Простой в подключении, универсальный и достаточно удобный механизм заполнения реквизитов произвольных документов/справочников значениями по умолчанию. Реализован в расширении, но может быть и непосредственно включен практически в любую конфигурацию на управляемых формах простым копированием одной формы и двух команд. Весь код в статье.

1 стартмани

08.02.2018    36514    20    mvxyz    17    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    34921    60    kwazi    6    

Нечеткий поиск одним запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

Использование механизма полнотекстового поиска в 1С не всегда оправдано, т.к. построение индекса и поддержание его в актуальном состоянии может значительно нагружать систему. Предлагаемая реализация нечеткого поиска методом N-грамм выполняется одним запросом, что позволяет производить поиск в любой таблице и не требует предварительного построения индекса.

1 стартмани

28.12.2015    36318    76    vasvl123    9    

Паузы при исполнении кода (Sleep для 1С)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Решил проверить все найденные варианты паузы для 1С. В результате получилась обработка для тестирования и небольшая статья с итогом.

1 стартмани

28.11.2017    73292    19    swimdog    55    

Умный дом на 1С + ардуино

Практика программирования v8 Абонемент ($m)

Конфигурация для автоматизации быта программиста 1C и не только. В данной статье будет рассказано, как можно использовать 1С для задач, не входящих в стандартные рамки этой платформы. Например, управление домом. В качестве периферии для подключения будет использован микроконтроллер (МК) Ардуино, но на нём не будет никакой логической нагрузки, весь процесс будет проходить на сервере 1С. Работа с пинами ввода/вывода происходит напрямую из 1С.

1 стартмани

07.08.2017    29546    21    sasha777666    64    

Расширения конфигураций 1С: учимся перехватывать методы

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    174253    13    signum2009    49    

Распознавание текста с помощью нейросетей Google Cloud Vision и 1С

Практика программирования v8 1cv8.cf Абонемент ($m)

Возможности Google Cloud Vision в распознавании текста.

1 стартмани

08.02.2017    40778    153    kiv1c    19    

Графическая схема. Управление при помощи XDTO.

Практика программирования v8 Абонемент ($m)

В статье описывается методика программного управления элементами графической схемы при помощи механизма XDTO. Приложена готовая к использованию библиотека функций для создания и удаления графических объектов, а также для связи элементов схемы соединительными линиями.

2 стартмани

16.01.2017    31342    134    Alxby    25    

HTTP-сервис: отчеты [Расширение]

Работа с интерфейсом Практика программирования v8 1cv8.cf Абонемент ($m)

Это HTTP-сервис, который возвращает почти любой отчет в HTML, XLSX или в JSON. Сохраните вариант отчета, получите на него ссылку и можно получить данные без захода в 1С. Работает в конфигурациях на основе БСП 2.3.3+, для отчетов на СКД и в 1С 8.3.8+

2 стартмани

30.08.2016    35740    159    Stepa86    16    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    56714    36    Demanoidos    60    

Недокументированное использование стандартных форм Upd.

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Вам не хватает возможностей в платформе 1С или у Вас нет времени на углубленное изучение платформы 1С? Рассмотрены возможности использования стандартных форм, вызываемых из платформы.

1 стартмани

26.07.2016    35601    107    ZhokhovM    69    

Хранение файлов в томах на диске (для УПП 1.3)

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    70500    14    wowik    32    

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    99306    173    igo1    62    

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом

Практика программирования v8 Абонемент ($m)

При реализации периодического авто-заполнения маршрутных листов по графику (недельному) необходимо было просчитать стоимость всего периода, с условием выездов только по определенным дням. Заморачиваться с обходом результата не хотелось. Пришлось написать "Небольшой" запрос.

1 стартмани

03.03.2016    24435    2    Alexander.Shvets    5    

Простые радости жизни программиста 1С: выбор типа значения

Работа с интерфейсом Практика программирования v8 1cv8.cf Абонемент ($m)

Предлагаемая в работе обработка включает обычную и управляемую формы, которые максимально точно реализуют функциональность системного диалога выбора типа в толстом клиенте обычное приложение (включая оформление диалога). Эти формы имеют дополнительные интерфейсные удобства и могут быть использованы в качестве альтернативных диалогов выбора типа.

1 стартмани

17.02.2016    61524    56    yuraos    18    

Отображение прогресса выполнения длительных операций в БСП и их отладка в текущем сеансе.

БСП (Библиотека стандартных подсистем) Практика программирования v8 1cv8.cf Абонемент ($m)

В статье описан способ исполнения длительных операций в конфигурациях, в которых используется библиотека стандартных подсистем, с визуализацией прогресса исполнения и отображения хода обработки данных. Также дается краткое описание процесса отладки длительных операций в текущем сеансе.

1 стартмани

17.02.2016    73004    221    balanton    23    

Мастер рассылки e-mail 2.2 для управляемых форм

Email Практика программирования v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    48754    23    milkers    4    

Передача больших пакетов через веб-сервисы

Инструменты администратора БД Внешние источники данных Практика программирования v8 Абонемент ($m)

Реализация механизма передачи больших пакетов через веб-сервисы. С его помощью передать файл размером в несколько гигабайт не составит проблем.

1 стартмани

06.12.2015    68460    56    YPermitin    19    

Быстрое определение интервалов в запросе

Практика программирования v8 Абонемент ($m)

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    63122    35    ildarovich    41    

Полезные приемы при работе с Excel из 1С (Версия 3.1)

Разработка внешних компонент Загрузка и выгрузка в Excel Практика программирования v8 1cv8.cf Абонемент ($m)

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    261968    526    Zerocl    85    

Javascript и 1С. Кросс-платформенное взаимодействие

Практика программирования v8 1cv8.cf Абонемент ($m)

Что делать, если необходим богатый интерфейс, а управляемые формы нам его не могут обеспечить? Использовать HTML и JavaScript. В статье рассмотрено взаимодействие кода 1С и JavaScript, работающее на любой платформе: толстый, тонкий и веб-клиент, под Windows и Linux.

1 стартмани

14.09.2015    83972    225    VitaliyCeban    64    

Code First и Linq to EF на примере 1С версии 7.7 и 8.3 часть I

Практика программирования v8 Абонемент ($m)

Данный проект является чисто исследовательским примером использования Code First и Linq to EF на примере 1С версии 7.7. Так как сам я программист 1С, то мне всегда было интересно, как можно перенести модель объектов 1С на компилируемые языки, и использовать мощь Linq to EF. С появлением Code First давно хотел прикрутить, но все как-то руки не доходили, и вот, наконец ..

1 стартмани

28.08.2015    26888    3    Serginio    2    

NativeDraw: Компонента рисования для 1С [V2.6.2]

Разработка внешних компонент Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Рисуйте в формах 1С, также предлагается небольшое количество нерисовальных функций

1 стартмани

13.07.2015    54616    474    ПерваяСистема    147    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    33391    4    Serginio    1    

И снова "Как сжать картинки для экспорта в EXCEL?" или Умная картинка 8.2

Загрузка и выгрузка в Excel Практика программирования v8 1cv8.cf Абонемент ($m)

Прошла уже эпоха , когда экономили на трафике интернета. Но все же...повторюсь. Я предлагаю совершенно новый способ сжатия картинки - эффект в 20 раз !!!

1 стартмани

17.06.2015    36484    63    Tatitutu    13    

Кнопки управления группировками табличного документа для управляемых форм

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

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

1 стартмани

02.06.2015    30653    29    unichkin    9    

Альтернативная визуализация данных для 1С 8.3.6

Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Нужен приятный Bi Dashboard? Или просто красивый график/диаграмма для сайта? Тогда эта разработка для Вас!

1 стартмани

29.05.2015    35647    84    vano-ekt    3