|
Вопрос по разбивке фио | ☑ | ||
---|---|---|---|---|
0
елкина
13.09.13
✎
09:53
|
Добрый день. Меня попросили спросить у вас вот такую проблемку.
Есть вот это Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(Объект.ДатаНачала)); Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(Объект.ДатаОкончания)); Запрос.Текст = "ВЫБРАТЬ | ВТ.УлицаНаименование КАК УлицаНаименование, | ВТ.ДомНомер КАК ДомНомер, | ВТ.ПомещениеНомер КАК ПомещениеНомер, | ВТ.ФИО, | ВТ.Пол, | ВТ.ДатаРождения, | ВТ.УдостоверениеВид, | ВТ.УдостоверениеСерия, | ВТ.УдостоверениеНомер, | ВТ.УдостоверениеДатаВыдачи, | ВТ.УдостоверениеКемВыдано, | ВТ.ДатаПрописки, | ВТ.ДатаВыписки |ИЗ | ВТ КАК ВТ |ГДЕ | (ВТ.ДатаВыписки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ИЛИ ВТ.ДатаВыписки МЕЖДУ &ДатаНачала И &ДатаОкончания) | |УПОРЯДОЧИТЬ ПО | УлицаНаименование, | ДомНомер, | ПомещениеНомер"; t = ";"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Строка = Стр(Выборка.УлицаНаименование)+t + Стр(Выборка.ДомНомер)+t + Стр(Выборка.ПомещениеНомер)+t + Стр(Выборка.ФИО)+t + Формат(Выборка.ДатаРождения, "ДФ=yyyy-MM-dd")+t + Лев(Выборка.Пол,1)+t + Стр(Выборка.УдостоверениеВид)+t + Стр(Выборка.УдостоверениеСерия)+t + Стр(Выборка.УдостоверениеНомер)+t + Формат(Выборка.УдостоверениеДатаВыдачи, "ДФ=yyyy-MM-dd")+t + Стр(Выборка.УдостоверениеКемВыдано)+t + Формат(Выборка.ДатаПрописки, "ДФ=yyyy-MM-dd")+t + Формат(Выборка.ДатаВыписки, "ДФ=yyyy-MM-dd")+t; Объект.Текст.ДобавитьСтроку(Строка); КонецЦикла; Вопрос вот в чем как в данном коде сделать так что бы ФИО разбивалось на 3 отдельных Фамилия Имя Отчество ну и так же выводилось через ; Очень прошу помочь и не смеяться. ;) |
|||
1
cw014
13.09.13
✎
09:55
|
Поз = Найти(ФИО," ");
Фамилия = Лев(ФИО, Поз-1); Остаток = Сред(ФИО, Поз+1); Повторить три раза |
|||
2
Тролль главный
13.09.13
✎
09:56
|
в типовых есть РС ФИО физ лиц, там все уже разбито
|
|||
3
mikecool
13.09.13
✎
09:57
|
ФИО = СтрЗаменить(ФМО, " ", ";");
|
|||
4
catena
13.09.13
✎
09:57
|
+ СтрЗаменить(Стр(Выборка.ФИО)," ",";")+t
Ну, это если нет всяких двойных имен-фамилий. |
|||
5
IШаман
13.09.13
✎
09:57
|
+(1) Еще надо учесть что пробелов может быть несколько.
|
|||
6
cw014
13.09.13
✎
09:58
|
Можно так:
ФИОСтр = СтрЗаменить(ФИО, " ", Символы.ПС); Фамилия = СтрПолучитьСтроку(ФИОСТР,1); Имя = СтрПолучитьСтроку(ФИОСТР,2); Отчество = СтрПолучитьСтроку(ФИОСТР,3); |
|||
7
фобка
13.09.13
✎
09:59
|
А еще есть ФИО без отчеств, а есчо есть сложно составные (арабские всякие)
|
|||
8
елкина
13.09.13
✎
10:01
|
ой а можно это в тот код подставить я просто не сама все делаю 8) учусь. хотела бы наглядности.
|
|||
9
Леопольд Роскошный
13.09.13
✎
10:05
|
Функция ФамилияИнициалыФизЛица(Объект = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт
типовая, там все есть. |
|||
10
catena
13.09.13
✎
10:07
|
(9)Такие смешные. Видите из ВТ данные собираются, может это внешний источник и нет там никакого объекта.
|
|||
11
елкина
13.09.13
✎
10:32
|
Спасибо огромное .помогло.
|
|||
12
mikecool
13.09.13
✎
10:55
|
(10) в объект можно и строку запихать емнип
|
|||
13
елкина
13.09.13
✎
10:57
|
А вот как сделать что бы фамилия имя отчество были еще и в "" "фамилия";"имя";"отчество";
|
|||
14
catena
13.09.13
✎
11:23
|
(13) Фамилия = """"+Фамилия+""""
|
|||
15
IKSparrow
13.09.13
✎
11:34
|
Из штатной конфы:
// Функция формирует список значений из строки с разделителями. // // Параметры // СтрокаТекста - строка текста с разделителями // Разделитель - Строка, разделитель в тексте // НаличиеКавычек - Булево, есть ли кавычки вокруг значений в строке // // Возвращаемое значение: // СписокЗначений // Функция _ИзСтрокиСРазделителями(СтрокаТекста, Разделитель, НаличиеКавычек, НеУчитывтьТекстСТабуляциями = Ложь) Экспорт НаименованиеПрограммы = ""; ФорматФайла = ""; Если НЕ НеУчитывтьТекстСТабуляциями И ФорматФайла = "ТекстCТабуляциями" Тогда НаличиеКавычек = Ложь; Разделитель = Символы.Таб; КонецЕсли; СписокДанных = Новый СписокЗначений; ПрошлыйРазделитель = 0; КоличествоСимволов = 0; Для а=1 По СтрДлина(СтрокаТекста) Цикл Если Сред(СтрокаТекста,а,1) = Разделитель Тогда ВыбранноеЗначение = Сред(СтрокаТекста,(ПрошлыйРазделитель + 1),КоличествоСимволов); Если НаличиеКавычек Тогда ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2, (СтрДлина(ВыбранноеЗначение) - 2)); КонецЕсли; Если НаименованиеПрограммы = "TheBAT" Тогда ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, "\22", """"); ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, "\2C", ""); ИначеЕсли НаименованиеПрограммы = "MSOutlook" И НЕ НеУчитывтьТекстСТабуляциями И ФорматФайла = "ТекстCТабуляциями" Тогда ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, (""""""), """"); Если Сред(ВыбранноеЗначение, 1, 1) = """" Тогда ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2); КонецЕсли; Если Сред(ВыбранноеЗначение, СтрДлина(ВыбранноеЗначение), 1) = """" Тогда ВыбранноеЗначение = Сред(ВыбранноеЗначение, 1, (СтрДлина(ВыбранноеЗначение) - 1)); КонецЕсли; КонецЕсли; СписокДанных.Добавить(ВыбранноеЗначение); ПрошлыйРазделитель = а; КоличествоСимволов = 0; Продолжить; КонецЕсли; КоличествоСимволов = КоличествоСимволов + 1; КонецЦикла; ВыбранноеЗначение = Сред(СтрокаТекста,(ПрошлыйРазделитель + 1)); Если НаличиеКавычек Тогда ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2, (СтрДлина(ВыбранноеЗначение) - 2)); КонецЕсли; Если НаименованиеПрограммы = "TheBAT" Тогда ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, "\22", """"); ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, "\2C", ""); ИначеЕсли НаименованиеПрограммы = "MSOutlook" И НЕ НеУчитывтьТекстСТабуляциями И ФорматФайла = "ТекстCТабуляциями" Тогда ВыбранноеЗначение = СтрЗаменить(ВыбранноеЗначение, (""""""), """"); Если Сред(ВыбранноеЗначение, 1, 1) = """" Тогда ВыбранноеЗначение = Сред(ВыбранноеЗначение, 2); КонецЕсли; Если Сред(ВыбранноеЗначение, СтрДлина(ВыбранноеЗначение), 1) = """" Тогда ВыбранноеЗначение = Сред(ВыбранноеЗначение, 1, (СтрДлина(ВыбранноеЗначение) - 1)); КонецЕсли; КонецЕсли; СписокДанных.Добавить(ВыбранноеЗначение); Возврат СписокДанных; КонецФункции // Функция преобразует значения списка значений в строку с разделителями. // // Параметры // СписокЭлементов - список значений для преобразования // Разделитель - строка, разделитель для элементов строки // НаличиеКавычек - булево, нужно ли заключать элемент строки в кавычки // // ВозвращаемыеЗначения // Строка // Функция _ВСтрокуСразделителями(СписокЭлементов, Разделитель, НаличиеКавычек) Экспорт ФорматФайла = ""; НаименованиеПрограммы = ""; Если ФорматФайла = "ТекстCТабуляциями" Тогда НаличиеКавычек = Ложь; Разделитель = Символы.Таб; КонецЕсли; СтрокаВозврата = ""; Для а = 0 По СписокЭлементов.Количество() - 1 Цикл ЭлементВыгрузки = СписокЭлементов[а].Значение; Если НаименованиеПрограммы = "TheBAT" Тогда ЭлементВыгрузки = СтрЗаменить(ЭлементВыгрузки, """", "\22"); Иначе ЭлементВыгрузки = СтрЗаменить(ЭлементВыгрузки, """", """"""); КонецЕсли; Если ФорматФайла = "ТекстCТабуляциями" Тогда ЭлементВыгрузки = СтрЗаменить(ЭлементВыгрузки, Разделитель, ""); КонецЕсли; Если а = 0 Тогда СтрокаВозврата = ?(НаличиеКавычек,"""","") + СокрЛП(ЭлементВыгрузки) + ?(НаличиеКавычек,"""",""); Иначе СтрокаВозврата = СтрокаВозврата + Разделитель + ?(НаличиеКавычек,"""","") + СокрЛП(ЭлементВыгрузки) + ?(НаличиеКавычек,"""",""); КонецЕсли; КонецЦикла; Возврат СтрокаВозврата; КонецФункции |
|||
16
IKSparrow
13.09.13
✎
11:35
|
Блин, как тэг кода применять
|
|||
17
елкина
13.09.13
✎
11:44
|
(4) сделала так получила данные на выходе
"тест Улица";"11";"111";"Иванова;Иванна;Ивановна ";2099-99-99;;"";"";"";;"";2001-00-00;2000-00-00; на примере того кода покажите как ф И О обнести "" и через ; p.s просто данная табличка должна выходить в exel с разделителями ; |
|||
18
Balabass
13.09.13
✎
11:52
|
Мда...
Мистяне нынче не те. (0) Фотка где? |
|||
19
catena
13.09.13
✎
12:02
|
(18)шшш, там кузнец есть...
|
|||
20
елкина
13.09.13
✎
12:13
|
не кузнец а мой брат ;) будет вам фотка помогите решить поблему..
помогите добиться вида "тест Улица";"11";"111";"Иванова";"Иванна";"Ивановна" ;2099-99-99;;"";"";"";;"";2001-00-00;2000-00-00; |
|||
21
Balabass
13.09.13
✎
12:16
|
(19) ?
|
|||
22
Balabass
13.09.13
✎
12:19
|
(20) ТАк сказали же что нужно сделать? не?
|
|||
23
елкина
13.09.13
✎
12:36
|
Строка = Стр(Выборка.УлицаНаименование)+t
+ Стр(Выборка.ДомНомер)+t + Стр(Выборка.ПомещениеНомер)+t тут фамилия надо + СтрЗаменить(Стр(Выборка.ФИО)," ",";")+t тут надо имя + СтрЗаменить(Стр(Выборка.ФИО)," ",";")+t тут надо отчество + СтрЗаменить(Стр(Выборка.ФИО)," ",";")+t + Формат(Выборка.ДатаРождения, "ДФ=yyyy-MM-dd")+t + Лев(Выборка.Пол,1)+t + Стр(Выборка.УдостоверениеВид)+t + Стр(Выборка.УдостоверениеСерия)+t + Стр(Выборка.УдостоверениеНомер)+t + Формат(Выборка.УдостоверениеДатаВыдачи, "ДФ=yyyy-MM-dd")+t + Стр(Выборка.УдостоверениеКемВыдано)+t + Формат(Выборка.ДатаПрописки, "ДФ=yyyy-MM-dd")+t + Формат(Выборка.ДатаВыписки, "ДФ=yyyy-MM-dd")+t; вот как именно 3 сделать? т.к потом создается таблица и если не будет 3х то все ФИО даже разобранное по частям суется в одну колонку. /me нервно хихикает. |
|||
24
catena
13.09.13
✎
12:41
|
ФИОСтр = СтрЗаменить(ФИО, " ", Символы.ПС);
ФИОстр = СтрЗаменить(ФИО, """", ""); Фамилия = """"+СтрПолучитьСтроку(ФИОСТР,1)+""""; Имя = """"+СтрПолучитьСтроку(ФИОСТР,2)+""""; Отчество = """"+СтрПолучитьСтроку(ФИОСТР,3)+""""; А потом уже в троку вместо + Стр(Выборка.ФИО)+ Пихать + Фамилия + ";" + + Имя + ";" + + Отчество+ ";" + |
|||
25
елкина
13.09.13
✎
12:50
|
(24) не хочет 8( не могли бы вы на примере (0) показать .... чеснослово последний раз прошу ;) я просто учусь а тут такое задали .....
|
|||
26
Леопольд Роскошный
13.09.13
✎
12:55
|
(12) точно!
|
|||
27
catena
13.09.13
✎
12:59
|
(25)Что именно не хочет-то? Сперва вычисляете фамилию-имя-отчетсво, потом подставляете их при собирании строки. Всё.
|
|||
28
catena
13.09.13
✎
12:59
|
Только наоборот
ФИО = СтрЗаменить(ФИО, """", ""); ФИОСтр = СтрЗаменить(ФИО, " ", Символы.ПС); Фамилия = """"+СтрПолучитьСтроку(ФИОСТР,1)+""""; Имя = """"+СтрПолучитьСтроку(ФИОСТР,2)+""""; Отчество = """"+СтрПолучитьСтроку(ФИОСТР,3)+""""; |
|||
29
Infsams654
13.09.13
✎
13:12
|
(28) ну-ну, у азербайджанцев отчество 2-ное, например: Могай Оглы. Так в паспорте и написано (бывают варианты "Могай-Оглы", "Могай - Оглы"), так, что с разделением через пробел не прокатит.
|
|||
30
catena
13.09.13
✎
13:16
|
(29)А я про это еще в первом сообщение уточнила. Но в этих случаях если вручную ФИО не разбито по нужным полям, программно никак не разделить.
|
|||
31
catena
13.09.13
✎
13:20
|
(29)У меня самой таких оглы-улы-жан-кыз дофига :(
|
|||
32
Бледно Золотистый
13.09.13
✎
13:21
|
(29) Это что, вон у испанцев - Мария де Монтсеррат Вивиана Консепсьон Кабалье-и-Фолк
|
|||
33
елкина
13.09.13
✎
13:37
|
.......при формировании выходного файла теперь ругается что "Преобразование значений к типу Число не может быть выполнено"
|
|||
34
елкина
13.09.13
✎
14:43
|
Собственно вот так получилось
Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(Объект.ДатаНачала)); Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(Объект.ДатаОкончания)); Запрос.Текст = "ВЫБРАТЬ | ВТ.УлицаНаименование КАК УлицаНаименование, | ВТ.ДомНомер КАК ДомНомер, | ВТ.ПомещениеНомер КАК ПомещениеНомер, | ВТ.ФИО, | ВТ.Пол, | ВТ.ДатаРождения, | ВТ.УдостоверениеВид, | ВТ.УдостоверениеСерия, | ВТ.УдостоверениеНомер, | ВТ.УдостоверениеДатаВыдачи, | ВТ.УдостоверениеКемВыдано, | ВТ.ДатаПрописки, | ВТ.ДатаВыписки |ИЗ | ВТ КАК ВТ |ГДЕ | (ВТ.ДатаВыписки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ИЛИ ВТ.ДатаВыписки МЕЖДУ &ДатаНачала И &ДатаОкончания) | |УПОРЯДОЧИТЬ ПО | УлицаНаименование, | ДомНомер, | ПомещениеНомер"; t = ";"; Выборка = Запрос.Выполнить().Выбрать(); ФИО = СтрЗаменить(ФИО, """", ""); ФИОСтр = СтрЗаменить(ФИО, " ", Символы.ПС); Фамилия = """"+СтрПолучитьСтроку(ФИОСТР,1)+""""; Имя = """"+СтрПолучитьСтроку(ФИОСТР,2)+""""; Отчество = """"+СтрПолучитьСтроку(ФИОСТР,3)+""""; Пока Выборка.Следующий() Цикл Строка = + Стр(Выборка.УлицаНаименование)+t + Стр(Выборка.ДомНомер)+t + Стр(Выборка.ПомещениеНомер)+t + Стр(Выборка.ФИО)+t + Лев(Выборка.Пол,1)+t + Фамилия + ";" + + Имя + ";" + + Отчество+ ";" + + Формат(Выборка.ДатаРождения, "ДФ=yyyy-MM-dd")+t + Стр(Выборка.УдостоверениеВид)+t + Стр(Выборка.УдостоверениеСерия)+t + Стр(Выборка.УдостоверениеНомер)+t + Формат(Выборка.УдостоверениеДатаВыдачи, "ДФ=yyyy-MM-dd")+t + Стр(Выборка.УдостоверениеКемВыдано)+t + Формат(Выборка.ДатаПрописки, "ДФ=yyyy-MM-dd")+t + Формат(Выборка.ДатаВыписки, "ДФ=yyyy-MM-dd")+t; Объект.Текст.ДобавитьСтроку(Строка); КонецЦикла; и не формируется файл csv ругается Преобразование значений к типу Число не может быть выполнено" |
|||
35
catena
13.09.13
✎
14:45
|
(34)Знаешь, брось... Не твое...
|
|||
36
anaed
13.09.13
✎
14:51
|
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл ФИО = СтрЗаменить(Выборка.ФИО, """", ""); ФИОСтр = СтрЗаменить(ФИО, " ", Символы.ПС); Фамилия = """"+СтрПолучитьСтроку(ФИОСТР,1)+""""; Имя = """"+СтрПолучитьСтроку(ФИОСТР,2)+""""; Отчество = """"+СтрПолучитьСтроку(ФИОСТР,3)+""""; Строка = + Стр(Выборка.УлицаНаименование)+t + Стр(Выборка.ДомНомер)+t + Стр(Выборка.ПомещениеНомер)+t + Стр(Выборка.ФИО)+t + Лев(Выборка.Пол,1)+t + Фамилия + ";" + + Имя + ";" + + Отчество+ ";" + + Формат(Выборка.ДатаРождения, "ДФ=yyyy-MM-dd")+t + Стр(Выборка.УдостоверениеВид)+t + Стр(Выборка.УдостоверениеСерия)+t + Стр(Выборка.УдостоверениеНомер)+t + Формат(Выборка.УдостоверениеДатаВыдачи, "ДФ=yyyy-MM-dd")+t + Стр(Выборка.УдостоверениеКемВыдано)+t + Формат(Выборка.ДатаПрописки, "ДФ=yyyy-MM-dd")+t + Формат(Выборка.ДатаВыписки, "ДФ=yyyy-MM-dd")+t; Объект.Текст.ДобавитьСтроку(Строка); КонецЦикла; |
|||
37
anaed
13.09.13
✎
14:52
|
и лучше послушать (35)
|
|||
38
елкина
13.09.13
✎
15:06
|
ну не все же сразу научились ходить и рождаемся мы не с 32 зубами.... я только учусь.
|
|||
39
елкина
13.09.13
✎
15:09
|
все я сделала как вы написали ....но ошибка никуда не делась...да и то что я написала не очень отличается от вашего 8(
|
|||
40
catena
13.09.13
✎
15:39
|
(39)В том-то и дело, что отличается не очень, а влияет очень. И копи-пастить с форума - это не учиться.
А в тексте ошибки как правило есть много дополнительной информации. |
|||
41
елкина
13.09.13
✎
15:42
|
ладно. буду думать ну спасибо хоть так помогли.
|
|||
42
елкина
13.09.13
✎
16:01
|
Все разобралась ...... из за одного + вся заварушка все заработало громадное вам спасибо за советы.
|
|||
43
Infsams654
13.09.13
✎
16:16
|
(32) в паспорте РФ есть 3 поля: Фамилия, Имя, Отчество. Как разбивать "Мария де Монтсеррат Вивиана Консепсьон Кабалье-и-Фо" в эти поля - хз...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |