8.х Как разобрать строку на значения

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

  1. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Доброго дня коллеги..

    В общем решил всё же поделиться.. есть строка
    ?([ЗакупочнаяЦена]<50,[ЗакупочнаяЦена]*1.16,?([ЗакупочнаяЦена]<90,[ЗакупочнаяЦена]*1.8,?([ЗакупочнаяЦена]<100,[ЗакупочнаяЦена]*1.37, ?([ЗакупочнаяЦена]<200,[ЗакупочнаяЦена]*1.27,?([ЗакупочнаяЦена]<300,[ЗакупочнаяЦена]*1.25, ?([ЗакупочнаяЦена]<500,[ЗакупочнаяЦена]*1.22,?([ЗакупочнаяЦена]<1000,[ЗакупочнаяЦена]*1.13,[ЗакупочнаяЦена]*1.15)))))))

    Необходимо данную строку разложить на значения
    50 - 1.16
    90 - 1.8
    100 - 1.37
    200 - 1.27
    300 - 1.25
    500 - 1.22
    1000 - 1.13
    последний порог задаётся в общем то значением 1000000, т.е.
    1000000 - 1.15

    Пока мысль такая
    Через СтрРазделить разделяем строку через разделитель: ?([ЗакупочнаяЦена]<
    50,[ЗакупочнаяЦена]*1.16,
    90,[ЗакупочнаяЦена]*1.8,
    100,[ЗакупочнаяЦена]*1.37,
    200,[ЗакупочнаяЦена]*1.27,
    300,[ЗакупочнаяЦена]*1.25,
    500,[ЗакупочнаяЦена]*1.22,
    1000,[ЗакупочнаяЦена]*1.13,[ЗакупочнаяЦена]*1.15)))))))

    Получаю массив вышеописанных строк, до предпоследней всё не плохо и в общем то последнюю можно разобрать. Может кто поинтересней может что то предложить?
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Высчитывай позицию первого вхождения [ и удаляй количество символов равное ЗакупочнаяЦена]*
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Какой п%#$ц.
    Как разобрать - лень думать, но так на всякий случай: если я правильно представляю что там пытаешься изобразить - то в типовых это делается через справочник ("Настройка интервалов") (ну или Документ + РС ("Диапазоны цен для наценки")).
  4. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Выколите мне глаза, но я должен это увидеть в Рознице... нету.
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    upload_2015-11-23_14-9-20.png
    --- Объединение сообщений, 23 ноя 2015 ---
    upload_2015-11-23_14-11-16.png
  6. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    ам.. ну КА 1.1 я так понял это уже давно не типовая конфа, вернее типовая но старая..
    В рознице такого нет и это немного не то.. я так понял у тебя в зависимости от базовой цены устанавливается непосредственно цена, а у меня от базовой зависит наценка..
    т.е. у тебя до 100 рублей цена будет всегда 50 рублей, а у меня будет умножаться грубо говоря на 1.2 , но будет изменяться а у тебя нет.
  7. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    я то же подумал про настройку интервалов. Ну или заведи свой стправочник. а то может потом придется допиливать тебе вдруг диапазоны поменяются или еще что
  8. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так там настройка интервалов и есть.

    Брр.. Зачем прям буквально все воспринимать? Ок. Зачем хранить там цену? храни 1.16, 1.8, 1.37 и тд. Что меняется?
  9. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Если нет заведи справочник Начало интервала конецу интервала - наценка
    Затем когда надо из этого лемента справочника нашел значение подставил.
    причем если надо можешь несколько шкал завести.
    Сегодян продаешь по Нормальной наценке, завтра по Оптимальной, послезавтра Наценка для антимонопольной службы где мы гладкие и пушистые
    --- Объединение сообщений, 23 ноя 2015 ---
    и не надо каждый раз код переписывать
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Лично я согласен с shurikvz в плане того, что лучше сделать РС/справочник с настройками и распарсить текущие настройки в виде строки один раз, а не делать это постоянно.
  11. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да это уже сделано в других конфах. называется справочник Настройки интрвалов. где элемент справочника - это шкала.
    можешь сразу несколько шкал делать. а потом в зависимоси от ситуации использовать ту или иную
  12. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Справочник, документ , регистр сведений, обработка .. какая разница?
    Формула хранится в справочнике Вид цены. и чтобы использовать типовой механизм как не крути необходимо в справочник вид цен записывать эту формулу..
    Какая разница кто будет её генерировать и писать в справочник?
    --- Объединение сообщений, 23 ноя 2015 ---
    Блин я до вас хочу донести что в тех конфигурациях в которых этот справочник есть , они и заточены под работу с ним. А в Рознице нет такого, ей дай строку что я опубликовал и всё.
    Что мне даст справочник? Ну занесу я туда эти интервалы с коэффициентами, что дальше? переписывать модуль ценообразования чтобы он юзал этот справочник? Зачем, если я могу обойтись типовым механизмом?
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Разница в том, что формулы будут много проще, чем в данный момент.

    По поводу самого алгоритма, повторюсь: мне почему-то кажется, что парсить с конца строки будет удобнее в плане создания шаблона условия, но основной принцип парсера ты описал сам.
  14. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Как они могут быть проще?
    Насчёт как парсить я уже кодю, там всё норм. уже, что получится выложу)
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Да блин

    ?([ЗакупочнаяЦена]<50,[ЗакупочнаяЦена]*1.16,?([ЗакупочнаяЦена]<90,[ЗакупочнаяЦена]*1.8,?([ЗакупочнаяЦена]<100,[ЗакупочнаяЦена]*1.37, ?([ЗакупочнаяЦена]<200,[ЗакупочнаяЦена]*1.27,?([ЗакупочнаяЦена]<300,[ЗакупочнаяЦена]*1.25, ?([ЗакупочнаяЦена]<500,[ЗакупочнаяЦена]*1.22,?([ЗакупочнаяЦена]<1000,[ЗакупочнаяЦена]*1.13,[ЗакупочнаяЦена]*1.15)))))))

    ничуть не проще, чем

    Выбрать Коэффициент Из Справочник.НастройкиИнтервалов.Интервалы Где &Значение МЕЖДУ ЗначениеОт и ЗначениеДО

    или

    Выбрать ФормулаРасчета Из Справочник.НастройкиИнтервалов.Интервалы Где &Значение МЕЖДУ ЗначениеОт и ЗначениеДО

    :)
  16. TopicStarter Overlay
    TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Да блин ничего не проще Вадим. Я написал внешнюю обработку и всё.. конфу вообще не трогал.. вот в чём разница.. и что там внутри будет не так страшно ибо конфа не задета, а выглядить это будет мило,
    [​IMG]
    и без доработок конфигурации

    Код:
        Пока ЗначениеЗаполнено(Формула) Цикл
            ВхождениеСравнения = 0;
            ВхождениеУмножения = 0;
            Порог =0;
            Наценка = 0;
            ВхождениеСравнения =  Найти(Формула,"<");
            Если ВхождениеСравнения <> 0 Тогда
                Формула = Прав(Формула,СтрДлина(Формула)-ВхождениеСравнения);
                Порог = Сред(Формула,1,Найти(Формула,",")-1);
                Формула = Прав(Формула,СтрДлина(Формула)-Найти(Формула,"*"));
                Наценка = Сред(Формула,1,Найти(Формула,",")-1)*100-100;
                СтрТаблицы = ТабличнаяЧастьПорогиЦенообразования.Добавить();
                СтрТаблицы.Порог = Порог;
                СтрТаблицы.Наценка= Наценка;
            Иначе
                СтрТаблицы = ТабличнаяЧастьПорогиЦенообразования.Добавить();
                Формула = Прав(Формула,СтрДлина(Формула)-Найти(Формула,"*"));
                СтрТаблицы.Порог = 1000000;
                СтрТаблицы.Наценка= (Лев(Формула,Найти(Формула,")")-1))*100-100;
                Формула = "";
            КонецЕсли;   
        КонецЦикла

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