|
Управляемая форма, Динамический список, произвольный запрос, редактирование выделенных? | ☑ | ||
---|---|---|---|---|
0
pvase
18.09.20
✎
14:45
|
Есть управляемая форма, на ней динамический список с произвольным запросом на языке 1С (подзапросы, и т.п.) надо дать пользователям менять значения в этом списке, как сделать изменение при выделенных строках? Т.е. как мне найти значения, имея номер строки?
Сейчас сделал для текущей строки при помощью события Выбор, но как сделать для всех выделенных строк? Процедура ТаблицаВводаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если Элемент.ВыделенныеСтроки.Количество() = 1 Тогда ТаблицаВводаВыборНаСервере(Элемент.ТекущиеДанные.ГоловнаяОрганизация,Элемент.ТекущиеДанные.ФизическоеЛицо,Элемент.ТекущиеДанные.Услуга,Элемент.ТекущиеДанные.ФлагУчастия); Элемент.ТекущиеДанные.ФлагУчастия = НЕ Элемент.ТекущиеДанные.ФлагУчастия; Иначе Для каждого НомСтроки Из Элемент.ВыделенныеСтроки Цикл ТаблицаВводаВыборНаСервере(Элемент.ТекущиеДанные.ГоловнаяОрганизация,Элемент.ТекущиеДанные.ФизическоеЛицо,Элемент.ТекущиеДанные.Услуга,Элемент.ТекущиеДанные.ФлагУчастия,НомСтроки); //ОбновитьПоНомеруСтроки(НомСтрока); КонецЦикла; КонецЕсли; Элемент.Обновить(); КонецПроцедуры |
|||
1
pvase
18.09.20
✎
14:47
|
Источник для Динамического списка - запрос с Cross Join регистра сведений и двух справочников, при изменении флажка вношу записи в регистр. Но как теперь сделать массовое изменение, как икать по Динамическому списку?
|
|||
2
pvase
18.09.20
✎
14:54
|
Вот запрос для динамического списка:
ВЫБРАТЬ ВложЗапрос.ФизическоеЛицо, ВложЗапрос.Услуга, МАКСИМУМ(ВложЗапрос.ФлагУчастия) КАК ФлагУчастия ИЗ (ВЫБРАТЬ ФизическиеЛица.Ссылка КАК ФизическоеЛицо, ИТ_УслугиSLA.Ссылка КАК Услуга, ЛОЖЬ КАК ФлагУчастия ИЗ Справочник.ИТ_УслугиSLA КАК ИТ_УслугиSLA, Справочник.ФизическиеЛица КАК ФизическиеЛица ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ИТ_УслугиПоФизЛицам.ФизическоеЛицо, ИТ_УслугиПоФизЛицам.Услуга, ИТ_УслугиПоФизЛицам.ФлагУчастия ИЗ РегистрСведений.ИТ_УслугиПоФизЛицам КАК ИТ_УслугиПоФизЛицам) КАК ВложЗапрос ГДЕ НЕ ВложЗапрос.Услуга.ПометкаУдаления СГРУППИРОВАТЬ ПО ВложЗапрос.ФизическоеЛицо, ВложЗапрос.Услуга |
|||
3
CaIIIka
18.09.20
✎
14:54
|
Значения в списке должен менять запрос.
|
|||
4
pvase
18.09.20
✎
15:16
|
(3) Там все нормально:
&НаСервере Процедура ТаблицаВводаВыборНаСервере(Организация,ФизическоеЛицо,Услуга,ФлагУчастия,НомСтроки=0) Если НомСтроки <> 0 Тогда // Обработка несколько значений Иначе МенеджерЗаписи = РегистрыСведений.ИТ_УслугиПоФизЛицам.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Организация = Организация; МенеджерЗаписи.ФизическоеЛицо = ФизическоеЛицо; МенеджерЗаписи.Услуга = Услуга; МенеджерЗаписи.ФлагУчастия = НЕ ФлагУчастия; МенеджерЗаписи.Записать(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ТаблицаВводаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если Элемент.ВыделенныеСтроки.Количество() = 1 Тогда ТаблицаВводаВыборНаСервере(Элемент.ТекущиеДанные.ГоловнаяОрганизация,Элемент.ТекущиеДанные.ФизическоеЛицо,Элемент.ТекущиеДанные.Услуга,Элемент.ТекущиеДанные.ФлагУчастия); Элемент.ТекущиеДанные.ФлагУчастия = НЕ Элемент.ТекущиеДанные.ФлагУчастия; Иначе Для каждого НомСтроки Из Элемент.ВыделенныеСтроки Цикл ТаблицаВводаВыборНаСервере(Элемент.ТекущиеДанные.ГоловнаяОрганизация,Элемент.ТекущиеДанные.ФизическоеЛицо,Элемент.ТекущиеДанные.Услуга,Элемент.ТекущиеДанные.ФлагУчастия,НомСтроки); КонецЦикла; КонецЕсли; Элемент.Обновить(); КонецПроцедуры |
|||
5
pvase
18.09.20
✎
15:16
|
Вопрос в том, как мне обработать список выделенных, как по выделенным строкам, получить значения полей, чтобы потом по ним записать регистр сведений
|
|||
6
pvase
18.09.20
✎
15:17
|
Т.е. когда одна строка, то я по Элемент.ТекущиеДанные могу получить значения в текущей строке, но как получить значения в других строках по их номерам?
|
|||
7
Deon
18.09.20
✎
15:22
|
Для каждого НомСтроки Из Элемент.ВыделенныеСтроки Цикл
Данные = Элемент.ДанныеСтроки(НомСтроки); КонецЦикла; |
|||
8
Андроны едут
18.09.20
✎
15:32
|
(0) Разъясните чего вы хотите получить в регистре, если пользователь заменит Иванова на Петрова?
|
|||
9
pvase
18.09.20
✎
15:53
|
(8) Это матрица ответственности всех ФизЛиц по всем услугам. В регистре ничего вручную менять нельзя, вся запись только через эту форму. Суть задачи, чтобы пользователи проставили флажки напротив каждого физ лица и услуги, кто за что отвечает участвует и т.д. Задача простая, но когда физ лиц = 2500 и услуг = 40, то уже далеко не так удобная.
|
|||
10
Андроны едут
18.09.20
✎
16:10
|
(5) А чем (7) не устраивает, вполне рабочий код
|
|||
11
pvase
18.09.20
✎
16:13
|
(7) Спасибо, то что надо.
|
|||
12
Answer42
18.09.20
✎
16:26
|
(0)
Элемент.ТекущиеДанные.ФлагУчастия = НЕ Элемент.ТекущиеДанные.ФлагУчастия; Вообще-то возможность менять значения в данных динамического списка на клиенте это багофич: * после того как строка с измененным значением уйдёт из видимой области, она может быть в любой момент удалена из внутреннего буфера и когда её нужно будет опять отобразить - перечитана из БД - т.е. внесенные таким образом изменения в любом момент могут быть потеряны * в результаты "вывести список" попадут данные без изменений * собственно если пользователь вызовет принудительное обновление списка - эти изменения тоже будут потеряны * не факт что этот код вообще будет работать в вебе (я много лет назад пробовал и что тогда получилось уже не помню) |
|||
13
pvase
18.09.20
✎
16:43
|
(12) Перед изменением на форме, я конечно же вносу изменения в БД (записываю в регистр сведений).
|
|||
14
Answer42
18.09.20
✎
16:44
|
(13)
>я конечно же вносу изменения в БД (записываю в регистр сведений). А зачем тогда менять содержимое строк на клиенте, почему просто не обновить список? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |