|
Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной. |
Построение распределенных информационных систем, поиск, регламентные задания, функциональные опции
Механизм полнотекстового поиска в нашей базе присутствует, но нет поискового интерфейса, который позволял бы пользователю производить такой поиск. Создадим его.
В Конфигураторе добавим в систему новый отчет. Назовем его ПоискВБазеДанных, создадим основную форму отчета, включим его в состав подсистемы Администрирование. Создадим следующие реквизиты и команды формы:
Реквизит ПоисковыйЗапрос, Тип: Строка, длина 100
В этом реквизите мы будем хранить поисковый запрос, который будет вводить пользователь. Разместим его на форме.
Команда ВыполнитьПоиск, наименование Искать!
Разместим команду на форме, она примет вид кнопки – нажатие на эту кнопку будет запускать новый поиск.
Реквизит СведенияОПоиске, Тип: Строка, длина 100, разместим реквизит на форме, зададим вид для элемента формы Поле надписи. Сюда мы будем выводить служебные сведения о поиске.
Реквизит РезультатыПоиска, оставим тип в значении по умолчанию, перетащим на форму и в свойстве элемента формы Вид укажем Поле HTML-документа В это поле будут выводиться результаты поиска, полученные в виде HTML.
Команда Назад, перетащим ее на форму
Команда Вперед, перетащим ее на форму
Эти команды будут использоваться для перехода к предыдущей, и, соответственно, следующей порции поиска.
Добавим реквизит НачальнаяПозиция, числового типа – на форму перетаскивать его не будем, он будет применяться для хранения начальной позиции поиска, в том случае, если мы нажимаем на кнопки Назад или Вперед, порция найденных данных, попадающая в поле вывода, будет зависеть от переменной НачальнаяПозиция.
Добавим реквизит СписокРезультатов, тип – СписокЗначений, не будем перетаскивать его на форму, мы будем пользоваться им в программном коде. Роль этого реквизита – хранение найденных данных для того, чтобы при щелчке мышью в поле HTML-документа по ссылке, ведущей к тому или иному объекту, открывалось бы окно этого объекта.
Добавим реквизит ПорогНечеткости, числового типа с параметрами по умолчанию. Перетащим его на форму, в окне настройки свойств элемента формы установим следующие параметры:
Заголовок: Порог нечеткости: 0 Вид: Поле полосы регулирования Минимальное значение: 0 Максимальное значение: 100
Благодаря таким настройкам значение параметра ПорогНечеткости, который мы будем использовать для настройки поиска, можно будет менять, перетаскивая бегунок полосы прокрутки. Порог нечеткости изменяется от 0% до 100%, от него зависит то, насколько результат поиска будет совпадать с поисковым запросом.
Добавим реквизит РазмерПорции, числового типа, с параметрами по умолчанию. Перетащим на форму, в окне настройки свойств элемента установим следующие параметры
Заголовок: Размер порции: 5 Вид: Поле полосы регулирования Минимальное значение: 5 Максимальное значение: 50
Итоговый внешний вид формы представлен на рис. 7.16.
Это окно будущей формы мы получили, нажав на кнопку Проверить в панели инструментов группы Элементы в редакторе форм.
Ниже приведен код модуля формы, который реализует поиск.
&НаКлиенте
Процедура ВыполнитьПоиск(Команда)
//Начинаем новый поиск
НачатьПоиск("Новый поиск");
КонецПроцедуры
&НаКлиенте
Процедура Назад(Команда)
//Переходим к предыдущей порции поиска
НачатьПоиск ("Назад");
КонецПроцедуры
&НаКлиенте
Процедура Вперед(Команда)
//Переходим к следующей порции поиска
НачатьПоиск("Вперед");
КонецПроцедуры
&НаКлиенте
Процедура НачатьПоиск(НаправлениеПоиска)
//Проверяем строку поиска
Если Не ПустаяСтрока(ПоисковыйЗапрос) Тогда
ВыполнитьПоискСервер(НаправлениеПоиска);
Иначе
Предупреждение("Строка поиска не задана");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПоискСервер(НаправлениеПоиска)
//Создаем новый список поиска
СпПоиска = ПолнотекстовыйПоиск.СоздатьСписок();
//Задаем параметры поиска
СпПоиска.СтрокаПоиска = ПоисковыйЗапрос;
СпПоиска.РазмерПорции=РазмерПорции;
СпПоиска.ПорогНечеткости=ПорогНечеткости;
//проверяем направление поиска
//в зависимости от них либо выполняем поиск
//с выдачей его первой части, либо показываем
//предыдущую или следующую порции поиска
Если НаправлениеПоиска = "Новый поиск" Тогда
СпПоиска.ПерваяЧасть();
ИначеЕсли НаправлениеПоиска = "Назад" Тогда
СпПоиска.ПредыдущаяЧасть(НачальнаяПозиция);
ИначеЕсли НаправлениеПоиска = "Вперед" Тогда
СпПоиска.СледующаяЧасть(НачальнаяПозиция);
КонецЕсли;
//НачальнаяПозиция будет использоваться не только в дальнейших вычислениях
//но и как ориентир при получении следующей или предыдущей порции поиска
НачальнаяПозиция = СпПоиска.НачальнаяПозиция();
//Выводим сообщение в поле сведений о поиске и настраиваем доступность
//кнопок Вперед и Назад
Если СпПоиска.Количество() <> 0 Тогда
СведенияОПоиске = "Результаты поиска" + Строка(НачальнаяПозиция + 1)
+ "-" + Строка(НачальнаяПозиция + СпПоиска.Количество())
+ "из" + Строка(СпПоиска.ПолноеКоличество());
Элементы.Вперед.Доступность
= (СпПоиска.ПолноеКоличество() - НачальнаяПозиция) > СпПоиска.Количество();
Элементы.Назад.Доступность = (НачальнаяПозиция > 0);
Иначе
СведенияОПоиске = "Поиск не дал результатов";
Элементы.Вперед.Доступность = Ложь;
Элементы.Назад.Доступность = Ложь;
КонецЕсли;
//Выводим результат поиска в поле HTML-документа
РезультатыПоиска = СпПоиска.ПолучитьОтображение
(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
//Заполняем список СписокРезультатов
СписокРезультатов.Очистить();
Для Каждого Результат Из СпПоиска Цикл
СписокРезультатов.Добавить(Результат.Значение);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура РезультатыПоискаПриНажатии
(Элемент, ДанныеСобытия, СтандартнаяОбработка)
//Получаем элемент HTML
ЭлементHTML = ДанныеСобытия.Event.srcElement;
//Если это - элемент полнотекстового поиска
Если (ЭлементHTML.id = "FullTextSearchListItem") Тогда
//Отключаем стандартную обработку события
СтандартнаяОбработка = Ложь;
// Получим номер строки (nameProp) найденной строки
НомерЭлемента = Число(ЭлементHTML.sel_num);
// Откроем форму найденного элемента
ОткрытьЗначение(СписокРезультатов[НомерЭлемента].Значение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РазмерПорцииПриИзменении(Элемент)
//Выводим информацию о текущем размере порции поиска
Элементы.РазмерПорции.Заголовок="Размер порции: "+РазмерПорции;
КонецПроцедуры
&НаКлиенте
Процедура ПорогНечеткостиПриИзменении(Элемент)
//Выводим информацию о текущем пороге нечеткости
Элементы.ПорогНечеткости.Заголовок = "Порог нечеткости: " + ПорогНечеткости;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Задаем размер порции поиска и порог нечеткости
РазмерПорции=5;
ПорогНечеткости=0;
//Блокируем кнопки Вперед и Назад
Элементы.Вперед.Доступность=Ложь;
Элементы.Назад.Доступность=Ложь;
КонецПроцедуры
