Имя: Пароль:
1C
 
Как преобразовать строку?
🠗 (Волшебник 20.02.2017 10:32)
,
0 1сПупс
 
20.02.17
09:25
добрый день!
есть тз, чтобы размеры (р.) в артикуле справочника Номенклатура были вначале. Например: "Картонная коробока р.-17,5"

Наваял код:

объект1 = выборка.Ссылка.ПолучитьОбъект();
            ДлинаСтроки = СтрДлина(выборка.ссылка.Наименование);
            НомерВхождения = Найти(выборка.ссылка.Наименование, "р.-");
            СтрокаВставки = Прав(выборка.ссылка.Наименование, ДлинаСтроки-НомерВхождения-СтрДлина("д.-"));
            объект1.Артикул = СтрокаВставки;
            объект1.записать();

а как бы сделали вы? поделитесь опытом пожалуйста.
1 Ёпрст
 
20.02.17
09:29
(0) дык хрень же написана, с Прав
2 Ёпрст
 
20.02.17
09:29
Ну и если че, то так:

объект1.Артикул = Сред(выборка.ссылка.Наименование,Найти(выборка.ссылка.Наименование, "р.-"));
3 Мимохожий Однако
 
20.02.17
09:30
(0) Прикольно.
4 dezss
 
20.02.17
09:36
(2) + СтрДлина("р.-");
5 Неверный Параметр И
 
20.02.17
09:38
Выборка.Ссылка.Ссылка.Ссылка.Ссылка.Наименование же!
6 Diman_Kr
 
20.02.17
09:38
(4) зачем?
7 1Снеговик
 
гуру
20.02.17
09:38
(0) хоть бы пример привел что должно получиться в артикуле
8 dezss
 
20.02.17
09:39
(6) Чтоб без самого "р.-"
9 Diman_Kr
 
20.02.17
09:41
(8) У него с р.- вроде бы должно быть
10 dezss
 
20.02.17
09:43
(9) Да у него чет вообще не совсем понятно что ложно быть.
Может и так

объект1.Артикул = Сред(выборка.ссылка.Наименование,Найти(выборка.ссылка.Наименование, "р.-")) + объект1.Артикул;
11 dezss
 
20.02.17
09:44
Снеговик правильно написал, пусть пример дает.
12 luter-89
 
20.02.17
09:44
Куча неявных запросов
13 1сПупс
 
20.02.17
09:45
(7) в артикуле дб 17,5
14 Serg_1960
 
20.02.17
09:46
Сегодня не пятница, но тема навеяло :)

"Коробка с рисунком "р.с.ф.с.р.", размер - 17,5"
15 dezss
 
20.02.17
09:47
(13) А ниче, что у тебя может быть куча номенклатуры с одинаковым артикулом?
16 luter-89
 
20.02.17
09:48
Зачем размер хранить в артикуле? А доп. характеристики, либо доп. реквизиты?
17 Serg_1960
 
20.02.17
09:50
(14) PS: прежде чем алгоритмы писать, надо наименования нормализовать. Или, хотя бы, алгоритмом проверки пройтись, чтобы выявить  "проблемные" наименования.
18 xXeNoNx
 
20.02.17
09:51
ДлинаСтроки = СтрДлина(выборка.ссылка.Наименование);
НомерВхождения = Найти(выборка.ссылка.Наименование, "р.-");

Садись - Два.

1. Обращение через точку приводит к неявному левому соединению(скорее всего там есть ТЧ)
2. В ЯЗ есть функция "ПОДОБНО"
3. Должна быть уверенность что юзеры не ошиблись в наименовании
4. Рекомендую почитать про функцию "ПРЕДСТАВЛЕНИЕ"
19 1Снеговик
 
гуру
20.02.17
09:52
(17) а еще до этого нужно нормализовать задачу, а может вообще все переделать, потому что размер в артикуле - это не нормально)
20 1сПупс
 
20.02.17
10:02
Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура
                  |ГДЕ
                  |    Номенклатура.Ссылка В ИЕРАРХИИ(&Папка)
                  |    И (НЕ Номенклатура.ЭтоГруппа)
                  |    И (НЕ Номенклатура.ПометкаУдаления)
                  |    И (НЕ Номенклатура.ЭтоГруппа)";
                  
    запрос.УстановитьПараметр("Папка",ПолеВвода1);
    выборка= Запрос.Выполнить().Выбрать();
    Пока выборка.Следующий() Цикл
        ИмяНоменклатуры = выборка.ссылка.Наименование;
        Если Найти(ИмяНоменклатуры, "р.-")>0 Тогда
            объект1 = выборка.Ссылка.ПолучитьОбъект();
            объект1.Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "р.-")+СтрДлина("р.-"));
            объект1.записать();
            Сообщить(объект1.наименование + " записан артикул");

(19) такое тз !

(18) как вы в запросе будете использовать функцию "ПОДОБНО"?
21 luter-89
 
20.02.17
10:05
Выборка.Ссылка используй один раз, зачем делаешь лишние вызовы?
22 dezss
 
20.02.17
10:06
(20) Мой препод по программированию меня бы немножко убил за такое на первом курсе.)))

Индекс = Найти(ИмяНоменклатуры, "р.-");

Чтоб 2 раза не искать, но это уже больше придирки.
23 dezss
 
20.02.17
10:07
Сообщить(ИмяНоменклатуры + " записан артикул");

Семен Семеныч :(
24 1сПупс
 
20.02.17
10:13
(23) откуда вы знаете как меня зовут?
25 dezss
 
20.02.17
10:15
(24) ё-мое...
уже есть поколение, которое вроде как относительно взрослое, но не понимает откуда это словосочетание)))
Ячёужестар?)))
26 1сПупс
 
20.02.17
10:21
сделал так:

    Пока выборка.Следующий() Цикл
        ИмяНоменклатуры = выборка.ссылка.Наименование;
        Если Найти(ИмяНоменклатуры, "д.-")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "д.-")+СтрДлина("д.-"));
        ИначеЕсли Найти(ИмяНоменклатуры, "Д.-")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "Д.-")+СтрДлина("Д.-"));
        ИначеЕсли Найти(ИмяНоменклатуры, "д-")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "д-")+СтрДлина("д-"));
        ИначеЕсли Найти(ИмяНоменклатуры, "Д-")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "Д-")+СтрДлина("Д-"));
        ИначеЕсли Найти(ИмяНоменклатуры, "диам. ")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "диам. ")+СтрДлина("диам. "));
        ИначеЕсли Найти(ИмяНоменклатуры, "диам.")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "диам.")+СтрДлина("диам."));
        ИначеЕсли Найти(ИмяНоменклатуры, "д. ")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "д. ")+СтрДлина("д. "));
        ИначеЕсли Найти(ИмяНоменклатуры, "д.")>0 Тогда
            Артикул = Сред(ИмяНоменклатуры,Найти(ИмяНоменклатуры, "д.")+СтрДлина("д."));
        КонецЕсли;    
        
        Если ЗначениеЗаполнено(Артикул) Тогда
            объект1 = выборка.Ссылка.ПолучитьОбъект();
            объект1.записать();
            Сообщить(объект1.наименование + " записан артикул");
        КонецЕсли;
27 luter-89
 
20.02.17
10:23
И один фиг все равно делает два раза Выборка.Ссылка)))
28 1dvd
 
20.02.17
10:26
(25) Ты суперстар
(0) братуха, работает - не трожь
Не надо зацикливаться. Тут тебе понасоветуют как правильно писать 1с. Не парься. Тут как на войне - умри, но сделай. Сделал? какие претензии?
29 Fish
 
20.02.17
10:27
объект1 = выборка.Ссылка.ПолучитьОбъект();
объект1.записать();

Это имхо генияально! :)
30 dezss
 
20.02.17
10:27
(27) Так сразу получать объект - не комильфо. А вдруг он не нужен будет.
(26) добавь Артикул = ""; в начале цикла.
31 dezss
 
20.02.17
10:28
(26) Или даже Артикул = Неопределено;
32 1dvd
 
20.02.17
10:28
(29) что не так?
33 Fish
 
20.02.17
10:29
(32) А зачем записывать объект, ничего в нём не изменив?
34 dezss
 
20.02.17
10:29
(29) ааа....точна...
(32) присвоить артикул забыл)
35 luter-89
 
20.02.17
10:29
(30) выборка.ссылка.Наименование в цикле тоже не камильфо.
В запросе наименование получить сразу нельзя??
36 dezss
 
20.02.17
10:31
(35) Ну зачем же искать легкие пути.)
37 1сПупс
 
20.02.17
10:33
(34) тест на внимательность пройден.
38 luter-89
 
20.02.17
10:33
(36) С таким подходом через n-е количество лет у тебя будет все тормозить, возьмут другого спеца, который будет все переписывать
39 dezss
 
20.02.17
10:35
(38) А при чем тут я-то?
Это не мой код.
40 luter-89
 
20.02.17
10:35
(39) )) Я перепутал с автором))
41 dezss
 
20.02.17
10:42
(26) Я вообще ярый противник подобных конструкций.
Предпочитаю на форме инициировать список таких значений и уже искать в нем. А то потом добавится какое-нибудь еще одно определение размера и надо будет код править, а так, только добавить реквизит.
42 1сПупс
 
20.02.17
10:52
(41) а как сохранишь список значений при закрытии?
43 dezss
 
20.02.17
11:06
(42) Если это не внешняя обработка, то в свойствах формы ставишь Использовать в "АвтоматическоеСохранениеДанныхВНастройках" и напротив нужных реквизитов ставишь галку "Сохранение".
Потом заполняешь реквизиты для пользователя (вот тут можно при пустых реквизитах заполнить твоими значениями ПриОткрытии, например). И все, данные реквизиты будут сохранены для этого пользователя.
Возможно только до тех пор, пока он заходит со своего компа под этим пользователем, я этого не проверял.
44 dezss
 
20.02.17
11:07
(42) Для внешних я не проверял, работает ли это дело.
45 xXeNoNx
 
20.02.17
12:15
(20)
Как нибудь вот так
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=603409
https://helpf.pro/faq/view/852.html
http://helpme1c.ru/yazyk-zaprosov-1s-8-3-dlya-nachinayushhix-programmistov-funkcii-dlya-raboty-so-strokami

(26) А НРЕГи использовать, нет? + стрзаменить....
ПОДОБНО - например, для того что бы найти кривые записи и пр...
46 1сПупс
 
21.02.17
09:59
(44) (45) спасибо!