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

05.06.14

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример флажков в списке документов
.epf 28,24Kb ver:1
50
50 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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

 

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


 

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

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

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

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

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

См. также

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7777    bayselonarrend    20    

156

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

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    6129    dsdred    16    

80

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

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

24.01.2024    18437    YA_418728146    26    

72

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

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23951    SeiOkami    48    

135

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

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

28.08.2023    14992    YA_418728146    7    

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

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

4. Yashazz 4794 10.06.14 21:29 Сейчас в теме
(3) Извините, но можно было легко обойтись безо всяких пометок удаления. Подумайте на досуге, задача решается гораздо проще.
5. miniogn 30 11.06.14 06:12 Сейчас в теме
(4) Возможно можно и обойтись. Возможно подумаю
6. miniogn 30 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 30 16.06.14 06:34 Сейчас в теме
(2)(9) Если что, в парадигме обычных форм по умолчанию нет выделения Ctrl и мышкой и хоть защелкайся больше одного не выделить.
Статья не о выборе способа, а о конкретном способе отметки галочками.
Не агитирую, просто показал, как это можно сделать, если именно так нужно.
11. Art1387 4 16.06.14 15:12 Сейчас в теме
(10) в типовой конфигурации может и нет, а вот если поставить режим выделения множественный, то вполне. Кроме того про групповую обработку не стоит забывать, если уж хочется совсем без доработок.
Прикрепленные файлы:
12. miniogn 30 16.06.14 15:33 Сейчас в теме
(11) Ну групповую обработку пользователю не дашь...
7. Yashazz 4794 11.06.14 10:53 Сейчас в теме
И ещё, если надо хранить связку между ссылкой на документ и некой пометкой, делайте соответствие и по факту наличия ссылки в нём определяйте, есть ли эта пометка. Быстрее будет, чем список и массив.
8. miniogn 30 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение