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

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

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

Автор: Log1c 05.07.12, 16:58

Задача:
Есть справочник Задачи.
У этого справочника есть реквизит Стадия, у которого тип ПеречислениеСсылка.Стадии
В Перечислении Стадии есть значения "Рассматривается", "Отложено".

Вопрос: как при создании новой Задачи, по умолчанию заполнить реквизит Стадия значением "Рассматривается".

Что пробовал:

1.

Процедура ОбработкаЗаполнения(Основание) 
    Объект.Стадия = Перечисления.Стадии.Рассматривается;
КонецПроцедуры

но, я так понял, эта процедура не вызывается при вводе нового элемента справочника.

2.
&НаСервере
Процедура ПолучитьЗначениеПеречисления()
    Если Объект.Ссылка.Пустая() Тогда
        Объект.Стадия = Перечисления.Стадии.Рассматривается;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПолучитьЗначениеПеречисления();
КонецПроцедуры

так работает, но наверно можно сделать как-то элегантней.

Автор: DartRomanius 05.07.12, 17:31

Свойства реквизита - Значение Заполнения.

Автор: Vofka 05.07.12, 18:55

Если делать так

Если Объект.Ссылка.Пустая() Тогда
        Объект.Стадия = Перечисления.Стадии.Рассматривается;
    КонецЕсли;

то этот код лучше вынести в ПриСозданииНаСервере, избавитесь от лишнего серверного вызова.

Автор: DartRomanius 06.07.12, 13:14

Цитата(Vofka @ 05.07.12, 19:55) *
Если делать так
Если Объект.Ссылка.Пустая() Тогда
        Объект.Стадия = Перечисления.Стадии.Рассматривается;
    КонецЕсли;

то этот код лучше вынести в ПриСозданииНаСервере, избавитесь от лишнего серверного вызова.


Я конечно извиняюсь, а чем мой вариант хуже? smile.gif
Да и код писать вообще не надо.

ЗЫ: Перечисление то по умолчанию предопределенным является. Или я не прав?

Автор: Vofka 06.07.12, 13:24

Цитата(DartRomanius @ 06.07.12, 14:14) http://pro1c.org.ua/index.php?act=findpost&pid=52763
Перечисление то по умолчанию предопределенным является. Или я не прав?

Перечисление может быть только предопределенным. А вы это к чему? smile.gif

Автор: DartRomanius 06.07.12, 13:30

Ну мало-ли, вдруг где-то в дебри полез. smile.gif

Автор: Log1c 07.07.12, 12:00

Цитата(DartRomanius @ 05.07.12, 18:31) http://pro1c.org.ua/index.php?act=findpost&pid=52705
Если делать так
Если Объект.Ссылка.Пустая() Тогда
        Объект.Стадия = Перечисления.Стадии.Рассматривается;
    КонецЕсли;

то этот код лучше вынести в ПриСозданииНаСервере, избавитесь от лишнего серверного вызова.


&НаСервере
Процедура ПриСозданииНаСервере()
    Объект.Стадия = Перечисления.Стадии.Рассматривается;        
КонецПроцедуры


возможно что-то не учел, но у меня эта процедура не вызывается, отладчиком смотрел.

Автор: Vofka 07.07.12, 12:29

Цитата(Log1c @ 07.07.12, 13:00) *
возможно что-то не учел, но у меня эта процедура не вызывается, отладчиком смотрел.

Процедура возникает на сервере при создании формы.

Автор: Log1c 07.07.12, 13:25

Цитата(Vofka @ 07.07.12, 13:29) *
Процедура возникает на сервере при создании формы.


Это я понял из названия процедуры.

В модуль формы вписал этот код
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Стадия = Перечисления.Стадии.Рассматривается;
КонецПроцедуры


Далее создаю новый элемент справочника и смотрю заполнился ли реквизит Стадия . Он не заполнился.

Автор: Vofka 07.07.12, 13:51

Цитата(Log1c @ 07.07.12, 14:25) *
Далее создаю новый элемент справочника и смотрю заполнился ли реквизит Стадия . Он не заполнился.

Неужели и сообщение никакое не выводит, если там написать Сообщить("работает") ?

Автор: Log1c 07.07.12, 15:31

Цитата(Vofka @ 07.07.12, 14:51) *
Неужели и сообщение никакое не выводит, если там написать Сообщить("работает") ?


Разобрался. Зашел в свойства формы. Нашел эту процедуру, она заполнена правильным именем.
Попытался перейти в эту процедуру через лупу - ничего не случилось.
Поклацал на другие процедуры - тоже самое. Хотя до того как создал эту процедуру - заходило.
В итоге выбросило с конфигуратора с ошибкой.
Зашел - убрал код процедуры. Заново создал обработчик через лупу в свойствах формы.
Заработало.

Автор: Vofka 09.07.12, 9:01

А почему не заполняется данными документ с таким кодом:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    
    ДанныеЗаполнения.Вставить("Контрагент", Справочники.Контрагенты.КонечныйПотребитель);
    ДанныеЗаполнения.Вставить("НачалоСеанса", ТекущаяДата());
    
КонецПроцедуры


?

faceoff.gif Заполнять из данных заполнения smile.gif .
Вопрос снят.

Автор: DartRomanius 09.07.12, 9:41

Цитата(Log1c @ 07.07.12, 13:00) *
Спасибо, эффективное решение.
Правда если надо заполнить реквизит типа Дата, значением ТекущаяДата() надо выворачивать по другому.



&НаСервере
Процедура ПриСозданииНаСервере()
    Объект.Стадия = Перечисления.Стадии.Рассматривается;        
КонецПроцедуры


возможно что-то не учел, но у меня эта процедура не вызывается, отладчиком смотрел.



Как не вызывается?
Эта процедура (естественно если прописать в свойствах формы) вызывается всегда, даже если не новый объект.

Автор: Vofka 09.07.12, 9:50

Цитата(DartRomanius @ 09.07.12, 10:41) *
Как не вызывается?

ТС разобрался с этим ответ выше smile.gif

Автор: alex040269 09.07.12, 12:12

Цитата(Log1c @ 05.07.12, 17:58) *
Если Объект.Ссылка.Пустая() Тогда


Не эффективно - лучше использовать:
Если Объект.ЭтоНовый() Тогда


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