![]() |
|
Выбор элементов из группы | ☑ | ||
---|---|---|---|---|
0
Gill
30.05.17
✎
10:22
|
Всем привет! Имеется форма подбора адресатов(управляемая).На ней Дерево и соответственно группы и элементы.Галочкой отмечается Группа (например Дирекция) и при этом должны "отметиться" все элементы из этой группы.И далее это должно естественно попасть в соответствующую ТЧ документа.
&НаКлиенте Процедура МаршрутОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Вставить содержимое обработчика. Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда НоваяСтрока = Объект.Маршрут.Добавить(); НоваяСтрока.Отправитель = КанцТекущееДолжностноеЛицо; НоваяСтрока.Получатель = ВыбранноеЗначение.Получатель; КонецЕсли; СтандартнаяОбработка = Ложь; КонецПроцедуры Что нужно написать в обработчике? &НаКлиенте Процедура АдресатыОтметкаПриИзменении(Элемент) // Вставить содержимое обработчика. Если Элемент ??? КонецПроцедуры |
|||
1
Ц_У
30.05.17
✎
10:35
|
Нужно найти строки подчиненные текущей строке, что-то вроде этого:
ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Родитель", ТекСтрока); НайденныеСтроки = СтрокиСостава.НайтиСтроки(ПараметрыОтбора,Истина); |
|||
2
Gill
30.05.17
✎
10:56
|
() Метод объекта не обнаружен (НайтиСтроки)
|
|||
3
Ц_У
30.05.17
✎
11:00
|
(2) у дерева?
|
|||
4
Gill
30.05.17
✎
11:01
|
(3) да
|
|||
5
Gill
30.05.17
✎
11:24
|
(3) Как быть?
|
|||
6
dezss
30.05.17
✎
11:43
|
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Родитель", ТекСтрока); НайденныеСтроки = ТвоеДерево.Строки.НайтиСтроки(ПараметрыОтбора,Истина); |
|||
7
Gill
30.05.17
✎
11:47
|
(6) Форма.ФормаПодбораАдресатов.Форма(33)}: Поле объекта не обнаружено (Строки)
|
|||
8
dezss
30.05.17
✎
11:49
|
какого типа у тебя твое дерево?
|
|||
9
Ц_У
30.05.17
✎
11:50
|
Дерево на форме как называется?
|
|||
10
Gill
30.05.17
✎
11:50
|
(9) Адресаты
|
|||
11
dezss
30.05.17
✎
11:56
|
Так тип какой?
Это точно ДеревоЗначений? |
|||
12
Gill
30.05.17
✎
12:02
|
(11) Тип ДеревоЗначений
|
|||
13
Gill
30.05.17
✎
12:04
|
У меня у Дерева Адресаты доступны только методы ПолучитьЭлементы() и НайтиПоИдентификатору()
|
|||
14
Ц_У
30.05.17
✎
12:11
|
&НаКлиенте
Процедура АдресатыОтметкаПриИзменении(Элемент) ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Родитель", Элемент.Родитель.ТекущиеДанные); НайденныеСтроки = Элемент.Родитель.Строки.НайтиСтроки(ПараметрыОтбора,Истина); // КонецПроцедуры |
|||
15
НЕА123
30.05.17
✎
12:12
|
элемент.текущиеДанные.ПолучитьЭлементы()
|
|||
16
Gill
30.05.17
✎
12:19
|
(14) Поле объекта не обнаружено (Строки)
НайденныеСтроки = Элемент.Родитель.Строки.НайтиСтроки(ПараметрыОтбора,Истина); |
|||
17
dezss
30.05.17
✎
12:31
|
(16) да посмотри ты уже в отладчике какие типы у твоих элементов и какие есть реквизиты.
У ДереваЗначений есть свойство "Строки", если у тебя пишет, что нет, значит ты не к дереву обращаешься. |
|||
18
Ц_У
30.05.17
✎
12:34
|
(17) спасибо, я хотел матом написать
|
|||
19
Gill
30.05.17
✎
12:35
|
(17),(18)...спасибо....не волнуйтесь так
|
|||
20
Gill
30.05.17
✎
16:53
|
||||
21
dezss
30.05.17
✎
17:10
|
(20) покажи свойства этого дерева
|
|||
22
Gill
30.05.17
✎
17:14
|
||||
23
dezss
30.05.17
✎
17:18
|
(22) переобзови один из адресатов в АдресатыДерево, например. У тебя получается один перекрывает другой, из-за того, что названия одинаковые.
|
|||
24
dezss
30.05.17
✎
17:24
|
либо делай
МоеДерево = ПолучитьРеквизиты().Получить(0); |
|||
25
Gill
30.05.17
✎
17:41
|
(23) не помогает.... (24) ПолучитьРеквизиты() доступен только на сервере
|
|||
26
dezss
31.05.17
✎
08:27
|
(25) тебе надо обращаться именно к реквизиту, а не к элементу формы.
Если переименовал реквизит, то пиши АдресатыДерево, если элемент формы, то просто Адресаты. Ну так попробуй сделать это на сервере. |
|||
27
SashaNox
31.05.17
✎
09:17
|
Если хочешь работать с деревом значения то делай на сервере так:
Дерево = РеквизитФормыВЗначение("РеквизитФормы_Дерево"); После того как поработаешь, обратно: ЗначениеВРеквизитФормы(Дерево, "РеквизитФормы_Дерево"); Если хочешь работать с ДанныеФормыДерево, то ПО СУТИ: ДанныеФормыДерево.ПолучитьЭлементы() = ДеревоЗначений.Строки |
|||
28
Gill
31.05.17
✎
09:21
|
||||
29
Buster007
31.05.17
✎
09:27
|
Берешь ПолучитьЭлементы() и делаешь. Если не работает, то вызови специалиста
|
|||
30
Gill
31.05.17
✎
09:32
|
(29) Видимо я тупой, а ты умный....Ну так поделись секретом применительно к моему коду....
|
|||
31
Fedor-1971
31.05.17
✎
09:44
|
(30) Внятно напиши:
1. на форме подбора есть реквизит ... (как называется реквизит формы) тип Дерево, с колонками ... ( какими?), хочу поставить в колонке, например, "выбрано" галочку и автоматически изменить Выбрано у всех подчинённых элементов. 2. на основной форме есть ТЧ (как называется), хочу в нее вынести все выбранные значения Без этого - разговор ни о чём |
|||
32
Gill
31.05.17
✎
09:56
|
(31) Есть ТЧ Документа-Применика (называется Маршрут) в ней пишу:
&НаКлиенте Процедура МаршрутОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Вставить содержимое обработчика. Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда НоваяСтрока = Объект.Маршрут.Добавить(); НоваяСтрока.Отправитель = КанцТекущееДолжностноеЛицо; НоваяСтрока.Получатель = ВыбранноеЗначение.Получатель; КонецЕсли; СтандартнаяОбработка = Ложь; КонецПроцедуры Есть вызываемая форма подбора "ФормаПодбораАдресатов", на ней Реквизит "ДанныеДерево" и Колонки "Получатель" и "Отметка" Также на ней Таблица "Адресаты" и поля "АдресатыДеревоПолучатель" и "АдресатыДеревоОтметка" &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Экспорт тДерево = РеквизитФормыВЗначение("ДанныеДерево"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Канц_ДолжностныеЛица.Ссылка КАК Получатель, | Канц_ДолжностныеЛица.Подразделение, | Канц_ДолжностныеЛица.Родитель КАК Родитель, | ЛОЖЬ КАК Отметка |ИЗ | Справочник.Канц_ДолжностныеЛица КАК Канц_ДолжностныеЛица | |УПОРЯДОЧИТЬ ПО | Канц_ДолжностныеЛица.Ссылка ИЕРАРХИЯ"; Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); тДерево = Выгрузка; ЗначениеВРеквизитФормы(тДерево,"ДанныеДерево"); КонецПроцедуры &НаКлиенте Процедура АдресатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) ТекущиеДанные = Элементы.Адресаты.ТекущиеДанные; ТекСтрока = Элементы.Адресаты.ТекущаяСтрока; ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Родитель", ТекСтрока); НайденныеСтроки = ДанныеДерево.Строки.НайтиСтроки(ПараметрыОтбора,Истина); Если эл.Отметка Тогда СтруктураВозврата = Новый Структура; СтруктураВозврата.Вставить("Получатель",ТекСтрока.Получатель); //СтруктураВозврата.Вставить("Получатель",НайденныеСтроки); КонецЕсли; ОповеститьОВыборе(СтруктураВозврата); КонецПроцедуры Нужно чтобы пользователь отметил галочкой Подразделение (Родитель) и в Документ-приемник в ТЧ Маршрут попали все сотрудники этого подразделения |
|||
33
Fedor-1971
31.05.17
✎
10:11
|
(32) примерно так
ПриИзмененииОтметка - у ДанныеДерево, перейди в серверную процедурку и напиши
Возвращай из подбора не структуру а Массив с сотрудниками или массив структур с доп информацией для каждого сотрудника |
|||
34
Gill
31.05.17
✎
10:25
|
(33) Прошу сильно не ругаться....
Не совсем понятно это - "ПриИзмененииОтметка - у ДанныеДерево, перейди в серверную процедурку и напиши " И это "нов=Адресаты.добавить();" - только ДобавитьСтроку() выдает. И Адресаты доступно для выбора только через Элементы |
|||
35
Fedor-1971
31.05.17
✎
10:32
|
(34)
ПриИзмененииОтметка обработчик события ПриИзменении у колонки дерева Отметка, в нём переходим в процедуру &НаСервере - как её назвать без разницы Адресаты - я исходил из того, что это реквизит формы типа ТаблицаЗначений, что у тебя смотри сам (возможно, что реквизит Объекта) " И это "нов=Адресаты.добавить();" - только ДобавитьСтроку() выдает." - я писал примерный код, потому сам исправь, суть понятна, нужно добавить строку в таблицу |
|||
36
Gill
31.05.17
✎
12:29
|
Всем спасибо....Прошу не ругаться...у меня последний вопрос (34) А если мне нужен только один "отмеченный" сотрудник из подразделения?...
|
|||
37
Fedor-1971
31.05.17
✎
12:33
|
(38) как Отмеченный? галкой или выделен курсором?
|
|||
38
Gill
31.05.17
✎
12:35
|
(38) галочкой....точнее могут быть сотрудники из разных подразделений..например из подразделения №1 выбрать 2 из 5....а из подразделения №2 выбрать 3 из 6....Короче говоря отмеченных галочками
|
|||
39
Gill
31.05.17
✎
12:39
|
+(38) может быть ситуация из одного подразделения всех (ставим галку напротив подразделения) а из другого только некоторые из списка
|
|||
40
Fedor-1971
31.05.17
✎
12:49
|
(38) вот же, блин горелый. Не годится для данной задачи код в (33).
Заполни ДанныеДерево, в Адресаты добавь колонку Подразделение и тоже заполни. Т.е. получаешь примерно одинаковые данные в обеих представлениях связанные по колонке "подразделение" Потом в событие ПриАктивацииСтроки ДеревоДанных вписываешь примерно следующее: стр=Элементы.ДеревоДанных.ТекущиеДанные; //как сделать защиту от отсутствия строки сам придумай (в СП почитай) Элементы.Адресаты.ОтборСтрок=новый ФиксированнаяСтруктура("Подразделение", стр.Подразделение); В результате на форме при выборе строки ДеревоДанных будет устанавливаться фильтр по подразделению в Адресатах Код установки отметок для Адресатов будет несколько другой: идея мас=Адресаты.НайтиСтроки(новый Структура("Подразделение", выбПодразделение)); |
|||
41
Gill
31.05.17
✎
17:10
|
(40) Для таблицы Адресаты Недоступен метод ОтборСтрок()
|
|||
42
Gill
01.06.17
✎
11:52
|
С получение данных вроде разобрался.Теперь проблема с заполнением ТЧ документа Приемника.На форме подбора
прицепил кнопку "Выбор отмеченных", пишу &НаКлиенте Процедура ВыбратьОтмеченных(Команда) // Вставить содержимое обработчика. ТекущиеДанные = Элементы.АдресатыВыбранные.ТекущиеДанные; ТекСтрока = Элементы.АдресатыВыбранные.ТекущаяСтрока; СтруктураВозврата = Новый Структура; СтруктураВозврата.Вставить("Получатель",ТекущиеДанные.Получатель); СтруктураВозврата.Вставить("Отметка",Истина); СтруктураВозврата.Вставить("СодержаниеПоручения",СодержаниеПоручения); ОповеститьОВыборе(СтруктураВозврата); КонецПроцедуры А документе приемнике пишу &НаКлиенте Процедура МаршрутОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // Вставить содержимое обработчика. Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда НоваяСтрока = Объект.Маршрут.Добавить(); НоваяСтрока.Отправитель = КанцТекущееДолжностноеЛицо; НоваяСтрока.Получатель = ВыбранноеЗначение.Получатель; НоваяСтрока.СодержаниеПоручения = ВыбранноеЗначение.СодержаниеПоручения; КонецЕсли; СтандартнаяОбработка = Ложь; КонецПроцедуры Не заполняются данные |
|||
43
Gill
01.06.17
✎
16:11
|
Товарищи, что не так в ОбработкеВыбора?
|
|||
44
Gill
01.06.17
✎
17:06
|
^
|
|||
45
Gill
01.06.17
✎
17:06
|
Я все еще надеюсь на ВАС
|
|||
46
Gill
01.06.17
✎
17:09
|
Почему не срабатывает ОбработкеВыбораиз из (42)
|
|||
47
dezss
01.06.17
✎
17:13
|
(46) запускаешь отладку и смотришь!!!
что тут может быть не понятного? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |