Имя: Пароль:
1C
1C 7.7
v7: разделение строки на части
, ,
0 JuixyJes
 
14.05.19
12:26
Имеется реквизит, куда заполняются паспортные данные через обработку. Заполнение идет одной строкой, через запятую. Как мне взять каждое значение, написанное через запятую в отдельности?
1 JuixyJes
 
14.05.19
12:28
Данные заполняются так

паспорт, 0000, 000000, 00.00.0000, умвд, 000-000
2 Builder
 
14.05.19
12:31
Используй функции Найти() и Лев()
3 Mikeware
 
14.05.19
12:31
изСтрокиСРазделителями
4 JuixyJes
 
14.05.19
12:32
(2) а поподробней можно?
5 user-ok
 
14.05.19
12:32
ПозицияЗапятой = Найти(ИсходнаяСтрока, ",");
НомерПаспорта = Лев(ИсходнаяСтрока, ПозицияЗапятой  - 1);
6 Builder
 
14.05.19
12:32
(4) Ну блин, вот ленивые же... В любой типовой есть функция такая

//******************************************************************************
//    Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
//
//    Параметры:
//        Стр -             строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -     строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        список значений, элементы которого - подстроки
//
//    Описание:
//        Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        глРазложить(",ку,,,му", ",") возвратит список значений из пяти элементов,
//        три из которых - пустые строки, а
//        глРазложить(" ку   му", " ") возвратит список значений из двух элементов
//        
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
    СЗ = СоздатьОбъект("СписокЗначений");
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                СЗ.ДобавитьЗначение(СокрЛП(Стр));
                Возврат СЗ;
            КонецЕсли;
            СЗ.ДобавитьЗначение(СокрЛП(Лев(Стр,Поз-1)));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                СЗ.ДобавитьЗначение(СокрЛП(Стр));
                Возврат СЗ;
            КонецЕсли;
            СЗ.ДобавитьЗначение(СокрЛП(Лев(Стр,Поз-1)));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;

КонецФункции // глРазложить
7 user-ok
 
14.05.19
12:35
не в любой. да и у ТС нигде не указано что типокая
очень похоже на задачу для зачета. только вот 7.7....
8 Mikeware
 
14.05.19
12:36
(7) "задачу для зачета" да такое пишется на любом языке в любом состоянии...
9 Builder
 
14.05.19
12:37
+(6) Дальше видимо будет вопрос как вытащить эти данные из СпискаЗначений :)
10 JuixyJes
 
14.05.19
12:40
(9) именно:D
11 user-ok
 
14.05.19
12:40
(8) пишется. но не студентом, который проквасил весь семестр :D
просто последние пару недель появилась куча детских вопросов.
вот и предполагаю, може не зачет а сдача лаб за семестр
жду вопроса о сортировке пузырьком и пазл сложится ))))
12 JuixyJes
 
14.05.19
12:50
Так что, никто не скажет как обратиться к списку значений из(6)
13 Ёпрст
 
14.05.19
12:58
(12) открфть пофигуратор, в любом месте написать СписокЗначений, выделить, нажать Ctrl+F1 - читать до просветления
14 Ёпрст
 
14.05.19
13:00
Ну или библию почитай
http://old.mista.ru/tutor_1c/sz.htm
15 Garykom
 
гуру
14.05.19
13:21
(1) Не забудьте добавить проверку на правильность исходных данных.
Что если документ "паспорт" то серия=ЧЧЧЧ, номер равен ЧЧЧЧЧЧ и т.д.
В датах любят когда руками вбивали вместо "." понаставить "," и прочие ошибки.

Короче в реальности надо на каждом шагу делать защиту от дурака, если данные могут быть кривыми даже теоретически и предусматривать что делать в каждом случае.
Например можно просто сообщить об этом оператору и записать в логи и продолжить а можно отменить всю загрузку.
16 JuixyJes
 
14.05.19
13:55
ПозицияЗапятой = Найти(ИсходнаяСтрока, ",");
вид = Лев(ИсходнаяСтрока, ПозицияЗапятой  - 1);

С этим понятно все, а остальные элементы как вытянуть?
17 JuixyJes
 
14.05.19
14:06
(15) Я знаю что вы знаете)) Подскажите?
18 Builder
 
14.05.19
14:07
(17) Почитать (6)
19 hhhh
 
14.05.19
14:08
(16) СтрокаПослеЗапятой = Сред(ИсходнаяСтрока, ПозицияЗапятой + 1);

и дальше как в (16)

ПозицияЗапятой = Найти(СтрокаПослеЗапятой, ",");
номер = Лев(СтрокаПослеЗапятой, ПозицияЗапятой  - 1);
20 Garykom
 
гуру
14.05.19
14:09
21 Масянька
 
14.05.19
14:10
(20) Блин... Обогнал...
Интересно, а за "подвернувшийся заказ" мистянам отломится?
22 HawkEye
 
14.05.19
14:31
(0) Женечка, завязывай ты с этой 1С....))
23 Mikeware
 
14.05.19
14:34
(22) во-во. посоветуй ей широко известный способ зарабатывать вдвое больше..
24 sqr4
 
14.05.19
14:35
(23) а что сам не посоветуешь?
25 Garykom
 
гуру
14.05.19
15:01
(24) Опытные старички уже