Имя: Пароль:
1C
 
Разложить строку на составляющие
0 amadeus2010
 
09.01.15
02:21
Доброй ночи в справочнике Контрагенты, конфигурация УТ 10.3 есть измененный реквизит Наименование в который путем объединения строк записывается наименование контрагента
Наименование = ТорговаяТочка+Символы.НПП+"-"+Символы.НПП+"("+КонтактноеЛицо+"/"+Телефон+")"+Символы.НПП+"["+ИНН+"]"+Символы.НПП+"{"+ГрафикПосещений+ГрафикПосещений2+"}";

Результат процедуры
Ailə Market - (Səbri  / 050-535-87-01) [1001011]  {1о2х3о4о5о6о}

Были созданы соответствующие реквизиты. Теперь надо в каждый реквизит поставить свое значение. В Торговую точку надо вложить значение Торговая точка, в ИНН значение ИНН и т.д

Я создал такую процедуру
//////////////////////////////////////////
Процедура ДействияФормыРазбитьПоЧастям(Кнопка) //Дима+
        
    Если Не ПустаяСтрока(Наименование) Тогда
        
         ТорговаяТочка = Лев(Наименование, 1);
         КонтактноеЛицо = Лев(Наименование, 6);
         Телефон = Лев(Наименование, 10);
         ГрафикПосещений = Прав(Наименование, 3);
         ГрафикПосещений2 = Прав(Наименование, 2);
         Маршрут = Лев(ИНН, 1);
         Маршрут2 = Лев(ИНН, 2);
    КонецЕсли;        
        
    
КонецПроцедуры
///////////////////////////////////////

Но у меня данные располагаются в строках не верно. В Маршрут вместо 1001011 заносится 1 а не целое значение и так с другими строками
1 Zhuravlik
 
09.01.15
02:42
выспись :)
2 amadeus2010
 
09.01.15
03:11
выспаться можно, но задача остается то:)
3 Галахад
 
гуру
09.01.15
05:10
ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок
4 hhhh
 
09.01.15
07:31
(2) Маршрут = Лев(ИНН, 1); - вы выбираете 1 символ из ИНН. Откуда вдруг длинная строка должна появиться?
5 Рэйв
 
09.01.15
07:35
Функция ИзСтрокиСРазделителями(Значение,Разделитель = ",") Экспорт
    
    Если ТипЗнч(Значение)<>Тип("Строка") Тогда    
        Сообщить("Функция ИзСтрокиСРазделителями.Некорректный вызов.Переданное значение должно быть строкой.");
        Возврат Неопределено;
    КонецЕсли;    
    спЗначения=Новый СписокЗначений;
    Если Найти(Значение,Разделитель)=0 Тогда
        //Сообщить("Функция ИзСтрокиСРазделителями.В переданном значении("""+Значение+""") нет ни одного указанного разделителя("""+Разделитель+""").");
        спЗначения.Добавить(Значение);
        Возврат спЗначения;
    КонецЕсли;    
    
    ЗначениеРазбитое=СтрЗаменить(Значение,Разделитель,Символы.ПС);
    Для н=1 По СтрЧислоСтрок(ЗначениеРазбитое) Цикл
        спЗначения.Добавить(СтрПолучитьСтроку(ЗначениеРазбитое,н));
    КонецЦикла;    
    Возврат спЗначения;
    
КонецФункции//ИзСтрокиСРазделителями
6 amadeus2010
 
09.01.15
23:22
насколько я понял в Значение надо поставить наименование реквизита
7 amadeus2010
 
10.01.15
02:15
Пытаюсь при помощи функции
/////////////////////////////////
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",",
    Знач ПропускатьПустыеСтроки = Неопределено)

    Результат = Новый Массив;

    // для обеспечения обратной совместимости
    Если ПропускатьПустыеСтроки = Неопределено Тогда
        ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
        Если ПустаяСтрока(Строка) Тогда
            Если Разделитель = " " Тогда
                Результат.Добавить("");
            КонецЕсли;
            Возврат Результат;
        КонецЕсли;
    КонецЕсли;
    //

    Позиция = Найти(Строка, Разделитель);
    Пока Позиция > 0 Цикл
        Подстрока = Лев(Строка, Позиция - 1);
        Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
            Результат.Добавить(Подстрока);
        КонецЕсли;
        Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
        Позиция = Найти(Строка, Разделитель);
    КонецЦикла;

    Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
        Результат.Добавить(Строка);
    КонецЕсли;

    Возврат Результат;

КонецФункции
/////////////////////////////////
разложить строку на подстроки, в результате в Торговая точка получаю значение Массив.
Вот подстрока
Наименование = ТорговаяТочка+Символы.НПП+"-"+Символы.НПП+"("+КонтактноеЛицо+"/"+Телефон+")"+Символы.НПП+"["+ИНН+"]"+Символы.НПП+"{"+ГрафикПосещений+ГрафикПосещений2+"}";
Из нее надо вытащить значение Торговая точка и т.д
ТорговаяТочка= РазложитьСтрокуВМассивПодстрок(Наименование);
8 Zhuravlik
 
10.01.15
02:24
МассивПодстрок= РазложитьСтрокуВМассивПодстрок(Наименование, Символы.НПП);
ТорговаяТочка = МассивПодстрок[0];
КонтактноеЛицо_Телефон = МассивПодстрок[2];

и т.д.
9 amadeus2010
 
10.01.15
11:21
(8) Дополнил предложенный код
//////////////////////////////////////////////
МассивПодстрок= РазложитьСтрокуВМассивПодстрок(Наименование, Символы.НПП);
ТорговаяТочка = МассивПодстрок[0];
КонтактноеЛицо = МассивПодстрок[1];
Телефон = МассивПодстрок[2];
ИНН = МассивПодстрок[3];
ГрафикПосещений = МассивПодстрок[4];
ГрафикПосещений2 = МассивПодстрок[5];
///////////////////////////////////////////////
вышла ошибка {Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(2751)}: Индекс находится за границами массива
КонтактноеЛицо = МассивПодстрок[1];
10 ДенисЧ
 
10.01.15
11:24
продам инструкциб по пользованию отладчиком....
11 Галахад
 
гуру
10.01.15
11:29
МассивПодстрок= РазложитьСтрокуВМассивПодстрок(Наименование, Символы.НПП);
Для Каждого М из МассивПодстрок Цикл
   Сообщить(М);
КонецЦикла;
12 Nlock
 
10.01.15
11:32
Еще вариант:
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункци
13 anatoly
 
10.01.15
12:13
зачем изобретать велосипед когда есть (3) ???
14 amadeus2010
 
10.01.15
12:18
я не собирался изобретать велосипед, мне нужно решить вопрос с разложением строки на подстроки
15 anatoly
 
10.01.15
12:25
(14) тогда позвать программиста. без него никак.
16 Zhuravlik
 
10.01.15
12:26
Интересно, как с такими знаниями можно УПП дорабатывать?..
17 amadeus2010
 
10.01.15
12:43
в доработке УПП не было необходимости делать эти задачи.