Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Видимость на управляемых формах

Видимость на управляемых формах
Я
   umkasort
 
06.06.19 - 12:14
Добрый день
Есть документ с кучей табличных частей, которые заполняются не все. Поэтому нужно проверить заполнена ли в документе табличная часть и выводить на форму только заполненные. В принципе механизм понятен  для одного элемента, но как это загнать в цикл? То есть перебирать элементы формы в цикле причем только табличные части?
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Элементы.Товары.Видимость=КоличествоСтрокТЧ("Товары")
КонецПроцедуры
&НаСервере

Функция КоличествоСтрокТЧ(ТЧ)
    МетаданныеОбъекта=РеквизитФормыВЗначение("Объект").Метаданные();
    Если МетаданныеОбъекта.ТабличныеЧасти.Найти(ТЧ).Количество() = 0 Тогда
        Возврат Ложь;
    Иначе
        Возврат Истина;
    КонецЕсли;
КонецФункции
 
 
   DrWatson
 
1 - 06.06.19 - 12:20
(0) Этот код работает?
У объекта метаданных ТабличнаяЧасть нет метода Количество. Да и не это, вроде как, требовалось.
   umkasort
 
2 - 06.06.19 - 12:21
(1) Данный код работает)
   umkasort
 
3 - 06.06.19 - 12:24
Интересует как на форме выцепить только элементы которые ссылаются на табличную часть документа и как свойство видимость менять параметрически, т.е. Не Элементы.Товары.Видимость а что-то вроде Видимость("Товары")
   hhhh
 
4 - 06.06.19 - 12:25
(2) просто в задаче нужно проверить заполнена ли табличная часть, а вы проверяете совсем другое, заполнены ли метаданные табличной части.
   Кац
 
5 - 06.06.19 - 12:28
(0) [То есть перебирать элементы формы в цикле причем только табличные части? ]
да, только так
   DrWatson
 
6 - 06.06.19 - 12:29
(3)Выцепить элементы - метод ПолучитьРеквизиты(), там уже по типу понять где там таблица.
Менять видимость - Элементы["Товары"].Видимость = Ложь;

(2) У меня выдаёт "Метод объекта не обнаружен (Количество)"
   Кац
 
7 - 06.06.19 - 12:32
можно и так

массив = новый массив;
массив.добавить("форматовары");
массив.добавить("форматрусы");
массив.добавить("форманоски");

для каждого Имяреквизита из массив цикл
Элементы[Имяреквизита].Видимость=КоличествоСтрокТЧ(Имяреквизита) 
конеццикла;


   umkasort
 
8 - 06.06.19 - 12:41
(4) Мне метаданные и нужны, т.к. проверка происходит при открытии, а документ заполняется автоматически на основании.
(6) Странно вроде нет проблем с работой
(3) Про [ ] не знал, спасибо, только начинаю изучать язык, вторая часть вопроса снята
(7) Вариант остается прежним - вручную перечислить все элементы добавляя их в массив, в принципе это не сложно, но не очень правильно по-моему, изначально хочется писать правильный код, попутно изучая язык.
   umkasort
 
9 - 06.06.19 - 12:48
(6) Сорри за введение в заблуждение, не работает
   umkasort
 
10 - 06.06.19 - 12:49
Не метаданные, просто Объект использовать
   Юрий Лазаренко
 
11 - 06.06.19 - 13:02
(8) Это надо не при открытии на клиенте делать, а при создании на сервере. Изменение видимости дергает сервер, так что нет смысла сначала добраться до клиента и оттуда снова идти на сервер. Меньше серверных вызовов будет.
   umkasort
 
12 - 06.06.19 - 14:09
В конечном варианте получилось так
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Для каждого Элемент из Элементы цикл
        Если Строка(ТипЗнч(Элемент))= "Таблица формы" Тогда
            Элемент.Видимость=КоличествоСтрокТЧ(Элемент.Имя);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
&НаКлиенте

Функция КоличествоСтрокТЧ(ТЧ)
    Если Объект[ТЧ].Количество() = 0 Тогда
        Возврат Ложь;
    Иначе
        Возврат Истина;
    КонецЕсли; 
КонецФункции
   Юрий Лазаренко
 
13 - 06.06.19 - 14:30
(12) А на форме точно не будет элементов с типом "Таблица формы", но привязанных не к табличной части, а к динамическому списку, дереву значений или еще чему-то?
   Вафель
 
14 - 06.06.19 - 14:37
найти элемент по данным можно только перебором всех элементов
   umkasort
 
15 - 06.06.19 - 15:23
(13) Думал об этом. Сейчас нет, но в будущем может стать проблемой, тоже не нравится это, но как иначе пока не знаю сделать
   Кац
 
16 - 07.06.19 - 08:30
(12) тогда уж лучше так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Для каждого Элемент из Элементы цикл
        Если Строка(ТипЗнч(Элемент))= "Таблица формы" Тогда
            Элемент.Видимость = Объект[Элемент.Имя].Количество() > 0;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

   zwolf
 
17 - 07.06.19 - 09:13
(16)
> Если Строка(ТипЗнч(Элемент))= "Таблица формы" Тогда

На ваше имя успешно оформлена заявка резервирования котла с кипящей смолой. Удачного вам проведения остатка жизни!
   Кац
 
18 - 07.06.19 - 11:40
(17) вы ошиблись адресом
   singlych
 
19 - 07.06.19 - 11:52
(16) Если ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
    Элемент.Видимость = ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(ЭтотОбъект, Элемент.ПутьКДанным).Количество() > 0;
   umkasort
 
20 - 07.06.19 - 16:24
(17) Почему-то выдавал ошибку когда так писал, поэтому и пошел через строку

Список тем форума
Рекламное место пустует  Рекламное место пустует
Основная теорема систематики: Новые системы плодят новые проблемы.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.