Имя: Пароль:
1C
 
В запросе разделить ФИО на 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) - плод моей больной фантазии...
Основная теорема систематики: Новые системы плодят новые проблемы.