Имя: Пароль:
1C
1С v8
Помогите разобраться со скидкой
0 pin4er
 
01.04.13
10:54
Доброго всем времени суток! Только начинаю вникать в программирование, особо не ругайте...

Доработка конфигурации с автоматическим выводом скидок:
1С:Предприятие 8. Турагентство, редакция 1.3 (1.3.1.4) УП
Дело вот такое:
Существует 3и скидки:
7% за 60 дней до поездки (т.е. ... >= 60),
5% за 45 дней дней до поездки (т.е. 60> ... >=45),
2% менее 45 дней дней до поездки (т.е. 45> ...).

Вот код который пишу:
   Если Объект.навСкидкаЗаРаннееБронирование >= 60 тогда
       Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 7;
       Если Объект.навСкидкаЗаРаннееБронирование < 60 тогда
           ИначеЕсли Объект.навСкидкаЗаРаннееБронировани >= 45 тогда
               Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 5;
           Иначе
                Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 2;
         КонецЕсли;
   КонецЕсли;

Пояснение:
Объект.навКомиссия = 16000
Объект.навБонус102050 = 8000

даты по периоду отсчета ставил для примера такие:
10.12.2012, 16.01.2013, 01.03.2013

Получается следующие:
при отработке кода с датой 10.12.2012, он подставляет сумму нормально 560руб. (то что мне и требуется)
но, при дальнейшей работе кода, он почему то ставит не сумму а количество дней: в случае с 16.01.2013 он ставит 58, а с 01.03.2013 он ставит 14.

Помогите разобраться в чем косяк.
1 Wobland
 
01.04.13
10:55
наверное, косяк в дальнейшей работе кода
2 Reset
 
01.04.13
10:57
не читал.
Заметил это:

Если Объект.навСкидкаЗаРаннееБронирование >= 60 тогда
       ////
       Если Объект.навСкидкаЗаРаннееБронирование < 60 тогда

второе условие никогда не выполнится
3 Wobland
 
01.04.13
10:58
плин, а если всё это в цикле, то в начале имеем там дни, а потом рубли...
4 Reset
 
01.04.13
10:59
короче, кусок кода раносилен этому:

 Если Объект.навСкидкаЗаРаннееБронирование >= 60 тогда
               Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 5;
   КонецЕсли;
5 pin4er
 
01.04.13
11:00
маленько ошибся, где второе Если у меня стоит ИначеЕсли
6 pin4er
 
01.04.13
11:01
я разобраться не могу как правильно задать, чтобы он корректо считал, уже 3 день потею над этим куском кода
7 Wobland
 
01.04.13
11:06
(6) не вчитывался. скидку храни в одном (в рублях/процентах), условие - в другом (в днях) месте
8 pin4er
 
01.04.13
11:10
(7) а как это лучше сделать, не совсем просто понимаю.

получается "Дата бронирования" сравнивается с "датой выезда", получаем число

Объект.навСкидкаЗаРаннееБронирование = Окр((НачалоДня(Объект.ДатаВыезда) - НачалоДня(Объект.ДатаБронирования)) / 86400);

далее уже код который выше, просто 1 строку то норм отрабатывает а остальное ставит кол-во ней,
может как то по другому надо процедуру составить? кто нибудь может примерно что нить подсказать
9 eklmn
 
гуру
01.04.13
11:29
может ты все-таки будешь читать, что тебе пишут?
в (2) ответ
10 Wobland
 
01.04.13
11:30
непонятно, что за объект, непонятно, что и где в (0) происходит, непонятна структура данных...
11 Wobland
 
01.04.13
11:30
(9) а в (5) поправка
12 Wobland
 
01.04.13
11:30
ну и таки да, непонятен сам код
13 pin4er
 
01.04.13
11:38
Все разобрался, работает, чуток натупилсам
Вот получившийся рабочий код, может кому еще пригодится
Все сделал так:
   КолДней = Окр((НачалоДня(Объект.ДатаВыезда) - НачалоДня(Объект.ДатаБронирования)) / 86400);
   
   Если КолДней >= 60 тогда
       Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 7;
       ИначеЕсли КолДней < 60 и КолДней >= 45 тогда
               Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 5;
           Иначе
                Объект.навСкидкаЗаРаннееБронирование = ( Объект.навКомиссия - Объект.навБонус102050 ) / 100 * 2;
     
   КонецЕсли;


Спасибо что откликнулись
14 Wobland
 
01.04.13
11:39
всё-таки в (3) я был прав
15 pin4er
 
01.04.13
11:41
(14) да что то тока сейчас осенило что нужно так сделать=)))
так что спасибо за подсказку=)
16 Wobland
 
01.04.13
11:41
дата бронирования - полночь. при дате выезда 17 часов имеем количество дней - 1 (пусть 45). при дате выезда 1 час ночи имеем количество дней 0 (пусть 44). так и нужно?
17 Wobland
 
01.04.13
11:42
(16) сторно. НачалоДня не приметил
18 pin4er
 
01.04.13
11:48
(16) по факту "дата бронирование", это когда я пришел в турагенство, запросил тур, на меня нашли тур и забронировали "дату выезда". после чего я уже оплачиваю с учетом полученной скидки от кол-ва дней.

Ну главное разобрался и считает как требуется...=)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой