Имя: Пароль:
1C
1С v8
Получить целое число из дробного
0 upseven
 
24.09.12
11:23
новичок. в 1С 2 месяца. знаю практически ничего.
В Документе ДоставкаПродукции Процедура ЗаполнитьТовары
необходимо получать целое число при выполнении условия( например 1,3 = 1; 1,7 = 1):

ТекСтр.КоличествоМест=Окр(ТекСтр.Количество/ТекСтр.КоэффициентМест,0);    
Иначе
ТекСтр.КоличествоМест = Цел(ТекСтр.Количество/ТекСтр.КоэффициентМест);

Если не сложно, объясните почему при выводе на печать некоторые позиции округляются в большую сторону?
1 pessok
 
24.09.12
11:23
щас тебе СП продадут, хлебом не корми
2 Нуф-Нуф
 
24.09.12
11:24
Продам СП. 10000 руб.
3 Ненавижу 1С
 
гуру
24.09.12
11:24
трудно сказать, наверное условие выполняется и происходит округление, а не взятие целой части
4 mikecool
 
24.09.12
11:24
продам СП 5000р
5 upseven
 
24.09.12
11:25
Вся процедура

Процедура ЗаполнитьТовары(СписокНакладных= Неопределено)Экспорт
   Если СписокНакладных= Неопределено Тогда
   СписокНакладных= Новый СписокЗначений();
   Для Каждого ТекСтр Из Заказы Цикл
       Если  ЗначениеЗаполнено(ТекСтр.Накладная) Тогда
   СписокНакладных.Добавить(ТекСтр.Накладная);
       КонецЕсли;
   КонецЦикла;
   КонецЕсли;

   ТабЧастьТовары = ЭтотОбъект["Товары"];
   ТабЧастьТоварыОрганизаций = ЭтотОбъект["ТоварыОрганизаций"];
   ТабЧастьТара = ЭтотОбъект["ВозвратнаяТара"];

   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("СписокНакладных", СписокНакладных);
   Запрос.УстановитьПараметр("Рейс", Рейс);
   Запрос.УстановитьПараметр("Экспедитор", Экспедитор);
   Запрос.УстановитьПараметр("ДатаН", НачалоДня(Дата));
   Запрос.УстановитьПараметр("ДатаК", КонецДня(Дата));
   Запрос.УстановитьПараметр("ПустаяСсылкаТара", Справочники.Номенклатура.ПустаяСсылка());
   Запрос.Текст =
"ВЫБРАТЬ
|    РеализацияТоваровУслугТовары.Номенклатура.Ссылка КАК Номенклатура,
|    РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
|    РеализацияТоваровУслугТовары.КоличествоМест,
|    РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаХраненияОстатков КАК Единица,
|    РеализацияТоваровУслугТовары.Количество,
|    РеализацияТоваровУслугТовары.Сумма,
|    РеализацияТоваровУслугТовары.ЕдиницаИзмеренияМест.ЕдиницаПоКлассификатору.ВозвратнаяТара.Ссылка КАК Тара,
|    РеализацияТоваровУслугТовары.Ссылка.Организация КАК Организация,
|    РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
|    РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Вес КАК Вес,
|    РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент КАК КоэффициентМест
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|    РеализацияТоваровУслугТовары.Ссылка В(&СписокНакладных)
|
|УПОРЯДОЧИТЬ ПО
|    РеализацияТоваровУслугТовары.Номенклатура.Наименование
|АВТОУПОРЯДОЧИВАНИЕ";

   ТабЗапрос = Запрос.Выполнить().Выгрузить();    
   
   ТабЧастьТоварыОрганизаций.Загрузить(ТабЗапрос);
   
   Если Не Сверка Тогда
   
   ТабЗапрос.Свернуть("Номенклатура","Количество,Вес,Сумма");
   ТабЧастьТовары.Загрузить(ТабЗапрос);

   Для Каждого ТекСтр Из ТабЧастьТовары Цикл
       ТекСтр.ЕдиницаИзмерения = ТекСтр.Номенклатура.ЕдиницаХраненияОстатков;
       ТекСтр.ЕдиницаИзмеренияМест = ТекСтр.Номенклатура.ЕдиницаИзмеренияМест ;
       ТекСтр.КоэффициентМест =  ТекСтр.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент ;
       ТекСтр.Тара =  ТекСтр.Номенклатура.ЕдиницаИзмеренияМест.ЕдиницаПоКлассификатору.ВозвратнаяТара ;
       Если ЗначениеЗаполнено(ТекСтр.ЕдиницаИзмеренияМест) И ТекСтр.КоэффициентМест>1 Тогда
           Если ЗначениеЗаполнено(ТекСтр.Тара) Тогда
               ТекСтр.КоличествоМест=Окр(ТекСтр.Количество/ТекСтр.КоэффициентМест,0);                
               Иначе
               ТекСтр.КоличествоМест = Цел(ТекСтр.Количество/ТекСтр.КоэффициентМест);
           КонецЕсли;
           КонецЕсли;
           
       КонецЦикла;
   
   Иначе
   ЗаполнитьТоварыПоСверке();
   КонецЕсли;

   //ТабТара = Товары.Выгрузить();
   //
   //ТабТара.Свернуть("Тара","КоличествоМест");
   
   ЗаполнитьТаблицуВозвратнойТары(ЭтотОбъект);    
ОбновитьПодвал();
6 Ненавижу 1С
 
гуру
24.09.12
11:25
продам СП (2)+(4) итого 15000
7 Ненавижу 1С
 
гуру
24.09.12
11:26
(5) если Тара это булево, то условие выполняется всегда
8 jj369
 
24.09.12
11:37
Окр(12.3012,0,РежимОкругления.Окр15как10), а по умолчанию режим округления=Окр15как20
9 СноваЗдорова
 
24.09.12
11:37
СП 1000р.
10 Ненавижу 1С
 
гуру
24.09.12
11:39
(8) это не для этого
11 Ant1773
 
24.09.12
11:39
Окр(<Число>, <Разрядность>, <РежимОкругления>)
Параметры:
<Число> (обязательный)
Тип: Число.
Исходное число.
<Разрядность> (необязательный)
Тип: Число.
Определяет число знаков дробной части, до которых производится округление. Если параметр отрицательный, то число округляется до соответствующего разряда в целой части, начиная с младших разрядов.
Параметр обязательный, если указан параметр <РежимОкругления>.
Значение по умолчанию: 0

<РежимОкругления> (необязательный)
Тип: РежимОкругления.
Определяет режим округления. Помимо системного перечисления допускается использование числового параметра: 0 - если при округлении 1.5 = 1; 1 - если при округлении 1.5 = 2.
Значение по умолчанию: Окр15как20
Возвращаемое значение:

Тип: Число.
Число, полученное в результате округления.
Описание:

Округляет исходное число до нужной разрядности в соответствии с заданным режимом округления.

Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

РежимОкругления (RoundMode)
Значения

Окр15как10 (Round15as10)
Окр15как20 (Round15as20)

Описание:

Определяет режим округления.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером.
12 Ant1773
 
24.09.12
11:50
(5)

         Если ЗначениеЗаполнено(ТекСтр.Тара) Тогда
               ТекСтр.КоличествоМест=Окр(ТекСтр.Количество/ТекСтр.КоэффициентМест,0);                
               Иначе
               ТекСтр.КоличествоМест = Цел(ТекСтр.Количество/ТекСтр.КоэффициентМест);
           КонецЕсли;

Соответственно когда ЗначениеЗаполнено(ТекСтр.Тара) - округляется по правилам математики, когда нет - используется только целая часть от числа.
13 upseven
 
24.09.12
11:51
(7)
если все правильно понял то Тара не Булево
14 Ненавижу 1С
 
гуру
24.09.12
11:53
(13) тогда см (12)
15 upseven
 
24.09.12
11:53
всем кто уныло петросянит про СП большое спасибо
если бы он мне хоть как то помог этой темы бы здесь не было
16 hhhh
 
24.09.12
11:58
(15) а в чем тема? Ведь и ежу понятно, что функция Окр округляет, функция Цел берет целую часть.
17 upseven
 
24.09.12
11:59
(13)(12) то что выполняется при этом условии я понял, не понимаю почему оно выполняется, но не всегда.
18 hhhh
 
24.09.12
12:01
(17) есть великое правило. Называется: правило округления. Откройте учебник за пятый класс средней школы и повторите его. Что-то вы всё подзабыли.
19 Reset
 
24.09.12
12:06
(17) Выполненпие какого условия тебе непонятно?
20 Ant1773
 
24.09.12
12:07
(17) Консоль запросов, смотри на результат, думай... Почему-то значение иногда не заполнено.
21 Reset
 
24.09.12
12:07
точнее вот это разверните " не понимаю почему оно выполняется, но не всегда." Оно - что?
22 Reset
 
24.09.12
12:10
Условия они на то и условия, что иногда они не выполняются. Иначе зачем бы они нужны.
23 upseven
 
24.09.12
12:11
(19) одни позиции в накладной он округляет правильно то есть из 1,77777 получает 1, а в некоторых из 1,66666 получает 2
вот это мне не понятно.
24 Reset
 
24.09.12
12:13
(23) ---> (3)
25 фросия
 
24.09.12
12:14
(23) в ЕСЛИ что написано? когда условие в Если соблюдается- то программа идет по первой веточке и Округляет, сли не соблюдается- по второи и берет Целую часть
26 Reset
 
24.09.12
12:14
Если (If)
Синтаксис:
   Если <Логическое выражение> Тогда
   // Операторы
   [ИначеЕсли <Логическое выражение> Тогда]
   // Операторы
   [Иначе]
   // Операторы
   КонецЕсли;

Англоязычный синтаксис:
   If <Логическое выражение> Then
   // Операторы
   [ElsIf <Логическое выражение> Then]
   // Операторы
   [Else ]
   // Операторы
   EndIf;

Параметры:
   <Логическое выражение>
   Логическое выражение.

   Тогда
   Операторы, следующие за Тогда выполняются, если результатом логического выражения является значение Истина.

   // Операторы
   Исполняемый оператор или последовательность таких операторов.

   ИначеЕсли
   Логическое выражение, следующее за ключевым словом ИначеЕсли, вычисляется только тогда, когда условия в Если и всех предшествующих ИначеЕсли оказались равны Ложь.
Операторы, следующие за конструкцией ИначеЕсли — Тогда, выполняются, если результат логического выражения в данном ИначеЕсли равен Истина.

   Иначе
   Операторы, следующие за ключевым словом Иначе, выполняются, если результаты логических выражений в конструкции Если и всех предшествующих конструкцях ИначеЕсли оказались равны Ложь.

   КонецЕсли
   Ключевое слово, которое завершает структуру оператора условного выполнения.

Описание:
Оператор Если управляет выполнением программы, основываясь на результате одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями ИначеЕсли — Тогда.
27 Ant1773
 
24.09.12
12:18
(23)

> (19) одни позиции в накладной он округляет правильно то есть из 1,77777 получает 1, а в некоторых из 1,66666 получает 2 вот это мне не понятно.

Из 1.77777 Окр получить 1 - НЕВОЗМОЖНО. Только Цел. Соответственно - это те строки, где ЗначениеЗаполнено(ТекСтр.Тара)<> Истина


Бери консоль запросов.
28 Нуф-Нуф
 
24.09.12
12:19
продам СП Special Edition (в подарочной упаковке)
29 Ненавижу 1С
 
гуру
24.09.12
12:33
(28) флейта прилагается?