Афина. Таблица в отчетах с неизвестным заранее количеством колонок
Часть 2. Программное объединение ячеек

К содержанию

   

В примере необходимо объединить несколько ячеек в одну:

  начальное состояние после объединения  
                      
   

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

функция Таблица1 : Строка
переменные

  число А, Гр;
  колонка(число) кГ, кЯ;
начало
 
Подготовка;
  ВстЭлемент(кГ, ВидовН); кГ(1) := 0;
  ВстЭлемент(кЯ, ВидовН); кЯ(1) := 10;
  цикл А от 1 до ВидовН-1 делать
    ДобавитьКолонкуЯч(А-1, 12, А);
    кГ(А+1) := А; кЯ(А+1) := 10;
  конец;
  Гр := ОбъединитьЯч(кГ, кЯ);

  цикл А от 1 до КоличествоСтрок(кУВид)-1 делать
    ДобавитьКолонкуЯч(А-1, 21, А);
  конец;
конец;

Массивы кГ и кЯ предназначены для того чтобы в них разместить "координаты" объединяемых ячеек.
Количество элементов в этих двух массивах должны быть одинаковыми (иначе при выполнении будет сгенерирована ошибка). Здесь функциями ВстЭлемент создается столько элементов в каждом массиве сколько есть видов начислений.
В результате (после выхода из первого цикла) в колонках должны быть следующие значения:

  в кГ (0, 1, 2); в кЯ (10, 10, 10), т.е. в функцию передаются ячейки с "координатами" [0,10], [1,10] и [2,10].

Функция ОбъединитьЯч вернет номер группы ячейки, которая получилась после объединения трех. Этот номер функцией создается автоматически и представляет собой максимальный номер группы существующий в ячейках таблицы на момент вызова функции увеличенный на единицу. В примере номер запоминается в локальной переменной Гр.

Номер ячейки, получившейся в результате объединения, присваивается из массива номеров ячеек передаваемых в качестве параметра (здесь кЯ) и берется из из первого элемента массива (10).

Так же как и ДобавитьКолонкуЯч функция ОбъединитьЯч может применятся только в функции "привязанной" к таблице отчета.

   

 

Часть 3. Способы вывода данных в ячейках, созданных программно.

Достроим функцию "Таблица1" до конца:

функция Таблица1 : Строка
переменные
  число А, Гр;
  колонка(число) кГ, кЯ;
начало
 
Подготовка;
  ВстЭлемент(кГ, ВидовН); кГ(1) := 0;
  ВстЭлемент(кЯ, ВидовН); кЯ(1) := 10;
  ПечатьВЯч(0, 11, 0, кНВид(1));  !заголовок первого начисления (группа 0, ячейка 11)
  цикл А от 1 до ВидовН-1 делать
    ДобавитьКолонкуЯч(А-1, 12, А);
    ПечатьВЯч(А, 11, 0, кНВид(А+1));  !заголовки последующих начислений
    кГ(А+1) := А; кЯ(А+1) := 10;
  конец;
  Гр := ОбъединитьЯч(кГ, кЯ);
  ПечатьВЯч(Гр, 10, 0, "Н а ч и с л е н и я");

  ОчиститьТаблицу(кГ); ВстЭлемент(кГ, ВидовУ); кГ(1) := 0;
  ОчиститьТаблицу(кЯ); ВстЭлемент(кЯ, ВидовУ); кЯ(1) := 20;

  ПечатьВЯч(0, 21, 0, кУВид(1)); !заголовок первого удержания (группа 0, ячейка 21)
  цикл А от 1 до ВидовУ-1 делать
    ДобавитьКолонкуЯч(А-1, 22, А);
    кГ(А+1) := А;
    кЯ(А+1) := 20;
    ПечатьВЯч(А, 21, 0, кУВид(А+1)); !заголовки следующих удержаний
    ПечатьВЯч(А, 22, 1, "ЯчейкаУдерж", 2);
  конец;
  Гр := ОбъединитьЯч(кГ, кЯ);
  ПечатьВЯч(Гр, 20, 0, "У д е р ж а н и я");

  выход ""
конец
 

Здесь появляется еще одна встроенная функция ПечатьВЯч, которая предназначена для печати (лучше сказать: для вставки) текста в ячейки.
Первые два параметра служат тем же целям что и в функции ДобавитьКолонкуЯч, т.е. для поиска ячейки с "координатами", переданных в этих параметрах.

Третий параметр указывает тип ячейки и может принимать два значения. 0 - тип ячейки "Текст", 1 - тип ячейки "Поле". Отличие между ними в том, что при печати Текст выводится ячейкой в том виде в каком в нее сохранен; Поле указывает, что текст в ячейке является наименованием функции и для того чтобы вывести какой либо текст в ячейке вначале выполняется функция с этим именем, которая затем возвращает  выводимый текст.

Четвертый параметр - непосредственно текст (строка), который и помещается в ячейку и, как замечено, может быть текстом (в приведенном коде - это все вызовы функции кроме предпоследнего) или наименованием функции (предпоследний вызов:  ПечатьВЯч(А, 22, 1, "ЯчейкаУдерж", 2);)

Пятый и шестой параметры (могут не указываться) необходимы, если требуется выравнить выводимый в ячейке текст по горизонтали (пятый параметр) и/или по вертикали (последней параметр).
По умолчанию горизонтальное выравнивание по центру, вертикальное - так же по центру.

Таким образом, есть два способа вывода данных в ячейки при печати: первый - передать через функцию ПечатьВЯч тот текст, который и будет выведен, второй - передать имя функции, которая будет формировать выводимый текст.
При втором способе нужно такую функцию описать (не может быть именем встроенной функции) здесь же в редакторе функций отчета.

Если на этом пока остановиться и попытаться напечатать отчет, то должно получиться так:

Остается заполнить таблицу информацией по колонкам и строкам.

 

  Часть 4. Вывод данных
   
  К содержанию