Это всего лишь небольшой пример, как можно реализовать дружелюбный интерфейс пометки.
На форме надо разместить:
- Команды: "Таблица_Отмена" и "Таблица_Пометить", соответственно командам надо назначить действие: "Таблица_Отмена" и "Таблица_Пометить".
- Разместить кнопки на форме.
*Описывать этот процесс не стал, это вы и сами должны уметь делать.
Пример кода.
#Область Пометка
&НаКлиенте
Функция ПолучитьНомерСтроки_Клиент(ЭлементТаблицы)
ТекущиеДанные = ЭлементТаблицы.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда Возврат Неопределено; КонецЕсли;
Возврат ТекущиеДанные.НомерСтроки;
КонецФункции
&НаСервере
Функция ЗначениеРеквизита(ЭтаФорма,ИмяОбъектТаблицы)
Перем ИмяПоля, МассивПолей;
МассивПолей = СтрРазделить(ИмяОбъектТаблицы,".",Ложь);
Если МассивПолей.Количество() = 0 Тогда
Возврат Неопределено
ИначеЕсли МассивПолей.Количество() = 1 Тогда
ИмяПоля = МассивПолей[0];
РезФункц = ЭтаФорма[ИмяПоля];
Возврат РезФункц;
КонецЕсли;
РезФункц = Неопределено;
Для Каждого ИмяПоля Из МассивПолей Цикл
Если РезФункц = Неопределено Тогда
РезФункц = ЭтаФорма[ИмяПоля];
Иначе
РезФункц = РезФункц[ИмяПоля];
КонецЕсли;
КонецЦикла;
Возврат РезФункц;
КонецФункции
//&НаСервере
// Устарело
//Процедура Выбор_Пометить_Сервер(Выбор, ИмяОбъектТаблицы, ИмяКолонки);
//
// ТаблОбъект = ЗначениеРеквизита(ЭтаФорма,ИмяОбъектТаблицы);
// Если ТаблОбъект = Неопределено Тогда Возврат; КонецЕсли;
//
// ТЗ_Строк = ТаблОбъект.Выгрузить();
// ТЗ_Строк.ЗаполнитьЗначения(Выбор, ИмяКолонки);
// ТаблОбъект.Загрузить(ТЗ_Строк);
//
//КонецПроцедуры
&НаКлиенте
Процедура ПерейтиПоНомеруСтроки_Клиент(ТекНомерСтроки, ОбъектТаблицы,ЭлементТаблицы)
Если ТекНомерСтроки = Неопределено или ОбъектТаблицы.Количество() < (ТекНомерСтроки) Тогда
Возврат;
КонецЕсли;
СтрокаТаблицы = ОбъектТаблицы[ТекНомерСтроки-1];
ИДСтроки = СтрокаТаблицы.ПолучитьИдентификатор();
ЭлементТаблицы.ТекущаяСтрока = ИДСтроки;
КонецПроцедуры
&НаКлиенте
Процедура Выбор_Пометить_Клиент(МассВыдСтр, Выбор, ОбъектТаблицы,ЭлементТаблицы, ИмяКолонки);
Если МассВыдСтр = Неопределено Тогда
Для Каждого СтрокаТаблицы Из ОбъектТаблицы Цикл
Если НЕ ЭлементТаблицы.ПроверитьСтроку(СтрокаТаблицы.ПолучитьИдентификатор()) Тогда
Продолжить;
КонецЕсли;
Если СтрокаТаблицы[ИмяКолонки] <> Выбор Тогда
СтрокаТаблицы[ИмяКолонки] = Выбор;
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого Идентификатор Из МассВыдСтр Цикл
СтрокаТаблицы = ОбъектТаблицы.НайтиПоИдентификатору(Идентификатор);
Если СтрокаТаблицы <> Неопределено
И СтрокаТаблицы[ИмяКолонки] <> Выбор Тогда
СтрокаТаблицы[ИмяКолонки] = Выбор;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ЕстьНомерСтрокиТаблицы(ИмяОбъектТаблицы)
Если Найти(ИмяОбъектТаблицы,".") > 0 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура Таблица_ПометитьОтменить(Пометка, ЭлементТаблицы,ОбъектТаблицы,ИмяОбъектТаблицы,ИмяРеквизита)
//Определим, есть ли у таблицы предопределенная колонка "НомерСтроки"
ЕстьНомерСтрокиТаблицы = ЕстьНомерСтрокиТаблицы(ИмяОбъектТаблицы);
МассВыдСтр = ЭлементТаблицы.ВыделенныеСтроки;
Если МассВыдСтр = Неопределено или МассВыдСтр.Количество() <= 1 Тогда
//Если выбрана одна строка или нечего не выбран, то всегда обрабатываем все строки
Если ЕстьНомерСтрокиТаблицы = Истина Тогда
//Если есть "Номер строки", то можно обработать и на сервере
ТекНомерСтроки = ПолучитьНомерСтроки_Клиент(ЭлементТаблицы);
Выбор_Пометить_Клиент(Неопределено, Пометка, ОбъектТаблицы,ЭлементТаблицы, ИмяРеквизита);
ПерейтиПоНомеруСтроки_Клиент(ТекНомерСтроки, ОбъектТаблицы,ЭлементТаблицы);
Иначе
Выбор_Пометить_Клиент(Неопределено, Пометка, ОбъектТаблицы,ЭлементТаблицы, ИмяРеквизита);
КонецЕсли;
Иначе
Выбор_Пометить_Клиент(МассВыдСтр, Пометка, ОбъектТаблицы,ЭлементТаблицы, ИмяРеквизита);
КонецЕсли;
КонецПроцедуры
//Обработка кнопки - "Пометка"
&НаКлиенте
Процедура Таблица_Пометить(Команда)
ЭлементТаблицы = Элементы.ТаблицаРазделов; //Элемент на форме (ТЗ или Табличная часть)
ОбъектТаблицы = ЭтаФорма.ТаблицаРазделов; //Указывается Объект(если это документ, справочник: "Объект.Товары") или Реквизит (Если это реквизит формы: "ЭтаФорма.РеквизитТаблица")
ИмяОбъектТаблицы = "ТаблицаРазделов"; //Имя, для объектов "Объект.Товары" (для табличной части обработки, документа и справочника), или "РеквизитТаблица" (для реквизита формы)
ИмяРеквизита = "Выборка"; //Имя колонки "табличной части" (ТЗ)
Таблица_ПометитьОтменить(Истина, ЭлементТаблицы,ОбъектТаблицы,ИмяОбъектТаблицы,ИмяРеквизита);
КонецПроцедуры
//Обработка кнопки - "Отмена пометки"
&НаКлиенте
Процедура Таблица_Отмена(Команда)
ЭлементТаблицы = Элементы.ТаблицаРазделов; //Элемент на форме (ТЗ или Табличная часть)
ОбъектТаблицы = ЭтаФорма.ТаблицаРазделов; //Указывается Объект(если это документ, справочник: "Объект.Товары") или Реквизит (Если это реквизит формы: "ЭтаФорма.РеквизитТаблица")
ИмяОбъектТаблицы = "ТаблицаРазделов"; //Имя, для объектов "Объект.Товары" (для табличной части обработки, документа и справочника), или "РеквизитТаблица" (для реквизита формы)
ИмяРеквизита = "Выборка"; //Имя колонки "табличной части" (ТЗ)
Таблица_ПометитьОтменить(Ложь, ЭлементТаблицы,ОбъектТаблицы,ИмяОбъектТаблицы,ИмяРеквизита);
КонецПроцедуры
#КонецОбласти
Код протестирован на версии платформы: 1С:Предприятие 8.3 (8.3.15.1830)