|
Как задать условие расчета даты на форме? | ☑ | ||
---|---|---|---|---|
0
Я_Ника
07.05.15
✎
15:20
|
Имеется Документ ВыдачаПропуска. У него есть реквизиты: ТипПропуска(Тип:ПеречисленияСсылка.ТипыПропусков), ДействителенС(Дата), ДействителенПо(Дата). В Перечислении ТипыПропусков три значения: постоянный, временный, разовый. Нужно сделать так, чтобы при выборе типа пропуска и установления ДействителенС, дата ДействителенПо расчитывалась сама(в зависимости от выбранного типа пропуска). Пока я сделала только, чтобы при изменении ДейсвителенС вычислялась ДействителенПо.
&НаКлиенте Процедура ДействителенСПриИзменении(Элемент) ТекДата=Объект.ДействителенС; Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 24); КонецПроцедуры Подскажите, как задать условие? |
|||
1
DrShad
07.05.15
✎
15:35
|
приописаьт условие
|
|||
2
DrShad
07.05.15
✎
15:35
|
Процедура ДействителенСПриИзменении(Элемент)
ТекДата=Объект.ДействителенС; Если .... Тогда Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 24); ИначеЕсли .... Тогда ..... КонецЕсли КонецПроцедуры |
|||
3
1976vas
07.05.15
✎
15:36
|
(0) А разовый - по конец дня, временный - на месяц, постоянный без даты по?
|
|||
4
Я_Ника
07.05.15
✎
16:19
|
Я понимаю, что условие прописать. Пробовала так:
&НаКлиенте Процедура ДействителенСПриИзменении(Элемент) ТекДата=Объект.ДействителенС; Если Объект.ТипПропуска="Постоянный" Тогда Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 24); КонецЕсли; КонецПроцедуры Но при запуске документ никак не реагирует. Видимо, обращаюсь к типу пропуска неправильно... |
|||
5
Я_Ника
07.05.15
✎
16:20
|
(0) Постоянный на 2 года выдается
|
|||
6
1976vas
07.05.15
✎
16:46
|
(4) У тебя тип пропуска не строка, а перечисление
|
|||
7
1976vas
07.05.15
✎
16:48
|
(6) + Значит будет Перечисления.ТипыПропусков.Постоянный
|
|||
8
hugo
07.05.15
✎
16:58
|
(4)
Если Объект.ТипПропуска = ПредопределенноеЗначение("Перечисление.ТипПропуска.Постоянный") Тогда... |
|||
9
1976vas
07.05.15
✎
17:06
|
(8) Точно, даже не предполагал -
"Программируя функционал в платформе 8.2 Управляемые Формы нужно четко понимать где он будет исполняться (на сервере или клиенте). Многие привычные методы теперь не работают так как раньше. И элементарная проверка заполнения реквизита на предопределенное значение на клиенте будет иметь следующий вид &НаКлиенте Процедура ПриИзменениеСтатусаЗаказа() Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказов.Завершен") Тогда ЗакрытьЗаказ(); КонецЕсли; КонецПроцедуры Вот так работать не будет: Код 1C v 8.х // НЕ РАБОТАЕТ &НаКлиенте Процедура ПриИзменениеСтатусаЗаказа() Если Объект.Статус = Перечисления.СтатусыЗаказов.Завершен Тогда ЗакрытьЗаказ(); КонецЕсли; КонецПроцедуры " |
|||
10
Я_Ника
07.05.15
✎
17:09
|
Очень заморочено, конечно, и коряво, но работает.
&НаКлиенте Процедура ДействителенСПриИзменении(Элемент) ТекДата=Объект.ДействителенС; Если Объект.ТипПропуска=ВернутьЗначениеТипаПропускаП() Тогда Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 24); КонецЕсли; Если Объект.ТипПропуска=ВернутьЗначениеТипаПропускаВ() Тогда Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 1); КонецЕсли; Если Объект.ТипПропуска=ВернутьЗначениеТипаПропускаР() Тогда Объект.ДействителенПо=Объект.ДействителенС; КонецЕсли; КонецПроцедуры &НаСервере Функция ВернутьЗначениеТипаПропускаП(); Возврат Перечисления.ТипыПропусков.Постоянный; КонецФункции &НаСервере Функция ВернутьЗначениеТипаПропускаВ(); Возврат Перечисления.ТипыПропусков.Временный; КонецФункции Функция ВернутьЗначениеТипаПропускаР(); Возврат Перечисления.ТипыПропусков.Разовый; КонецФункции |
|||
11
hugo
07.05.15
✎
17:13
|
(10) что то я не понял, почему (8) работать не будет?
|
|||
12
Я_Ника
07.05.15
✎
17:17
|
(8), спасибо! Переделала без функций
&НаКлиенте Процедура ДействителенСПриИзменении(Элемент) ТекДата=Объект.ДействителенС; Если Объект.ТипПропуска= ПредопределенноеЗначение("Перечисление.ТипыПропусков.Постоянный") Тогда Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 24); КонецЕсли; Если Объект.ТипПропуска= ПредопределенноеЗначение("Перечисление.ТипыПропусков.Временный") Тогда Объект.ДействителенПо=ДобавитьМесяц((ТекДата), 1); КонецЕсли; Если Объект.ТипПропуска= ПредопределенноеЗначение("Перечисление.ТипыПропусков.Разовый") Тогда Объект.ДействителенПо=Объект.ДействителенС; КонецЕсли; КонецПроцедуры |
|||
13
Я_Ника
07.05.15
✎
17:19
|
ой, т.е. спасибо, (9). Да и вообще, всем спасибо!
|
|||
14
Segate
07.05.15
✎
17:23
|
(12) А если регламент поменяется и добавятся новые типы пропусков?
Может лучше сделать тип пропуска справочником с реквизитом "СрокДействия" И не плодить овер9000 если |
|||
15
Segate
07.05.15
✎
17:27
|
будет это примерно так:
&НаКлиенте Процедура ДействителенСПриИзменении(Элемент) ТекДата=Объект.ДействителенС; СрокДействия = ПолучитьСрокДействия(Объект.ТипПропуска); Объект.ДействителенПо=ТекДата+86400*СрокДействия; КонецПроцедуры &НаСервере Функция ПолучитьСрокДействия(Ссылка) Возврат Ссылка.СрокДействия; Конецфункции |
|||
16
Segate
07.05.15
✎
17:28
|
В таком случае при изменении регламентов можно будет вбить новый тип пропуска, или изменить срок действия старого в пару кликов.
|
|||
17
1976vas
07.05.15
✎
18:35
|
(12) А если изменится ТипПропуска? У тебя ДействителенПо не пересчитается.
|
|||
18
Segate
08.05.15
✎
10:26
|
(17) Похоже, что это будет уже беда следующего программиста )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |