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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как текст на форме сделать невидимым? Проблема 1С 7.70.003 торговля склад для Украины?

Автор: ZUBR 23.10.19, 0:42

Доброй ночи, господа! Или доброе утро! Это снова я.
Мне нужно, чтобы когда клиент оплатит очередной ремонт, я и только я мог делать отметку в документе об оплате.

На форме расходной я добавил атрибут Текст "СПЛАЧЕНО" с идентификатором СПЛАЧЕНО. Возле него поставил флажок с идентификатором Спл. Кроме того, флажок имеет формулу Сплачено(). Еще я добавил атрибут шапки Спл с типом число с одним разрядом. Далее, перед процедурой ПриОткрытии я прописал процедуру флажка Сплачено:


Процедура Сплачено()                   
Если Спл=0 тогда
        Форма.СПЛАЧЕНО.Видимость(0);
    Иначе
        Форма.СПЛАЧЕНО.Видимость(1);
    КонецЕсли;
КонецПроцедуры


Затем в теле процедуры ПриОткрытии прописал следующее:

Если  ПолноеИмяПользователя() <> "Simeon" Тогда
            Форма.Спл.Видимость(0);
            Форма.Спл.Доступность(0);
       Форма.СПЛАЧЕНО.Доступность(0);
    КонецЕсли;
    
    Если Спл=0 тогда  
         Форма.СПЛАЧЕНО.Видимость(0);
         Иначе
        Форма.СПЛАЧЕНО.Видимость(1);
    КонецЕсли;


А проблема в том, что при открытии документа текст СПЛАЧЕНО виден, хотя значение флажка ноль. Если же поставить флажок (единицу), а затем снова его сбросить (ноль), то есть, задействовать процедуру флажка Сплачено(), то текст пропадает. Однако, если закрыть документ с сохранением, а потом его снова открыть, текст СПЛАЧЕНО снова будет снова виден. Хотя, флажок остается в нуле. Почему текст виден, когда флажок по умолчанию в нуле при открытии? Как сделать, чтобы он не появлялся, когда флажок пустой? Спасибо!!!
Кстати, доступность работает по условию. То есть, другим пользователям флажок недоступен. И текст тоже. Но видимый.
Чтобы убедиться, что Спл=0 при открытии , я использовать Сообщить(Спл). Он таки был равен нулю. Но текст был видимым! 64000000.gif

Автор: nysysimara 23.10.19, 7:03

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

Автор: ZUBR 23.10.19, 11:36

nysysimara @ Сегодня, 8:03 * ,
Да есть слои именно на этой форме. Подскажите, пожалуйста, как прописать, или где почитать. Или приведите маленький пример. Спасибо. Лучше пример. Там есть основной слой, совместный и доверенность. Три слоя.

Автор: nysysimara 23.10.19, 12:36

видимость и доступность реквизитов нужно прописать в процедуре ПриВыбореЗакладки()
примерно так:

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

и обязательно в процедуре ПриОткрытии после
Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение("Основной","Основной");
    Форма.Закладки.ДобавитьЗначение("Доверенность","Доверенность");

прописать
ПриВыбореЗакладки(1,"Основной");

Автор: ZUBR 23.10.19, 19:56

nysysimara @ Сегодня, 13:36 * , спасибо Вам. Вы мне очень помогли. Сегодня попробую.

Автор: ZUBR 24.10.19, 0:54

ZUBR @ Сегодня, 20:56 * ,
У меня не получилось. Результат тот же. Дело в том, что в данном случае я не понимаю, что делаю. И у меня все реквизиты шапки в совместном слое, а табличная часть в основном. Я даже переместил нужный мне реквизит из совместного в основной слой, но ничего не помогло. Все равно при открытии текст СПЛАЧЕНО видимый, хоть флажок сброшен в нуль.
Вообще, нужно хорошо понимать, как оно работает, чтобы сделать то, что нужно. В синтакс помощнике нет достаточной информации(.

ZUBR @ Сегодня, 1:12 * ,
Только что рыл гугл. Там есть ссылки на разные форумы, в том числе и на этот. Но я там не нашел ответа на вопрос, в чем особенность программирования видимости атрибутов на форме с несколькими слоями. Может, здесь Видимость не действует, и надо только оперировать показом слоев? Кстати, в моем случае используются два слоя - основной и совместный. И оба должны быть видны. Потому что на совместном реквизиты шапки, а на основном табличная часть. Короче, пока не понимаю...

Автор: volodya1122 24.10.19, 9:14

Цитата(ZUBR @ 24.10.19, 1:54) *
Дело в том, что в данном случае я не понимаю, что делаю.

Попробую пояснити те що написала nysysimara. В 1с7 повноцінних закладок немає. Візуальний ефект закладок реалізований іншим методом.
1. В процедурі ПриОткрытии() відбувається ініціалізація візуального показу закладок. Тут появляються тільки самі закладки (тільки значки на форрмі якими переключаються закладки), а реквізити на формі розміщені абсолютно всі (із всіх слоїв). Щоб показати елементи конкретного слою при відкритті справочника якраз і прописано виклик із ПриИткритии процедури ПриВыбореЗакладки(1,"Основной");
2. В самій процедурі ПриВыбореЗакладки аналізується яка закладка нажата і показується елементи відповідних слоїв (в одній закладкі показано елементи двох слоїв).
3. Процедура ПриВыбореЗакладки виконується пільки при відкритті форми справочника (в даному випадку) і при виборі закладки.
4. При відкритті форми флажок "Спл" мав би дорівнювати нулю (якшо інше не задано прорамою. Або це не реквізик справочника.
5. Коли на формі ви міняєте значення флажка тоді потрібно на флажок повісити виклик процедури ПриВыбореЗакладки(1,"Основной") або іншої, яка б міняда видимість/доступність іншого реквізиту.

Якщо щось не получається/нерозумієте, то пишіть конкретніше, із приведенням тексту модуля.

Ще може бути що ця частина не спрацьовує:
Если  ПолноеИмяПользователя() <> "Simeon" Тогда

Перевірте чи взагалі програма заходить в цю умову

Автор: Sharzem 24.10.19, 17:30

Цитата(volodya1122 @ 24.10.19, 10:14) *
В 1с7 повноцінних закладок немає

44000000.gif
Цитата(volodya1122 @ 24.10.19, 10:14) *
Попробую пояснити те що написала nysysimara

Цитата(volodya1122 @ 24.10.19, 10:14) *
Процедура ПриВыбореЗакладки виконується пільки при відкритті форми справочника (в даному випадку) і при виборі закладки.

Цитата(volodya1122 @ 24.10.19, 10:14) *
4. При відкритті форми флажок "Спл" мав би дорівнювати нулю (якшо інше не задано прорамою. Або це не реквізик справочника.

Цитата(volodya1122 @ 24.10.19, 10:14) *
5. Коли на формі ви міняєте значення флажка тоді потрібно на флажок повісити виклик процедури ПриВыбореЗакладки(1,"Основной") або іншої, яка б міняда видимість/доступність іншого реквізиту.

faceoff.gif
12201689.gif
Еххх, Вова, Вова... Нагородив городу... Це Вам не найвища математика. Тут людині потрібно при відкритті викликати ПриВыбореЗакладки() та при виборі закладки викликати Сплачено()... А Ви стільки всього нагородили.....

Nysysimara також... Мабуть, 7.7. вже забули...

Автор: ZUBR 24.10.19, 22:04

Умова спрацьовує, бо недоступність спрацьовує, яка зумовлена цією умовою.
Панове, я так і не зрозумів. Як при виборі закладок викликати СПЛАЧЕНО? Що це значить? Дякую.

Автор: nysysimara 25.10.19, 6:32

Давайте сначала:
1) На каком слое расположен реквизиты "Спл" и "Сплачено"?
2) Где-то по коду у вас есть

Форма.ИспользоватьЗакладки(1);

и
Форма.ИспользоватьСлой("

если да, то в каких процедурах

Автор: Sharzem 25.10.19, 7:17

ZUBR @ Вчера, 23:04 * ,

Цитата
Як при виборі закладок викликати СПЛАЧЕНО?

Процедура Сплачено()                   
    Если Спл=0 тогда
        Форма.СПЛАЧЕНО.Видимость(0);
    Иначе
        Форма.СПЛАЧЕНО.Видимость(1);
    КонецЕсли;
КонецПроцедуры

Процедура ПриВыбореЗакладки(Номер,Значение)
       .......
       Сплачено();
КонецПроцедуры

Процедура ПриОткрытии()
       ......
       ПриВыбореЗакладки(1,"Основной");
КонецПроцедуры

Все.

Автор: volodya1122 25.10.19, 8:26

Цитата(Sharzem @ 25.10.19, 8:17) *
Все.

Майже все.... Ще потрібно на флажок "Спл" повісити процедуру " Сплачено() ".

Хоча і те що написала Nysysimara робочий варіант

Автор: ZUBR 28.10.19, 0:09

Sharzem @ 25.10.19, 8:17 * ,
В мене була помилка. Треба було рядок

Процедура ПриОткрытии()
       ......
       ПриВыбореЗакладки(1,"Основной");
КонецПроцедуры


помістити в самий кінець процедури. І тоді все запрацювало.
Доречі, замість Сплачено()
Процедура ПриВыбореЗакладки(Номер,Значение)
       .......
       Сплачено();
КонецПроцедуры


я там прописав саму процедуру. Вона коротка. Бо еоли прописуєш Сплачено(), то вискакує помилка, що не знаходить таку процедуру. Здається, все. Дуже всім дякую!!! 32000000.gif

Автор: nysysimara 28.10.19, 7:52

Цитата(ZUBR @ 28.10.19, 0:09) *
не знаходить таку процедуру

сама процедура Сплачено() должна располагаться до своего вызова
или в начале после описания переменных добавить строку
Процедура Сплачено() Далее


Автор: ZUBR 28.10.19, 18:54

Спасибо за информацию! Она очень ценна для таких новичков, как я)

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