Имя: Пароль:
1C
1С v8
Скрыть одновременно несколько элементов формы.
, ,
0 01230123
 
15.08.16
22:15
Доброго времени суток.
Иногда нужно одновременно скрыть или сделать недоступными несколько элементов формы, находящихся рядом. Можно перечислять их все по очереди:
ЭлементыФормы.ВремяС.Доступность = Ложь;
ЭлементыФормы.ВремяДо.Доступность = Ложь;
ЭлементыФормы.НадписьДатаОтгрузки1.Доступность = Ложь;
...

А можно ли как-нибудь их объединить (невидимым элементом) и сделать недоступным весь блок? А то код некрасивый получается ;-)
1 Jija Grenkov
 
15.08.16
22:23
В управляемых формах точно можно. А вот в обычных вроде как нельзя.
Что бы код стал красивее можно сделать процедуру которая спрячет элементы и вызывать ее где надо.
2 Jija Grenkov
 
15.08.16
22:27
Вот только что придумал. Можно завести регистр накопления вида Форма, группа, элемент и туда записывать приход видимых элементов и расход невидимых. Остаток будет всегда показывать доступные элементы и обороты историю изменений )))
3 Jija Grenkov
 
15.08.16
22:27
жалко, что  не пятница
4 Garykom
 
гуру
15.08.16
22:31
(2) Зачем нужен регистр когда достаточно СЗ или нечто вроде с именами контролов? И одной или пары процедур/функций?
5 Garykom
 
гуру
15.08.16
22:31
(0) Вам бы базовые алгоритмы программирования к примеру https://ru.wikipedia.org/wiki/Цикл_(программирование) подучить...
6 Mauser
 
15.08.16
22:33
(1) А потом кто нибудь нажмет "Изменить форму" и вытащит твои контролы из группы, ага.
(0) Если хочешь по-настоящему, заведи отдельную панель и играйся ей.
7 Jija Grenkov
 
15.08.16
22:35
(4) Это была шутка. Максимум, что нужно -- регистр сведений что бы обеденить элементы в группы. Или захардкоженая коллецкия
8 Jija Grenkov
 
15.08.16
22:37
(6) можно запретить изменение формы
9 Mauser
 
15.08.16
22:40
(8) Обрубить пользователю руки из-за лени евелопера написать три строчки кода? Отличная идея!

Только между нами - что они вам такого сделали?
10 Garykom
 
гуру
15.08.16
22:43
(5)+ Если не дошло то расжевываю (для кого сами догадайтесь):

СкрытьЭлементы("ВремяС, ВремяДо, НадписьДатаОтгрузки1");
ПоказатьЭлементы("ВремяС, ВремяДо, НадписьДатаОтгрузки1");

СделатьДоступнымиЭлементы("ВремяС, ВремяДо, НадписьДатаОтгрузки1");
СделатьНедоступнымиЭлементы("ВремяС, ВремяДо, НадписьДатаОтгрузки1");
11 Garykom
 
гуру
15.08.16
22:46
(10)+ Или продвинуть в будущее и одна процедура/функция:

УправлениеЭлементами("СписокЭлементовЧерезЗапятую", "ДействиеСЭлементамиМожноТожеЧерезЗапятую");
12 Jija Grenkov
 
15.08.16
22:47
(9) вот так стоит программисту дать слабинку и уже бухгалтер требует сформировать и отправить рег. отчетность )
13 Garykom
 
гуру
15.08.16
22:47
(11)+ По принципу как в функции формат будет совсем идеально:

УправлениеЭлементами("ВремяС, ВремяДо, НадписьДатаОтгрузки1", "Видимость=Ложь; Доступность=Ложь; ЕщеЧтоТо=ЧемуТо");
14 Jija Grenkov
 
15.08.16
23:17
(13) Как по мне перегружено смотрится. И писать много букв без автодополнения тоже напрягает. Я бы предпочел вариант из (10)
15 Garykom
 
гуру
15.08.16
23:19
(14) Кто мешает сделать обертки как в (10) над одной функцией из (13) ?
16 Mauser
 
15.08.16
23:25
(15) Надо добавить еще параметр - список вложенных элементов, которые не надо обрабатывать. А потом со всем этим барахлом мы попытаемся взлететь.
17 Garykom
 
гуру
15.08.16
23:32
(16) Ну низзя же так на ночь смешить )) гыгыгы

Не думаю что ТС тянет на КВСа...
18 Mauser
 
15.08.16
23:34
(17) Можно дожать. Ограничиться работой на клиенте и передавать внутрь callback через ОписаниеОповещения
19 Jija Grenkov
 
15.08.16
23:34
(15) Никто не мешает. Но у меня выработалась модель разработки укрупнения (не знаю каким словом лучше это описать).
Тоесть иерархия была бы
УправлениеЭлементами -> СкрытьЭлементы, ПоказатьЭлементы СделатьДоступнымиЭлементы ... -> УстановитьПараметр(Массив эл-ов, имяреквизита, значение)

Но УправлениеЭлементами я нахожу функцией которая делает слишком много и будет усложнять читаемость и по этому не имплементирую этот слой.

PS. Но это моменты уже субъективные и тут на много важнее следовать 1 стилю, чем искать идеал.
20 Jija Grenkov
 
15.08.16
23:41
(16)(18)  Как-то я слабо улавливаю ваш полет мысли. Если мы указываем элементы(не группы), то о каких усключеиях может идти речь?
21 Garykom
 
гуру
15.08.16
23:46
(19) У меня в (13) банально циклов обработки меньше = шустрее пашет в случае установки разных признаков для одного списка/группы контролов.
22 Garykom
 
гуру
15.08.16
23:50
(18) А это мысля... передавать для обработки списка свою функцию которая и будет вызываться... И в этой своей делать что угодно ))
23 Mauser
 
15.08.16
23:51
(20) Страница, поле таблицы с колонками, панель на ОФ и т.п
24 Jija Grenkov
 
15.08.16
23:56
(21) я не думаю, что это может стать узким местом системы. По этому отдаю предпочтение читаемости кода.
25 Mauser
 
15.08.16
23:58
(19) Ну это классическая проблема функционального подхода - что проще: добавить параметр или написать еще один метод.

Бухгалтерская аналогия - аналитика или синтетика? Ужи и узы, вы меня понимаете, мистер Андерсон? =)
26 Mauser
 
15.08.16
23:59
Бедный ТС
27 Jija Grenkov
 
16.08.16
11:46
(25) мистер Смит, у меня появилось ощущение, что вы путаете функциональный и процедурный подход
28 Mauser
 
16.08.16
12:11
(27) В недрах тундры выдры в гетрах бодро тырят ядра кедров
29 Garykom
 
гуру
16.08.16
12:56
(28) мог бы и проще сказать что процедура - это функция без возврата результата
30 Jija Grenkov
 
16.08.16
15:09
(29) а функциональный подход на много дальше от 1с чем тот же ООП. От ООП там хоть кусочки есть, а вот от функциональщины нет ничего.
Вот на русском можно почитать.
https://ru.wikipedia.org/wiki/Функциональное_программирование

В общем писат ьв функциональном стиле - это не просто оперировать процедурами и функциями
31 Garykom
 
гуру
16.08.16
15:14
(30) язык запросов чистейшей воды функциональщина
32 Jija Grenkov
 
16.08.16
16:23
(30) Язык запросов формально можно назвать деларативным, но точно не чистым функциональным. Есть ли там функции высшего порядка? лямбда замыкания? Да и еще есть куча внутренних состояний в виде оптимизатора запросов и статистики в результате чего 1 и тот же запрос может выполнять разные действия, для извлечения данных. В общем sql это сложный вопрос.
А тут судя по всему далеко не все поинимают почему функции/процедуры есть, а функционального подхода нет.
33 Garykom
 
гуру
16.08.16
16:34
(32) ламбды и замыкания есть, функции высшего порядка тоже или как будто нельзя запросом получить текст другого запроса и выполнить его ))
34 Jija Grenkov
 
16.08.16
17:08
Я всегда считал, что лмбда замыкание - это возможность из вложенного скопа обратиться к переменным внешнего. Как можно во вложенном запросе обратиться к результатам внешнего мне не понятно.
+ что является функцией в таком случае?
35 Garykom
 
гуру
16.08.16
17:21
(34) у нас же "язык запросов 1С" с внешними параметрами запроса
36 Garykom
 
гуру
16.08.16
17:22
(35)+ но что только на чтение это да особенность/ограниченность языка
37 Mauser
 
16.08.16
18:49
(34)
ВЫБРАТЬ
    &Период              КАК Период,
    Валюты.Ссылка        КАК Валюта,
    КурсыВалют.Курс      КАК Курс,
    КурсыВалют.Кратность КАК Кратность
ИЗ
    Справочник.Валюты КАК Валюты
ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрСведений.КурсыВалют КАК КурсыВалют
ПО
    (КурсыВалют.Валюта, КурсыВалют.Период) В (
        ВЫБРАТЬ
            КурсыВалютВнутр.Валюта, МАКСИМУМ(КурсыВалютВнутр.Период)
        ИЗ            
            РегистрСведений.КурсыВалют КАК КурсыВалютВнутр
        ГДЕ
              КурсыВалютВнутр.Период <= &Период
            И КурсыВалютВнутр.Валюта = Валюты.Ссылка
        СГРУППИРОВАТЬ ПО
            КурсыВалютВнутр.Валюта
    )


Чем тебе не замыкание? =)
38 Jija Grenkov
 
16.08.16
19:58
(34) параметры чем-то похожи, примерно как общие модули на ООП.
(37) На мой взгляд это не замыкание, а какой-то сайд эффект. Так как мы обращаемся не к переменным внешней функции, а к 3 стороне из внешнего и внутреннего запроса. Измените "переменную" в родительском запросе и получите - это значение во вложенном.

Вы меня заинтриговали и я решил почитать, на эту статеку на вики. Так вот SQL - декларативный язык, но не фунциональный. Декларативный - это более общее понятие чем функциональный отсюда и все ваши неудачные примеры.
https://en.wikipedia.org/wiki/Declarative_programming изучайте
39 Jija Grenkov
 
16.08.16
20:01
там же почитайте про процедурный стиль
40 Mauser
 
16.08.16
20:08
(38) (39) То есть ты сначала повозмущался и только потом сходил на вики. Прекрасно =)
41 Jija Grenkov
 
16.08.16
23:19
(40) проведу аналогию. На мисте пишут, что регистр бухгатерии лучше всего подходит для оперативного учета, вы высказываете другое мнение, но вас убеждают в обратном несколько человек. При этом появляется естественное желание проверить свою правоту почитав докумнетацию или вики.
42 Mauser
 
16.08.16
23:37
(41) Аналогии обманчивы. Ты можешь обнаружить, что речь идет про 7.7 а у тебя нет лицензии на оперативную компоненту. Ты доказываешь свою правоту, проверяя ее по куче форумов, и...
43 Jija Grenkov
 
16.08.16
23:46
(42)
1. Англоязычная вики крайнередко врет когда речь идет о IT, врядли получится найти более правдивые источники.
2. Может обнаружиться, все что угодно, по этому стоит отталкиваться от описанных учловий, а не пытаться объять необъятное.
3. Я в промышленной разработке использую много элементов из функционального программирования, по этому отталкиваюсь в первую очередь от практики
44 michael512
 
17.08.16
06:29
Ээ, понятие цикла знакомо?
придумываешь префикс (или  суффикс, неважно),главное чтобы однозначно определяло группу и пробегаешь циклом

Для Каждого ЭФ Из ЭлементыФормы Цикл
    Если Найти(ЭФ.Имя, "Префикс")>0 Тогда
        ЭФ.Видимость = Ложь;
    КонецЕсли;
КонецЦикла;
45 michael512
 
17.08.16
06:37
(44) Префикс надо присвоить именам элементов, с которыми надо манипулировать в группе, например "ПрефиксПолеВвода1", "ПрефиксФлажок1" и т.д.

хм, первая строка кода почему-то выпала из форматирования