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

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

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

Автор: Constantus 01.08.19, 8:43

Приветствую, Форумчане!
1с8.3.12, БСП, самопис, УФ

Пытаюсь изобрести подписку на событие при открытии. Для этого использую подписку на событие ОбработкаПолученияФормы для МенеджераДокумента:
ДокументМенеджер.РасходДенег как источник...

Написал общую процедуру:

Процедура ОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт

    Если ТипЗнч(Источник) = Тип("ДокументМенеджер.РасходДенег")  Тогда
        Сообщить("ОООО");
        //Сообщить(Источник.Элементы.Контрагент);
        Источник.ТолькоПросмотр = истина;

    КонецЕсли;

КонецПроцедуры


Сообщение "ОООО" выходит при открытии, но вот дальше...

Как мне обратится к реквизитам и элементам формы в этом коде?
Ну например, сделать форму заблокированной для изменения (только просмотр)?
Получить данные реквизита "Контрагент"?
Обратится к табличной части?

Основная соль это проверить реквизит "Дата" и если он меньше какой-то даты, то сделать форму только для чтения

Автор: sava1 01.08.19, 9:35

Наверно, Параметры.
дата - реквизит источника (документа)
ТолькоПросмотр - параметр формы

Автор: Constantus 01.08.19, 10:15

sava1 @ Сегодня, 12:35 * ,

Сообщить(Параметры.Ключ.Контрагент);


Спасибо за наводку. Вот так вывело контрагента.

А как заблокировать форму?

Автор: Constantus 01.08.19, 11:43

Constantus @ Сегодня, 13:15 * ,


    СтандартнаяОбработка = Ложь;
        Параметры.Вставить("ТолькоПросмотр", Истина);        
        ВыбраннаяФорма = СтрЗаменить(Источник, "Менеджер", "") + "." + ВидФормы;




Подписка на событие при открытии формы. Только просмотр... Сработало

Автор: Constantus 02.08.19, 8:02

Только вышла засада...

Если создавать новый документ, то попытка что-либо сделать не увенчалась успехом.

Сообщить(Параметры.Ключ.Контрагент) - выдает сообщение

Ошибка при выполнении обработчика - 'ОбработкаПолученияФормы'
по причине:
{ОбщийМодуль.ОбработкаОткрытияФормы.Модуль(18)}: Поле объекта не обнаружено (Ключ)
   Сообщить(Параметры.Ключ);


"Параметры" при новом документе не существуют...

Как осуществить проверку на новый документ, чтобы поставить условие, что если это вновь созданный документ, то открываешь без каких либо условий?



Автор: pablo 02.08.19, 8:27

Если Параметры.Свойство("Ключ") тогда //это не новый документ

Автор: cos12 02.08.19, 8:34

Constantus @ Сегодня, 9:02 * ,

Если ДокументОбъект.ЭтоНовый() Тогда

или
Если ЭтоНовый() Тогда

или
Если Объект.ЭтоНовый() Тогда


Аналог ЭтоНовый() в управляемом приложении
Чтобы выяснить новый объект или нет, необходимо использовать конструкцию вида:

Параметры.Ключ.Пустая();

Если объект записан в базу данных, он содержит ссылку на объект — Ключ. Если ключ пустой- объект новый.

Например:
Если НЕ Параметры.Ключ.Пустая() Тогда
Возврат Истина;
КонецЕсли;

Автор: Kerberos 05.08.19, 12:24

Constantus @ 01.08.19, 9:43 * ,
А вы действительно, в конфигурации на БСП изголяетесь, используя "Сообщить" вместо "ОбщегоНазначенияКлиентСервер.СообщитьПользователю"?
Это как купить дорогой сматфон, чтобы только звонить любимой бабушке.

Посоветовал бы почитать книгу Радченко по программированию для начинающих. Много вопросов бы исчезло после чтива матчасти за 2 выходных

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