Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: ПолучитьАтрибут (Formex) - как работает?

v7: ПолучитьАтрибут (Formex) - как работает?
Я
   Масянька
 
25.01.18 - 16:14
День добрый!
Док-т, модуль формы.
Процедура ПриОткрытии()     
    
    Можно  = 0;

    РасшФормы = СоздатьОбъект("РасширениеФормы");
    РасшФормы.УстановитьФорму(Форма);
....
        ДокументНулевогоГашения();
....
КонецПроцедуры
Процедура ДокументНулевогоГашения()
    
    Форма.ТолькоПросмотр(1);
    ....
        РасшФормы.ПолучитьАтрибут(1).Доступность = 1;
КонецПроцедуры

выдает-
РасшФормы.ПолучитьАтрибут(1).Доступность = 1;
{Документ.ГашениеКассы.Форма.Модуль(567)}: Значение не представляет агрегатный объект (ПолучитьАтрибут)
Почему?

КонецПроцедуры// ДокументНулевогоГашения
 
 
   Масянька
 
1 - 25.01.18 - 16:19
Если в ПриОткрытии написать:
    РасшФормы.НайтиАтрибут(2, "Корректировка");    
    РасшФормы.ТекущийАтрибут().Доступность = 1;
Сообщить("" + Форма.Корректировка.Доступность());    
выдает 1 (то есть доступен).
Но потом идет процедура с закрытием всего на просмотр...
   kittystark
 
2 - 25.01.18 - 16:21
в отладчике посмотри
скорее всего расшФормы - это локальная переменная в Процедуре ПриОткрытии()... и криво передается в ДокументНулевогоГашения()

попробуй в начале модуля пропиши "перем расшФормы;"
   Злопчинский
 
3 - 25.01.18 - 16:21
РасширениеФормы используй не в ПриОткрытии (формы еще нет)
а в ПослеСоздания() или в ПослеОткрытия()
   Масянька
 
4 - 25.01.18 - 16:24
(2) ДокументНулевогоГашения - это процедура из этого же модуля.
(3) ПоселСоздания, ПослеОткрытия - тоже самое "Значение не представляет агрегатный объект".
   Ёпрст
 
5 - 25.01.18 - 16:31
(0) и че ?
РасшФоры у тя глобальная переменная ?
   Ёпрст
 
6 - 25.01.18 - 16:31
сдаётся, что нет
   Ёпрст
 
7 - 25.01.18 - 16:32
ну и по номеру.. это вообще не комильфо в данном случае, пиши через имя атрибута формы.
   Ёпрст
 
8 - 25.01.18 - 16:32
и номер. если че, с 0 начинается. т. е если у формы 1 атрибут, нумер будет 0
   Масянька
 
9 - 25.01.18 - 16:32
(5) Глобальная - это в глобальнике? Если да - то нет.
Если "глобальная" в модуле док-та - то да.
(7) Те же яй... (пардон) помидоры.
   Ёпрст
 
10 - 25.01.18 - 16:34
(9) ну, значит еще её где-то переопределяешь
 
 Рекламное место пустует
   Ёпрст
 
11 - 25.01.18 - 16:35
вот и нету у неё метода ПолучитьАтрибут.
назови
Перем Вася;

и используй потом в коде.
   Масянька
 
12 - 25.01.18 - 16:36
(10)     РасшФормы = СоздатьОбъект("РасширениеФормы");
только в ПриОткрытии.
Причем, используется затем (сбросмодифицированности) и работает.
   Ёпрст
 
13 - 25.01.18 - 16:38
(12) ты проверь, для начала
   Ёпрст
 
14 - 25.01.18 - 16:38
если не поможет, пихай код в ПослеОткрытия
   Масянька
 
15 - 25.01.18 - 16:40
(13) Дык, проверяла...
А ВводНового не вызывает ПриОткрытии?
   Ёпрст
 
16 - 25.01.18 - 16:52
(15) нет
   Ёпрст
 
17 - 25.01.18 - 16:52
приОткрытии это своё событие.. :))
   Ёпрст
 
18 - 25.01.18 - 16:52
пиши, где накосячила..
   Злопчинский
 
19 - 25.01.18 - 16:54
(15) Сначала отрабатывает ВводНового, потом отрабатывает ПриОткрытии - если форма вызывана для ввода нового
   Масянька
 
20 - 25.01.18 - 17:00
(18) См. (19).
   Масянька
 
21 - 25.01.18 - 17:03
Все равно не открывает...
В Приоткрытии в самом конце:
    Если Выбран() = 0 Тогда        // новый док-т

        РасшФормы.УстановитьФорму(Форма);
        РасшФормы.ПолучитьАтрибут("Корректировка").Доступность = 1;
    КонецЕсли;
Сообщить("1 - " + Форма.Корректировка.Доступность()); - выдает 1, а сам элемент серенький...
Процедуры, где толькопросмотр не вызываются...
   Масянька
 
22 - 25.01.18 - 17:04
(21) Сообщить самый последний. Проверяла вводом нового.
   Злопчинский
 
23 - 25.01.18 - 17:07
(21) а зачем так сложно
Форма.Корректировка.Доступность(1);
- и все.. попробуй!
   Масянька
 
24 - 25.01.18 - 17:09
(23) В некоторых случаях Форма. ТолькоПросмотр(1);
И тут - как раз такой случай.
Но ТолькоПросмотр идет до.
   Злопчинский
 
25 - 25.01.18 - 17:13
(24) Просмотр и Доступность- это две несвязные сущности.
пусть вверху Будет ТолькоПросмотр.
Ниже сделай как в (23) - доступность(1)
   Масянька
 
26 - 25.01.18 - 17:14
А может и Формекс не умеет?
Форма - только просмотр, открыть один реквизит.
   Масянька
 
27 - 25.01.18 - 17:15
(25) Да, не работает.
Форма.ТолькоПросмотр(1).
Форма.ТолькоПросмотр(<?>)
Form.ReadOnly(<?>)
Синтаксис:
Форма.ТолькоПросмотр(<Режим>)
Назначение:
Установка режима редактирования формы.
Возвращает:
Текущее числовое значение режима редактирования формы (на момент до исполнения метода).
Параметры:
<Режим> -: 0 - разрешено редактирование полей формы, 1 - запрещено (необязателен, по умолчанию - 0).
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
   Злопчинский
 
28 - 25.01.18 - 17:19
(27) фигня, косяпоришь где-то.
проверяй. В типово ТиС аналог Просмотр а потом доступность=1 - отрабатывает норм, посмотри в ПриОткрытии в люом типовом документе в модуле формы
   Масянька
 
29 - 25.01.18 - 17:23
(28) Открой и посмотри.
   Масянька
 
30 - 25.01.18 - 17:25
(18) Ё! Форма.ТолькоПросмотр(1) можно открыть реквизит?
   Злопчинский
 
31 - 25.01.18 - 17:28
(29) это влияет только на ПОЛЯ фомы. кнопки остаются доступными.
поэтому - ну по крайней мере у меня стоит так и работает\
    // Если открыли только на просмотр, то надо кнопки сделать недоступными

    Если Форма.ТолькоПросмотр()=1 Тогда
        // СДЕЛАТЬ НЕДОСТУПНЫМИ КНОПКИ МОДИФИКАЦИИ ДОКУМЕНТА

        Форма.кнОперация.Доступность(0);
        Форма.кнОК.Доступность(0);
        Форма.кнХОснование.Доступность(0);
        Форма.кнХПроект.Доступность(0);
        Форма.кнЗаписать.Доступность(0);
        Форма.кнПровести.Доступность(0);
        Форма.кнЗаполнить.Доступность(0);
        Форма.кнПодбор.Доступность(0);
        Форма.кнЦены.Доступность(0); 
        Форма.кнСуммаВзаиморасчетов.Доступность(0);
   Масянька
 
32 - 25.01.18 - 17:29
(31) Ты гонишь?
Речь о реквизите док-та (поле формы).
   Ёпрст
 
33 - 25.01.18 - 17:39
(26) не умеет
 
 
   Ёпрст
 
34 - 25.01.18 - 17:39
(30) нет.
Толкько кнопки доступны
   Ёпрст
 
35 - 25.01.18 - 17:39
Тебе надо делать не так, тебе надо всё через формекс закрывать и нужное открывать
   Ёпрст
 
36 - 25.01.18 - 17:40
если хочешь только часть атрибутов открыть
   Ёпрст
 
37 - 25.01.18 - 17:40
форма.ТолькоПросмотр будет блокировать всё, кроме кнопок
   Ёпрст
 
38 - 25.01.18 - 17:40
и формексом ты это не отменишь
   Масянька
 
39 - 25.01.18 - 17:41
(33) - (38) Всё... Зря я долблюсь...
Спасибо.
   Ёпрст
 
40 - 25.01.18 - 17:42
ну или делать как в типовых - открывать свою форму для редактирование реквизитов нужных.
   Ёпрст
 
41 - 25.01.18 - 17:42
в журнальчике кнопка - редактировать реквизиты..
   Масянька
 
42 - 25.01.18 - 17:43
(41) У меня уже несколько планов обхода крутятся в голове...
   ADirks
 
43 - 26.01.18 - 07:06
(26) вот такая фигулька может помочь
но таки учти, всё это работает _после_ создания окна формы. В ПриОткрытии() не работает.
Процедура Доступность_ТолькоУказанные(сз_стр_Рекв, фДоступность) Экспорт
    Если ТипЗначенияСтр(сз_стр_Рекв) = "СписокЗначений" Тогда
        сзРекв = сз_стр_Рекв;
    Иначе
        сзРекв= СтрокуВСписок(сз_стр_Рекв, ",", "1");
    КонецЕсли;
    
    оФорма = СоздатьОбъект("РасширениеФормы");
    оФорма.УстановитьФорму(Конт.Форма);
    
    нКоличествоАтр = оФорма.КоличествоАтрибутов();
    Для нАтр = 1 По нКоличествоАтр Цикл
        оАтр = оФорма.ПолучитьАтрибут(нАтр-1);
        
        Если оАтр.Тип = 1 Тогда
            Продолжить;
        ИначеЕсли оАтр.Тип = 4 Тогда
            Продолжить;
        КонецЕсли;
        
        Если сзРекв.НайтиЗначение(оАтр.Идентификатор) = 0 Тогда
            оАтр.Доступность = (1 - фДоступность);
        Иначе
            оАтр.Доступность = фДоступность;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует