Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Интерфейс: Вариант вкладок на форме
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Наши статьи > 1С Предприятие 7.7
Victor Skif
Добрый день.
1С 7.70.27

Видел у Альфа предложение по реализации вкладок на форме (размером меньше формы), тут - необходимо зарегистрироваться для просмотра ссылки
А мне как раз такое надо. Начал делать - вижу, оно, в общем-то, прекрасно все работает, но с мелкими и досадными интерфейсными погрешностями. То кнопка вылезет там где не должна, то фокус с нее не слазит, портит внешний вид.. А мне бы надо так, чтоб комар носа не подточил. Ну, начал доделывать, изменил схему в сторону усложнения, но в целом, по-моему, получился вполне законченный вариант. Который я вам и представляю, пользуйтесь, кому надо.

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


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


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);


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

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