Имя: Пароль:
1C
1C 7.7
v7: ПолучитьАтрибут (Formex) - как работает?
0 Масянька
 
25.01.18
16:14
День добрый!
Док-т, модуль формы.

Процедура ПриОткрытии()    
    
    Можно  = 0;

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

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

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

КонецПроцедуры // ДокументНулевогоГашения
1 Масянька
 
25.01.18
16:19
Если в ПриОткрытии написать:
    РасшФормы.НайтиАтрибут(2, "Корректировка");    
    РасшФормы.ТекущийАтрибут().Доступность = 1;
Сообщить("" + Форма.Корректировка.Доступность());    
выдает 1 (то есть доступен).
Но потом идет процедура с закрытием всего на просмотр...
2 kittystark
 
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) У меня уже несколько планов обхода крутятся в голове...
43 ADirks
 
26.01.18
07:06
(26) вот такая фигулька может помочь
но таки учти, всё это работает _после_ создания окна формы. В ПриОткрытии() не работает.

Процедура Доступность_ТолькоУказанные(сз_стр_Рекв, фДоступность) Экспорт
    Если ТипЗначенияСтр(сз_стр_Рекв) = "СписокЗначений" Тогда
        сзРекв = сз_стр_Рекв;
    Иначе
        сзРекв= СтрокуВСписок(сз_стр_Рекв, ",", "1");
    КонецЕсли;
    
    оФорма = СоздатьОбъект("РасширениеФормы");
    оФорма.УстановитьФорму(Конт.Форма);
    
    нКоличествоАтр = оФорма.КоличествоАтрибутов();
    Для нАтр = 1 По нКоличествоАтр Цикл
        оАтр = оФорма.ПолучитьАтрибут(нАтр-1);
        
        Если оАтр.Тип = 1 Тогда
            Продолжить;
        ИначеЕсли оАтр.Тип = 4 Тогда
            Продолжить;
        КонецЕсли;
        
        Если сзРекв.НайтиЗначение(оАтр.Идентификатор) = 0 Тогда
            оАтр.Доступность = (1 - фДоступность);
        Иначе
            оАтр.Доступность = фДоступность;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры