Книга знаний

1С:Предприятие / v8 / Приемы программирования / Формы

v8: Методика переопределения обработчиков событий формы и элементов формы

Каждый из нас хотя бы раз задумывался над тем, как было бы удобно, если бы мы могли переопределять обработчики событий формы и элементов формы, сохраняя возможность вызова старого обработчика независимо от его имени.Автор статьи: TormozIT | Редакторы: Гений 1С,
Последняя редакция №57 от 15.07.06 | История
URL: http://kb.mista.ru/article.php?id=268

Ключевые слова: методика, обработчик, событие, вызов, форма, элемент, обновление, переопределение, типовая, замена


Выражаю большу признательность одному из умнейших, Гению 1С, за использование его материалов на Книга знаний: v8: Полный парсинг для глобальной обработки событий (ГОС)


Обсуждение: v8: Методика переопределения обработчиков событий формы и элементов формы

Например, есть конфигурация, которая является доработанной типовой. Вы ее постоянно обновляете и добавляете все больше своих изменений. Обновлять в общем случае с каждым разом становится все труднее и дольше. Заметную часть ваший доработок составляют вставки в начало и конец обработчиков событий формы и элементов формы. А также новые обработчики, которые некоторые еще и назначают в режиме редактирования конфигурации (статически), что дополнительно затрудняет процесс обновления.
 
Предлагаемый метод состоит в том, чтобы объявить в модуле формы свои обработчики событий, которые будут вызывать старые обработчики и выполнять нужный код до и после этого вызова. Установка новых обработчиков будет производиться в разделе операторов основной программы формы путем вызова общей процедуры, скажем "УстановитьДействиеФормы". Эта процедура в динамически добавленном невидимом элементе формы будет сохранять все старые обработчики для каждого переопределенного события, что позволит довольно просто вызывать их через общую функцию, скажем "ПолучитьСтароеДействиеФормы". Следуя рекомендациям 1С, а также для удобства возьмем за правило: имена новых обработчиков следует формировать как <Префикс>[<ИмяЭлементаФормы>][<ИмяЭлементаУправления]<ИмяСобытия> и параметры их называть стандартно.

Случай 1. Добавляем вставку в начало и конец имеющихся в типовой обработчика события формы и обработчика события элемента формы.


Обычно делают примерно так.
// Процедура - обработчик события "ПередОткрытием" формы.
//
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

    // {{Добавил TormozIT 23.03.2006
    <Текст вставки в начало обработчика>
    // }}Добавил TormozIT 23.03.2006

    <Текст тела типового обработчика>

    // {{Добавил TormozIT 23.03.2006
    <Текст вставки в конец  обработчика>
    // }}Добавил TormozIT 23.03.2006
 
КонецПроцедуры // ПередОткрытием()

// Процедура - обработчик события "ПриИзменении" поля ввода "Склад"
//
Процедура СкладПриИзмененииВыбора(Элемент)

    // {{Добавил TormozIT 23.03.2006
    <Текст вставки в начало обработчика>
    // }}Добавил TormozIT 23.03.2006
    
    <Текст тела типового обработчика>

    // {{Добавил TormozIT 23.03.2006
    <Текст вставки в конец  обработчика>
    // }}Добавил TormozIT 23.03.2006

КонецПроцедуры // СкладПриИзменении()

// Процедура - обработчик события "НачалоВыбора" поля ввода "ЗаказПокупателя"
// в строке табличной части "Товары".
//
Процедура ТоварыЗаказПокупателяНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    // {{Добавил TormozIT 23.03.2006
    <Текст вставки в начало обработчика>
    // }}Добавил TormozIT 23.03.2006
    
    <Текст тела типового обработчика>

    // {{Добавил TormozIT 23.03.2006
    <Текст вставки в конец  обработчика>
    // }}Добавил TormozIT 23.03.2006
    
КонецПроцедуры // ТоварыЗаказПокупателяНачалоВыбора

Все работает и выглядит неплохо. Однако после обновления нам приходится ручками это вносить в новую версию обработчика, если в нем произошли изменения по отношению к старому релизу.

Теперь следует делать так.
// {{Добавил TormozIT 23.03.2006

// Процедура - обработчик события "ПередОткрытием" формы 
// 
Процедура ЛксПередОткрытием(Отказ, СтандартнаяОбработка)
    
    <Текст вставки в начало обработчика>
    [Выполнить(ПолучитьСтароеДействиеФормы(ЭтаФорма, "ПередОткрытием"));]
    <Текст вставки в конец  обработчика>
    
КонецПроцедуры // ЛксПередОткрытием() 

// Процедура - обработчик события "ПриИзменении" элемента формы "Склад"
//
Процедура ЛксСкладПриИзменении(Элемент)
    
    <Текст вставки в начало обработчика>
    [Выполнить(ПолучитьСтароеДействиеФормы(ЭтаФорма, "ПриИзменении", "Склад"));]
    <Текст вставки в конец  обработчика>
    
КонецПроцедуры // ЛксСкладПриИзменении()

// Процедура - обработчик события "НачалоВыбора" поля ввода "ЗаказПокупателя"
// в строке табличной части "Товары".
//
Процедура ЛксТоварыЗаказПокупателяНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    <Текст вставки в начало обработчика>
    [Выполнить(ПолучитьСтароеДействиеФормы(ЭтаФорма, "НачалоВыбора", "Товары.ЗаказПокупателя"));]
    <Текст вставки в конец  обработчика>
    
КонецПроцедуры // ЛксТоварыЗаказПокупателяНачалоВыбора

// }}Добавил TormozIT 23.03.2006 

//////////////////////////////////////////////////////////////////////////////// 
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
...
// {{Добавил TormozIT 23.03.2006
УстановитьДействиеФормы(ЭтаФорма, "ПередОткрытием");
УстановитьДействиеФормы(ЭтаФорма, "ПриИзменении"  , "Склад");
УстановитьДействиеФормы(ЭтаФорма, "НачалоВыбора"  , "Товары.ЗаказПокупателя");
// }}Добавил TormozIT 23.03.2006 

Таким образом, при обновлении в общем случае нам нужно будет всего лишь добавить один блок в раздел операторов основной программы. Строго говоря, этот блок нужно поместить в самый конец этого раздела, т.к. в нем могут присутствовать конкурентные назначения обработчиков. Однако в типовых конфигурациях это встречается крайне редко. Так как этот раздел почти никогда не меняется, то для него в настройке объединения просто уберем галочку, чем полностью исключим ручную правку после обновления.

Случай 2. Добавляем новый обработчик события элемента формы.


Обычно делают примерно так.
// {{Добавил TormozIT 23.03.2006

// Процедура - обработчик события "ПриИзменении" элемента формы "Склад"
//
Процедура СкладПриИзменении(Элемент)
    
    <Текст начала своего обработчика>
    <Текст конца  своего обработчика>
    
КонецПроцедуры // СкладПриИзменении()

// }}Добавил TormozIT 23.03.2006

Все работает и выглядит хорошо.
Но подумайте, что будет, если в новом релизе будет добавлен в режиме редактирования конфигурации (статически) связанный обработчик для того же события и, возможно, что еще хуже, с таким же именем!
Будет неприятно.

Как следует поступать в этом случае?
Опять по той же схеме.
// {{Добавил TormozIT 23.03.2006

// Процедура - обработчик события "ПриИзменении" элемента формы "Склад"
//
Процедура ЛксСкладПриИзменении(Элемент)
    
    <Текст начала обработчика>
    [Выполнить(ПолучитьДействиеФормы(ЭтаФорма, "ПриИзменении", "Склад"));]
    <Текст конца  обработчика>
    
КонецПроцедуры // ЛксСкладПриИзменении()

// }}Добавил TormozIT 23.03.2006

//////////////////////////////////////////////////////////////////////////////// 
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
...
// {{Добавил TormozIT 23.03.2006
УстановитьДействиеФормы(ЭтаФорма, "ПриИзменении"  , "Склад");
// }}Добавил TormozIT 23.03.2006

Теперь уже нам не страшен добавленный в одном из будущих релизов обработчик этого события и его имя! Как только он появится, наш обработчик будет его вызывать там, где мы прописали.

Отдельно хочется упомянуть о новых элементах формы. Если вы добавили в форму свой элемент и хотите сделать для него обработчик какого-нибудь события, то имеет смысл и в этом случае поступать так же. Ведь в новом релизе могут добавить элемент формы того же функционального назначения. Если он будет с тем же именем, что и ваш, то вам после обновления даже ничего менять не придется. А если имя будет другое, то просто нужно будет исправить название вашего обработчика и параметр в вызове его установки.

Необходимые процедуры и функции общего модуля


Сначала процедура переопределения события.
Для хранения старых обработчиков событий мы используем хитрость, предложенную Гением 1С Книга знаний: v8: Где в форме хранить промежуточные данные?.
Суть ее состоит в динамическом добавлении нулевых размеров служебного элемента формы для хранения в нем списка значений в свойстве СписокВыбора. Т.е. сначала проверяем есть ли элемент формы с заданным именем (в примере "общСтарыеОбработчики"). Если его нет, то создаем. Затем получаем обработчик нужного действия формы или элемента формы. Сохраняем его в свойстве СписокВыбора служебного элемента формы. Устанавливаем новый обработчик, имя которого формируем по нашему правилу <Префикс> [+ <ИмяЭлементаФормы>] [+ <ИмяЭлементаУправления>] + <ИмяСобытия>. Параметр "пЛиИсключительное" отвечает за проверку наличия старого обработчика. Такая проверка может понадобится для назначения обработчиков, которые не вызывают старый обработчик.
// Переопределяет обработчик события формы или элемента формы.
// Сохраняет штатный обработчик события внутри формы и устанавливает новый.
//
// Параметры:
//  пФорма       – Форма – форма;
//  пИмяСобытия  – Строка – имя события;
//  *пИмяЭлементаФормы – Строка – имя элемента формы;
//  *пЛиИсключительное – Булево – сообщать о наличии старого обработчика;
//  *пПсевдонимЭлементаФормы – Строка – псевдоним элемента формы.
//
Процедура УстановитьДействиеФормы(пФорма, пИмяСобытия, пИмяЭлементаФормы = "",
                                     пЛиИсключительное = Ложь, пПсевдонимЭлементаФормы = "") Экспорт

    Если пИмяЭлементаФормы <> "" Тогда
        МассивФрагментов = ПолучитьМассивИзСтрокиСРазделителем(пИмяЭлементаФормы);
        ИмяЭлементаФормы = МассивФрагментов[0];
        Объект = пФорма.ЭлементыФормы[ИмяЭлементаФормы];
        Если ТипЗнч(Объект) = Тип("ТабличноеПоле") И МассивФрагментов.Количество() > 1 Тогда 
            Объект = Объект.Колонки[МассивФрагментов[1]].ЭлементУправления;
            ИмяЭлементаФормы = ИмяЭлементаФормы + МассивФрагментов[1];
        КонецЕсли;
    Иначе
        Объект = пФорма;
        ИмяЭлементаФормы = "";
    КонецЕсли;
    
    ТекстМаркера = "общСтарыеОбработчики";
    Если пФорма.ЭлементыФормы.Найти(ТекстМаркера) = Неопределено Тогда
        ЭФ = пФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), ТекстМаркера, Ложь);
    КонецЕсли;
    
    Если пПсевдонимЭлементаФормы <> "" Тогда 
        ПолноеИмяСобытия = пПсевдонимЭлементаФормы + пИмяСобытия;
    Иначе
        ПолноеИмяСобытия = ИмяЭлементаФормы        + пИмяСобытия;
    КонецЕсли;
    СтароеДействие = Объект.ПолучитьДействие(пИмяСобытия);
    Если пЛиИсключительное и СтароеДействие <> Неопределено Тогда 
        Сообщить("Конфликт обработчиков события """ + пИмяСобытия + """ объекта """ + Строка(Объект) + """",
                 СтатусСообщения.Важное);
    КонецЕсли;
    НовоеДействие = Новый Действие("Лкс" + ПолноеИмяСобытия);
    Объект.УстановитьДействие(пИмяСобытия, НовоеДействие);
    пФорма.ЭлементыФормы.общСтарыеОбработчики.СписокВыбора.Добавить(ПолноеИмяСобытия, СтароеДействие);

КонецПроцедуры // УстановитьДействиеФормы()

Теперь функция для получения выражения на языке 1С, которое можно выполнить в модуле формы с целью запуска старого обработчика и передачи ему нужных параметров. В случае, если старого обработчика не было назначено для события, функция вернет пустую строку. Сначала приведена вспомогательная функция получения строки аргументов.
// Получаем строку аргументов для выполнения вызова обработчика события формы или элемента формы.
//
// Параметры:
//  пОбъект      – Форма, ЭлементФормы – объект события;
//  пИмяСобытия  – Строка – имя события.
//
// Возвращаемое значение:
//               – Строка – строка аргументов вида "([Аргумент1][, ... , АргументN]);",
//               где аргументы имеют свои стандартные названия для каждого события.
//
Функция ПолучитьАргументыДействияФормы(пОбъект, пИмяСобытия)

    Аргументы = "";
    Если ТипЗнч(пОбъект) = Тип("Форма") Тогда
        // Это событие формы
        Попытка
            Если    Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(пОбъект.Ссылка)) Тогда
                // Это форма элемента справочника
                Если пИмяСобытия = "ПередЗаписью" Тогда 
                    Аргументы = "(Отказ)";
                КонецЕсли;
            ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(пОбъект.Ссылка)) Тогда
                // Это форма  документа
                Если пИмяСобытия = "ПередЗаписью" Тогда 
                    Аргументы = "(Отказ, РежимЗаписи, РежимПроведения)";
                КонецЕсли;
            КонецЕсли;
        Исключение
        КонецПопытки;
        Если Аргументы = "" Тогда 
            Если      пИмяСобытия = "ВнешнееСобытие" Тогда 
                Аргументы = "(Источник, Событие, Данные)";
            ИначеЕсли пИмяСобытия = "ОбработкаАктивизацииОбъекта" Тогда 
                Аргументы = "(АктивныйОбъект, Источник)";
            ИначеЕсли пИмяСобытия = "ОбработкаВыбора" Тогда 
                Аргументы = "(ЗначениеВыбора, Источник)";
            ИначеЕсли пИмяСобытия = "ОбработкаЗаписиНовогоОбъекта" Тогда 
                Аргументы = "(Объект, Источник)";
            ИначеЕсли пИмяСобытия = "ОбработкаОповещения" Тогда 
                Аргументы = "(ИмяСобытия, Параметр, Источник)";
            ИначеЕсли пИмяСобытия = "ПередЗакрытием" Тогда 
                Аргументы = "(Отказ, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ПередОткрытием" Тогда 
                Аргументы = "(Отказ, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ПриЗаписи" Тогда 
                Аргументы = "(Отказ)";
            ИначеЕсли пИмяСобытия = "ПриПовторномОткрытии" Тогда 
                Аргументы = "(СтандартнаяОбработка)";
            Иначе
                Аргументы = "()";
            КонецЕсли;
        КонецЕсли;        
    Иначе
        // Это событие элемента формы
        Если ТипЗнч(пОбъект) = Тип("ТабличноеПоле") Тогда
            Если      пИмяСобытия = "Выбор" Тогда 
                Аргументы = "(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Перетаскивание" Тогда 
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)";
            ИначеЕсли пИмяСобытия = "ПроверкаПеретаскивания" Тогда 
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)";
            КонецЕсли;
        ИначеЕсли ТипЗнч(пОбъект) = Тип("ТабличныйДокумент") Тогда
            Если      пИмяСобытия = "Выбор" Тогда 
                Аргументы = "(Элемент, Область, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Перетаскивание" Тогда 
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Область)";
            ИначеЕсли пИмяСобытия = "ПроверкаПеретаскивания" Тогда 
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Область)";
            КонецЕсли;
        КонецЕсли;
        Если Аргументы = "" Тогда 
            Если      пИмяСобытия = "АвтоПодборТекста" Тогда 
                Аргументы = "(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "НачалоВыбора" Тогда 
                Аргументы = "(Элемент, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "НачалоПеретаскивания" Тогда 
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОбработкаВыбора" Тогда 
                Аргументы = "(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОбработкаЗаписиНовогоОбъекта" Тогда 
                Аргументы = "(Элемент, Объект, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОбработкаРасшифровки" Тогда 
                Аргументы = "(Элемент, Расшифровка, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОкончаниеВводаТекста" Тогда 
                Аргументы = "(Элемент, Текст, Значение, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ОкончаниеПеретаскивания" Тогда 
                Аргументы = "(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Открытие" Тогда 
                Аргументы = "(Элемент, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "Очистка" Тогда 
                Аргументы = "(Элемент, СтандартнаяОбработка)";
            ИначеЕсли пИмяСобытия = "ПередНачаломДобавления" Тогда 
                Аргументы = "(Элемент, Отказ, Копирование)";
            ИначеЕсли пИмяСобытия = "ПередНачаломИзменения" Тогда 
                Аргументы = "(Элемент, Отказ)";
            ИначеЕсли пИмяСобытия = "ПередОкончаниемРедактирования" Тогда 
                Аргументы = "(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)";
            ИначеЕсли пИмяСобытия = "ПередУдалением" Тогда 
                Аргументы = "(Элемент, Отказ)";
            ИначеЕсли пИмяСобытия = "ПриВыводеСтроки" Тогда 
                Аргументы = "(Элемент, ОформлениеСтроки, ДанныеСтроки)";
            ИначеЕсли пИмяСобытия = "ПриИзмененииСодержимогоОбласти" Тогда 
                Аргументы = "(Элемент, Область)";
            ИначеЕсли пИмяСобытия = "ПриНачалеРедактирования" Тогда 
                Аргументы = "(Элемент, НоваяСтрока, Копирование)";
            ИначеЕсли пИмяСобытия = "ПриОкончанииРедактирования" Тогда 
                Аргументы = "(Элемент, НоваяСтрока, Отмена редактирования)";
            ИначеЕсли пИмяСобытия = "ПриОкончанииРедактированияИнтервала" Тогда 
                Аргументы = "(Элемент, Интервал, Отмена)";
            ИначеЕсли пИмяСобытия = "ПриПолученииДанных" Тогда 
                Аргументы = "(Элемент, ОформленияСтрок)";
            ИначеЕсли пИмяСобытия = "ПриСменеСтраницы" Тогда 
                Аргументы = "(Элемент, ТекущаяСтраница)";
            ИначеЕсли пИмяСобытия = "Регулирование" Тогда 
                Аргументы = "(Элемент, Направление, СтандартнаяОбработка)";
            Иначе
                Аргументы = "(Элемент)";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Возврат Аргументы + ";";

КонецФункции // ПолучитьАргументыДействияФормы()

// Получаем текст для выполнения вызова старого обработчика события формы или элемента формы.
//
// Параметры:
//  пФорма       – Форма – форма;
//  пИмяСобытия  – Строка – имя события;
//  *пИмяЭлементаФормы – Строка – имя элемента формы.
//
// Возвращаемое значение:
//               – Строка – текст для выполнения.
//
Функция ПолучитьСтароеДействиеФормы(пФорма, пИмяСобытия, пИмяЭлементаФормы = "") Экспорт
    
    Если пИмяЭлементаФормы <> "" Тогда 
        МассивФрагментов = ПолучитьМассивИзСтрокиСРазделителем(пИмяЭлементаФормы);
        ИмяЭлементаФормы = МассивФрагментов[0];
        Объект = пФорма.ЭлементыФормы[ИмяЭлементаФормы];
        Если ТипЗнч(Объект) = Тип("ТабличноеПоле") И МассивФрагментов.Количество() > 1 Тогда 
            ИмяЭлементаФормы = ИмяЭлементаФормы + МассивФрагментов[1];
            Объект = Объект.Колонки[МассивФрагментов[1]].ЭлементУправления;
        КонецЕсли;
    Иначе
        ИмяЭлементаФормы = "";
        Объект = пФорма;
    КонецЕсли;
    
    ПолноеИмяСобытия = ИмяЭлементаФормы + пИмяСобытия;
    СтарыйОбработчик = "";
    ЭлементСписка = пФорма.ЭлементыФормы.общСтарыеОбработчики.СписокВыбора.НайтиПоЗначению(ПолноеИмяСобытия);
    Если ЭлементСписка <> Неопределено Тогда 
        СтарыйОбработчик = ЭлементСписка.Представление;
    КонецЕсли;
    Если СтарыйОбработчик <> "" Тогда 
        СтарыйОбработчик = СтарыйОбработчик + ПолучитьАргументыДействияФормы(Объект, пИмяСобытия);
    КонецЕсли;
    Возврат СтарыйОбработчик;

КонецФункции // ПолучитьСтароеДействиеФормы()

Теперь функция для получения выражения на языке 1С, которое можно выполнить в модуле формы с целью запуска актуального обработчика и передачи ему нужных параметров. В случае, если актуального обработчика не было назначено для события, функция вернет пустую строку.
// Получаем текст для выполнения вызова обработчика события формы или элемента формы.
//
// Параметры:
//  пФорма       – Форма – форма;
//  пИмяСобытия  – Строка – имя события;
//  *пИмяЭлементаФормы – Строка – имя элемента формы.
//
// Возвращаемое значение:
//               – Строка – текст для выполнения.
//
Функция ПолучитьДействиеФормы(пФорма, пИмяСобытия, пИмяЭлементаФормы = "") Экспорт
    
    Если пИмяЭлементаФормы <> "" Тогда 
        МассивФрагментов = ПолучитьМассивИзСтрокиСРазделителем(пИмяЭлементаФормы);
        Объект = пФорма.ЭлементыФормы[МассивФрагментов[0]];
        Если ТипЗнч(Объект) = Тип("ТабличноеПоле") И МассивФрагментов.Количество() > 1 Тогда 
            Объект = Объект.Колонки[МассивФрагментов[1]].ЭлементУправления;
        КонецЕсли;
    Иначе
        Объект = пФорма;
    КонецЕсли;
    
    Обработчик = Строка(Объект.ПолучитьДействие(пИмяСобытия));
    Если Обработчик <> "" Тогда 
        Обработчик = Обработчик + ПолучитьАргументыДействияФормы(Объект, пИмяСобытия);
    КонецЕсли;
    Возврат Обработчик;

КонецФункции // ПолучитьДействиеФормы()

Ну и вспомогательная функция парсинга (разбора) строки.
// Функция разбивает строку разделителем.
// 
// Параметры:
//  пСтрока      - Строка - которую разбиваем;
//  *пРазделитель - Строка - символ-разделитель.
//
// Возвращаемое значение:
//               - Массив - содержащий фрагменты, на которые разбивает строку разделитель.
//
Функция ПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель = ".") Экспорт
    
    Массив = Новый Массив;
    лСтрока = СтрЗаменить(пСтрока, пРазделитель, Символы.ПС);
    Для Счетчик = 1 По СтрЧислоСтрок(лСтрока) Цикл 
        Массив.Добавить(СтрПолучитьСтроку(лСтрока, Счетчик));
    КонецЦикла;
    Возврат Массив;
    
КонецФункции // ПолучитьМассивИзСтрокиСРазделителем()

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика