|
Получить целое число из дробного | ☑ | ||
---|---|---|---|---|
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) флейта прилагается?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |