8.х Перенос ФИО в регистр

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Vadimok, 25 дек 2007.

  1. TopicStarter Overlay
    Vadimok
    Offline

    Vadimok

    Регистрация:
    23 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    В 7 базе ФИО храниться одной строкой а в 8 оно храниться в регистре и трех строчках.
    Как ФИО разложить на три строки и занести в регистр.
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1.
    Код:
    РазложитьСтрокуВМассив(...) // что-то в этом духе
    
    2.
    Код:
    НоваяЗапись = РегистрыСведений.ФИОФизЛиц.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.ФизЛицо = <НашеФизЛицо>;
    НоваяЗапись.Фамилия = <НашаФамилия>;
    ....
    ...
    НоваяЗапись.Записать();
    
  3. TopicStarter Overlay
    Vadimok
    Offline

    Vadimok

    Регистрация:
    23 ноя 2007
    Сообщения:
    27
    Симпатии:
    0
    Баллы:
    1
    Можно по подробней, а то я не понел
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Разбиваете строку на лексемы (ФИО) и записываете в регистр :)
    Если мой пример непонятен - то я не знаю - попробуйте на курсы сходить - благо неособо дорого :)

    ЗЫ. Вы конкретно скажите - в чем проблема?
  5. Devdred
    Offline

    Devdred

    Регистрация:
    20 янв 2008
    Сообщения:
    17
    Симпатии:
    0
    Баллы:
    1
    Поздно конечно но вот как это было конкретно у меня :unsure:
    Код:
                РегФИО = РегистрыСведений.ФИОФизЛиц.СоздатьНаборЗаписей();
    РегФИО.Отбор.ФизЛицо.Значение=СпрОбъект;
    РегФИО.Отбор.Период.Значение='19900101 00:00:00';
    РегФИО.Отбор.ФизЛицо.Использование=Истина;
    РегФИО.Отбор.Период.Использование=Истина;
    РегФИО.Прочитать();
    Если РегФИО.Выбран() и РегФИО.Количество()>0 Тогда    // В регистре сведений есть запись по челу
    Движение=РегФИО[0];
    Иначе                            // Добавим в регистр сведений
    Движение=РегФИО.Добавить();       
    Движение.ФизЛицо=СпрОбъект;
    Движение.Период='19900101 00:00:00';
    КонецЕсли;
    ФИО = Спр7.Наименование;
    
    Движение.Фамилия  = ВыделитьСлово(ФИО);
    Движение.Имя      = ВыделитьСлово(ФИО);
    Движение.Отчество = ВыделитьСлово(ФИО);
    РегФИО.Записать(Истина);
    
    
    Собственно сама процедура:
    Код:
    Функция ВыделитьСлово(ИсходнаяСтрока, Пробел = " ")
    
    Буфер = СокрЛ(ИсходнаяСтрока);
    ПозицияПослПробела = Найти(Буфер, Пробел);
    
    Если ПозицияПослПробела = 0 Тогда
    ИсходнаяСтрока = "";
    Возврат Буфер;
    КонецЕсли;
    
    ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела));
    ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
    
    Возврат ВыделенноеСлово;
    
    КонецФункции
    
    
    В общем то это один из вариантов на скорую руку
    Вот как вариант еще пример:
    Код:
        СтрНаим    =СтрЗаменить(Спр7.Наименование,",",Символы.ПС);
    Результат.Фамилия    =СтрПолучитьСтроку(СтрНаим,1));
    Результат.Имя        =СтрПолучитьСтроку(СтрНаим,2);
    Результат.Очество    =СтрПолучитьСтроку(СтрНаим,3);
    
    
    Метод не лишен недостатков... В конфигураторе в модуле управление персоналом кажись видел пару функций, не помню их названий можно посмотреть по ссылкам из формы справочника ФизическиеЛица.
  6. andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26

    ГЫ: А если в ФИО 5 слов?:)
  7. Amber
    Offline

    Amber Опытный в 1С

    Регистрация:
    16 ноя 2007
    Сообщения:
    98
    Симпатии:
    0
    Баллы:
    26
    А что мешает использовать процедуру "Разложить строку в массив подстрок". Есть определенные неудобства, зато универсальность на лицо. Должна быть в любой стандартной конфигеь..но на всякий случай
    Код:
    Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") 
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
    Стр = СокрЛП(Стр);
    Пока 1=1 Цикл
    Поз = Найти(Стр,Разделитель);
    Если Поз=0 Тогда
    МассивСтрок.Добавить(Стр);
    Возврат МассивСтрок;
    КонецЕсли;
    МассивСтрок.Добавить(Лев(Стр,Поз-1));
    Стр = СокрЛ(Сред(Стр,Поз));
    КонецЦикла;
    Иначе
    ДлинаРазделителя = СтрДлина(Разделитель);
    Пока 1=1 Цикл
    Поз = Найти(Стр,Разделитель);
    Если Поз=0 Тогда
    МассивСтрок.Добавить(Стр);
    Возврат МассивСтрок;
    КонецЕсли;
    МассивСтрок.Добавить(Лев(Стр,Поз-1));
    Стр = Сред(Стр,Поз+ДлинаРазделителя);
    КонецЦикла;
    КонецЕсли;
    КонецФункции 
    
    
  8. andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26

    И я о томже.
    А заодно выравнять заглавные символы, и убрать все лишние знаки.

Поделиться этой страницей