SimpleUI: при открытии формы процесса не могу скрыть элементы

Создал процесс и переопределил его как стартовое меню: введите сюда описание изображения

При старте процесса (открытии меню) мне нужно по условию спрятать некоторые элементы. Событие процесса "OnStart" не отрабатывает (пробовал toast). Также, пробовал сделать с помощью общего обработчика "onStartMenu", тоже не получается.

Скрыть элементы пытаюсь отправкой команды: hashMap.put("Show_button","-1")


Ответы (3 шт):

Автор решения: alex

Обработчики авторизации и меню:

 #Область ПРОЦЕСС_МЕНЮ
 
 //menu_

//ОБНУЛЯЕТ ВСЕ ПЕРЕМЕННЫЕ ПРОЦЕССА
Процедура Меню_ОбнулитьПеременныеПроцесса(Переменные)
    
        
КонецПроцедуры

//ПРОЦЕСС АВТОРИЗАЦИЯ    
Процедура Меню_ЭкранМеню_ПриСтарте(Переменные) Экспорт
    
    Процесс = "Меню";
    //Переменные.Вставить("noRefresh",      "");
    
    ТекущийПользователь = ПолучитьТекущегоПользователя(Переменные, Ложь);
    
    //проверим авторизацию
    Если ТекущийПользователь = Неопределено Тогда 
        
        Переменные.Вставить("menu_nadpis_deystviya", "Пожалуйста авторизируйтесь");
        
        МассивОпераций      = Новый Массив;
        СтруктураДжисон     = ПолучитьСтруктуруДжисон(Справочники.СтруктурыДжисон.СписокЭлементовМеню.ДжисонТекст);
        
        СтруктураДокумент   = Новый Структура;
        СтруктураДокумент.Вставить("key",           "Авторизация");
        СтруктураДокумент.Вставить("punkt_menu",    "Авторизация");
                    
        МассивОпераций.Добавить(СтруктураДокумент);
        
        СтруктураДжисон.customcards.Вставить("cardsdata", МассивОпераций);

        ЗаписьДжисон    = Новый ЗаписьJSON;
        ЗаписьДжисон.УстановитьСтроку();
        ЗаписатьJSON(ЗаписьДжисон, СтруктураДжисон);
        
        ТекстДжисон     = ЗаписьДжисон.Закрыть(); 
        Переменные.Вставить("menu_cards", ТекстДжисон);
        
    Иначе
    
        Переменные.Вставить("menu_nadpis_deystviya", "Выберите операцию");
        
        //ПОЛУЧИМ ОПЕРАЦИИ ДОСТУПНЫЕ ПОЛЬЗОВАТЕЛЮ
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Пользователь", ТекущийПользователь);
        Запрос.Текст = 
            "ВЫБРАТЬ
            |   змт_ДоступныеПользователюОперацииWMS.Операция,
            |   змт_ДоступныеПользователюОперацииWMS.ПорядокОпераций КАК ПорядокОпераций,
            |   змт_ДоступныеОперацииWMS.ИмяПроцесса,
            |   змт_ДоступныеОперацииWMS.НаименованиеПроцесса
            |ИЗ
            |   РегистрСведений.змт_ДоступныеПользователюОперацииWMS КАК змт_ДоступныеПользователюОперацииWMS
            |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.змт_ДоступныеОперацииWMS КАК змт_ДоступныеОперацииWMS
            |       ПО змт_ДоступныеПользователюОперацииWMS.Операция = змт_ДоступныеОперацииWMS.Ссылка
            |ГДЕ
            |   змт_ДоступныеПользователюОперацииWMS.Пользователь = &Пользователь
            |   И НЕ змт_ДоступныеОперацииWMS.НаименованиеПроцесса = """"
            |   И НЕ змт_ДоступныеОперацииWMS.ИмяПроцесса = """"
            |   И змт_ДоступныеОперацииWMS.ПометкаУдаления = ЛОЖЬ
            |
            |УПОРЯДОЧИТЬ ПО
            |   ПорядокОпераций";
        РезультатЗапроса = Запрос.Выполнить();
        
        МассивОпераций      = Новый Массив;
        СтруктураДжисон     = ПолучитьСтруктуруДжисон(Справочники.СтруктурыДжисон.СписокЭлементовМеню.ДжисонТекст);
        
        Если не РезультатЗапроса.Пустой() Тогда
            
            Выборка = РезультатЗапроса.Выбрать();
            Пока Выборка.Следующий() Цикл
                
                СтруктураДокумент = Новый Структура;
                СтруктураДокумент.Вставить("key",           СокрЛП(Выборка.ИмяПроцесса));
                СтруктураДокумент.Вставить("punkt_menu",    СокрЛП(Выборка.НаименованиеПроцесса));
                            
                МассивОпераций.Добавить(СтруктураДокумент);
                
            КонецЦикла;

        КонецЕсли;
        
        СтруктураДокумент   = Новый Структура;
        СтруктураДокумент.Вставить("key",           "Авторизация");
        СтруктураДокумент.Вставить("punkt_menu",    "Авторизация");
                    
        МассивОпераций.Добавить(СтруктураДокумент);
        
        СтруктураДжисон.customcards.Вставить("cardsdata", МассивОпераций);

        ЗаписьДжисон    = Новый ЗаписьJSON;
        ЗаписьДжисон.УстановитьСтроку();
        ЗаписатьJSON(ЗаписьДжисон, СтруктураДжисон);
        
        ТекстДжисон     = ЗаписьДжисон.Закрыть(); 
        Переменные.Вставить("menu_cards", ТекстДжисон);
    
    КонецЕсли;
    
КонецПроцедуры

Процедура Меню_КарточкаНажатие(Переменные) Экспорт
    
    Процесс = "Меню";
    
    //ПРОВЕРИМ НЕ ТАПНУЛИ ЛИ ЗАГЛУШКУ
    Если Не ЗначениеЗаполнено(Переменные.selected_card_key) Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Не определен тип операции");
        возврат;
    КонецЕсли;
    
    Если Переменные.selected_card_key = "Авторизация" Тогда
        Переменные.Вставить("StartProcess",     "Авторизация");
    Иначе  
        
        //ОбнулитьПеременныеПроцесса_УкладкаВКоробку(Переменные);
        //ИнформацияПоШтрихКоду_ОбнулитьПеременныеПроцесса(Переменные);
        //ПроверкаУкладки_ОбнулитьПеременныеПроцесса(Переменные);
        //ПеремещениеКоробокПоЗаказу_ОбнулитьПеременныеПроцесса(Переменные);
        Переменные.Вставить("StartProcess",     Переменные.selected_card_key);
    КонецЕсли;
        
КонецПроцедуры
 
Процедура Меню_ОкноАвторизация_ПриСтарте(Переменные) Экспорт
    
    Процесс = "Меню";
    
    Если Переменные.Свойство("_1cusername") = Ложь Тогда
        Переменные.Вставить("_1cusername", " ");
    КонецЕсли;  
    
КонецПроцедуры

Процедура Меню_Проверка_ШК(Переменные) Экспорт
    
    Процесс             = "Меню";
    ГуидПользователя    = "";
    
    Если Переменные.Свойство("menu_barcode", ГуидПользователя) = Ложь 
        или ГуидПользователя = "" Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Ошибка чтения штрих кода");
        возврат;
    КонецЕсли;
    
    //очистка штрих кода
    ГуидПользователя        = СокрЛП(ГуидПользователя);
    
    //проверка повторгоно считывания
    Если Переменные.Свойство("_1cuserguid") = Истина
        и Переменные._1cuserguid = ГуидПользователя Тогда
        //это повторный пик для подтверждения операции
        Переменные.Вставить("ShowScreen",           "Экран меню");
        возврат;
    КонецЕсли;
    
    Попытка
        СсылкаНаПользователя    = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидПользователя));
    Исключение
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Пользователь не найден в базе данных по гуиду");   
        возврат;
    КонецПопытки;
    
    Если Не ПроверитьСсылку(СсылкаНаПользователя) = Истина Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Пользователь не найден в базе данных по гуиду");   
        возврат;
    КонецЕсли;
    
    СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаПользователя, "ПометкаУдаления, ИдентификаторПользователяИБ, ФизЛицо");
    Если СтруктураРеквизитов.ПометкаУдаления = Истина Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Учетная запись пользователя помечена на удаление");    
        возврат;
    КонецЕсли;
    
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СтруктураРеквизитов.ИдентификаторПользователяИБ);
    Если ПользовательИБ = Неопределено Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Ошибка получения пользователя ИБ");
        возврат;
    Иначе
        Если не ПользовательИБ.Роли.Содержит(Метаданные.Роли.змт_ПользовательВМС) Тогда
            ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Пользователь не имеет прав входа в WMS");
            возврат;    
        КонецЕсли;
    КонецЕсли;
    
    Если не ЗначениеЗаполнено(СтруктураРеквизитов.ФизЛицо) Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "У пользователя не заполнено физическое лицо");
            возврат;
    КонецЕсли;
    
    Переменные.Вставить("_1cusername",          Строка(СтруктураРеквизитов.ФизЛицо));
    Переменные.Вставить("_1cuserguid",          ГуидПользователя);
            
КонецПроцедуры 

Процедура Меню_ОкноАвторизация_ЗакрытьИПерейтиВМенюОпераций(Переменные) Экспорт
    
    Процесс = "Меню";
    
    Переменные.Вставить("ShowScreen",           "Экран меню");
            
КонецПроцедуры 

#КонецОбласти
→ Ссылка
Автор решения: alex
#Область ПРОЦЕСС_АВТОРИЗАЦИЯ

//ОБРАБОТЧИКИ СОБЫТИЙ ВМС

//ПРОЦЕСС АВТОРИЗАЦИЯ    
Процедура Авторизация_ОкноАвторизация_ПриСтарте(Переменные) Экспорт
    
    Если Переменные.Свойство("_1cusername") = Ложь Тогда
        Переменные.Вставить("_1cusername", " ");
    КонецЕсли;  
    
КонецПроцедуры

Процедура Авторизация_Проверка_ШК(Переменные) Экспорт
    
    ГуидПользователя        = "";
    
    Если Переменные.Свойство("barcode_autorization", ГуидПользователя) = Ложь 
        или ГуидПользователя = "" Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Ошибка чтения штрих кода");
        возврат;
    КонецЕсли;
    
    //очистка штрих кода
    ГуидПользователя        = СокрЛП(ГуидПользователя);
    
    //проверка повторгоно считывания
    Если Переменные.Свойство("_1cuserguid") = Истина
        и Переменные._1cuserguid = ГуидПользователя Тогда
        //это повторный пик для подтверждения операции
        Переменные.Вставить("FinishProcessResult",  "");
        Переменные.Вставить("UpdateMenu",           "");
        возврат;
    КонецЕсли;
    
    Попытка
        СсылкаНаПользователя    = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидПользователя));
    Исключение
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Пользователь не найден в базе данных по гуиду");   
        возврат;
    КонецПопытки;
    
    Если Не ПроверитьСсылку(СсылкаНаПользователя) = Истина Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Пользователь не найден в базе данных по гуиду");   
        возврат;
    КонецЕсли;
    
    СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаПользователя, "ПометкаУдаления, ИдентификаторПользователяИБ, ФизЛицо");
    Если СтруктураРеквизитов.ПометкаУдаления = Истина Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Учетная запись пользователя помечена на удаление");    
        возврат;
    КонецЕсли;
    
    ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(СтруктураРеквизитов.ИдентификаторПользователяИБ);
    Если ПользовательИБ = Неопределено Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Ошибка получения пользователя ИБ");
        возврат;
    Иначе
        Если не ПользовательИБ.Роли.Содержит(Метаданные.Роли.змт_ПользовательВМС) Тогда
            ДобавитьСообщениеПользователю(Переменные, "Ошибка", "Пользователь не имеет прав входа в WMS");
            возврат;    
        КонецЕсли;
    КонецЕсли;
    
    Если не ЗначениеЗаполнено(СтруктураРеквизитов.ФизЛицо) Тогда
        ДобавитьСообщениеПользователю(Переменные, "Ошибка", "У пользователя не заполнено физическое лицо");
            возврат;
    КонецЕсли;
    
    Переменные.Вставить("_1cusername",          Строка(СтруктураРеквизитов.ФизЛицо));
    Переменные.Вставить("_1cuserguid",          ГуидПользователя);
    //Переменные.Вставить("FinishProcessResult",    "");
    //Переменные.Вставить("toast",              "Авторизация пройдена");
            
КонецПроцедуры 

Процедура Авторизация_ОкноАвторизация_ЗакрытьИПерейтиВМенюОпераций(Переменные) Экспорт
    
    Переменные.Вставить("FinishProcessResult",  "");
    Переменные.Вставить("UpdateMenu",           "");
            
КонецПроцедуры 

#КонецОбласти
→ Ссылка
Автор решения: alex

Есть еще вот такой джисон, для вывода меню: (он из предопределенного элемента справочника берется, так просто удобней мне было)

{
    "customcards":         
    {
        "options":
        {
            "search_enabled":true,
            "save_position":true
        },
        "layout":
        {
            "type": "LinearLayout",
            "orientation": "vertical",
            "gravity_vertical": "center",
            "height": "wrap_content",
            "width": "match_parent",
            "Value": "Карточка меню",
            "BackgroundColor": "#d4d4d4",
            "StrokeWidth": "3",
            "Radius": "5",
            "Elements": [
                {
                    "type": "TextView",
                    "orientation": "vertical",
                    "height": 5,
                    "width": "wrap_content",
                    "Value": " ",
                    "type_s": "Надпись",
                    "height_value": 5,
                    "weight": "0",
                    "width_value": "wrap_content"
                },
                {
                    "type": "TextView",
                    "orientation": "vertical",
                    "height": "wrap_content",
                    "width": "match_parent",
                    "gravity_horizontal": "center",
                    "Value": "@punkt_menu",
                    "TextSize": "20",
                    "TextBold": true,
                    "type_s": "Надпись",
                    "weight": "0",
                    "width_value": "match_parent",
                    "height_value": "wrap_content"
                },
                {
                    "type": "TextView",
                    "orientation": "vertical",
                    "height": 5,
                    "width": "wrap_content",
                    "Value": " ",
                    "type_s": "Надпись",
                    "height_value": 5,
                    "weight": "0",
                    "width_value": "wrap_content"
                },
            ],
            "height_value": "wrap_content",
            "type_s": "Контейнер",
            "weight": "0",
            "width_value": "match_parent"
        }

    }
}
→ Ссылка