Имя: Пароль:
1C
1С v8
Пустая строка в дату
0 Dimonkur
 
24.01.14
06:13
Пустая строка не преобразуется в число 0 в 1с 8.2? Пример
1 Wobland
 
24.01.14
06:14
откуда ты эти вопросы берёшь? сам пример генерируй
2 BICO
 
24.01.14
07:13
ЗначениеЗаполнено(что-то)
3 1Сергей
 
24.01.14
07:41
>>Пустая строка не преобразуется в число 0 в 1с 8.2? Пример

казалось бы - причем тут дата?
4 Dimonkur
 
24.01.14
07:44
Я обрабатываю REP файл. В нем строки. Пишу оператор
_товар = число(лев(стр,поз-1)). Поз это позиция ;
Если стоит число на этом месте то все нормально, а вот если Перед ; один пробел то ошибка - невозможно преобразовать к типу число.
5 kosts
 
24.01.14
07:47
(4) Открой для себя СОКРЛП()
6 Wobland
 
24.01.14
07:47
и СтрДлину()
7 Dimonkur
 
24.01.14
07:51
KOSTS c СОКРП() не получилось, попробую с СОКРЛП хотя особой разницы не вижу
8 kosts
 
24.01.14
07:54
(7) Может внутри числа пробелы есть? Выложи кусочек файла глянуть
9 Irbis
 
24.01.14
07:56
Просто ещё одна жертва неразрывного пробела
10 dsdred
 
24.01.14
07:57
(7) сокрлп превратит в текст, не забудь перевести в нужный формат(На сколько я понял у тебя число).
Есть еще варианты удалять пробелы если они присутствуют.

Вообщем то вариантов масса, тебе просто нужно алгаритм сделать обработки текста и перевода его в число.
11 Рэйв
 
24.01.14
08:00
Нужное=Число(СтрЗаменить(СокрЛП(Значение),Символы.ПС,""));
12 dsdred
 
24.01.14
08:01
(9) а ну если так то это не трудно)) разберется. минут 5 потратит на гугл и все.
13 Dimonkur
 
24.01.14
08:07
280608;28.12.2013;11:15:15;150;1;7690;0;;0;0.00;0.000;0.00;
Это одна из строк. Ну думаю разберусь тут достаточно дали подсказок
14 kosts
 
24.01.14
08:08
(13) А где пробел?
15 1Сергей
 
24.01.14
08:09
(13) Функция Split(Строка, Разделитель) Экспорт
    Рез = Новый Массив;
    Стр = СтрЗаменить(Строка, Разделитель, Символы.ПС);
    Для Сч = 1 По СтрЧислоСтрок(Стр) Цикл
        Рез.Добавить(СтрПолучитьСтроку(Стр,Сч));
    КонецЦикла;
    Возврат Рез;
КонецФункции
16 Dimonkur
 
24.01.14
08:31
1С Сергей. Спасибо конечно. Ну зачем мне массив из подстрок строки?
17 Мимохожий Однако
 
24.01.14
08:32
Дарёному коню в зубы не смотрят. Не нужен, ну и ладно. Кому другому пригодится.
18 Dimonkur
 
24.01.14
08:33
Для примера есть строка 280614;28.12.2013;11:22:24;11;1;7691;2;150;1;31.00;1.000;31.00; Мне нужно получить число 150. Если стоит число 150 то все прекрасно Но если строка 280608;28.12.2013;11:15:15;150;1;7690;0;;0;0.00;0.000;0.00; То шобка потому что на месте где я предполагаю число ;;
19 Бледно Золотистый
 
24.01.14
08:35
(18) Ну обрабатывай ситуацию, Число(""), Число(" ") и проч. работать не будут. только строковые представления числа и булево.
20 Мимохожий Однако
 
24.01.14
08:35
(18)Покажи код, в котором тебе удаётся это получить.
21 kosts
 
24.01.14
08:35
(18) Если не получается написать свой парсер, зачем отказываешься от готового в (15)?
22 Dimonkur
 
24.01.14
08:36
Спасибо БледноЗолотистый за инфу
23 kosts
 
24.01.14
08:37
(18)
Split("280608;28.12.2013;11:15:15;150;1;7690;0;;0;0.00;0.000;0.00;", ";")[8]
24 Dimonkur
 
24.01.14
08:38
А вот пример 1с Сергей. В результате его примера у меня будет один из элементов массива вообще пустая строка даже без пробелов, ее можно будет преобразовать в число?
25 Dimonkur
 
24.01.14
08:40
Для сч = 4 По Текст.КоличествоСтрок() Цикл
        Стр = Текст.ПолучитьСтроку(сч);
        Поз = Найти(Стр,";");
        стр = сред(стр, поз+1);
        
        //Дата
        Поз = Найти(Стр,";");
        _Дата = Дата((лев(стр,поз-1))+ " 00:00:00");
        стр = сред(стр,поз+1);
        
        //время
        поз = найти(стр,";");
        _время = (лев(стр,поз-1));
        стр = сред(стр,поз+1);
        //тип транзакции
        поз = найти(стр,";");
        _ТипТр = число(лев(стр,поз-1));
        стр = сред(стр,поз+1);
        //код системы
        поз = найти(стр,";");
        стр = сред(стр,поз+1);
        //номер клиента
        поз = найти(стр,";");
        _номерКл = лев(стр,поз-1);
        стр = сред(стр,поз+1);
        //что за поле?
        поз = найти(стр,";");
        стр = сред(стр,поз+1);
        //стр = СОКРЛП(стр);
        //код товара
        поз = найти(стр,";");
        
        //_товар = (лев(стр,поз-1));
        _товар = число(лев(стр,поз-1));
        стр = сред(стр,поз+1);
        //секция
        поз = найти(стр,";");
        стр = сред(стр,поз+1);
        //цена
        поз = найти(стр,";");
        _цена = (лев(стр, поз-1));
       //_цена = число(лев(стр, поз-1));
        стр = сред(стр, поз+1);
        //количество
        поз = найти(стр,";");
        _количество = (лев(стр,поз-1));
        //_количество = число(лев(стр,поз-1));
        стр = сред(стр,поз+1);
        //сумма
        поз = найти(стр, поз+1);
        _сумма = (лев(стр,поз-1));
        //_сумма = число(лев(стр,поз-1));
        
        //ТЗ.Дата = _дата;
        //тз.Товар = _товар;
        //ТЗ.Цена = _цена;
        //ТЗ.Количество = _количество;
        //тз.сумма = _сумма;
        
        
        
    КонецЦикла;
26 Мимохожий Однако
 
24.01.14
08:40
(24)Если НЕ ЗначениеЗаполнено(ЭлементМассива) Тогда
ЭлементМассива = 0
КонецЕсли
27 Dimonkur
 
24.01.14
08:43
А может действительно лучше сделать как у Сергея Получить массив из подстрок. А с массивом лучше работать?
28 dsdred
 
24.01.14
08:49
(27) А может просто убрать массив из предложеной функции?
Вам все инструменты дали а вы не пользуетесь.

Функция Split(Строка, Разделитель) Экспорт
    //Рез = Новый Массив;
    Стр = СтрЗаменить(Строка, Разделитель, Символы.ПС);
   // Для Сч = 1 По СтрЧислоСтрок(Стр) Цикл
       // Рез.Добавить(СтрПолучитьСтроку(Стр,Сч));
   // КонецЦикла;
    Возврат Стр ;
КонецФункции
29 dsdred
 
24.01.14
08:51
(27) У вас впринципе задача легкая и лучше Вам с ней разобраться самому иначе какой смысл дальше быть программистом?

У вас задача котороая научит вас работать с данными и переводить их в нужный вам формат. Вам это еще не раз понадобится, но нужно самому это прочуствовать.
30 kosts
 
24.01.14
08:52
(25)

Функция ВЧисло(Стр)

    Стр1 = //Заменить неразрывный пробел
    Стр2 = //Заменить запятую пробел
    Попытка
        Возврат Число(СокрЛП(Стр2));
    ИСключение
        Возврат 0;
    КонецПопытки

КонецФункции
31 dsdred
 
24.01.14
08:55
(28) фигню написал((
32 kosts
 
24.01.14
09:08

Схема = Новый Структура(Дата, Сумма);
Схема.Дата = Новый Структура(Тип, Позиция);
Схема.Сумма = Новый Структура(Тип, Позиция);

Схема.Дата.Тип = "Строка";
Схема.Дата.Позиция = 2;

Схема.Сумма.Тип = "Число";
Схема.Сумма.Позиция = 8;
...

СтрокаМас = Split("280608;28.12.2013;11:15:15;150;1;7690;0;;0;0.00;0.000;0.00;", ";");

Дата = ПолучитьЗначениеРеквизита(СтрокаМас, Схема.Дата);
Сумма = ПолучитьЗначениеРеквизита(СтрокаМас, Схема.Сумма);

Функция ПолучитьЗначениеРеквизита(СтрокаМас, СхемаРеквизит)
    Если СхемаРеквизит.Тип = "Строка" Тогда
        Возврат СтрокаМас[СхемаРеквизит.Позиция];
    ИначеЕсли СхемаРеквизит.Тип = "Число" Тогда
        Возврат ВЧисло(СтрокаМас[СхемаРеквизит.Позиция]);
    КонецЕсли;
КонецФункции
33 1Сергей
 
24.01.14
09:14
(32) браво! мыслишь как программист
34 Alex1979rak
 
24.01.14
09:27
(32) это что такое?
35 kosts
 
24.01.14
09:32
(34) Пример более-менее универсальной загрузки
36 Dimonkur
 
24.01.14
09:34
(32) Тебе не нравится вопрос "с массивом лучше работать?", заменю его на "с массивом гибче работать?". Т
37 Infsams654
 
24.01.14
09:36
уже 2-й раз: Что это было ?
38 kosts
 
24.01.14
09:37
(36) Мне не нравится в лоб прописывать 100500 реквизитов. При малейшем изменении в структуре файла разбираться потом пол дня...
39 Dimonkur
 
24.01.14
09:39
(34) А что за функция split?
40 kosts
 
24.01.14
09:41
(39) Перечитай ветку
41 Infsams654
 
24.01.14
09:46
(38) ты в уме ? Как в дальнейшем с этим работать ?
В общем, то для этого есть какие-то настройки, в которых заложены схемы - лучший вариант, это SOAP
42 kosts
 
24.01.14
09:52
(41) Затраты на решение задачи должны быть соразмерны с уровнем задачи.
Если нужно загружать пару файлов. То проще так сделать, за три минуты, в том же модуле без использовании сторонних компонент.
Я же не предлагаю делать обмен между базами таким способом...
43 Infsams654
 
24.01.14
10:04
(42) тогда зачем закладывать универсальность?
Забей все в коде напрямую
44 kosts
 
24.01.14
10:06
(43) Мне с такой универсальностью сделать и отладить быстрее. Чем прямо забивать.
45 Infsams654
 
24.01.14
10:20
(44) см. как сделано http://www.vdgb-soft.ru/jsk/jkh/
Там настройка загрузки реестра платежей для разных форматов (txt, csv, xls, xml). Все настраивается, что, от куда и куда - очень просто.
46 Dimonkur
 
24.01.14
10:32
(46) А где на этом сайте найти обработки?
47 kosts
 
24.01.14
11:20
(45) Я не против.
Но вот мне например понадобилось, ну подкинули такую задачку, что нужно загрузить файл в документ по нажатию одной кнопки. Без всяких визуальных форм.

Можно скопипастить несколько процедур из своего ранешнего решения и через 20 минут все будет работать.

Можно начать искать универсальные обработки. Хорошо, если знаешь, что тебе нужно и где это лежит. Опять же настраивать и сохранять схему каким то образом в конфигурации или данных. Не забываешь про лицензионную чистоту... Не думаю что будет меньше времени...

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

Каждой задаче свой подход...