Почему в лекции 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; //Блокируем кнопки Вперед и Назад Элементы.Вперед.Доступность=Ложь; Элементы.Назад.Доступность=Ложь; КонецПроцедуры