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

29.03.21

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

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

 

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

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

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

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

 

Пример кода.


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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

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

6000 руб.

16.01.2015    61697    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

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

5000 руб.

14.01.2016    54312    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16623    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10560    745    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9484    150    acces969    31    

115

Модель состояния для MVC

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3577    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12009    1    5    

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

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

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

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

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

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

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

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

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

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

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


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



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