gifts2017

Внешняя обработка-каталог для быстрого создания и организации полезных процедур (8.2)

Опубликовал Дмитрий Некрасов (DaNN) в раздел Программирование - Инструментарий

Обработка позволяет объединить функционал нескольких обработок в одной, с удобной навигацией и автоматическим сохранением значений параметров.

Во время поддержки баз часто накапливается множество мелких обработок, иногда даже состоящих из одной процедуры. В итоге в папке с обработками наступает бардак: уже не помнишь какая актуальна, или что делает файл внешняяобработка1.epf. Не говоря уже о том, как "долго" создавать обработку которая получает данные хитро-вывернутым способом и выводит результат в табличную часть.

 
Представленная обработка обладает следующими преимуществами:
  • Все хранится в одном файле
  • Позволяет вывести любую таблицу на форму одной строчкой
  • Легко добавляются описания к процедурам, всегда можно вспомнить, что делает процедура
  • Выводит данные как в виде текстового документа, так и в виде таблицы
  • Можно вывести несколько таблиц рядом во вкладках для сравнения
  • Автоматически сохраняет значения параметров
  • Для каждой хранит процедуры свои параметры
 
Пример использования.

Допустим нам надо создать простенькую обработку, которая выбирает леммы(слова) из документа и выводит их в виде, удобном для загрузки во flashscard программу и одновременно выводит таблицу значений с частотой использования леммы.
 
При создании обычной обработки нам нужно создать обработку, создать реквизиты, придумать и создать таблицу с реквизитами, создать форму, красиво расположить реквизиты и наконец реализовать алгоритм. Причем подготовительная часть занимает даже больше времени на создание, чем кодинг. Работать мышкой удобно, но медленно. 
 
При использовании представленной обработки, единственное подготовительное действие - это создание новой команды, все остальное делается кодом, не отрываясь от клавиатуры. Приступим. 
 
1. Создадим копию обработки, откроем и поменяем ей название, чтобы не перепутать с другими наборами процедур. Я делаю это один раз для каждой базы, в последствии этого шага не будет.
 название
 
2. Открываем форму и добавляем новую команду формы. Название этой команды обязательно должно начинаться с "тмп_". В данном случае "тмп_ВыгрузкаСловДляЗаучивания". В синониме пишем то, что будет отображаться в списке на форме при выполнении обработки.
Создание команды
 
3. Создаем процедуру для команды. Добавляемые реквизиты, так же как и с командами, должны иметь префикс "тмп_"
 
&НаКлиенте
Процедура тмп_ВыгрузкаСловДляЗаучивания(Команда)
 ОчиститьРеквизиты(); // Процедура обязательна для каждой пользовательской команды. Она удаляет реквизиты предыдущей команды, а также сохраняет введенные значения.
 
 ДобавитьРеквизитНаФорму("тмп_Документ",Новый ОписаниеТипов("ДокументСсылка.СписокСлов"),Команда.Имя);
 ДобавитьРеквизитНаФорму("тмп_ЯзыкИсточник",Новый ОписаниеТипов("ПеречислениеСсылка.Языки"),Команда.Имя);
 ДобавитьРеквизитНаФорму("тмп_ЯзыкПеревод",Новый ОписаниеТипов("ПеречислениеСсылка.Языки"),Команда.Имя);
 
 Комментарий="Процедура выводит список слов для загрузки во флешкарт."; // Комментарий чтобы помнить для чего процедура
КонецПроцедуры
 
4. Все реквизиты у нас есть, реализуем алгоритм. Алгоритм реализуется в процедуре, название которой совпадает с названием процедуры команды формы, но с добавлением в конце слова "Сервер":
 
&НаСервере
Процедура тмп_ВыгрузкаСловДляЗаучиванияСервер()     
     Запрос = Новый Запрос;
     // Дальше идет запрос
     РезультатЗапроса = Запрос.Выполнить();
     Выборка = РезультатЗапроса.Выбрать();
     Пока Выборка.Следующий() Цикл
          // Процедура выводит строку в табличный докумет, который называется лог
          // его можно использовать как для отладки, так и для получения результата.
          ЗаписатьВЛог(""+Выборка[Строка(ЭтаФорма["тмп_ЯзыкИсточник"])]+Символы.Таб+Выборка[Строка(ЭтаФорма["тмп_ЯзыкПеревод"])]);
     КонецЦикла;
    // С помощью этой процедуры мы можем вывести любую произвольную таблицу значений на форму
     ЗагрузитьТаблицуНаФорму(РезультатЗапроса.Выгрузить(),"Таблица1","Список слов");
    
КонецПроцедуры
 
Результат работы созданной процедуры:
 
Результат работы
 
 Результат в таблице
 
Описание процедур, используемых в пользовательских разработках

ОчиститьРеквизиты(); 

-Обязательна для использования процедура! Указывается первой строчкой в процедуре вызываемой командой формы. Она сохраняет и убирает реквизиты предыдущей используемой процедуры.

ЗагрузитьТаблицуНаФорму(ТабРез,НаправлениеВывода="Таблица1",ЗаголовокСтраницы=Неопределено);

Загружает прозивольную таблицу на форму.
 
Параметры:
ТабРез - таблица значений, которую надо вывести на форму.
НаправлениеВывода - строка. Может принимать значения "Таблица1","Таблица2","Таблица3". Используется если нужен одновременный вывод таблиц на форму.
ЗаголовокСтраницы - строк. Заголовок, который будет отображаться на форме.

ЗаписатьВЛог(ДобавляемаяСтрока);
 
Выводит текст в текстовый документ на форме.

Дополнительные советы

- Удобно для каждой базы сделать отдельный набор процедур. Например у нас есть база test. Мы для нее создаем копию и называем test.epf и там храним все мелкие процедуры-обработки. 
- Если доработок много - можно разделить по функционалу, каждый файл отвечает за свой функционал.
- Для более быстрого создания реквизитов и обращения к ним можно создать шаблоны. 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Внешняя обработка-каталог
.epf 8,84Kb
10.10.13
3
.epf 1.0.3 8,84Kb 3 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа