Имя: Пароль:
1C
1C 7.7
v7: Приведение данных к целому числу
0 Flint2000
 
18.11.21
12:25
Всем привет. Правлю конект и обработку к удаленной БД интернет магазина для получения заказов и формирования расходных накладных. А так как в БД цены и общая стоимость храниться в float (1000.0000), то затрял на одном моменте. В цикле формируется список товара из заказа:
    Пока НаборЗаписей.Eof()=0 Цикл  
            Стр=0;
            Если ТЗ.НайтиЗначение(НаборЗаписей.Fields(0).Value,Стр,"id")=1 Тогда
                ТЗ.ПолучитьСтрокуПоНомеру(Стр);
                ТекТЗ=ТЗ.ТЗ;        
                ТекТЗ.НоваяСтрока();
                ТекТЗ.Код=НаборЗаписей.Fields(3).Value;
                ТекТЗ.Название=НаборЗаписей.Fields(4).Value;
                ТекТЗ.Кво=НаборЗаписей.Fields(1).Value;
                ТекТЗ.Сумма=НаборЗаписей.Fields(2).Value;
                //ТекТЗ.Бонус=НаборЗаписей.Fields(5).Value;
                
                ТЗ.ТЗ=ТекТЗ;
            Иначе
                rjd=0;    
            КонецЕсли;                
            НаборЗаписей.MoveNext();
        КонецЦикла;

И в ТекТЗ.Сумма=НаборЗаписей.Fields(2).Value;  попадает значение float. Я знаю, что для приведения к int нужно использовать Число("ваше_значение"), но в данном случае у меня не работает.
Пробовал так ТекТЗ.Сумма=Число("НаборЗаписей.Fields(2).Value");
Цена товара пустая. Подскажите пожалуйста как решить данную проблему
1 acht
 
18.11.21
12:26
Опять нашествие твинков...
2 ДенисЧ
 
18.11.21
12:30
"Число("НаборЗаписей.Fields(2).Value");"
У меня где-то метла завалялась... Поискать?
3 Базис
 
naïve
18.11.21
12:31
Округляй количество до целого, цену и сумму до копеек, добавь проверку на СуммаИздалека = СуммаПосчитанаяЛокально.
Функция Окр() задокументирована.
4 Flint2000
 
18.11.21
13:02
(1) Не угадали ))
(2) Не совсем вас понял
(3) С количеством проблем нету, да и цены в магазине округлены до целого, т.е. копеек нету вообще, просто в БД цена и сумма имеет тип данных decimal, поэтому ругается даже на сумму 1000.00
5 acht
 
18.11.21
13:05
(0) > в БД цены и общая стоимость храниться в float
(4) > просто в БД цена и сумма имеет тип данных decimal

Ты б опредилился?
6 Ryzeman
 
18.11.21
13:07
(0) (2) у тебя аргумент Число() в коде в кавычках?..
7 Flint2000
 
18.11.21
13:13
(5) Да, я ошибся, т.к. привык, что в коде число с плавающей запятой это флоат, в БД тип данных decimal. Но это сути это не меняет
8 Flint2000
 
18.11.21
13:14
(6) Туда приходит  число с плавающей запятой
9 Flint2000
 
18.11.21
13:24
Из за этого получаю ошибку
ТекТЗ.Сумма=НаборЗаписей.Fields(2).Value;
{C:\USERS\____\DESKTOP\TEST.ERT(362)}: Тип переменой не поддерживается
10 trad
 
18.11.21
13:27
77 не умеет получать decimal через COM
11 Базис
 
naïve
18.11.21
13:30
А


ТекТЗ.Сумма=НаборЗаписей.Fields(2).Text; вместо .Value?
12 МихаилМ
 
18.11.21
13:36
(0) приведите в запросе к нужному типу
13 Flint2000
 
18.11.21
13:53
(11)  Поле агрегатного объекта не обнаружено (Text)
(12) Пробовал уже и cast и convert, ошибка
14 МихаилМ
 
18.11.21
13:54
(13 Какая судб ? (с тосностью до версии и вендора)
15 trad
 
18.11.21
13:57
(13) к строке надо приводить, на стороне 1с обратно в число
16 trad
 
18.11.21
13:59
Или освоить 1с++ и его объекты работы с БД
17 Flint2000
 
18.11.21
15:22
(14) mysql  Ver 14.14 Distrib 5.5.62, for debian-linux-gnu (x86_64) using readline 6.3
(15) Вы имеете ввиду в цикле цену приводить в строку, а потом опять в число?
18 Базис
 
naïve
18.11.21
15:25
Что получаешь из НаборЗаписей.Fields(2).Value ?
19 Ryzeman
 
18.11.21
15:28
Для начала неплохо было бы понимать что 1с получает в НаборЗаписей.Fields(2).Value вообще. Exception? Число? Строку?
20 Flint2000
 
18.11.21
15:42
(18) (19) Должна получать число ТекТЗ.НоваяКолонка("Сумма","Число");
Но так как в mysql тип поля decimal(15,4), то ничего не получаю, т.к. пробовал в таблице значение изменить ТекТЗ.НоваяКолонка("Сумма","Строка");
Но туда ничего не приходит.
Подозреваю что на уровне выборки не получаю значение
СтрокаЗапроса = "SELECT
        |order_id,
        |quantity as kvo,
        |price as summa,        
        |sku as articul,  
        |name as name        
        |FROM silael_order_product         
        |WHERE order_id IN ("+Строкаid+")";
21 ДенисЧ
 
18.11.21
15:43
(20) А что подозревать? Взял отладчиком и посмотрел значения полей...
22 Salimbek
 
18.11.21
15:45
в (15) имеют ввиду, что price as summa поменяй на CAST(price AS CHAR) as summa
23 Salimbek
 
18.11.21
15:49
+(22) Я бы еще попробовал CAST(price*10000 AS DECIMAL) as summa
24 Flint2000
 
18.11.21
15:57
(22) Супер. Спасибо. Заработало
25 Злопчинский
 
18.11.21
20:23
а нахрена в (0) перед Иначе влобешный оператор
ТЗ.ТЗ=ТекТЗ;
.
что этим хотел сказать автор? о чем этот фильм?
26 Flint2000
 
19.11.21
10:20
(25) В первом сообщении я же написал - "правлю" Т.е. мопед не мой