Версия для печати темы (https://pro1c.org.ua/index.php?s=28b243545e2194ed2a091724834be350&showtopic=43192)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ 1С Предприятие 7.7 _ Интерфейс: Вариант вкладок на форме

Автор: Victor Skif 06.01.18, 15:50

Добрый день.
1С 7.70.27

Видел у Альфа предложение по реализации вкладок на форме (размером меньше формы), тут - http://pro1c.org.ua/redirect.php?http://www.dorex.pro/?articles&a1&p1
А мне как раз такое надо. Начал делать - вижу, оно, в общем-то, прекрасно все работает, но с мелкими и досадными интерфейсными погрешностями. То кнопка вылезет там где не должна, то фокус с нее не слазит, портит внешний вид.. А мне бы надо так, чтоб комар носа не подточил. Ну, начал доделывать, изменил схему в сторону усложнения, но в целом, по-моему, получился вполне законченный вариант. Который я вам и представляю, пользуйтесь, кому надо.

Вот что получилось:


Вот как делалось (отличия от Альфа):


3. Кнопки, изображающие вкладки - без заголовка (будем управлять их доступностью, заголовки не должны менять вид), взамен них - сверху на кнопках лежат тексты, которые собственно и изображают названия вкладок.
1. Порядок расположения реквизитов - такой. (это важно).
2. То что должно быть на вкладках - разносим на слои.
4. На форму кидаем невидимый текст, в формуле которого пишем УстДост()

В кнопках - формулы ПриВыбореЗакладки(1) и ПриВыбореЗакладки(2).
Я делал всего две закладки, поэтому атрибуты не нумерованы, а названы (оплаты, доставки). Если вкладок много - то можно все нумеровать, как у Альфа, и управлять циклами, как у него. Смысл не меняется.

Ну и код. Порядок всех действий - важен.

Перем ТекущаяЗакладка;

// =========================
Процедура ПриВыбореЗакладки(НомерЗакладки)
    // запоминаем номер. Чтобы включить нужную ширму и кнопку в УстДост()
    ТекущаяЗакладка = НомерЗакладки;
    // здесь выполняются действия по переключению слоев    
    Если НомерЗакладки = 1 Тогда
        Форма.ИспользоватьСлой("Основной,Оплаты", 2);
    ИначеЕсли НомерЗакладки = 2 Тогда
        Форма.ИспользоватьСлой("Основной,Доставки", 2);
    КонецЕсли;
КонецПроцедуры    

// =========================
Функция УстДост()
    // делаем все невидимым
    Форма.кнОснова.Видимость(0);
    Форма.Ширма1.Видимость(0);
    Форма.Ширма2.Видимость(0);
    Форма.тОплаты.Видимость(0);
    Форма.тДоставки.Видимость(0);
    // делаем нужное невидимым
    Форма.кнОснова.Видимость(1);    
    Форма.тОплаты.Видимость(1);
    Форма.тДоставки.Видимость(1);    
    Форма.ПолучитьАтрибут("Ширма"+ТекущаяЗакладка).Видимость(1);
    // делаем кнопки недоступными
    Форма.кнОплаты.Доступность(0);
    Форма.кнДоставки.Доступность(0);
    // делаем нужные кнопки доступными
    Форма.кнОплаты.Доступность(?(ТекущаяЗакладка = 1, 0, 1));
    Форма.кнДоставки.Доступность(?(ТекущаяЗакладка = 2, 0, 1));
КонецФункции  


ТекущаяЗакладка = 1;
ПриВыбореЗакладки(1);


Демо:  ДемонстрацияЗакладок.zip ( 2,97 килобайт ) : 21

Автор: Victor Skif 09.01.18, 13:53

Еще маленькое усовершенствование открылось - в коде УстДост() следует убрать строки
Форма.кнОснова.Видимость(0); и Форма.кнОснова.Видимость(1);
Они не нужны оказались. Без них мигания вкладок вообще нету.

В выложенной ДемонстрацияЗакладок.ert уже это сделано.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua