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