|
Видимость на управляемых формах | ☑ | ||
---|---|---|---|---|
0
umkasort
06.06.19
✎
12:14
|
Добрый день
Есть документ с кучей табличных частей, которые заполняются не все. Поэтому нужно проверить заполнена ли в документе табличная часть и выводить на форму только заполненные. В принципе механизм понятен для одного элемента, но как это загнать в цикл? То есть перебирать элементы формы в цикле причем только табличные части? &НаКлиенте Процедура ПриОткрытии(Отказ) Элементы.Товары.Видимость=КоличествоСтрокТЧ("Товары") КонецПроцедуры &НаСервере Функция КоличествоСтрокТЧ(ТЧ) МетаданныеОбъекта=РеквизитФормыВЗначение("Объект").Метаданные(); Если МетаданныеОбъекта.ТабличныеЧасти.Найти(ТЧ).Количество() = 0 Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецФункции |
|||
1
DrWatson
06.06.19
✎
12:20
|
(0) Этот код работает?
У объекта метаданных ТабличнаяЧасть нет метода Количество. Да и не это, вроде как, требовалось. |
|||
2
umkasort
06.06.19
✎
12:21
|
(1) Данный код работает)
|
|||
3
umkasort
06.06.19
✎
12:24
|
Интересует как на форме выцепить только элементы которые ссылаются на табличную часть документа и как свойство видимость менять параметрически, т.е. Не Элементы.Товары.Видимость а что-то вроде Видимость("Товары")
|
|||
4
hhhh
06.06.19
✎
12:25
|
(2) просто в задаче нужно проверить заполнена ли табличная часть, а вы проверяете совсем другое, заполнены ли метаданные табличной части.
|
|||
5
Кац
06.06.19
✎
12:28
|
(0) [То есть перебирать элементы формы в цикле причем только табличные части? ]
да, только так |
|||
6
DrWatson
06.06.19
✎
12:29
|
(3)Выцепить элементы - метод ПолучитьРеквизиты(), там уже по типу понять где там таблица.
Менять видимость - Элементы["Товары"].Видимость = Ложь; (2) У меня выдаёт "Метод объекта не обнаружен (Количество)" |
|||
7
Кац
06.06.19
✎
12:32
|
можно и так
|
|||
8
umkasort
06.06.19
✎
12:41
|
(4) Мне метаданные и нужны, т.к. проверка происходит при открытии, а документ заполняется автоматически на основании.
(6) Странно вроде нет проблем с работой (3) Про [ ] не знал, спасибо, только начинаю изучать язык, вторая часть вопроса снята (7) Вариант остается прежним - вручную перечислить все элементы добавляя их в массив, в принципе это не сложно, но не очень правильно по-моему, изначально хочется писать правильный код, попутно изучая язык. |
|||
9
umkasort
06.06.19
✎
12:48
|
(6) Сорри за введение в заблуждение, не работает
|
|||
10
umkasort
06.06.19
✎
12:49
|
Не метаданные, просто Объект использовать
|
|||
11
Юрий Лазаренко
06.06.19
✎
13:02
|
(8) Это надо не при открытии на клиенте делать, а при создании на сервере. Изменение видимости дергает сервер, так что нет смысла сначала добраться до клиента и оттуда снова идти на сервер. Меньше серверных вызовов будет.
|
|||
12
umkasort
06.06.19
✎
14:09
|
В конечном варианте получилось так
&НаКлиенте Процедура ПриОткрытии(Отказ) Для каждого Элемент из Элементы цикл Если Строка(ТипЗнч(Элемент))= "Таблица формы" Тогда Элемент.Видимость=КоличествоСтрокТЧ(Элемент.Имя); КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Функция КоличествоСтрокТЧ(ТЧ) Если Объект[ТЧ].Количество() = 0 Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецФункции |
|||
13
Юрий Лазаренко
06.06.19
✎
14:30
|
(12) А на форме точно не будет элементов с типом "Таблица формы", но привязанных не к табличной части, а к динамическому списку, дереву значений или еще чему-то?
|
|||
14
Вафель
06.06.19
✎
14:37
|
найти элемент по данным можно только перебором всех элементов
|
|||
15
umkasort
06.06.19
✎
15:23
|
(13) Думал об этом. Сейчас нет, но в будущем может стать проблемой, тоже не нравится это, но как иначе пока не знаю сделать
|
|||
16
Кац
07.06.19
✎
08:30
|
(12) тогда уж лучше так:
|
|||
17
zwolf
07.06.19
✎
09:13
|
(16)
> Если Строка(ТипЗнч(Элемент))= "Таблица формы" Тогда На ваше имя успешно оформлена заявка резервирования котла с кипящей смолой. Удачного вам проведения остатка жизни! |
|||
18
Кац
07.06.19
✎
11:40
|
(17) вы ошиблись адресом
|
|||
19
singlych
07.06.19
✎
11:52
|
(16) Если ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
Элемент.Видимость = ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, Элемент.ПутьКДанным).Количество() > 0; |
|||
20
umkasort
07.06.19
✎
16:24
|
(17) Почему-то выдавал ошибку когда так писал, поэтому и пошел через строку
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |