Img/xRom.gif Главная О сайте Новости Статьи Программы OLAP Ссылки
на сайте на Народ.Ру на Яндексе


На данной странице собраны некоторые полезные с моей точки зрения функции, которые могут пригодиться при разработке. Функции условно поделены на несколько категорий:

 

Вспомогательные функции для вычисления выражений с помощью системной функции Шаблон()
Вспомогательные функции лучше всего вставить в глобальный модуль:


// Возвращает объект любого типа. По сути является универсальной, но
// работает дольше чем _Вычислить(), поэтому ИМХО рекомендовал бы
// использовать ее когда нужно вернуть именно объект
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _ВычислитьОбъект( Выражение ) Экспорт
      Возврат ЗначениеИзСтроки(Шаблон(
"[ЗначениеВСтроку("+ Выражение+")]"));
КонецФункции

 


// Возвращает число. Использую ее когда нужно получить результат выполнения
// лок. функции, которые обычно возвращают 0/1 или когда просто нужно вызвать
// лок. функцию из глоб. модуля
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _Вычислить( Выражение) Экспорт
      Возврат Число(Шаблон(
"["+ Выражение+ "]"));
КонецФункции

Вызов функции осуществляется так:
_Вычислить( "ИмяЛокФункции()");


// Возвращает строку. Функцию удобно использовать когда нужно получить значение
// лок. переменной в гл. модуле
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _ВычислитьСтроку( Выражение) Экспорт
      Возврат Строка(Шаблон(
"["+ Выражение+ "]"));
КонецФункции

Вызов функции осуществляется так:
глПерем= _ВычислитьСтроку( "ЛокПерем");


//  Присвоение. Функция используется для присвоения значений локальным переменным из гл. модуля
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _Присвоение ( Приемник ,Источник) Экспорт
      Попытка
              Приемник = Источник ;
      Исключение
       КонецПопытки;
КонецФункции

Функция вызывается примерно так:
_Вычислить ("_Присвоение(ЛокПерем,глПерем)" );

 


Вспомогательные функции для обработки строк с разделителем.

//=======================================
// Возвращает кол-во элементов в списке с разделителями (число)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Стр - строка списка с разделителями
// Разделитель - символ разделителя в списке
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _КоличествоЭлементов (Знач Стр, Разделитель="~") Экспорт
      Возврат СтрЧислоВхождений(Стр ,Разделитель);
КонецФункции

Ничего выдающегося, просто ее удобно использовать в цикле. Например,
Для Индекс=1 По _КоличествоЭлементов (Стр) Цикл
      ...какие-то действия
КонецЦикла;


// Возвращает элемент из списка с разделителями по номеру
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Стр - строка списка с разделителями
// Номер - порядковый номер элемента (начиная с 1)
// Разделитель - символ разделителя в списке
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _ПолучитьЭлемент (Знач Стр ,Номер,Разделитель="~" ) Экспорт
      КолВо=СтрЧислоВхождений( Стр, Разделитель); 
       Если (Номер <=0) ИЛИ ( Номер> КолВо ) Тогда
            Возврат
""; 
       КонецЕсли;
       Позиция1=1;
       Для Н=1 По КолВо Цикл 
            Позиция2=Найти( Стр,Разделитель); 
            _Стр=Сред(Стр, Позиция1,Позиция2-1 );
                  Если Н=Номер Тогда
                        Возврат Сред(
_Стр,?(Н =1,1,2),СтрДлина( _Стр));
                  Иначе 
                        Стр=СокрЛ(СтрЗаменить(?(Н =1,"@"+Стр ,Стр),?(Н =1,"@"+_Стр +Разделитель,_Стр +Разделитель),"@"));
                 КонецЕсли;
      КонецЦикла;
КонецФункции


Функция работает намного быстрее, чем аналог в типовой конфигурации. Использовать можно примерно так:
Например есть строка Стр="Вася~Пупкин~VIII-XXX-557788~";
НомерПаспорта=_ ПолучитьЭлемент(Стр,3 );


// Ищет элемент в списке с разделителями
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Стр - строка списка с разделителями
// Разделитель - символ разделителя в списке
// Искомое - искомый элемент
// Возвращает:      1-элемент найден, 0-элемент не найден
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция _НайтиЭлемент(Знач Стр,Разделитель="~" ,Искомое) Экспорт
      Возврат Найти(
Разделитель+Стр, Разделитель+Искомое +Разделитель);
КонецФункции


 


Функции и обработки для работы с массивами.

При разработке различных решений почти всегда используются различные массивы данных. Это объекты типа "СписокЗначений", "ТаблицаЗначений", "Запрос". Для отладки можно использовать следующие функции и обработки:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  ТЗ - ТаблицаЗначений
//  МодРежим - модальный режим (0-нет/1-да)
//======================================
Функция _ОтладкаТЗ(Знач ТЗ ,МодРежим=0) Экспорт
       Возврат ?(МодРежим =0,ОткрытьФорму("Отчет.ОтладкаТЗ#" ,ТЗ),
 ОткрытьФормуМодально(
"Отчет.ОтладкаТЗ#" ,ТЗ));
КонецФункции

А вот и собственно отчет, который вызывается функцией -   debugVT.rar


Функцию _ПечатьТЗ() можно использовать при необходимости быстрого вывода данных в результирующую таблицу для дальнейшей печати.

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  Вход: ТЗ - ТаблицаЗначений
//   МодРежим - модальный режим (0-нет/1-да)
//=======================================
Функция _ПечатьТЗ(Знач ТЗ, МодРежим=0 ) Экспорт
       Возврат ?(
МодРежим =0,ОткрытьФорму("Отчет.ПечатьТЗ#" ,ТЗ),
 ОткрытьФормуМодально(
"Отчет.ПечатьТЗ#" ,ТЗ));
КонецФункции

Это отчет, который вызывается функцией -   printVT.rar




Функция накладывающая фильтр по значению.

Получилась довольно прикольная и в то же время мощная функция, позволяющая наложить фильтр по определенному значению.

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Функция УстановитьЗначениеФильтра( ТЗ,Колонка, Значение)
      НачСтрока=0; КонСтрока=0;
      ТЗ.Сортировать( Колонка+"+");
      ТЗ.НайтиЗначение( Значение,НачСтрока, Колонка);
      БТ=СоздатьОбъект("ТаблицаЗначений" );
      Если НачСтрока >0 Тогда
            ТЗ.Выгрузить( БТ,НачСтрока);
            БТ.Сортировать( Колонка+"-");
            БТ.НайтиЗначение( Значение,КонСтрока, Колонка);
            БТ.Выгрузить( БТ,КонСтрока );
      КонецЕсли;
      Возврат
БТ;
КонецФункции
Пример использования:
// ТабЗнач - таблица значений оригинал (ее оставляем без изменений).
// ТЗ - таблица с отфильтрованными данными (ее изменяем как угодно)
ТЗ=УстановитьЗначениеФильтра(ТабЗнач,ИДКолонки,Значение);
// Фильтруем в уже отфильтрованной.
ТЗ =УстановитьЗначениеФильтра (ТЗ ,ИДКолонки2 ,Значение2 );
ТЗ=УстановитьЗначениеФильтра (ТЗ,ИДКолонкиХХХ ,ЗначениеХХХ);
// и так до полного самоудовлетворения :-)

 

1C:TOP-100 КЛУБ ПРОФЕССИОНАЛОВ 1С
Hosted by uCoz