1С 8.3 Флажок в динамическом списке - Программист 1С Минск. Автоматизация бизнеса.

Популярные страницы:
Перейти к контенту

1С 8.3 Флажок в динамическом списке

Данные > Примеры кода 1С > 1С 8.3 Динамический список
Перейти в раздел примеры кода 1С 8.3:
Реализован режим множественного и единичного выбора флажков динамического списка. Изменение значения пометки строки происходит по двойному клику мышки (событие "Выбор"). Также, можно помечать только выделенные строки (кнопками: [v] "Установить пометки" или [ ] "Снять пометки"). Метод работает начиная с версии 8.3.10.2168. Автор: mr_sаv (https://infostart.ru/public/1584125/)
Код формы подбора (для реализации флажка в ДС) в 1С 8.3:
#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

   Если Параметры.Свойство("АвтоТест") Тогда
       Возврат;
   КонецЕсли;

   Если Параметры.Свойство("РежимЕдиничногоВыбора") Тогда
       РежимЕдиничногоВыбора = Параметры.РежимЕдиничногоВыбора;
   КонецЕсли;

   Если Параметры.Свойство("ИсключаемыеДокументы") Тогда
       ИсключаемыеДокументы.ЗагрузитьЗначения(Параметры.ИсключаемыеДокументы);
   КонецЕсли;

   Список.Параметры.УстановитьЗначениеПараметра("ИсключаемыеДокументы", ИсключаемыеДокументы);
   Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Истина);
   Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", Новый СписокЗначений);
   Список.Параметры.УстановитьЗначениеПараметра("НевыбранныеДокументы", Новый СписокЗначений);
   АдресХранилищаВыбранныхДокументов = ПоместитьВоВременноеХранилище(Новый СписокЗначений, УникальныйИдентификатор);
   Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресХранилищаВыбранныхДокументов", АдресХранилищаВыбранныхДокументов);
   Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("РежимЕдиничногоВыбора", РежимЕдиничногоВыбора);

   Если Параметры.Свойство("ТекущийДокумент") Тогда
       Элементы.Список.ТекущаяСтрока = Параметры.ТекущийДокумент;
   КонецЕсли;

   Если РежимЕдиничногоВыбора Тогда
       Элементы.Список.МножественныйВыбор = Ложь;
       Элементы.ГруппаПометки.Видимость = Ложь;
       Элементы.СписокПометка.Видимость = Ложь;
   КонецЕсли;

КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовФормы

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)

   Если Настройки.ДополнительныеСвойства.РежимЕдиничногоВыбора Тогда
       Возврат;
   КонецЕсли;

   ВыбранныеДокументы = ПолучитьИзВременногоХранилища(Настройки.ДополнительныеСвойства.АдресХранилищаВыбранныхДокументов);

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

   ПоместитьВоВременноеХранилище(ВыбранныеДокументы, Настройки.ДополнительныеСвойства.АдресХранилищаВыбранныхДокументов);

КонецПроцедуры

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

   Если РежимЕдиничногоВыбора Тогда
       Выбрать(Неопределено);
       Возврат;
   КонецЕсли;

   ТекущиеДанные = Элементы.Список.ТекущиеДанные;
   ВыбранныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаВыбранныхДокументов);
   Если ТекущиеДанные.Пометка Тогда
       СтрокаСписка = ВыбранныеДокументы.НайтиПоЗначению(Элементы.Список.ТекущаяСтрока);
       Если СтрокаСписка <> Неопределено Тогда
           ВыбранныеДокументы.Удалить(СтрокаСписка);
       КонецЕсли;
       НевыбранныеДокументы.Добавить(Элементы.Список.ТекущаяСтрока);
   Иначе
       СтрокаСписка = НевыбранныеДокументы.НайтиПоЗначению(Элементы.Список.ТекущаяСтрока);
       Если СтрокаСписка <> Неопределено Тогда
           НевыбранныеДокументы.Удалить(СтрокаСписка);
       КонецЕсли;
       ВыбранныеДокументы.Добавить(Элементы.Список.ТекущаяСтрока);
   КонецЕсли;

   ПоместитьВоВременноеХранилище(ВыбранныеДокументы, АдресХранилищаВыбранныхДокументов);

   Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);
   Список.Параметры.УстановитьЗначениеПараметра("НевыбранныеДокументы", НевыбранныеДокументы);

КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура УстановитьПометки(Команда)

   ИзменитьПометки(Истина);

КонецПроцедуры

&НаКлиенте
Процедура СнятьПометки(Команда)

   ИзменитьПометки(Ложь);

КонецПроцедуры

&НаКлиенте
Процедура ИзменитьПометки(Значение)

   Если Элементы.Список.ВыделенныеСтроки.Количество() > 1 Тогда

       ВыбранныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаВыбранныхДокументов);

       Для Каждого СтрокаСписка Из Элементы.Список.ВыделенныеСтроки Цикл

           СтрокаВыбранных = ВыбранныеДокументы.НайтиПоЗначению(СтрокаСписка);
           Если Значение Тогда
               Если СтрокаВыбранных = Неопределено Тогда
                   ВыбранныеДокументы.Добавить(СтрокаСписка);
               КонецЕсли;
           Иначе
               Если СтрокаВыбранных <> Неопределено Тогда
                   ВыбранныеДокументы.Удалить(СтрокаВыбранных);
               КонецЕсли;
           КонецЕсли;

       КонецЦикла;

       ПоместитьВоВременноеХранилище(ВыбранныеДокументы, АдресХранилищаВыбранныхДокументов);

       Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Ложь);
       Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", ВыбранныеДокументы);

   Иначе

       ПоместитьВоВременноеХранилище(Новый СписокЗначений, АдресХранилищаВыбранныхДокументов);

       Список.Параметры.УстановитьЗначениеПараметра("ОбщаяПометка", Значение);
       Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеДокументы", Новый СписокЗначений);

   КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура Выбрать(Команда)

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

   ПараметрыВыбора = Новый Структура;
   ПолучитьДанныеИЗаполнитьПараметры(ПараметрыВыбора);

   ОповеститьОВыборе(ПараметрыВыбора);

КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ПолучитьСписокТаблицойЗначений()

   ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Пометка", Истина);

   СКД = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
   Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки , , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   Возврат ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецФункции

&НаСервере
Процедура ПолучитьДанныеИЗаполнитьПараметры(СтруктураПараметров)

   Результат = ПолучитьСписокТаблицойЗначений();

   СтруктураПараметров.Вставить("ВыбранныеДокументы", ОбщегоНазначения.ТаблицаЗначенийВМассив(Результат));

КонецПроцедуры

#КонецОбласти
Код интеграции для работы с формой подбора (для реализации флажка в ДС) в 1С 8.3:
#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Подобрать(Команда)

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

КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовФормы

&НаКлиенте
Процедура ПодобратьПослеВопроса(Результат, ДополнительныеПараметеры) Экспорт

   Если Результат = КодВозвратаДиалога.Да Тогда
       Объект.ДокументыЗаказов.Очистить();
   КонецЕсли;

   Если Результат <> КодВозвратаДиалога.Отмена Тогда
       ОткрытьФормуПодбора();
   КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

   Если ВыбранноеЗначение = Неопределено Тогда
       Возврат;
   КонецЕсли;

   Если ИсточникВыбора.ИмяФормы = "ВнешняяОбработка.ДинамическийСписокСПометками.Форма.ФормаПодбора" Тогда

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

   КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   ТекущаяСтрока = Элементы.ДокументыЗаказов.ТекущиеДанные;

   ПараметрыОткрытия = Новый Структура;
   ПараметрыОткрытия.Вставить("РежимЕдиничногоВыбора", Истина);
   ПараметрыОткрытия.Вставить("ТекущийДокумент", ТекущаяСтрока.Документ);
   ОткрытьФормуПодбора(ПараметрыОткрытия);

КонецПроцедуры

&НаКлиенте
Процедура ДокументОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

   СтандартнаяОбработка = Ложь;

   Если ВыбранноеЗначение = Неопределено Тогда
       Возврат;
   КонецЕсли;

   ТекущаяСтрока = Элементы.ДокументыЗаказов.ТекущиеДанные;
   ТекущаяСтрока.Документ = ВыбранноеЗначение.ВыбранныеДокументы[0].Документ;

КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ОткрытьФормуПодбора(ПараметрыОткрытия = Неопределено)

   Если ПараметрыОткрытия = Неопределено Тогда
       ПараметрыОткрытия = Новый Структура;
   КонецЕсли;

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

   ОткрытьФорму("ВнешняяОбработка.ДинамическийСписокСПометками.Форма.ФормаПодбора",
       ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры

#КонецОбласти
Поиск кода
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 20.01.2022
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому