Главная » Статьи » "1С" Програмирование

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




Получение массива реквизитов формы и ее основного реквизита
Получение массива реквизитов формы и ее основного реквизита
  
Эти функции позволят вам получать из любой формы 1С 8.1 массив ее реквизитов, а также ее основной реквизит.
 
Главные функции - ЛксПолучитьМассивИменРеквизитовФормы и ЛксПолучитьИмяОсновногоРеквизитаФормы. Функция ЛксСтрокаВнутрВХМЛТело взята отсюда http://infostart.ru/projects/1801.

Если будете применять в реальном времени, делайте кэширование ДокументDOM.
[code]
Функция ЛксСтрокаВнутрВХМЛТело(вхСтрока, выхХМЛТело = Неопределено) Экспорт
 
  //{ Получение одной длинной строки
 выхХМЛТело = СтрЗаменить(вхСтрока,СИМВОЛЫ.ПС,"");
 выхХМЛТело = СтрЗаменить(выхХМЛТело,СИМВОЛЫ.ВК,"");
 //}
 
 //{ Заменяем символы, критичные для XML
 // & на &
 // < на &lt;
 // > на &gt;
 выхХМЛТело = СтрЗаменить(выхХМЛТело,\"&\",\"&amp;\");
 выхХМЛТело = СтрЗаменить(выхХМЛТело,\"<\",\"&lt;\");
 выхХМЛТело = СтрЗаменить(выхХМЛТело,\">\",\"&gt;\");
 //}
 
 //{ Замена одинарных символов
 выхХМЛТело = СтрЗаменить(выхХМЛТело,\",\",\"</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

Категория: "1С" Програмирование | Добавил: c1 (2009 Февраль 21)
Просмотров: 3371 | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar