Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 07:26

Расчет даты доставки

Автор kot488, 31 мар 2017, 09:22

0 Пользователей и 1 гость просматривают эту тему.

kot488

Имеется 1С 8.2 на управляемых формах. В документе есть два поля, Дата и ДатаДоставки. В поле дата вставляется текущая дата. Как реализовать что бы в поле ДатаДоставки выставлялась дата плюс 2 дня?

LexaK

Даты в 1С хранятся в секундах, поэтому к текущей дате надо добавить количество секунд 2- дней
получается так

ДатаДоставки = ТекущаяДаата
    + 2  //Количество дней
    * 24 //часов в сутках
    * 3600; //( 60 * 60 количество секунд в часе)

ДатаДоставки = ТекущаяДаата + 2*24*3600;
если помогло нажмите: Спасибо!

kot488

Цитата: LexaK от 31 мар 2017, 10:11
Даты в 1С хранятся в секундах, поэтому к текущей дате надо добавить количество секунд 2- дней
получается так

ДатаДоставки = ТекущаяДаата
    + 2  //Количество дней
    * 24 //часов в сутках
    * 3600; //( 60 * 60 количество секунд в часе)

ДатаДоставки = ТекущаяДаата + 2*24*3600;

Уже разобрался, но возник вопрос. Как сделать что бы выполнялась проверка выходных дней, и если дата доставки попадает на выходной то переносилась на следующий рабочий. База самописная, по этому регистра календаря нет

alex0402

Спасибо за Сказать спасибо

kot488

Цитата: alex0402 от 31 мар 2017, 14:57
Тыц

Не подскажите как его в эту функцию вписать?

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  Если Лев(Объект.Зона,25)="Внутригородская доставка" И Лев(Объект.КатегорияДоставки,8)="Экспресс" Тогда
      Объект.ДатаДоставкиОриентир = ТекущаяДата();
   КонецЕсли;

КонецПроцедуры

alex0402

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  Если Лев(Объект.Зона,25)="Внутригородская доставка" И Лев(Объект.КатегорияДоставки,8)="Экспресс" Тогда
      Объект.ДатаДоставкиОриентир = ТекущаяДата()+86400*2;
      Пока ДеньНедели(Объект.ДатаДоставкиОриентир) >= 6 Цикл
           Объект.ДатаДоставкиОриентир = Объект.ДатаДоставкиОриентир - 86400;
      КонецЦикла;

   КонецЕсли;

КонецПроцедуры
Спасибо за Сказать спасибо

LexaK

автор просил изменить дату до следующего рабочего дня поэтому
не
Объект.ДатаДоставкиОриентир = Объект.ДатаДоставкиОриентир - 86400; //минус заменить на плюс

а
Объект.ДатаДоставкиОриентир = Объект.ДатаДоставкиОриентир + 86400;



если помогло нажмите: Спасибо!

kot488

Спасибо большое, вот так заработало

Если Лев(Объект.Зона,25)="Внутригородская доставка" И Лев(Объект.КатегорияДоставки,8)="Экспресс" Тогда
      Объект.ДатаДоставкиОриентир = ТекущаяДата()+86400*2;
      Пока ДеньНедели(Объект.ДатаДоставкиОриентир) >= 5 Цикл
           Объект.ДатаДоставкиОриентир = Объект.ДатаДоставкиОриентир + 86400;
      КонецЦикла;

   КонецЕсли;

Kironten

Цитата: kot488 от 31 мар 2017, 16:04
Спасибо большое, вот так заработало

Если Лев(Объект.Зона,25)="Внутригородская доставка" И Лев(Объект.КатегорияДоставки,8)="Экспресс" Тогда
      Объект.ДатаДоставкиОриентир = ТекущаяДата()+86400*2;
      Пока ДеньНедели(Объект.ДатаДоставкиОриентир) >= 5 Цикл
           Объект.ДатаДоставкиОриентир = Объект.ДатаДоставкиОриентир + 86400;
      КонецЦикла;

   КонецЕсли;

А с чего это у вас пятница - выходной?

kot488

Цитата: Kironten от 31 мар 2017, 16:45
Цитата: kot488 от 31 мар 2017, 16:04
Спасибо большое, вот так заработало

Если Лев(Объект.Зона,25)="Внутригородская доставка" И Лев(Объект.КатегорияДоставки,8)="Экспресс" Тогда
      Объект.ДатаДоставкиОриентир = ТекущаяДата()+86400*2;
      Пока ДеньНедели(Объект.ДатаДоставкиОриентир) >= 5 Цикл
           Объект.ДатаДоставкиОриентир = Объект.ДатаДоставкиОриентир + 86400;
      КонецЦикла;

   КонецЕсли;

А с чего это у вас пятница - выходной?

Затупил не много(
А как то можно не к текущей дате привязаться, а к дате которая в ручную указывается в документе, что бы к значению которое там доваблялось по верхнему примеру.  В документе есть реквизит ДатаОтправления. Это через запрос нужно получать значение текущего документа?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск