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

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

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

В наличии

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

Категория:

Описание

 

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

На форме надо разместить:

  1. Команды: "Таблица_Отмена" и "Таблица_Пометить", соответственно командам надо назначить действие: "Таблица_Отмена" и "Таблица_Пометить".
  2. Разместить кнопки на форме.

*Описывать этот процесс не стал, это вы и сами должны уметь делать.

 

Пример кода.


#Область Пометка

&НаКлиенте
Функция ПолучитьНомерСтроки_Клиент(ЭлементТаблицы)
	
	ТекущиеДанные = ЭлементТаблицы.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда Возврат Неопределено; КонецЕсли;
	
	Возврат ТекущиеДанные.НомерСтроки;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура Выбор_Пометить_Клиент(МассВыдСтр, Выбор, ОбъектТаблицы,ЭлементТаблицы, ИмяКолонки);
	
	Если МассВыдСтр = Неопределено Тогда 
		Для Каждого СтрокаТаблицы Из ОбъектТаблицы Цикл
			Если НЕ ЭлементТаблицы.ПроверитьСтроку(СтрокаТаблицы.ПолучитьИдентификатор()) Тогда
				Продолжить;
			КонецЕсли;
			
			Если СтрокаТаблицы[ИмяКолонки] <> Выбор Тогда
				СтрокаТаблицы[ИмяКолонки] = Выбор;
			КонецЕсли;
		КонецЦикла;
		
	Иначе 
		Для Каждого Идентификатор Из МассВыдСтр Цикл
			СтрокаТаблицы = ОбъектТаблицы.НайтиПоИдентификатору(Идентификатор);
			Если СтрокаТаблицы <> Неопределено 
				И СтрокаТаблицы[ИмяКолонки] <> Выбор Тогда
				СтрокаТаблицы[ИмяКолонки] = Выбор;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

Код протестирован на версии платформы: 1С:Предприятие 8.3 (8.3.15.1830)

has been added to your cart:
Оформление заказа