8.х Посимвольный перебор

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

  1. TopicStarter Overlay
    Nykos
    Offline

    Nykos

    Регистрация:
    6 сен 2013
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Всем привет. Помогите, пожалуйста, написать условие, при котором строка Кода вида "4.10.1"
    будет преобразована в "041001". Т.е. так, чтобы до точки или между точками или после точки было два символа. Если один символ - дополнять нулем слева до двух символов. А сами точки убрать. Теоретически как это сделать понимаю, а практически ну никак добиться не могу(
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
  3. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    попробуйте вот так. Может и окольный путь, но вроде работает
    Код:
    стр = "4.10.1";
    с = ""; тмп = "";
    Пока СтрДлина(стр) > 0 Цикл
    Если Лев(стр, 1) = "." Тогда
    с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
    тмп = "";
    Иначе
    тмп = тмп + Лев(стр, 1);
    КонецЕсли;
    стр = Прав(стр, СтрДлина(стр) - 1);
    КонецЦикла;
    с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
    
    Сообщить(с);
    
  4. TopicStarter Overlay
    Nykos
    Offline

    Nykos

    Регистрация:
    6 сен 2013
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Класс, спасибо. работает. Только выводит конкретный результат стр = "4.10.1"; в служебное сообщение. А мне надо сделать это в справочнике, где поле Код имеет вид:

    [​IMG]

    и я хочу преобразовать такой вид в тот который я упомянул выше... например "1.1.1" = "010101", "1.1.12" = "010112", "4.10.1" = "041001" ну и так далее. В справочнике это все. Как-то через внешнюю обработку запихнуть может?
  5. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну дак если посмотрите, то эта конкретная строка в процедуру забита. Вам надо было код адаптировать, ну или сразу всю задачу надо было высказывать. Я же не телепат

    Выложить файл не могу попробую обЪяснить, что сделала. Я создала внешнюю обработку, добавила в нее Таб часть ТЧ1 с реквизитами СпрЭлем (Тип СправочникСсылка.ВашСправочник) и Результат (Тип Строка). На обработтчик кнопки Выполнить повесила вот такой код

    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    спрВыборка = Справочники.ВашСправочник.Выбрать(); //ну или всою выборку создавайте, которую вам преобразовать надо
    Пока спрВыборка.Следующий() Цикл
    стр = спрВыборка.Код;
    с = ""; тмп = "";
    Пока СтрДлина(стр) > 0 Цикл
    Если Лев(стр, 1) = "." Тогда
    с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
    тмп = "";
    Иначе
    тмп = тмп + Лев(стр, 1);
    КонецЕсли;
    стр = Прав(стр, СтрДлина(стр) - 1);
    КонецЦикла;
    с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
    
    нс = ТЧ1.Добавить();
    нс.СпрЭлем = спрВыборка.Ссылка;
    нс.Результат = с;
    
    КонецЦикла;
    ЭтаФорма.Обновить();
    
    КонецПроцедуры
  6. TopicStarter Overlay
    Nykos
    Offline

    Nykos

    Регистрация:
    6 сен 2013
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Все сделал как сказано, но ругается на то, что переменная ТЧ1 не определена.
  7. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я вам описала порядок действий. ТЧ - это табличная часть моей обработки. Вы программист? Адаптируйте под себя представленный код
  8. TopicStarter Overlay
    Nykos
    Offline

    Nykos

    Регистрация:
    6 сен 2013
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    спасибо)
  9. TopicStarter Overlay
    Nykos
    Offline

    Nykos

    Регистрация:
    6 сен 2013
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Как-то так. Всем спасибо за помощь.

    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)  
    Запрос = Новый Запрос("ВЫБРАТЬ
    | Прейскурант.Ссылка
    |ИЗ
    | Справочник.Прейскурант КАК Прейскурант");  
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    Объект = Результат.Ссылка.ПолучитьОбъект();
    стр = Объект.НомерРасценки;
    с = ""; тмп = "";
    Пока СтрДлина(стр) > 0 Цикл
    Если Лев(стр, 1) = "." Тогда
    с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
    тмп = "";
    Иначе
    тмп = тмп + Лев(стр, 1);
    КонецЕсли;
    стр = Прав(стр, СтрДлина(стр) - 1);
    КонецЦикла;
    с = с + ?(СтрДлина(тмп) = 2, тмп, ?(СтрДлина(тмп) = 1, "0" + тмп, "00"));
    Объект.НомерРасценки = с;
    Объект.Записать();
    КонецЦикла;
    ЭтаФорма.Обновить();
    КонецПроцедуры
    
    Без ТЧ.
  10. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот процесс пошел. Хорошо!

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