Флажки (галочки) в списках документов обычных форм в 1С Предприятии 8.2, 8.3

05.06.14

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

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

Скачать исходный код

Наименование Файл Версия Размер
Пример флажков в списке документов
.epf 28,24Kb
49
.epf 1 28,24Kb 49 Скачать

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

Перем СписокДокументовДляОбработки;

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл 
        ОформлениеСтроки.Ячейки.Флажок1.УстановитьФлажок(СписокДокументовДляОбработки.Получить(ОформлениеСтроки.ДанныеСтроки.Ссылка) <> Неопределено);
    КонецЦикла; 
    
КонецПроцедуры

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

Процедура Кнопка1Нажатие() 
	
	Для каждого т Из СписокДокументовДляОбработки Цикл
    	ДокСсылка = т.Ключ;
	КонецЦикла;
	
КонецПроцедуры
 
СписокДокументовДляОбработки = Новый Соответствие;

Колонка = ЭлементыФормы.ДокументСписок.Колонки.Вставить(0, " ");
Колонка.Имя = "Флажок1";
Колонка.Ширина = 3;
Колонка.Данные = "";
Колонка.ДанныеФлажка = "ПометкаУдаления";
Колонка.ИзменятьПозицию = Ложь;
Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять;
Колонка.ИзменятьВидимость = Ложь;
Колонка.ИзменятьНастройку = Ложь;
Колонка.РежимРедактирования =  РежимРедактированияКолонки.Непосредственно;

 

В списке документов нет возможности добавить колонку с данными, соответственно и нет возможности добавить свой флажок?...

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

У списков есть возможность использовать флажок "Пометка удаления". Вот и задействуем эту возможность в своих целях.

Принцип работы такой, при изменении пометки удаления будем запоминать (или забывать) отмеченные документы.

В то же время заблокируем фактическую установку пометки. Не забудем показать состояние флажка отмечен/снят вместо пометки удаления.

Вот собствено и весь принцип работы.

 

Список отмеченных документов будем хранить в соответствии:

Перем СписокДокументовДляОбработки;

Отображение нашего состояния флажка поручим процедуре

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)

Запомним или забудем отмеченные документы в процедуре

Процедура ДокументСписокПередНачаломИзменения(Элемент, Отказ)

С помощью нажатия на кнопку обработаем выбранные документы

Процедура Кнопка1Нажатие()

 

Вариант 2. Без использования "Пометки удаления". Добавлено после обсуждений в комментариях.

Способ почти идентичный, по этому расписывать подробно нет смысла.

 

Перем СоотвДокументыДляОбработки;

Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл 
        ОформлениеСтроки.Ячейки.Флажок1.УстановитьФлажок(СоотвДокументыДляОбработки.Получить(ОформлениеСтроки.ДанныеСтроки.Ссылка) <> Неопределено);
    КонецЦикла;
    
КонецПроцедуры

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

 

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


 

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

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

А так же необходимо проследить за именем списка документов и при необходимости переименовать в добавляемом коде имя "ДокументСписок" на необходимое.

Примечание. В обработке представлены оба способа (на всякий случай).

Флажки флажок галочка список документов отметка документа флажком колонка с флажком

См. также

Динамическое обновление - это зло?

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

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

09.05.2022    27413    Infostart    83    

243

Совместимость работы со строками. Жизнь до 8.3.6 и после

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Немного о совместимости со старыми версиям платформы 1С в работе со строками.

21.02.2020    8401    Infostart    25    

69

Эволюция расширения конфигурации

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

С каждым днем всё больше возможностей появляется в расширении конфигурации, но не все до сих пор работают даже на платформе 8.3.6! Давайте окунемся в историю появления и эволюции расширения конфигурации, чтобы знать и понимать, когда можно применить тот или иной функционал!

06.02.2020    26774    Xershi    51    

223

Как работают управляемые формы и тонкий клиент 1С – взгляд "из-под капота"

Механизмы платформы 1С Управляемые формы Бесплатно (free)

Переход на управляемые формы перевернул процесс разработки на 1С, заставив программистов менять привычные подходы к описанию логики работы интерфейса. Руководитель компании «Цифровой Кот» Юрий Лазаренко в своем докладе на конференции Infostart Event 2019 Inception рассказал о том, как устроены управляемые формы и как правильно работать с тонким клиентом платформы 1С:Предприятие.

23.12.2019    25143    TitanLuchs    23    

100

30 задач. Странных и не очень

Математика и алгоритмы Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    50764    Infostart    65    

164

Фишечки-рюшечки

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

За годы работы с 1С собрался определенный багаж хитростей, который позволяет разрабатывать быстрее/эффективнее/качественнее. Поделюсь ими в данной статье.

06.11.2019    11204    mpeg1989    95    

66

ЧтениеДанных и ЗаписьДанных. Работа со строками

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Использование потоков и двоичных данных для работы со строками.

04.10.2019    23851    Yashazz    16    

76
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4722 08.06.14 16:24 Сейчас в теме
Что-то я не понял: если вы всё равно храните данные во временных коллекциях, зачем было привязываться к пометке удаления? Изврат же.
+
3. miniogn 23 09.06.14 07:57 Сейчас в теме
(1) > Изврат же.
Ну да. По другому не удалось галочки пропихнуть в список. Такой вот обходной маневр.
(Изменение пометки на форме на документ ни как не влияет).

(2) > выделить нужные документы
Множественное выделение это хорошо. Но иногда нужно по другому.
Ну и хотелось что бы добавленный функционал не сломал типовую программу, а это может произойти если включить множественное выделение, там где его не было.

+
4. Yashazz 4722 10.06.14 21:29 Сейчас в теме
(3) Извините, но можно было легко обойтись безо всяких пометок удаления. Подумайте на досуге, задача решается гораздо проще.
+
5. miniogn 23 11.06.14 06:12 Сейчас в теме
(4) Возможно можно и обойтись. Возможно подумаю
+
6. miniogn 23 11.06.14 09:06 Сейчас в теме
(4) Поразмыслил.

Собственно да, без использования данных документа "Пометка удаления" сделал. Решение чуточку отличается, при той же логике. Размер идентичный. Выложу новый вариант чуть позже, если ни от кого не поступит вариантов по сокращению кода.

>бойтись безо всяких пометок удаления
И да, в чем криминал?
+
2. Art1387 4 08.06.14 16:30 Сейчас в теме
А зажать ctrl и мышкой выделить нужные документы, потом все действия, действие - не вариант?
WhiteOwl; SiAl; ASysuev; SapientiEst; +4
9. SiAl 76 11.06.14 20:20 Сейчас в теме
(2) Art1387, да, я тоже об этом подумал. Но видать или автор, или его пользователи до сих пор живут в парадигме 1С 8.0.
+
13. kimskiysanya 16.07.15 03:44 Сейчас в теме
(9) SiAl, (11) Art1387,Помоему вы сильно не правы. Пример делаю групповую печать документов Реализация товаров и услуг. Допустим у компании 1000 документов нужно напечатать 40 из них. Мне кажется пользователю будет не очень удобно помечать их зажатым контролом. Нет тут ни каких парадигм просто действительно удобнее. Автору спасибо!
JohnyDeath; bow; ViteG; SiAl; +4
10. miniogn 23 16.06.14 06:34 Сейчас в теме
(2)(9) Если что, в парадигме обычных форм по умолчанию нет выделения Ctrl и мышкой и хоть защелкайся больше одного не выделить.
Статья не о выборе способа, а о конкретном способе отметки галочками.
Не агитирую, просто показал, как это можно сделать, если именно так нужно.
+
11. Art1387 4 16.06.14 15:12 Сейчас в теме
(10) в типовой конфигурации может и нет, а вот если поставить режим выделения множественный, то вполне. Кроме того про групповую обработку не стоит забывать, если уж хочется совсем без доработок.
Прикрепленные файлы:
SiAl; +1
12. miniogn 23 16.06.14 15:33 Сейчас в теме
(11) Ну групповую обработку пользователю не дашь...
+
7. Yashazz 4722 11.06.14 10:53 Сейчас в теме
И ещё, если надо хранить связку между ссылкой на документ и некой пометкой, делайте соответствие и по факту наличия ссылки в нём определяйте, есть ли эта пометка. Быстрее будет, чем список и массив.
+
8. miniogn 23 11.06.14 11:58 Сейчас в теме
(7) Согласен, быстрее, по этому сразу так и сделал. Название переменной наверное ввело в заблуждение.
+
14. UralKIT 1 05.09.16 10:57 Сейчас в теме
Второй способ не вполне рабочий. Если перемещаться по ячейкам колонки "Флажок1" с помощью клавиш, то будут открываться документы, даже если это запретить в процедуре выбор.
Операторы, которые постоянно работают с большими списками, обычно работают с клавиатуры, перемещаются по строчкам и пробелом ставят отметку.
При множественном выборе с ctrl часто бывает что палец с ctrl соскальзывает и выбор приходится повторять по новой.
За первый способ спасибо, очень помог, т..к теперь не надо список документов загонять в таблицу значений. И главное можно использовать отборы которые предоставляет список документов.
dimbasbear; +1
15. Alexjas25 13.02.17 07:58 Сейчас в теме
Спасибо автору, очень полезная информация.
+
16. gulchitai 23.05.17 04:44 Сейчас в теме
Спасибо автору. Использовала это в своей доработке ЖурналОператораСклада. Хочу еще сделать кнопки командной панели "СнятьФлажки" и "УстановитьФлажки" для быстрого выбора/снятия всех флажков. Не могу сообразить как обойти все документы из журнала...
+
17. NataLisa 07.06.17 07:41 Сейчас в теме
(16) Подскажите, на каком релизе платформы делали? Я пыталась сделать тоже в форме списка справочника - не получилось...платформа 8.3.9.2170
Форма списка справочника - это динамический список и у него уже нет метода ПриПолученииДанных
+
19. SP2000 29 21.04.22 16:34 Сейчас в теме
Оставлю здесь. Может кому то пригодиться

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


(16)
+
18. пользователь 26.05.20 12:08
Сообщение было скрыто модератором.
...
Оставьте свое сообщение