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

29.03.21

Разработка - Работа с интерфейсом

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

 

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

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

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

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

 

Пример кода.


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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

5000 руб.

14.01.2016    55306    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63700    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19550    27    6    

42

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

1500 руб.

06.10.2020    10768    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

20.08.2024    20838    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    10324    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17745    1223    elcoan    53    

125
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1032621 14.08.20 10:03 Сейчас в теме
Всем привет! Давно слежу за этим талантливым программистом, все его разработки во истину уникальны, код оригинален и свеж, нахожу много нового, спасибо гуру 1с.
AnryMc; Yashazz; Sla; Evg-Lylyk; jONES1979; +5 Ответить
2. DrZombi 301 14.08.20 10:14 Сейчас в теме
(1) Спасибо... Незнакомец, мне так лестно читать такой чудесный отзыв.

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

...
Ну и для людей полезно, вдруг что углядят себе полезное... Люди, пользуйтесь.
3. ivanov660 4592 17.08.20 17:25 Сейчас в теме
(2) Написать комментарии в коде хотя бы для приличия. Получилось не особо оно дружественно к программисту.
Иногда еще бывает полезно привести более подробный пример использования.
Мне не понравилось.
4. DrZombi 301 18.08.20 00:03 Сейчас в теме
(3)Постарась учесть ваши пожелания 😁
ivanov660; +1 Ответить
5. Yashazz 4801 18.08.20 14:18 Сейчас в теме
Докатились. Уже такое в тренде. Вообще ниже плинтуса.
Не говоря уж о совершенно уродливом подходе - тащить всё на сервер с контекстом ради пометки в табличном поле. Всё это спокойно решается на клиенте. Да и вообще это из серии "как вывести сообщение пользователю", прямо удивительные высоты продемонстрированы...

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

А если подобные азы "лениво вспоминать", то просто, видимо, практики маловато. Это пишется за пару минут на полном автоматизме.

Автор, вы б для разнообразия хоть чуток посложней задачку бы взяли. Например, отметку в дереве с включением и выключением флажков во вложенных ветках. Хотя б приличнее смотрелось бы, чем эта детская песочница.
Brawler; XSlava; e.kogan; +3 2 Ответить
8. DrZombi 301 18.08.20 17:18 Сейчас в теме
(5) Хвастаться не хорошо.
6. Yashazz 4801 18.08.20 14:57 Сейчас в теме
Вообще, за одно только "ТаблОбъект.Выгрузить();" эту, простихосспади, "публикацию", уже надо люто заминусить.
Brawler; XSlava; +2 Ответить
7. DrZombi 301 18.08.20 17:17 Сейчас в теме
(6) Все в ваших руках, Взялись и выпилили у себя Выгрузить... Наслаждайтесь циклом :)
9. Yashazz 4801 18.08.20 18:16 Сейчас в теме
(7) А вы, мил-человек, вообще представляете, какая будет нагрузка на сеть, кэш и сервер приложения, если ради такой ерунды неслабые объёмы гонять туда-сюда? Вы считаете нормальным такое выкладывать и рекомендовать к использованию? Ну-ну) На уровне автоматизации ларька оно прокатит, на промышленном - ни разу.

И, чисто так к вашему сведению, в таблице значений "ЗаполнитьЗначения" реализована по сути тем же самым циклом.
10. DrZombi 301 19.08.20 06:42 Сейчас в теме
(9) Успокоиться не можешь.
Никакой нагрузки не будет.
Люди не работают с миллонном строк.
Вашему боту ненужны мои галочки.

П.с. и сударь поймите сперва для чего этот код размещен ..
11. Yashazz 4801 19.08.20 08:10 Сейчас в теме
(10)
Никакой нагрузки не будет.

О да, великий гуру, вам виднее за все случаи жизни)
...у меня больше нет вопросов. Мне же больше заработка, потом после всяких горе-разработчиков оптимизацию делать) Не впервые)
13. Brawler 458 23.09.20 00:28 Сейчас в теме
(11) да автор сей публикации видимо не в курсе как даже мелкие объемы данных могут сожрать производительноть системы, тем более если это будет типа универсальный алгоритм и будет он везде юзаться по всей конфигурации, а это значит это будут и 10 строк и тысячи, а еще это помножить на две сотни+ юзеров...

Помнится приходилось фирму 1С учить уму разуму, при расчете автоматических скидок в тех же заказах клиентов 1С ERP, где для того чтобы получить пустую таблицу значений с колонками 1С делали "Выгрузить" всей табличной части и потом делали вызов "СкопироватьКолонки", ну посоветовал им хотя бы так делать "Выгрузить(Новый Массив)" (то есть получить таблицу без строк, так как массив строк пуст), а уже потом "СкопироватьКолонки"))) деталей не помню, но суть была такова, что в документах реализации тоже идет расчет скидок, а заказов в одной реализации была туча, и просадка была по производительности ой как значительна)))

ну про косяк с теми же автоскидками, где в документе реализации получалось свыше 99999 строк в таблице скидок я помолчу))) там супер сложная зависимость была, тоже ловил причину ошибки, описывал её, отписывался в суппорт, исправили
12. DrZombi 301 19.08.20 08:46 Сейчас в теме
Данный кусочек кода не для всех видов наборов данных, а для организации Дружественного интерфейса.
Не надо в нем видеть абсолютное, Абсолютное вы должны достигать не по средством копирования кода, а приходить к этому самостоятельно, улучшая свой код.
14. DrZombi 301 23.09.20 06:17 Сейчас в теме
(13) Автор вкурси для чего ему тут это размещать, прочти в (12)
15. AnryMc 849 12.04.21 17:13 Сейчас в теме
ТаблицаФормы (FormTable)
ПроверитьСтроку (CheckRow)
Синтаксис:
ПроверитьСтроку(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Произвольный.
Строка таблицы. Тип параметра зависит от типа редактируемого значения.
Возвращаемое значение:
Тип: Булево.
Описание:
Проверяет, соответствует ли строка, установленному в таблице отбору.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение (клиент).
Показать


&НаКлиенте
Процедура ОбработатьСтрокиТаблицы()
    
    Для Каждого СтрокаТаблицыФормы Из ТаблицаФормы Цикл
        ИдентификаторСтроки= СтрокаТаблицыФормы.ПолучитьИдентификатор();
        Если Элементы.ТаблицаФормы.ПроверитьСтроку(ИдентификаторСтроки) Тогда
            СтрокаТаблицыФормы["ЧекБокс"] = Истина;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
Показать



З.Ы. "Что тут думать! Трясти надо!" ©
16. DrZombi 301 12.07.23 22:26 Сейчас в теме
Оставьте свое сообщение