Имя: Пароль:
1C
1С v8
Разбор строки в 8.2
, , ,
0 егаис
 
21.11.13
10:48
Загрузка накладных в Рознице 2.0.
Есть наименование товара "Пылесос SAMSUNG SC4752", нужно для поиска оставить только "SAMSUNG SC4752", т.е. разложить слова в многострочный текст и вырезать оттуда слова с русскими буквами.
Как сделано
&НаСервере
Процедура ПодобратьНоменклутуруНаСервере()
    
    Для Каждого Строка Из Объект.СоответствиеНоменклатуры Цикл
        Если (НЕ Строка.Загружать) ИЛИ ЗначениеЗаполнено(Строка.Номенклатура) Тогда
            Продолжить;
        КонецЕсли;
        
        СтрокаПоиска = "";
        МногострочнаяСтрока = СтрЗаменить(СтрокаСРазделителями, " ", Символы.ПС);
        Для кСчЦ = 1 по СтрЧислоСтрок(МногострочнаяСтрока) Цикл
            СтрокаМС = СокрЛП(СтрПолучитьСтроку(МногострочнаяСтрока,СчЦ));
            Если СтрокаМС = "" Тогда
                Продолжить;
            КонецЕсли;    
            Если Найти(СтрокаМС) = 0 Тогда
            КонецЕсли;    
        КонецЦикла;    
        
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    Номенклатура.Ссылка
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |    Номенклатура.Наименование ПОДОБНО &Наименование";

        Запрос.УстановитьПараметр("Наименование", "%" + Строка.Наименование + "%");

        Результат = Запрос.Выполнить().Выгрузить();
        
        Если Результат.Количество() = 1 Тогда
            Строка.Номенклатура = Результат[0].Ссылка;
        ИначеЕсли Результат.Количество() > 1 Тогда
            СписокКА = Новый СписокЗначений;
            СписокКА.ЗагрузитьЗначения(Результат.ВыгрузитьКолонку("Ссылка"));
            Строка.Номенклатура = ВыбратьИзСписка(СписокКА);
        КонецЕсли;    
        
    КонецЦикла;    
    
КонецПроцедуры

Я наверное туплю, но как "вырезать" слова с русскими буквами?!
Вот здесь             Если Найти(СтрокаМС) = 0 Тогда
            КонецЕсли;
1 Wobland
 
21.11.13
10:49
код символа есть в этой вселенной?
2 егаис
 
21.11.13
10:51
(1) бррр, описать каждый символ ??!!!
3 Wobland
 
21.11.13
10:51
(2) можешь сфантазировать другое решение?
4 Wobland
 
21.11.13
10:52
регвыражения? да даже лайк умеет, кстати
5 егаис
 
21.11.13
10:52
например?
наименование может быть и "Стайлеры, щипцы и выпрямители POLARIS PHS 1127белый/лиловый"
6 Бешеная Нога
 
21.11.13
10:53
СписокБукв.Добавить("А");
СписокБукв.Добавить("Б");
...

Если СписокБукв.Найти(Сред(СтрокаМС, 1,1)) Тогда
   ...
7 Wobland
 
21.11.13
10:54
(5) на слова поделишь? функцию русскости напишешь?
8 Лодырь
 
21.11.13
10:54
Регулярные выражения прям прорулили бы в данном вопросе.
9 егаис
 
21.11.13
10:54
(6) вот поверь, совсем хреновое решение
10 Бешеная Нога
 
21.11.13
10:55
(9) давай свое )))
11 егаис
 
21.11.13
10:55
(8) если не сложно, можно примером?
12 Cube
 
21.11.13
10:55
(6) Можно и так:
Если Найти("абвгд...яАБВГД...Я", ТекСимволМоейСтроки) > 0 Тогда
    //Это русский символ - удалить
13 Бешеная Нога
 
21.11.13
10:56
СписокБукв = "абвгде...я";
Если Найти(СписокБукв,Сред(СтрокаМС, 1,1)) Тогда
14 Wobland
 
21.11.13
10:56
(12) прогнозирую, лайк отработает быстрее. а уж регвыражения..
15 anaed
 
21.11.13
10:56
Функция KillRussian(Переменная)
    Если Переменная="" Тогда
        Возврат Переменная;
    КонецЕсли;
    Пер=СокрЛП(Переменная);
    Длина=СтрДлина(Пер);
    Пер1="";
    Для Сч=1 По Длина Цикл
        Символ=Сред(Пер,Сч,1);
        Если Найти("абвгдАБВГД...все исключаемые символы",Символ)>0 Тогда
            продолжить;
        КонецЕсли;
Пер1=Пер1+Символ;
    КонецЦикла;
    Возврат Пер1;
КонецФункции
16 Бешеная Нога
 
21.11.13
10:57
и вообще, что за националистические нападки, чем вас русский не устраивает? может вы и против России? не нравится валите ваще тогда отсюда
17 егаис
 
21.11.13
10:57
Мужики, тупой перебор и сам бы написал.
Про регулярыне интересно )
18 Лодырь
 
21.11.13
10:57
(11)
пример можно увидеть тут в предпоследнем посте v8: Замена заглавных букв на прописные, если заглавных букв больше 5 подряд
19 егаис
 
21.11.13
10:57
(16) вопрос к поставщикам ))
20 Как страшно жить
 
21.11.13
10:58
а как разложить "пылесос ЭЛЕКТРОН-2"?
21 Лодырь
 
21.11.13
10:59
или пример например тут http://infostart.ru/public/64222/
22 Wobland
 
21.11.13
10:59
(20) -2
23 егаис
 
21.11.13
11:00
(20) пробел - разделитель
24 Asmody
 
21.11.13
11:01
тащим отсюда https://snegopat.ru/scripts/doc/trunk/rex/readme.markdown библиотеку

потом делаем что-то типа

ре = Новый("V8RegEx", "[\p{Letter}&&\p{script=cyrillic}]+");
НоваяСтрока = ре.Заменить(ИсходныйТекст,"");
25 Лодырь
 
21.11.13
11:22
(24) Сильно просто ) дал бы возможность человеку разобраться с регулярками по полной. Он бы прокачался.
26 егаис
 
21.11.13
14:04
ага, спасибо
еще ламерский вопрос
Процедура выполняется насервере.
Метод СЗ ВыбратьЭлемент или ВыбратьИзСписка для УФ недоступны. Как передать в функцию наклиента данный список?
Что-то типа
&НаКлиенте
Функция ВыбратьИзТекущегоСписка(СписокАналогов)
    
    Возврат ВыбратьИзСписка(СписокАналогов);
    
КонецФункции


&НаСервере
Процедура ПодобратьНоменклатуруНаСервере()
    
...
        Результат = Запрос.Выполнить().Выгрузить();
        
        Если Результат.Количество() = 1 Тогда
            Строка.Номенклатура = Результат[0].Ссылка;
        ИначеЕсли Результат.Количество() > 1 Тогда
            СписокКА = Новый СписокЗначений;
            СписокКА.ЗагрузитьЗначения(Результат.ВыгрузитьКолонку("Ссылка"));
            Строка.Номенклатура = ВыбратьИзТекущегоСписка(СписокКА);
            
            
        КонецЕсли;    
        
    КонецЦикла;    
    
КонецПроцедуры
27 егаис
 
21.11.13
14:05
{Обработка.ЗагрузкаДанныхИзТабличногоДокумента.Форма.ФормаПомощник.Форма(953,26)}: Процедура или функция с указанным именем не определена (ВыбратьИзТекущегоСписка)
            Строка.Номенклатура = <<?>>ВыбратьИзТекущегоСписка(СписокКА); (Проверка: Сервер)
28 1dvd
 
21.11.13
14:09
(0) неплохой пылесос, кстати. Был у меня такой
29 WildSery
 
21.11.13
14:09
(5) Так и нет ответа на вопрос (7), как надо разделять указанную строку.
30 егаис
 
21.11.13
14:13
переписал логику, все оставил наклиенте, запрос передал на сервер. Все равно ошибка
{Обработка.ЗагрузкаДанныхИзТабличногоДокумента.Форма.ФормаПомощник.Форма(946)}: Ошибка при вызове метода контекста (ВозвратСпискаТоваров)
        ТаблицаТоваров = ВозвратСпискаТоваров(СтрокаПоиска);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
31 егаис
 
21.11.13
14:15
все, разобрался, спасиюл
32 егаис
 
21.11.13
14:45
пил ят, как можног шарить в этих УФ?!
Элементы.СоответствиеНоменклатуры.ТекущиеДанные.Номенклатура = ВыбратьИзСписка(СписокТоваров);
Список выбора значений на уф выходит, выбираю, но выбираемый элемент почему-то не отражается на форме.
33 егаис
 
21.11.13
14:54
как установить значение для колонки таблицы в управляемой форме? мозг сломал