Имя: Пароль:
1C
1С v8
Как задать условие расчета даты на форме?
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) Похоже, что это будет уже беда следующего программиста )