| 
    
            
         
         | 
    
    
  | 
В запросе разделить ФИО на 3 части | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Futarkh    
     12.01.16 
            ✎
    10:32 
 | 
         
        Добрый день!
 
        Что то не могу придумать как запросом разделить строку, в которой есть ФИО на 3 части: Фамилию, Имя, Отчество. Подскажите плиз  | 
|||
| 
    1
    
        Futarkh    
     12.01.16 
            ✎
    10:33 
 | 
         
        Т.е. имеем 
 
        "Иванов Иван Иванович" В итоге получаем "Иванов" | "Иван" | "Иванович"  | 
|||
| 
    2
    
        ObjectRelation Model    
     12.01.16 
            ✎
    10:33 
 | 
         
        есть же РС ФИО     
         | 
|||
| 
    3
    
        Dmitrii    
     гуру 
    12.01.16 
            ✎
    10:34 
 | 
         
        В типовых конфигурациях для этого есть регистр сведений ФИОФизическихЛиц с соответствующими ресурсами.     
         | 
|||
| 
    4
    
        mehfk    
     12.01.16 
            ✎
    10:34 
 | 
         
        (0) Данная возможность не реализована.     
         | 
|||
| 
    5
    
        patria0muerte    
     12.01.16 
            ✎
    10:37 
 | 
         
        Ну в теории вроде б можно. Но это такой изврат будет...     
         | 
|||
| 
    6
    
        Рэйв    
     12.01.16 
            ✎
    10:38 
 | 
         
        А зачем именно запросом? Он под это не заточен. Оно и вне запроса прекрасно делится     
         | 
|||
| 
    7
    
        Futarkh    
     12.01.16 
            ✎
    10:40 
 | 
         
        (6) Потому что есть типовой отчет Сотрудники организаций, где есть поле ФИО (полное), а кадрам потребовалось ФИО по разным столбикам. Вот хотел сделать им пользовательское поле, чтобы не лезть внутрь отчета     
         | 
|||
| 
    8
    
        patria0muerte    
     12.01.16 
            ✎
    10:41 
 | 
         
        (7) А как ты запрос в пользовательском поле писать собрался?     
         | 
|||
| 
    9
    
        Nuobu    
     12.01.16 
            ✎
    10:41 
 | 
         
        (7) Так оно, ведь, из регистра компонуется.     
         | 
|||
| 
    10
    
        Рэйв    
     12.01.16 
            ✎
    10:42 
 | 
         
        (7)Сделай три реквизита под это дело у сотрудников, заполни их обработкой и используй в запросе ка нормальные поля     
         | 
|||
| 
    11
    
        Futarkh    
     12.01.16 
            ✎
    10:42 
 | 
         
        (8) Если честно, то я забыл как пользовательское поле пишется. Пробовал Лев() - не работает, значит подумал, что язык запросов там     
         | 
|||
| 
    12
    
        igork1966    
     12.01.16 
            ✎
    10:42 
 | 
         
        (0) есть такие алгоритмы с созданной таблицей цифр     
         | 
|||
| 
    13
    
        mehfk    
     12.01.16 
            ✎
    10:44 
 | 
         
        (11) Там язык выражений СКД.     
         | 
|||
| 
    14
    
        lxs    
     12.01.16 
            ✎
    10:46 
 | 
         
        (7) Отчет из ЗУП,соответственно, если в схеме компоновки нет соединения с регистром ФИОФизЛиц, как тебе уже выше говорили, то тебе именно туда. Там есть эта информация.     
         | 
|||
| 
    15
    
        Futarkh    
     12.01.16 
            ✎
    10:48 
 | 
         
        (13) И как найти с помощью языка выражений СКД позицию пробела в строке?)))))     
         | 
|||
| 
    16
    
        Nuobu    
     12.01.16 
            ✎
    10:49 
 | 
         
        (15) Найти(ФИО, " ")
 
        Ваш КЭП.  | 
|||
| 
    17
    
        Futarkh    
     12.01.16 
            ✎
    10:51 
 | 
         
        (16) Синтаксическая ошибка "Найти"     
         | 
|||
| 
    18
    
        Timon1405    
     12.01.16 
            ✎
    10:51 
 | 
         
        (15) Напишите в Общем модуле свою функцию и вызывайте ее в пользовательских полях     
         | 
|||
| 
    19
    
        Nuobu    
     12.01.16 
            ✎
    10:51 
 | 
         
        (17) СтрНайти     
         | 
|||
| 
    20
    
        Лефмихалыч    
     12.01.16 
            ✎
    10:51 
 | 
         
        (0) раздели вот это:
 
        Халил Мамед оглы Мамедов хоть даже и не в запрсое  | 
|||
| 
    21
    
        Futarkh    
     12.01.16 
            ✎
    10:53 
 | 
         
        (18) Весь смысл в том, чтобы без конфигуратора решить задачу     
         | 
|||
| 
    22
    
        lxs    
     12.01.16 
            ✎
    10:55 
 | 
         
        (21) пошел за попкорном     
         | 
|||
| 
    23
    
        Nuobu    
     12.01.16 
            ✎
    10:57 
 | 
         
        (21) Так чем СтрНайти не угодило?     
         | 
|||
| 
    24
    
        Futarkh    
     12.01.16 
            ✎
    10:58 
 | 
         
        (23) Синтаксическая ошибка     
         | 
|||
| 
    25
    
        Futarkh    
     12.01.16 
            ✎
    10:59 
 | 
         
        (18) Обращение к экспортной функции из общего модуля, тоже Синтаксическая ошибка     
         | 
|||
| 
    26
    
        patria0muerte    
     12.01.16 
            ✎
    11:00 
 | 
         
        Сугубо ради интереса накатал вот это. Только цифирей поболее надо:
 
        ВЫБРАТЬ 1 КАК Номер ПОМЕСТИТЬ ВТНомера ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 10 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 11 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 12 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 13 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 14 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 15 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 16 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 17 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 18 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 19 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 20 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ &ФИО ПОМЕСТИТЬ ВТФИО ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТФИО.ФИО, ВТНомера.Номер, ПОДСТРОКА(ВТФИО.ФИО, ВТНомера.Номер, 1) КАК Пробел ПОМЕСТИТЬ ВТПробелы ИЗ ВТНомера КАК ВТНомера, ВТФИО КАК ВТФИО ГДЕ ПОДСТРОКА(ВТФИО.ФИО, ВТНомера.Номер, 1) = " " ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПробелы.ФИО, ВТПробелы.Номер КАК ПозицияПробела, ВТПробелы.Номер - 1 КАК ПоследнийСимвол, МАКСИМУМ(ЕСТЬNULL(ВТПробелы1.Номер, 0) + 1) КАК ПервыйСимвол ПОМЕСТИТЬ ВТПервыеПоследниеСимволы ИЗ ВТПробелы КАК ВТПробелы ЛЕВОЕ СОЕДИНЕНИЕ ВТПробелы КАК ВТПробелы1 ПО ВТПробелы.Номер > ВТПробелы1.Номер СГРУППИРОВАТЬ ПО ВТПробелы.ФИО, ВТПробелы.Номер, ВТПробелы.Номер - 1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.ФИО, ВТ.ПозицияПробела, ВТ.ПоследнийСимвол, ВТ.ПервыйСимвол, ПОДСТРОКА(ВТ.ФИО, ВТ.ПервыйСимвол, ВТ.ПоследнийСимвол - ВТ.ПервыйСимвол + 1) КАК Кусочек ИЗ ВТПервыеПоследниеСимволы КАК ВТ ГДЕ НЕ ВТ.ПоследнийСимвол - ВТ.ПервыйСимвол = 1 И НЕ ВТ.ПоследнийСимвол - ВТ.ПервыйСимвол = -1  | 
|||
| 
    27
    
        patria0muerte    
     12.01.16 
            ✎
    11:01 
 | 
         
        +(26) Ну и причесать чуть..     
         | 
|||
| 
    28
    
        Futarkh    
     12.01.16 
            ✎
    11:03 
 | 
         
        В пользовательских полях используются только арифметические операции, функции выбора, сравнения, Подстрока, Год, час, сумма, количество и т.п.     
         | 
|||
| 
    29
    
        Futarkh    
     12.01.16 
            ✎
    11:03 
 | 
         
        Никаких поисков строки там нет     
         | 
|||
| 
    30
    
        Nuobu    
     12.01.16 
            ✎
    11:03 
 | 
         
        (29) Так сделай ВЫражением.     
         | 
|||
| 
    31
    
        Nuobu    
     12.01.16 
            ✎
    11:04 
 | 
         
        (30) То есть вычисляемым полем     
         | 
|||
| 
    32
    
        lxs    
     12.01.16 
            ✎
    11:05 
 | 
||||
| 
    33
    
        Garykom    
     гуру 
    12.01.16 
            ✎
    11:06 
 | 
         
        (22) нравится смотреть на любителей удалять гланды не через ближайшее отверстие?     
         | 
|||
| 
    34
    
        Futarkh    
     12.01.16 
            ✎
    11:06 
 | 
         
        (31) Для этого нужно найти позицию пробела и обрезать до этой позиции, тогда получим фамилию     
         | 
|||
| 
    35
    
        Лефмихалыч    
     12.01.16 
            ✎
    11:07 
 | 
         
        (26) тестируй:
 
        Мухаммад ибн Абд аль-Ваххаб ибн Сулейман ибн Али ибн Мухаммад Лопес Антонио Гонзало Силвас Джалилова Сания Сеит Сафеновна  | 
|||
| 
    36
    
        Futarkh    
     12.01.16 
            ✎
    11:07 
 | 
         
        Ладно, спасибо, тема закрыта. Добавлю пару строк в запрос в отчет.     
         | 
|||
| 
    37
    
        patria0muerte    
     12.01.16 
            ✎
    11:09 
 | 
         
        (35) А че ее тестировать. Поделит. Механизм то топорный. По крайней мере (20) поделил. В итоге 4 строки с отдельными кусками     
         | 
|||
| 
    38
    
        Лефмихалыч    
     12.01.16 
            ✎
    11:11 
 | 
         
        (37) и что из этого будет ФИО? :)     
         | 
|||
| 
    39
    
        Timon1405    
     12.01.16 
            ✎
    11:12 
 | 
         
        (37) и все равно РС лучше.
 
        хотя бы в том, что ответственность за заполнение и правильность данных лежит не на программисте, а на людях, которые с этими данными работают.  | 
|||
| 
    40
    
        Лефмихалыч    
     12.01.16 
            ✎
    11:21 
 | 
         
        (39) +1 про ответственность. Ибо, если в справочник физлиц внесут "Димитровград Юнг Северного Флота", то ни какие алгоритмы не победят этот бред.     
         | 
|||
| 
    41
    
        lxs    
     12.01.16 
            ✎
    11:26 
 | 
         
        (33) именно     
         | 
|||
| 
    42
    
        patria0muerte    
     13.01.16 
            ✎
    01:27 
 | 
         
        (39) Так а кто ж спорит то. Разумеется лучше и правильней работать с РС ФИО. (26) написано из спортивного интереса, исходя из условий (0)     
         | 
|||
| 
    43
    
        франц    
     13.01.16 
            ✎
    01:31 
 | 
         
        (26) уж не плагиат ли.. потому как вот оно в истинном виде:
 
        ВЫБРАТЬ РАЗЛИЧНЫЕ Дано.Колонка НомерСтроки, Дано.Колонка а ПОМЕСТИТЬ Дано ИЗ &Дано КАК Дано; ВЫБРАТЬ 0 ё ПОМЕСТИТЬ Р0 ОБЪЕДИНИТЬ ВЫБРАТЬ 1; ВЫБРАТЬ 2 * Р1.ё + Р0.ё ё ПОМЕСТИТЬ Р10 ИЗ Р0 Р1, Р0; ВЫБРАТЬ 4 * Р32.ё + Р10.ё ё ПОМЕСТИТЬ Р3210 ИЗ Р10 Р32, Р10; ВЫБРАТЬ 16 * Р7654.ё + Р3210.ё ё ПОМЕСТИТЬ Р76543210 ИЗ Р3210 Р7654, Р3210; ВЫБРАТЬ 8 * Р76543210.ё + 2 * Р10.ё + Р0.ё + 1 ё ПОМЕСТИТЬ РА9876543210 ИЗ Р76543210, Р10, Р0; ВЫБРАТЬ НомерСтроки, ё, ПОДСТРОКА(а, ё, 1) а ПОМЕСТИТЬ Буквы ИЗ Дано, РА9876543210; ВЫБРАТЬ НомерСтроки, МАКСИМУМ(ё) СтрДлина ПОМЕСТИТЬ Длины ИЗ Буквы ГДЕ а > "" СГРУППИРОВАТЬ ПО НомерСтроки; ВЫБРАТЬ Буквы.НомерСтроки, ё,ВЫБОР а КОГДА " " ТОГДА " " ИНАЧЕ а КОНЕЦ а ПОМЕСТИТЬ СокрП ИЗ Буквы СОЕДИНЕНИЕ Длины ПО Буквы.НомерСтроки = Длины.НомерСтроки И ё <= СтрДлина; ВЫБРАТЬ ё + СУММА(ЕСТЬNULL(СтрДлина, 0)) ё, а Поместить Таб ИЗ СокрП КАК Буквы ЛЕВОЕ СОЕДИНЕНИЕ Длины ПО Буквы.НомерСтроки > Длины.НомерСтроки СГРУППИРОВАТЬ ПО Буквы.НомерСтроки, ё, а; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ ВЫРАЗИТЬ(ё/2 КАК ЧИСЛО(15,0)) е, ё, а ПОМЕСТИТЬ Шаг ИЗ Таб; УНИЧТОЖИТЬ Таб; ВЫБРАТЬ е ё, МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА а ИНАЧЕ "" КОНЕЦ) + МАКСИМУМ(ВЫБОР е*2-ё КОГДА 1 ТОГДА "" ИНАЧЕ а КОНЕЦ) а ПОМЕСТИТЬ Таб ИЗ Шаг СГРУППИРОВАТЬ ПО е; УНИЧТОЖИТЬ Шаг; ВЫБРАТЬ а ИЗ Таб  | 
|||
| 
    44
    
        patria0muerte    
     13.01.16 
            ✎
    02:51 
 | 
         
        (43) Ну как-бэ ничто не ново в этом мире. Но (26) - плод моей больной фантазии...     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |