Главная » Статьи » "1С" Програмирование |
Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!
Через минуту Вы получите "Гостевой доступ"
Получение массива реквизитов формы и ее основного реквизита
Получение массива реквизитов формы и ее основного реквизита
Эти функции позволят вам получать из любой формы 1С 8.1 массив ее реквизитов, а также ее основной реквизит.
Главные функции - ЛксПолучитьМассивИменРеквизитовФормы и ЛксПолучитьИмяОсновногоРеквизитаФормы. Функция ЛксСтрокаВнутрВХМЛТело взята отсюда http://infostart.ru/projects/1801.
Если будете применять в реальном времени, делайте кэширование ДокументDOM. [code] Функция ЛксСтрокаВнутрВХМЛТело(вхСтрока, выхХМЛТело = Неопределено) Экспорт //{ Получение одной длинной строки выхХМЛТело = СтрЗаменить(вхСтрока,СИМВОЛЫ.ПС,""); выхХМЛТело = СтрЗаменить(выхХМЛТело,СИМВОЛЫ.ВК,""); //} //{ Заменяем символы, критичные для XML // & на & // < на < // > на > выхХМЛТело = СтрЗаменить(выхХМЛТело,\"&\",\"&\"); выхХМЛТело = СтрЗаменить(выхХМЛТело,\"<\",\"<\"); выхХМЛТело = СтрЗаменить(выхХМЛТело,\">\",\">\"); //} //{ Замена одинарных символов выхХМЛТело = СтрЗаменить(выхХМЛТело,\",\",\"</data><data>\"); выхХМЛТело = СтрЗаменить(выхХМЛТело,\"{\",\"<elem><data>\"); выхХМЛТело = СтрЗаменить(выхХМЛТело,\"}\",\"</data></elem>\"); //} //{ Удаляем лишние блоки <data><elem> и </data></elem> выхХМЛТело = СтрЗаменить(выхХМЛТело,\"<data><elem>\",\"<elem>\"); выхХМЛТело = СтрЗаменить(выхХМЛТело,\"</elem></data>\",\"</elem>\"); //} //{ Добавляем перенос строки к </data> и к </elem> для удобства поиска различий выхХМЛТело = СтрЗаменить(выхХМЛТело,\"</elem>\",\"</elem>\"+СИМВОЛЫ.ПС); выхХМЛТело = СтрЗаменить(выхХМЛТело,\"</data>\",\"</data>\"+СИМВОЛЫ.ПС); //} Возврат выхХМЛТело; КонецФункции Функция ЛксПолучитьДокументDOMФормы(Форма) Экспорт СтрокаФормы = ЗначениеВСтрокуВнутр(Форма); XMLСтрокаФормы = ЛксСтрокаВнутрВХМЛТело(СтрокаФормы); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(XMLСтрокаФормы); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); Возврат ДокументDOM; КонецФункции // ЛксПолучитьДокументDOMФормы() Функция ЛксПолучитьМассивИменРеквизитовФормы(Форма) Экспорт ДокументDOM = ЛксПолучитьДокументDOMФормы(Форма); РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM); ИмяЭлемента = "/elem[1]/elem[1]/elem[2]/elem[2]/elem/data[3]"; РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента + "/text()", ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.НеупорядоченныйИтераторУзлов); Массив = Новый Массив; Пока 1 = 1 Цикл Узел = РезультатXPath.ПолучитьСледующий(); Если Узел = Неопределено Тогда Прервать; КонецЕсли; Текст = Узел.ТекстовоеСодержимое; Длина = СтрДлина(Текст); Текст = Сред(Текст, 2, Длина - 2); Массив.Добавить(Текст); КонецЦикла; Возврат Массив; КонецФункции // ЛксПолучитьМассивИменРеквизитовФормы() Функция ЛксПолучитьИмяОсновногоРеквизитаФормы(Форма) Экспорт ДокументDOM = ЛксПолучитьДокументDOMФормы(Форма); РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM); ИмяЭлемента = "/elem[1]/elem[1]/elem[2]/elem[1]/data[1]/text()"; РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.Строка); КлючОсновногоРеквизита = РезультатXPath.СтроковоеЗначение; ИмяЭлемента = "/elem[1]/elem[1]/elem[2]/elem[2]/elem/elem[1]/data[1]/text()"; РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.УпорядоченныйИтераторУзлов); Счетчик = 1; Пока 1 = 1 Цикл Узел = РезультатXPath.ПолучитьСледующий(); Если Узел = Неопределено Тогда Прервать; КонецЕсли; Если Узел.ТекстовоеСодержимое = КлючОсновногоРеквизита Тогда Прервать; КонецЕсли; Счетчик = Счетчик + 1; КонецЦикла; Если Узел = Неопределено Тогда Возврат Неопределено; КонецЕсли; ИмяЭлемента = "/elem[1]/elem[1]/elem[2]/elem[2]/elem[" + Счетчик + "]/data[3]/text()"; РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.Строка); Длина = СтрДлина(РезультатXPath.СтроковоеЗначение); Возврат Сред(РезультатXPath.СтроковоеЗначение, 2, Длина - 2); КонецФункции // ЛксПолучитьИмяОсновногоРеквизитаФормы()[/code] статья с сайта: www.infostart.ru | |
Просмотров: 3371 | |
Выразить благодарность - Поделиться с друзьями!
Всего комментариев: 0 | |