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

Программирование - Практика программирования

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

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

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

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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

 

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


 

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

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

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

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

Скачать файлы

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

См. также

Комментарии
1. Яков Коган (Yashazz) 2081 08.06.14 16:24 Сейчас в теме
Что-то я не понял: если вы всё равно храните данные во временных коллекциях, зачем было привязываться к пометке удаления? Изврат же.
2. Артур Иванов (Art1387) 2 08.06.14 16:30 Сейчас в теме
А зажать ctrl и мышкой выделить нужные документы, потом все действия, действие - не вариант?
WhiteOwl; SiAl; ASysuev; SapientiEst; +4 Ответить 3
3. Алексей Р. (miniogn) 17 09.06.14 07:57 Сейчас в теме
(1) > Изврат же.
Ну да. По другому не удалось галочки пропихнуть в список. Такой вот обходной маневр.
(Изменение пометки на форме на документ ни как не влияет).

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

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

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

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