Руководство разработчика

Многостраничная табличная форма с разной структурой

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

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

За добавление и удаление разделов в формируемую табличную форму отвечает некий параметр. К примеру, в качестве параметра будет выступать гражданство человека. Если гражданин имеет иностранное гражданство, в итоговой форме будет содержаться раздел с общей информацией, несколько разделов с данными о месте работе и регистраций, если у человека российское гражданство, в итоговой форме будет общий раздел и несколько разделов с данными о месте работе. В зависимости от гражданства будет формироваться табличная форма - раздел с регистрацией будет удаляться, а раздел с данными о месте работе будет копироваться.

В Редакторе форм проектируются три раздела : с общей информацией, информацией о месте работе и о регистрации, как показано ниже.

Тиражирование раздела осуществляется методом КОПИРОВАТЬ_РАЗДЕЛЫ. Так как копирование разделов происходит в пределах одной формы, то имена тиражируемых разделов формируются путем добавления к имени раздела чисел 1, 2, 3 и т.д. Удаление раздела производится методом УДАЛИТЬ_РАЗДЕЛ. Ниже указан листинг формирования табличной формы в зависимости от параметра - гражданства.

ФУНКЦИЯ ЦЕЛОЕ: Кол_мест_работы()
	РЕЗУЛЬТАТ = СЛУЧ_ЧИСЛО(5)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ СТРОКА: Гражданство()
	ПЕРЕМ ЦЕЛОЕ: гр = СЛУЧ_ЧИСЛО(2)
	ВЫБОР(гр)
		#1: РЕЗУЛЬТАТ = "российское"
		#0: РЕЗУЛЬТАТ = "иностранное"
	КОНЕЦ_ВЫБОРА
КОНЕЦ_ФУНКЦИИ

ТИП Форма(ТАБ_ФОРМА)
[
  ПОДМЕНА файл = "Форма.ibf";
  ПОДМЕНА до_открытия = {Заполнение};
 

  ФУНКЦИЯ Тиражирование_разделов(ЦЕЛОЕ: количество)
    ПЕРЕМ ЦЕЛОЕ: номерРаздел = 1
    ПЕРЕМ ЦЕЛОЕ: поз = ПОЗ_РАЗДЕЛА("Место_работы")
    ЦИКЛ ПОКА (номерРаздел < количество)
      КОПИРОВАТЬ_РАЗДЕЛЫ(САМ, поз, поз, поз + 1, 1)
      поз++
      номерРаздел++
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ФУНКЦИИ

  ФУНКЦИЯ ЛОГИКА: Заполнение 
    ПЕРЕМ ЦЕЛОЕ: количество = Кол_мест_работы
    Тиражирование_разделов(количество)
    ПЕРЕМ СТРОКА: гр = Гражданство
    ПЕРЕМ ТФ_ЯЧЕЙКА: яч = [имя_раздела = "Общ_данные", идент = "гражданство"]
    УСТ_ДАННЫЕ_ЯЧЕЙКИ(яч,гр) 
    ЕСЛИ гр = "российское" ТО
      УДАЛИТЬ_РАЗДЕЛ("Регистрация")
    КОНЕЦ_ЕСЛИ
    РЕЗУЛЬТАТ = ДА
  КОНЕЦ_ФУНКЦИИ
]

ВЫЧИСЛИТЬ
  ПЕРЕМ Форма: тф
  // тф <- данные
  тф.ПОКАЗАТЬ
КОНЕЦ

См. также: