Многостраничная табличная форма с разной структурой
Под многостраничной табличной формой c разной структурой подразумевается форма, в которой наполнение страниц, например, зависит от параметра. Таким параметром могут быть некоторые значения из базы данных.
Основная идея построения такой табличной формы заключается в тиражировании и удалении разделов. Раздел отвечает за наполнение страницы, поэтому отличающиеся друг от друга данные по структуре или по логике следует располагать в различных разделах.
За добавление и удаление разделов в формируемую табличную форму отвечает некий параметр. К примеру, в качестве параметра будет выступать гражданство человека. Если гражданин имеет иностранное гражданство, в итоговой форме будет содержаться раздел с общей информацией, несколько разделов с данными о месте работе и регистраций, если у человека российское гражданство, в итоговой форме будет общий раздел и несколько разделов с данными о месте работе. В зависимости от гражданства будет формироваться табличная форма - раздел с регистрацией будет удаляться, а раздел с данными о месте работе будет копироваться.
В Редакторе форм проектируются три раздела : с общей информацией, информацией о месте работе и о регистрации, как показано ниже.
Тиражирование раздела осуществляется методом КОПИРОВАТЬ_РАЗДЕЛЫ. Так как копирование разделов происходит в пределах одной формы, то имена тиражируемых разделов формируются путем добавления к имени раздела чисел 1, 2, 3 и т.д. Удаление раздела производится методом УДАЛИТЬ_РАЗДЕЛ. Ниже указан листинг формирования табличной формы в зависимости от параметра - гражданства.
ФУНКЦИЯ ЦЕЛОЕ: Кол_мест_работы()
РЕЗУЛЬТАТ = СЛУЧ_ЧИСЛО(5)
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ СТРОКА: Гражданство()
ПЕРЕМ ЦЕЛОЕ: гр = СЛУЧ_ЧИСЛО(2)
ВЫБОР(гр)
#1: РЕЗУЛЬТАТ = "российское"
#0: РЕЗУЛЬТАТ = "иностранное"
КОНЕЦ_ВЫБОРА
КОНЕЦ_ФУНКЦИИ
ТИП Форма(ТАБ_ФОРМА)
[
ПОДМЕНА файл = "Форма.ibf";
ПОДМЕНА до_открытия = {Заполнение};
ФУНКЦИЯ Тиражирование_разделов(ЦЕЛОЕ: количество)
ПЕРЕМ ЦЕЛОЕ: номерРаздел = 1
ПЕРЕМ ЦЕЛОЕ: поз = ПОЗ_РАЗДЕЛА("Место_работы")
ЦИКЛ ПОКА (номерРаздел < количество)
КОПИРОВАТЬ_РАЗДЕЛЫ(САМ, поз, поз, поз + 1, 1)
поз++
номерРаздел++
КОНЕЦ_ЦИКЛА
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ЛОГИКА: Заполнение
ПЕРЕМ ЦЕЛОЕ: количество = Кол_мест_работы
Тиражирование_разделов(количество)
ПЕРЕМ СТРОКА: гр = Гражданство
ПЕРЕМ ТФ_ЯЧЕЙКА: яч = [имя_раздела = "Общ_данные", идент = "гражданство"]
УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч,гр)
ЕСЛИ гр = "российское" ТО
УДАЛИТЬ_РАЗДЕЛ("Регистрация")
КОНЕЦ_ЕСЛИ
РЕЗУЛЬТАТ = ДА
КОНЕЦ_ФУНКЦИИ
]
ВЫЧИСЛИТЬ
ПЕРЕМ Форма: тф
// тф <- данные
тф.ПОКАЗАТЬ
КОНЕЦ