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

Округление

Автор eXpert, 03 ноя 2011, 09:55

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

eXpert

Здравствуйте! Очень нужна помощь с округлением розничной цены при вводе товара!
Значения в сумме до 25 рублей отбрасываются, от 25 рублей включительно до 75 рублей округляются до 50 рублей, от 75 рублей включительно и выше округляются до 100 рублей.

если 7810 р. то получится 7800
если 7840 р. то получится 7850
если 7880 р. то получится 7900

Пожалуйста помогите!

sergejK74

Пишешь свою функцию округления и ей пользуешься
Простейший пример
Функция Округлить(Сумма)
Сотен = 100 * Цел(Сумма/100);
Рублей = Сумма - Сотен;
Если Рублей>=75 Тогда
Рублей = 100;
ИначеЕсли Рублей >= 25 Тогда
Рублей = 50;
Иначе
Рублей = 0;
КонецЕсли;
Возврат Сотен+Рублей;
КонецФункции
Кнопочка Спасибо - слева!

eXpert

Если ТипТовара=Перечисление.ТипыТоваров.Тара тогда
// РозничнаяЦена=Окр(ЦенаСндс,0);
РозничнаяЦена = Окр(ЦенаСндс,0,1);
РозничнаяЦена=Окр(РозничнаяЦена,-1,1);
Иначе

Если ЦенаСНДС>1000 тогда
// РозничнаяЦена=Окр((ЦенаСНДС+СтеклоТара.РозничнаяЦена)/10,1,1)*10 - СтеклоТара.РозничнаяЦена;
РозничнаяЦена=Окр(ЦенаСНДС,0,1);
РозничнаяЦена=Окр(РозничнаяЦена+СтеклоТара.РозничнаяЦена,-1,1) - СтеклоТара.РозничнаяЦена;
ИначеЕсли ТипЦены=Перечисление.ТипЦены.Фиксированная тогда
//   РозничнаяЦена=Окр((ЦенаСНДС+СтеклоТара.РозничнаяЦена)/5,1,1)*5 - СтеклоТара.РозничнаяЦена;   
РозничнаяЦена=Окр(ЦенаСНДС,0,1);
РозничнаяЦена=Окр(РозничнаяЦена+СтеклоТара.РозничнаяЦена,-1,1) - СтеклоТара.РозничнаяЦена;
Иначе
// РозничнаяЦена=Окр((ЦенаСНДС+СтеклоТара.РозничнаяЦена)/10,1,1)*10 - СтеклоТара.РозничнаяЦена;
РозничнаяЦена=Окр(ЦенаСНДС,0,1);
    РозничнаяЦена=Окр(РозничнаяЦена+СтеклоТара.РозничнаяЦена,-1,1) - СтеклоТара.РозничнаяЦена;
КонецЕсли;
КонецЕсли;

Если не сложно, то как с этим сделать?

sergejK74

РозничнаяЦена=Окр(РозничнаяЦена,-1,1);
заменить на РозничнаяЦена=Округлить(РозничнаяЦена);. Далее по аналогии.
Функцию  Округлить(Сумма) поставить перед твоим кодом
Кнопочка Спасибо - слева!

eXpert

Чет невыходит. :(
Посмотрите пожалуйста, так или нет:

Функция округлить(сумма)
      Сотен = 100 * Цел(Сумма/100);
      Рублей = Сумма - Сотен;
      Если Рублей>=75 тогда
      Рублей = 100;
   ИначеЕсли Рублей>=25 тогда
      Рублей = 50;
   иначе
      Рублей=0;
      КонецЕсли;
   Возврат Сотен + Рублей;
   
      КонецФункции

Процедура РасчетРознЦены()
   Если ТипЦены=Перечисление.ТипЦены.Свободная тогда
      //Если ТипТовара=Перечисление.ТипыТоваров.Тара тогда
         //ЦенаСНДС=(Себестоимость*(100+(Процент))/100)*100/(100-НалогСпродаж);
      //Иначе
         Если ПРоцентУпл<>0 тогда
            Если прямойНП<>1 Тогда
            ЦенаСНДС=(ПервыйИмпортер*(100+Процент)/100)*(100+СтавкаНДС.Ставка)/100*100/(100-НалогСпродаж);
         Иначе
            ЦенаСНДС=(ПервыйИмпортер*(100+Процент)/100)*(100+СтавкаНДС.Ставка)/100*(1+НалогСПродаж/100); 
         КонецЕсли;
         
      Иначе 
            Если прямойНП<>1 Тогда
            ЦенаСНДС=(Себестоимость*(100+Процент)/100)*(100+СтавкаНДС.Ставка)/100*100/(100-НалогСпродаж);
         Иначе
            ЦенаСНДС=(Себестоимость*(100+Процент)/100)*(100+СтавкаНДС.Ставка)/100*(1+НалогСПродаж/100);
         КонецЕсли;
         
         КонецЕсли;
      //КонецЕсли;
   ИначеЕсли ТипЦены=Перечисление.ТипЦены.Фиксированная тогда
      Если ПрямойНП<>1 Тогда
         ЦенаСНДС=Себестоимость*100/(100-НалогСпродаж);
      Иначе
         ЦенаСНДС=Себестоимость*(1+НалогСпродаж/100);
      КонецЕсли;

   КонецЕсли;

   Если ТипТовара=Перечисление.ТипыТоваров.Тара тогда
   //   РозничнаяЦена=Окр(ЦенаСндс,0);
      РозничнаяЦена = Окр(ЦенаСндс,0,1);

      
      РозничнаяЦена=Окр(РозничнаяЦена);
   Иначе

      Если ЦенаСНДС>1000 тогда
         //   РозничнаяЦена=Окр((ЦенаСНДС+СтеклоТара.РозничнаяЦена)/10,1,1)*10 - СтеклоТара.РозничнаяЦена;
         РозничнаяЦена=Окр(ЦенаСНДС,0,1);
         РозничнаяЦена=Окр(РозничнаяЦена+СтеклоТара.РозничнаяЦена) - СтеклоТара.РозничнаяЦена;
      ИначеЕсли ТипЦены=Перечисление.ТипЦены.Фиксированная тогда
         //     РозничнаяЦена=Окр((ЦенаСНДС+СтеклоТара.РозничнаяЦена)/5,1,1)*5 - СтеклоТара.РозничнаяЦена;   
         РозничнаяЦена=Окр(ЦенаСНДС,0,1);
         РозничнаяЦена=Окр(РозничнаяЦена+СтеклоТара.РозничнаяЦена) - СтеклоТара.РозничнаяЦена;
      Иначе
      //   РозничнаяЦена=Окр((ЦенаСНДС+СтеклоТара.РозничнаяЦена)/10,1,1)*10 - СтеклоТара.РозничнаяЦена;
         РозничнаяЦена=Окр(ЦенаСНДС,0,1);
          РозничнаяЦена=Окр(РозничнаяЦена+СтеклоТара.РозничнаяЦена) - СтеклоТара.РозничнаяЦена;
      КонецЕсли;
   КонецЕсли;
   //Если ЦенаСНДС>1000 тогда
   //РозничнаяЦена=Окр(ЦенаСНДС/5)*5;
   //Иначе
   //РозничнаяЦена=Окр(ЦенаСндс,0);
   //КонецЕсли;
   если ТипТовара=Перечисление.ТипыТоваров.Тара тогда
      ЦенаРН=ЦенаСНДС;
   Иначе
      ЦенаРН=РозничнаяЦена;
   конецесли;
    РНсТР = РозничнаяЦена + СтеклоТара.РозничнаяЦена;
    ЦенаСелМаг= ЦенаСНДС+ЦенаСНДС*НалСпрод1/100;   
    ЦенаОбщепита = ЦенаСНДС+ЦенаСНДС*Наценка/100;
    Если ТипТовара=Перечисление.ТипыТоваров.Тара тогда
       ЦенаСелМаг = Окр(ЦенаСндс,0);
    ИначеЕсли ЦенаСелМаг>1000 тогда
       ЦенаСелМаг=Окр((ЦенаСелМаг + СтеклоТара.РозничнаяЦена)/10,0,0)*10 - СтеклоТара.РозничнаяЦена;   
    ИначеЕсли  ТипЦены=Перечисление.ТипЦены.Фиксированная тогда
       ЦенаСелМаг=Окр((ЦенаСелМаг + СтеклоТара.РозничнаяЦена)/5,0,0)*5 - СтеклоТара.РозничнаяЦена;
    Иначе   
       ЦенаСелМаг=Окр((ЦенаСелМаг + СтеклоТара.РозничнаяЦена)/10,0,0)*10 - СтеклоТара.РозничнаяЦена; 
    конецесли;   
   
    Если ТипТовара=Перечисление.ТипыТоваров.Тара тогда
       ЦенаОбщепита = Окр(ЦенаСндс,0);
    ИначеЕсли ЦенаОбщепита>1000 тогда
       ЦенаОбщепита = Окр((ЦенаОбщепита + СтеклоТара.РозничнаяЦена)/10,0,0)*10 - СтеклоТара.РозничнаяЦена;
    ИначеЕсли  ТипЦены=Перечисление.ТипЦены.Фиксированная тогда
       ЦенаОбщепита = Окр((ЦенаОбщепита + СтеклоТара.РозничнаяЦена)/5,0,0)*5 - СтеклоТара.РозничнаяЦена;
    Иначе   
       ЦенаОбщепита=Окр((ЦенаОбщепита + СтеклоТара.РозничнаяЦена)/10,0,0)*10 - СтеклоТара.РозничнаяЦена; 
    конецесли;
   
    СуммаСТР = ЦенаСелМаг + СтеклоТара.РозничнаяЦена;
    Код_ст=СтеклоТара.Код;
    Код_т=Тара.Код;
   
   
КонецПроцедуры //ПриВводеПроцентаУпл

volodya1122

Еще раз внимательно прочтите Ответ №3 . и сделайте замены в своем тексте как там говорится. (лучще не заменять а закоментировать сстроки а сразу после них вставить нужные)

eXpert

Если я правильно понял то
Функция Округлить(РозничнаяЦена)
Сотен = 100 * Цел(РозничнаяЦена/100);
Рублей = РозничнаяЦена - Сотен;
Если Рублей>=75 Тогда
Рублей = 100;
ИначеЕсли Рублей >= 25 Тогда
Рублей = 50;
Иначе
Рублей = 0;
КонецЕсли;
Возврат Сотен + Рублей;
КонецФункции

РозничнаяЦена = Окр(РозничнаяЦена);
так?

volodya1122

не совсем. Начало верно.
а дальше в твоем тексте где написано
РозничнаяЦена = Окр(ЦенаСндс......
нужно заменить на
РозничнаяЦена = Окр(РозничнаяЦена);

p.s.
хотя в даном случае не нужно заменять, а всего дишь вставить после строки
РозничнаяЦена = Окр(ЦенаСндс......
вставить
РозничнаяЦена = Окр(РозничнаяЦена);

volodya1122

вернее вставить это:
РозничнаяЦена=Округлить(РозничнаяЦена);

eXpert

Цитата: volodya1122 от 03 ноя 2011, 13:59
вернее вставить это:
РозничнаяЦена=Округлить(РозничнаяЦена);

Большое спасибо:)

Теги:

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

Рейтинг@Mail.ru

Поиск