Флажки (галочки) в списках документов обычных форм в 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; Колонка.ИзменятьПозицию = Ложь; Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; Колонка.ИзменятьВидимость = Ложь; Колонка.ИзменятьНастройку = Ложь; Колонка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;

 

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


 

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

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

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

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

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4527    dsdred    53    

72

Как готовить и есть массивы

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

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

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6409    dsdred    36    

112

1С-ная магия

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

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

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8822    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

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

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

4. Yashazz 4709 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) в типовой конфигурации может и нет, а вот если поставить режим выделения множественный, то вполне. Кроме того про групповую обработку не стоит забывать, если уж хочется совсем без доработок.
Прикрепленные файлы:
12. miniogn 23 16.06.14 15:33 Сейчас в теме
(11) Ну групповую обработку пользователю не дашь...
7. Yashazz 4709 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение