7.7 Разбить данные реквизита справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Flageolet, 23 дек 2008.

  1. TopicStarter Overlay
    Flageolet
    Offline

    Flageolet

    Регистрация:
    11 дек 2008
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    Есть реквизит справочника телефон, поле не органиченной длины, вносились данные сотовых, городских телефонов, через запятую, телефоны, номера телефонов через тире, пробел и т.д.. Необходимо разбить этот реквизит на два реквизита, где вносились бы данные в одном сотовые телефоны, в другом домашние телефоны. Поля с размером 11 и 7 симоволов соответственно.
    Была сдела обработка, при которой данные из ячейке Телефон имевшие размер 7 и 11 симоволов переносит в соответствующие ячейки.
    Подскажите, пажалуйста, какие-нибудь варианыты как можно еще больше вытащить данные, которые не введенные не корректно.
  2. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Непаханное поле для творчества :) Нужно смотреть, что и как заносилось, куча нюансов всяких.
    В помощь код написал такой:
    Код:
        //Предполагаем, что все телефоны разделены запятыми и внутри записи одного телефона запятых нет
    СтрокаТелефонов = СокрЛП(РеквизитСНомерамиТелефонов);
    //Заполним список ненужными символами
    СписокУдаляемыхСимволов = СоздатьОбъект("СписокЗначений");
    СписокУдаляемыхСимволов.ДобавитьЗначение(" ");
    СписокУдаляемыхСимволов.ДобавитьЗначение("(");
    СписокУдаляемыхСимволов.ДобавитьЗначение(")");
    СписокУдаляемыхСимволов.ДобавитьЗначение("-");
    // и т.д. Все ненужные символы, которые могут встретиться
    
    //Удалим ненужные символы из строки с телефонами
    Для А = 1 По СписокУдаляемыхСимволов.РазмерСписка() Цикл
    СтрокаТелефонов = СтрЗаменить(СтрокаТелефонов,СписокУдаляемыхСимволов.ПолучитьЗначение(А),"");
    КонецЦикла;
    //Проверим, осталось ли что-нибудь
    Если СтрДлина(СтрокаТелефонов)=0 Тогда
    Сообщить("Номера телефонов не найдены");
    Возврат;
    КонецЕсли;
    //Засунем для удобства в конец строки запятую
    СтрокаТелефонов = СтрокаТелефонов+",";
    //На всякий случай проверим пары запятых
    Пока Найти(СтрокаТелефонов,",,")>0 Цикл
    СтрокаТелефонов = СтрЗаменить(СтрокаТелефонов,",,",",");
    КонецЦикла;
    //Если спереди есть запятая, ее нужно убрать
    Если Лев(СтрокаТелефонов,1)="," Тогда
    СтрокаТелефонов = Сред(СтрокаТелефонов,2);
    КонецЕсли;
    //Разберем строку на номера телефонов
    Для А = 1 По СтрЧислоВхождений(СтрокаТелефонов,",") Цикл
    НомерПозицииЗапятой = Найти(СтрокаТелефонов,",");
    НомерТелефона = Лев(СтрокаТелефонов,НомерПозицииЗапятой-1);
    СтрокаТелефонов = Сред(СтрокаТелефонов,НомерПозицииЗапятой+1);
    
    //Проверим, что за телефон получили
    Если СтрДлина(НомерТелефона)=7 Тогда
    Сообщить("Городской номер: "+НомерТелефона);
    //Номер городской, записываем куда надо
    ИначеЕсли СтрДлина(НомерТелефона)=11 Тогда
    Сообщить("Сотовый номер: "+НомерТелефона);
    //Номер сотовый, пишем в другое место
    Иначе
    Сообщить("Найден непонятный номер "+НомерТелефона);
    //Действия с этим номером
    КонецЕсли;
    КонецЦикла;
    
    
    
    Повторюсь, нужно смотреть на конкретные примеры, так сложно универсальное что-то написать. В цикле еще можно счетчик завести на проверку количества телефонов, вдруг их не два, а больше введено.

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