Версия для печати темы (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)
Если делать так
Если Объект.Ссылка.Пустая() Тогда
Объект.Стадия = Перечисления.Стадии.Рассматривается;
КонецЕсли;
то этот код лучше вынести в
ПриСозданииНаСервере, избавитесь от лишнего серверного вызова.
Я конечно извиняюсь, а чем мой вариант хуже?
Да и код писать вообще не надо.
ЗЫ: Перечисление то по умолчанию предопределенным является. Или я не прав?
Автор: Vofka 06.07.12, 13:24
Цитата(DartRomanius @ 06.07.12, 14:14) http://pro1c.org.ua/index.php?act=findpost&pid=52763
Перечисление то по умолчанию предопределенным является. Или я не прав?
Перечисление может быть только предопределенным. А вы это к чему?
Автор: DartRomanius 06.07.12, 13:30
Ну мало-ли, вдруг где-то в дебри полез.
Автор: 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
А почему не заполняется данными документ с таким кодом:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
ДанныеЗаполнения.Вставить("Контрагент", Справочники.Контрагенты.КонечныйПотребитель);
ДанныеЗаполнения.Вставить("НачалоСеанса", ТекущаяДата());
КонецПроцедуры
?
Заполнять из данных заполнения
.
Вопрос снят.
Автор: DartRomanius 09.07.12, 9:41
Цитата(Log1c @ 07.07.12, 13:00)
Спасибо, эффективное решение.
Правда если надо заполнить реквизит типа Дата, значением ТекущаяДата() надо выворачивать по другому.
&НаСервере
Процедура ПриСозданииНаСервере()
Объект.Стадия = Перечисления.Стадии.Рассматривается;
КонецПроцедуры
возможно что-то не учел, но у меня эта процедура не вызывается, отладчиком смотрел.
Как не вызывается?
Эта процедура (естественно если прописать в свойствах формы) вызывается всегда, даже если не новый объект.
Автор: Vofka 09.07.12, 9:50
Цитата(DartRomanius @ 09.07.12, 10:41)
Как не вызывается?
ТС разобрался с этим ответ выше
Автор: 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