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

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

Разработка - Механизмы платформы 1С

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В дополнение желаю Вам спокойнее принимать критику в адрес своей работы. Я вполне неплохо умею читать код, и здесь мне не зачем что-то смотреть в отладчике. То, что Вы в своих тестах своими глазами не видите ошибок, не значит, что их нет. Также, как и не значит, что другие не могут их увидеть глядя на код, без просмотра результата воочию.
nekit_rdx; mr_sav; +2 Ответить
24. mr_sav 81 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 81 19.01.22 00:30 Сейчас в теме
(25)
1. Доработал. Ещё раз благодарю, что обратил на это внимание.
3. Пока решил не заморачиваться, как по мне, так пока вполне хватает и удобно работать с отобранными строками через выделение строк: Отбор (в том числе через Найти) -> (Ctrl+A либо выделение нужных строк с зажатым Shift) -> Кнопка "Установить пометки" или "Снять пометки" -> Снятие отбора
10. coollerinc 172 17.01.22 17:09 Сейчас в теме
Делал нечто подобное. Но двойной клик для установки флажка это непривычно и пользователи всегда непонимали, почему флажок не ставится. Привычно флажки ставить одним кликом. И обычно когда нужно где то ставить флажки, обычно строк не так много, максимум пару тысяч. Делал с помощью обычной таблицы значений.
18. RustIG 1691 18.01.22 16:13 Сейчас в теме
(10) у меня получилось через динамический список
https://youtu.be/8P9iH4AddfQ
19. coollerinc 172 18.01.22 16:19 Сейчас в теме
(18) На видео у вас же двойным кликом ставится флажок? Я просто не понял ваше сообщение, что у вас получилось? Или это не мне
21. RustIG 1691 18.01.22 16:40 Сейчас в теме
(19) сообщение для вас и других - мне казалось, что флажок реально сделать только через таблицу значений, как вы и сказали, и что двойной клик будет помехой. Но я попробовал реализовать на динамическом списке и мне показалось, что двойной клик не так ужасен. просто поделился с вами.
22. mr_sav 81 18.01.22 16:58 Сейчас в теме
(21) И я про тоже... например, чтобы просто сфокусироваться на поле, для того чтобы отбор поставить, либо скопировать данные из поля, параллельно будет срабатывать событие пометки. Мне такое не удобно, поэтому тут вот так, но это дело вкуса, не думаю что есть смысл спорить на этот счет, как говорится "на вкус и цвет..."
23. RustIG 1691 18.01.22 16:59 Сейчас в теме
(22) я проникся вашим решением, плюс поставил
27. mr_sav 81 19.01.22 00:33 Сейчас в теме
28. RustIG 1691 19.01.22 07:50 Сейчас в теме
(27) я тестировал и пробовал реализовать флажки в дин. списке - в итоге пришел к тому, как у вас, и к еще одному способу - написал тут https://infostart.ru/public/1587487/
пусть будет для истории - программистам, думаю, пригодится
14. avd74 4 18.01.22 07:58 Сейчас в теме
Насколько я понял, процедура ДокументОбработкаВыбора основной формы остаётся за бортом. Процедура ДокументНачалоВыбора открывает форму подбора, а из неё данные получаются через ОповеститьОВыборе / ОбработкаВыбора. Или я не прав?
17. qwinter 665 18.01.22 11:09 Сейчас в теме
(14) Угу, при том, что сделать отметку по одному клику плевое дело.
29. kirill_sh 19.01.22 23:14 Сейчас в теме
Интересное решение можно брать на вооружение
30. Dimkis 13.02.23 14:32 Сейчас в теме
Спасибо. Взял себе в копилочку). Только в процедуре СписокВыбор установил СтандартнаяОбработка = Ложь, иначе не срабатывала установка флажка, а завершался подбор.
sen_black; +1 Ответить
31. sen_black 22.05.23 15:12 Сейчас в теме
Странно. В запросе динамического списка анализируете на вхождение ссылки документа в ВыбранныеДокументы, а в коде добавляете ключ списка документа в этот же список...
Оставьте свое сообщение

См. также

Пример использования обработчика ожиданий для передачи сообщений между пользователями 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

01.02.2023    1799    3    user883442    3    

4

Drag & Drop - Переносим Картинку на Форму с помошью мыши (HTML + JS)

WEB-интеграция Работа с интерфейсом Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

Реализуем метод Drag & Drop на форме c записью/чтением двоичных данных в/из реквизит формы (пример: доработка формы Номенклатуры; Почтовый клиент; Присоединенные файлы) средствами HTML + JavaScript (работает в Толстом/Тонком/Web клиенте)

1 стартмани

10.10.2022    3579    7    Asya.Ozerova    7    

21

Ручная выгрузка и загрузка конфигурации

Универсальные обработки EDT Механизмы платформы 1С Платформа 1С v8.3 Россия Абонемент ($m)

Внешняя обработка позволяет выполнять выборочную выгрузку и загрузку объектов конфигурации 1С.

1 стартмани

26.08.2022    3146    8    user1041830    4    

7

Доступ к документам других пользователей для каждого документа

Обработка документов Механизмы платформы 1С Роли и права Платформа 1С v8.3 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 3.0 Казахстан Абонемент ($m)

В типовой конфигурации есть функционал предоставления доступа к редактированию документов других пользователей. Но он ограничен выбором пользователя. То есть Пользователь1 может редактировать все документы Пользователя2. Но некоторым клиентам необходимо к примеру дать доступ к редактированию только документа Реализации ТМЗ автора Пользователь2. Это решение позволяет указывать отдельные документы для предоставления доступа к редактированию документов других пользователей.

1 стартмани

25.08.2022    3773    4    zko_it    0    

5

Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

DevOps и автоматизация разработки EDT Обновление 1С Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

1 стартмани

13.07.2022    9162    7    Bitnikov    19    

51

Автоподстановка, автоподбор города из адресного классификатора

Универсальные обработки Механизмы платформы 1С Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Абонемент ($m)

Обработка показывает как работает событие автоподбор у элемента формы Поле Ввода. Когда начинаем вводить первые буквы города. выпадает подсказка с городами из Кладр, загруженного в регистр сведений АдресныеОбъекты.

1 стартмани

20.06.2022    2969    3    aleksandrstep    0    

4

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

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

19.01.2022    10210    55    RustIG    13    

30

Скорость сложения строк большой длины в 1С разными методами (конкатенация строк)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Как известно, в 1С со строковыми переменными часто приходится работать в режиме добавления строк в одну переменную. Когда строка небольшой длины, все происходит достаточно быстро и можно работать вот так: Строка1 = "Привет"; Строка2 = "мир!"; Результат = Строка1 + Строка2; И все замечательно ровно до того момента, когда эти строки не становятся большими... Тогда скорость работы значительно падает. Я провел небольшие замеры производительности и выношу их на суд общественности.

1 стартмани

02.01.2022    8581    2    Diversus    74    

40

Что такое форматированный документ

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

17.05.2021    9839    28    RustIG    9    

11

Динамическая модификация форм в расширении

Механизмы платформы 1С Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Пример динамического изменения форм расширением конфигурации без заимствования формы.

1 стартмани

05.04.2021    8169    1    a.zernin    1    

8

Навигационная ссылка в платформе 8.2

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Получение ссылки на объект / Переход по ссылке в платформе 8.2 (обычное приложение).

1 стартмани

27.10.2020    6157    6    PerlAmutor    4    

12

Заполнение выделенных строк таблицы

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

28.01.2020    14099    7    sulfur17    15    

42

Вывод характеристик и их значений в динамический список

Механизмы платформы 1С Управляемые формы Система компоновки данных Конфигурации 1cv8 Абонемент ($m)

Если в запросе динамического списка используется конструкция {ХАРАКТЕРИСТИКИ ...}, то как вывести на форму колонки с характеристиками?

1 стартмани

22.02.2019    13046    6    kasper076    4    

3

Связанные табличные части (управляемые формы)

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Абонемент ($m)

У нас есть 2 связанные табличные части, и нам надо, чтобы по текущей строке в одной из них мы видели только определенные строки во второй. Были бы у нас динамические списки, мы бы взяли событие "При активизации строки" и стандартный механизм отборов СКД, которая лежит в основе списка. Но вот с табличными частями так не получится. Тут нам надо будет написать несколько строк кода и использовать "ОтборСтрок", доступный для таблицы формы. Тестировалось на платформе 8.3.13.1644, будет работать и на более ранних версиях платформы.

1 стартмани

25.01.2019    32689    29    Kim1C    13    

16

Пример работы с Планировщиком 1С (УФ)

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

В 1С 8.3.х появился такой объект, как "Планировщик". О нем и пойдет речь.

1 стартмани

26.06.2018    29134    129    MKFreeUser    27    

15

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

Механизмы платформы 1С Платформа 1С v8.3 Запросы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

01.06.2018    42552    103    m-rv    58    

112

История хранения данных. Теперь в составе платформы

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Описание нового механизма хранения данных в составе платформы на примере каркасной конфигурации. Прилагается выгрузка базы данных обработками и примерами кода.

2 стартмани

14.11.2017    45956    70    vasilev2015    76    

44

Асинхронное воспроизведение звука в 1С

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Достаточно простой пример как в 1С:Предприятие запустить воспроизведение звука и не ждать его окончания

2 стартмани

28.07.2017    16671    4    SITR-utyos    7    

15

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

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

30.05.2017    206361    14    signum2009    53    

155

Изучение событий 1С для программирования

Механизмы платформы 1С Платформа 1С v8.3 Россия Абонемент ($m)

Какие события и в какой последовательности вызываются платформой 1С? Куда лучше поместить свой программный код, чтобы добиться нужного поведения программы? Предлагаю разработку «Изучение событий» которая облегчит поиск ответов на такие вопросы.

2 стартмани

12.03.2017    33581    50    rusmil    21    

86

Как построить цепочку асинхронных вызовов

Механизмы платформы 1С Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Опишу способ организации последовательных асинхронных методов, которому я недавно научился.

1 стартмани

11.01.2017    29926    6    json    70    

73

Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9

Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

В статье приводятся новые функции по работе с двоичными данными, появившимися в версии платформы 8.3.9 , на примере анализа формата и размера изображений. А также пример отправки изображения через API ВКонтакте с помощью новых объектов (без использования ОбъединитьФайлы())

1 стартмани

14.11.2016    49436    22    Anton64    25    

116

ComSafeArray Hexadecimal. О преобразовании массива байт в строку шестнадцатеричных чисел

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

16.09.2016    12599    2    igel9780    1    

8

Объектные блокировки

Механизмы платформы 1С Платформа 1С v8.3 Россия Абонемент ($m)

При работе с объектными данными (справочники, документы, планы счетов и т.д.) система «1С:Предприятие» обеспечивает два вида объектных блокировок: пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

1 стартмани

17.08.2016    49716    12    Ranis1286    8    

47

[Расширения] Отборы в динамических списках

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Часто на практике возникают ситуации, когда в 1С 8.3 нужно настроить доступ к колонкам динамического списка по определенным критериям (нужно так настроить доступ, чтобы пользователь видел только то, что ему разрешено и не имел возможности изменить эти настройки). Но конфигурация стоит на поддержке и менять ничего нельзя. Предлагаемый пример показывает, как можно с помощью механизма расширений управлять отборами в динамических списках*. * В дополнение к механизму http://infostart.ru/public/437760/ "Динамическое управление видимостью и доступностью элементов форм"

1 стартмани

21.05.2016    14276    13    OlegK    6    

9

Когда контекстный вызов быстрее неконтекстного?*

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

22.03.2016    15329    6    Fragster    6    

21

Программное создание колонок в табличном поле с полем ввода Флажок (чекбокс) (1С 8.2)

Механизмы платформы 1С Платформа 1С v8.3 Абонемент ($m)

С возможностью быстрого выбора всех значений по строкам и столбцам. Где важно слово «все», галки проставляются по горизонтали или по вертикали соответственно.

1 стартмани

13.01.2016    26497    3    Wilka    1    

5

Расширения конфигурации и Контроль несогласованных изменений

Механизмы платформы 1С Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление производственным предприятием Абонемент ($m)

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

1 стартмани

21.12.2015    32911    17    a_v_u    11    

31

Возможности перетаскивания, примеры использования, помощь в понимании и отладке механизма работы (8.3, управляемые формы)

Работа с интерфейсом Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Механизм перетаскивания используется редко, а ведь его использование может помочь в реализации интуитивно понятных функций, которые могут весьма ускорить работу пользователя, и получить в итоге более дружественный интерфейс. Данная обработка не содержит копированного из Синтакс-Помощника текста (его вы сможете прочитать и сами). Она показывает примеры использования перетаскивания; позволяет прямо в режиме Предприятия протестировать, проверить и отладить основные приёмы работы; понять принцип вызова событий и увидеть состав их параметров.

1 стартмани

17.11.2015    55609    131    Alias    18    

44

Механизм контроля заполнения реквизитов

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

25.10.2015    20330    34    yur4ik9408    10    

34

Восстановление развернутых строк ДереваЗначений после его обновления (управляемая форма)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

16.10.2015    20931    10    azhilichev    7    

20

Быстрое редактирование строк динамического списка

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Быстрая интерактивная работа с данными справочников.

1 стартмани

04.09.2015    21319    25    hobi    1    

29

Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть III (Реализация трехпозиционного флажка)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Продолжаем работать с деревом значений в управляемом приложении 1С 8.2. Данная статья будет посвящена реализации трехпозиционного флажка для ДереваЗначений на управляемой форме 1С предприятия 8.2

2 стартмани

15.05.2015    62989    27    ll13    10    

36

Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть II (Реализация DRAG and DROP)

Работа с интерфейсом Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация механизма Drag and Drop (или, проще говоря, “Перетаскивания”) для ДереваЗначений, расположенного на управляемой форме управляемого приложения 1С 8.2

2 стартмани

15.05.2015    36750    21    ll13    2    

22

Управляемая форма 1С 8.2 (8.3) – работа с деревом значений и таблицей значений. Часть I (Основы)

Работа с интерфейсом Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Как известно, в платформе 1С 8.1 не составляло никакого труда связать дерево значений с табличным полем на форме, единственное, что при этом нужно было не забыть, так это СоздатьКолонки(). В управляемом приложении 1С 8.2 (8.3) сделать это не так просто, как кажется на первый взгляд. В данной статье речь пойдет о программном создании дерева значений (таблицы значений) на управляемой форме в управляемом приложении 1С

2 стартмани

14.05.2015    104120    29    ll13    13    

81

Особенность использования метода ИзменитьРеквизиты()

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обнаружил странное поведение платформы, которым и хочу поделиться

1 стартмани

23.04.2015    11286    2    veretennikoff    2    

2