Имя: Пароль:
1C
1С v8
Преобразование к типу число не может быть выполнено
,
0 Смотрящий от 1С
 
07.03.13
18:22
Непонятный глюк. При выполнении кода ИДПлатежа = Число(Выборка.ИДплатежа);
через внешнюю обработку все отрабатывает нормально. При запуске через фоновое задание выпадает подобная ошибка. Смотрел в отладчике. Ничего необычного нет. Значение типа "1 441 003" тип значения строка хочу преобразовать в число. Кто нибудь знает особенности приведения к типу число на сервере?
1 Kreont
 
07.03.13
18:23
ну а пробелы всередине не смущают?
2 1C-band
 
07.03.13
18:23
(0) СтрЗаменить(Выборка.ИДплатежа, " ", "") или не?
3 Смотрящий от 1С
 
07.03.13
18:27
(1)не очень. В отладчике чудно преобразует в число.
(2) точно, хотел попробовать, отложил. Сейчас проверю
4 Kreont
 
07.03.13
18:30
Тестируешь на той же базе?
Может влияют региональные настройки символа разделения разрядов для сервера, ИБ и клиента. Хз какие тут могут быть варианты, потому лучше всегда пропускать полученную строку из чисел через фильтр типа : СтрЗаменить(СтрокаЦифр,Символы.НПП,"")
5 exwill
 
07.03.13
18:30
Там не пробелы.
6 Смотрящий от 1С
 
07.03.13
18:33
(5) а что может быть?
7 Смотрящий от 1С
 
07.03.13
18:36
Вставил запись в журнал регистрации. Сначала вывожу для себя текущее значение "Отладка:  1 441 003 строковая длина 9 тип значения Строка". Следующее сообщение о вылете "{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(575)}: Преобразование значения к типу Число не может быть выполнено"
8 Живой Ископаемый
 
07.03.13
18:40
Известно что, непробелы
9 Живой Ископаемый
 
07.03.13
18:40
Победитовый клюв детектед
10 Смотрящий от 1С
 
07.03.13
19:17
(9) добрее надо быть ))
победил с помощью этого
 Функция УбратьЛишниеСимволы(Строка1) Экспорт
   НовСтрока = "";
   ПравильныеСимволы = "1234567890";
   Для Сч = 1 по СтрДлина(Строка1) Цикл
       ТекСимв = Сред(Строка1, Сч, 1);
       Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда
           НовСтрока = НовСтрока + ТекСимв;
       КонецЕсли;
   КонецЦикла;
   
   Возврат НовСтрока;
   
КонецФункции
11 ДенисЧ
 
07.03.13
19:41
(10) ррррррассссттррррелять.
12 Утконос
 
07.03.13
19:44
(10) 29.03.2004 Стаж: 9 г. // Списан по проф непригодности
13 Mashinist
 
07.03.13
20:04
(12) +100500
14 Skylark
 
07.03.13
20:09
Судя по заголовку темы, автор отсюда уже слинял.
Не будем тогда тайну раскрывать. Пусть пребывает в своем блаженном неведении относительно могущества кое-какой функции на букву Ф...
15 Живой Ископаемый
 
07.03.13
20:22
(10) копрокод детектед.
Для тех кто так пишетесть специальное место в аду.
16 Classic
 
07.03.13
20:32
Злые вы.
Автор, гугли про неразрывный пробел
17 Kvestin
 
07.03.13
21:09
(16) Согласен.
ИДПлатежа = Число(СтрЗаменить(Выборка.ИДплатежа, Символы.НПП, ""));
18 Skylark
 
08.03.13
02:26
(17) бугага
прямо кунсткамера
19 Chai Nic
 
08.03.13
08:36
(12) (13) (18)
Ну вот нафига переходить на личности? Есть ЗАДАЧА, так подскажите РЕШЕНИЕ... Если вместо решения начинаете обсуждать личность спросившего - возникает разумный вывод - решения у вас нет, а есть только понты)
20 Chai Nic
 
08.03.13
08:42
(15) Это обычный "школьный" способ формирования строки, состоящей только из цифр, имеющихся в исходной строке, в изначальном порядке. Да, возможно он не оптимален по быстродействию, но это не имеет значения в отрыве от остального алгоритма.. может, там идет выборка по документам, и потери не неэффективную работу со строками многократно подавятся другими накладными расходами. Говорить о неэффективности можно только после общего анализа производительности и поиска узких мест.
21 Эмбеддер
 
08.03.13
08:56
(10) число может быть и дробным. и со знаком минус
22 Эмбеддер
 
08.03.13
08:57
21+ хотя для ИДПлатежа неактуально. и я бы не назвал это быдлокодом
23 Chai Nic
 
08.03.13
09:11
Мне больше интересно, почему при этом "через внешнюю обработку все отрабатывает нормально" и "В отладчике чудно преобразует в число". Костыль из (10) конечно проблему решает, но хотелось бы выяснить причину различного поведения.
24 БибиГон
 
08.03.13
09:58
(23) Если число меньше 1000 то проблем не будет
25 Живой Ископаемый
 
08.03.13
10:02
(23) случайность, так уж вышло что в одном случае не превышает порогового значения. А во втором превышает
26 Живой Ископаемый
 
08.03.13
10:03
И вообще, ответ уже даден
27 zak555
 
08.03.13
10:05
7ка это умеет
28 Chai Nic
 
08.03.13
10:28
(27) Восьмерка позволяет эффективно решать проблемы, которые в семерке просто бы не возникли)
29 Живой Ископаемый
 
08.03.13
13:16
(28) уже нашел правильный ответ?
30 Chai Nic
 
08.03.13
14:39
(29) А я и не ищу.. проблема у автора, но мне интересно, как её решить, если кто-то сообщит - буду рад.
31 Aleksey
 
08.03.13
14:49
(11),(12),(13),(15), ...

Это вы еще не видили как в типовых от 1С это реализовано
32 Aleksey
 
08.03.13
14:52
// Удаляет все пользовательские префиксы из номера объекта (все нецифровые символы)
// Переменная НомерОбъекта должна соответствовать шаблону: ООГГ-ХХХ...ХХ или ГГ-ХХХ...ХХ, где
// ОО - префикс организации;
// ГГ - префикс информационной базы;
// "-" - разделитель;
// ХХХ...ХХ - номер/код объекта.
//
// Параметры:
//  НомерОбъекта - Строка - номер или код объекта из которого требуется лидирующие нули
//
Функция УдалитьПользовательскиеПрефиксыИзНомераОбъекта(Знач НомерОбъекта) Экспорт
   
   СтрокаЦифровыхСимволов = "0123456789";
   
   Если НомерСодержитСтандартныйПрефикс(НомерОбъекта) Тогда
       
       Если НомерСодержитПятизначныйПрефикс(НомерОбъекта) Тогда
           Префикс     = Лев(НомерОбъекта, 5);
           НомерПолный = Сред(НомерОбъекта, 6);
       Иначе
           Префикс     = Лев(НомерОбъекта, 3);
           НомерПолный = Сред(НомерОбъекта, 4);
       КонецЕсли;
       
   Иначе
       
       Префикс     = "";
       НомерПолный = НомерОбъекта;
       
   КонецЕсли;
   
   Номер = "";
   
   Для Индекс = 1 По СтрДлина(НомерПолный) Цикл
       
       Символ = Сред(НомерПолный, Индекс, 1);
       
       Если Найти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда
           
           Номер = Номер + Символ;
           
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат Префикс + Номер;
КонецФункции


И чем это сильно отличается от так вами называемого копро кода в (10)?
33 Aleksey
 
08.03.13
14:55
СтрокаЦифровыхСимволов = "0123456789";
Номер = "";
Для Индекс = 1 По СтрДлина(НомерПолный) Цикл
 Символ = Сред(НомерПолный, Индекс, 1);
 Если Найти(СтрокаЦифровыхСимволов, Символ) > 0 Тогда
   Номер = Номер + Символ;
 КонецЕсли;
КонецЦикла;

Найдите 10 отличий

ПравильныеСимволы = "1234567890";
Для Сч = 1 по СтрДлина(Строка1) Цикл
 ТекСимв = Сред(Строка1, Сч, 1);
 Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда
   НовСтрока = НовСтрока + ТекСимв;
 КонецЕсли;
КонецЦикла;
   


Так что будем расстреливать всех писателей типовых в 1С или через одного?


Или всё таки добрее надо быть и сдержание
34 Aleksey
 
08.03.13
14:58
Кто неверет в типовой БП 3.0 эта процедура находится в общих модулях в ПрефиксацияОбъектовКлиентСервер. И судя по названию скорее всего точно такая же и в БСП должна находиться и в других типовых на основе БСП
35 Chai Nic
 
08.03.13
15:02
"Так что будем расстреливать всех писателей типовых в 1С или через одного? "
Вывести бы их всех в чистое поле, поставить лицом к стенке и пустить пулю в лоб, чтобы на всю жизнь запомнили! ))
36 GANR
 
08.03.13
15:29
(3) Только не СтрЗаменить(Выборка.ИДплатежа, " ", ""), а СтрЗаменить(Выборка.ИДплатежа, Символы.НПП, ""). На самом деле это не совсем пробел, а другой символ Юникода под названием "неразрывный пробел".
37 Эмбеддер
 
08.03.13
16:02
(36) почему юникод? не обязательно. код символа 0xA0.
и совсем для полноты картины добавлю, придумала его фирма Adobe
38 Snovy
 
08.03.13
19:28
Прикольно. После (31)-(33) все крутые спецы из ветки сбежали...
39 Chai Nic
 
08.03.13
20:43
(38) "Крутые спецы" вовсе не заинтересованы плодить себе конкурентов, поэтому от них толку мало.. они больше саморекламой занимаются, чем помощью :)
40 Kvestin
 
08.03.13
21:08
(39) Не совсем понимаю что это за реклама. Желания купить услуги таких спецов у меня не возникает точно.
Скорее таким образом они хотят повысить "чувство собственной значимости". Все это делают по разному: кто-то путается унизить других (или подчеркнуть их незнание), кто-то помогает. А кто-то пишет подобные посты как я - если быть до конца честным. Цель одна - средство каждый выбирает сам.
41 Живой Ископаемый
 
08.03.13
21:23
Будем расстреливать только тех, кто ради того, чтобы избавиться от неразрывного пробела, а еще лучше проанализировать, откуда он взялся в строке, будет использовать этот код для того чтобы сконвертировать строку в число.

А писателей типовых, которые дают этот инструмент в руки неразумных 1сников от безысходности мы растреливать не станем, нет.
42 Живой Ископаемый
 
08.03.13
21:32
Но, те кто не видит за деревьями леса, может продолжать причитать о необходимости быть добрее
43 Chai Nic
 
08.03.13
21:42
(41) Этот код позволяет во-первых избавиться _не только_ от неразрывного пробела, а и от всех нецифровых символов. Так что он универсальнее замены неразрывного пробела на пустую строку. Во-вторых, "проанализировать, откуда он взялся" не всегда имеет смысл - иногда исходные данные приходится принимать такими, какие они есть. Мы же не знаем предыстории задачи.
44 GANR
 
08.03.13
22:18
(39) Кто Вам это сказал????
П о - н а с т о я щ е м у  крутые спецы заинтересованы в том, чтобы заниматься более интересными в профессиональном плане задачами, чем "сейчас" -> им нужно освободиться от "мелочевки", которой они вынуждены заниматься -> для этого им нужен квалифицированный напарник. Их не очень интересует максимизация их з/п, так как 100 - 120 тыщ., на которые они  л е г к о  могут претендовать, им за глаза хватает. А те про кого Вы говорите - просто хапуги.

P.S. Чтобы мозг человека хорошо работал, необходимо, чтобы у него была чистая  с о в е с т ь  (так, по словам людей советской закваски, учили в НИЯУ МИФИ).
45 hhhh
 
08.03.13
23:29
(43) ну возьми такие строки: -2, 2.2, -1.5 - убедишься, что твой код выдает галиматью.
46 Aleksey
 
09.03.13
01:31
(45) это у вас так бухи номера проставляют?