Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Значение по умолчанию для справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Log1c
Задача:
Есть справочник Задачи.
У этого справочника есть реквизит Стадия, у которого тип ПеречислениеСсылка.Стадии
В Перечислении Стадии есть значения "Рассматривается", "Отложено".

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

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

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

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

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

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

так работает, но наверно можно сделать как-то элегантней.
DartRomanius
Свойства реквизита - Значение Заполнения.
Vofka
Если делать так
Если Объект.Ссылка.Пустая() Тогда
        Объект.Стадия = Перечисления.Стадии.Рассматривается;
    КонецЕсли;

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

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


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

ЗЫ: Перечисление то по умолчанию предопределенным является. Или я не прав?
Vofka
Цитата(DartRomanius @ 06.07.12, 14:14) необходимо зарегистрироваться для просмотра ссылки
Я конечно извиняюсь, а чем мой вариант хуже?

Так я ж не говорю, что хуже smile.gif

Цитата(DartRomanius @ 06.07.12, 14:14) необходимо зарегистрироваться для просмотра ссылки
Перечисление то по умолчанию предопределенным является. Или я не прав?

Перечисление может быть только предопределенным. А вы это к чему? smile.gif
DartRomanius
Ну мало-ли, вдруг где-то в дебри полез. smile.gif
Log1c
Цитата(DartRomanius @ 05.07.12, 18:31) необходимо зарегистрироваться для просмотра ссылки
Свойства реквизита - Значение Заполнения.


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

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

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


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


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

Процедура возникает на сервере при создании формы.
Log1c
Цитата(Vofka @ 07.07.12, 13:29) необходимо зарегистрироваться для просмотра ссылки
Процедура возникает на сервере при создании формы.


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

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


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

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


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

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


?

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



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


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



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

ТС разобрался с этим ответ выше smile.gif
alex040269
Цитата(Log1c @ 05.07.12, 17:58) необходимо зарегистрироваться для просмотра ссылки
Если Объект.Ссылка.Пустая() Тогда


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

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