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