|
Как подсчитать кол-во пробелов в полученных данных | ☑ | ||
---|---|---|---|---|
0
Grinpic
02.09.15
✎
12:01
|
Здравствуйте!
Версия 1с 8.3 Мне необходимо подсчитывать колличество пробелов в данных взятых из dbf, а точнее именно поля FIO, в базе данных имеется -Фамилия Имя - мне нужно сделать условие, что если Фамилия Имя =1 пробел тогда добавить + "Отчество", Если из базы Пришло Фамилия тогда добавить +"Имя" + "Отчество",ну а условие на то что если не пришло ничего уже есть Вот сам код: Если операция.SDeb = "В подотчет" тогда НовыйДок.ВидОперации = Перечисления.ВидыОперацийРКО.ВыдачаПодотчетномуЛицу; НовыйДок.Выдать = ПоискФ(операция.FIO); НовыйДок.Комментарий = операция.Komm; НовыйДок.СуммаДокумента = операция.Summ; НовыйДок.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000002"); НовыйДок.СчетКасса = ПланыСчетов.Хозрасчетный.Касса; //Добавляем контрагента, если нет в базе - создаем Если ПоискФ(операция.FIO)<>Справочники.ФизическиеЛица.ПустаяСсылка() Тогда НовыйДок.Контрагент = ПоискФ(операция.FIO); //Сообщить("Контрагент имеется в базе"); Иначе Если операция.FIO <> "" тогда СтрокаКон = Справочники.ФизическиеЛица.СоздатьЭлемент(); СтрокаКон.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Новые контрагенты"); СтрокаКон.ФИО = операция.FIO; СтрокаКон.ИНН = операция.INN; СтрокаКон.Записать(); НовыйДок.Контрагент = ПоискФ(операция.FIO); Если ПоискФ(операция.FIO)<>Справочники.ФизическиеЛица.ПустаяСсылка() Тогда //Сообщить("Контрагент добавился в базу"); Иначе Сообщить ("Ошибка физ лицо не добавилось"); КонецЕсли; Иначе Сообщить("Нет FIO в ptov.dbf документ " + операция.Nnom + " не будет проведен"); КонецЕсли; КонецЕсли; КонецЕсли; Прошу вашей помощи! |
|||
1
Simod
02.09.15
✎
12:07
|
См. СП: СтрЧислоВхождений()
|
|||
2
Grinpic
02.09.15
✎
12:12
|
(1) Благодарю, сейчас испробую!
|
|||
3
Simod
02.09.15
✎
12:25
|
Код конечно трэшевый:
1) Многократно вызывается функция ПоискФ(); 2) Не проверяются результаты НайтиПоКоду(), НайтиПоНаименованию(). Да и вообще их не должно быть: либо предопределенные элементы, либо реквизиты на форме обработки (с проверкой выбора), либо еще как-то сохраненные ССЫЛКА на объекты; 3) После СтрокаКон.Записать() у тебя есть ссылка на элемент. Искать по ФИО через ПоискФ() не надо; 4) Прверку операция.FIO <> "" надо выполнять в первую очередь; ФИО м/б в формате Иванов[][]Иван - 2 пробела, поэтому надо предварительно обработать: ФИО = СокрЛП(ФИО); Пока СтрНайти(ФИО, " ") > 0 Цикла ФИО = СтрЗаменить(ФИО, " ", " "); КонецЦикла; Ну и по-мелочи еще много.. |
|||
4
Grinpic
02.09.15
✎
12:59
|
Использую НайтиПоКоду(), НайтиПоНаименованию() т.к. мне нужно получить ссылку
Так же в поле контрагент мне нужно получить ссылку физического лица, поэтому я и ищу по реквизиту в функции: Функция ПоискФ(FIO) //Поиск физ лица Контрагент = Справочники.ФизическиеЛица; НайденнаяСсылка = Контрагент.НайтиПоРеквизиту("ФИО", FIO); Если НайденнаяСсылка <> Контрагент.ПустаяСсылка() Тогда Возврат НайденнаяСсылка; Иначе Возврат НайденнаяСсылка; КонецЕсли; КонецФункции 3) После СтрокаКон.Записать() у тебя есть ссылка на элемент. Искать по ФИО через ПоискФ() не надо - А как мне добавить в поле ссылку на данное физическое лицо, понятно что нужно поменять т.к. я уже изменил поле и сравнивать его с базой смысла нет, вот что добавил: Если операция.FIO <> "" тогда СтрокаКон = Справочники.ФизическиеЛица.СоздатьЭлемент(); СтрокаКон.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Новые контрагенты"); СтрокаКон.ФИО = операция.FIO; Если СтрЧислоВхождений(СтрокаКон.ФИО," ")=1 тогда СтрокаКон.ФИО = операция.FIO + " Отчество"; КонецЕсли; Если СтрЧислоВхождений(СтрокаКон.ФИО," ")=0 тогда СтрокаКон.ФИО = операция.FIO + " Имя"+" Отчество"; КонецЕсли; FIO = СтрокаКон.ФИО; СтрокаКон.ИНН = операция.INN; СтрокаКон.Записать(); НовыйДок.Контрагент = ПоискФ(FIO); |
|||
5
Simod
02.09.15
✎
14:29
|
(4)
3) СтрокаКон.Записать(); НовыйДок.Контрагент = СтрокаКон.Ссылка; Привыкай сразу давать нормальные имена переменным: Контрагент = Справочники.ФизическиеЛица; |
|||
6
Grinpic
02.09.15
✎
15:28
|
(5) Учту, использовал это наименование т.к. поле в документе называется "Контрагент", а так оно для физ лиц, немного оптимизировал код поставил переменные для функции поиска во всем коде, благодарю!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |