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

Использование комбинированного режима хранения данных

Комбинированный режим использования источника данных для таблицы задействует и внешний, и внутренний источники данных.

В случае использования комбинированного режима для хранения данных в индексном поле элементы, как правило, хранятся только заголовки столбцов, все остальное содержимое таблицы запрашивается из внешнего источника.

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

В примере ниже демонстрируется типичный вариант использования комбинированного режима, когда заголовки столбцов находятся во внутреннем источнике, а остальные данные во внешнем источнике. Внешний источник данных представлен переменной типа Товары, обработчик данные копирует данные из этой переменной в таблицу. Выражение (строка - элемент.кол_фикс_строк) в качестве индекса используется для предотвращения потери объектов при использовании многоуровнего заголовка в таблице.

Пример

ТИП Товары
[
  СТРОКА: название;
  ЧИСЛО: цена;
  СТРОКА: производитель;
    
  ФУНКЦИЯ Заполнение(ЦЕЛОЕ: номер)
    название = "ТОВАР_" + СТР(номер)
    цена = СЛУЧ_ЧИСЛО(500)
    производитель =  "Производитель_" + СТР(номер)
  КОНЕЦ_ФУНКЦИИ
]

ТИП Диалог_таб(ДИАЛОГ)
[
  ...
  ПОДМЕНА до_открытия = {Подготовка_данных};
  ...
  Товары: товар[];
  ТАБЛИЦА: Таблица1 = [ левый = 25,
                        верхний = 50,
                        ширина = 260,
                        высота = 125,
                        табиндекс = 1003,
                        размер_столбца = 50,
                        размер_строки = 20,
                        столбцы = ( 1: 76,
                                    3: 105 ),
                        элементы = ( 1, 1: "наименование",
                                     2, 1: "цена",
                                     3, 1: "Производитель" ),
                        данные = {Получение_данных} ];

  ФУНКЦИЯ Получение_данных(ПЕРЕМ ТАБЛИЦА: элемент; ЦЕЛОЕ: столбец; ЦЕЛОЕ: строка; ПЕРЕМ *: знач)
    ВЫБОР (столбец)
      #1: знач = товар[строка - элемент.кол_фикс_строк].название
      #2: знач = товар[строка - элемент.кол_фикс_строк].цена
      #3: знач = товар[строка - элемент.кол_фикс_строк].производитель
    КОНЕЦ_ВЫБОРА
  КОНЕЦ_ФУНКЦИИ
  
  ФУНКЦИЯ ЛОГИКА: Подготовка_данных
    РЕЗУЛЬТАТ = ДА
    ЦИКЛ ДЛЯ (и = 1 ,5)
      товар[и].Заполнение(и)
    КОНЕЦ_ЦИКЛА
  КОНЕЦ_ФУНКЦИИ
  ...
]

ВЫЧИСЛИТЬ
  ПЕРЕМ Диалог_таб: д
  // д <- данные
  ЕСЛИ д.ПОКАЗАТЬ_МОДАЛЬНЫЙ <> "" ТО
    // д -> данные
  КОНЕЦ_ЕСЛИ
КОНЕЦ

См. также: