7.7 Замена

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Natalia_k, 27 июн 2012.

  1. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Добрый день!

    Подскажите, пожалуйста, как из названия вытащить только номер.

    То есть, есть наименование "Отдел внутренних дел N 2666 Нижегородской области", а нужно, чтобы вытаскивались данные "N 2666" и дописывалось слово "ОТДЕЛЕНИЕ N 2666"

    Исходное наименование может быть разной длины, берется из
    Код:
    ПлПоруч.Контрагент.ПолнНаименование
    Пробовала как-нибудь применить функцию найти, но не знаю, как правильно её применить

    Код:
    ДБСБ.A= Сред(СокрЛП(ПлПоруч.Контрагент.ПолнНаименование),1,Найти(СокрЛП(ПлПоруч.Контрагент.ПолнНаименование)," N")+2); 
    Подскажите, пожалуйста
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Если в наименовании нет других цифр то так
    Код:
    имя="что то подобное 8844 мы используем";
    Цифры="";
    Для к=1 По СтрДлина(Имя) Цикл
    с=Сред(Имя,к,1);
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    Цифры=Цифры+С;
    КонецЕсли; 
    КонецЦикла;
    
    Сообщить("Из имени выделены цифры "+Цифры);
    
  3. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Чуть-чуть не то.

    У меня, если просто написать
    Код:
    ДБСБ.A=СокрЛП(ПлПоруч.Контрагент.ПолнНаименование);
    , то выведется наименование "Отдел внутренних дел N 2666 Нижегородской области"
    А нужно , чтобы сразу отсекалось все не нужное в наименовании и оставалось "ОТДЕЛЕНИЕ N 2666" и присваивалось переменной ДБСБ.A=
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    а так:
    Код:
    //смотрим цикл выше
    Если ПустоеЗначение(Цифры)=0 Тогда //есть какие-то цифры в наименовании
    ДБСБ.А="Отделение № "+Цифры ;
    Иначе //нету - присваиваем просто имя
    ДБСБ.А=Имя;
    КонецЕсли;
    
  5. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    так всё хорошо, но почему цифры записываются вместо 29, например, в Отделение № 29002900029
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а из какой строки такое получается?
  7. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26

    Цифры=Цифры+С;
  8. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    код то я посмотрела, меня интерисует какая исходная строка у вас, а не в коде ну "Отделение .....№......" из которой вам надо получить "Отделение№"
  9. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Например, такая "Отдел внутренних дел N 29 Нижегородской области"
  10. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Приведите тут ВАШ код.
    Походу, вы просто где-то в цикле формируете итоговую строку, а ее нужно формировать вне цикла.
  11. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Код:
    ДБСБ.A=СокрЛП(ПлПоруч.Контрагент.ПолнНаименование);
    Цифры="";
    Для к=1 По СтрДлина(ДБСБ.A) Цикл
    с=Сред(ДБСБ.A,к,1);
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    Цифры= Цифры;
    КонецЕсли;
    КонецЦикла;
    Если ПустоеЗначение(Цифры)=0 Тогда //есть какие-то цифры в наименовании
    ДБСБ.A="Отделение № "+ Цифры;
    Иначе //нету - присваиваем просто имя
    ДБСБ.A=ПлПоруч.Контрагент.ПолнНаименование;
    КонецЕсли;
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    вот здесь косяк
    Код:
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    Цифры= Цифры+С;
    КонецЕсли;
    
  13. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    Это я уже поняла, а как исправить?

    При таком написании
    Код:
    Цифры= Цифры+С; 
    у меня данные выгружаются в формат dbf в виде Отделение № 29002900029
    Хотя на самом деле, там цифра 29
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Значит все же не обнуляете переменную. выложите обработку полностью. В виде файла
  15. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    какую переменную?
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Цифры.... раз получается 290029... значит не обнуляете и идет присвоение к предыдущему номеру
  17. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    так, наверное, коллеги
    [code1C]
    ДБСБ.A=СокрЛП(ПлПоруч.Контрагент.ПолнНаименование);
    Цифры="";
    БылиЦифры = 0;
    Для к=1 По СтрДлина(ДБСБ.A) Цикл
    с=Сред(ДБСБ.A,к,1);
    Если БылиЦифры = 0 Тогда
    Цифры = Цифры+с;
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    БылиЦифры = 1;
    КонецЕсли;
    Иначе
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    Цифры = Цифры+с;
    Иначе
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    ДБСБ.A=Цифры
    [/code1C]

    еще.. парсить ДБСБ.A вместо переменной моветон
  18. TopicStarter Overlay
    Natalia_k
    Offline

    Natalia_k Опытный в 1С

    Регистрация:
    8 сен 2009
    Сообщения:
    153
    Симпатии:
    0
    Баллы:
    26
    а в этом случае, он хватает и слова из фразы

    "ОСБ № 0058"
    "ТОМСКОЕ ОСБ N 8616"
  19. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    конечно, слова до окончания цифр.. если нужны только цифры.. тогда код был уже указан выше http://www.1c-pro.ru...post__p__221978 с заменой на Цифры= Цифры+с; будет тянуть все цифры указанные в строке.. если нужны только первые цифры:
    [code1C]
    ПолнНаименование = СокрЛП(ПлПоруч.Контрагент.ПолнНаименование);
    Цифры="";
    БылиЦифры = 0;

    Для к=1 По СтрДлина(ПолнНаименование) Цикл
    с=Сред(ПолнНаименование,к,1);
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    Цифры = Цифры+с;
    БылиЦифры = 1;
    Иначе
    Если БылиЦифры = 1 Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Если ПустоеЗначение(Цифры)=0 Тогда //есть какие-то цифры в наименовании
    ДБСБ.A="Отделение № "+ Цифры;
    Иначе //нету - присваиваем просто имя
    ДБСБ.A=ПолнНаименование;
    КонецЕсли;


    [/code1C]
  20. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    [code1C]
    ПолнНаименование = СокрЛП(ПлПоруч.Контрагент.ПолнНаименование);
    Цифры="";
    БылиЦифры = 0;
    Для к=1 По СтрДлина(ПолнНаименование) Цикл
    с=Сред(ПолнНаименование,к,1);
    Если (КодСимв(с)>=48)И(КодСимв(с)<=57) Тогда
    Цифры = Цифры+с;
    БылиЦифры = 1;
    Иначе
    Если БылиЦифры = 1 Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Если ПустоеЗначение(Цифры)=0 Тогда //есть какие-то цифры в наименовании
    ДБСБ.A="Отделение № "+ Цифры;
    Иначе //нету - присваиваем просто имя
    ДБСБ.A=ПолнНаименование;
    КонецЕсли;
    [/code1C]
Похожие темы
  1. vitalan
    Ответов:
    1
    Просмотров:
    489
  2. atomix878
    Ответов:
    2
    Просмотров:
    292
  3. mARqpey
    Ответов:
    2
    Просмотров:
    2.239
Загрузка...

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