Имя: Пароль:
1C
 
Как выбрать только те элементы справочника который содержат кирилицу
0 beholder
 
02.05.07
10:38
Вот. Пытаюсь с помощью LIKE сделать, но че-то туго соображается  :( похмелье-с, спасайте карады.
1 Тулеген
 
02.05.07
10:46
Элементы справочника которые содержат кирилицу где?
2 beholder
 
02.05.07
10:48
в наименовании
3 beholder
 
02.05.07
10:49
Пока только смог придумать вот это:

ЗЫ я знаю что это ужасно :(((( не пинайте сильно

SELECT
Серии.DESCR as СерийныйНомер

FROM SC48608 AS Серии

WHERE Серии.DESCR LIKE '%й%' OR
Серии.DESCR LIKE '%ц%' OR
Серии.DESCR LIKE '%у%' OR
Серии.DESCR LIKE '%к%' OR
Серии.DESCR LIKE '%е%' OR
Серии.DESCR LIKE '%н%' OR
Серии.DESCR LIKE '%г%' OR
Серии.DESCR LIKE '%ш%' OR
Серии.DESCR LIKE '%щ%' OR
Серии.DESCR LIKE '%з%' OR
Серии.DESCR LIKE '%х%' OR
Серии.DESCR LIKE '%ъ%' OR
Серии.DESCR LIKE '%ф%' OR
Серии.DESCR LIKE '%ы%' OR
Серии.DESCR LIKE '%в%' OR
Серии.DESCR LIKE '%а%' OR
Серии.DESCR LIKE '%п%' OR
Серии.DESCR LIKE '%р%' OR
Серии.DESCR LIKE '%о%' OR
Серии.DESCR LIKE '%л%' OR
Серии.DESCR LIKE '%д%' OR
Серии.DESCR LIKE '%ж%' OR
Серии.DESCR LIKE '%э%' OR
Серии.DESCR LIKE '%я%' OR
Серии.DESCR LIKE '%ч%' OR
Серии.DESCR LIKE '%с%' OR
Серии.DESCR LIKE '%м%' OR
Серии.DESCR LIKE '%и%' OR
Серии.DESCR LIKE '%т%' OR
Серии.DESCR LIKE '%ь%' OR
Серии.DESCR LIKE '%б%' OR
Серии.DESCR LIKE '%ю%'
4 NDN
 
02.05.07
10:50
Мб вырезать по одной букве и сравнивать через КодСимв()?
5 Лефмихалыч
 
02.05.07
10:53
(0) есть такое предложение CONTAINS. Его курить надо
6 beholder
 
02.05.07
10:55
(4) обработка так будет два дня работать :)
(5) Спасибо. Сейчас покурыим.
7 Лефмихалыч
 
02.05.07
10:59
(6) да не за что, только ты учти, что фигню ты затеял - задача (0) средствами SQL не решается, SQL не для этого придуман. CONTIANS поможет переписать условие (3) в более короткой форме, а работать это в любом случае будет скорее всего до морковкина заговенья
8 spock
 
02.05.07
11:11
не взлетит CONTAINS
9 beholder
 
02.05.07
12:40
Вот так вроде работает

SELECT
Серии.DESCR as СерийныйНомер

FROM SC48608 AS Серии

WHERE Серии.DESCR LIKE '%[йцукенгшщзхъфывапролджэячсмитьбю]%'
10 spock
 
02.05.07
12:52
ё
11 beholder
 
02.05.07
12:59
(10) тьфу ты! забыл про Ё :)))))))))
12 smaharbA
 
02.05.07
13:05
А адинесовским запросом никак ?
13 Chieftain
 
02.05.07
13:07
(12) Делай проверку во внешней функии
14 smaharbA
 
02.05.07
13:09
(13) вы это кому ?
15 beholder
 
02.05.07
13:11
(12) хых! например?
16 smaharbA
 
02.05.07
13:15
(15)

Функция ЕстьРусские(Наим)
   Рег=СоздатьОбъект("VBScript.RegExp");
   Рег.global=-1;
   Рег.ignorecase=-1;
   Рег.pattern="[а-яё]";
   Возврат Рег.Test(Наим);
КонецФункции    // ЕстьРусские

Функция ЕстьАнглицкие(Наим)
   Рег=СоздатьОбъект("VBScript.RegExp");
   Рег.global=-1;
   Рег.ignorecase=-1;
   Рег.pattern="[a-z]";
   Возврат Рег.Test(Наим);
КонецФункции    // ЕстьАнглицкие
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
   |Наименование = Справочник.Номенклатура.Наименование;
   |Группировка ТекущийЭлемент без групп;
   |Условие(ЕстьРусские(Наименование)=-1);
   |Условие(ЕстьАнглицкие(Наименование)=0);
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей ТекущийЭлемент
       Таб.ВывестиСекцию("ТекущийЭлемент");
   КонецЦикла;
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры
17 smaharbA
 
02.05.07
13:16
+(16) конечно можно и чиста адинес средствами
18 beholder
 
02.05.07
14:39
(16) - респект! Сейчас потестю.
19 Папа Гапа
 
02.05.07
14:48
(18) Ушел тестить и не вернулся...
20 КонецЦикла
 
02.05.07
14:49
Про большие буквы забыли... тогда уж НРег()
21 Папа Гапа
 
02.05.07
14:52
(20) Подожди ты код наворачивать. У него ещё этот вариант выполняться не закончил... А ты уже наворачиваешь.
22 beholder
 
02.05.07
14:57
(19) :) не я пока не тестил. времени нету, следующую задачку пишу пока.
23 smaharbA
 
02.05.07
14:57
(20) не забыли
24 КонецЦикла
 
02.05.07
15:04
Ага, я путаюсь все время
25 beholder
 
02.05.07
15:14
(23) - слушай

а вот не так надо?

Рег.pattern="%[а-яё]%";
26 smaharbA
 
02.05.07
15:16
(25) нет
27 smaharbA
 
02.05.07
15:32
Так конечно быстрее будет, а то в первом разе все время СоздатьОбъект(...

   Рег1=СоздатьОбъект("VBScript.RegExp");
   Рег1.global=-1;
   Рег1.ignorecase=-1;
   Рег1.pattern="[а-яё]";
   Рег2=СоздатьОбъект("VBScript.RegExp");
   Рег2.global=-1;
   Рег2.ignorecase=-1;
   Рег2.pattern="[a-z]";
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
   |Группировка ТекущийЭлемент без групп;
   |Условие((Рег1.Test(ТекущийЭлемент.Наименование)=-1) И (Рег2.Test(ТекущийЭлемент.Наименование)=0));
   |"//}}ЗАПРОС
28 Черепахыч
 
02.05.07
15:35
кусок из БУХ 77

//******************************************************************************
// СтрокаНаписанаРусскимиИлиЛатинскими()
//
// Параметры:
//  СтрокаПараметр - строка, проверяемая строка.
//
// Возвращаемое значение:
//        1 - строка состоит из допустимых символов
//        0 - в строке встречаются недопустимые символы
//
// Описание:
//        Строка проверяется на наличие только русских и латинских букв;
//        кроме того,    допускаются дефис, "Ё", "ё".
//
Функция СтрокаНаписанаРусскимиИлиЛатинскими(Знач СтрокаПараметр)
   
   //если получили реквизит справочника - подстрахуемся
   СтрокаПараметр = СокрЛП(СтрокаПараметр);    

   Русские = 0;    
   КоличествоСимволов = СтрДлина(СтрокаПараметр);
   
   Если  КоличествоСимволов > 0 Тогда
       ПервыйСимвол = КодСимв(Лев(СтрокаПараметр,1));
       Если  (ПервыйСимвол >= 192) или (ПервыйСимвол = 184) или (ПервыйСимвол = 168) Тогда
           Русские = 1;
       КонецЕсли;
   КонецЕсли;
   
   СписокДопустимыхЗначений = СоздатьОбъект("СписокЗначений");
   СписокДопустимыхЗначений.ДобавитьЗначение(184);   // ё
   СписокДопустимыхЗначений.ДобавитьЗначение(168);   // Ё
   СписокДопустимыхЗначений.ДобавитьЗначение(45);   //  "-"

   Для Сч = 1 По КоличествоСимволов Цикл
       Код = КодСимв(Сред(СтрокаПараметр,Сч));  
       // Большие латинские буквы: 65 - 90
       // Маленькие латинские буквы: 97 - 122
       // Русские буквы: 192 и больше
       
       //русские:
       Если (Русские = 1) Тогда
           Если (СписокДопустимыхЗначений.Принадлежит(Код) = 0) и (Код < 192)  Тогда
               Возврат 0;
           КонецЕсли;

       // латинские:    
       Иначе
           Если (Код <> 45) и
           ((Код < 65) или    (Код > 90) и (Код < 97) или (Код > 122))  Тогда    
               Возврат 0;
           КонецЕсли;
       КонецЕсли;
           
   КонецЦикла;
   
   Возврат 1;

КонецФункции // СтрокаНаписанаРусскимиИлиЛатинскими()
29 Лефмихалыч
 
02.05.07
15:37
(28) вот это вот, если натравить на справочник номенклатуры, в которомо больше 1000 элементов, будет работать до конца вечности...
30 smaharbA
 
02.05.07
15:37
(28) "10243-5364, 67/21 #123 №56" - ???
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.